From 21671975ecd1a92e6397eb284db48d07e31ca2ab Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Sun, 11 Jun 2023 15:35:09 +0200 Subject: [PATCH 01/82] ovl_En_Snowwd decompiled (#1276) * ovl_En_Snowwd decompiled * formatting * improved * improvements * D_80AF7AC8 * params * D_06001AA0 * improvements --- assets/xml/objects/object_snowwd.xml | 4 +- spec | 3 +- .../actors/ovl_En_Snowwd/z_en_snowwd.c | 108 +++++++++++++++--- .../actors/ovl_En_Snowwd/z_en_snowwd.h | 5 +- 4 files changed, 102 insertions(+), 18 deletions(-) diff --git a/assets/xml/objects/object_snowwd.xml b/assets/xml/objects/object_snowwd.xml index c61d07beb..b969a70f5 100644 --- a/assets/xml/objects/object_snowwd.xml +++ b/assets/xml/objects/object_snowwd.xml @@ -2,8 +2,8 @@ - + - + diff --git a/spec b/spec index b1468144e..6cbde939c 100644 --- a/spec +++ b/spec @@ -3481,8 +3481,7 @@ beginseg name "ovl_En_Snowwd" compress include "build/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.o" - include "build/data/ovl_En_Snowwd/ovl_En_Snowwd.data.o" - include "build/data/ovl_En_Snowwd/ovl_En_Snowwd.reloc.o" + include "build/src/overlays/actors/ovl_En_Snowwd/ovl_En_Snowwd_reloc.o" endseg beginseg 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 48a1cfea0..73e5ea37f 100644 --- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c +++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c @@ -5,6 +5,7 @@ */ #include "z_en_snowwd.h" +#include "objects/object_snowwd/object_snowwd.h" #define FLAGS 0x00000000 @@ -17,7 +18,6 @@ void EnSnowwd_Draw(Actor* thisx, PlayState* play); void func_80AF76F0(EnSnowwd* this, PlayState* play); -#if 0 ActorInit En_Snowwd_InitVars = { ACTOR_EN_SNOWWD, ACTORCAT_PROP, @@ -30,25 +30,107 @@ ActorInit En_Snowwd_InitVars = { (ActorFunc)EnSnowwd_Draw, }; -// static ColliderCylinderInit sCylinderInit = { -static ColliderCylinderInit D_80AF7A90 = { - { COLTYPE_TREE, AT_NONE, AC_ON | AC_HARD | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, }, - { ELEMTYPE_UNK5, { 0x00000000, 0x00, 0x00 }, { 0x0100020A, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, }, +static ColliderCylinderInit sCylinderInit = { + { + COLTYPE_TREE, + AT_NONE, + AC_ON | AC_HARD | AC_TYPE_PLAYER, + OC1_ON | OC1_TYPE_ALL, + OC2_TYPE_1, + COLSHAPE_CYLINDER, + }, + { + ELEMTYPE_UNK5, + { 0x00000000, 0x00, 0x00 }, + { 0x0100020A, 0x00, 0x00 }, + TOUCH_NONE | TOUCH_SFX_NORMAL, + BUMP_ON, + OCELEM_ON, + }, { 18, 60, 0, { 0, 0, 0 } }, }; -#endif +Vec3f D_80AF7ABC = { 0.0f, 0.0f, 0.0f }; -extern ColliderCylinderInit D_80AF7A90; +Vec3f D_80AF7AC8 = { 0.0f, -4.0f, 0.0f }; -extern UNK_TYPE D_06001AA0; +Color_RGBA8 D_80AF7AD4 = { 255, 255, 255, 255 }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/EnSnowwd_Init.s") +Color_RGBA8 D_80AF7AD8 = { 200, 200, 220, 0 }; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/EnSnowwd_Destroy.s") +void EnSnowwd_Init(Actor* thisx, PlayState* play) { + EnSnowwd* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/func_80AF76F0.s") + this->actor.home.rot.z = 0; + this->actor.home.rot.y = 0; + this->unk190 = 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; +} -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/EnSnowwd_Update.s") +void EnSnowwd_Destroy(Actor* thisx, PlayState* play) { + EnSnowwd* this = THIS; -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Snowwd/EnSnowwd_Draw.s") + Collider_DestroyCylinder(play, &this->collider); +} + +void func_80AF76F0(EnSnowwd* this, PlayState* play) { + s32 pad; + Actor* thisx = &this->actor; + f32 sp54; + Vec3f sp48; + + 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; + 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); + } + thisx->home.rot.z = 1; + } + } + if (thisx->xzDistToPlayer < 600.0f) { + Collider_UpdateCylinder(thisx, &this->collider); + 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); + } +} + +void EnSnowwd_Update(Actor* thisx, PlayState* play) { + EnSnowwd* this = THIS; + + this->actionFunc(this, play); +} + +void EnSnowwd_Draw(Actor* thisx, PlayState* play) { + OPEN_DISPS(play->state.gfxCtx); + + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + Gfx_SetupDL25_Opa(play->state.gfxCtx); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(object_snowwd_Tex_001AA0)); + gSPDisplayList(POLY_OPA_DISP++, object_snowwd_DL_000198); + + CLOSE_DISPS(play->state.gfxCtx); +} 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 a83e5d05a..d336cb252 100644 --- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h +++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.h @@ -3,13 +3,16 @@ #include "global.h" +#define SNOWWD_GET_PARAM_F80(thisx) (((thisx)->params & 0xF80) >> 7) + struct EnSnowwd; typedef void (*EnSnowwdActionFunc)(struct EnSnowwd*, PlayState*); typedef struct EnSnowwd { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x50]; + /* 0x144 */ ColliderCylinder collider; + /* 0x190 */ s16 unk190; /* 0x194 */ EnSnowwdActionFunc actionFunc; } EnSnowwd; // size = 0x198 From 196f9dba522aa519e6464766b60ccc2ac70de11d Mon Sep 17 00:00:00 2001 From: StickyThwomp <89738536+StickyThwomp@users.noreply.github.com> Date: Mon, 12 Jun 2023 11:57:33 -0500 Subject: [PATCH 02/82] EnSw OK (#1283) * EnSw OK Decompiled the last remaining function. * Update src/overlays/actors/ovl_En_Sw/z_en_sw.c Add FAKE comment. Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com> --------- Co-authored-by: Isghj <42048411+isghj5@users.noreply.github.com> --- spec | 6 +----- src/overlays/actors/ovl_En_Sw/z_en_sw.c | 9 +++------ 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/spec b/spec index 6cbde939c..a7b3ee5dc 100644 --- a/spec +++ b/spec @@ -1107,11 +1107,7 @@ beginseg name "ovl_En_Sw" compress include "build/src/overlays/actors/ovl_En_Sw/z_en_sw.o" - #ifdef NON_MATCHING - include "build/src/overlays/actors/ovl_En_Sw/ovl_En_Sw_reloc.o" - #else - include "build/data/ovl_En_Sw/ovl_En_Sw.reloc.o" - #endif + include "build/src/overlays/actors/ovl_En_Sw/ovl_En_Sw_reloc.o" endseg beginseg 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 ca15e4864..2f32734a4 100644 --- a/src/overlays/actors/ovl_En_Sw/z_en_sw.c +++ b/src/overlays/actors/ovl_En_Sw/z_en_sw.c @@ -358,7 +358,6 @@ s32 func_808D9440(PlayState* play, Vec3f* posA, Vec3f* posB, Vec3f* posResult, C return ret; } -#ifdef NON_MATCHING void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) { CollisionPoly* spA4; CollisionPoly* spA0; @@ -412,7 +411,6 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) { for (i = 0; i < 3; i++) { if (i == 0) { - if (this && this && this) {} sp84.x = sp90.x - (this->unk_350.x * temp_f20); sp84.y = sp90.y - (this->unk_350.y * temp_f20); sp84.z = sp90.z - (this->unk_350.z * temp_f20); @@ -433,6 +431,9 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) { break; } } + + //! FAKE + if (i == 3) {} } func_808D93BC(this); @@ -448,10 +449,6 @@ void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4) { Actor_MoveWithoutGravity(&this->actor); } } -#else -void func_808D94D0(EnSw* this, PlayState* play, s32 arg2, s32 arg3, s16 arg4); -#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Sw/func_808D94D0.s") -#endif void func_808D9894(EnSw* this, Vec3f* vec) { Vec3f sp5C; From bc632ac931ea071988bee2a7ca58ddbbeeceb8d3 Mon Sep 17 00:00:00 2001 From: Derek Hensley Date: Wed, 14 Jun 2023 07:27:34 -0700 Subject: [PATCH 03/82] Update link (#1291) --- docs/tools.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/tools.md b/docs/tools.md index 5005f7f93..e190fe0a3 100644 --- a/docs/tools.md +++ b/docs/tools.md @@ -273,7 +273,7 @@ Probably the best of the Nintendo 64 texture viewing programs. It is quite simpl ### Z64Utils -Basically essential for convenient analysis of object files. Can analyse and display DisplayLists, some textures, skeletons, animations, and a few other resources. Download from . +Basically essential for convenient analysis of object files. Can analyse and display DisplayLists, some textures, skeletons, animations, and a few other resources. Download from . ## Retired tools From 491870c3554dd5c8bdeb7e3893bdb8618730af53 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sat, 17 Jun 2023 15:22:41 +1000 Subject: [PATCH 04/82] Misc Cleanup 5 (#1294) * quick cleanup * a few more * more * misc cleanup * PR Suggestion --- src/audio/lib/effects.c | 2 +- src/audio/lib/load.c | 69 ++-- src/audio/lib/playback.c | 3 + src/code/z_eff_tire_mark.c | 3 +- src/code/z_parameter.c | 6 +- .../z_bg_dblue_waterfall.c | 1 + .../ovl_Bg_Hakugin_Post/z_bg_hakugin_post.c | 4 +- .../ovl_Bg_Last_Bwall/z_bg_last_bwall.c | 4 +- src/overlays/actors/ovl_En_Am/z_en_am.c | 2 +- src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c | 9 +- src/overlays/actors/ovl_En_Crow/z_en_crow.c | 4 +- .../actors/ovl_En_Elforg/z_en_elforg.c | 10 +- src/overlays/actors/ovl_En_Famos/z_en_famos.c | 2 +- src/overlays/actors/ovl_En_Fz/z_en_fz.c | 2 +- src/overlays/actors/ovl_En_Gk/z_en_gk.c | 5 +- .../actors/ovl_En_Hanabi/z_en_hanabi.c | 63 ++-- .../z_en_horse_link_child.c | 2 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 1 - .../actors/ovl_En_Kanban/z_en_kanban.c | 2 +- src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c | 2 +- src/overlays/actors/ovl_En_Mkk/z_en_mkk.c | 2 +- .../actors/ovl_En_Nutsball/z_en_nutsball.c | 2 +- src/overlays/actors/ovl_En_Osk/z_en_osk.c | 2 +- src/overlays/actors/ovl_En_Ot/z_en_ot.c | 29 +- src/overlays/actors/ovl_En_Owl/z_en_owl.c | 316 ++++++++++-------- src/overlays/actors/ovl_En_Slime/z_en_slime.c | 4 +- src/overlays/actors/ovl_En_Test7/z_en_test7.c | 9 +- src/overlays/actors/ovl_En_Wiz/z_en_wiz.c | 4 +- .../actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c | 2 +- .../actors/ovl_Obj_Switch/z_obj_switch.c | 2 +- .../actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c | 2 +- 31 files changed, 314 insertions(+), 256 deletions(-) diff --git a/src/audio/lib/effects.c b/src/audio/lib/effects.c index 6ef8added..580b7fd22 100644 --- a/src/audio/lib/effects.c +++ b/src/audio/lib/effects.c @@ -10,7 +10,7 @@ void AudioEffects_SequenceChannelProcessSound(SequenceChannel* channel, s32 reca if (channel->seqPlayer->muted && (channel->muteFlags & MUTE_FLAGS_SOFTEN)) { channelVolume = channel->seqPlayer->muteVolumeScale * channelVolume; } - channel->appliedVolume = channelVolume * channelVolume; + channel->appliedVolume = SQ(channelVolume); } if (channel->changes.s.pan) { diff --git a/src/audio/lib/load.c b/src/audio/lib/load.c index 8016e9b6a..af9de1cd1 100644 --- a/src/audio/lib/load.c +++ b/src/audio/lib/load.c @@ -884,7 +884,6 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample // The first u32 in fontData is an offset to a list of offsets to the drums soundListOffset = fontData[0]; - if (1) {} // If the soundFont has drums if ((soundListOffset != 0) && (numDrums != 0)) { @@ -897,20 +896,23 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample soundOffset = ((Drum**)fontData[0])[i]; // Some drum data entries are empty, represented by an offset of 0 in the list of drum offsets - if (soundOffset != 0) { - soundOffset = RELOC_TO_RAM(soundOffset); - ((Drum**)fontData[0])[i] = drum = soundOffset; - - // The drum may be in the list multiple times and already relocated - if (!drum->isRelocated) { - AudioLoad_RelocateSample(&drum->tunedSample, fontDataStartAddr, sampleBankReloc); - - soundOffset = drum->envelope; - drum->envelope = RELOC_TO_RAM(soundOffset); - - drum->isRelocated = true; - } + if (soundOffset == 0) { + continue; } + soundOffset = RELOC_TO_RAM(soundOffset); + ((Drum**)fontData[0])[i] = drum = soundOffset; + + // The drum may be in the list multiple times and already relocated + if (drum->isRelocated) { + continue; + } + + AudioLoad_RelocateSample(&drum->tunedSample, fontDataStartAddr, sampleBankReloc); + + soundOffset = drum->envelope; + drum->envelope = RELOC_TO_RAM(soundOffset); + + drum->isRelocated = true; } } @@ -918,7 +920,6 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample // The second u32 in fontData is an offset to the first sound effect entry soundListOffset = fontData[1]; - if (1) {} // If the soundFont has sound effects if ((soundListOffset != 0) && (numSfx != 0)) { @@ -932,9 +933,11 @@ void AudioLoad_RelocateFont(s32 fontId, SoundFontData* fontDataStartAddr, Sample soundEffect = (SoundEffect*)soundOffset; // Check for NULL (note: the pointer is guaranteed to be in fontData and can never be NULL) - if ((soundEffect != NULL) && (soundEffect->tunedSample.sample != NULL)) { - AudioLoad_RelocateSample(&soundEffect->tunedSample, fontDataStartAddr, sampleBankReloc); + if ((soundEffect == NULL) || (soundEffect->tunedSample.sample == NULL)) { + continue; } + + AudioLoad_RelocateSample(&soundEffect->tunedSample, fontDataStartAddr, sampleBankReloc); } } @@ -1643,9 +1646,11 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) { case SEQUENCE_TABLE: AudioLoad_SetSeqLoadStatus(ASYNC_ID(retMsg), ASYNC_STATUS(retMsg)); break; + case SAMPLE_TABLE: AudioLoad_SetSampleFontLoadStatusAndApplyCaches(ASYNC_ID(retMsg), ASYNC_STATUS(retMsg)); break; + case FONT_TABLE: fontId = ASYNC_ID(retMsg); sampleBankId1 = gAudioCtx.soundFontList[fontId].sampleBankId1; @@ -1659,6 +1664,9 @@ void AudioLoad_FinishAsyncLoad(AudioAsyncLoad* asyncLoad) { AudioLoad_SetFontLoadStatus(fontId, ASYNC_STATUS(retMsg)); AudioLoad_RelocateFontAndPreloadSamples(fontId, asyncLoad->ramAddr, &sampleBankReloc, true); break; + + default: + break; } doneMsg = asyncLoad->retMsg; @@ -2002,24 +2010,29 @@ s32 AudioLoad_GetSamplesForFont(s32 fontId, Sample** sampleSet) { for (i = 0; i < numDrums; i++) { Drum* drum = AudioPlayback_GetDrum(fontId, i); - if (1) {} - if (drum != NULL) { - numSamples = AudioLoad_AddToSampleSet(drum->tunedSample.sample, numSamples, sampleSet); + if (drum == NULL) { + continue; } + + numSamples = AudioLoad_AddToSampleSet(drum->tunedSample.sample, numSamples, sampleSet); } for (i = 0; i < numInstruments; i++) { Instrument* instrument = AudioPlayback_GetInstrumentInner(fontId, i); - if (instrument != NULL) { - if (instrument->normalRangeLo != 0) { - numSamples = AudioLoad_AddToSampleSet(instrument->lowPitchTunedSample.sample, numSamples, sampleSet); - } - if (instrument->normalRangeHi != 0x7F) { - numSamples = AudioLoad_AddToSampleSet(instrument->highPitchTunedSample.sample, numSamples, sampleSet); - } - numSamples = AudioLoad_AddToSampleSet(instrument->normalPitchTunedSample.sample, numSamples, sampleSet); + if (instrument == NULL) { + continue; } + + if (instrument->normalRangeLo != 0) { + numSamples = AudioLoad_AddToSampleSet(instrument->lowPitchTunedSample.sample, numSamples, sampleSet); + } + + if (instrument->normalRangeHi != 0x7F) { + numSamples = AudioLoad_AddToSampleSet(instrument->highPitchTunedSample.sample, numSamples, sampleSet); + } + + numSamples = AudioLoad_AddToSampleSet(instrument->normalPitchTunedSample.sample, numSamples, sampleSet); } // Should really also process sfx, but this method is never called diff --git a/src/audio/lib/playback.c b/src/audio/lib/playback.c index 678e01089..a626645c5 100644 --- a/src/audio/lib/playback.c +++ b/src/audio/lib/playback.c @@ -83,6 +83,9 @@ void AudioPlayback_InitSampleState(Note* note, NoteSampleState* sampleState, Not sampleState->bitField0.strongRight = stereoData.strongRight ^ strongRight; sampleState->bitField0.strongLeft = stereoData.strongLeft ^ strongLeft; break; + + default: + break; } } else if (gAudioCtx.soundMode == SOUNDMODE_MONO) { diff --git a/src/code/z_eff_tire_mark.c b/src/code/z_eff_tire_mark.c index d14d6926c..55c15714e 100644 --- a/src/code/z_eff_tire_mark.c +++ b/src/code/z_eff_tire_mark.c @@ -80,7 +80,8 @@ void func_800AE930(CollisionContext* colCtx, EffectTireMark* this, Vec3f* pos, f spAC->flags |= 1; } - if (spA8) {} // Necessary to match + //! FAKE: + if (spA8) {} spA8 = &this->elements[this->numElements]; spA8->flags = 0; diff --git a/src/code/z_parameter.c b/src/code/z_parameter.c index e63c9d8e5..ae535dc9b 100644 --- a/src/code/z_parameter.c +++ b/src/code/z_parameter.c @@ -6606,7 +6606,7 @@ void Interface_Update(PlayState* play) { case HUD_VISIBILITY_NONE: case HUD_VISIBILITY_NONE_ALT: case HUD_VISIBILITY_B: - dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5); + dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32); if (dimmingAlpha < 0) { dimmingAlpha = 0; } @@ -6637,7 +6637,7 @@ void Interface_Update(PlayState* play) { case HUD_VISIBILITY_B_MAGIC: case HUD_VISIBILITY_A_B: case HUD_VISIBILITY_A_B_HEARTS_MAGIC_MINIMAP: - dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5); + dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32); if (dimmingAlpha < 0) { dimmingAlpha = 0; } @@ -6650,7 +6650,7 @@ void Interface_Update(PlayState* play) { break; case HUD_VISIBILITY_ALL: - dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer << 5); + dimmingAlpha = 255 - (gSaveContext.hudVisibilityTimer * 32); if (dimmingAlpha < 0) { dimmingAlpha = 0; } 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 d0d0f0c3c..10ad49d9b 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 @@ -320,6 +320,7 @@ void func_80B84610(BgDblueWaterfall* this, PlayState* play) { player->actor.world.pos.x += sp34.x; player->actor.world.pos.z += sp34.z; + //! FAKE: if (this && this && this) {} player->pushedSpeed = 8.0f; player->pushedYaw = this->actor.yawTowardsPlayer; 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 66666b82b..f85015ea9 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 @@ -829,7 +829,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) { for (i = 0; i < D_80A9E028.count; i++) { collider = D_80A9E028.unk_0000[i].collider; - if ((collider != NULL) && (collider->base.acFlags & AT_HIT) && (D_80A9E028.unk_0000[i].unk_34 == 1)) { + if ((collider != NULL) && (collider->base.acFlags & AC_HIT) && (D_80A9E028.unk_0000[i].unk_34 == 1)) { temp_f2 = this->unk_16C; yDiff = ABS_ALT(BINANG_SUB(this->dyna.actor.yawTowardsPlayer, player->actor.shape.rot.y)); temp_f0 = temp_f2 + D_80A9E028.unk_0000[i].unk_14.y; @@ -853,7 +853,7 @@ void func_80A9CE1C(BgHakuginPost* this, PlayState* play) { for (i = 0; i < D_80A9E028.count; i++) { collider = D_80A9E028.unk_0000[i].collider; if (collider != NULL) { - collider->base.acFlags &= ~AT_HIT; + collider->base.acFlags &= ~AC_HIT; } } 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 6085a93a2..a09c0fb02 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 @@ -225,8 +225,8 @@ void func_80C187E4(BgLastBwall* this) { } void func_80C187F8(BgLastBwall* this, PlayState* play) { - if (this->colliderTris.base.acFlags & 2) { - this->colliderTris.base.acFlags &= ~2; + if (this->colliderTris.base.acFlags & AC_HIT) { + this->colliderTris.base.acFlags &= ~AC_HIT; Flags_SetSwitch(play, BGLASTBWALL_GET_SWITCHFLAGS(&this->dyna.actor)); func_80C1886C(this, play); } else { 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 30775584b..a5b3f91d6 100644 --- a/src/overlays/actors/ovl_En_Am/z_en_am.c +++ b/src/overlays/actors/ovl_En_Am/z_en_am.c @@ -521,7 +521,7 @@ void EnAm_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->enemyCollider.base); } CollisionCheck_SetAC(play, &play->colChkCtx, &this->interactCollider.base); - if (this->enemyCollider.base.atFlags & AC_ON) { + if (this->enemyCollider.base.atFlags & AT_ON) { this->actor.flags |= ACTOR_FLAG_1000000; CollisionCheck_SetAT(play, &play->colChkCtx, &this->enemyCollider.base); } 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 762141ed4..056ca97d5 100644 --- a/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c +++ b/src/overlays/actors/ovl_En_Bigpo/z_en_bigpo.c @@ -688,21 +688,20 @@ void EnBigpo_BurnAwayDeath(EnBigpo* this, PlayState* play) { if (this->idleTimer < 8) { camYaw = Camera_GetCamDirYaw(GET_ACTIVE_CAM(play)) + 0x4800; if (this->idleTimer < 5) { - unkTemp = (this->idleTimer << 0xC) - 0x4000; - // 1.4.0...1 is NOT 1.4, the rodata demands it - tempVec.y = (((Math_SinS(unkTemp) * 23.0f) + 40.0f) * 1.4000001f) + this->actor.world.pos.y; + unkTemp = (this->idleTimer * 0x1000) - 0x4000; + tempVec.y = (((Math_SinS(unkTemp) * 23.0f) + 40.0f) * (1400.0f * 0.001f)) + this->actor.world.pos.y; unkTemp2 = Math_CosS(unkTemp) * 32.2f; tempVec.x = (Math_SinS(camYaw) * unkTemp2) + this->actor.world.pos.x; tempVec.z = (Math_CosS(camYaw) * unkTemp2) + this->actor.world.pos.z; } else { - tempVec.y = this->actor.world.pos.y + ((40.0f + (15.0f * (this->idleTimer - 5))) * 1.4000001f); + tempVec.y = this->actor.world.pos.y + ((40.0f + (15.0f * (this->idleTimer - 5))) * (1400.0f * 0.001f)); tempVec.x = (Math_SinS(camYaw) * 32.2f) + this->actor.world.pos.x; tempVec.z = (Math_CosS(camYaw) * 32.2f) + this->actor.world.pos.z; } // not sure what we're turning this into, but its based on the timer - modifiedTimer = ((f32)((this->idleTimer * 10) + 80) * 1.4000001f); + modifiedTimer = ((this->idleTimer * 10) + 80) * (1400.0f * 0.001f); func_800B3030(play, &tempVec, &D_80B6506C, &gZeroVec3f, modifiedTimer, 0, 2); tempVec.x = (2.0f * this->actor.world.pos.x) - tempVec.x; tempVec.z = (2.0f * this->actor.world.pos.z) - tempVec.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 35e6d8437..bad5f5e0f 100644 --- a/src/overlays/actors/ovl_En_Crow/z_en_crow.c +++ b/src/overlays/actors/ovl_En_Crow/z_en_crow.c @@ -465,8 +465,8 @@ void EnCrow_Respawn(EnCrow* this, PlayState* play) { } void EnCrow_UpdateDamage(EnCrow* this, PlayState* play) { - if (this->collider.base.acFlags & AT_HIT) { - this->collider.base.acFlags &= ~AT_HIT; + if (this->collider.base.acFlags & AC_HIT) { + this->collider.base.acFlags &= ~AC_HIT; Actor_SetDropFlag(&this->actor, &this->collider.elements->info); if (this->actor.colChkInfo.damageEffect == GUAY_DMGEFF_STUN) { 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 9b65ae2a6..5c3e33550 100644 --- a/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c +++ b/src/overlays/actors/ovl_En_Elforg/z_en_elforg.c @@ -216,7 +216,7 @@ void EnElforg_MoveToTargetFairyFountain(EnElforg* this, Vec3f* homePos) { s16 angleAdjustment; s16 targetAngle; - this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer << 9); + this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer * 0x200); EnElforg_ApproachTargetYPosition(this, homePos); xDifference = this->actor.world.pos.x - homePos->x; zDifference = this->actor.world.pos.z - homePos->z; @@ -245,7 +245,7 @@ void EnElforg_MoveToTargetFairyFountain(EnElforg* this, Vec3f* homePos) { void EnElforg_MoveToTarget(EnElforg* this, Vec3f* targetPos) { s16 targetAngle; - this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer << 9); + this->actor.shape.yOffset += 100.0f * Math_SinS(this->timer * 0x200); EnElforg_ApproachTargetYPosition(this, targetPos); targetAngle = Math_Atan2S_XY(-(this->actor.world.pos.z - targetPos->z), -(this->actor.world.pos.x - targetPos->x)); @@ -273,7 +273,7 @@ void EnElforg_TrappedByBubble(EnElforg* this, PlayState* play) { EnElforg_InitializeParams(this); this->actionFunc = EnElforg_FreeFloating; } else { - this->actor.shape.yOffset += 10.0f * Math_SinS(this->timer << 9); + this->actor.shape.yOffset += 10.0f * Math_SinS(this->timer * 0x200); this->actor.world.pos = this->actor.parent->world.pos; this->actor.world.pos.y += 12.0f; } @@ -391,8 +391,8 @@ void EnElforg_CirclePlayer(EnElforg* this, PlayState* play) { distanceFromPlayer = 20.0f; } - this->actor.world.pos.x = (Math_SinS(this->timer << 12) * distanceFromPlayer) + playerActor->world.pos.x; - this->actor.world.pos.z = (Math_CosS(this->timer << 12) * distanceFromPlayer) + playerActor->world.pos.z; + 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.y = player->bodyPartsPos[PLAYER_BODYPART_WAIST].y; EnElforg_SpawnSparkles(this, play, 16); } 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 269866ff0..efccfb9d9 100644 --- a/src/overlays/actors/ovl_En_Famos/z_en_famos.c +++ b/src/overlays/actors/ovl_En_Famos/z_en_famos.c @@ -788,7 +788,7 @@ void EnFamos_Update(Actor* thisx, PlayState* play) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->emblemCollider.base); } - if (this->collider2.base.atFlags & AC_ON) { + if (this->collider2.base.atFlags & AT_ON) { Collider_UpdateCylinder(&this->actor, &this->collider2); this->collider2.dim.pos.y = this->actor.floorHeight; CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider2.base); 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 71f980d47..00b54400d 100644 --- a/src/overlays/actors/ovl_En_Fz/z_en_fz.c +++ b/src/overlays/actors/ovl_En_Fz/z_en_fz.c @@ -401,7 +401,7 @@ void func_80932C98(EnFz* this, PlayState* play) { } if (this->unk_BCE != 0) { - if (ENFZ_GET_8000(&this->actor) && (this->collider1.base.atFlags & AC_HIT)) { + if (ENFZ_GET_8000(&this->actor) && (this->collider1.base.atFlags & AT_HIT)) { this->unk_BCD = 0; this->unk_BBC = 0.0f; this->collider1.base.acFlags &= ~AC_HIT; 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 1db4d7c5b..8697f5d74 100644 --- a/src/overlays/actors/ovl_En_Gk/z_en_gk.c +++ b/src/overlays/actors/ovl_En_Gk/z_en_gk.c @@ -534,8 +534,6 @@ void func_80B51510(EnGk* this, PlayState* play) { s32 pad; s32 cueChannel; - if (this) {} - if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_479)) { cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_479); @@ -577,6 +575,9 @@ void func_80B51510(EnGk* this, PlayState* play) { case 7: Flags_SetSwitch(play, ENGK_GET_3F00(&this->actor)); break; + + default: + break; } Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, this->unk_31A); } 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 4294a8320..091525ce0 100644 --- a/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c +++ b/src/overlays/actors/ovl_En_Hanabi/z_en_hanabi.c @@ -149,40 +149,41 @@ void func_80B22FA8(EnHanabiStruct* arg0, PlayState* play2) { gSPDisplayList(POLY_XLU_DISP++, gSunSparkleMaterialDL); sp53 = 0xFF; - if (sp53) {} for (i = 0; i < 400; i++, arg0++) { - if (arg0->unk_00 == 1) { - Matrix_Translate(arg0->unk_08.x, arg0->unk_08.y, arg0->unk_08.z, MTXMODE_NEW); - Matrix_ReplaceRotation(&play->billboardMtxF); - if (arg0->unk_01 < 40) { - Matrix_Scale(arg0->unk_04 * 0.025f * arg0->unk_01, arg0->unk_04 * 0.025f * arg0->unk_01, 1.0f, - MTXMODE_APPLY); - } else { - Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY); - } - Matrix_RotateZS(play->gameplayFrames * 4864, MTXMODE_APPLY); - - gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - - if (sp53 != arg0->unk_02) { - gDPPipeSync(POLY_XLU_DISP++); - gDPSetEnvColor(POLY_XLU_DISP++, D_80B23C40[arg0->unk_02], D_80B23C40[arg0->unk_02 + 1], - D_80B23C40[arg0->unk_02 + 2], 255); - - sp53 = arg0->unk_02; - } - - if (arg0->unk_01 < 6) { - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80B23C2C[arg0->unk_02], D_80B23C2C[arg0->unk_02 + 1], - D_80B23C2C[arg0->unk_02 + 2], arg0->unk_01 * 50); - } else { - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80B23C2C[arg0->unk_02], D_80B23C2C[arg0->unk_02 + 1], - D_80B23C2C[arg0->unk_02 + 2], 255); - } - - gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL); + if (arg0->unk_00 != 1) { + continue; } + + Matrix_Translate(arg0->unk_08.x, arg0->unk_08.y, arg0->unk_08.z, MTXMODE_NEW); + Matrix_ReplaceRotation(&play->billboardMtxF); + if (arg0->unk_01 < 40) { + Matrix_Scale(arg0->unk_04 * 0.025f * arg0->unk_01, arg0->unk_04 * 0.025f * arg0->unk_01, 1.0f, + MTXMODE_APPLY); + } else { + Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY); + } + Matrix_RotateZS(play->gameplayFrames * 4864, MTXMODE_APPLY); + + gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + + if (sp53 != arg0->unk_02) { + gDPPipeSync(POLY_XLU_DISP++); + gDPSetEnvColor(POLY_XLU_DISP++, D_80B23C40[arg0->unk_02], D_80B23C40[arg0->unk_02 + 1], + D_80B23C40[arg0->unk_02 + 2], 255); + + sp53 = arg0->unk_02; + } + + if (arg0->unk_01 < 6) { + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80B23C2C[arg0->unk_02], D_80B23C2C[arg0->unk_02 + 1], + D_80B23C2C[arg0->unk_02 + 2], arg0->unk_01 * 50); + } else { + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, D_80B23C2C[arg0->unk_02], D_80B23C2C[arg0->unk_02 + 1], + D_80B23C2C[arg0->unk_02 + 2], 255); + } + + gSPDisplayList(POLY_XLU_DISP++, gSunSparkleModelDL); } CLOSE_DISPS(gfxCtx); 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 0217e8fa8..5079e1a57 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 @@ -315,7 +315,7 @@ void func_808DF088(EnHorseLinkChild* this, PlayState* play) { } else { phi_v0 = -1; } - sp32 += (phi_v0 << 0xE); + sp32 += (phi_v0 * 0x4000); } else { sp32 = Math_Vec3f_Yaw(&this->actor.world.pos, &this->actor.home.pos) - this->actor.world.rot.y; } 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 fc8d3d201..918588326 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -621,7 +621,6 @@ void EnKakasi_TeachingSong(EnKakasi* this, PlayState* play) { this->unkCounter1A4 = 0; CutsceneManager_Stop(this->csIdList[0]); Actor_PlaySfx(&this->picto.actor, NA_SE_EN_YASE_DEAD); - if (this) {} this->unkState196 = 2; this->subCamId = SUB_CAM_ID_DONE; this->picto.actor.textId = 0x1647; 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 ff7e4bb08..b0efd61e8 100644 --- a/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c +++ b/src/overlays/actors/ovl_En_Kanban/z_en_kanban.c @@ -610,7 +610,7 @@ void EnKanban_Update(Actor* thisx, PlayState* play) { } } - Math_ApproachS(&this->actor.shape.rot.x, this->direction << 0xE, 1, 0x2000); + Math_ApproachS(&this->actor.shape.rot.x, this->direction * 0x4000, 1, 0x2000); } else { this->actor.shape.rot.y += this->spinVel.y; this->actor.shape.rot.x += this->direction * 0x7D0; 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 cfc3efdc0..fb7df013f 100644 --- a/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c +++ b/src/overlays/actors/ovl_En_Kusa2/z_en_kusa2.c @@ -111,7 +111,7 @@ void func_80A5B160(EnKusa2* this, PlayState* play) { } for (i = 1; i < ARRAY_COUNT(this->unk_194); i++) { - temp_s1 = (i << 0xD) - 0x2000; + temp_s1 = (i * 0x2000) - 0x2000; if (this->unk_194[i] == NULL) { ptr = &this->unk_194[i]; actor = (EnKusa2*)Actor_SpawnAsChildAndCutscene( 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 4e9af5578..16e0acbe1 100644 --- a/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c +++ b/src/overlays/actors/ovl_En_Mkk/z_en_mkk.c @@ -433,7 +433,7 @@ void EnMkk_Update(Actor* thisx, PlayState* play) { if (this->collider.base.atFlags & AT_ON) { CollisionCheck_SetAT(play, &play->colChkCtx, &this->collider.base); } - if (this->collider.base.acFlags & AT_ON) { + if (this->collider.base.acFlags & AC_ON) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); diff --git a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c index bf3216fd5..f8673c307 100644 --- a/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c +++ b/src/overlays/actors/ovl_En_Nutsball/z_en_nutsball.c @@ -80,7 +80,7 @@ void EnNutsball_Destroy(Actor* thisx, PlayState* play) { } void EnNutsball_InitColliderParams(EnNutsball* this) { - this->collider.base.atFlags &= ~AT_TYPE_ENEMY & ~AT_BOUNCED & ~AT_HIT; + this->collider.base.atFlags &= ~(AT_HIT | AT_TYPE_ENEMY | AT_BOUNCED); this->collider.base.atFlags |= AT_TYPE_PLAYER; this->collider.info.toucher.dmgFlags = 0x400000; this->collider.info.toucher.damage = 2; 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 9d42424d9..9867cb963 100644 --- a/src/overlays/actors/ovl_En_Osk/z_en_osk.c +++ b/src/overlays/actors/ovl_En_Osk/z_en_osk.c @@ -536,7 +536,7 @@ void EnOsk_Draw(Actor* thisx, PlayState* play) { Matrix_Translate(this->actor.focus.pos.x + sp80.x, this->actor.focus.pos.y + sp80.y, sp80.z = this->actor.focus.pos.z + sp80.z, MTXMODE_NEW); - sp80.z = Math_SinS(play->gameplayFrames << 0xE); + sp80.z = Math_SinS(play->gameplayFrames * 0x4000); sp80.z = ((sp80.z + 1.0f) * 0.1f) + 2.0f; Matrix_Scale(this->actor.scale.x * sp80.z, this->actor.scale.y * sp80.z, this->actor.scale.z * sp80.z, MTXMODE_APPLY); 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 df6d3708f..137829cf5 100644 --- a/src/overlays/actors/ovl_En_Ot/z_en_ot.c +++ b/src/overlays/actors/ovl_En_Ot/z_en_ot.c @@ -1146,21 +1146,22 @@ void func_80B5E1D8(PlayState* play, EnOtUnkStruct* arg1, s32 arg2) { POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); for (i = 0; i < arg2; i++, arg1++) { - if (arg1->unk_00) { - if (!flag) { - gSPDisplayList(POLY_OPA_DISP++, object_ot_DL_000040); - flag = true; - if (play) {} - } - - Matrix_Translate(arg1->unk_0C.x, arg1->unk_0C.y, arg1->unk_0C.z, MTXMODE_NEW); - Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY); - Matrix_Scale(arg1->unk_04, arg1->unk_04, arg1->unk_04, MTXMODE_APPLY); - - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropRecoveryHeartTex)); - gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, object_ot_DL_000078); + if (arg1->unk_00 == 0) { + continue; } + + if (!flag) { + gSPDisplayList(POLY_OPA_DISP++, object_ot_DL_000040); + flag = true; + } + + Matrix_Translate(arg1->unk_0C.x, arg1->unk_0C.y, arg1->unk_0C.z, MTXMODE_NEW); + Matrix_RotateYS(BINANG_ROT180(Camera_GetCamDirYaw(GET_ACTIVE_CAM(play))), MTXMODE_APPLY); + Matrix_Scale(arg1->unk_04, arg1->unk_04, arg1->unk_04, MTXMODE_APPLY); + + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gDropRecoveryHeartTex)); + gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, object_ot_DL_000078); } CLOSE_DISPS(play->state.gfxCtx); 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 e5b4cabe3..c23fb3148 100644 --- a/src/overlays/actors/ovl_En_Owl/z_en_owl.c +++ b/src/overlays/actors/ovl_En_Owl/z_en_owl.c @@ -169,6 +169,9 @@ void EnOwl_Init(Actor* thisx, PlayState* play) { return; } break; + + default: + break; } this->unk_3DA = 0; @@ -335,6 +338,9 @@ void func_8095AD54(EnOwl* this, PlayState* play) { Message_ContinueTextbox(play, 0x7D3); this->actionFunc = func_8095ABF0; break; + + default: + break; } } } @@ -379,6 +385,9 @@ void func_8095AF2C(EnOwl* this, PlayState* play) { func_8095ACEC(this); this->actionFunc = func_8095ABF0; break; + + default: + break; } } @@ -625,6 +634,9 @@ void func_8095BA84(EnOwl* this, PlayState* play) { func_8019F230(); Message_ContinueTextbox(play, 0xBEF); break; + + default: + break; } break; @@ -633,14 +645,20 @@ void func_8095BA84(EnOwl* this, PlayState* play) { case 0: func_8019F208(); Message_ContinueTextbox(play, 0xBF4); - return; + break; case 1: func_8019F230(); Message_ContinueTextbox(play, 0xBF3); - return; + break; + + default: + break; } break; + + default: + break; } } break; @@ -703,9 +721,15 @@ void func_8095BA84(EnOwl* this, PlayState* play) { this->actionFlags |= 8; func_8095ACEC(this); break; + + default: + break; } } break; + + default: + break; } } @@ -897,168 +921,179 @@ void EnOwl_Update(Actor* thisx, PlayState* play) { Actor_UpdateBgCheckInfo(play, &this->actor, 10.0f, 10.0f, 10.0f, UPDBGCHECKINFO_FLAG_4); Collider_UpdateCylinder(&this->actor, &this->collider); CollisionCheck_SetOC(play, &play->colChkCtx, &this->collider.base); - if (this->actor.update != NULL) { - if ((this->skelAnime1.animation == &object_owl_Anim_001ADC) && Animation_OnFrame(&this->skelAnime1, 4.0f)) { - Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER); + if (this->actor.update == NULL) { + return; + } + + if ((this->skelAnime1.animation == &object_owl_Anim_001ADC) && Animation_OnFrame(&this->skelAnime1, 4.0f)) { + Actor_PlaySfx(&this->actor, NA_SE_EN_OWL_FLUTTER); + } + + if (this->actionFlags & 2) { + this->eyeTexIndex = 2; + } else { + if (DECR(this->blinkTimer) == 0) { + this->blinkTimer = Rand_S16Offset(60, 60); } - - if (this->actionFlags & 2) { - this->eyeTexIndex = 2; - } else { - if (DECR(this->blinkTimer) == 0) { - this->blinkTimer = Rand_S16Offset(60, 60); - } - this->eyeTexIndex = this->blinkTimer; - if (this->eyeTexIndex >= 3) { - this->eyeTexIndex = 0; - } + this->eyeTexIndex = this->blinkTimer; + if (this->eyeTexIndex >= 3) { + this->eyeTexIndex = 0; } + } - if (!(this->actionFlags & 8)) { - sp36 = 0; + if (!(this->actionFlags & 8)) { + sp36 = 0; - if (this->actionFlags & 0x10) { - switch (this->unk_408) { - case 0: - this->unk_408 = 1; - this->unk_409 = 6; - break; + if (this->actionFlags & 0x10) { + switch (this->unk_408) { + case 0: + this->unk_408 = 1; + this->unk_409 = 6; + break; - case 1: - this->unk_409--; - if (this->unk_409 != 0) { - sp36 = Math_CosS(this->unk_409 * 0x2000) * 0x1000; + case 1: + this->unk_409--; + if (this->unk_409 != 0) { + sp36 = Math_CosS(this->unk_409 * 0x2000) * 0x1000; + } else { + if (this->actionFlags & 2) { + this->unk_3DA = 0; } else { - if (this->actionFlags & 2) { - this->unk_3DA = 0; - } else { - this->unk_3DA = 0x20; - } - - if (this->actionFlags & 0x20) { - this->unk_3DA -= 4; - } else { - this->unk_3DA += 4; - } - this->unk_408++; + this->unk_3DA = 0x20; } if (this->actionFlags & 0x20) { - sp36 = -sp36; - } - break; - - case 2: - if (func_8095C510(this)) { - this->actionFlags &= ~0x10; - this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60; - this->unk_408 = 0; - func_8095AB4C(this); - } - break; - } - } else { - if (this->unk_40A > 0) { - this->unk_40A--; - } else { - if (this->unk_408 == 0) { - if (Rand_ZeroOne() < 0.3f) { - this->unk_408 = 4; - this->unk_409 = 12; + this->unk_3DA -= 4; } else { - this->unk_408 = 1; - this->unk_409 = 4; + this->unk_3DA += 4; } - } - this->unk_409--; - - switch (this->unk_408) { - case 1: - sp36 = Math_SinS((-this->unk_409 * 0x1000) + 0x4000) * 5000.0f; - if (this->unk_409 <= 0) { - this->unk_409 = (s32)(Rand_ZeroFloat(15.0f) + 5.0f); - this->unk_408 = 2; - } - break; - - case 2: - sp36 = 0x1388; - if (this->unk_409 <= 0) { - this->unk_408 = 3; - this->unk_409 = 4; - } - break; - - case 3: - sp36 = Math_SinS(this->unk_409 * 0x1000) * 5000.0f; - if (this->unk_409 <= 0) { - this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60; - this->unk_408 = 0; - func_8095AB4C(this); - } - break; - - case 4: - sp36 = Math_SinS(this->unk_409 * 0x2000) * 5000.0f; - if (this->unk_409 <= 0) { - this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60; - this->unk_408 = 0; - func_8095AB4C(this); - } - break; + this->unk_408++; } if (this->actionFlags & 0x20) { sp36 = -sp36; } - } + break; - if (this->unk_40D > 0) { - this->unk_40D--; - } else { - this->unk_40C--; - switch (this->unk_40B) { - case 0: - this->unk_3DE = (-this->unk_40C * 0x5DC) + 0x1770; - if (this->unk_40C <= 0) { - this->unk_40B = 1; - this->unk_40C = (s8)(Rand_ZeroFloat(15.0f) + 5.0f); - } - break; + case 2: + if (func_8095C510(this)) { + this->actionFlags &= ~0x10; + this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60; + this->unk_408 = 0; + func_8095AB4C(this); + } + break; - case 1: - this->unk_3DE = 0x1770; - if (this->unk_40C <= 0) { - this->unk_40B = 2; - this->unk_40C = 4; - } - break; - - case 2: - this->unk_3DE = this->unk_40C * 0x5DC; - if (this->unk_40C <= 0) { - this->unk_40B = 0; - this->unk_40C = 4; - this->unk_40D = (s32)Rand_ZeroFloat(40.0f) + 160; - } - break; + default: + break; + } + } else { + if (this->unk_40A > 0) { + this->unk_40A--; + } else { + if (this->unk_408 == 0) { + if (Rand_ZeroOne() < 0.3f) { + this->unk_408 = 4; + this->unk_409 = 12; + } else { + this->unk_408 = 1; + this->unk_409 = 4; } } + this->unk_409--; + + switch (this->unk_408) { + case 1: + sp36 = Math_SinS((-this->unk_409 * 0x1000) + 0x4000) * 5000.0f; + if (this->unk_409 <= 0) { + this->unk_409 = (s32)(Rand_ZeroFloat(15.0f) + 5.0f); + this->unk_408 = 2; + } + break; + + case 2: + sp36 = 0x1388; + if (this->unk_409 <= 0) { + this->unk_408 = 3; + this->unk_409 = 4; + } + break; + + case 3: + sp36 = Math_SinS(this->unk_409 * 0x1000) * 5000.0f; + if (this->unk_409 <= 0) { + this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60; + this->unk_408 = 0; + func_8095AB4C(this); + } + break; + + case 4: + sp36 = Math_SinS(this->unk_409 * 0x2000) * 5000.0f; + if (this->unk_409 <= 0) { + this->unk_40A = (s32)Rand_ZeroFloat(20.0f) + 60; + this->unk_408 = 0; + func_8095AB4C(this); + } + break; + + default: + break; + } + + if (this->actionFlags & 0x20) { + sp36 = -sp36; + } } - if (sp36) {} - this->unk_3DC = (u16)((this->unk_3DA << 2) << 8) + sp36; - this->unk_3D8 = ABS(this->unk_3DC) >> 3; - } else { - this->unk_3DE = 0; - if (this->actionFlags & 2) { - this->unk_3DC = -0x8000; + if (this->unk_40D > 0) { + this->unk_40D--; } else { - this->unk_3DC = 0; - } + this->unk_40C--; + switch (this->unk_40B) { + case 0: + this->unk_3DE = (-this->unk_40C * 0x5DC) + 0x1770; + if (this->unk_40C <= 0) { + this->unk_40B = 1; + this->unk_40C = (s8)(Rand_ZeroFloat(15.0f) + 5.0f); + } + break; - this->unk_3D8 = ABS(this->unk_3DC) >> 3; + case 1: + this->unk_3DE = 0x1770; + if (this->unk_40C <= 0) { + this->unk_40B = 2; + this->unk_40C = 4; + } + break; + + case 2: + this->unk_3DE = this->unk_40C * 0x5DC; + if (this->unk_40C <= 0) { + this->unk_40B = 0; + this->unk_40C = 4; + this->unk_40D = (s32)Rand_ZeroFloat(40.0f) + 160; + } + break; + + default: + break; + } + } } + + if (sp36) {} + this->unk_3DC = (u16)((this->unk_3DA << 2) << 8) + sp36; + this->unk_3D8 = ABS(this->unk_3DC) >> 3; + } else { + this->unk_3DE = 0; + if (this->actionFlags & 2) { + this->unk_3DC = -0x8000; + } else { + this->unk_3DC = 0; + } + + this->unk_3D8 = ABS(this->unk_3DC) >> 3; } } @@ -1117,6 +1152,9 @@ s32 EnOwl_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* p rot->y += (s16)(this->unk_3D8 * 1.5f); } break; + + default: + break; } return false; 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 5e71d1a54..6675f6b45 100644 --- a/src/overlays/actors/ovl_En_Slime/z_en_slime.c +++ b/src/overlays/actors/ovl_En_Slime/z_en_slime.c @@ -1120,7 +1120,9 @@ void EnSlime_Update(Actor* thisx, PlayState* play) { if (this->collider.base.ocFlags1 & OC1_ON) { Actor_MoveWithGravity(thisx); - Actor_UpdateBgCheckInfo(play, thisx, 20.0f, 35.0f, 40.0f, 0x1D); + Actor_UpdateBgCheckInfo(play, thisx, 20.0f, 35.0f, 40.0f, + UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | + UPDBGCHECKINFO_FLAG_10); } Collider_UpdateCylinder(thisx, &this->collider); 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 2606331e2..b6f11c2e2 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -364,14 +364,13 @@ void func_80AF14FC(PlayState* play2, EnTest7Struct2* arg1) { } temp_v0 = Matrix_NewMtx(play->state.gfxCtx); - if (temp_v0 != NULL) { - gSPMatrix(POLY_OPA_DISP++, temp_v0, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_081628); + if (temp_v0 == NULL) { + continue; } + gSPMatrix(POLY_OPA_DISP++, temp_v0, G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gSPDisplayList(POLY_OPA_DISP++, gameplay_keep_DL_081628); } - if (ptr) {} - Matrix_Pop(); CLOSE_DISPS(play->state.gfxCtx); 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 435674539..208422b2f 100644 --- a/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c +++ b/src/overlays/actors/ovl_En_Wiz/z_en_wiz.c @@ -1285,8 +1285,8 @@ void EnWiz_UpdateDamage(EnWiz* this, PlayState* play) { //! colliders are effectively disabled, this doesn't cause any problems in the final //! game, but it becomes an issue if the ghost colliders are enabled. this->fightState = EN_WIZ_FIGHT_STATE_SECOND_PHASE_GHOSTS_COPY_WIZROBE; - this->ghostColliders.base.acFlags &= ~BUMP_HIT; - if (this->ghostPos[i].x != .0f || this->ghostPos[i].z != .0f) { + this->ghostColliders.base.acFlags &= ~AC_HIT; + if ((this->ghostPos[i].x != .0f) || (this->ghostPos[i].z != .0f)) { for (j = 0; j < 9; j++) { accel.x = 0.0f; accel.y = 1.0f; 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 e6fc7e776..12d06e487 100644 --- a/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c +++ b/src/overlays/actors/ovl_En_Wiz_Fire/z_en_wiz_fire.c @@ -573,7 +573,7 @@ void EnWizFire_Update(Actor* thisx, PlayState* play2) { DECR(this->steamSpawnTimer); DECR(this->poolTimer); - Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 5.0f, 10, + Actor_UpdateBgCheckInfo(play, &this->actor, 20.0f, 5.0f, 10.0f, UPDBGCHECKINFO_FLAG_1 | UPDBGCHECKINFO_FLAG_4 | UPDBGCHECKINFO_FLAG_8 | UPDBGCHECKINFO_FLAG_10); 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 bf409e7dd..1cab193db 100644 --- a/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c +++ b/src/overlays/actors/ovl_Obj_Switch/z_obj_switch.c @@ -509,7 +509,7 @@ void ObjSwitch_FloorSwitchUp(ObjSwitch* this, PlayState* play) { if (OBJ_SWITCH_GET_TYPE(&this->dyna.actor) == OBJSWITCH_TYPE_FLOOR_RUSTY) { if (this->colliderTris.base.acFlags & AC_HIT) { - this->colliderTris.base.acFlags &= ~AT_HIT; + this->colliderTris.base.acFlags &= ~AC_HIT; ObjSwitch_TryPlayCutsceneInit(this, play, ObjSwitch_FloorSwitchPushDownInit, true); } else { CollisionCheck_SetAC(play, &play->colChkCtx, &this->colliderTris.base); 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 7de628750..641d49f49 100644 --- a/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c +++ b/src/overlays/actors/ovl_Oceff_Wipe2/z_oceff_wipe2.c @@ -72,7 +72,7 @@ void OceffWipe2_Draw(Actor* thisx, PlayState* play) { vtxPtr = sEponaSongFrustumVtx; if (this->timer < 32) { - z = Math_SinS(this->timer << 9) * 1220.0f; + z = Math_SinS(this->timer * 0x200) * 1220.0f; } else { z = 1220.0f; } From e73034f8cdab8681e30afe8478d467c525812280 Mon Sep 17 00:00:00 2001 From: Nuss <67802335+hack-nuss@users.noreply.github.com> Date: Sat, 17 Jun 2023 19:42:40 +0200 Subject: [PATCH 05/82] object_snowwd (#1293) * rename * prefix fix --- assets/xml/objects/object_snowwd.xml | 10 +++++----- src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/assets/xml/objects/object_snowwd.xml b/assets/xml/objects/object_snowwd.xml index b969a70f5..9bb2209d9 100644 --- a/assets/xml/objects/object_snowwd.xml +++ b/assets/xml/objects/object_snowwd.xml @@ -1,9 +1,9 @@  - - - - - + + + + + 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 73e5ea37f..5823e728f 100644 --- a/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c +++ b/src/overlays/actors/ovl_En_Snowwd/z_en_snowwd.c @@ -129,8 +129,8 @@ void EnSnowwd_Draw(Actor* thisx, PlayState* play) { gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); Gfx_SetupDL25_Opa(play->state.gfxCtx); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(object_snowwd_Tex_001AA0)); - gSPDisplayList(POLY_OPA_DISP++, object_snowwd_DL_000198); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(gSnowTreeSnowLeavesTex)); + gSPDisplayList(POLY_OPA_DISP++, gSnowTreeDL); CLOSE_DISPS(play->state.gfxCtx); } From 5800c4669fada1659fb4420a219556438fde65b1 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sat, 17 Jun 2023 14:33:58 -0700 Subject: [PATCH 06/82] Document a bug in EnRacedog and add some diagrams to EnRacedog_IsOverFinishLine (#1288) * Document a bug in EnRacedog and add some diagrams to EnRacedog_IsOverFinishLine * Mention floating-point precision in the comment --- .../actors/ovl_En_Racedog/z_en_racedog.c | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) 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 d4e83a388..6b0dcd60a 100644 --- a/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c +++ b/src/overlays/actors/ovl_En_Racedog/z_en_racedog.c @@ -628,13 +628,28 @@ s32 EnRacedog_IsOverFinishLine(EnRacedog* this, Vec2f* finishLineCoordinates) { // frontPointsCrossProduct is positive if the dog is to the left of the line formed by the front points // crossProductTemp is positive if the dog is above the line formed by the bottom points + // This is checking that the dog within the region defined by front and bottom lines like so: + // | + // X | Front + // | + // -------- + // Bottom frontPointsCrossProduct = ((xDistToTopFront * zDistToBottomFront) - (xDistToBottomFront * zDistToTopFront)); crossProductTemp = (((xDistToBottomFront * zDistToBottomBack) - (xDistToBottomBack * zDistToBottomFront))); + //! @bug If any dog is precisely (with floating-point precision) on top of the line formed by the front points, + //! then frontPointsCrossProduct will be zero. This will cause this multiplication (and all future multiplications) + //! to be zero, which will make this function think the dog has crossed the finish line. The line formed by the + //! front points extends throughout the entire racetrack, so a dog can trigger this when they're not even close to + //! the actual finish line, causing them to finish the race incredibly early. if (frontPointsCrossProduct * crossProductTemp < 0.0f) { return false; } // crossProductTemp is positive if the dog is to the right of the line formed by the back points + // This is checking that the dog within the region defined by front and back lines like so: + // | | + // Back | X | Front + // | | frontPointsCrossProduct = ((xDistToTopFront * zDistToBottomFront) - (xDistToBottomFront * zDistToTopFront)); crossProductTemp = ((xDistToBottomBack * zDistToTopBack) - (xDistToTopBack * zDistToBottomBack)); if (frontPointsCrossProduct * crossProductTemp < 0.0f) { @@ -642,6 +657,12 @@ s32 EnRacedog_IsOverFinishLine(EnRacedog* this, Vec2f* finishLineCoordinates) { } // crossProductTemp is positive if the dog is below the line formed by the top points + // This is checking that the dog within the region defined by front and top lines like so: + // Top + // -------- + // | + // X | Front + // | frontPointsCrossProduct = ((xDistToTopFront * zDistToBottomFront) - (xDistToBottomFront * zDistToTopFront)); crossProductTemp = ((xDistToTopBack * zDistToTopFront) - (xDistToTopFront * zDistToTopBack)); if (frontPointsCrossProduct * crossProductTemp < 0.0f) { From 9c40dea7709726bd29fac8253586bc96c9f3ab8a Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Sat, 17 Jun 2023 15:15:55 -0700 Subject: [PATCH 07/82] Document EnSyatekiOkuta (Shooting Gallery Octorok) (#1287) * Initial docs * Tons of stuff done * Fix spacing thing now that the function is actually named * Temporarily add un-macro'd flags as comment * Name and document EnSyatekiOkuta_IsHiddenByAnotherOctorok * Finish naming all functions * Better macros + explanations * Comments on a lot of functions * Some stuff I was supposed to revert * Fix merge issue * Another merge fix * Make data static + move it in-function * Respond to engineer's review * circleOrCrossAlpha -> hitResultAlpha * Respond to more of engineer's feedback * octorokHitType -> lastHitOctorokType * Animation enum stuff --- assets/xml/overlays/ovl_En_Syateki_Okuta.xml | 4 +- .../ovl_En_Syateki_Man/z_en_syateki_man.c | 119 ++--- .../ovl_En_Syateki_Man/z_en_syateki_man.h | 12 +- .../ovl_En_Syateki_Okuta/z_en_syateki_okuta.c | 440 ++++++++++-------- .../ovl_En_Syateki_Okuta/z_en_syateki_okuta.h | 42 +- tools/disasm/functions.txt | 40 +- tools/disasm/variables.txt | 10 +- 7 files changed, 383 insertions(+), 284 deletions(-) diff --git a/assets/xml/overlays/ovl_En_Syateki_Okuta.xml b/assets/xml/overlays/ovl_En_Syateki_Okuta.xml index 0e5054c19..aa38c8533 100644 --- a/assets/xml/overlays/ovl_En_Syateki_Okuta.xml +++ b/assets/xml/overlays/ovl_En_Syateki_Okuta.xml @@ -7,7 +7,7 @@ - - + + 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 f5910a06d..a5c4ad4e2 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 @@ -10,6 +10,7 @@ #include "z_en_syateki_man.h" #include "overlays/actors/ovl_En_Syateki_Crow/z_en_syateki_crow.h" #include "overlays/actors/ovl_En_Syateki_Dekunuts/z_en_syateki_dekunuts.h" +#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) @@ -49,15 +50,10 @@ 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) -#define OCTOROK_FLAG(color, row, column) (1 << ((row * 6) + (column * 2) + color)) -#define COLOR_RED 0 -#define COLOR_BLUE 1 -#define ROW_BACK 0 -#define ROW_CENTER 1 -#define ROW_FRONT 2 -#define COLUMN_LEFT 0 -#define COLUMN_CENTER 1 -#define COLUMN_RIGHT 2 +#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)) ActorInit En_Syateki_Man_InitVars = { ACTOR_EN_SYATEKI_MAN, @@ -201,7 +197,7 @@ void EnSyatekiMan_Init(Actor* thisx, PlayState* play) { this->shootingGameState = SG_GAME_STATE_NONE; this->talkWaitTimer = 15; this->flagsIndex = 0; - this->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_NONE; + this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE; this->octorokFlags = 0; this->dekuScrubFlags = 0; this->guayFlags = 0; @@ -1227,7 +1223,7 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) { this->score = 0; this->flagsIndex = 0; this->perGameVar1.octorokState = SG_OCTO_STATE_INITIAL; - this->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_NONE; + this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE; sGameStartTimer = 30; Interface_StartTimer(TIMER_ID_MINIGAME_1, 75); this->actor.draw = NULL; @@ -1240,62 +1236,67 @@ void EnSyatekiMan_Town_StartGame(EnSyatekiMan* this, PlayState* play) { * For each wave, these flags are used to control which Octoroks appear. */ static const s32 sOctorokFlagsPerWave[] = { - OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + // clang-format off + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE), - OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT), + OCTO_FLAGS(SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE), - OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_RIGHT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED), - OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED), - OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER), + OCTO_FLAGS(SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE), - OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT), + OCTO_FLAGS(SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE), - OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED), - OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE), - OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | - OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER), + OCTO_FLAGS(SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE), - OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED), - OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | - OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_BLUE, + SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED), - OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_CENTER, COLUMN_LEFT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_BLUE), - OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_RIGHT) | - OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_BLUE, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_BLUE, + SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_NONE), - OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_BLUE, ROW_FRONT, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_RIGHT) | - OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_LEFT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_BLUE, SG_OCTO_TYPE_BLUE), - OCTOROK_FLAG(COLOR_RED, ROW_FRONT, COLUMN_CENTER) | OCTOROK_FLAG(COLOR_RED, ROW_CENTER, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_RIGHT) | OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_CENTER) | - OCTOROK_FLAG(COLOR_RED, ROW_BACK, COLUMN_LEFT), + OCTO_FLAGS(SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_RED, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE, + SG_OCTO_TYPE_NONE, SG_OCTO_TYPE_RED, SG_OCTO_TYPE_NONE), + // clang-format on }; void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) { @@ -1323,16 +1324,16 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) { this->perGameVar1.octorokState = SG_OCTO_STATE_HIDING; } - if (this->perGameVar2.octorokHitType != SG_OCTO_HIT_TYPE_NONE) { - if (this->perGameVar2.octorokHitType == SG_OCTO_HIT_TYPE_BLUE) { + if (this->perGameVar2.lastHitOctorokType != SG_OCTO_TYPE_NONE) { + if (this->perGameVar2.lastHitOctorokType == SG_OCTO_TYPE_BLUE) { gSaveContext.timerTimeLimits[TIMER_ID_MINIGAME_1] -= SECONDS_TO_TIMER_PRECISE(2, 50); sModFromLosingTime = (sModFromLosingTime + 25) % 50; } - this->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_NONE; + this->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_NONE; } - if (this->perGameVar1.octorokState == SG_OCTO_STATE_SPAWNING) { + if (this->perGameVar1.octorokState == SG_OCTO_STATE_APPEARING) { this->perGameVar1.octorokState++; } @@ -1340,10 +1341,10 @@ void EnSyatekiMan_Town_RunGame(EnSyatekiMan* this, PlayState* play) { // 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 (this->flagsIndex < 15) { + 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_SPAWNING; + this->perGameVar1.octorokState = SG_OCTO_STATE_APPEARING; } } 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 468cb981c..28d19871b 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 @@ -22,18 +22,12 @@ typedef enum { } ShootingGalleryGameState; typedef enum { - /* 0 */ SG_OCTO_STATE_SPAWNING, - /* 1 */ SG_OCTO_STATE_SPAWNED, + /* 0 */ SG_OCTO_STATE_APPEARING, + /* 1 */ SG_OCTO_STATE_APPEARED, /* 70 */ SG_OCTO_STATE_INITIAL = 70, /* 80 */ SG_OCTO_STATE_HIDING = 80 } ShootingGalleryOctorokState; -typedef enum { - /* 0 */ SG_OCTO_HIT_TYPE_NONE, - /* 1 */ SG_OCTO_HIT_TYPE_RED, - /* 2 */ SG_OCTO_HIT_TYPE_BLUE -} ShootingGalleryoctorokHitType; - typedef enum { /* 0 */ SG_PATH_TYPE_CROW, /* 1 */ SG_PATH_TYPE_SCRUB_NORMAL, @@ -62,7 +56,7 @@ typedef struct EnSyatekiMan { } perGameVar1; /* 0x26E */ union { s16 bonusDekuScrubHitCounter; - s16 octorokHitType; + s16 lastHitOctorokType; } perGameVar2; /* 0x270 */ s16 talkWaitTimer; /* 0x272 */ s16 dekuScrubFlags; 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 5711b86fe..5673439cf 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 @@ -16,17 +16,17 @@ void EnSyatekiOkuta_Destroy(Actor* thisx, PlayState* play); void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play); void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play); -void func_80A36260(EnSyatekiOkuta* this); -void func_80A362A8(EnSyatekiOkuta* this, PlayState* play); -void func_80A362F8(EnSyatekiOkuta* this); -void func_80A36350(EnSyatekiOkuta* this, PlayState* play); -void func_80A363B4(EnSyatekiOkuta* this, PlayState* play); -void func_80A36444(EnSyatekiOkuta* this); -void func_80A36488(EnSyatekiOkuta* this, PlayState* play); -void func_80A364C0(EnSyatekiOkuta* this); -void func_80A36504(EnSyatekiOkuta* this, PlayState* play); -void func_80A365EC(EnSyatekiOkuta* this, PlayState* play); -void func_80A36CB0(EnSyatekiOkuta* this); +void EnSyatekiOkuta_SetupAttachToShootingGalleryMan(EnSyatekiOkuta* this); +void EnSyatekiOkuta_AttachToShootingGalleryMan(EnSyatekiOkuta* this, PlayState* play); +void EnSyatekiOkuta_SetupDoNothing(EnSyatekiOkuta* this); +void EnSyatekiOkuta_DoNothing(EnSyatekiOkuta* this, PlayState* play); +void EnSyatekiOkuta_Appear(EnSyatekiOkuta* this, PlayState* play); +void EnSyatekiOkuta_SetupFloat(EnSyatekiOkuta* this); +void EnSyatekiOkuta_Float(EnSyatekiOkuta* this, PlayState* play); +void EnSyatekiOkuta_SetupHide(EnSyatekiOkuta* this); +void EnSyatekiOkuta_Hide(EnSyatekiOkuta* this, PlayState* play); +void EnSyatekiOkuta_Die(EnSyatekiOkuta* this, PlayState* play); +void EnSyatekiOkuta_UpdateHeadScale(EnSyatekiOkuta* this); ActorInit En_Syateki_Okuta_InitVars = { ACTOR_EN_SYATEKI_OKUTA, @@ -60,13 +60,23 @@ static ColliderCylinderInit sCylinderInit = { { 20, 40, -30, { 0, 0, 0 } }, }; +typedef enum { + /* 0 */ SG_OCTO_ANIM_SHOOT, // unused + /* 1 */ SG_OCTO_ANIM_DIE, + /* 2 */ SG_OCTO_ANIM_HIDE, + /* 3 */ SG_OCTO_ANIM_FLOAT, + /* 4 */ SG_OCTO_ANIM_APPEAR, + /* 5 */ SG_OCTO_ANIM_HIT, // unused + /* 6 */ SG_OCTO_ANIM_MAX +} ShootingGalleryOctorokAnimation; + static AnimationInfo sAnimationInfo[] = { - { &gOctorokShootAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gOctorokDieAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gOctorokHideAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gOctorokFloatAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, - { &gOctorokAppearAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, - { &gOctorokHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, + { &gOctorokShootAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_SHOOT + { &gOctorokDieAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_DIE + { &gOctorokHideAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_HIDE + { &gOctorokFloatAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -1.0f }, // SG_OCTO_ANIM_FLOAT + { &gOctorokAppearAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_APPEAR + { &gOctorokHitAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, -1.0f }, // SG_OCTO_ANIM_HIT }; #include "assets/overlays/ovl_En_Syateki_Okuta/ovl_En_Syateki_Okuta.c" @@ -76,16 +86,6 @@ static InitChainEntry sInitChain[] = { ICHAIN_F32(targetArrowOffset, 6500, ICHAIN_STOP), }; -Color_RGBA8 D_80A37B90 = { 255, 255, 255, 255 }; - -Color_RGBA8 D_80A37B94 = { 150, 150, 150, 255 }; - -Vec3f D_80A37B98 = { 0.0f, -0.5, 0.0f }; - -Color_RGBA8 D_80A37BA4 = { 255, 255, 255, 255 }; - -Color_RGBA8 D_80A37BA8 = { 150, 150, 150, 0 }; - void EnSyatekiOkuta_Init(Actor* thisx, PlayState* play) { s32 pad; EnSyatekiOkuta* this = THIS; @@ -110,9 +110,9 @@ void EnSyatekiOkuta_Init(Actor* thisx, PlayState* play) { this->actor.world.pos.y = this->actor.home.pos.y = ySurface; } - this->unk_2A4 = 0; - this->unk_2AA = 0; - func_80A36260(this); + this->deathTimer = 0; + this->hitResultAlpha = 0; + EnSyatekiOkuta_SetupAttachToShootingGalleryMan(this); } void EnSyatekiOkuta_Destroy(Actor* thisx, PlayState* play) { @@ -121,30 +121,45 @@ void EnSyatekiOkuta_Destroy(Actor* thisx, PlayState* play) { Collider_DestroyCylinder(play, &this->collider); } -void func_80A36148(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) { - func_800B0DE0(play, pos, velocity, &gZeroVec3f, &D_80A37B90, &D_80A37B94, 400, scaleStep); +/** + * Spawns the puff of smoke that appears when the Octorok disappears when it dies. + */ +void EnSyatekiOkuta_SpawnDust(Vec3f* pos, Vec3f* velocity, s16 scaleStep, PlayState* play) { + static Color_RGBA8 sDustPrimColor = { 255, 255, 255, 255 }; + static Color_RGBA8 sDustEnvColor = { 150, 150, 150, 255 }; + + func_800B0DE0(play, pos, velocity, &gZeroVec3f, &sDustPrimColor, &sDustEnvColor, 400, scaleStep); } -void func_80A361B0(EnSyatekiOkuta* this, PlayState* play) { +/** + * Spawns the splash that appears when the Octorok appears from underwater, hides underwater, or dies. + */ +void EnSyatekiOkuta_SpawnSplash(EnSyatekiOkuta* this, PlayState* play) { EffectSsGSplash_Spawn(play, &this->actor.home.pos, NULL, NULL, 0, 800); } -s32 func_80A361F4(EnSyatekiOkuta* this) { - s32 temp_a0; - s32 temp_a1; - s32 temp_v1; +/* + * Returns true if this Octorok is hidden (in other words, if it's in the center + * column and has another Octorok in front of it), false otherwise. + */ +s32 EnSyatekiOkuta_IsHiddenByAnotherOctorok(EnSyatekiOkuta* this) { EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; + s32 index = SG_OCTO_GET_INDEX(&this->actor); - temp_v1 = EN_SYATEKI_OKUTA_GET_F(&this->actor); - if ((temp_v1 == 1) || (temp_v1 == 4)) { - temp_a0 = syatekiMan->octorokFlags; - temp_a1 = (temp_v1 * 2) + 6; - - if ((temp_a0 >> temp_a1) & 3) { + // Only the Octoroks in the center column can be obscured by another Octorok. The Octoroks in the + // left and right columns are always visible, since the player looks at them from an angle. + // Additionally, the Octorok in the front row is always visible, even if it's in the center column. + if ((index == SG_OCTO_INDEX_FOR_POS(SG_OCTO_ROW_BACK, SG_OCTO_COL_CENTER)) || + (index == SG_OCTO_INDEX_FOR_POS(SG_OCTO_ROW_CENTER, SG_OCTO_COL_CENTER))) { + // Checks to see if this Octorok is hidden by an Octorok immediately in front of it. + if (SG_OCTO_GET_TYPE(syatekiMan->octorokFlags, SG_OCTO_INDEX_DIRECTLY_IN_FRONT(index)) != SG_OCTO_TYPE_NONE) { return true; } - if ((temp_a1 == 8) && ((temp_a0 >> 0xE) & 3)) { + // If this Octorok is in the back row, it can also be hidden by an Octorok in the front row. + if ((index == SG_OCTO_INDEX_FOR_POS(SG_OCTO_ROW_BACK, SG_OCTO_COL_CENTER)) && + (SG_OCTO_GET_TYPE(syatekiMan->octorokFlags, SG_OCTO_INDEX_FOR_POS(SG_OCTO_ROW_FRONT, SG_OCTO_COL_CENTER)) != + SG_OCTO_TYPE_NONE)) { return true; } } @@ -152,142 +167,177 @@ s32 func_80A361F4(EnSyatekiOkuta* this) { return false; } -void func_80A36260(EnSyatekiOkuta* this) { +void EnSyatekiOkuta_SetupAttachToShootingGalleryMan(EnSyatekiOkuta* this) { Animation_PlayOnceSetSpeed(&this->skelAnime, &gOctorokAppearAnim, 0.0f); this->actor.draw = NULL; - this->actionFunc = func_80A362A8; + this->actionFunc = EnSyatekiOkuta_AttachToShootingGalleryMan; } -void func_80A362A8(EnSyatekiOkuta* this, PlayState* play) { +/** + * Checks every NPC actor in the scene to find the Shooting Gallery Man. Once it finds him, this will + * make him the parent to the Octorok. This is required because the Octoroks are normally spawned as + * part of the Town Shooting Gallery scene, so they don't have anything that links them to the Shooting + * Gallery Man, and the Octoroks need a pointer to him in order to access his Octorok flags. If this + * actor is spawned in a scene *without* the Shooting Gallery Man, its action function will never change + * from this function, and the Octorok will effectively do nothing. + */ +void EnSyatekiOkuta_AttachToShootingGalleryMan(EnSyatekiOkuta* this, PlayState* play) { Actor* actorIt = play->actorCtx.actorLists[ACTORCAT_NPC].first; while (actorIt != NULL) { if (actorIt->id == ACTOR_EN_SYATEKI_MAN) { this->actor.parent = actorIt; - func_80A362F8(this); + EnSyatekiOkuta_SetupDoNothing(this); break; - } else { - actorIt = actorIt->next; } + + actorIt = actorIt->next; } } -void func_80A362F8(EnSyatekiOkuta* this) { +/** + * Stops the Octorok's animation, prevents it from drawing, and sets its action function to do nothing. + * The intention here is to stay in this action function doing nothing until the Shooting Gallery Man + * tells it to appear in EnSyatekiOkuta_CheckForSignal, at which point the action function will be changed. + */ +void EnSyatekiOkuta_SetupDoNothing(EnSyatekiOkuta* this) { Animation_PlayOnceSetSpeed(&this->skelAnime, &gOctorokAppearAnim, 0.0f); this->actor.draw = NULL; Actor_SetScale(&this->actor, 0.01f); - this->actionFunc = func_80A36350; + this->actionFunc = EnSyatekiOkuta_DoNothing; } -void func_80A36350(EnSyatekiOkuta* this, PlayState* play) { +void EnSyatekiOkuta_DoNothing(EnSyatekiOkuta* this, PlayState* play) { } -void func_80A36360(EnSyatekiOkuta* this) { +void EnSyatekiOkuta_SetupAppear(EnSyatekiOkuta* this) { this->actor.draw = EnSyatekiOkuta_Draw; - this->unk_2AA = 0; - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 4); - this->actionFunc = func_80A363B4; + this->hitResultAlpha = 0; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_OCTO_ANIM_APPEAR); + this->actionFunc = EnSyatekiOkuta_Appear; } -void func_80A363B4(EnSyatekiOkuta* this, PlayState* play) { +/** + * Jumps out of the water and starts floating. + */ +void EnSyatekiOkuta_Appear(EnSyatekiOkuta* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 2.0f) || Animation_OnFrame(&this->skelAnime, 15.0f)) { - if (func_80A361F4(this)) { + if (EnSyatekiOkuta_IsHiddenByAnotherOctorok(this)) { return; } - func_80A361B0(this, play); + + EnSyatekiOkuta_SpawnSplash(this, play); Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_JUMP); } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80A36444(this); + EnSyatekiOkuta_SetupFloat(this); } } -void func_80A36444(EnSyatekiOkuta* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 3); - this->actionFunc = func_80A36488; +void EnSyatekiOkuta_SetupFloat(EnSyatekiOkuta* this) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_OCTO_ANIM_FLOAT); + this->actionFunc = EnSyatekiOkuta_Float; } -void func_80A36488(EnSyatekiOkuta* this, PlayState* play) { +/** + * Floats in place until the Shooting Gallery Man tells it to hide. + */ +void EnSyatekiOkuta_Float(EnSyatekiOkuta* this, PlayState* play) { EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; + // 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) { - func_80A364C0(this); + EnSyatekiOkuta_SetupHide(this); } } -void func_80A364C0(EnSyatekiOkuta* this) { - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 2); - this->actionFunc = func_80A36504; +void EnSyatekiOkuta_SetupHide(EnSyatekiOkuta* this) { + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_OCTO_ANIM_HIDE); + this->actionFunc = EnSyatekiOkuta_Hide; } -void func_80A36504(EnSyatekiOkuta* this, PlayState* play) { +/** + * Retreats underwater, then makes the Octorok do nothing until the Shooting Gallery Man tells it to appear again. + */ +void EnSyatekiOkuta_Hide(EnSyatekiOkuta* this, PlayState* play) { if (Animation_OnFrame(&this->skelAnime, 4.0f)) { - func_80A361B0(this, play); + EnSyatekiOkuta_SpawnSplash(this, play); Actor_PlaySfx(&this->actor, NA_SE_EN_DAIOCTA_LAND); } else if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - func_80A362F8(this); + EnSyatekiOkuta_SetupDoNothing(this); } } -void func_80A3657C(EnSyatekiOkuta* this) { - this->unk_2A4 = 0; - this->unk_2AA = 300; - if (this->unk_2A6 == 1) { +void EnSyatekiOkuta_SetupDie(EnSyatekiOkuta* this) { + this->deathTimer = 0; + this->hitResultAlpha = 300; + if (this->type == SG_OCTO_TYPE_RED) { Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_DEAD1); } - Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, 1); - this->actionFunc = func_80A365EC; + Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, SG_OCTO_ANIM_DIE); + this->actionFunc = EnSyatekiOkuta_Die; } -void func_80A365EC(EnSyatekiOkuta* this, PlayState* play) { - Vec3f sp84; - Vec3f sp78; +/** + * Plays the death animation and slowly shrinks the Octorok. Also spawns various bubble and dust + * effects as it dies. Once the Octorok is finished with its death animation, this function will + * make it do nothing until the Shooting Gallery Man tells it to appear again. + */ +void EnSyatekiOkuta_Die(EnSyatekiOkuta* this, PlayState* play) { + static Vec3f sBubbleAccel = { 0.0f, -0.5, 0.0f }; + static Color_RGBA8 sBubblePrimColor = { 255, 255, 255, 255 }; + static Color_RGBA8 sBubbleEnvColor = { 150, 150, 150, 0 }; + Vec3f velocity; + Vec3f pos; s32 pad; s32 i; - if (this->unk_2AA > 0) { - this->unk_2AA -= 15; + if (this->hitResultAlpha > 0) { + this->hitResultAlpha -= 15; } if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) { - if (this->unk_2A4 == 0) { - sp78.x = this->actor.world.pos.x; - sp78.y = this->actor.world.pos.y + 40.0f; - sp78.z = this->actor.world.pos.z; - sp84.x = 0.0f; - sp84.y = -0.5f; - sp84.z = 0.0f; - func_80A36148(&sp78, &sp84, -20, play); + if (this->deathTimer == 0) { + pos.x = this->actor.world.pos.x; + pos.y = this->actor.world.pos.y + 40.0f; + pos.z = this->actor.world.pos.z; + velocity.x = 0.0f; + velocity.y = -0.5f; + velocity.z = 0.0f; + EnSyatekiOkuta_SpawnDust(&pos, &velocity, -20, play); Actor_PlaySfx(&this->actor, NA_SE_EN_OCTAROCK_DEAD2); } - this->unk_2A4++; + this->deathTimer++; } if (Animation_OnFrame(&this->skelAnime, 15.0f)) { - func_80A361B0(this, play); + EnSyatekiOkuta_SpawnSplash(this, play); } - if (this->unk_2A4 < 3) { - Actor_SetScale(&this->actor, ((this->unk_2A4 * 0.25f) + 1.0f) * 0.01f); - } else if (this->unk_2A4 < 6) { - Actor_SetScale(&this->actor, (1.5f - ((this->unk_2A4 - 2) * 0.2333f)) * 0.01f); - } else if (this->unk_2A4 < 11) { - Actor_SetScale(&this->actor, (((this->unk_2A4 - 5) * 0.04f) + 0.8f) * 0.01f); + if (this->deathTimer < 3) { + Actor_SetScale(&this->actor, ((this->deathTimer * 0.25f) + 1.0f) * 0.01f); + } else if (this->deathTimer < 6) { + Actor_SetScale(&this->actor, (1.5f - ((this->deathTimer - 2) * 0.2333f)) * 0.01f); + } else if (this->deathTimer < 11) { + Actor_SetScale(&this->actor, (((this->deathTimer - 5) * 0.04f) + 0.8f) * 0.01f); } else { if (Math_StepToF(&this->actor.scale.x, 0.0f, 0.002f)) { SoundSource_PlaySfxAtFixedWorldPos(play, &this->actor.world.pos, 30, NA_SE_EN_COMMON_WATER_MID); for (i = 0; i < 10; i++) { - sp84.x = (Rand_ZeroOne() - 0.5f) * 7.0f; - sp84.y = Rand_ZeroOne() * 7.0f; - sp84.z = (Rand_ZeroOne() - 0.5f) * 7.0f; - EffectSsDtBubble_SpawnCustomColor(play, &this->actor.world.pos, &sp84, &D_80A37B98, &D_80A37BA4, - &D_80A37BA8, Rand_S16Offset(100, 50), 25, false); + velocity.x = (Rand_ZeroOne() - 0.5f) * 7.0f; + velocity.y = Rand_ZeroOne() * 7.0f; + velocity.z = (Rand_ZeroOne() - 0.5f) * 7.0f; + EffectSsDtBubble_SpawnCustomColor(play, &this->actor.world.pos, &velocity, &sBubbleAccel, + &sBubblePrimColor, &sBubbleEnvColor, Rand_S16Offset(100, 50), 25, + false); } - func_80A362F8(this); + EnSyatekiOkuta_SetupDoNothing(this); } this->actor.scale.y = this->actor.scale.x; @@ -295,13 +345,17 @@ void func_80A365EC(EnSyatekiOkuta* this, PlayState* play) { } } -void func_80A368E0(EnSyatekiOkuta* this, PlayState* play) { +/** + * Adjusts the collider's dimensions and position based on a few different factors, like the Octorok's + * type, current scale and head scale, and current action. + */ +void EnSyatekiOkuta_UpdateCollision(EnSyatekiOkuta* this, PlayState* play) { this->collider.dim.height = - (sCylinderInit.dim.height - this->collider.dim.yShift) * this->unk_1D8.y * this->actor.scale.y * 100.0f; + (sCylinderInit.dim.height - this->collider.dim.yShift) * this->headScale.y * this->actor.scale.y * 100.0f; this->collider.dim.radius = sCylinderInit.dim.radius * this->actor.scale.x * 100.0f; - if (this->actionFunc == func_80A363B4) { - if ((this->unk_2A6 == 2) && func_80A361F4(this)) { + if (this->actionFunc == EnSyatekiOkuta_Appear) { + if ((this->type == SG_OCTO_TYPE_BLUE) && EnSyatekiOkuta_IsHiddenByAnotherOctorok(this)) { return; } @@ -310,7 +364,7 @@ void func_80A368E0(EnSyatekiOkuta* this, PlayState* play) { } } - if (this->unk_2A6 == 1) { + if (this->type == SG_OCTO_TYPE_RED) { this->collider.dim.radius += 10; this->collider.dim.height += 15; } @@ -322,8 +376,11 @@ void func_80A368E0(EnSyatekiOkuta* this, PlayState* play) { CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base); } -s32 func_80A36A90(EnSyatekiOkuta* this, PlayState* play) { - if ((this->actionFunc == func_80A365EC) || (this->actionFunc == func_80A36350)) { +/** + * Returns true if the Octorok has been hit, false otherwise. + */ +s32 EnSyatekiOkuta_CheckCollision(EnSyatekiOkuta* this, PlayState* play) { + if ((this->actionFunc == EnSyatekiOkuta_Die) || (this->actionFunc == EnSyatekiOkuta_DoNothing)) { return false; } @@ -332,22 +389,28 @@ s32 func_80A36A90(EnSyatekiOkuta* this, PlayState* play) { return true; } - func_80A368E0(this, play); + EnSyatekiOkuta_UpdateCollision(this, play); return false; } -void func_80A36AF8(EnSyatekiOkuta* this, PlayState* play) { +/** + * Checks to see if both the archery game and this Octorok are in the appropriate state to consider + * appearing. If the conditions are right, then the Shooting Gallery Man's Octorok flags determine + * what type this Octorok should be for the current wave; if the type is *not* SG_OCTO_TYPE_NONE, + * then this Octorok will set itself to the appropriate type and get ready to jump out of the water. + */ +void EnSyatekiOkuta_CheckForSignal(EnSyatekiOkuta* this, PlayState* play) { EnSyatekiMan* syatekiMan = (EnSyatekiMan*)this->actor.parent; - s16 temp_v1_2; + s16 type; - if ((this->actionFunc != func_80A36488) && (this->actionFunc != func_80A363B4) && + if ((this->actionFunc != EnSyatekiOkuta_Float) && (this->actionFunc != EnSyatekiOkuta_Appear) && (syatekiMan->shootingGameState == SG_GAME_STATE_RUNNING) && - (syatekiMan->perGameVar1.octorokState == SG_OCTO_STATE_SPAWNING)) { - temp_v1_2 = (syatekiMan->octorokFlags >> (EN_SYATEKI_OKUTA_GET_F(&this->actor) * 2)) & 3; - if (temp_v1_2 > 0) { + (syatekiMan->perGameVar1.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); - this->unk_2A6 = temp_v1_2; - func_80A36360(this); + this->type = type; + EnSyatekiOkuta_SetupAppear(this); } } } @@ -359,101 +422,108 @@ void EnSyatekiOkuta_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); - if (this->actionFunc != func_80A36350) { + if (this->actionFunc != EnSyatekiOkuta_DoNothing) { SkelAnime_Update(&this->skelAnime); } - func_80A36AF8(this, play); + EnSyatekiOkuta_CheckForSignal(this, play); - if (func_80A36A90(this, play)) { + if (EnSyatekiOkuta_CheckCollision(this, play)) { syatekiMan = (EnSyatekiMan*)this->actor.parent; - if (this->unk_2A6 == 1) { + if (this->type == SG_OCTO_TYPE_RED) { Actor_PlaySfx(&this->actor, NA_SE_SY_TRE_BOX_APPEAR); play->interfaceCtx.minigamePoints++; syatekiMan->score++; - syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_RED; + syatekiMan->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_RED; } else { Actor_PlaySfx(&this->actor, NA_SE_SY_ERROR); - syatekiMan->perGameVar2.octorokHitType = SG_OCTO_HIT_TYPE_BLUE; + syatekiMan->perGameVar2.lastHitOctorokType = SG_OCTO_TYPE_BLUE; } - func_80A3657C(this); + EnSyatekiOkuta_SetupDie(this); } else { this->collider.base.acFlags &= ~AC_HIT; } - func_80A36CB0(this); + EnSyatekiOkuta_UpdateHeadScale(this); } -void func_80A36CB0(EnSyatekiOkuta* this) { +/** + * Adjusts the scale of the Octorok's head based on their current action and their current animation frame. + */ +void EnSyatekiOkuta_UpdateHeadScale(EnSyatekiOkuta* this) { f32 curFrame = this->skelAnime.curFrame; - if (this->actionFunc == func_80A363B4) { + if (this->actionFunc == EnSyatekiOkuta_Appear) { if (curFrame < 8.0f) { - this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = 1.0f; + this->headScale.x = this->headScale.y = this->headScale.z = 1.0f; } else if (curFrame < 10.0f) { - this->unk_1D8.x = this->unk_1D8.z = 1.0f; - this->unk_1D8.y = ((curFrame - 7.0f) * 0.4f) + 1.0f; + this->headScale.x = this->headScale.z = 1.0f; + this->headScale.y = ((curFrame - 7.0f) * 0.4f) + 1.0f; } else if (curFrame < 14.0f) { - this->unk_1D8.x = this->unk_1D8.z = ((curFrame - 9.0f) * 0.075f) + 1.0f; - this->unk_1D8.y = 1.8f - ((curFrame - 9.0f) * 0.25f); + this->headScale.x = this->headScale.z = ((curFrame - 9.0f) * 0.075f) + 1.0f; + this->headScale.y = 1.8f - ((curFrame - 9.0f) * 0.25f); } else { - this->unk_1D8.x = this->unk_1D8.z = 1.3f - ((curFrame - 13.0f) * 0.05f); - this->unk_1D8.y = ((curFrame - 13.0f) * 0.0333f) + 0.8f; + this->headScale.x = this->headScale.z = 1.3f - ((curFrame - 13.0f) * 0.05f); + this->headScale.y = ((curFrame - 13.0f) * 0.0333f) + 0.8f; } - } else if (this->actionFunc == func_80A36488) { - this->unk_1D8.x = this->unk_1D8.z = 1.0f; - this->unk_1D8.y = (Math_SinF((M_PI / 16) * curFrame) * 0.2f) + 1.0f; - } else if (this->actionFunc == func_80A36504) { + } else if (this->actionFunc == EnSyatekiOkuta_Float) { + this->headScale.x = this->headScale.z = 1.0f; + this->headScale.y = (Math_SinF((M_PI / 16) * curFrame) * 0.2f) + 1.0f; + } else if (this->actionFunc == EnSyatekiOkuta_Hide) { if (curFrame < 3.0f) { - this->unk_1D8.y = 1.0f; + this->headScale.y = 1.0f; } else if (curFrame < 4.0f) { - this->unk_1D8.y = (curFrame - 2.0f) + 1.0f; + this->headScale.y = (curFrame - 2.0f) + 1.0f; } else { - this->unk_1D8.y = 2.0f - ((curFrame - 3.0f) * 0.333f); + this->headScale.y = 2.0f - ((curFrame - 3.0f) * 0.333f); } - this->unk_1D8.x = this->unk_1D8.z = 1.0f; - } else if (this->actionFunc == func_80A365EC) { - curFrame += this->unk_2A4; + this->headScale.x = this->headScale.z = 1.0f; + } else if (this->actionFunc == EnSyatekiOkuta_Die) { + curFrame += this->deathTimer; if (curFrame >= 35.0f) { - this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = 1.0f; + this->headScale.x = this->headScale.y = this->headScale.z = 1.0f; } else if (curFrame < 4.0f) { - this->unk_1D8.x = this->unk_1D8.z = 1.0f - (curFrame * 0.0666f); - this->unk_1D8.y = (curFrame * 0.1666f) + 1.0f; + this->headScale.x = this->headScale.z = 1.0f - (curFrame * 0.0666f); + this->headScale.y = (curFrame * 0.1666f) + 1.0f; } else if (curFrame < 25.0f) { - this->unk_1D8.x = this->unk_1D8.z = ((curFrame - 4.0f) * 0.01f) + 0.8f; - this->unk_1D8.y = 1.5f - ((curFrame - 4.0f) * 0.025f); + this->headScale.x = this->headScale.z = ((curFrame - 4.0f) * 0.01f) + 0.8f; + this->headScale.y = 1.5f - ((curFrame - 4.0f) * 0.025f); } else if (curFrame < 27.0f) { - this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = ((curFrame - 24.0f) * 0.25f) + 1.0f; + this->headScale.x = this->headScale.y = this->headScale.z = ((curFrame - 24.0f) * 0.25f) + 1.0f; } else if (curFrame < 30.0f) { - this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = 1.5f - ((curFrame - 26.0f) * 0.233f); + this->headScale.x = this->headScale.y = this->headScale.z = 1.5f - ((curFrame - 26.0f) * 0.233f); } else { - this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = ((curFrame - 29.0f) * 0.04f) + 0.8f; + this->headScale.x = this->headScale.y = this->headScale.z = ((curFrame - 29.0f) * 0.04f) + 0.8f; } } else { - this->unk_1D8.x = this->unk_1D8.y = this->unk_1D8.z = 1.0f; + this->headScale.x = this->headScale.y = this->headScale.z = 1.0f; } } -s32 func_80A370EC(EnSyatekiOkuta* this, f32 arg1, Vec3f* arg2) { - if (this->actionFunc == func_80A363B4) { - arg2->y = 1.0f; - arg2->z = 1.0f; - arg2->x = (Math_SinF((M_PI / 16) * arg1) * 0.4f) + 1.0f; - } else if (this->actionFunc == func_80A365EC) { - if ((arg1 >= 35.0f) || (arg1 < 25.0f)) { +/** + * Returns true if the snout scale should be updated, false otherwise. The snout scale is returned via the scale + * parameter. + */ +s32 EnSyatekiOkuta_GetSnoutScale(EnSyatekiOkuta* this, f32 curFrame, Vec3f* scale) { + if (this->actionFunc == EnSyatekiOkuta_Appear) { + scale->y = 1.0f; + scale->z = 1.0f; + scale->x = (Math_SinF((M_PI / 16) * curFrame) * 0.4f) + 1.0f; + } else if (this->actionFunc == EnSyatekiOkuta_Die) { + if ((curFrame >= 35.0f) || (curFrame < 25.0f)) { return false; } - if (arg1 < 27.0f) { - arg2->z = 1.0f; - arg2->x = arg2->y = ((arg1 - 24.0f) * 0.5f) + 1.0f; - } else if (arg1 < 30.0f) { - arg2->z = (arg1 - 26.0f) * 0.333f + 1.0f; - arg2->x = arg2->y = 2.0f - (arg1 - 26.0f) * 0.333f; + if (curFrame < 27.0f) { + scale->z = 1.0f; + scale->x = scale->y = ((curFrame - 24.0f) * 0.5f) + 1.0f; + } else if (curFrame < 30.0f) { + scale->z = (curFrame - 26.0f) * 0.333f + 1.0f; + scale->x = scale->y = 2.0f - (curFrame - 26.0f) * 0.333f; } else { - arg2->z = 2.0f - ((arg1 - 29.0f) * 0.2f); - arg2->x = arg2->y = 1.0f; + scale->z = 2.0f - ((curFrame - 29.0f) * 0.2f); + scale->x = scale->y = 1.0f; } } else { return false; @@ -464,20 +534,20 @@ s32 func_80A370EC(EnSyatekiOkuta* this, f32 arg1, Vec3f* arg2) { s32 EnSyatekiOkuta_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx) { s32 pad; - Vec3f sp20; + Vec3f scale; f32 curFrame; EnSyatekiOkuta* this = THIS; curFrame = this->skelAnime.curFrame; - if (this->actionFunc == func_80A365EC) { - curFrame += this->unk_2A4; + if (this->actionFunc == EnSyatekiOkuta_Die) { + curFrame += this->deathTimer; } if (limbIndex == OCTOROK_LIMB_HEAD) { - sp20 = this->unk_1D8; - Matrix_Scale(sp20.x, sp20.y, sp20.z, MTXMODE_APPLY); - } else if ((limbIndex == OCTOROK_LIMB_SNOUT) && (func_80A370EC(this, curFrame, &sp20))) { - Matrix_Scale(sp20.x, sp20.y, sp20.z, MTXMODE_APPLY); + scale = this->headScale; + Matrix_Scale(scale.x, scale.y, scale.z, MTXMODE_APPLY); + } else if ((limbIndex == OCTOROK_LIMB_SNOUT) && (EnSyatekiOkuta_GetSnoutScale(this, curFrame, &scale))) { + Matrix_Scale(scale.x, scale.y, scale.z, MTXMODE_APPLY); } return false; @@ -489,7 +559,7 @@ void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play) { OPEN_DISPS(play->state.gfxCtx); Gfx_SetupDL25_Opa(play->state.gfxCtx); - if (this->unk_2A6 == 1) { + if (this->type == SG_OCTO_TYPE_RED) { gSPSegment(POLY_OPA_DISP++, 0x08, D_801AEFA0); } else { gSPSegment(POLY_OPA_DISP++, 0x08, gShootingGalleryOctorokBlueMaterialDL); @@ -497,20 +567,22 @@ void EnSyatekiOkuta_Draw(Actor* thisx, PlayState* play) { SkelAnime_DrawOpa(play, this->skelAnime.skeleton, this->skelAnime.jointTable, EnSyatekiOkuta_OverrideLimbDraw, NULL, &this->actor); + + // Draw the circle or cross that appears when the player hits an Octorok Gfx_SetupDL25_Xlu(play->state.gfxCtx); - if (this->actionFunc == func_80A365EC) { + if (this->actionFunc == EnSyatekiOkuta_Die) { Matrix_Translate(this->actor.world.pos.x, this->actor.world.pos.y + 30.0f, this->actor.world.pos.z + 20.0f, MTXMODE_NEW); - if (this->unk_2AA >= 256) { + if (this->hitResultAlpha > 255) { gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, 255); } else { - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, this->unk_2AA); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 210, 64, 32, this->hitResultAlpha); } gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - if (this->unk_2A6 == 2) { + if (this->type == SG_OCTO_TYPE_BLUE) { gSPDisplayList(POLY_XLU_DISP++, gShootingGalleryOctorokCrossDL); } else { gSPDisplayList(POLY_XLU_DISP++, gShootingGalleryOctorokCircleDL); diff --git a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h index 0527354d0..72be15406 100644 --- a/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h +++ b/src/overlays/actors/ovl_En_Syateki_Okuta/z_en_syateki_okuta.h @@ -4,7 +4,39 @@ #include "global.h" #include "objects/object_okuta/object_okuta.h" -#define EN_SYATEKI_OKUTA_GET_F(thisx) ((thisx)->params & 0xF) +typedef enum { + /* 0 */ SG_OCTO_TYPE_NONE, + /* 1 */ SG_OCTO_TYPE_RED, + /* 2 */ SG_OCTO_TYPE_BLUE, + /* 3 */ SG_OCTO_TYPE_MAX +} ShootingGalleryOctorokType; + +typedef enum { + /* 0 */ SG_OCTO_ROW_BACK, + /* 1 */ SG_OCTO_ROW_CENTER, + /* 2 */ SG_OCTO_ROW_FRONT, + /* 3 */ SG_OCTO_ROW_MAX +} ShootingGalleryOctorokRow; + +typedef enum { + /* 0 */ SG_OCTO_COL_LEFT, + /* 1 */ SG_OCTO_COL_CENTER, + /* 2 */ SG_OCTO_COL_RIGHT, + /* 3 */ SG_OCTO_COL_MAX +} ShootingGalleryOctorokColumn; + +#define SG_OCTO_GET_INDEX(thisx) ((thisx)->params & 0xF) +#define SG_OCTO_INDEX_FOR_POS(row, column) (((row) * SG_OCTO_COL_MAX) + (column)) + +// This returns the index of the Octorok directly in front of the Octorok at the given index. In other words, it +// returns the index of the Octorok in the same column as the one with the given index, but one row ahead. It's +// assumed that this will only be used for Octoroks in the back or center row; it returns an invalid index for +// Octoroks in the front row. +#define SG_OCTO_INDEX_DIRECTLY_IN_FRONT(index) ((index) + SG_OCTO_COL_MAX) + +// Both of these macros assume that the Octorok types can fit in two bits, hence why the index is multiplied by 2. +#define SG_OCTO_GET_TYPE(octorokFlags, index) (((octorokFlags) >> ((index) * 2)) & SG_OCTO_TYPE_MAX) +#define SG_OCTO_SET_FLAG(type, index) ((type & SG_OCTO_TYPE_MAX) << ((index) * 2)) struct EnSyatekiOkuta; @@ -15,13 +47,13 @@ typedef struct EnSyatekiOkuta { /* 0x144 */ SkelAnime skelAnime; /* 0x188 */ EnSyatekiOkutaActionFunc actionFunc; /* 0x18C */ ColliderCylinder collider; - /* 0x1DC */ Vec3f unk_1D8; + /* 0x1DC */ Vec3f headScale; /* 0x1E4 */ Vec3s jointTable[OCTOROK_LIMB_MAX]; /* 0x244 */ Vec3s morphTable[OCTOROK_LIMB_MAX]; - /* 0x2A4 */ s16 unk_2A4; - /* 0x2A6 */ s16 unk_2A6; + /* 0x2A4 */ s16 deathTimer; + /* 0x2A6 */ s16 type; /* 0x2A8 */ UNK_TYPE1 unk_2A8[0x2]; - /* 0x2AA */ s16 unk_2AA; + /* 0x2AA */ s16 hitResultAlpha; } EnSyatekiOkuta; // size = 0x2AC #endif // Z_EN_SYATEKI_OKUTA_H diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index 4fc8f07c1..fd08f2af8 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -10217,27 +10217,27 @@ 0x80A35DDC:("ObjBell_Draw",), 0x80A35FF0:("EnSyatekiOkuta_Init",), 0x80A3611C:("EnSyatekiOkuta_Destroy",), - 0x80A36148:("func_80A36148",), - 0x80A361B0:("func_80A361B0",), - 0x80A361F4:("func_80A361F4",), - 0x80A36260:("func_80A36260",), - 0x80A362A8:("func_80A362A8",), - 0x80A362F8:("func_80A362F8",), - 0x80A36350:("func_80A36350",), - 0x80A36360:("func_80A36360",), - 0x80A363B4:("func_80A363B4",), - 0x80A36444:("func_80A36444",), - 0x80A36488:("func_80A36488",), - 0x80A364C0:("func_80A364C0",), - 0x80A36504:("func_80A36504",), - 0x80A3657C:("func_80A3657C",), - 0x80A365EC:("func_80A365EC",), - 0x80A368E0:("func_80A368E0",), - 0x80A36A90:("func_80A36A90",), - 0x80A36AF8:("func_80A36AF8",), + 0x80A36148:("EnSyatekiOkuta_SpawnDust",), + 0x80A361B0:("EnSyatekiOkuta_SpawnSplash",), + 0x80A361F4:("EnSyatekiOkuta_IsHiddenByAnotherOctorok",), + 0x80A36260:("EnSyatekiOkuta_SetupAttachToShootingGalleryMan",), + 0x80A362A8:("EnSyatekiOkuta_AttachToShootingGalleryMan",), + 0x80A362F8:("EnSyatekiOkuta_SetupDoNothing",), + 0x80A36350:("EnSyatekiOkuta_DoNothing",), + 0x80A36360:("EnSyatekiOkuta_SetupAppear",), + 0x80A363B4:("EnSyatekiOkuta_Appear",), + 0x80A36444:("EnSyatekiOkuta_SetupFloat",), + 0x80A36488:("EnSyatekiOkuta_Float",), + 0x80A364C0:("EnSyatekiOkuta_SetupHide",), + 0x80A36504:("EnSyatekiOkuta_Hide",), + 0x80A3657C:("EnSyatekiOkuta_SetupDie",), + 0x80A365EC:("EnSyatekiOkuta_Die",), + 0x80A368E0:("EnSyatekiOkuta_UpdateCollision",), + 0x80A36A90:("EnSyatekiOkuta_CheckCollision",), + 0x80A36AF8:("EnSyatekiOkuta_CheckForSignal",), 0x80A36B9C:("EnSyatekiOkuta_Update",), - 0x80A36CB0:("func_80A36CB0",), - 0x80A370EC:("func_80A370EC",), + 0x80A36CB0:("EnSyatekiOkuta_UpdateHeadScale",), + 0x80A370EC:("EnSyatekiOkuta_GetSnoutScale",), 0x80A37294:("EnSyatekiOkuta_OverrideLimbDraw",), 0x80A3735C:("EnSyatekiOkuta_Draw",), 0x80A37ED0:("ObjShutter_Init",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index b2c82bf7f..bce95ca11 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -11207,11 +11207,11 @@ 0x80A37A88:("D_80A37A88","UNK_TYPE1","",0x1), 0x80A37B08:("D_80A37B08","UNK_TYPE1","",0x1), 0x80A37B88:("D_80A37B88","UNK_TYPE1","",0x1), - 0x80A37B90:("D_80A37B90","UNK_TYPE1","",0x1), - 0x80A37B94:("D_80A37B94","UNK_TYPE1","",0x1), - 0x80A37B98:("D_80A37B98","UNK_TYPE1","",0x1), - 0x80A37BA4:("D_80A37BA4","UNK_TYPE1","",0x1), - 0x80A37BA8:("D_80A37BA8","UNK_TYPE1","",0x1), + 0x80A37B90:("sDustPrimColor","UNK_TYPE1","",0x1), + 0x80A37B94:("sDustEnvColor","UNK_TYPE1","",0x1), + 0x80A37B98:("sBubbleAccel","UNK_TYPE1","",0x1), + 0x80A37BA4:("sBubblePrimColor","UNK_TYPE1","",0x1), + 0x80A37BA8:("sBubbleEnvColor","UNK_TYPE1","",0x1), 0x80A37BB0:("D_80A37BB0","f32","",0x4), 0x80A37BB4:("D_80A37BB4","f32","",0x4), 0x80A37BB8:("D_80A37BB8","f32","",0x4), From 587d12e3cbb2a1ffb6774c0823c54ce0e80a579b Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sun, 18 Jun 2023 02:43:47 -0400 Subject: [PATCH 08/82] Yet another header cleanup (#1284) * thread, scene and interface * non header stuff * fix missing stuff * z64sound_source.h * collision_check.h * Update include/z64sound_source.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update include/z64scene.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update include/z64thread.h Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * review * review * Update src/code/z_collision_check.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update src/code/z_sound_source.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- include/functions.h | 344 ---------------------------------- include/global.h | 1 - include/macros.h | 1 - include/variables.h | 33 +--- include/z64.h | 78 +------- include/z64actor.h | 58 +----- include/z64animation_legacy.h | 4 +- include/z64collision_check.h | 246 ++++++++++++++++++++++++ include/z64game.h | 4 +- include/z64interface.h | 54 ++++++ include/z64scene.h | 98 ++++++++++ include/z64sound_source.h | 24 +++ include/z64thread.h | 24 +++ src/boot_O2_g3/boot_main.c | 1 + src/boot_O2_g3/idle.c | 3 + src/boot_O2_g3/irqmgr.c | 1 + src/boot_O2_g3/z_std_dma.c | 1 + src/code/flg_set.c | 5 + src/code/main.c | 1 + src/code/sched.c | 1 + src/code/sys_flashrom.c | 1 + src/code/sys_slowly.c | 2 + src/code/z_collision_check.c | 7 + src/code/z_nmi_buff.c | 7 + src/code/z_scene.c | 66 +++---- src/code/z_sound_source.c | 9 +- tools/disasm/variables.txt | 16 +- 27 files changed, 531 insertions(+), 559 deletions(-) create mode 100644 include/z64sound_source.h create mode 100644 include/z64thread.h diff --git a/include/functions.h b/include/functions.h index 6a9ebcf60..307dc4365 100644 --- a/include/functions.h +++ b/include/functions.h @@ -787,217 +787,6 @@ void Camera_SetTargetActor(Camera* camera, Actor* actor); f32 Camera_GetWaterYPos(Camera* camera); void func_800E0348(Camera* camera); -DamageTable* DamageTable_Get(s32 index); -void DamageTable_Clear(DamageTable* damageTable); -f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, u32* effect); -f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac); -s32 CollisionCheck_GetToucherDamage(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo); -s32 Collider_InitBase(PlayState* play, Collider* collider); -s32 Collider_DestroyBase(PlayState* play, Collider* collider); -s32 Collider_SetBaseToActor(PlayState* play, Collider* collider, ColliderInitToActor* src); -s32 Collider_SetBaseType1(PlayState* play, Collider* collider, Actor* actor, ColliderInitType1* src); -s32 Collider_SetBase(PlayState* play, Collider* collider, Actor* actor, ColliderInit* src); -void Collider_ResetATBase(PlayState* play, Collider* collider); -void Collider_ResetACBase(PlayState* play, Collider* collider); -void Collider_ResetOCBase(PlayState* play, Collider* collider); -s32 Collider_InitTouch(PlayState* play, ColliderTouch* touch); -s32 Collider_DestroyTouch(PlayState* play, ColliderTouch* touch); -s32 Collider_SetTouch(PlayState* play, ColliderTouch* touch, ColliderTouchInit* src); -void Collider_ResetATInfoUnk(PlayState* play, ColliderInfo* info); -s32 Collider_InitBump(PlayState* play, ColliderBump* bump); -s32 Collider_DestroyBump(PlayState* play, ColliderBump* bump); -s32 Collider_SetBump(PlayState* play, ColliderBump* bump, ColliderBumpInit* src); -s32 Collider_InitInfo(PlayState* play, ColliderInfo* info); -s32 Collider_DestroyInfo(PlayState* play, ColliderInfo* info); -s32 Collider_SetInfo(PlayState* play, ColliderInfo* info, ColliderInfoInit* src); -void Collider_ResetATInfo(PlayState* play, ColliderInfo* info); -void Collider_ResetACInfo(PlayState* play, ColliderInfo* info); -void Collider_ResetOCInfo(PlayState* play, ColliderInfo* info); -s32 Collider_InitJntSphElementDim(PlayState* play, ColliderJntSphElementDim* dim); -s32 Collider_DestroyJntSphElementDim(PlayState* play, ColliderJntSphElementDim* dim); -s32 Collider_SetJntSphElementDim(PlayState* play, ColliderJntSphElementDim* dest, ColliderJntSphElementDimInit* src); -s32 Collider_InitJntSphElement(PlayState* play, ColliderJntSphElement* element); -s32 Collider_DestroyJntSphElement(PlayState* play, ColliderJntSphElement* element); -s32 Collider_SetJntSphElement(PlayState* play, ColliderJntSphElement* dest, ColliderJntSphElementInit* src); -s32 Collider_ResetJntSphElementAT(PlayState* play, ColliderJntSphElement* collider); -s32 Collider_ResetJntSphElementAC(PlayState* play, ColliderJntSphElement* collider); -s32 Collider_ResetJntSphElementOC(PlayState* play, ColliderJntSphElement* collider); -s32 Collider_InitJntSph(PlayState* play, ColliderJntSph* collider); -s32 Collider_FreeJntSph(PlayState* play, ColliderJntSph* collider); -s32 Collider_DestroyJntSph(PlayState* play, ColliderJntSph* collider); -s32 Collider_SetJntSphToActor(PlayState* play, ColliderJntSph* collider, ColliderJntSphInitToActor* src); -s32 Collider_SetJntSphAllocType1(PlayState* play, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInitType1* src); -s32 Collider_SetJntSph(PlayState* play, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements); -s32 Collider_InitAndSetJntSph(PlayState* play, ColliderJntSph* sphereGroup, Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements); -s32 Collider_ResetJntSphAT(PlayState* play, Collider* collider); -s32 Collider_ResetJntSphAC(PlayState* play, Collider* collider); -s32 Collider_ResetJntSphOC(PlayState* play, Collider* collider); -s32 Collider_InitCylinderDim(PlayState* play, Cylinder16* dim); -s32 Collider_DestroyCylinderDim(PlayState* play, Cylinder16* dim); -s32 Collider_SetCylinderDim(PlayState* play, Cylinder16* dim, Cylinder16* src); -s32 Collider_InitCylinder(PlayState* play, ColliderCylinder* collider); -s32 Collider_DestroyCylinder(PlayState* play, ColliderCylinder* collider); -s32 Collider_SetCylinderToActor(PlayState* play, ColliderCylinder* collider, ColliderCylinderInitToActor* src); -s32 Collider_SetCylinderType1(PlayState* play, ColliderCylinder* collider, Actor* actor, ColliderCylinderInitType1* src); -s32 Collider_SetCylinder(PlayState* play, ColliderCylinder* collider, Actor* actor, ColliderCylinderInit* src); -s32 Collider_InitAndSetCylinder(PlayState* play, ColliderCylinder* collider, Actor* actor, ColliderCylinderInit* src); -s32 Collider_ResetCylinderAT(PlayState* play, Collider* collider); -s32 Collider_ResetCylinderAC(PlayState* play, Collider* collider); -s32 Collider_ResetCylinderOC(PlayState* play, Collider* collider); -s32 Collider_InitTrisElementDim(PlayState* play, TriNorm* dim); -s32 Collider_DestroyTrisElementDim(PlayState* play, TriNorm* dim); -s32 Collider_SetTrisElementDim(PlayState* play, TriNorm* dim, ColliderTrisElementDimInit* src); -s32 Collider_InitTrisElement(PlayState* play, ColliderTrisElement* element); -s32 Collider_DestroyTrisElement(PlayState* play, ColliderTrisElement* element); -s32 Collider_SetTrisElement(PlayState* play, ColliderTrisElement* element, ColliderTrisElementInit* src); -s32 Collider_ResetTrisElementAT(PlayState* play, ColliderTrisElement* element); -s32 Collider_ResetTrisElementAC(PlayState* play, ColliderTrisElement* element); -s32 Collider_ResetTrisElementOC(PlayState* play, ColliderTrisElement* element); -s32 Collider_InitTris(PlayState* play, ColliderTris* tris); -s32 Collider_FreeTris(PlayState* play, ColliderTris* tris); -s32 Collider_DestroyTris(PlayState* play, ColliderTris* tris); -s32 Collider_SetTrisAllocType1(PlayState* play, ColliderTris* tris, Actor* actor, ColliderTrisInitType1* src); -s32 Collider_SetTris(PlayState* play, ColliderTris* triGroup, Actor* actor, ColliderTrisInit* src, ColliderTrisElement* tris); -s32 Collider_InitAndSetTris(PlayState* play, ColliderTris* tris, Actor* actor, ColliderTrisInit* src, ColliderTrisElement* elements); -s32 Collider_ResetTrisAT(PlayState* play, Collider* collider); -s32 Collider_ResetTrisAC(PlayState* play, Collider* collider); -s32 Collider_ResetTrisOC(PlayState* play, Collider* collider); -s32 Collider_InitQuadDim(PlayState* play, ColliderQuadDim* dim); -s32 Collider_DestroyQuadDim(PlayState* play, ColliderQuadDim* dim); -s32 Collider_ResetQuadACDist(PlayState* play, ColliderQuadDim* dim); -void Collider_SetQuadMidpoints(ColliderQuadDim* dim); -s32 Collider_SetQuadDim(PlayState* play, ColliderQuadDim* dim, ColliderQuadDimInit* init); -s32 Collider_InitQuad(PlayState* play, ColliderQuad* collider); -s32 Collider_DestroyQuad(PlayState* play, ColliderQuad* collider); -s32 Collider_SetQuadType1(PlayState* play, ColliderQuad* collider, Actor* actor, ColliderQuadInitType1* src); -s32 Collider_SetQuad(PlayState* play, ColliderQuad* collider, Actor* actor, ColliderQuadInit* src); -s32 Collider_InitAndSetQuad(PlayState* play, ColliderQuad* collider, Actor* actor, ColliderQuadInit* src); -s32 Collider_ResetQuadAT(PlayState* play, Collider* collider); -s32 Collider_ResetQuadAC(PlayState* play, Collider* collider); -s32 Collider_ResetQuadOC(PlayState* play, Collider* collider); -s32 Collider_QuadSetNearestAC(PlayState* play, ColliderQuad* quad, Vec3f* hitPos); -s32 Collider_InitSphere(PlayState* play, ColliderSphere* collider); -s32 Collider_DestroySphere(PlayState* play, ColliderSphere* collider); -s32 Collider_SetSphere(PlayState* play, ColliderSphere* collider, Actor* actor, ColliderSphereInit* src); -s32 Collider_InitAndSetSphere(PlayState* play, ColliderSphere* collider, Actor* actor, ColliderSphereInit* src); -s32 Collider_ResetSphereAT(PlayState* play, Collider* collider); -s32 Collider_ResetSphereAC(PlayState* play, Collider* collider); -s32 Collider_ResetSphereOC(PlayState* play, Collider* collider); -s32 Collider_InitLine(PlayState* play, OcLine* line); -s32 Collider_DestroyLine(PlayState* play, OcLine* line); -s32 Collider_SetLinePoints(PlayState* play, OcLine* line, Vec3f* a, Vec3f* b); -s32 Collider_SetLine(PlayState* play, OcLine* line, OcLine* src); -s32 Collider_ResetLineOC(PlayState* play, OcLine* line); -void CollisionCheck_InitContext(PlayState* play, CollisionCheckContext* colCtxt); -void CollisionCheck_DestroyContext(PlayState* play, CollisionCheckContext* colCtxt); -void CollisionCheck_ClearContext(PlayState* play, CollisionCheckContext* colCtxt); -void CollisionCheck_EnableSAC(PlayState* play, CollisionCheckContext* colCtxt); -void CollisionCheck_DisableSAC(PlayState* play, CollisionCheckContext* colCtxt); -s32 CollisionCheck_SetAT(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -s32 CollisionCheck_SetAT_SAC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index); -s32 CollisionCheck_SetAC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -s32 CollisionCheck_SetAC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index); -s32 CollisionCheck_SetOC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -s32 CollisionCheck_SetOC_SAC(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index); -s32 CollisionCheck_SetOCLine(PlayState* play, CollisionCheckContext* colCtxt, OcLine* line); -s32 CollisionCheck_SkipTouch(ColliderInfo* info); -s32 CollisionCheck_SkipBump(ColliderInfo* info); -s32 CollisionCheck_NoSharedFlags(ColliderInfo* toucher, ColliderInfo* bumper); -void CollisionCheck_NoBlood(PlayState* play, Collider* collider, Vec3f* v); -void CollisionCheck_BlueBlood(PlayState* play, Collider* collider, Vec3f* v); -void CollisionCheck_GreenBlood(PlayState* play, Collider* collider, Vec3f* v); -void CollisionCheck_WaterBurst(PlayState* play, Collider* collider, Vec3f* v); -void CollisionCheck_RedBlood(PlayState* play, Collider* collider, Vec3f* v); -void CollisionCheck_RedBloodUnused(PlayState* play, Collider* collider, Vec3f* v); -void CollisionCheck_HitSolid(PlayState* play, ColliderInfo* info, Collider* collider, Vec3f* hitPos); -s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo); -void CollisionCheck_HitEffects(PlayState* play, Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, Vec3f* hitPos); -void CollisionCheck_SetBounce(Collider* at, Collider* ac); -s32 CollisionCheck_SetATvsAC(PlayState* play, Collider* at, ColliderInfo* atInfo, Vec3f* atPos, Collider* ac, ColliderInfo* acInfo, Vec3f* acPos, Vec3f* hitPos); -void CollisionCheck_TrisAvgPoint(ColliderTrisElement* tri, Vec3f* avg); -void CollisionCheck_QuadAvgPoint(ColliderQuad* quad, Vec3f* avg); -void CollisionCheck_AC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_JntSphVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_JntSphVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_JntSphVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_CylVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_CylVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_CylVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_CylVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_CylVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_TrisVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_TrisVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_TrisVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_TrisVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_TrisVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_QuadVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_QuadVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_QuadVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_QuadVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_QuadVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_SphereVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_SphereVsCylinder(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_SphereVsTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_SphereVsQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_AC_SphereVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); -void CollisionCheck_SetJntSphHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_SetCylHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_SetTrisHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_SetQuadHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_SetSphereHitFX(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_SetHitEffects(PlayState* play, CollisionCheckContext* colCtxt); -void CollisionCheck_AC(PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT); -void CollisionCheck_AT(PlayState* play, CollisionCheckContext* colCtxt); -s32 CollisionCheck_GetMassType(u8 mass); -void CollisionCheck_SetOCvsOC(PlayState* play, Collider* left, ColliderInfo* leftInfo, Vec3f* leftPos, Collider* right, ColliderInfo* rightInfo, Vec3f* rightPos, f32 overlap); -void CollisionCheck_OC_JntSphVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -void CollisionCheck_OC_JntSphVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -void CollisionCheck_OC_JntSphVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -void CollisionCheck_OC_CylVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -void CollisionCheck_OC_CylVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -void CollisionCheck_OC_CylVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -void CollisionCheck_OC_SphereVsJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -void CollisionCheck_OC_SphereVsCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -void CollisionCheck_OC_SphereVsSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); -s32 CollisionCheck_SkipOC(Collider* collider); -s32 CollisionCheck_Incompatible(Collider* left, Collider* right); -void CollisionCheck_OC(PlayState* play, CollisionCheckContext* colCtxt); -void CollisionCheck_InitInfo(CollisionCheckInfo* info); -void CollisionCheck_ResetDamage(CollisionCheckInfo* info); -void CollisionCheck_SetInfoNoDamageTable(CollisionCheckInfo* info, CollisionCheckInfoInit* init); -void CollisionCheck_SetInfo(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit* init); -void CollisionCheck_SetInfo2(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit2* init); -void CollisionCheck_SetInfoGetDamageTable(CollisionCheckInfo* info, s32 index, CollisionCheckInfoInit2* init); -void CollisionCheck_ApplyDamage(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, ColliderInfo* info); -void CollisionCheck_ApplyDamageJntSph(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_ApplyDamageCyl(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_ApplyDamageTris(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_ApplyDamageQuad(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_ApplyDamageSphere(PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); -void CollisionCheck_Damage(PlayState* play, CollisionCheckContext* colCtxt); -s32 CollisionCheck_LineOC_JntSph(PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b); -s32 CollisionCheck_LineOC_Cyl(PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b); -s32 CollisionCheck_LineOC_Sphere(PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b); -s32 CollisionCheck_LineOC(PlayState* play, CollisionCheckContext* colChkCtx, Vec3f* a, Vec3f* b, Actor** exclusions, s32 numExclusions); -s32 CollisionCheck_LineOCCheckAll(PlayState* play, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b); -s32 CollisionCheck_LineOCCheck(PlayState* play, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b, Actor** exclusions, s32 numExclusions); -void Collider_UpdateCylinder(Actor* actor, ColliderCylinder* collider); -void Collider_SetCylinderPosition(ColliderCylinder* collider, Vec3s* pos); -void Collider_SetQuadVertices(ColliderQuad* collider, Vec3f* a, Vec3f* b, Vec3f* c, Vec3f* d); -void Collider_SetTrisVertices(ColliderTris* collider, s32 index, Vec3f* a, Vec3f* b, Vec3f* c); -void Collider_SetTrisDim(PlayState* play, ColliderTris* collider, s32 index, ColliderTrisElementDimInit* init); -void Collider_UpdateSpheres(s32 limb, ColliderJntSph* collider); -void Collider_UpdateSpheresElement(ColliderJntSph* collider, s32 index, Actor* actor); -void Collider_UpdateSphere(s32 limb, ColliderSphere* collider); -void CollisionCheck_SpawnRedBlood(PlayState* play, Vec3f* v); -void CollisionCheck_SpawnWaterDroplets(PlayState* play, Vec3f* v); -void CollisionCheck_SpawnShieldParticles(PlayState* play, Vec3f* v); -void CollisionCheck_SpawnShieldParticlesMetal(PlayState* play, Vec3f* v); -void CollisionCheck_SpawnShieldParticlesMetalSound(PlayState* play, Vec3f* v, Vec3f* pos); -void CollisionCheck_SpawnShieldParticlesMetal2(PlayState* play, Vec3f* v); -void CollisionCheck_SpawnShieldParticlesWood(PlayState* play, Vec3f* v, Vec3f* pos); -s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* actorPos, Vec3f* itemPos, Vec3f* itemProjPos, Vec3f* out1, Vec3f* out2); void Actor_ContinueText(PlayState* play, Actor* actor, u16 textId); s32 Flags_GetEventChkInf(s32 flag); void Flags_SetEventChkInf(s32 flag); @@ -1011,10 +800,6 @@ void SaveContext_Init(void); void GetItem_Draw(PlayState* play, s16 drawId); -void SoundSource_InitAll(PlayState* play); -void SoundSource_UpdateAll(PlayState* play); -void SoundSource_PlaySfxAtFixedWorldPos(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId); -void SoundSource_PlaySfxEachFrameAtFixedWorldPos(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId); u16 QuestHint_GetTatlTextId(PlayState* play); u16 Text_GetFaceReaction(PlayState* play, u32 reactionSet); @@ -1355,51 +1140,6 @@ Vec3s* OLib_Vec3fDiffBinAng(Vec3s* dest, Vec3f* a, Vec3f* b); void OLib_Vec3fDiff(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); void OLib_Vec3fAdd(PosRot* a, Vec3f* b, Vec3f* dest, s16 mode); -Gfx* Gfx_DrawTexRectRGBA16(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); -Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); -Gfx* Gfx_DrawTexRectI8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); -Gfx* Gfx_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 point); -Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point); - -void Interface_StartTimer(s16 timerId, s16 seconds); -void Interface_StartPostmanTimer(s16 seconds, s16 bunnyHoodState); -void Interface_NewDay(PlayState* play, s32 day); -void Interface_SetHudVisibility(u16 hudVisibility); -void Interface_UpdateButtonsPart2(PlayState* play); -void Interface_SetSceneRestrictions(PlayState* play); -void Interface_InitMinigame(PlayState* play); -void Interface_LoadItemIconImpl(PlayState* play, u8 btn); -void Interface_LoadItemIcon(PlayState* play, u8 btn); -void Interface_UpdateButtonsAlt(PlayState* play, u16 flag); -u8 Item_Give(PlayState* play, u8 item); -u8 Item_CheckObtainability(u8 item); -void Inventory_DeleteItem(s16 item, s16 slot); -void Inventory_UnequipItem(s16 item); -s32 Inventory_ReplaceItem(PlayState* play, u8 oldItem, u8 newItem); -void Inventory_UpdateDeitySwordEquip(PlayState* play) ; -s32 Inventory_HasEmptyBottle(void); -s32 Inventory_HasItemInBottle(u8 item); -void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 btn); -s32 Inventory_ConsumeFairy(PlayState* play); -void Inventory_UpdateItem(PlayState* play, s16 slot, s16 item); -void func_8011552C(PlayState* play, u16 arg1); -void func_801155B4(PlayState* play, s16 arg1); -void func_80115764(PlayState* play, UNK_TYPE arg1); -void func_80115844(PlayState* play, s16 doAction); -s32 Health_ChangeBy(PlayState* play, s16 healthChange); -void Health_GiveHearts(s16 hearts); -void Rupees_ChangeBy(s16 rupeeChange); -void Inventory_ChangeAmmo(s16 item, s16 ammoChange); -void Magic_Add(PlayState* play, s16 magicToAdd); -void Magic_Reset(PlayState* play); -s32 Magic_Consume(PlayState* play, s16 magicToConsume, s16 type); -void Interface_SetPerfectLetters(PlayState* play, s16 perfectLettersType); -void Interface_StartMoonCrash(PlayState* play); -void Interface_Draw(PlayState* play); -void Interface_Update(PlayState* play); -void Interface_Destroy(PlayState* play); -void Interface_Init(PlayState* play); - Path* Path_GetByIndex(PlayState* play, s16 index, s16 indexNone); f32 Path_OrientAndGetDistSq(Actor* actor, Path* path, s16 waypoint, s16* yaw); void Path_CopyLastPoint(Path* path, Vec3f* dest); @@ -1498,90 +1238,6 @@ void Inventory_SaveDekuPlaygroundHighScore(s16 timerId); void Inventory_IncrementSkullTokenCount(s16 sceneIndex); s16 Inventory_GetSkullTokenCount(s16 sceneIndex); void Inventory_SaveLotteryCodeGuess(PlayState* play); -s32 Object_Spawn(ObjectContext* objectCtx, s16 id); -void Object_InitBank(GameState* gameState, ObjectContext* objectCtx); -void Object_UpdateBank(ObjectContext* objectCtx); -s32 Object_GetIndex(ObjectContext* objectCtx, s16 objectId); -s32 Object_IsLoaded(ObjectContext* objectCtx, s32 index); -void Object_LoadAll(ObjectContext* objectCtx); -void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, s16 id); -void Scene_CommandSpawnList(PlayState* play, SceneCmd* cmd); -void Scene_CommandActorList(PlayState* play, SceneCmd* cmd); -void Scene_CommandActorCutsceneCamList(PlayState* play, SceneCmd* cmd); -void Scene_CommandCollisionHeader(PlayState* play, SceneCmd* cmd); -void Scene_CommandRoomList(PlayState* play, SceneCmd* cmd); -void Scene_CommandEntranceList(PlayState* play, SceneCmd* cmd); -void Scene_CommandSpecialFiles(PlayState* play, SceneCmd* cmd); -void Scene_CommandRoomBehavior(PlayState* play, SceneCmd* cmd); -void Scene_CommandMesh(PlayState* play, SceneCmd* cmd); -void Scene_CommandObjectList(PlayState* play, SceneCmd* cmd); -void Scene_CommandLightList(PlayState* play, SceneCmd* cmd); -void Scene_CommandPathList(PlayState* play, SceneCmd* cmd); -void Scene_CommandTransiActorList(PlayState* play, SceneCmd* cmd); -void Door_InitContext(GameState* gameState, DoorContext* doorCtx); -void Scene_CommandEnvLightSettings(PlayState* play, SceneCmd* cmd); -void Scene_LoadAreaTextures(PlayState* play, s32 fileIndex); -void Scene_CommandSkyboxSettings(PlayState* play, SceneCmd* cmd); -void Scene_CommandSkyboxDisables(PlayState* play, SceneCmd* cmd); -void Scene_CommandTimeSettings(PlayState* play, SceneCmd* cmd); -void Scene_CommandWindSettings(PlayState* play, SceneCmd* cmd); -void Scene_CommandExitList(PlayState* play, SceneCmd* cmd); -void Scene_Command09(PlayState* play, SceneCmd* cmd); -void Scene_CommandSoundSettings(PlayState* play, SceneCmd* cmd); -void Scene_CommandEchoSetting(PlayState* play, SceneCmd* cmd); -void Scene_CommandAltHeaderList(PlayState* play, SceneCmd* cmd); -void Scene_CommandCutsceneScriptList(PlayState* play, SceneCmd* cmd); -void Scene_CommandCutsceneList(PlayState* play, SceneCmd* cmd); -void Scene_CommandMiniMap(PlayState* play, SceneCmd* cmd); -void Scene_Command1D(PlayState* play, SceneCmd* cmd); -void Scene_CommandMiniMapCompassInfo(PlayState* play, SceneCmd* cmd); -void Scene_CommandSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd); -void Scene_CommandAnimatedMaterials(PlayState* play, SceneCmd* cmd); -void Scene_SetExitFade(PlayState* play); -s32 Scene_ExecuteCommands(PlayState* play, SceneCmd* sceneCmd); -u16 Entrance_Create(s32 scene, s32 spawn, s32 layer); -u16 Entrance_CreateFromSpawn(s32 spawn); -void Scene_Draw(PlayState* play); -void Scene_DrawConfigDefault(PlayState* play); -Gfx* AnimatedMat_TexScroll(PlayState* play, AnimatedMatTexScrollParams* params); -void AnimatedMat_DrawTexScroll(PlayState* play, s32 segment, void* params); -Gfx* AnimatedMat_TwoLayerTexScroll(PlayState* play, AnimatedMatTexScrollParams* params); -void AnimatedMat_DrawTwoTexScroll(PlayState* play, s32 segment, void* params); -void AnimatedMat_SetColor(PlayState* play, s32 segment, F3DPrimColor* primColorResult, F3DEnvColor* envColor); -void AnimatedMat_DrawColor(PlayState* play, s32 segment, void* params); -s32 AnimatedMat_Lerp(s32 min, s32 max, f32 norm); -void AnimatedMat_DrawColorLerp(PlayState* play, s32 segment, void* params); -f32 Scene_LagrangeInterp(s32 n, f32 x[], f32 fx[], f32 xp); -u8 Scene_LagrangeInterpColor(s32 n, f32 x[], f32 fx[], f32 xp); -void AnimatedMat_DrawColorNonLinearInterp(PlayState* play, s32 segment, void* params); -void AnimatedMat_DrawTexCycle(PlayState* play, s32 segment, void* params); -void AnimatedMat_DrawMain(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step, u32 flags); -void AnimatedMat_Draw(PlayState* play, AnimatedMaterial* matAnim); -void AnimatedMat_DrawOpa(PlayState* play, AnimatedMaterial* matAnim); -void AnimatedMat_DrawXlu(PlayState* play, AnimatedMaterial* matAnim); -void AnimatedMat_DrawAlpha(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio); -void AnimatedMat_DrawAlphaOpa(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio); -void AnimatedMat_DrawAlphaXlu(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio); -void AnimatedMat_DrawStep(PlayState* play, AnimatedMaterial* matAnim, u32 step); -void AnimatedMat_DrawStepOpa(PlayState* play, AnimatedMaterial* matAnim, u32 step); -void AnimatedMat_DrawStepXlu(PlayState* play, AnimatedMaterial* matAnim, u32 step); -void AnimatedMat_DrawAlphaStep(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step); -void AnimatedMat_DrawAlphaStepOpa(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step); -void AnimatedMat_DrawAlphaStepXlu(PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step); -void Scene_DrawConfigMatAnim(PlayState* play); -void Scene_DrawConfig3(PlayState* play); -void Scene_DrawConfig4(PlayState* play); -void Scene_DrawConfigDoNothing(PlayState* play); -void Scene_SetRenderModeXlu(PlayState* play, s32 index, u32 flags); -void Scene_SetCullFlag(PlayState* play, s32 index, u32 flags); -void Scene_DrawConfig5(PlayState* play); -void Scene_DrawConfigMatAnimManualStep(PlayState* play); -void Scene_DrawConfigGreatBayTemple(PlayState* play); -EntranceTableEntry* Entrance_GetTableEntry(u16 entrance); -s32 Entrance_GetSceneId(u16 entrance); -s32 Entrance_GetSceneIdAbsolute(u16 entrance); -s32 Entrance_GetSpawnNum(u16 entrance); -s32 Entrance_GetTransitionFlags(u16 entrance); s32 Schedule_RunScript(PlayState* play, u8* script, ScheduleOutput* output); diff --git a/include/global.h b/include/global.h index 9fa3ef7bc..193c2d90d 100644 --- a/include/global.h +++ b/include/global.h @@ -2,7 +2,6 @@ #define GLOBAL_H #include "z64.h" -#include "regs.h" #include "functions.h" #include "variables.h" #include "macros.h" diff --git a/include/macros.h b/include/macros.h index 6b54474b6..7924066b6 100644 --- a/include/macros.h +++ b/include/macros.h @@ -3,7 +3,6 @@ #include "libc/stdint.h" #include "ultra64/convert.h" -#include "z64.h" #define SCREEN_WIDTH 320 #define SCREEN_HEIGHT 240 diff --git a/include/variables.h b/include/variables.h index 7cdf40e31..1886d3519 100644 --- a/include/variables.h +++ b/include/variables.h @@ -366,7 +366,7 @@ extern UNK_PTR D_801AE260[3]; // extern UNK_TYPE1 D_801AE48C; // extern UNK_TYPE1 D_801AE490; extern EffectSsOverlay gParticleOverlayTable[39]; -// extern FlagSetEntry sFlagEntries[]; + // extern s32 sEntryIndex; // extern u32 sCurrentBit; // extern s32 sTimer; @@ -377,36 +377,6 @@ extern BgCheckSceneSubdivisionEntry sSceneSubdivisionList[]; extern BgSpecialSceneMaxObjects sCustomDynapolyMem[]; // extern UNK_TYPE1 D_801B4708; -extern DamageTable sDamageTablePresets[23]; -extern f32 damageMultipliers[16]; -extern Collider defaultCollider; -extern ColliderTouch defaultColliderTouch; -extern ColliderBump defaultColliderBump; -extern ColliderInfo defaultColliderInfo; -extern ColliderJntSphElementDim defaultColliderJntSphElementDim; -extern Cylinder16 defaultColliderCylinderDim; -extern TriNorm defaultColliderTrisElementDim; -extern ColliderQuadDim defaultColliderQuadDim; -extern Vec3f defaultLinePoint; -extern ColChkResetFunc sATResetFuncs[COLSHAPE_MAX]; -extern ColChkResetFunc sACResetFuncs[COLSHAPE_MAX]; -extern ColChkResetFunc sOCResetFuncs[COLSHAPE_MAX]; -extern ColChkBloodFunc sBloodFuncs[6]; -extern HitInfo sHitInfo[14]; -extern ColChkApplyFunc sColChkApplyFuncs[COLSHAPE_MAX]; -extern ColChkVsFunc sACVsFuncs[COLSHAPE_MAX][COLSHAPE_MAX]; -extern ColChkVsFunc sOCVsFuncs[COLSHAPE_MAX][COLSHAPE_MAX]; -extern CollisionCheckInfo defaultColChkInfo; -extern ColChkApplyFunc sApplyDamageFuncs[COLSHAPE_MAX]; -extern ColChkLineFunc sOCLineCheckFuncs[COLSHAPE_MAX]; -extern EffectShieldParticleInit shieldParticleInitMetal; -extern EffectShieldParticleInit shieldParticleInitWood; -// extern UNK_TYPE4 D_801BB090; -// extern UNK_TYPE1 D_801BB094; -// extern UNK_TYPE1 D_801BB0DC; -// extern UNK_TYPE2 D_801BB0FC; -// extern UNK_TYPE1 D_801BB100; - extern u8 gOpeningEntranceIndex; extern ActorCutscene sGlobalCutsceneList[8]; @@ -2250,7 +2220,6 @@ extern s16 D_801F4E7A; // extern UNK_TYPE1 D_801F5730; // extern UNK_TYPE1 D_801F57B4; // extern UNK_TYPE1 D_801F5834; -// extern NmiBuff* gNMIBuffer; // extern UNK_TYPE1 sSkyboxDrawMatrix; // extern UNK_TYPE1 D_801F6AF0; diff --git a/include/z64.h b/include/z64.h index 641a060b4..6d9ff59be 100644 --- a/include/z64.h +++ b/include/z64.h @@ -60,67 +60,12 @@ #include "z64schedule.h" #include "z64skin.h" #include "z64skybox.h" +#include "z64sound_source.h" #include "z64subs.h" #include "z64transition.h" #include "z64view.h" #include "regs.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_FLASHROM 13 -#define Z_THREAD_ID_DMAMGR 18 -#define Z_THREAD_ID_IRQMGR 19 - -#define Z_PRIORITY_SLOWLY 5 -#define Z_PRIORITY_GRAPH 9 -#define Z_PRIORITY_AUDIOMGR 11 -#define Z_PRIORITY_IDLE 12 -#define Z_PRIORITY_MAIN 12 -#define Z_PRIORITY_FLASHROM 13 -#define Z_PRIORITY_PADMGR 15 -#define Z_PRIORITY_SCHED 16 -#define Z_PRIORITY_DMAMGR 17 -#define Z_PRIORITY_IRQMGR 18 - -typedef enum { - /* -1 */ EQUIP_SLOT_NONE = -1, - /* 0 */ EQUIP_SLOT_B, - /* 1 */ EQUIP_SLOT_C_LEFT, - /* 2 */ EQUIP_SLOT_C_DOWN, - /* 3 */ EQUIP_SLOT_C_RIGHT, - /* 4 */ EQUIP_SLOT_A -} EquipSlot; - -typedef struct { - /* 0x0 */ s8 segment; - /* 0x2 */ s16 type; - /* 0x4 */ void* params; -} AnimatedMaterial; // size = 0x8 - -typedef struct { - /* 0x0 */ Vec3s pos; - /* 0x6 */ s16 unk_06; - /* 0x8 */ Gfx* opa; - /* 0xC */ Gfx* xlu; -} PolygonDlist2; // size = 0x10 - -typedef struct { - /* 0x0 */ u8 type; - /* 0x1 */ u8 num; // number of dlist entries - /* 0x4 */ void* start; - /* 0x8 */ void* end; -} PolygonType2; // size = 0xC - -typedef struct { - /* 0x00 */ u32 resetting; - /* 0x04 */ u32 resetCount; - /* 0x08 */ OSTime duration; - /* 0x10 */ OSTime resetTime; -} NmiBuff; // size >= 0x18 - typedef struct { /* 0x00 */ s32 requestType; /* 0x04 */ OSMesg response; @@ -162,14 +107,6 @@ typedef struct { /* 0x38 */ FaultDrawerCallback inputCallback; } FaultDrawer; // size = 0x3C -typedef struct { - /* 0x00 */ u8 countdown; - /* 0x01 */ u8 playSfxEachFrame; - /* 0x02 */ u16 sfxId; - /* 0x04 */ Vec3f worldPos; - /* 0x10 */ Vec3f projectedPos; -} SoundSource; // size = 0x1C - typedef void(*fault_update_input_func)(Input* input); typedef struct { @@ -411,12 +348,6 @@ typedef struct { struct PlayState; -typedef s32 (*ColChkResetFunc)(struct PlayState*, Collider*); -typedef void (*ColChkBloodFunc)(struct PlayState*, Collider*, Vec3f*); -typedef void (*ColChkApplyFunc)(struct PlayState*, CollisionCheckContext*, Collider*); -typedef void (*ColChkVsFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Collider*); -typedef s32 (*ColChkLineFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*); - typedef struct { /* 0x000 */ IrqMgr* irqMgr; /* 0x004 */ SchedContext* sched; @@ -456,7 +387,7 @@ typedef struct PlayState { /* 0x00830 */ CollisionContext colCtx; /* 0x01CA0 */ ActorContext actorCtx; /* 0x01F24 */ CutsceneContext csCtx; - /* 0x01F78 */ SoundSource soundSources[16]; + /* 0x01F78 */ SoundSource soundSources[SOUND_SOURCE_COUNT]; /* 0x02138 */ EffFootmark footprintInfo[100]; /* 0x046B8 */ SramContext sramCtx; /* 0x046E0 */ SkyboxContext skyboxCtx; @@ -568,11 +499,6 @@ typedef struct { /* 0x14 */ Gfx* dList; } VisMono; // size = 0x18 -typedef struct { - /* 0x0 */ u8* value; - /* 0x4 */ const char* name; -} FlagSetEntry; // size = 0x8 - // 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 diff --git a/include/z64actor.h b/include/z64actor.h index 3051f2c6e..e08a477e6 100644 --- a/include/z64actor.h +++ b/include/z64actor.h @@ -25,71 +25,17 @@ typedef void(*ActorFunc)(struct Actor* this, struct PlayState* play); typedef u16 (*NpcGetTextIdFunc)(struct PlayState*, struct Actor*); typedef s16 (*NpcUpdateTalkStateFunc)(struct PlayState*, struct Actor*); -typedef struct { +typedef struct PosRot { /* 0x00 */ Vec3f pos; /* 0x0C */ Vec3s rot; } PosRot; // size = 0x14 -typedef struct { - /* 0x00 */ u8 attack[32]; -} DamageTable; // size = 0x20 - -typedef struct { - /* 0x0 */ u8 health; - /* 0x2 */ s16 cylRadius; - /* 0x4 */ s16 cylHeight; - /* 0x6 */ u8 mass; -} CollisionCheckInfoInit; // size = 0x8 - -typedef struct { - /* 0x0 */ u8 health; - /* 0x2 */ s16 cylRadius; - /* 0x4 */ s16 cylHeight; - /* 0x6 */ s16 cylYShift; - /* 0x8 */ u8 mass; -} CollisionCheckInfoInit2; // size = 0xC - -typedef struct { - /* 0x00 */ DamageTable* damageTable; - /* 0x04 */ Vec3f displacement; - /* 0x10 */ s16 cylRadius; - /* 0x12 */ s16 cylHeight; - /* 0x14 */ s16 cylYShift; - /* 0x16 */ u8 mass; - /* 0x17 */ u8 health; - /* 0x18 */ u8 damage; - /* 0x19 */ u8 damageEffect; - /* 0x1A */ u8 atHitEffect; - /* 0x1B */ u8 acHitEffect; -} CollisionCheckInfo; // size = 0x1C - -typedef struct { - /* 0x00 */ s32 unk0; - /* 0x04 */ s32 unk4; - /* 0x08 */ f32 unk8; - /* 0x0C */ f32 unkC; - /* 0x10 */ f32 unk10; - /* 0x14 */ f32 unk14; - /* 0x18 */ f32 unk18; - /* 0x1C */ f32 unk1C; - /* 0x20 */ f32 unk20; - /* 0x24 */ f32 unk24; - /* 0x28 */ f32 unk28; - /* 0x2C */ f32 unk2C; - /* 0x30 */ s16 unk30; - /* 0x32 */ s16 unk32; - /* 0x34 */ s16 unk34; - /* 0x36 */ s16 unk36; - /* 0x38 */ s16 unk38; - /* 0x3A */ s16 unk3A; -} ActorEnTest20C; // size = 0x3C - typedef struct { /* 0x0 */ s16 unk_0; // frame? /* 0x2 */ Vec3s unk_2; // scale } struct_80124618; // size = 0x8 -typedef struct { +typedef struct ActorInit { /* 0x00 */ s16 id; /* 0x02 */ u8 type; /* 0x04 */ u32 flags; diff --git a/include/z64animation_legacy.h b/include/z64animation_legacy.h index 238939f74..44751f385 100644 --- a/include/z64animation_legacy.h +++ b/include/z64animation_legacy.h @@ -1,5 +1,5 @@ -#ifndef Z64_ANIMATION_LEGACY_H -#define Z64_ANIMATION_LEGACY_H +#ifndef Z64ANIMATION_LEGACY_H +#define Z64ANIMATION_LEGACY_H #include "ultra64.h" #include "z64math.h" diff --git a/include/z64collision_check.h b/include/z64collision_check.h index e5032584c..403ffa546 100644 --- a/include/z64collision_check.h +++ b/include/z64collision_check.h @@ -6,6 +6,7 @@ #include "unk.h" struct Actor; +struct PlayState; typedef struct { /* 0x00 */ struct Actor* actor; // Attached actor @@ -427,5 +428,250 @@ typedef enum { #define DMG_UNK_0x1E (1 << 0x1E) #define DMG_POWDER_KEG (1 << 0x1F) +typedef struct DamageTable { + /* 0x00 */ u8 attack[32]; +} DamageTable; // size = 0x20 + +typedef struct CollisionCheckInfoInit { + /* 0x0 */ u8 health; + /* 0x2 */ s16 cylRadius; + /* 0x4 */ s16 cylHeight; + /* 0x6 */ u8 mass; +} CollisionCheckInfoInit; // size = 0x8 + +typedef struct CollisionCheckInfoInit2 { + /* 0x0 */ u8 health; + /* 0x2 */ s16 cylRadius; + /* 0x4 */ s16 cylHeight; + /* 0x6 */ s16 cylYShift; + /* 0x8 */ u8 mass; +} CollisionCheckInfoInit2; // size = 0xC + +typedef struct CollisionCheckInfo { + /* 0x00 */ DamageTable* damageTable; + /* 0x04 */ Vec3f displacement; + /* 0x10 */ s16 cylRadius; + /* 0x12 */ s16 cylHeight; + /* 0x14 */ s16 cylYShift; + /* 0x16 */ u8 mass; + /* 0x17 */ u8 health; + /* 0x18 */ u8 damage; + /* 0x19 */ u8 damageEffect; + /* 0x1A */ u8 atHitEffect; + /* 0x1B */ u8 acHitEffect; +} CollisionCheckInfo; // size = 0x1C + + +DamageTable* DamageTable_Get(s32 index); +void DamageTable_Clear(DamageTable* damageTable); +f32 CollisionCheck_GetDamageAndEffectOnBumper(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, u32* effect); +f32 CollisionCheck_ApplyBumperDefense(f32 damage, ColliderInfo* ac); +s32 CollisionCheck_GetToucherDamage(Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo); +s32 Collider_InitBase(struct PlayState* play, Collider* collider); +s32 Collider_DestroyBase(struct PlayState* play, Collider* collider); +s32 Collider_SetBaseToActor(struct PlayState* play, Collider* collider, ColliderInitToActor* src); +s32 Collider_SetBaseType1(struct PlayState* play, Collider* collider, struct Actor* actor, ColliderInitType1* src); +s32 Collider_SetBase(struct PlayState* play, Collider* collider, struct Actor* actor, ColliderInit* src); +void Collider_ResetATBase(struct PlayState* play, Collider* collider); +void Collider_ResetACBase(struct PlayState* play, Collider* collider); +void Collider_ResetOCBase(struct PlayState* play, Collider* collider); +s32 Collider_InitTouch(struct PlayState* play, ColliderTouch* touch); +s32 Collider_DestroyTouch(struct PlayState* play, ColliderTouch* touch); +s32 Collider_SetTouch(struct PlayState* play, ColliderTouch* touch, ColliderTouchInit* src); +void Collider_ResetATInfoUnk(struct PlayState* play, ColliderInfo* info); +s32 Collider_InitBump(struct PlayState* play, ColliderBump* bump); +s32 Collider_DestroyBump(struct PlayState* play, ColliderBump* bump); +s32 Collider_SetBump(struct PlayState* play, ColliderBump* bump, ColliderBumpInit* src); +s32 Collider_InitInfo(struct PlayState* play, ColliderInfo* info); +s32 Collider_DestroyInfo(struct PlayState* play, ColliderInfo* info); +s32 Collider_SetInfo(struct PlayState* play, ColliderInfo* info, ColliderInfoInit* src); +void Collider_ResetATInfo(struct PlayState* play, ColliderInfo* info); +void Collider_ResetACInfo(struct PlayState* play, ColliderInfo* info); +void Collider_ResetOCInfo(struct PlayState* play, ColliderInfo* info); +s32 Collider_InitJntSphElementDim(struct PlayState* play, ColliderJntSphElementDim* dim); +s32 Collider_DestroyJntSphElementDim(struct PlayState* play, ColliderJntSphElementDim* dim); +s32 Collider_SetJntSphElementDim(struct PlayState* play, ColliderJntSphElementDim* dest, ColliderJntSphElementDimInit* src); +s32 Collider_InitJntSphElement(struct PlayState* play, ColliderJntSphElement* element); +s32 Collider_DestroyJntSphElement(struct PlayState* play, ColliderJntSphElement* element); +s32 Collider_SetJntSphElement(struct PlayState* play, ColliderJntSphElement* dest, ColliderJntSphElementInit* src); +s32 Collider_ResetJntSphElementAT(struct PlayState* play, ColliderJntSphElement* collider); +s32 Collider_ResetJntSphElementAC(struct PlayState* play, ColliderJntSphElement* collider); +s32 Collider_ResetJntSphElementOC(struct PlayState* play, ColliderJntSphElement* collider); +s32 Collider_InitJntSph(struct PlayState* play, ColliderJntSph* collider); +s32 Collider_FreeJntSph(struct PlayState* play, ColliderJntSph* collider); +s32 Collider_DestroyJntSph(struct PlayState* play, ColliderJntSph* collider); +s32 Collider_SetJntSphToActor(struct PlayState* play, ColliderJntSph* collider, ColliderJntSphInitToActor* src); +s32 Collider_SetJntSphAllocType1(struct PlayState* play, ColliderJntSph* sphereGroup, struct Actor* actor, ColliderJntSphInitType1* src); +s32 Collider_SetJntSph(struct PlayState* play, ColliderJntSph* sphereGroup, struct Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements); +s32 Collider_InitAndSetJntSph(struct PlayState* play, ColliderJntSph* sphereGroup, struct Actor* actor, ColliderJntSphInit* src, ColliderJntSphElement* elements); +s32 Collider_ResetJntSphAT(struct PlayState* play, Collider* collider); +s32 Collider_ResetJntSphAC(struct PlayState* play, Collider* collider); +s32 Collider_ResetJntSphOC(struct PlayState* play, Collider* collider); +s32 Collider_InitCylinderDim(struct PlayState* play, Cylinder16* dim); +s32 Collider_DestroyCylinderDim(struct PlayState* play, Cylinder16* dim); +s32 Collider_SetCylinderDim(struct PlayState* play, Cylinder16* dim, Cylinder16* src); +s32 Collider_InitCylinder(struct PlayState* play, ColliderCylinder* collider); +s32 Collider_DestroyCylinder(struct PlayState* play, ColliderCylinder* collider); +s32 Collider_SetCylinderToActor(struct PlayState* play, ColliderCylinder* collider, ColliderCylinderInitToActor* src); +s32 Collider_SetCylinderType1(struct PlayState* play, ColliderCylinder* collider, struct Actor* actor, ColliderCylinderInitType1* src); +s32 Collider_SetCylinder(struct PlayState* play, ColliderCylinder* collider, struct Actor* actor, ColliderCylinderInit* src); +s32 Collider_InitAndSetCylinder(struct PlayState* play, ColliderCylinder* collider, struct Actor* actor, ColliderCylinderInit* src); +s32 Collider_ResetCylinderAT(struct PlayState* play, Collider* collider); +s32 Collider_ResetCylinderAC(struct PlayState* play, Collider* collider); +s32 Collider_ResetCylinderOC(struct PlayState* play, Collider* collider); +s32 Collider_InitTrisElementDim(struct PlayState* play, TriNorm* dim); +s32 Collider_DestroyTrisElementDim(struct PlayState* play, TriNorm* dim); +s32 Collider_SetTrisElementDim(struct PlayState* play, TriNorm* dim, ColliderTrisElementDimInit* src); +s32 Collider_InitTrisElement(struct PlayState* play, ColliderTrisElement* element); +s32 Collider_DestroyTrisElement(struct PlayState* play, ColliderTrisElement* element); +s32 Collider_SetTrisElement(struct PlayState* play, ColliderTrisElement* element, ColliderTrisElementInit* src); +s32 Collider_ResetTrisElementAT(struct PlayState* play, ColliderTrisElement* element); +s32 Collider_ResetTrisElementAC(struct PlayState* play, ColliderTrisElement* element); +s32 Collider_ResetTrisElementOC(struct PlayState* play, ColliderTrisElement* element); +s32 Collider_InitTris(struct PlayState* play, ColliderTris* tris); +s32 Collider_FreeTris(struct PlayState* play, ColliderTris* tris); +s32 Collider_DestroyTris(struct PlayState* play, ColliderTris* tris); +s32 Collider_SetTrisAllocType1(struct PlayState* play, ColliderTris* tris, struct Actor* actor, ColliderTrisInitType1* src); +s32 Collider_SetTris(struct PlayState* play, ColliderTris* triGroup, struct Actor* actor, ColliderTrisInit* src, ColliderTrisElement* tris); +s32 Collider_InitAndSetTris(struct PlayState* play, ColliderTris* tris, struct Actor* actor, ColliderTrisInit* src, ColliderTrisElement* elements); +s32 Collider_ResetTrisAT(struct PlayState* play, Collider* collider); +s32 Collider_ResetTrisAC(struct PlayState* play, Collider* collider); +s32 Collider_ResetTrisOC(struct PlayState* play, Collider* collider); +s32 Collider_InitQuadDim(struct PlayState* play, ColliderQuadDim* dim); +s32 Collider_DestroyQuadDim(struct PlayState* play, ColliderQuadDim* dim); +s32 Collider_ResetQuadACDist(struct PlayState* play, ColliderQuadDim* dim); +void Collider_SetQuadMidpoints(ColliderQuadDim* dim); +s32 Collider_SetQuadDim(struct PlayState* play, ColliderQuadDim* dim, ColliderQuadDimInit* init); +s32 Collider_InitQuad(struct PlayState* play, ColliderQuad* collider); +s32 Collider_DestroyQuad(struct PlayState* play, ColliderQuad* collider); +s32 Collider_SetQuadType1(struct PlayState* play, ColliderQuad* collider, struct Actor* actor, ColliderQuadInitType1* src); +s32 Collider_SetQuad(struct PlayState* play, ColliderQuad* collider, struct Actor* actor, ColliderQuadInit* src); +s32 Collider_InitAndSetQuad(struct PlayState* play, ColliderQuad* collider, struct Actor* actor, ColliderQuadInit* src); +s32 Collider_ResetQuadAT(struct PlayState* play, Collider* collider); +s32 Collider_ResetQuadAC(struct PlayState* play, Collider* collider); +s32 Collider_ResetQuadOC(struct PlayState* play, Collider* collider); +s32 Collider_QuadSetNearestAC(struct PlayState* play, ColliderQuad* quad, Vec3f* hitPos); +s32 Collider_InitSphere(struct PlayState* play, ColliderSphere* collider); +s32 Collider_DestroySphere(struct PlayState* play, ColliderSphere* collider); +s32 Collider_SetSphere(struct PlayState* play, ColliderSphere* collider, struct Actor* actor, ColliderSphereInit* src); +s32 Collider_InitAndSetSphere(struct PlayState* play, ColliderSphere* collider, struct Actor* actor, ColliderSphereInit* src); +s32 Collider_ResetSphereAT(struct PlayState* play, Collider* collider); +s32 Collider_ResetSphereAC(struct PlayState* play, Collider* collider); +s32 Collider_ResetSphereOC(struct PlayState* play, Collider* collider); +s32 Collider_InitLine(struct PlayState* play, OcLine* line); +s32 Collider_DestroyLine(struct PlayState* play, OcLine* line); +s32 Collider_SetLinePoints(struct PlayState* play, OcLine* line, Vec3f* a, Vec3f* b); +s32 Collider_SetLine(struct PlayState* play, OcLine* line, OcLine* src); +s32 Collider_ResetLineOC(struct PlayState* play, OcLine* line); +void CollisionCheck_InitContext(struct PlayState* play, CollisionCheckContext* colCtxt); +void CollisionCheck_DestroyContext(struct PlayState* play, CollisionCheckContext* colCtxt); +void CollisionCheck_ClearContext(struct PlayState* play, CollisionCheckContext* colCtxt); +void CollisionCheck_EnableSAC(struct PlayState* play, CollisionCheckContext* colCtxt); +void CollisionCheck_DisableSAC(struct PlayState* play, CollisionCheckContext* colCtxt); +s32 CollisionCheck_SetAT(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +s32 CollisionCheck_SetAT_SAC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index); +s32 CollisionCheck_SetAC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +s32 CollisionCheck_SetAC_SAC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index); +s32 CollisionCheck_SetOC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +s32 CollisionCheck_SetOC_SAC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, s32 index); +s32 CollisionCheck_SetOCLine(struct PlayState* play, CollisionCheckContext* colCtxt, OcLine* line); +s32 CollisionCheck_SkipTouch(ColliderInfo* info); +s32 CollisionCheck_SkipBump(ColliderInfo* info); +s32 CollisionCheck_NoSharedFlags(ColliderInfo* toucher, ColliderInfo* bumper); +void CollisionCheck_NoBlood(struct PlayState* play, Collider* collider, Vec3f* v); +void CollisionCheck_BlueBlood(struct PlayState* play, Collider* collider, Vec3f* v); +void CollisionCheck_GreenBlood(struct PlayState* play, Collider* collider, Vec3f* v); +void CollisionCheck_WaterBurst(struct PlayState* play, Collider* collider, Vec3f* v); +void CollisionCheck_RedBlood(struct PlayState* play, Collider* collider, Vec3f* v); +void CollisionCheck_RedBloodUnused(struct PlayState* play, Collider* collider, Vec3f* v); +void CollisionCheck_HitSolid(struct PlayState* play, ColliderInfo* info, Collider* collider, Vec3f* hitPos); +s32 CollisionCheck_SwordHitAudio(Collider* at, ColliderInfo* acInfo); +void CollisionCheck_HitEffects(struct PlayState* play, Collider* at, ColliderInfo* atInfo, Collider* ac, ColliderInfo* acInfo, Vec3f* hitPos); +void CollisionCheck_SetBounce(Collider* at, Collider* ac); +s32 CollisionCheck_SetATvsAC(struct PlayState* play, Collider* at, ColliderInfo* atInfo, Vec3f* atPos, Collider* ac, ColliderInfo* acInfo, Vec3f* acPos, Vec3f* hitPos); +void CollisionCheck_TrisAvgPoint(ColliderTrisElement* tri, Vec3f* avg); +void CollisionCheck_QuadAvgPoint(ColliderQuad* quad, Vec3f* avg); +void CollisionCheck_AC_JntSphVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_JntSphVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_JntSphVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_JntSphVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_JntSphVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_CylVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_CylVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_CylVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_CylVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_CylVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_TrisVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_TrisVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_TrisVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_TrisVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_TrisVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_QuadVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_QuadVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_QuadVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_QuadVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_QuadVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_SphereVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_SphereVsCylinder(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_SphereVsTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_SphereVsQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_AC_SphereVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT, Collider* colAC); +void CollisionCheck_SetJntSphHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_SetCylHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_SetTrisHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_SetQuadHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_SetSphereHitFX(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_SetHitEffects(struct PlayState* play, CollisionCheckContext* colCtxt); +void CollisionCheck_AC(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* colAT); +void CollisionCheck_AT(struct PlayState* play, CollisionCheckContext* colCtxt); +s32 CollisionCheck_GetMassType(u8 mass); +void CollisionCheck_SetOCvsOC(struct PlayState* play, Collider* left, ColliderInfo* leftInfo, Vec3f* leftPos, Collider* right, ColliderInfo* rightInfo, Vec3f* rightPos, f32 overlap); +void CollisionCheck_OC_JntSphVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +void CollisionCheck_OC_JntSphVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +void CollisionCheck_OC_JntSphVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +void CollisionCheck_OC_CylVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +void CollisionCheck_OC_CylVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +void CollisionCheck_OC_CylVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +void CollisionCheck_OC_SphereVsJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +void CollisionCheck_OC_SphereVsCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +void CollisionCheck_OC_SphereVsSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* l, Collider* r); +s32 CollisionCheck_SkipOC(Collider* collider); +s32 CollisionCheck_Incompatible(Collider* left, Collider* right); +void CollisionCheck_OC(struct PlayState* play, CollisionCheckContext* colCtxt); +void CollisionCheck_InitInfo(CollisionCheckInfo* info); +void CollisionCheck_ResetDamage(CollisionCheckInfo* info); +void CollisionCheck_SetInfoNoDamageTable(CollisionCheckInfo* info, CollisionCheckInfoInit* init); +void CollisionCheck_SetInfo(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit* init); +void CollisionCheck_SetInfo2(CollisionCheckInfo* info, DamageTable* damageTable, CollisionCheckInfoInit2* init); +void CollisionCheck_SetInfoGetDamageTable(CollisionCheckInfo* info, s32 index, CollisionCheckInfoInit2* init); +void CollisionCheck_ApplyDamage(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider, ColliderInfo* info); +void CollisionCheck_ApplyDamageJntSph(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_ApplyDamageCyl(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_ApplyDamageTris(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_ApplyDamageQuad(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_ApplyDamageSphere(struct PlayState* play, CollisionCheckContext* colCtxt, Collider* collider); +void CollisionCheck_Damage(struct PlayState* play, CollisionCheckContext* colCtxt); +s32 CollisionCheck_LineOC_JntSph(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b); +s32 CollisionCheck_LineOC_Cyl(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b); +s32 CollisionCheck_LineOC_Sphere(struct PlayState* play, CollisionCheckContext* colChkCtx, Collider* collider, Vec3f* a, Vec3f* b); +s32 CollisionCheck_LineOC(struct PlayState* play, CollisionCheckContext* colChkCtx, Vec3f* a, Vec3f* b, struct Actor** exclusions, s32 numExclusions); +s32 CollisionCheck_LineOCCheckAll(struct PlayState* play, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b); +s32 CollisionCheck_LineOCCheck(struct PlayState* play, CollisionCheckContext* colCtxt, Vec3f* a, Vec3f* b, struct Actor** exclusions, s32 numExclusions); +void Collider_UpdateCylinder(struct Actor* actor, ColliderCylinder* collider); +void Collider_SetCylinderPosition(ColliderCylinder* collider, Vec3s* pos); +void Collider_SetQuadVertices(ColliderQuad* collider, Vec3f* a, Vec3f* b, Vec3f* c, Vec3f* d); +void Collider_SetTrisVertices(ColliderTris* collider, s32 index, Vec3f* a, Vec3f* b, Vec3f* c); +void Collider_SetTrisDim(struct PlayState* play, ColliderTris* collider, s32 index, ColliderTrisElementDimInit* init); +void Collider_UpdateSpheres(s32 limb, ColliderJntSph* collider); +void Collider_UpdateSpheresElement(ColliderJntSph* collider, s32 index, struct Actor* actor); +void Collider_UpdateSphere(s32 limb, ColliderSphere* collider); +void CollisionCheck_SpawnRedBlood(struct PlayState* play, Vec3f* v); +void CollisionCheck_SpawnWaterDroplets(struct PlayState* play, Vec3f* v); +void CollisionCheck_SpawnShieldParticles(struct PlayState* play, Vec3f* v); +void CollisionCheck_SpawnShieldParticlesMetal(struct PlayState* play, Vec3f* v); +void CollisionCheck_SpawnShieldParticlesMetalSound(struct PlayState* play, Vec3f* v, Vec3f* pos); +void CollisionCheck_SpawnShieldParticlesMetal2(struct PlayState* play, Vec3f* v); +void CollisionCheck_SpawnShieldParticlesWood(struct PlayState* play, Vec3f* v, Vec3f* pos); +s32 CollisionCheck_CylSideVsLineSeg(f32 radius, f32 height, f32 offset, Vec3f* actorPos, Vec3f* itemPos, Vec3f* itemProjPos, Vec3f* out1, Vec3f* out2); #endif diff --git a/include/z64game.h b/include/z64game.h index c5551edc7..87dc80764 100644 --- a/include/z64game.h +++ b/include/z64game.h @@ -1,5 +1,5 @@ -#ifndef Z64_GAME_H -#define Z64_GAME_H +#ifndef Z64GAME_H +#define Z64GAME_H #include "ultra64.h" #include "libc/stdbool.h" diff --git a/include/z64interface.h b/include/z64interface.h index e01baa425..c83630cbf 100644 --- a/include/z64interface.h +++ b/include/z64interface.h @@ -4,6 +4,15 @@ #include "ultra64.h" #include "z64view.h" +typedef enum { + /* -1 */ EQUIP_SLOT_NONE = -1, + /* 0 */ EQUIP_SLOT_B, + /* 1 */ EQUIP_SLOT_C_LEFT, + /* 2 */ EQUIP_SLOT_C_DOWN, + /* 3 */ EQUIP_SLOT_C_RIGHT, + /* 4 */ EQUIP_SLOT_A +} EquipSlot; + typedef enum { /* 0 */ A_BTN_STATE_0, /* 1 */ A_BTN_STATE_1, @@ -213,4 +222,49 @@ typedef struct { /* 0x344 */ size_t storySize; } InterfaceContext; // size = 0x348 +Gfx* Gfx_DrawTexRectRGBA16(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); +Gfx* Gfx_DrawTexRectIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); +Gfx* Gfx_DrawTexRectI8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, s16 rectLeft, s16 rectTop, s16 rectWidth, s16 rectHeight, u16 dsdx, u16 dtdy); +Gfx* Gfx_DrawTexQuadIA8(Gfx* gfx, TexturePtr texture, s16 textureWidth, s16 textureHeight, u16 point); +Gfx* Gfx_DrawTexQuad4b(Gfx* gfx, TexturePtr texture, s32 fmt, s16 textureWidth, s16 textureHeight, u16 point); + +void Interface_StartTimer(s16 timerId, s16 seconds); +void Interface_StartPostmanTimer(s16 seconds, s16 bunnyHoodState); +void Interface_NewDay(struct PlayState* play, s32 day); +void Interface_SetHudVisibility(u16 hudVisibility); +void Interface_UpdateButtonsPart2(struct PlayState* play); +void Interface_SetSceneRestrictions(struct PlayState* play); +void Interface_InitMinigame(struct PlayState* play); +void Interface_LoadItemIconImpl(struct PlayState* play, u8 btn); +void Interface_LoadItemIcon(struct PlayState* play, u8 btn); +void Interface_UpdateButtonsAlt(struct PlayState* play, u16 flag); +u8 Item_Give(struct PlayState* play, u8 item); +u8 Item_CheckObtainability(u8 item); +void Inventory_DeleteItem(s16 item, s16 slot); +void Inventory_UnequipItem(s16 item); +s32 Inventory_ReplaceItem(struct PlayState* play, u8 oldItem, u8 newItem); +void Inventory_UpdateDeitySwordEquip(struct PlayState* play); +s32 Inventory_HasEmptyBottle(void); +s32 Inventory_HasItemInBottle(u8 item); +void Inventory_UpdateBottleItem(struct PlayState* play, u8 item, u8 btn); +s32 Inventory_ConsumeFairy(struct PlayState* play); +void Inventory_UpdateItem(struct PlayState* play, s16 slot, s16 item); +void func_8011552C(struct PlayState* play, u16 arg1); +void func_801155B4(struct PlayState* play, s16 arg1); +void func_80115764(struct PlayState* play, UNK_TYPE arg1); +void func_80115844(struct PlayState* play, s16 doAction); +s32 Health_ChangeBy(struct PlayState* play, s16 healthChange); +void Health_GiveHearts(s16 hearts); +void Rupees_ChangeBy(s16 rupeeChange); +void Inventory_ChangeAmmo(s16 item, s16 ammoChange); +void Magic_Add(struct PlayState* play, s16 magicToAdd); +void Magic_Reset(struct PlayState* play); +s32 Magic_Consume(struct PlayState* play, s16 magicToConsume, s16 type); +void Interface_SetPerfectLetters(struct PlayState* play, s16 perfectLettersType); +void Interface_StartMoonCrash(struct PlayState* play); +void Interface_Draw(struct PlayState* play); +void Interface_Update(struct PlayState* play); +void Interface_Destroy(struct PlayState* play); +void Interface_Init(struct PlayState* play); + #endif diff --git a/include/z64scene.h b/include/z64scene.h index 5505f08e3..55c959b31 100644 --- a/include/z64scene.h +++ b/include/z64scene.h @@ -6,6 +6,9 @@ #include "z64cutscene.h" #include "unk.h" +struct GameState; +struct PlayState; + #define SPAWN_ROT_FLAGS(rotation, flags) (((rotation) << 7) | (flags)) typedef struct { @@ -459,6 +462,16 @@ typedef struct { /* 0x8 */ u8* textureIndexList; } AnimatedMatTexCycleParams; // size = 0xC +typedef struct { + /* 0x0 */ s8 segment; + /* 0x2 */ s16 type; + /* 0x4 */ void* params; +} AnimatedMaterial; // size = 0x8 + +// TODO: ZAPD +typedef RoomShapeCullableEntry PolygonDlist2; +typedef RoomShapeCullable PolygonType2; + typedef struct { /* 0x000 */ void* spaceStart; /* 0x004 */ void* spaceEnd; @@ -885,4 +898,89 @@ 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); +void Object_LoadAll(ObjectContext* objectCtx); +void* func_8012F73C(ObjectContext* objectCtx, s32 iParm2, 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); +void Scene_CommandCollisionHeader(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandRoomList(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandEntranceList(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandSpecialFiles(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandRoomBehavior(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandMesh(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandObjectList(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandLightList(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandPathList(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandTransiActorList(struct PlayState* play, SceneCmd* cmd); +void Door_InitContext(struct GameState* gameState, DoorContext* doorCtx); +void Scene_CommandEnvLightSettings(struct PlayState* play, SceneCmd* cmd); +void Scene_LoadAreaTextures(struct PlayState* play, s32 fileIndex); +void Scene_CommandSkyboxSettings(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandSkyboxDisables(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandTimeSettings(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandWindSettings(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandExitList(struct PlayState* play, SceneCmd* cmd); +void Scene_Command09(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandSoundSettings(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandEchoSetting(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandAltHeaderList(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandCutsceneScriptList(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandCutsceneList(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandMiniMap(struct PlayState* play, SceneCmd* cmd); +void Scene_Command1D(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandMiniMapCompassInfo(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandSetRegionVisitedFlag(struct PlayState* play, SceneCmd* cmd); +void Scene_CommandAnimatedMaterials(struct PlayState* play, SceneCmd* cmd); +void Scene_SetExitFade(struct PlayState* play); +s32 Scene_ExecuteCommands(struct PlayState* play, SceneCmd* sceneCmd); +u16 Entrance_Create(s32 scene, s32 spawn, s32 layer); +u16 Entrance_CreateFromSpawn(s32 spawn); +void Scene_Draw(struct PlayState* play); +void Scene_DrawConfigDefault(struct PlayState* play); +Gfx* AnimatedMat_TexScroll(struct PlayState* play, AnimatedMatTexScrollParams* params); +void AnimatedMat_DrawTexScroll(struct PlayState* play, s32 segment, void* params); +Gfx* AnimatedMat_TwoLayerTexScroll(struct PlayState* play, AnimatedMatTexScrollParams* params); +void AnimatedMat_DrawTwoTexScroll(struct PlayState* play, s32 segment, void* params); +void AnimatedMat_SetColor(struct PlayState* play, s32 segment, F3DPrimColor* primColorResult, F3DEnvColor* envColor); +void AnimatedMat_DrawColor(struct PlayState* play, s32 segment, void* params); +s32 AnimatedMat_Lerp(s32 min, s32 max, f32 norm); +void AnimatedMat_DrawColorLerp(struct PlayState* play, s32 segment, void* params); +f32 Scene_LagrangeInterp(s32 n, f32 x[], f32 fx[], f32 xp); +u8 Scene_LagrangeInterpColor(s32 n, f32 x[], f32 fx[], f32 xp); +void AnimatedMat_DrawColorNonLinearInterp(struct PlayState* play, s32 segment, void* params); +void AnimatedMat_DrawTexCycle(struct PlayState* play, s32 segment, void* params); +void AnimatedMat_DrawMain(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step, u32 flags); +void AnimatedMat_Draw(struct PlayState* play, AnimatedMaterial* matAnim); +void AnimatedMat_DrawOpa(struct PlayState* play, AnimatedMaterial* matAnim); +void AnimatedMat_DrawXlu(struct PlayState* play, AnimatedMaterial* matAnim); +void AnimatedMat_DrawAlpha(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio); +void AnimatedMat_DrawAlphaOpa(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio); +void AnimatedMat_DrawAlphaXlu(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio); +void AnimatedMat_DrawStep(struct PlayState* play, AnimatedMaterial* matAnim, u32 step); +void AnimatedMat_DrawStepOpa(struct PlayState* play, AnimatedMaterial* matAnim, u32 step); +void AnimatedMat_DrawStepXlu(struct PlayState* play, AnimatedMaterial* matAnim, u32 step); +void AnimatedMat_DrawAlphaStep(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step); +void AnimatedMat_DrawAlphaStepOpa(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step); +void AnimatedMat_DrawAlphaStepXlu(struct PlayState* play, AnimatedMaterial* matAnim, f32 alphaRatio, u32 step); +void Scene_DrawConfigMatAnim(struct PlayState* play); +void Scene_DrawConfig3(struct PlayState* play); +void Scene_DrawConfig4(struct PlayState* play); +void Scene_DrawConfigDoNothing(struct PlayState* play); +void Scene_SetRenderModeXlu(struct PlayState* play, s32 index, u32 flags); +void Scene_SetCullFlag(struct PlayState* play, s32 index, u32 flags); +void Scene_DrawConfig5(struct PlayState* play); +void Scene_DrawConfigMatAnimManualStep(struct PlayState* play); +void Scene_DrawConfigGreatBayTemple(struct PlayState* play); +EntranceTableEntry* Entrance_GetTableEntry(u16 entrance); +s32 Entrance_GetSceneId(u16 entrance); +s32 Entrance_GetSceneIdAbsolute(u16 entrance); +s32 Entrance_GetSpawnNum(u16 entrance); +s32 Entrance_GetTransitionFlags(u16 entrance); + #endif diff --git a/include/z64sound_source.h b/include/z64sound_source.h new file mode 100644 index 000000000..b841f8326 --- /dev/null +++ b/include/z64sound_source.h @@ -0,0 +1,24 @@ +#ifndef Z64SOUND_SOURCE_H +#define Z64SOUND_SOURCE_H + +#include "ultra64.h" +#include "z64math.h" + +struct PlayState; + +typedef struct { + /* 0x00 */ u8 countdown; + /* 0x01 */ u8 playSfxEachFrame; + /* 0x02 */ u16 sfxId; + /* 0x04 */ Vec3f worldPos; + /* 0x10 */ Vec3f projectedPos; +} SoundSource; // size = 0x1C + +#define SOUND_SOURCE_COUNT 16 + +void SoundSource_InitAll(struct PlayState* play); +void SoundSource_UpdateAll(struct PlayState* play); +void SoundSource_PlaySfxAtFixedWorldPos(struct PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId); +void SoundSource_PlaySfxEachFrameAtFixedWorldPos(struct PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId); + +#endif diff --git a/include/z64thread.h b/include/z64thread.h new file mode 100644 index 000000000..c0baba84f --- /dev/null +++ b/include/z64thread.h @@ -0,0 +1,24 @@ +#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_FLASHROM 13 +#define Z_THREAD_ID_DMAMGR 18 +#define Z_THREAD_ID_IRQMGR 19 + +#define Z_PRIORITY_SLOWLY 5 +#define Z_PRIORITY_GRAPH 9 +#define Z_PRIORITY_AUDIOMGR 11 +#define Z_PRIORITY_IDLE 12 +#define Z_PRIORITY_MAIN 12 +#define Z_PRIORITY_FLASHROM 13 +#define Z_PRIORITY_PADMGR 15 +#define Z_PRIORITY_SCHED 16 +#define Z_PRIORITY_DMAMGR 17 +#define Z_PRIORITY_IRQMGR 18 + +#endif diff --git a/src/boot_O2_g3/boot_main.c b/src/boot_O2_g3/boot_main.c index 6a561992b..ed16c34e0 100644 --- a/src/boot_O2_g3/boot_main.c +++ b/src/boot_O2_g3/boot_main.c @@ -2,6 +2,7 @@ #include "global.h" #include "stack.h" #include "stackcheck.h" +#include "z64thread.h" StackEntry sBootStackInfo; OSThread sIdleThread; diff --git a/src/boot_O2_g3/idle.c b/src/boot_O2_g3/idle.c index 6c63e2a70..f7c847449 100644 --- a/src/boot_O2_g3/idle.c +++ b/src/boot_O2_g3/idle.c @@ -3,6 +3,7 @@ #include "stack.h" #include "buffers.h" #include "stackcheck.h" +#include "z64thread.h" u8 D_80096B20 = 1; vu8 gViConfigUseDefault = 1; @@ -94,10 +95,12 @@ void Idle_InitVideo(void) { D_8009B290 = 2; gViConfigMode = osViModeNtscLan1; break; + case OS_TV_MPAL: D_8009B290 = 30; gViConfigMode = osViModeMpalLan1; break; + case OS_TV_PAL: D_8009B290 = 44; gViConfigMode = osViModeFpalLan1; diff --git a/src/boot_O2_g3/irqmgr.c b/src/boot_O2_g3/irqmgr.c index 1f1e94ab4..9a773f279 100644 --- a/src/boot_O2_g3/irqmgr.c +++ b/src/boot_O2_g3/irqmgr.c @@ -1,5 +1,6 @@ #include "global.h" #include "stackcheck.h" +#include "z64thread.h" vs32 gIrqMgrResetStatus = 0; volatile OSTime sIrqMgrResetTime = 0; diff --git a/src/boot_O2_g3/z_std_dma.c b/src/boot_O2_g3/z_std_dma.c index 00d894f74..71b7ae846 100644 --- a/src/boot_O2_g3/z_std_dma.c +++ b/src/boot_O2_g3/z_std_dma.c @@ -2,6 +2,7 @@ #include "global.h" #include "stack.h" #include "stackcheck.h" +#include "z64thread.h" u32 sDmaMgrDmaBuffSize = 0x2000; diff --git a/src/code/flg_set.c b/src/code/flg_set.c index bb25818a6..f7c8c261e 100644 --- a/src/code/flg_set.c +++ b/src/code/flg_set.c @@ -12,6 +12,11 @@ #include "global.h" #include "overlays/kaleido_scope/ovl_kaleido_scope/z_kaleido_scope.h" +typedef struct FlagSetEntry { + /* 0x0 */ u8* value; + /* 0x4 */ const char* name; +} FlagSetEntry; // size = 0x8 + static FlagSetEntry sFlagEntries[] = { { &gSaveContext.save.saveInfo.weekEventReg[0], "week_event_reg[0]" }, { &gSaveContext.save.saveInfo.weekEventReg[1], "week_event_reg[1]" }, diff --git a/src/code/main.c b/src/code/main.c index 186240489..3da3d25d7 100644 --- a/src/code/main.c +++ b/src/code/main.c @@ -9,6 +9,7 @@ #include "stack.h" #include "stackcheck.h" #include "system_heap.h" +#include "z64thread.h" extern OSMesgQueue sSiIntMsgQ; extern OSMesg sSiIntMsgBuf[1]; diff --git a/src/code/sched.c b/src/code/sched.c index c06eb41ba..29c558ea7 100644 --- a/src/code/sched.c +++ b/src/code/sched.c @@ -1,6 +1,7 @@ #include "prevent_bss_reordering.h" #include "global.h" #include "stackcheck.h" +#include "z64thread.h" #define RSP_DONE_MSG 667 #define RDP_DONE_MSG 668 diff --git a/src/code/sys_flashrom.c b/src/code/sys_flashrom.c index c2665741e..f2424b850 100644 --- a/src/code/sys_flashrom.c +++ b/src/code/sys_flashrom.c @@ -3,6 +3,7 @@ #include "stack.h" #include "stackcheck.h" #include "system_malloc.h" +#include "z64thread.h" OSMesgQueue sFlashromMesgQueue; OSMesg sFlashromMesg[1]; diff --git a/src/code/sys_slowly.c b/src/code/sys_slowly.c index 754c5d472..47170db62 100644 --- a/src/code/sys_slowly.c +++ b/src/code/sys_slowly.c @@ -8,9 +8,11 @@ * * @note: `argCount` must be set manually, as this file implements no way to configure it. */ + #include "slowly.h" #include "global.h" #include "stackcheck.h" +#include "z64thread.h" void Slowly_Main(SlowlyMgr* slowly) { slowly->status |= SLOWLY_STATUS_STARTED; diff --git a/src/code/z_collision_check.c b/src/code/z_collision_check.c index b7f07d14d..f3f4043dd 100644 --- a/src/code/z_collision_check.c +++ b/src/code/z_collision_check.c @@ -1,4 +1,11 @@ #include "global.h" +#include "z64collision_check.h" + +typedef s32 (*ColChkResetFunc)(struct PlayState*, Collider*); +typedef void (*ColChkBloodFunc)(struct PlayState*, Collider*, Vec3f*); +typedef void (*ColChkApplyFunc)(struct PlayState*, CollisionCheckContext*, Collider*); +typedef void (*ColChkVsFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Collider*); +typedef s32 (*ColChkLineFunc)(struct PlayState*, CollisionCheckContext*, Collider*, Vec3f*, Vec3f*); Vec3f D_801EDE00; Vec3f D_801EDE10; diff --git a/src/code/z_nmi_buff.c b/src/code/z_nmi_buff.c index 205bd8d0f..eacfc5f46 100644 --- a/src/code/z_nmi_buff.c +++ b/src/code/z_nmi_buff.c @@ -3,6 +3,13 @@ #define COLD_RESET 0 #define NMI 1 +typedef struct { + /* 0x00 */ u32 resetting; + /* 0x04 */ u32 resetCount; + /* 0x08 */ OSTime duration; + /* 0x10 */ OSTime resetTime; +} NmiBuff; // size >= 0x18 + NmiBuff* gNMIBuffer; void Nmi_Init(void) { diff --git a/src/code/z_scene.c b/src/code/z_scene.c index 368b4509e..529458f83 100644 --- a/src/code/z_scene.c +++ b/src/code/z_scene.c @@ -526,7 +526,7 @@ void Scene_CommandSetRegionVisitedFlag(PlayState* play, SceneCmd* cmd) { // SceneTableEntry Header Command 0x1A: Material Animations void Scene_CommandAnimatedMaterials(PlayState* play, SceneCmd* cmd) { - play->sceneMaterialAnims = (AnimatedMaterial*)Lib_SegmentedToVirtual(cmd->textureAnimations.segment); + play->sceneMaterialAnims = Lib_SegmentedToVirtual(cmd->textureAnimations.segment); } /** @@ -536,38 +536,38 @@ void Scene_SetExitFade(PlayState* play) { play->transitionType = Entrance_GetTransitionFlags(play->nextEntrance) & 0x7F; } -void (*sSceneCmdHandlers[])(PlayState*, SceneCmd*) = { - Scene_CommandSpawnList, - Scene_CommandActorList, - Scene_CommandActorCutsceneCamList, - Scene_CommandCollisionHeader, - Scene_CommandRoomList, - Scene_CommandWindSettings, - Scene_CommandEntranceList, - Scene_CommandSpecialFiles, - Scene_CommandRoomBehavior, - Scene_Command09, - Scene_CommandMesh, - Scene_CommandObjectList, - Scene_CommandLightList, - Scene_CommandPathList, - Scene_CommandTransiActorList, - Scene_CommandEnvLightSettings, - Scene_CommandTimeSettings, - Scene_CommandSkyboxSettings, - Scene_CommandSkyboxDisables, - Scene_CommandExitList, - NULL, - Scene_CommandSoundSettings, - Scene_CommandEchoSetting, - Scene_CommandCutsceneScriptList, - Scene_CommandAltHeaderList, - Scene_CommandSetRegionVisitedFlag, - Scene_CommandAnimatedMaterials, - Scene_CommandCutsceneList, - Scene_CommandMiniMap, - Scene_Command1D, - Scene_CommandMiniMapCompassInfo, +void (*sSceneCmdHandlers[SCENE_CMD_MAX])(PlayState*, SceneCmd*) = { + Scene_CommandSpawnList, // SCENE_CMD_ID_SPAWN_LIST + Scene_CommandActorList, // SCENE_CMD_ID_ACTOR_LIST + Scene_CommandActorCutsceneCamList, // SCENE_CMD_ID_ACTOR_CUTSCENE_CAM_LIST + Scene_CommandCollisionHeader, // SCENE_CMD_ID_COL_HEADER + Scene_CommandRoomList, // SCENE_CMD_ID_ROOM_LIST + Scene_CommandWindSettings, // SCENE_CMD_ID_WIND_SETTINGS + Scene_CommandEntranceList, // SCENE_CMD_ID_ENTRANCE_LIST + Scene_CommandSpecialFiles, // SCENE_CMD_ID_SPECIAL_FILES + Scene_CommandRoomBehavior, // SCENE_CMD_ID_ROOM_BEHAVIOR + Scene_Command09, // SCENE_CMD_ID_UNK_09 + Scene_CommandMesh, // SCENE_CMD_ID_ROOM_SHAPE + Scene_CommandObjectList, // SCENE_CMD_ID_OBJECT_LIST + Scene_CommandLightList, // SCENE_CMD_ID_LIGHT_LIST + Scene_CommandPathList, // SCENE_CMD_ID_PATH_LIST + Scene_CommandTransiActorList, // SCENE_CMD_ID_TRANSI_ACTOR_LIST + Scene_CommandEnvLightSettings, // SCENE_CMD_ID_ENV_LIGHT_SETTINGS + Scene_CommandTimeSettings, // SCENE_CMD_ID_TIME_SETTINGS + Scene_CommandSkyboxSettings, // SCENE_CMD_ID_SKYBOX_SETTINGS + Scene_CommandSkyboxDisables, // SCENE_CMD_ID_SKYBOX_DISABLES + Scene_CommandExitList, // SCENE_CMD_ID_EXIT_LIST + NULL, // SCENE_CMD_ID_END + Scene_CommandSoundSettings, // SCENE_CMD_ID_SOUND_SETTINGS + Scene_CommandEchoSetting, // SCENE_CMD_ID_ECHO_SETTINGS + Scene_CommandCutsceneScriptList, // SCENE_CMD_ID_CUTSCENE_SCRIPT_LIST + Scene_CommandAltHeaderList, // SCENE_CMD_ID_ALTERNATE_HEADER_LIST + Scene_CommandSetRegionVisitedFlag, // SCENE_CMD_ID_SET_REGION_VISITED + Scene_CommandAnimatedMaterials, // SCENE_CMD_ID_ANIMATED_MATERIAL_LIST + Scene_CommandCutsceneList, // SCENE_CMD_ID_ACTOR_CUTSCENE_LIST + Scene_CommandMiniMap, // SCENE_CMD_ID_MINIMAP_INFO + Scene_Command1D, // SCENE_CMD_ID_UNUSED_1D + Scene_CommandMiniMapCompassInfo, // SCENE_CMD_ID_MINIMAP_COMPASS_ICON_INFO }; /** diff --git a/src/code/z_sound_source.c b/src/code/z_sound_source.c index 15ebd018a..4962f7072 100644 --- a/src/code/z_sound_source.c +++ b/src/code/z_sound_source.c @@ -1,11 +1,12 @@ #include "global.h" +#include "z64sound_source.h" void SoundSource_InitAll(PlayState* play) { SoundSource* sources = &play->soundSources[0]; s32 i; // clang-format off - for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) { sources[i].countdown = 0; } + for (i = 0; i < SOUND_SOURCE_COUNT; i++) { sources[i].countdown = 0; } // clang-format on } @@ -13,7 +14,7 @@ void SoundSource_UpdateAll(PlayState* play) { SoundSource* source = &play->soundSources[0]; s32 i; - for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) { + for (i = 0; i < SOUND_SOURCE_COUNT; i++) { if (source->countdown != 0) { if (DECR(source->countdown) == 0) { AudioSfx_StopByPos(&source->projectedPos); @@ -37,7 +38,7 @@ void SoundSource_Add(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId, s32 i; source = &play->soundSources[0]; - for (i = 0; i < ARRAY_COUNT(play->soundSources); i++) { + for (i = 0; i < SOUND_SOURCE_COUNT; i++) { if (source->countdown == 0) { break; } @@ -52,7 +53,7 @@ void SoundSource_Add(PlayState* play, Vec3f* worldPos, u32 duration, u16 sfxId, } // If no sound source is available, replace the sound source with the smallest remaining countdown - if (i >= ARRAY_COUNT(play->soundSources)) { + if (i >= SOUND_SOURCE_COUNT) { source = backupSource; AudioSfx_StopByPos(&source->projectedPos); } diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index bce95ca11..9e51ef3d6 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -903,11 +903,11 @@ 0x801BB050:("sDebugDisplayLight1","Lights1","",0x24), 0x801BB068:("D_801BB068","UNK_TYPE2","",0x2), 0x801BB08C:("D_801BB08C","UNK_TYPE1","",0x1), - 0x801BB090:("D_801BB090","UNK_TYPE4","",0x4), - 0x801BB094:("D_801BB094","UNK_TYPE1","",0x1), - 0x801BB0DC:("D_801BB0DC","UNK_TYPE1","",0x1), - 0x801BB0FC:("D_801BB0FC","UNK_TYPE2","",0x2), - 0x801BB100:("D_801BB100","UNK_TYPE1","",0x1), + 0x801BB090:("sDebugTextDrawFlags","UNK_TYPE4","",0x4), + 0x801BB094:("sDebugTextBuffer","UNK_TYPE1","",0x1), + 0x801BB0DC:("sDebugTextColors","UNK_TYPE1","",0x1), + 0x801BB0FC:("sDebugCamTextEntryCount","UNK_TYPE2","",0x2), + 0x801BB100:("sDebugCamTextColors","UNK_TYPE1","",0x1), 0x801BB124:("sCurTextId","UNK_TYPE2","",0x2), 0x801BB128:("sCurOcarinaAction","UNK_TYPE2","",0x2), 0x801BB12C:("gOpeningEntranceIndex","UNK_TYPE1","",0x1), @@ -1328,13 +1328,13 @@ 0x801C212C:("gSceneIdsPerRegion","SceneIdList","[]",0x252), 0x801C2380:("sSceneIdsPerTingleMap","u16","[]",0x90), 0x801C2410:("gPlayerFormItemRestrictions","UNK_TYPE1","",0x1), - 0x801C2650:("tatlMessageFiles","RomFile","[2]",0x10), + 0x801C2650:("naviQuestHintFiles","RomFile","[2]",0x10), 0x801C2660:("sceneTextureFiles","RomFile","[9]",0x48), - 0x801C26A8:("sceneHeaderFuncTable","scene_header_func","[31]",0x7c), + 0x801C26A8:("sSceneCmdHandlers","scene_header_func","[31]",0x7c), 0x801C2730:("gPlayerFormObjectIndices","s16","[5]",0xA), 0x801C273C:("gObjectTableSize","ObjectId","",0x4), 0x801C2740:("gObjectTable","RomFile","[643]",0x1418), - 0x801C3B60:("sSceneDrawDefaultDl","Gfx","[11]",0x58), + 0x801C3B60:("sSceneDrawDefaultDL","Gfx","[11]",0x58), 0x801C3BB8:("gSceneProcSceneDrawFuncs","SceneDrawConfigFunc","[8]",0x20), 0x801C3BD8:("gSceneProcDrawFuncs","scene_proc_draw_func","[6]",0x18), 0x801C3BF0:("D_801C3BF0","Gfx","[4]",0x20), From 0a55ca0b403a6d77a1f9234527cc219994b642e6 Mon Sep 17 00:00:00 2001 From: engineer124 <47598039+engineer124@users.noreply.github.com> Date: Sun, 18 Jun 2023 17:02:50 +1000 Subject: [PATCH 09/82] Document Song of Time Cutscenes (Test6) (#1269) * import docs * cleanup * more eventinf docs * more cleanup * more docs * more docs * more docs * sZoraBarrierEnvLighting * comments * PR Suggestion * fix bss --- include/functions.h | 8 +- include/z64cutscene.h | 2 +- include/z64ocarina.h | 6 + include/z64player.h | 8 +- include/z64save.h | 27 +- src/code/z_kankyo.c | 8 +- src/code/z_play.c | 4 +- src/code/z_sram_NES.c | 20 +- .../actors/ovl_En_Kakasi/z_en_kakasi.c | 2 +- src/overlays/actors/ovl_En_Test4/z_en_test4.c | 8 +- src/overlays/actors/ovl_En_Test6/z_en_test6.c | 1236 +++++++++-------- src/overlays/actors/ovl_En_Test6/z_en_test6.h | 81 +- src/overlays/actors/ovl_En_Test7/z_en_test7.c | 26 +- src/overlays/actors/ovl_En_Twig/z_en_twig.c | 1 - .../actors/ovl_En_Warp_tag/z_en_warp_tag.c | 4 +- .../actors/ovl_Obj_Nozoki/z_obj_nozoki.c | 1 - .../actors/ovl_player_actor/z_player.c | 32 +- tools/disasm/functions.txt | 42 +- tools/disasm/variables.txt | 28 +- tools/sizes/code_functions.csv | 8 +- 20 files changed, 841 insertions(+), 711 deletions(-) diff --git a/include/functions.h b/include/functions.h index 307dc4365..36459ecbd 100644 --- a/include/functions.h +++ b/include/functions.h @@ -860,10 +860,10 @@ void Environment_FillScreen(GraphicsContext* gfxCtx, u8 red, u8 green, u8 blue, 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 func_800FD59C(PlayState* play, Color_RGB8* pzParm2, f32 fParm3); -void func_800FD5E0(PlayState* play, Color_RGB8* pzParm2, f32 fParm3); -void func_800FD654(PlayState* play, Color_RGB8* pzParm2, f32 fParm3); -void func_800FD698(PlayState* play, s16 arg1, s16 arg2, f32 arg3); +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); diff --git a/include/z64cutscene.h b/include/z64cutscene.h index 742398a31..83e9994f1 100644 --- a/include/z64cutscene.h +++ b/include/z64cutscene.h @@ -430,7 +430,7 @@ typedef enum { /* 0x1F6 */ CS_CMD_ACTOR_CUE_502, /* 0x1F7 */ CS_CMD_ACTOR_CUE_503, /* 0x1F8 */ CS_CMD_ACTOR_CUE_504, - /* 0x1F9 */ CS_CMD_ACTOR_CUE_505, + /* 0x1F9 */ CS_CMD_ACTOR_CUE_SOTCS, // Song of Time Cutscenes (Double SoT, Three-Day Reset SoT) /* 0x1FA */ CS_CMD_ACTOR_CUE_506, /* 0x1FB */ CS_CMD_ACTOR_CUE_507, /* 0x1FC */ CS_CMD_ACTOR_CUE_508, diff --git a/include/z64ocarina.h b/include/z64ocarina.h index 3bb99cd62..7cfafde4f 100644 --- a/include/z64ocarina.h +++ b/include/z64ocarina.h @@ -32,6 +32,12 @@ 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, + /* 0x19 */ OCARINA_MODE_APPLY_INV_SOT_SLOW, + /* 0x1A */ OCARINA_MODE_APPLY_DOUBLE_SOT +} OcarinaMode; + typedef enum { /* 0 */ OCARINA_BTN_A, /* 1 */ OCARINA_BTN_C_DOWN, diff --git a/include/z64player.h b/include/z64player.h index f10984216..5982233b8 100644 --- a/include/z64player.h +++ b/include/z64player.h @@ -656,7 +656,7 @@ typedef enum PlayerCsMode { /* 0x3F */ PLAYER_CSMODE_63, /* 0x40 */ PLAYER_CSMODE_64, /* 0x41 */ PLAYER_CSMODE_65, - /* 0x42 */ PLAYER_CSMODE_66, + /* 0x42 */ PLAYER_CSMODE_66, // Look side-to-side with chin down /* 0x43 */ PLAYER_CSMODE_67, /* 0x44 */ PLAYER_CSMODE_68, /* 0x45 */ PLAYER_CSMODE_69, @@ -664,15 +664,15 @@ typedef enum PlayerCsMode { /* 0x47 */ PLAYER_CSMODE_71, /* 0x48 */ PLAYER_CSMODE_72, /* 0x49 */ PLAYER_CSMODE_73, - /* 0x4A */ PLAYER_CSMODE_74, + /* 0x4A */ PLAYER_CSMODE_74, // Give a big nod of approval /* 0x4B */ PLAYER_CSMODE_75, /* 0x4C */ PLAYER_CSMODE_76, /* 0x4D */ PLAYER_CSMODE_77, /* 0x4E */ PLAYER_CSMODE_78, /* 0x4F */ PLAYER_CSMODE_79, /* 0x50 */ PLAYER_CSMODE_80, - /* 0x51 */ PLAYER_CSMODE_81, - /* 0x52 */ PLAYER_CSMODE_82, + /* 0x51 */ PLAYER_CSMODE_81, // Look side-to-side with chin up + /* 0x52 */ PLAYER_CSMODE_82, // Close eyes and sway body in circles /* 0x53 */ PLAYER_CSMODE_83, /* 0x54 */ PLAYER_CSMODE_84, // Sucked by the moon /* 0x55 */ PLAYER_CSMODE_85, diff --git a/include/z64save.h b/include/z64save.h index 69b9e7ad8..0c0af023c 100644 --- a/include/z64save.h +++ b/include/z64save.h @@ -1466,15 +1466,8 @@ typedef enum { * gSaveContext.eventInf */ -// gSaveContext.eventInf[0] is used to dog race information -// #define EVENTINF_00 0x00 -// #define EVENTINF_01 0x01 -// #define EVENTINF_02 0x02 -// #define EVENTINF_03 0x03 -// #define EVENTINF_04 0x04 -// #define EVENTINF_05 0x05 -// #define EVENTINF_06 0x06 -// #define EVENTINF_07 0x07 +// gSaveContext.eventInf[0] is used for dog race information (8 entries) +// EVENTINF_00 to EVENTINF_07 #define EVENTINF_10 0x10 #define EVENTINF_11 0x11 @@ -1491,7 +1484,8 @@ typedef enum { #define EVENTINF_24 0x24 #define EVENTINF_25 0x25 #define EVENTINF_26 0x26 -#define EVENTINF_27 0x27 +// "Dawn of ... day". Must be triggered with respawnFlag -4 or -99 +#define EVENTINF_TRIGGER_DAYTELOP 0x27 #define EVENTINF_30 0x30 // EVENTINF_31 is used to track if Player is within range of EnGakufu (2D Song Buttons Appearing on Wall) @@ -1535,11 +1529,14 @@ typedef enum { #define EVENTINF_65 0x65 #define EVENTINF_66 0x66 #define EVENTINF_67 0x67 -#define EVENTINF_70 0x70 -#define EVENTINF_71 0x71 -#define EVENTINF_72 0x72 -#define EVENTINF_73 0x73 -#define EVENTINF_74 0x74 + +// Tracks which ammo is lost during the three day reset +#define EVENTINF_THREEDAYRESET_LOST_RUPEES 0x70 +#define EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO 0x71 +#define EVENTINF_THREEDAYRESET_LOST_NUT_AMMO 0x72 +#define EVENTINF_THREEDAYRESET_LOST_STICK_AMMO 0x73 +#define EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO 0x74 + #define EVENTINF_75 0x75 #define EVENTINF_76 0x76 #define EVENTINF_77 0x77 diff --git a/src/code/z_kankyo.c b/src/code/z_kankyo.c index 2191498a3..9346af59a 100644 --- a/src/code/z_kankyo.c +++ b/src/code/z_kankyo.c @@ -90,13 +90,13 @@ #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD538.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD59C.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpAmbientColor.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD5E0.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpDiffuseColor.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD654.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFogColor.s") -#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/func_800FD698.s") +#pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/Environment_LerpFog.s") #pragma GLOBAL_ASM("asm/non_matchings/code/z_kankyo/get_days_elapsed.s") diff --git a/src/code/z_play.c b/src/code/z_play.c index 9063c9151..d86fd90d6 100644 --- a/src/code/z_play.c +++ b/src/code/z_play.c @@ -2090,8 +2090,8 @@ void Play_Init(GameState* thisx) { s32 scene; if ((gSaveContext.respawnFlag == -4) || (gSaveContext.respawnFlag == -0x63)) { - if (CHECK_EVENTINF(EVENTINF_27)) { - CLEAR_EVENTINF(EVENTINF_27); + if (CHECK_EVENTINF(EVENTINF_TRIGGER_DAYTELOP)) { + CLEAR_EVENTINF(EVENTINF_TRIGGER_DAYTELOP); STOP_GAMESTATE(&this->state); SET_NEXT_GAMESTATE(&this->state, DayTelop_Init, sizeof(DayTelopState)); return; diff --git a/src/code/z_sram_NES.c b/src/code/z_sram_NES.c index fa690758c..f03d38e45 100644 --- a/src/code/z_sram_NES.c +++ b/src/code/z_sram_NES.c @@ -489,38 +489,38 @@ void Sram_SaveEndOfCycle(PlayState* play) { gSaveContext.eventInf[i] = 0; } - CLEAR_EVENTINF(EVENTINF_70); - CLEAR_EVENTINF(EVENTINF_71); - CLEAR_EVENTINF(EVENTINF_72); - CLEAR_EVENTINF(EVENTINF_73); - CLEAR_EVENTINF(EVENTINF_74); + CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_RUPEES); + CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO); + CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO); + CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO); + CLEAR_EVENTINF(EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO); if (gSaveContext.save.saveInfo.playerData.rupees != 0) { - SET_EVENTINF(EVENTINF_70); + SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_RUPEES); } if (INV_CONTENT(ITEM_BOMB) == ITEM_BOMB) { item = INV_CONTENT(ITEM_BOMB); if (AMMO(item) != 0) { - SET_EVENTINF(EVENTINF_71); + SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO); } } if (INV_CONTENT(ITEM_NUT) == ITEM_NUT) { item = INV_CONTENT(ITEM_NUT); if (AMMO(item) != 0) { - SET_EVENTINF(EVENTINF_72); + SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO); } } if (INV_CONTENT(ITEM_STICK) == ITEM_STICK) { item = INV_CONTENT(ITEM_STICK); if (AMMO(item) != 0) { - SET_EVENTINF(EVENTINF_73); + SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO); } } if (INV_CONTENT(ITEM_BOW) == ITEM_BOW) { item = INV_CONTENT(ITEM_BOW); if (AMMO(item) != 0) { - SET_EVENTINF(EVENTINF_74); + SET_EVENTINF(EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO); } } 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 918588326..70570ed96 100644 --- a/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c +++ b/src/overlays/actors/ovl_En_Kakasi/z_en_kakasi.c @@ -943,7 +943,7 @@ void EnKakasi_DancingNightAway(EnKakasi* this, PlayState* play) { if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) { gSaveContext.save.time = CLOCK_TIME(6, 0); gSaveContext.respawnFlag = -4; - SET_EVENTINF(EVENTINF_27); + SET_EVENTINF(EVENTINF_TRIGGER_DAYTELOP); } else { gSaveContext.save.time = CLOCK_TIME(18, 0); gSaveContext.respawnFlag = -8; 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 fb18d4a39..233ecc9ec 100644 --- a/src/overlays/actors/ovl_En_Test4/z_en_test4.c +++ b/src/overlays/actors/ovl_En_Test4/z_en_test4.c @@ -296,16 +296,16 @@ void EnTest4_Init(Actor* thisx, PlayState* play) { sCsIdList[0] = csId; if (csId >= 0) { - ActorCutscene* actorCutscene = CutsceneManager_GetCutsceneEntry(sCsIdList[0]); + ActorCutscene* csEntry = CutsceneManager_GetCutsceneEntry(sCsIdList[0]); SET_EVENTINF(EVENTINF_52); - sCsIdList[1] = actorCutscene->additionalCsId; + sCsIdList[1] = csEntry->additionalCsId; } else { CLEAR_EVENTINF(EVENTINF_52); sCsIdList[1] = sCsIdList[0]; } - if (sIsLoaded || (CHECK_EVENTINF(EVENTINF_27))) { + if (sIsLoaded || CHECK_EVENTINF(EVENTINF_TRIGGER_DAYTELOP)) { Actor_Kill(&this->actor); } else { sIsLoaded = true; @@ -413,7 +413,7 @@ void func_80A42AB8(EnTest4* this, PlayState* play) { } gSaveContext.respawnFlag = -4; - SET_EVENTINF(EVENTINF_27); + SET_EVENTINF(EVENTINF_TRIGGER_DAYTELOP); Actor_Kill(&this->actor); } } 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 846d728dc..185e11dbd 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.c +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.c @@ -18,30 +18,38 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2); void EnTest6_Update(Actor* thisx, PlayState* play); void EnTest6_Draw(Actor* thisx, PlayState* play); -struct EnTest6Struct; +struct SoTCsAmmoDrops; -typedef void (*EnTest6StructFunc)(EnTest6*, PlayState*, struct EnTest6Struct*); +typedef void (*SoTCsAmmoDropDrawFunc)(EnTest6*, PlayState*, struct SoTCsAmmoDrops*); -typedef struct EnTest6Struct { - /* 0x00 */ s32 unk_00; - /* 0x04 */ f32 unk_04; - /* 0x08 */ f32 unk_08; - /* 0x0C */ f32 unk_0C; - /* 0x10 */ f32 unk_10; - /* 0x14 */ EnTest6StructFunc unk_14; -} EnTest6Struct; // size = 0x18 +typedef enum SoTCsAmmoDropType { + /* 0 */ SOTCS_AMMO_DROP_NONE, + /* 1 */ SOTCS_AMMO_DROP_ARROWS, + /* 2 */ SOTCS_AMMO_DROP_BOMB, + /* 3 */ SOTCS_AMMO_DROP_DEKU_NUT, + /* 4 */ SOTCS_AMMO_DROP_DEKU_STICK, + /* 5 */ SOTCS_AMMO_DROP_RUPEE_GREEN, + /* 6 */ SOTCS_AMMO_DROP_RUPEE_BLUE +} SoTCsAmmoDropType; -void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr); -void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr); +typedef struct SoTCsAmmoDrops { + /* 0x00 */ SoTCsAmmoDropType type; + /* 0x04 */ f32 scale; + /* 0x08 */ Vec3f pos; + /* 0x14 */ SoTCsAmmoDropDrawFunc draw; +} SoTCsAmmoDrops; // size = 0x18 + +void EnTest6_DrawAmmoDropDefault(EnTest6* this, PlayState* play, SoTCsAmmoDrops* ammoDrop); +void EnTest6_DrawAmmoDropRupee(EnTest6* this, PlayState* play, SoTCsAmmoDrops* ammoDrop); void EnTest6_SetupAction(EnTest6* this, EnTest6ActionFunc actionFunc); -void func_80A9156C(EnTest6* this, PlayState* play); -void func_80A91690(EnTest6* this, PlayState* play); -void func_80A91760(EnTest6* this, PlayState* play); -void func_80A920C8(EnTest6* this, PlayState* play); -void func_80A92188(EnTest6* this, PlayState* play); -void func_80A92950(EnTest6* this, PlayState* play); +void EnTest6_StartCutscene(EnTest6* this, PlayState* play); +void EnTest6_SetupInvertedSoTCutscene(EnTest6* this, PlayState* play); +void EnTest6_InvertedSoTCutscene(EnTest6* this, PlayState* play); +void EnTest6_SetupDoubleSoTCutscene(EnTest6* this, PlayState* play); +void EnTest6_DoubleSoTCutscene(EnTest6* this, PlayState* play); +void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play); -EnTest6Struct D_80A94910[12]; +SoTCsAmmoDrops sSoTCsAmmoDrops[12]; ActorInit En_Test6_InitVars = { ACTOR_EN_TEST6, @@ -55,7 +63,7 @@ ActorInit En_Test6_InitVars = { (ActorFunc)EnTest6_Draw, }; -CutsceneData D_80A93E80[] = { +CutsceneData sDoubleSoTCsCamData[] = { // Header CS_CAM_SPLINE(13, 424, 0, 100), @@ -108,106 +116,114 @@ CutsceneData D_80A93E80[] = { CS_CAM_END() }; -TexturePtr D_80A9402C[] = { - NULL, gDropArrows2Tex, gDropBombTex, gDropDekuNutTex, gDropDekuStickTex, gRupeeGreenTex, gRupeeBlueTex, +TexturePtr sSoTCsAmmoDropTextures[] = { + NULL, // SOTCS_AMMO_DROP_NONE + gDropArrows2Tex, // SOTCS_AMMO_DROP_ARROWS + gDropBombTex, // SOTCS_AMMO_DROP_BOMB + gDropDekuNutTex, // SOTCS_AMMO_DROP_DEKU_NUT + gDropDekuStickTex, // SOTCS_AMMO_DROP_DEKU_STICK + gRupeeGreenTex, // SOTCS_AMMO_DROP_RUPEE_GREEN + gRupeeBlueTex, // SOTCS_AMMO_DROP_RUPEE_BLUE }; -Color_RGB8 D_80A94048 = { 230, 230, 220 }; -Color_RGB8 D_80A9404C = { 120, 120, 100 }; -Color_RGB8 D_80A94050 = { 0, 0, 0 }; +typedef enum SoTCsDrawType { + /* 0 */ SOTCS_DRAW_DOUBLE_SOT, + /* 1 */ SOTCS_DRAW_RESET_CYCLE_SOT, + /* 2 */ SOTCS_DRAW_INVERTED_SOT, + /* 99 */ SOTCS_DRAW_TYPE_NONE = 99 +} SoTCsDrawType; -s16 D_80A94054 = 500; -s16 D_80A94058 = 1500; +#define SOTCS_AMMO_FLAG_RUPEE (1 << 0) +#define SOTCS_AMMO_FLAG_BOMB (1 << 1) +#define SOTCS_AMMO_FLAG_NUT (1 << 2) +#define SOTCS_AMMO_FLAG_ARROW (1 << 4) -static Vec3f sSubCamUp = { 0.0f, 1.0f, 0.0f }; - -Color_RGB8 D_80A94068 = { 225, 230, 225 }; -Color_RGB8 D_80A9406C = { 120, 120, 100 }; -Color_RGB8 D_80A94070 = { 0, 0, 0 }; - -s16 D_80A94074 = 940; -s16 D_80A94078 = 2000; - -void func_80A90730(EnTest6* this, PlayState* play) { +void EnTest6_SetupCutscene(EnTest6* this, PlayState* play) { s32 i; Player* player = GET_PLAYER(play); - s32 phi_s0; - f32 phi_f24; + s32 ammoFlags; + f32 yOffset; this->actor.home.pos = player->actor.world.pos; this->actor.home.rot = player->actor.shape.rot; - switch (ENTEST6_GET(&this->actor)) { - case ENTEST6_24: - case ENTEST6_25: - func_80A91690(this, play); + switch (SOTCS_GET_OCARINA_MODE(&this->actor)) { + case OCARINA_MODE_APPLY_INV_SOT_FAST: + case OCARINA_MODE_APPLY_INV_SOT_SLOW: + EnTest6_SetupInvertedSoTCutscene(this, play); CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); - return; + break; - case ENTEST6_26: - func_80A920C8(this, play); + case OCARINA_MODE_APPLY_DOUBLE_SOT: + EnTest6_SetupDoubleSoTCutscene(this, play); CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); - return; - } + break; - phi_s0 = 0; - phi_f24 = -900.0f; + default: // Setup "return to first day cutscene" + ammoFlags = 0; + yOffset = -900.0f; - if (CHECK_EVENTINF(EVENTINF_70)) { - for (i = 0; i < 6; i++) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 5; - } - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 5; - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 6; - phi_s0 |= 1; - } + if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_RUPEES)) { + for (i = 0; i < 6; i++) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = + SOTCS_AMMO_DROP_RUPEE_GREEN; + } + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = + SOTCS_AMMO_DROP_RUPEE_GREEN; + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_RUPEE_BLUE; + ammoFlags |= SOTCS_AMMO_FLAG_RUPEE; + } - if (CHECK_EVENTINF(EVENTINF_74)) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1; - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1; - if (!(phi_s0 & 1)) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1; - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 1; - } - phi_s0 |= 0x10; - } + if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_ARROW_AMMO)) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_ARROWS; + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_ARROWS; + if (!(ammoFlags & SOTCS_AMMO_FLAG_RUPEE)) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_ARROWS; + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_ARROWS; + } + ammoFlags |= SOTCS_AMMO_FLAG_ARROW; + } - if (CHECK_EVENTINF(EVENTINF_71)) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2; - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2; - if (!(phi_s0 & 1)) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2; - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 2; - } - phi_s0 |= 2; - } + if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_BOMB_AMMO)) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_BOMB; + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_BOMB; + if (!(ammoFlags & SOTCS_AMMO_FLAG_RUPEE)) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_BOMB; + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_BOMB; + } + ammoFlags |= SOTCS_AMMO_FLAG_BOMB; + } - if (CHECK_EVENTINF(EVENTINF_72)) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 3; - if (!(phi_s0 & (0x10 | 0x2 | 0x1))) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 3; - } - phi_s0 |= 4; - } + if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_NUT_AMMO)) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_DEKU_NUT; + if (!(ammoFlags & (SOTCS_AMMO_FLAG_ARROW | SOTCS_AMMO_FLAG_BOMB | SOTCS_AMMO_FLAG_RUPEE))) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = + SOTCS_AMMO_DROP_DEKU_NUT; + } + ammoFlags |= SOTCS_AMMO_FLAG_NUT; + } - if (CHECK_EVENTINF(EVENTINF_73)) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 4; - if (!(phi_s0 & (0x10 | 0x2 | 0x1))) { - D_80A94910[(s32)(Rand_ZeroOne() * ARRAY_COUNT(D_80A94910))].unk_00 = 4; - } - } + if (CHECK_EVENTINF(EVENTINF_THREEDAYRESET_LOST_STICK_AMMO)) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = SOTCS_AMMO_DROP_DEKU_STICK; + if (!(ammoFlags & (SOTCS_AMMO_FLAG_ARROW | SOTCS_AMMO_FLAG_BOMB | SOTCS_AMMO_FLAG_RUPEE))) { + sSoTCsAmmoDrops[(s32)(Rand_ZeroOne() * ARRAY_COUNT(sSoTCsAmmoDrops))].type = + SOTCS_AMMO_DROP_DEKU_STICK; + } + } - for (i = 0; i < ARRAY_COUNT(D_80A94910); i++) { - D_80A94910[i].unk_08 = ((2.0f * Rand_ZeroOne()) - 1.0f) * 80.0f; - D_80A94910[i].unk_10 = ((2.0f * Rand_ZeroOne()) - 1.0f) * 80.0f; - D_80A94910[i].unk_0C = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + phi_f24; - D_80A94910[i].unk_04 = -10.0f; - if (D_80A94910[i].unk_00 < 5) { - D_80A94910[i].unk_14 = func_80A90D34; - } else { - D_80A94910[i].unk_14 = func_80A90FC0; - } - phi_f24 += 50.0f; + for (i = 0; i < ARRAY_COUNT(sSoTCsAmmoDrops); i++) { + sSoTCsAmmoDrops[i].pos.x = ((2.0f * Rand_ZeroOne()) - 1.0f) * 80.0f; + sSoTCsAmmoDrops[i].pos.z = ((2.0f * Rand_ZeroOne()) - 1.0f) * 80.0f; + sSoTCsAmmoDrops[i].pos.y = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + yOffset; + sSoTCsAmmoDrops[i].scale = -10.0f; + if (sSoTCsAmmoDrops[i].type <= SOTCS_AMMO_DROP_DEKU_STICK) { + sSoTCsAmmoDrops[i].draw = EnTest6_DrawAmmoDropDefault; + } else { + sSoTCsAmmoDrops[i].draw = EnTest6_DrawAmmoDropRupee; + } + yOffset += 50.0f; + } + break; } } @@ -219,36 +235,38 @@ void EnTest6_DisableMotionBlur(void) { Play_DisableMotionBlur(); } -void func_80A90C54(PlayState* play, f32 arg1) { +void EnTest6_EnableWhiteFillScreen(PlayState* play, f32 alphaRatio) { play->envCtx.fillScreen = true; play->envCtx.screenFillColor[0] = 250; play->envCtx.screenFillColor[1] = 250; play->envCtx.screenFillColor[2] = 250; - play->envCtx.screenFillColor[3] = 255.0f * arg1; + play->envCtx.screenFillColor[3] = 255.0f * alphaRatio; } -void func_80A90D20(PlayState* play) { +void EnTest6_DisableWhiteFillScreen(PlayState* play) { play->envCtx.fillScreen = false; } -void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { +void EnTest6_DrawAmmoDropDefault(EnTest6* this, PlayState* play, SoTCsAmmoDrops* ammoDrop) { s32 pad; OPEN_DISPS(play->state.gfxCtx); - if (ptr->unk_00 != 0) { - Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW); - Matrix_Scale(ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, ptr->unk_04 * 0.02f, MTXMODE_APPLY); + if (ammoDrop->type != SOTCS_AMMO_DROP_NONE) { + Matrix_Translate(ammoDrop->pos.x * ammoDrop->scale, ammoDrop->pos.y, ammoDrop->pos.z * ammoDrop->scale, + MTXMODE_NEW); + Matrix_Scale(ammoDrop->scale * 0.02f, ammoDrop->scale * 0.02f, ammoDrop->scale * 0.02f, MTXMODE_APPLY); POLY_OPA_DISP = Play_SetFog(play, POLY_OPA_DISP); POLY_OPA_DISP = Gfx_SetupDL66(POLY_OPA_DISP); - gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A9402C[ptr->unk_00])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sSoTCsAmmoDropTextures[ammoDrop->type])); gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_OPA_DISP++, gItemDropDL); } - Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW); - Matrix_Scale(2.0f * ptr->unk_04, 2.0f * ptr->unk_04, 2.0f * ptr->unk_04, MTXMODE_APPLY); + Matrix_Translate(ammoDrop->pos.x * ammoDrop->scale, ammoDrop->pos.y, ammoDrop->pos.z * ammoDrop->scale, + MTXMODE_NEW); + Matrix_Scale(2.0f * ammoDrop->scale, 2.0f * ammoDrop->scale, 2.0f * ammoDrop->scale, MTXMODE_APPLY); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZS(play->state.frames * 512, MTXMODE_APPLY); Matrix_Translate(0.0f, 0.0f, 2.0f, MTXMODE_APPLY); @@ -266,41 +284,43 @@ void func_80A90D34(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { CLOSE_DISPS(play->state.gfxCtx); } -void func_80A90FC0(EnTest6* this, PlayState* play, EnTest6Struct* ptr) { +void EnTest6_DrawAmmoDropRupee(EnTest6* this, PlayState* play, SoTCsAmmoDrops* ammoDrop) { s32 pad; Gfx* gfxHead = GRAPH_ALLOC(play->state.gfxCtx, 2 * sizeof(Gfx)); Gfx* gfx = gfxHead; - Hilite* sp70; - Vec3f sp64; + Hilite* hilite; + Vec3f ammoDropPos; - sp64.x = ptr->unk_08 * ptr->unk_04; - sp64.y = ptr->unk_0C; - sp64.z = ptr->unk_10 * ptr->unk_04; + ammoDropPos.x = ammoDrop->pos.x * ammoDrop->scale; + ammoDropPos.y = ammoDrop->pos.y; + ammoDropPos.z = ammoDrop->pos.z * ammoDrop->scale; - sp70 = func_800BCBF4(&sp64, play); + hilite = func_800BCBF4(&ammoDropPos, play); OPEN_DISPS(play->state.gfxCtx); if (gfxHead != NULL) { Gfx_SetupDL25_Opa(play->state.gfxCtx); - gDPSetTileSize(gfx++, 1, sp70->h.x1 & 0xFFFF, sp70->h.y1 & 0xFFFF, (sp70->h.x1 + 60) & 0xFFFF, - (sp70->h.y1 + 60) & 0xFFFF); + //! FAKE: & 0xFFFF + gDPSetTileSize(gfx++, 1, hilite->h.x1 & 0xFFFF, hilite->h.y1 & 0xFFFF, (hilite->h.x1 + 60) & 0xFFFF, + (hilite->h.y1 + 60) & 0xFFFF); gSPEndDisplayList(gfx++); gSPSegment(POLY_OPA_DISP++, 0x07, gfxHead); - Matrix_Translate(sp64.x, sp64.y, sp64.z, MTXMODE_NEW); - Matrix_Scale(ptr->unk_04 * 0.018f, ptr->unk_04 * 0.018f, ptr->unk_04 * 0.018f, MTXMODE_APPLY); + Matrix_Translate(ammoDropPos.x, ammoDropPos.y, ammoDropPos.z, MTXMODE_NEW); + Matrix_Scale(ammoDrop->scale * 0.018f, ammoDrop->scale * 0.018f, ammoDrop->scale * 0.018f, MTXMODE_APPLY); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); 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(D_80A9402C[ptr->unk_00])); + gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(sSoTCsAmmoDropTextures[ammoDrop->type])); gSPDisplayList(POLY_OPA_DISP++, gRupeeDL); } - Matrix_Translate(ptr->unk_08 * ptr->unk_04, ptr->unk_0C, ptr->unk_10 * ptr->unk_04, MTXMODE_NEW); - Matrix_Scale(ptr->unk_04 * 2.5f, ptr->unk_04 * 2.5f, ptr->unk_04 * 2.5f, MTXMODE_APPLY); + Matrix_Translate(ammoDrop->pos.x * ammoDrop->scale, ammoDrop->pos.y, ammoDrop->pos.z * ammoDrop->scale, + MTXMODE_NEW); + Matrix_Scale(ammoDrop->scale * 2.5f, ammoDrop->scale * 2.5f, ammoDrop->scale * 2.5f, MTXMODE_APPLY); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); Matrix_RotateZS(play->state.frames * 256, MTXMODE_APPLY); Matrix_Translate(0.0f, 0.0f, 4.0f, MTXMODE_APPLY); @@ -327,8 +347,9 @@ void EnTest6_Init(Actor* thisx, PlayState* play2) { EnTest6* this = THIS; s32 i; - if (((ENTEST6_GET(&this->actor) == ENTEST6_24) || (ENTEST6_GET(&this->actor) == ENTEST6_25) || - (ENTEST6_GET(&this->actor) == ENTEST6_26)) && + if (((SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) || + (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_SLOW) || + (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_DOUBLE_SOT)) && (play->playerCsIds[PLAYER_CS_ID_SONG_WARP] == CS_ID_NONE)) { Actor_Kill(&this->actor); return; @@ -340,12 +361,13 @@ void EnTest6_Init(Actor* thisx, PlayState* play2) { this->lights[i].node = LightContext_InsertLight(play, &play->lightCtx, &this->lights[i].info); } - this->unk_286 = 0; - this->cueId = 0; - this->unk_278 = 0; - this->unk_276 = 99; - func_80A90730(this, play); - EnTest6_SetupAction(this, func_80A9156C); + this->screenFillAlpha = 0; + this->cueId = SOTCS_CUEID_NONE; + this->invSoTClockYaw = 0; + this->drawType = SOTCS_DRAW_TYPE_NONE; + + EnTest6_SetupCutscene(this, play); + EnTest6_SetupAction(this, EnTest6_StartCutscene); } void EnTest6_Destroy(Actor* thisx, PlayState* play2) { @@ -356,17 +378,22 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) { play->envCtx.lightSettings.ambientColor[0] = 0; play->envCtx.lightSettings.ambientColor[1] = 0; play->envCtx.lightSettings.ambientColor[2] = 0; + play->envCtx.lightSettings.diffuseColor1[0] = 0; play->envCtx.lightSettings.diffuseColor1[1] = 0; play->envCtx.lightSettings.diffuseColor1[2] = 0; + play->envCtx.lightSettings.diffuseColor2[0] = 0; play->envCtx.lightSettings.diffuseColor2[1] = 0; play->envCtx.lightSettings.diffuseColor2[2] = 0; + play->envCtx.lightSettings.fogColor[0] = 0; play->envCtx.lightSettings.fogColor[1] = 0; play->envCtx.lightSettings.fogColor[2] = 0; + play->envCtx.lightSettings.fogNear = 0; play->envCtx.lightSettings.zFar = 0; + play->envCtx.fillScreen = false; for (i = 0; i < ARRAY_COUNT(this->lights); i++) { @@ -374,50 +401,51 @@ void EnTest6_Destroy(Actor* thisx, PlayState* play2) { } } -void func_80A9156C(EnTest6* this, PlayState* play) { - switch (ENTEST6_GET(&this->actor)) { - case ENTEST6_24: - case ENTEST6_25: +void EnTest6_StartCutscene(EnTest6* this, PlayState* play) { + switch (SOTCS_GET_OCARINA_MODE(&this->actor)) { + case OCARINA_MODE_APPLY_INV_SOT_FAST: + case OCARINA_MODE_APPLY_INV_SOT_SLOW: if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) { CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); } else { CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL); this->subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); - EnTest6_SetupAction(this, func_80A91760); + EnTest6_SetupAction(this, EnTest6_InvertedSoTCutscene); } break; - case ENTEST6_26: + case OCARINA_MODE_APPLY_DOUBLE_SOT: if (!CutsceneManager_IsNext(play->playerCsIds[PLAYER_CS_ID_SONG_WARP])) { CutsceneManager_Queue(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); } else { CutsceneManager_Start(play->playerCsIds[PLAYER_CS_ID_SONG_WARP], NULL); this->subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); - EnTest6_SetupAction(this, func_80A92188); + EnTest6_SetupAction(this, EnTest6_DoubleSoTCutscene); } break; default: gSaveContext.save.daysElapsed = 0; - gSaveContext.save.day = false; + gSaveContext.save.day = 0; gSaveContext.save.time = CLOCK_TIME(6, 0) - 1; - EnTest6_SetupAction(this, func_80A92950); + EnTest6_SetupAction(this, EnTest6_SharedSoTCutscene); break; } } -void func_80A91690(EnTest6* this, PlayState* play) { - this->cueId = 90; - this->unk_27A = 100; - this->unk_286 = 0; - if (ENTEST6_GET(&this->actor) == ENTEST6_25) { +void EnTest6_SetupInvertedSoTCutscene(EnTest6* this, PlayState* play) { + this->cueId = SOTCS_CUEID_INV_INIT; + this->timer = 100; + this->screenFillAlpha = 0; + + if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_SLOW) { play_sound(NA_SE_SY_TIME_CONTROL_SLOW); - } else if (ENTEST6_GET(&this->actor) == ENTEST6_24) { + } else if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) { play_sound(NA_SE_SY_TIME_CONTROL_NORMAL); } } -void func_80A916F0(EnTest6* this, PlayState* play) { +void EnTest6_StopInvertedSoTCutscene(EnTest6* this, PlayState* play) { Player* player = GET_PLAYER(play); player->actor.freezeTimer = 0; @@ -429,216 +457,249 @@ void func_80A916F0(EnTest6* this, PlayState* play) { Actor_Kill(&this->actor); } -void func_80A91760(EnTest6* this, PlayState* play) { +Color_RGB8 sInvSoTCsFogColor = { 230, 230, 220 }; +Color_RGB8 sInvSoTCsAmbientColor = { 120, 120, 100 }; +Color_RGB8 sInvSoTCsDiffuseColor = { 0, 0, 0 }; +s16 sInvSoTCsFogNear = 500; +s16 sInvSoTCsZFar = 1500; + +void EnTest6_InvertedSoTCutscene(EnTest6* this, PlayState* play) { Input* input = CONTROLLER1(&play->state); - s16 temp_s0; + s16 clockYaw; Player* player = GET_PLAYER(play); Camera* mainCam; Vec3f subCamAt; Vec3f subCamEye; - Vec3f sp54; + Vec3f eyeNext; s32 i; - f32 sp4C; - Camera* subCam = Play_GetCamera(play, this->subCamId); + f32 temp; + Camera* subCam; + subCam = Play_GetCamera(play, this->subCamId); mainCam = Play_GetCamera(play, CAM_ID_MAIN); + // Update cutscene effects switch (this->cueId) { - case 90: - this->unk_276 = 2; - this->unk_15C = 0.0f; - this->unk_14C = 0.1f; - this->unk_282 = 0; - this->unk_278 = 0; - this->cueId = 91; + case SOTCS_CUEID_INV_INIT: + this->drawType = SOTCS_DRAW_INVERTED_SOT; + this->invSoTEnvLerp = 0.0f; + this->speed = 0.1f; + this->alpha = 0; + this->invSoTClockYaw = 0; + this->cueId = SOTCS_CUEID_INV_SETUP_CLOCKS; break; - case 91: - this->unk_15C += this->unk_14C; - func_800FD59C(play, &D_80A9404C, this->unk_15C); - func_800FD5E0(play, &D_80A94050, this->unk_15C); - func_800FD654(play, &D_80A94048, this->unk_15C); - func_800FD698(play, D_80A94054, D_80A94058, this->unk_15C); + case SOTCS_CUEID_INV_SETUP_CLOCKS: + this->invSoTEnvLerp += this->speed; + Environment_LerpAmbientColor(play, &sInvSoTCsAmbientColor, this->invSoTEnvLerp); + Environment_LerpDiffuseColor(play, &sInvSoTCsDiffuseColor, this->invSoTEnvLerp); + Environment_LerpFogColor(play, &sInvSoTCsFogColor, this->invSoTEnvLerp); + Environment_LerpFog(play, sInvSoTCsFogNear, sInvSoTCsZFar, this->invSoTEnvLerp); - if (this->unk_27A == 90) { - this->unk_282 = 0; - if (ENTEST6_GET(&this->actor) == ENTEST6_24) { - this->unk_27C = 0x200; - this->unk_150 = 0.0f; - sp4C = -100.0f; + if (this->timer == 90) { + this->alpha = 0; + if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) { + this->clockAngle = 0x200; + this->clockDist = 0.0f; + temp = -100.0f; } else { - this->unk_27C = 0x570; - this->unk_150 = 110.0f; - sp4C = 100.0f; + this->clockAngle = 0x570; + this->clockDist = 110.0f; + temp = 100.0f; } - this->unk_14C = 1.0f; + this->speed = 1.0f; - for (i = 0; i < ARRAY_COUNT(this->unk_20C); i++) { - this->unk_20C[i].x = player->actor.world.pos.x; - this->unk_20C[i].y = player->actor.world.pos.y; - this->unk_20C[i].z = player->actor.world.pos.z; + for (i = 0; i < SOTCS_INV_NUM_CLOCKS; i++) { + this->invSoTClockPos[i].x = player->actor.world.pos.x; + this->invSoTClockPos[i].y = player->actor.world.pos.y; + this->invSoTClockPos[i].z = player->actor.world.pos.z; } - this->unk_254 = ZeldaArena_Malloc(sizeof(Vec3f) * 64); - if (this->unk_254 != NULL) { - for (i = 0; i < ARRAY_COUNT(this->unk_254[0]); i++) { - (*this->unk_254)[i].x = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + subCam->eye.x + - ((subCam->at.x - subCam->eye.x) * 0.2f); - (*this->unk_254)[i].y = (((2.0f * Rand_ZeroOne()) - 1.0f) * 120.0f) + subCam->eye.y + - ((subCam->at.y - subCam->eye.y) * 0.2f) + sp4C; - (*this->unk_254)[i].z = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + subCam->eye.z + - ((subCam->at.z - subCam->eye.z) * 0.2f); + this->invSoTParticles = ZeldaArena_Malloc(sizeof(Vec3f) * SOTCS_NUM_PARTICLES); + if (this->invSoTParticles != NULL) { + for (i = 0; i < ARRAY_COUNT(this->invSoTParticles[0]); i++) { + (*this->invSoTParticles)[i].x = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + subCam->eye.x + + ((subCam->at.x - subCam->eye.x) * 0.2f); + (*this->invSoTParticles)[i].y = (((2.0f * Rand_ZeroOne()) - 1.0f) * 120.0f) + subCam->eye.y + + ((subCam->at.y - subCam->eye.y) * 0.2f) + temp; + (*this->invSoTParticles)[i].z = (((2.0f * Rand_ZeroOne()) - 1.0f) * 40.0f) + subCam->eye.z + + ((subCam->at.z - subCam->eye.z) * 0.2f); } } + EnTest6_EnableMotionBlur(120); Distortion_Request(DISTORTION_TYPE_SONG_OF_TIME); Distortion_SetDuration(80); + play->unk_18844 = true; - this->cueId = 95; + this->cueId = SOTCS_CUEID_INV_CLOCKS; } break; - case 95: - if (this->unk_27A > 80) { - this->unk_282 += 25; + case SOTCS_CUEID_INV_CLOCKS: + if (this->timer > 80) { + this->alpha += 25; } - if (this->unk_27A < 20) { - this->unk_282 -= 25; + if (this->timer < 20) { + this->alpha -= 25; } - func_800FD59C(play, &D_80A9404C, this->unk_15C); - func_800FD5E0(play, &D_80A94050, this->unk_15C); - func_800FD654(play, &D_80A94048, this->unk_15C); - func_800FD698(play, D_80A94054 + this->unk_282, D_80A94058 + this->unk_282, this->unk_15C); + Environment_LerpAmbientColor(play, &sInvSoTCsAmbientColor, this->invSoTEnvLerp); + Environment_LerpDiffuseColor(play, &sInvSoTCsDiffuseColor, this->invSoTEnvLerp); + Environment_LerpFogColor(play, &sInvSoTCsFogColor, this->invSoTEnvLerp); + Environment_LerpFog(play, sInvSoTCsFogNear + this->alpha, sInvSoTCsZFar + this->alpha, this->invSoTEnvLerp); - this->unk_278 -= this->unk_27C; - temp_s0 = this->unk_278; - if (ENTEST6_GET(&this->actor) == ENTEST6_24) { - this->unk_27C += 8; - this->unk_150 += this->unk_14C; + this->invSoTClockYaw -= this->clockAngle; + clockYaw = this->invSoTClockYaw; + + if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) { + this->clockAngle += 8; + this->clockDist += this->speed; } else { - this->unk_27C -= 8; - this->unk_150 -= this->unk_14C; + this->clockAngle -= 8; + this->clockDist -= this->speed; } - for (i = 0; i < ARRAY_COUNT(this->unk_20C); i++) { - temp_s0 += 0x10000 / ARRAY_COUNT(this->unk_20C); - if (player) {} - this->unk_20C[i].x = (Math_SinS(temp_s0) * this->unk_150) + player->actor.world.pos.x; - this->unk_20C[i].y = player->actor.world.pos.y; - this->unk_20C[i].z = (Math_CosS(temp_s0) * this->unk_150) + player->actor.world.pos.z; + for (i = 0; i < SOTCS_INV_NUM_CLOCKS; i++) { + //! FAKE: + if (player != NULL) {} + + clockYaw += 0x10000 / SOTCS_INV_NUM_CLOCKS; + this->invSoTClockPos[i].x = player->actor.world.pos.x + (Math_SinS(clockYaw) * this->clockDist); + this->invSoTClockPos[i].y = player->actor.world.pos.y; + this->invSoTClockPos[i].z = player->actor.world.pos.z + (Math_CosS(clockYaw) * this->clockDist); } - if (this->unk_254 != NULL) { - for (i = 0; i < ARRAY_COUNT(this->unk_254[0]); i++) { - (*this->unk_254)[i].x += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f); - if (ENTEST6_GET(&this->actor) == ENTEST6_24) { - (*this->unk_254)[i].y += 1.0f; + if (this->invSoTParticles != NULL) { + for (i = 0; i < ARRAY_COUNT(this->invSoTParticles[0]); i++) { + // Wiggle in the x-direction + (*this->invSoTParticles)[i].x += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f); + + // Fall or rise depending on slow-down or speed-up + if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) { + // Rise up + (*this->invSoTParticles)[i].y += 1.0f; } else { - if (1) {} - (*this->unk_254)[i].y -= 1.0f; + // Fall down + (*this->invSoTParticles)[i].y -= 1.0f; } - (*this->unk_254)[i].z += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f); + // Wiggle in the z-direction + (*this->invSoTParticles)[i].z += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f); } } - if (this->unk_27A == 10) { - this->unk_14C = 0.1f; + if (this->timer == 10) { + this->speed = 0.1f; EnTest6_DisableMotionBlur(); Distortion_RemoveRequest(DISTORTION_TYPE_SONG_OF_TIME); play->unk_18844 = false; - if (this->unk_254 != NULL) { - ZeldaArena_Free(this->unk_254); + if (this->invSoTParticles != NULL) { + ZeldaArena_Free(this->invSoTParticles); } - this->cueId = 99; + this->cueId = SOTCS_CUEID_INV_END; } break; - case 99: - this->unk_15C -= this->unk_14C; - func_800FD59C(play, &D_80A9404C, this->unk_15C); - func_800FD5E0(play, &D_80A94050, this->unk_15C); - func_800FD654(play, &D_80A94048, this->unk_15C); - func_800FD698(play, D_80A94054, D_80A94058, this->unk_15C); + case SOTCS_CUEID_INV_END: + this->invSoTEnvLerp -= this->speed; + Environment_LerpAmbientColor(play, &sInvSoTCsAmbientColor, this->invSoTEnvLerp); + Environment_LerpDiffuseColor(play, &sInvSoTCsDiffuseColor, this->invSoTEnvLerp); + Environment_LerpFogColor(play, &sInvSoTCsFogColor, this->invSoTEnvLerp); + Environment_LerpFog(play, sInvSoTCsFogNear, sInvSoTCsZFar, this->invSoTEnvLerp); + break; + + default: break; } - if (this->unk_286 != 0) { + // Update Player Cutscene Animation + if (this->screenFillAlpha != 0) { func_800B7298(play, NULL, PLAYER_CSMODE_WAIT); } else { - if (this->unk_27A == 90) { + if (this->timer == 90) { + // Look side-to-side but downwards, with chin down + // gPlayerAnim_al_elf_tobidasi func_800B7298(play, NULL, PLAYER_CSMODE_66); } - if (this->unk_27A == 70) { + if (this->timer == 70) { + // close eyes and sway body in circles + // gPlayerAnim_alink_yurayura func_800B7298(play, NULL, PLAYER_CSMODE_82); } - if (this->unk_27A == 30) { + if (this->timer == 30) { + // Look side-to-side but upwards, with chin up + // gPlayerAnim_alink_kyoro func_800B7298(play, NULL, PLAYER_CSMODE_81); } - if (this->unk_27A == 5) { + if (this->timer == 5) { + // Give a big nod of approval + // gPlayerAnim_al_yes func_800B7298(play, NULL, PLAYER_CSMODE_74); } } - if (this->unk_27A > 80) { - subCam->fov += (90.0f - subCam->fov) / (this->unk_27A - 80); - } else if (this->unk_27A > 60) { - sp4C = 1.0f / (this->unk_27A - 60); + // Update camera + if (this->timer > 80) { + subCam->fov += (90.0f - subCam->fov) / (this->timer - 80); + } else if (this->timer > 60) { + temp = 1.0f / (this->timer - 60); - subCamAt.x = subCam->at.x + ((player->actor.world.pos.x - subCam->at.x) * sp4C); - subCamAt.y = subCam->at.y + (((player->actor.focus.pos.y - subCam->at.y) - 20.0f) * sp4C); - subCamAt.z = subCam->at.z + ((player->actor.world.pos.z - subCam->at.z) * sp4C); + subCamAt.x = subCam->at.x + ((player->actor.world.pos.x - subCam->at.x) * temp); + subCamAt.y = subCam->at.y + (((player->actor.focus.pos.y - subCam->at.y) - 20.0f) * temp); + subCamAt.z = subCam->at.z + ((player->actor.world.pos.z - subCam->at.z) * temp); - sp54.x = (Math_SinS(player->actor.world.rot.y) * 80.0f) + subCamAt.x; - sp54.y = subCamAt.y + 20.0f; - sp54.z = (Math_CosS(player->actor.world.rot.y) * 80.0f) + subCamAt.z; - sp4C *= 0.75f; + eyeNext.x = subCamAt.x + (Math_SinS(player->actor.world.rot.y) * 80.0f); + eyeNext.y = subCamAt.y + 20.0f; + eyeNext.z = subCamAt.z + (Math_CosS(player->actor.world.rot.y) * 80.0f); + temp *= 0.75f; - VEC3F_LERPIMPDST(&subCamEye, &subCam->eye, &sp54, sp4C); + VEC3F_LERPIMPDST(&subCamEye, &subCam->eye, &eyeNext, temp); Play_SetCameraAtEye(play, this->subCamId, &subCamAt, &subCamEye); - } else if ((this->unk_27A < 11) && (this->unk_27A > 0)) { - subCam->fov += (mainCam->fov - subCam->fov) / this->unk_27A; + } else if ((this->timer < 11) && (this->timer > 0)) { + subCam->fov += (mainCam->fov - subCam->fov) / this->timer; } - if (this->unk_286 != 0) { - func_80A90C54(play, this->unk_286 * 0.05f); + // Update white screen + if (this->screenFillAlpha != 0) { + EnTest6_EnableWhiteFillScreen(play, this->screenFillAlpha * 0.05f); subCam->fov += (mainCam->fov - subCam->fov) * 0.05f; - this->unk_286++; - if (this->unk_286 >= 20) { - this->unk_27A = 1; + this->screenFillAlpha++; + if (this->screenFillAlpha >= 20) { + this->timer = 1; } - } else if ((this->unk_27A <= 60) && (this->unk_27A > 40) && + } else if ((this->timer <= 60) && (this->timer > 40) && (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B))) { - this->unk_286 = 1; - if (ENTEST6_GET(&this->actor) == ENTEST6_25) { + this->screenFillAlpha = 1; + + if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_SLOW) { AudioSfx_StopById(NA_SE_SY_TIME_CONTROL_SLOW); - } else if (ENTEST6_GET(&this->actor) == ENTEST6_24) { + } else if (SOTCS_GET_OCARINA_MODE(&this->actor) == OCARINA_MODE_APPLY_INV_SOT_FAST) { AudioSfx_StopById(NA_SE_SY_TIME_CONTROL_NORMAL); } } - if (DECR(this->unk_27A) == 0) { - func_80A916F0(this, play); + if (DECR(this->timer) == 0) { + EnTest6_StopInvertedSoTCutscene(this, play); play->msgCtx.ocarinaMode = 4; } } -void func_80A920C8(EnTest6* this, PlayState* play) { +void EnTest6_SetupDoubleSoTCutscene(EnTest6* this, PlayState* play) { Player* player = GET_PLAYER(play); - this->unk_27A = 120; - this->unk_286 = 0; - this->unk_160 = 0.0f; + this->timer = 120; + this->screenFillAlpha = 0; + this->doubleSoTEnvLerp = 0.0f; this->actor.home.pos = player->actor.world.pos; this->actor.home.rot = player->actor.shape.rot; } -void func_80A92118(EnTest6* this, PlayState* play) { +void EnTest6_StopDoubleSoTCutscene(EnTest6* this, PlayState* play) { Player* player = GET_PLAYER(play); player->actor.freezeTimer = 0; @@ -650,7 +711,15 @@ void func_80A92118(EnTest6* this, PlayState* play) { Actor_Kill(&this->actor); } -void func_80A92188(EnTest6* this, PlayState* play) { +static Vec3f sSubCamUp = { 0.0f, 1.0f, 0.0f }; + +Color_RGB8 sDoubleSoTCsFogColor = { 225, 230, 225 }; +Color_RGB8 sDoubleSoTCsAmbientColor = { 120, 120, 100 }; +Color_RGB8 sDoubleSoTCsDiffuseColor = { 0, 0, 0 }; +s16 sDoubleSoTCsFogNear = 940; +s16 sDoubleSoTCsZFar = 2000; + +void EnTest6_DoubleSoTCutscene(EnTest6* this, PlayState* play) { Input* input = CONTROLLER1(&play->state); Player* player = GET_PLAYER(play); Camera* subCam; @@ -658,55 +727,55 @@ void func_80A92188(EnTest6* this, PlayState* play) { s16 subCamId; s16 pad2; - if (this->unk_27A > 115) { - this->unk_160 += 0.2f; - func_80A90C54(play, this->unk_160); - } else if (this->unk_27A > 90) { - this->unk_160 -= 0.05f; - func_80A90C54(play, this->unk_160); - } else if (this->unk_27A == 90) { - this->unk_160 = 0.0f; - func_80A90D20(play); + if (this->timer > 115) { + this->doubleSoTEnvLerp += 0.2f; + EnTest6_EnableWhiteFillScreen(play, this->doubleSoTEnvLerp); + } else if (this->timer > 90) { + this->doubleSoTEnvLerp -= 0.05f; + EnTest6_EnableWhiteFillScreen(play, this->doubleSoTEnvLerp); + } else if (this->timer == 90) { + this->doubleSoTEnvLerp = 0.0f; + EnTest6_DisableWhiteFillScreen(play); } - if (this->unk_27A == 1) { - this->unk_160 = 0.0f; - func_80A90D20(play); - } else if (this->unk_27A < 17) { - this->unk_160 -= 0.06666666f; - func_80A90C54(play, this->unk_160); - } else if (this->unk_27A < 22) { - this->unk_160 += 0.2f; - func_80A90C54(play, this->unk_160); + if (this->timer == 1) { + this->doubleSoTEnvLerp = 0.0f; + EnTest6_DisableWhiteFillScreen(play); + } else if (this->timer < 17) { + this->doubleSoTEnvLerp -= 0.06666666f; + EnTest6_EnableWhiteFillScreen(play, this->doubleSoTEnvLerp); + } else if (this->timer < 22) { + this->doubleSoTEnvLerp += 0.2f; + EnTest6_EnableWhiteFillScreen(play, this->doubleSoTEnvLerp); } - if (this->unk_27A == 115) { - func_800FD59C(play, &D_80A9406C, 1.0f); - func_800FD5E0(play, &D_80A94070, 1.0f); - func_800FD654(play, &D_80A94068, 1.0f); - func_800FD698(play, D_80A94074, D_80A94078, 1.0f); + if (this->timer == 115) { + Environment_LerpAmbientColor(play, &sDoubleSoTCsAmbientColor, 1.0f); + Environment_LerpDiffuseColor(play, &sDoubleSoTCsDiffuseColor, 1.0f); + Environment_LerpFogColor(play, &sDoubleSoTCsFogColor, 1.0f); + Environment_LerpFog(play, sDoubleSoTCsFogNear, sDoubleSoTCsZFar, 1.0f); play->unk_18844 = true; } - if (this->unk_27A == 15) { - func_800FD59C(play, &D_80A9406C, 0.0f); - func_800FD5E0(play, &D_80A94070, 0.0f); - func_800FD654(play, &D_80A94068, 0.0f); - func_800FD698(play, D_80A94074, D_80A94078, 0.0f); + if (this->timer == 15) { + Environment_LerpAmbientColor(play, &sDoubleSoTCsAmbientColor, 0.0f); + Environment_LerpDiffuseColor(play, &sDoubleSoTCsDiffuseColor, 0.0f); + Environment_LerpFogColor(play, &sDoubleSoTCsFogColor, 0.0f); + Environment_LerpFog(play, sDoubleSoTCsFogNear, sDoubleSoTCsZFar, 0.0f); play->unk_18844 = false; } - if (this->unk_286 >= 20) { - func_800FD59C(play, &D_80A9406C, this->unk_160); - func_800FD5E0(play, &D_80A94070, this->unk_160); - func_800FD654(play, &D_80A94068, this->unk_160); - func_800FD698(play, D_80A94074, D_80A94078, this->unk_160); + if (this->screenFillAlpha >= 20) { + Environment_LerpAmbientColor(play, &sDoubleSoTCsAmbientColor, this->doubleSoTEnvLerp); + Environment_LerpDiffuseColor(play, &sDoubleSoTCsDiffuseColor, this->doubleSoTEnvLerp); + Environment_LerpFogColor(play, &sDoubleSoTCsFogColor, this->doubleSoTEnvLerp); + Environment_LerpFog(play, sDoubleSoTCsFogNear, sDoubleSoTCsZFar, this->doubleSoTEnvLerp); play->unk_18844 = false; } func_800B8F98(&player->actor, NA_SE_PL_FLYING_AIR - SFX_FLAG); - switch (this->unk_27A) { + switch (this->timer) { case 119: EnTest6_EnableMotionBlur(50); break; @@ -715,7 +784,7 @@ void func_80A92188(EnTest6* this, PlayState* play) { EnTest6_EnableMotionBlur(20); Distortion_Request(DISTORTION_TYPE_SONG_OF_TIME); Distortion_SetDuration(90); - this->cueId = 2; + this->cueId = SOTCS_CUEID_DOUBLE_INIT; break; case 110: @@ -724,53 +793,56 @@ void func_80A92188(EnTest6* this, PlayState* play) { case 38: case 114: - this->cueId = 1; + this->cueId = SOTCS_CUEID_DOUBLE_WAIT; break; case 76: - this->cueId = 3; + this->cueId = SOTCS_CUEID_DOUBLE_CLOCKS_INWARD; break; case 61: EnTest6_EnableMotionBlur(150); - this->cueId = 4; + this->cueId = SOTCS_CUEID_DOUBLE_CLOCKS_SPIN; break; case 51: EnTest6_EnableMotionBlur(180); - this->cueId = 5; + this->cueId = SOTCS_CUEID_DOUBLE_CLOCKS_OUTWARD; break; case 14: case 15: EnTest6_EnableMotionBlur(50); Distortion_RemoveRequest(DISTORTION_TYPE_SONG_OF_TIME); - this->cueId = 0; + this->cueId = SOTCS_CUEID_NONE; break; case 1: EnTest6_DisableMotionBlur(); if (CHECK_EVENTINF(EVENTINF_52)) { - this->cueId = 9; + this->cueId = SOTCS_CUEID_DOUBLE_END; } break; + + default: + break; } - func_80A92950(this, play); + EnTest6_SharedSoTCutscene(this, play); - if (this->unk_27A == 115) { + if (this->timer == 115) { subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); subCam = Play_GetCamera(play, subCamId); this->subCamAt = subCam->at; this->subCamEye = subCam->eye; this->subCamFov = subCam->fov; - CutsceneCamera_Init(subCam, &this->unk_18C); + CutsceneCamera_Init(subCam, &this->csCamInfo); } - if ((this->unk_27A <= 115) && (this->unk_27A >= 16)) { - CutsceneCamera_UpdateSplines((u8*)D_80A93E80, &this->unk_18C); - } else if (this->unk_27A < 16) { + if ((this->timer <= 115) && (this->timer >= 16)) { + CutsceneCamera_UpdateSplines((u8*)sDoubleSoTCsCamData, &this->csCamInfo); + } else if (this->timer < 16) { subCamId = CutsceneManager_GetCurrentSubCamId(play->playerCsIds[PLAYER_CS_ID_SONG_WARP]); Play_SetCameraAtEyeUp(play, subCamId, &this->subCamAt, &this->subCamEye, &sSubCamUp); @@ -778,7 +850,7 @@ void func_80A92188(EnTest6* this, PlayState* play) { Play_SetCameraRoll(play, subCamId, 0); } - switch (this->unk_27A) { + switch (this->timer) { case 116: player->actor.freezeTimer = 2; player->actor.shape.rot.x = 0; @@ -821,24 +893,27 @@ void func_80A92188(EnTest6* this, PlayState* play) { player->unk_AC0 = 0.0f; player->actor.shape.yOffset = 0.0f; break; + + default: + break; } - if ((this->unk_286 > 0) && (this->unk_286 < 20)) { - func_80A90C54(play, this->unk_286 * 0.05f); - this->unk_286++; - if (this->unk_286 >= 20) { - this->unk_27A = 15; - this->unk_160 = 0.9333333f; + if ((this->screenFillAlpha > 0) && (this->screenFillAlpha < 20)) { + EnTest6_EnableWhiteFillScreen(play, this->screenFillAlpha * 0.05f); + this->screenFillAlpha++; + if (this->screenFillAlpha >= 20) { + this->timer = 15; + this->doubleSoTEnvLerp = 0.9333333f; } - } else if ((this->unk_27A < 96) && (this->unk_27A > 50) && + } else if ((this->timer < 96) && (this->timer > 50) && (CHECK_BTN_ALL(input->press.button, BTN_A) || CHECK_BTN_ALL(input->press.button, BTN_B))) { - this->unk_286 = 1; - this->unk_27A = 39; + this->screenFillAlpha = 1; + this->timer = 39; SEQCMD_STOP_SEQUENCE(SEQ_PLAYER_FANFARE, 20); } - if (DECR(this->unk_27A) == 0) { - func_80A92118(this, play); + if (DECR(this->timer) == 0) { + EnTest6_StopDoubleSoTCutscene(this, play); } } @@ -848,166 +923,171 @@ void EnTest6_Update(Actor* thisx, PlayState* play) { this->actionFunc(this, play); } -void func_80A92950(EnTest6* this, PlayState* play) { +/** + * Processes two different cutscenes: + * return to "Dawn of the First Day" Cs, and Song of Double Time Cs + */ +void EnTest6_SharedSoTCutscene(EnTest6* this, PlayState* play) { s32 pad[2]; Player* player = GET_PLAYER(play); - f32 temp_f0; + f32 yDiff; s32 i; s32 cueChannel; - if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_505)) { - cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_505); + if (Cutscene_IsCueInChannel(play, CS_CMD_ACTOR_CUE_SOTCS)) { + cueChannel = Cutscene_GetCueChannel(play, CS_CMD_ACTOR_CUE_SOTCS); this->cueId = play->csCtx.actorCues[cueChannel]->id; switch (this->cueId) { - case 1: + case SOTCS_CUEID_DOUBLE_WAIT: break; - case 2: - this->unk_276 = 0; - this->unk_278 = 0; - this->unk_27C = 0; + case SOTCS_CUEID_DOUBLE_INIT: + this->drawType = SOTCS_DRAW_DOUBLE_SOT; + this->counter = 0; + this->clockAngle = 0; player->actor.shape.shadowDraw = NULL; if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { - this->unk_154 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; + this->clockSpeed = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } else { - this->unk_154 = 150.0f; + this->clockSpeed = 150.0f; } if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { - this->unk_280 = play->csCtx.actorCues[cueChannel]->startPos.y; + this->clockColorGray = play->csCtx.actorCues[cueChannel]->startPos.y; } else { - this->unk_280 = 38; + this->clockColorGray = 38; } if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) { - this->unk_150 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; + this->clockDist = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; } else { - this->unk_150 = 480.0f; + this->clockDist = 480.0f; } break; - case 3: + case SOTCS_CUEID_DOUBLE_CLOCKS_INWARD: if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { - this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; + this->clockSpeed += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { - this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; + this->clockColorGray += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; } else { - this->unk_280 += 6; + this->clockColorGray += 6; } if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) { - this->unk_158 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; + this->clockRadialSpeed = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; } else { - this->unk_158 = -32.0f; + this->clockRadialSpeed = -32.0f; } - this->unk_150 += this->unk_158; + this->clockDist += this->clockRadialSpeed; break; - case 4: + case SOTCS_CUEID_DOUBLE_CLOCKS_SPIN: if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { - this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; + this->clockSpeed += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { - this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; + this->clockColorGray += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; } else { - this->unk_280 -= 4; + this->clockColorGray -= 4; } break; - case 5: + case SOTCS_CUEID_DOUBLE_CLOCKS_OUTWARD: if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { - this->unk_154 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; + this->clockSpeed += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { - this->unk_280 += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; + this->clockColorGray += (s16)play->csCtx.actorCues[cueChannel]->startPos.y; } else { - this->unk_280 -= 8; + this->clockColorGray -= 8; } if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) { - this->unk_158 += (u32)play->csCtx.actorCues[cueChannel]->startPos.z; + this->clockRadialSpeed += (u32)play->csCtx.actorCues[cueChannel]->startPos.z; } else { - this->unk_158 += 20.0f; + this->clockRadialSpeed += 20.0f; } - this->unk_150 += this->unk_158; - if (this->unk_150 > 3500.0f) { - this->unk_150 = 3500.0f; - this->cueId = 0; + this->clockDist += this->clockRadialSpeed; + if (this->clockDist > 3500.0f) { + this->clockDist = 3500.0f; + this->cueId = SOTCS_CUEID_NONE; } break; - case 6: - this->unk_276 = 1; - this->unk_278 = 0; - this->unk_27C = 0; + case SOTCS_CUEID_RESET_INIT: + this->drawType = SOTCS_DRAW_RESET_CYCLE_SOT; + this->counter = 0; + this->clockAngle = 0; player->actor.shape.shadowDraw = NULL; if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { - this->unk_154 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; + this->clockSpeed = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } else { - this->unk_154 = 100.0f; + this->clockSpeed = 100.0f; } if (play->csCtx.actorCues[cueChannel]->startPos.y != 0) { - this->unk_14C = (u32)play->csCtx.actorCues[cueChannel]->startPos.y; + this->speed = (u32)play->csCtx.actorCues[cueChannel]->startPos.y; } else { - this->unk_14C = 20.0f; + this->speed = 20.0f; } if (play->csCtx.actorCues[cueChannel]->startPos.z != 0) { - this->unk_150 = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; + this->clockDist = (u32)play->csCtx.actorCues[cueChannel]->startPos.z; } else { - this->unk_150 = 300.0f; + this->clockDist = 300.0f; } - this->unk_158 = 0.0f; + this->clockAccel = 0.0f; break; - case 7: + case SOTCS_CUEID_RESET_CLOCKS_SLOW_DOWN: if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { - this->unk_158 = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; + this->clockAccel = (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } else { - this->unk_158 = -5.0f; + this->clockAccel = -5.0f; } - this->unk_154 += this->unk_158; + this->clockSpeed += this->clockAccel; break; - case 8: + case SOTCS_CUEID_RESET_CLOCKS_SPEED_UP: if (play->csCtx.actorCues[cueChannel]->startPos.x != 0) { - this->unk_158 += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; + this->clockAccel += (u32)play->csCtx.actorCues[cueChannel]->startPos.x; } else { - this->unk_158 += 2.0f; + this->clockAccel += 2.0f; } - this->unk_154 += this->unk_158; - if (this->unk_154 > 10000.0f) { - this->unk_154 = 10000.0f; - this->cueId = 0; + this->clockSpeed += this->clockAccel; + if (this->clockSpeed > 10000.0f) { + this->clockSpeed = 10000.0f; + this->cueId = SOTCS_CUEID_NONE; } break; - case 0: + case SOTCS_CUEID_NONE: default: - this->unk_276 = 99; + this->drawType = SOTCS_DRAW_TYPE_NONE; return; - case 9: - Play_SetRespawnData(&play->state, 1, ((void)0, gSaveContext.save.entrance & 0xFFFF), player->unk_3CE, - PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC); - this->unk_276 = 99; + case SOTCS_CUEID_DOUBLE_END: + Play_SetRespawnData(&play->state, RESPAWN_MODE_RETURN, ((void)0, gSaveContext.save.entrance), + player->unk_3CE, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, + player->unk_3CC); + this->drawType = SOTCS_DRAW_TYPE_NONE; play->transitionTrigger = TRANS_TRIGGER_START; play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; play->transitionType = TRANS_TYPE_FADE_BLACK; if ((gSaveContext.save.time > CLOCK_TIME(18, 0)) || (gSaveContext.save.time < CLOCK_TIME(6, 0))) { gSaveContext.respawnFlag = -0x63; - SET_EVENTINF(EVENTINF_27); + SET_EVENTINF(EVENTINF_TRIGGER_DAYTELOP); } else { gSaveContext.respawnFlag = 2; } @@ -1016,74 +1096,74 @@ void func_80A92950(EnTest6* this, PlayState* play) { } } else { switch (this->cueId) { - case 2: - this->unk_276 = 0; - this->unk_278 = 0; - this->unk_27C = 0; + case SOTCS_CUEID_DOUBLE_INIT: + this->drawType = SOTCS_DRAW_DOUBLE_SOT; + this->counter = 0; + this->clockAngle = 0; player->actor.shape.shadowDraw = NULL; - this->unk_280 = 38; - this->unk_154 = 150.0f; - this->unk_150 = 480.0f; + this->clockColorGray = 38; + this->clockSpeed = 150.0f; + this->clockDist = 480.0f; - case 1: + case SOTCS_CUEID_DOUBLE_WAIT: break; - case 3: - this->unk_158 = -32.0f; - this->unk_280 += 6; - this->unk_150 += -32.0f; + case SOTCS_CUEID_DOUBLE_CLOCKS_INWARD: + this->clockRadialSpeed = -32.0f; + this->clockColorGray += 6; + this->clockDist += -32.0f; break; - case 4: - this->unk_280 -= 4; + case SOTCS_CUEID_DOUBLE_CLOCKS_SPIN: + this->clockColorGray -= 4; break; - case 5: - this->unk_280 -= 8; - this->unk_158 += 20.0f; - this->unk_150 += this->unk_158; - if (this->unk_150 > 3500.0f) { - this->unk_150 = 3500.0f; - this->cueId = 0; + case SOTCS_CUEID_DOUBLE_CLOCKS_OUTWARD: + this->clockColorGray -= 8; + this->clockRadialSpeed += 20.0f; + this->clockDist += this->clockRadialSpeed; + if (this->clockDist > 3500.0f) { + this->clockDist = 3500.0f; + this->cueId = SOTCS_CUEID_NONE; } break; - case 6: - this->unk_276 = 1; - this->unk_278 = 0; - this->unk_27C = 0; + case SOTCS_CUEID_RESET_INIT: + this->drawType = SOTCS_DRAW_RESET_CYCLE_SOT; + this->counter = 0; + this->clockAngle = 0; player->actor.shape.shadowDraw = NULL; - this->unk_154 = 100.0f; - this->unk_14C = 20.0f; - this->unk_150 = 300.0f; - this->unk_158 = 0.0f; + this->clockSpeed = 100.0f; + this->speed = 20.0f; + this->clockDist = 300.0f; + this->clockAccel = 0.0f; break; - case 7: - this->unk_158 = -5.0f; - this->unk_154 += -5.0f; + case SOTCS_CUEID_RESET_CLOCKS_SLOW_DOWN: + this->clockAccel = -5.0f; + this->clockSpeed += -5.0f; break; - case 8: - this->unk_158 += 2.0f; - this->unk_154 += this->unk_158; - if (this->unk_154 > 10000.0f) { - this->unk_154 = 10000.0f; - this->cueId = 0; + case SOTCS_CUEID_RESET_CLOCKS_SPEED_UP: + this->clockAccel += 2.0f; + this->clockSpeed += this->clockAccel; + if (this->clockSpeed > 10000.0f) { + this->clockSpeed = 10000.0f; + this->cueId = SOTCS_CUEID_NONE; } break; - case 0: + case SOTCS_CUEID_NONE: default: - this->unk_276 = 99; + this->drawType = SOTCS_DRAW_TYPE_NONE; return; - case 9: + case SOTCS_CUEID_DOUBLE_END: if (gSaveContext.save.time > CLOCK_TIME(12, 0)) { - Play_SetRespawnData(&play->state, 1, ((void)0, gSaveContext.save.entrance & 0xFFFF), + Play_SetRespawnData(&play->state, RESPAWN_MODE_RETURN, ((void)0, gSaveContext.save.entrance), player->unk_3CE, PLAYER_PARAMS(0xFF, PLAYER_INITMODE_B), &player->unk_3C0, player->unk_3CC); - this->unk_276 = 99; + this->drawType = SOTCS_DRAW_TYPE_NONE; play->transitionTrigger = TRANS_TRIGGER_START; play->nextEntrance = gSaveContext.respawn[RESPAWN_MODE_RETURN].entrance; play->transitionType = TRANS_TYPE_FADE_BLACK; @@ -1094,229 +1174,246 @@ void func_80A92950(EnTest6* this, PlayState* play) { } } - if (this->unk_276 == 1) { - for (i = 0; i < ARRAY_COUNT(D_80A94910); i++) { - D_80A94910[i].unk_08 += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f); - D_80A94910[i].unk_10 += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f); - D_80A94910[i].unk_0C += 3.0f; + if (this->drawType == SOTCS_DRAW_RESET_CYCLE_SOT) { + for (i = 0; i < ARRAY_COUNT(sSoTCsAmmoDrops); i++) { + sSoTCsAmmoDrops[i].pos.x += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f); + sSoTCsAmmoDrops[i].pos.z += 2.0f * ((2.0f * Rand_ZeroOne()) - 1.0f); + sSoTCsAmmoDrops[i].pos.y += 3.0f; - if (player->actor.world.pos.y < D_80A94910[i].unk_0C) { - temp_f0 = D_80A94910[i].unk_0C - player->actor.world.pos.y; - if (temp_f0 > 550.0f) { - temp_f0 = 1.0f; + if (player->actor.world.pos.y < sSoTCsAmmoDrops[i].pos.y) { + yDiff = sSoTCsAmmoDrops[i].pos.y - player->actor.world.pos.y; + if (yDiff > 550.0f) { + yDiff = 1.0f; } else { - temp_f0 = temp_f0 / 550.0f; + yDiff /= 550.0f; } - D_80A94910[i].unk_04 = SQ(temp_f0); + sSoTCsAmmoDrops[i].scale = SQ(yDiff); } else { - D_80A94910[i].unk_04 = -10.0f; + sSoTCsAmmoDrops[i].scale = -10.0f; } } } - this->unk_278++; + this->counter++; } -void func_80A93298(EnTest6* this, PlayState* play) { - s16 temp_s3; - s16 temp_s4; - f32 phi_f24; - s16 phi_s2; +/** + * Draws clocks in a double spiral above and below player + */ +void EnTest6_DrawThreeDayResetSoTCutscene(EnTest6* this, PlayState* play) { + s16 clock1Yaw; + s16 clock2Yaw; + s16 angle; s32 i; - f32 cos; - f32 sin; + Vec3f clockPos; OPEN_DISPS(play->state.gfxCtx); - this->unk_148 = POLY_OPA_DISP; - phi_f24 = 0.0f; + this->gfx = POLY_OPA_DISP; + clockPos.y = 0.0f; - temp_s3 = this->unk_27C; - temp_s4 = (s32)(Math_SinS(play->state.frames) * 12000.0f) + temp_s3 + 0x4E20; - phi_s2 = (play->state.frames & 0x3C) * 1024; - phi_s2 *= (this->unk_154 / 200.0f); - this->unk_27C += (s16)this->unk_154; - this->unk_27E = (s16)((this->unk_154 / 200.0f) * 256.0f); + clock1Yaw = this->clockAngle; + clock2Yaw = clock1Yaw + 0x4E20 + (s32)(0x2EE0 * Math_SinS(play->state.frames)); + // The `& 0x3C` ensures the angle only updates once every 4 frames + angle = (play->state.frames & 0x3C) * 1024; + angle *= this->clockSpeed / 200.0f; + this->clockAngle += (s16)this->clockSpeed; + this->clockRingRotZ = (s16)((this->clockSpeed / 200.0f) * 256.0f); - for (i = 0; i < ARRAY_COUNT(this->unk_254[0]); i++) { - temp_s3 += 0x1000; - cos = Math_CosS(temp_s3) * this->unk_150; - sin = Math_SinS(temp_s3) * this->unk_150; - Matrix_Translate(cos, phi_f24, sin, MTXMODE_NEW); + // Draw 2 clocks per loop + for (i = 0; i < (SOTCS_RESET_NUM_CLOCKS / 2); i++) { + // Clock 1 + clock1Yaw += 0x1000; + clockPos.x = Math_CosS(clock1Yaw) * this->clockDist; + clockPos.z = Math_SinS(clock1Yaw) * this->clockDist; + Matrix_Translate(clockPos.x, clockPos.y, clockPos.z, MTXMODE_NEW); Matrix_RotateXS(0x4000, MTXMODE_APPLY); Matrix_Scale(0.8f, 0.8f, 0.8f, MTXMODE_APPLY); - Matrix_RotateZS(phi_s2, MTXMODE_APPLY); + Matrix_RotateZS(angle, MTXMODE_APPLY); - gSPMatrix(this->unk_148++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(this->unk_148++, 0, 0xFF, 28, 28, 28, 255); - gDPSetEnvColor(this->unk_148++, 255, 255, 255, 255); - gDPSetRenderMode(this->unk_148++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); - gSPDisplayList(this->unk_148++, gSongOfTimeClockDL); + gSPMatrix(this->gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(this->gfx++, 0, 0xFF, 28, 28, 28, 255); + gDPSetEnvColor(this->gfx++, 255, 255, 255, 255); + gDPSetRenderMode(this->gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); + gSPDisplayList(this->gfx++, gSongOfTimeClockDL); - temp_s4 += 0x1000; - cos = Math_CosS(temp_s4) * this->unk_150; - sin = Math_SinS(temp_s4) * this->unk_150; - Matrix_Translate(cos, phi_f24, sin, MTXMODE_NEW); + // Clock 2 + clock2Yaw += 0x1000; + clockPos.x = Math_CosS(clock2Yaw) * this->clockDist; + clockPos.z = Math_SinS(clock2Yaw) * this->clockDist; + Matrix_Translate(clockPos.x, clockPos.y, clockPos.z, MTXMODE_NEW); Matrix_RotateXS(0x4000, MTXMODE_APPLY); Matrix_Scale(0.8f, 0.8f, 0.8f, MTXMODE_APPLY); - Matrix_RotateZS(-phi_s2, MTXMODE_APPLY); + Matrix_RotateZS(-angle, MTXMODE_APPLY); - gSPMatrix(this->unk_148++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(this->unk_148++, 0, 0xFF, 28, 28, 28, 255); - gDPSetEnvColor(this->unk_148++, 255, 255, 255, 255); - gDPSetRenderMode(this->unk_148++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); - gSPDisplayList(this->unk_148++, gSongOfTimeClockDL); + gSPMatrix(this->gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(this->gfx++, 0, 0xFF, 28, 28, 28, 255); + gDPSetEnvColor(this->gfx++, 255, 255, 255, 255); + gDPSetRenderMode(this->gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); + gSPDisplayList(this->gfx++, gSongOfTimeClockDL); - phi_f24 -= this->unk_14C; - phi_s2 += this->unk_27E; + clockPos.y -= this->speed; + angle += this->clockRingRotZ; } - POLY_OPA_DISP = this->unk_148; + POLY_OPA_DISP = this->gfx; - for (i = 0; i < ARRAY_COUNT(D_80A94910); i++) { - if (D_80A94910[i].unk_04 > 0.0f) { - D_80A94910[i].unk_14(this, play, &D_80A94910[i]); + for (i = 0; i < ARRAY_COUNT(sSoTCsAmmoDrops); i++) { + if (sSoTCsAmmoDrops[i].scale > 0.0f) { + sSoTCsAmmoDrops[i].draw(this, play, &sSoTCsAmmoDrops[i]); } } CLOSE_DISPS(play->state.gfxCtx); } -void func_80A9369C(Actor* thisx, PlayState* play2) { - EnTest6* this = THIS; - PlayState* play = play2; - f32 temp_f20; - f32 temp_f22; - f32 phi_f26; - s16 phi_s2; - s16 sp78; +/** + * Draws clocks in a ring that spins around player + */ +void EnTest6_DrawDoubleSoTCutscene(EnTest6* this, PlayState* play) { + s32 pad1[2]; + Vec3f clockPos; + s16 clockRotX; + s16 clockNormalAngle; s32 i; Player* player = GET_PLAYER(play); - s32 pad; - - if (this) {} + s32 pad2; OPEN_DISPS(play->state.gfxCtx); - this->unk_148 = POLY_OPA_DISP; - this->unk_27C += (s16)this->unk_154; - this->unk_27E = this->unk_27C * 2; - sp78 = (play->state.frames & 0x3C) * 1024; - phi_s2 = this->unk_27C + 0x4000; + this->gfx = POLY_OPA_DISP; + this->clockAngle += (s16)this->clockSpeed; + this->clockRingRotZ = this->clockAngle * 2; + // The `& 0x3C` ensures the clock only turns once every 4 frames. + // Each turn rotates the clock 22.5 degrees (0x10000 / 64 * 4) + // clockNormalAngle = (play->state.frames & 0x3C) * ((0x10000 / 64 * 4) / 4); + clockNormalAngle = (play->state.frames & 0x3C) * (DEG_TO_BINANG(22.5f) / 4); + clockRotX = this->clockAngle + 0x4000; + + // All cases have the exact same code switch (player->transformation) { - default: - phi_f26 = player->actor.world.pos.y + 40.0f; - break; - case PLAYER_FORM_DEKU: - phi_f26 = player->actor.world.pos.y + 40.0f; + clockPos.x = player->actor.world.pos.y + 40.0f; break; case PLAYER_FORM_GORON: - phi_f26 = player->actor.world.pos.y + 40.0f; + clockPos.x = player->actor.world.pos.y + 40.0f; break; case PLAYER_FORM_ZORA: - phi_f26 = player->actor.world.pos.y + 40.0f; + clockPos.x = player->actor.world.pos.y + 40.0f; break; case PLAYER_FORM_FIERCE_DEITY: - phi_f26 = player->actor.world.pos.y + 40.0f; + clockPos.x = player->actor.world.pos.y + 40.0f; + break; + + default: + clockPos.x = player->actor.world.pos.y + 40.0f; break; } - for (i = 0; i < 51; i++) { - temp_f20 = Math_CosS(phi_s2) * this->unk_150; - temp_f22 = Math_SinS(phi_s2) * this->unk_150; - Matrix_RotateZS(this->unk_27E, MTXMODE_NEW); - Matrix_Translate(phi_f26, temp_f20, temp_f22, MTXMODE_APPLY); + // Draw clocks + for (i = 0; i < SOTCS_DOUBLE_NUM_CLOCKS; i++) { + clockPos.y = Math_CosS(clockRotX) * this->clockDist; + clockPos.z = Math_SinS(clockRotX) * this->clockDist; + // Rotate the entire clock ring + Matrix_RotateZS(this->clockRingRotZ, MTXMODE_NEW); + + Matrix_Translate(clockPos.x, clockPos.y, clockPos.z, MTXMODE_APPLY); Matrix_Scale(0.85f, 0.85f, 0.85f, MTXMODE_APPLY); - Matrix_RotateXS(phi_s2, MTXMODE_APPLY); - Matrix_RotateZS(sp78, MTXMODE_APPLY); + // Orient the clock so the plane it's drawn on also passes through player + Matrix_RotateXS(clockRotX, MTXMODE_APPLY); + // Rotate around the normal of the plane, so the clock plane does not change, + // the drawn shape is spun internally + Matrix_RotateZS(clockNormalAngle, MTXMODE_APPLY); - gSPMatrix(this->unk_148++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(this->unk_148++, 0, 0xFF, this->unk_280, this->unk_280, this->unk_280, 255); - gDPSetEnvColor(this->unk_148++, 235, 238, 235, 255); - gDPSetRenderMode(this->unk_148++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); - gSPDisplayList(this->unk_148++, gSongOfTimeClockDL); + gSPMatrix(this->gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(this->gfx++, 0, 0xFF, this->clockColorGray, this->clockColorGray, this->clockColorGray, 255); + gDPSetEnvColor(this->gfx++, 235, 238, 235, 255); + gDPSetRenderMode(this->gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2); + gSPDisplayList(this->gfx++, gSongOfTimeClockDL); - phi_s2 += 0x505; + clockRotX += 0x10000 / SOTCS_DOUBLE_NUM_CLOCKS; } Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f, player->actor.world.pos.z); Lights_PointSetColorAndRadius(&this->lights[0].info, 100, 250, 100, 200); - POLY_OPA_DISP = this->unk_148; + POLY_OPA_DISP = this->gfx; CLOSE_DISPS(play->state.gfxCtx); } -void func_80A939E8(EnTest6* this, PlayState* play2) { +/** + * Draws clocks flat on the ground. + * Also draws black particles that raise or fall to indicate if time is speeding up or slowing down + */ +void EnTest6_DrawInvertedSoTCutscene(EnTest6* this, PlayState* play2) { PlayState* play = play2; Player* player = GET_PLAYER(play); - f32 temp_f20; + f32 flashScale; s32 i; OPEN_DISPS(play->state.gfxCtx); switch (this->cueId) { - case 91: - case 93: + case SOTCS_CUEID_INV_SETUP_CLOCKS: + case SOTCS_CUEID_INV_UNUSED: Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f, player->actor.world.pos.z); - Lights_PointSetColorAndRadius(&this->lights[0].info, 245, 245, 200, this->unk_282); + Lights_PointSetColorAndRadius(&this->lights[0].info, 245, 245, 200, this->alpha); break; - case 95: - this->unk_148 = POLY_XLU_DISP; + case SOTCS_CUEID_INV_CLOCKS: + this->gfx = POLY_XLU_DISP; - for (i = 0; i < ARRAY_COUNT(this->unk_20C); i++) { - Matrix_Translate(this->unk_20C[i].x, this->unk_20C[i].y, this->unk_20C[i].z, MTXMODE_NEW); + // Draw clocks + for (i = 0; i < ARRAY_COUNT(this->invSoTClockPos); i++) { + Matrix_Translate(this->invSoTClockPos[i].x, this->invSoTClockPos[i].y, this->invSoTClockPos[i].z, + MTXMODE_NEW); Matrix_Scale(0.3f, 0.3f, 0.3f, MTXMODE_APPLY); Matrix_RotateXS(-0x4000, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_278, MTXMODE_APPLY); + Matrix_RotateZS(this->invSoTClockYaw, MTXMODE_APPLY); - gSPMatrix(this->unk_148++, Matrix_NewMtx(play->state.gfxCtx), - G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); - gDPSetPrimColor(this->unk_148++, 0, 0xFF, 28, 28, 28, 255); - gDPSetEnvColor(this->unk_148++, 245, 245, 200, this->unk_282); - gDPSetRenderMode(this->unk_148++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); - gSPDisplayList(this->unk_148++, gSongOfTimeClockDL); + gSPMatrix(this->gfx++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); + gDPSetPrimColor(this->gfx++, 0, 0xFF, 28, 28, 28, 255); + gDPSetEnvColor(this->gfx++, 245, 245, 200, this->alpha); + gDPSetRenderMode(this->gfx++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2); + gSPDisplayList(this->gfx++, gSongOfTimeClockDL); - POLY_XLU_DISP = this->unk_148; + POLY_XLU_DISP = this->gfx; } - if (this->unk_254 != NULL) { - for (i = 0; i < ARRAY_COUNT(this->unk_254[0]); i++) { - temp_f20 = Rand_ZeroOne() * 0.0025f; - Matrix_Translate((*this->unk_254)[i].x, (*this->unk_254)[i].y, (*this->unk_254)[i].z, MTXMODE_NEW); - Matrix_Scale(temp_f20, temp_f20, temp_f20, MTXMODE_APPLY); + // Draw black particles + if (this->invSoTParticles != NULL) { + for (i = 0; i < SOTCS_NUM_PARTICLES; i++) { + flashScale = Rand_ZeroOne() * 0.0025f; + Matrix_Translate((*this->invSoTParticles)[i].x, (*this->invSoTParticles)[i].y, + (*this->invSoTParticles)[i].z, MTXMODE_NEW); + Matrix_Scale(flashScale, flashScale, flashScale, MTXMODE_APPLY); - gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 128, 128, 128, this->unk_282 >> 1); - gDPSetEnvColor(POLY_XLU_DISP++, 230, 230, 180, this->unk_282); + gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, 128, 128, 128, this->alpha >> 1); + gDPSetEnvColor(POLY_XLU_DISP++, 230, 230, 180, this->alpha); Gfx_SetupDL25_Xlu(play->state.gfxCtx); Matrix_Mult(&play->billboardMtxF, MTXMODE_APPLY); - Matrix_RotateZS(this->unk_278 + (i << 2), MTXMODE_APPLY); + Matrix_RotateZS(this->invSoTClockYaw + (i << 2), MTXMODE_APPLY); gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW); gSPDisplayList(POLY_XLU_DISP++, gEffFlash1DL); } } + Lights_PointSetPosition(&this->lights[0].info, player->actor.world.pos.x, player->actor.world.pos.y - 10.0f, player->actor.world.pos.z); - Lights_PointSetColorAndRadius(&this->lights[0].info, 250, 250, 100, this->unk_282); + Lights_PointSetColorAndRadius(&this->lights[0].info, 250, 250, 100, this->alpha); break; - case 90: - case 92: - case 94: - case 96: - case 97: - case 98: - case 99: + case SOTCS_CUEID_INV_INIT: + case SOTCS_CUEID_INV_END: break; } @@ -1326,18 +1423,21 @@ void func_80A939E8(EnTest6* this, PlayState* play2) { void EnTest6_Draw(Actor* thisx, PlayState* play) { EnTest6* this = THIS; - if (this->cueId != 0) { - switch (this->unk_276) { - case 1: - func_80A93298(this, play); + if (this->cueId != SOTCS_CUEID_NONE) { + switch (this->drawType) { + case SOTCS_DRAW_RESET_CYCLE_SOT: + EnTest6_DrawThreeDayResetSoTCutscene(this, play); break; - case 0: - func_80A9369C(thisx, play); + case SOTCS_DRAW_DOUBLE_SOT: + EnTest6_DrawDoubleSoTCutscene(this, play); break; - case 2: - func_80A939E8(this, play); + case SOTCS_DRAW_INVERTED_SOT: + EnTest6_DrawInvertedSoTCutscene(this, play); + break; + + default: break; } } diff --git a/src/overlays/actors/ovl_En_Test6/z_en_test6.h b/src/overlays/actors/ovl_En_Test6/z_en_test6.h index 2fe138ddb..726e23dc5 100644 --- a/src/overlays/actors/ovl_En_Test6/z_en_test6.h +++ b/src/overlays/actors/ovl_En_Test6/z_en_test6.h @@ -7,46 +7,71 @@ struct EnTest6; typedef void (*EnTest6ActionFunc)(struct EnTest6*, PlayState*); -#define ENTEST6_GET(thisx) ((thisx)->params) +#define SOTCS_GET_OCARINA_MODE(thisx) ((thisx)->params) -typedef enum { - /* 24 */ ENTEST6_24 = 24, - /* 25 */ ENTEST6_25, - /* 26 */ ENTEST6_26 -} EnTest6Param; +// CueIds are a mix of cues from external cutscenes and internal states + +typedef enum SoTCsCueId { + /* 0x00 */ SOTCS_CUEID_NONE, + /* 0x01 */ SOTCS_CUEID_DOUBLE_WAIT, + /* 0x02 */ SOTCS_CUEID_DOUBLE_INIT, + /* 0x03 */ SOTCS_CUEID_DOUBLE_CLOCKS_INWARD, + /* 0x04 */ SOTCS_CUEID_DOUBLE_CLOCKS_SPIN, + /* 0x05 */ SOTCS_CUEID_DOUBLE_CLOCKS_OUTWARD, + /* 0x06 */ SOTCS_CUEID_RESET_INIT, + /* 0x07 */ SOTCS_CUEID_RESET_CLOCKS_SLOW_DOWN, + /* 0x08 */ SOTCS_CUEID_RESET_CLOCKS_SPEED_UP, + /* 0x09 */ SOTCS_CUEID_DOUBLE_END, + /* 0x5A */ SOTCS_CUEID_INV_INIT = 90, + /* 0x5B */ SOTCS_CUEID_INV_SETUP_CLOCKS, + /* 0x5D */ SOTCS_CUEID_INV_UNUSED = 93, + /* 0x5F */ SOTCS_CUEID_INV_CLOCKS = 95, + /* 0x63 */ SOTCS_CUEID_INV_END = 99 +} SoTCsCueId; typedef struct { - /* 0x00 */ LightNode* node; - /* 0x04 */ LightInfo info; -} EnTest6Light; // size = 0x14 + /* 0x0 */ LightNode* node; + /* 0x4 */ LightInfo info; +} SoTCsLight; // size = 0x14 + +#define SOTCS_INV_NUM_CLOCKS 6 +#define SOTCS_DOUBLE_NUM_CLOCKS 51 +#define SOTCS_RESET_NUM_CLOCKS 128 +#define SOTCS_NUM_PARTICLES 64 typedef struct EnTest6 { /* 0x000 */ Actor actor; /* 0x144 */ EnTest6ActionFunc actionFunc; - /* 0x148 */ Gfx* unk_148; - /* 0x14C */ f32 unk_14C; - /* 0x150 */ f32 unk_150; - /* 0x154 */ f32 unk_154; - /* 0x158 */ f32 unk_158; - /* 0x15C */ f32 unk_15C; - /* 0x160 */ f32 unk_160; - /* 0x164 */ EnTest6Light lights[2]; - /* 0x18C */ CutsceneCamera unk_18C; - /* 0x20C */ Vec3f unk_20C[6]; - /* 0x254 */ Vec3f (*unk_254)[64]; + /* 0x148 */ Gfx* gfx; + /* 0x14C */ f32 speed; // Used for clock distance and lights + /* 0x150 */ f32 clockDist; // Radius from player + /* 0x154 */ f32 clockSpeed; + /* 0x158 */ union { + f32 clockRadialSpeed; // For double SoT cutscene + f32 clockAccel; // For reset SoT cutscene + }; + /* 0x15C */ f32 invSoTEnvLerp; + /* 0x160 */ f32 doubleSoTEnvLerp; + /* 0x164 */ SoTCsLight lights[2]; + /* 0x18C */ CutsceneCamera csCamInfo; + /* 0x20C */ Vec3f invSoTClockPos[SOTCS_INV_NUM_CLOCKS]; + /* 0x254 */ Vec3f (*invSoTParticles)[SOTCS_NUM_PARTICLES]; /* 0x258 */ Vec3f subCamAt; /* 0x264 */ Vec3f subCamEye; /* 0x270 */ f32 subCamFov; /* 0x274 */ s16 cueId; - /* 0x276 */ s16 unk_276; - /* 0x278 */ s16 unk_278; - /* 0x27A */ s16 unk_27A; - /* 0x27C */ s16 unk_27C; - /* 0x27E */ s16 unk_27E; - /* 0x280 */ s16 unk_280; - /* 0x282 */ s16 unk_282; + /* 0x276 */ s16 drawType; + /* 0x278 */ union { + s16 invSoTClockYaw; // For inverted SoT cutscene. + s16 counter; // For double/reset SoT cutscenes. Increments every frame, unused. + }; + /* 0x27A */ s16 timer; + /* 0x27C */ s16 clockAngle; + /* 0x27E */ s16 clockRingRotZ; // For double/reset SoT cutscenes + /* 0x280 */ s16 clockColorGray; // For double SoT cutscene + /* 0x282 */ s16 alpha; /* 0x284 */ s16 subCamId; - /* 0x286 */ s16 unk_286; + /* 0x286 */ s16 screenFillAlpha; // As a ratio, 20 is an alpha of 255 } EnTest6; // size = 0x288 #endif // Z_EN_TEST6_H 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 b6f11c2e2..fefe92672 100644 --- a/src/overlays/actors/ovl_En_Test7/z_en_test7.c +++ b/src/overlays/actors/ovl_En_Test7/z_en_test7.c @@ -443,13 +443,13 @@ void func_80AF19A8(EnTest7* this, PlayState* play) { } void func_80AF1A2C(EnTest7* this, PlayState* play) { - Color_RGB8 sp34 = { 64, 0, 0 }; - Color_RGB8 sp30 = { 220, 220, 255 }; - f32 sp2C = this->unk_1E54 / 10.0f; + Color_RGB8 fogColor = { 64, 0, 0 }; + Color_RGB8 ambientColor = { 220, 220, 255 }; + f32 envLerp = this->unk_1E54 / 10.0f; - func_800FD59C(play, &sp30, sp2C); - func_800FD654(play, &sp34, sp2C); - func_800FD698(play, 2000, 4000, sp2C); + Environment_LerpAmbientColor(play, &ambientColor, envLerp); + Environment_LerpFogColor(play, &fogColor, envLerp); + Environment_LerpFog(play, 2000, 4000, envLerp); if (this->unk_1E54 >= 10) { Camera* subCam = @@ -610,9 +610,9 @@ void func_80AF2030(EnTest7* this, PlayState* play) { void func_80AF21E8(EnTest7* this, PlayState* play) { s32 sp2C = this->unk_1E54 - 100; - f32 sp1C; - Color_RGB8 sp24 = { 64, 0, 0 }; - Color_RGB8 sp20 = { 220, 220, 255 }; + f32 envLerp; + Color_RGB8 fogColor = { 64, 0, 0 }; + Color_RGB8 ambientColor = { 220, 220, 255 }; if (R_PLAY_FILL_SCREEN_ON) { Audio_PlaySfxAtPos(&this->actor.projectedPos, NA_SE_PL_WARP_WING_VANISH); @@ -623,10 +623,10 @@ void func_80AF21E8(EnTest7* this, PlayState* play) { R_PLAY_FILL_SCREEN_ALPHA = 0; } - sp1C = 1.0f - (sp2C / 10.0f); - func_800FD59C(play, &sp20, sp1C); - func_800FD654(play, &sp24, sp1C); - func_800FD698(play, 2000, 4000, sp1C); + envLerp = 1.0f - (sp2C / 10.0f); + Environment_LerpAmbientColor(play, &ambientColor, envLerp); + Environment_LerpFogColor(play, &fogColor, envLerp); + Environment_LerpFog(play, 2000, 4000, envLerp); if (this->unk_1E54 >= 110) { func_80AF082C(this, func_80AF2318); 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 b756d0f92..a86359610 100644 --- a/src/overlays/actors/ovl_En_Twig/z_en_twig.c +++ b/src/overlays/actors/ovl_En_Twig/z_en_twig.c @@ -4,7 +4,6 @@ * Description: Beaver Race Ring */ -#include "prevent_bss_reordering.h" #include "z_en_twig.h" #include "objects/object_twig/object_twig.h" 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 06893449e..dd1fa60e1 100644 --- a/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c +++ b/src/overlays/actors/ovl_En_Warp_tag/z_en_warp_tag.c @@ -208,8 +208,8 @@ void EnWarpTag_RespawnPlayer(EnWarptag* this, PlayState* play) { // why are we getting player home rotation from the room data? doesnt player have home.rot.y? // especially because we are converting from deg to binang, but isnt home.rot.y already in binang?? - Play_SetRespawnData(&play->state, 0, entrance, play->setupEntranceList[playerSpawnIndex].room, - playerParams, &newRespawnPos, + Play_SetRespawnData(&play->state, RESPAWN_MODE_DOWN, entrance, + play->setupEntranceList[playerSpawnIndex].room, playerParams, &newRespawnPos, DEG_TO_BINANG_ALT((playerActorEntry->rot.y >> 7) & 0x1FF)); func_80169EFC(&play->state); 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 4710b8908..fb219bfee 100644 --- a/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c +++ b/src/overlays/actors/ovl_Obj_Nozoki/z_obj_nozoki.c @@ -4,7 +4,6 @@ * Description: Sakon's Hideout Objects (Sun's Mask, doors, etc) */ -#include "prevent_bss_reordering.h" #include "z_obj_nozoki.h" #include "objects/object_secom_obj/object_secom_obj.h" diff --git a/src/overlays/actors/ovl_player_actor/z_player.c b/src/overlays/actors/ovl_player_actor/z_player.c index 31d2113ea..c0e0e4a1c 100644 --- a/src/overlays/actors/ovl_player_actor/z_player.c +++ b/src/overlays/actors/ovl_player_actor/z_player.c @@ -466,12 +466,12 @@ typedef struct { } ExplosiveInfo; // size = 0x4 typedef struct { - /* 0x0 */ Color_RGB8 unk_0; - /* 0x3 */ Color_RGB8 unk_3; - /* 0x6 */ Color_RGB8 unk_6; - /* 0xA */ s16 unk_A; - /* 0xC */ s16 unk_C; -} struct_8082F02C_arg1; // size = 0xE + /* 0x0 */ Color_RGB8 ambientColor; + /* 0x3 */ Color_RGB8 diffuseColor; + /* 0x6 */ Color_RGB8 fogColor; + /* 0xA */ s16 fogNear; + /* 0xC */ s16 zFar; +} PlayerEnvLighting; // size = 0xE typedef struct GetItemEntry { /* 0x0 */ u8 itemId; @@ -2714,11 +2714,11 @@ PlayerAnimationHeader* func_8082EFE4(Player* this) { } } -void func_8082F02C(PlayState* play, struct_8082F02C_arg1* arg1, f32 arg2) { - func_800FD59C(play, &arg1->unk_0, arg2); - func_800FD5E0(play, &arg1->unk_3, arg2); - func_800FD654(play, &arg1->unk_6, arg2); - func_800FD698(play, arg1->unk_A, arg1->unk_C, arg2); +void Player_LerpEnvLighting(PlayState* play, PlayerEnvLighting* lighting, f32 lerp) { + Environment_LerpAmbientColor(play, &lighting->ambientColor, lerp); + Environment_LerpDiffuseColor(play, &lighting->diffuseColor, lerp); + Environment_LerpFogColor(play, &lighting->fogColor, lerp); + Environment_LerpFog(play, lighting->fogNear, lighting->zFar, lerp); } /** @@ -2786,8 +2786,12 @@ void func_8082F164(Player* this, u16 button) { } } -struct_8082F02C_arg1 D_8085C98C = { - { 0, 0, 0 }, { 255, 255, 155 }, { 20, 20, 50 }, 940, 5000, +PlayerEnvLighting sZoraBarrierEnvLighting = { + { 0, 0, 0 }, // ambientColor + { 255, 255, 155 }, // diffuseColor + { 20, 20, 50 }, // fogColor + 940, // fogNear + 5000, // zFar }; // Run Zora Barrier @@ -2822,7 +2826,7 @@ void func_8082F1AC(PlayState* play, Player* this) { sp46 = play->gameplayFrames * 7000; sp44 = play->gameplayFrames * 14000; - func_8082F02C(play, &D_8085C98C, this->unk_B62 / 255.0f); + Player_LerpEnvLighting(play, &sZoraBarrierEnvLighting, this->unk_B62 / 255.0f); sp34 = Math_SinS(sp44) * 40.0f; sp40 = Math_CosS(sp44) * 40.0f; diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt index fd08f2af8..ba8336dcd 100644 --- a/tools/disasm/functions.txt +++ b/tools/disasm/functions.txt @@ -1751,10 +1751,10 @@ 0x800FC64C:("Environment_DrawSandstorm",), 0x800FD2B4:("func_800FD2B4",), 0x800FD538:("func_800FD538",), - 0x800FD59C:("func_800FD59C",), - 0x800FD5E0:("func_800FD5E0",), - 0x800FD654:("func_800FD654",), - 0x800FD698:("func_800FD698",), + 0x800FD59C:("Environment_LerpAmbientColor",), + 0x800FD5E0:("Environment_LerpDiffuseColor",), + 0x800FD654:("Environment_LerpFogColor",), + 0x800FD698:("Environment_LerpFog",), 0x800FD720:("get_days_elapsed",), 0x800FD730:("reset_days_elapsed",), 0x800FD740:("get_current_day",), @@ -4308,7 +4308,7 @@ 0x8082EF54:("func_8082EF54",), 0x8082EF9C:("func_8082EF9C",), 0x8082EFE4:("func_8082EFE4",), - 0x8082F02C:("func_8082F02C",), + 0x8082F02C:("Player_LerpEnvLighting",), 0x8082F09C:("Player_ResetCylinder",), 0x8082F0E4:("Player_SetCylinderForAttack",), 0x8082F164:("func_8082F164",), @@ -11338,28 +11338,28 @@ 0x80A90468:("EnTest5_Destroy",), 0x80A90478:("EnTest5_HandleBottleAction",), 0x80A905A4:("EnTest5_Update",), - 0x80A90730:("func_80A90730",), + 0x80A90730:("EnTest6_SetupCutscene",), 0x80A90C08:("EnTest6_EnableMotionBlur",), 0x80A90C34:("EnTest6_DisableMotionBlur",), - 0x80A90C54:("func_80A90C54",), - 0x80A90D20:("func_80A90D20",), - 0x80A90D34:("func_80A90D34",), - 0x80A90FC0:("func_80A90FC0",), + 0x80A90C54:("EnTest6_EnableWhiteFillScreen",), + 0x80A90D20:("EnTest6_DisableWhiteFillScreen",), + 0x80A90D34:("EnTest6_DrawAmmoDropDefault",), + 0x80A90FC0:("EnTest6_DrawAmmoDropRupee",), 0x80A91324:("EnTest6_SetupAction",), 0x80A91330:("EnTest6_Init",), 0x80A9149C:("EnTest6_Destroy",), - 0x80A9156C:("func_80A9156C",), - 0x80A91690:("func_80A91690",), - 0x80A916F0:("func_80A916F0",), - 0x80A91760:("func_80A91760",), - 0x80A920C8:("func_80A920C8",), - 0x80A92118:("func_80A92118",), - 0x80A92188:("func_80A92188",), + 0x80A9156C:("EnTest6_StartCutscene",), + 0x80A91690:("EnTest6_SetupInvertedSoTCutscene",), + 0x80A916F0:("EnTest6_StopInvertedSoTCutscene",), + 0x80A91760:("EnTest6_InvertedSoTCutscene",), + 0x80A920C8:("EnTest6_SetupDoubleSoTCutscene",), + 0x80A92118:("EnTest6_StopDoubleSoTCutscene",), + 0x80A92188:("EnTest6_DoubleSoTCutscene",), 0x80A9292C:("EnTest6_Update",), - 0x80A92950:("func_80A92950",), - 0x80A93298:("func_80A93298",), - 0x80A9369C:("func_80A9369C",), - 0x80A939E8:("func_80A939E8",), + 0x80A92950:("EnTest6_SharedSoTCutscene",), + 0x80A93298:("EnTest6_DrawThreeDayResetSoTCutscene",), + 0x80A9369C:("EnTest6_DrawDoubleSoTCutscene",), + 0x80A939E8:("EnTest6_DrawInvertedSoTCutscene",), 0x80A93DE8:("EnTest6_Draw",), 0x80A94A30:("func_80A94A30",), 0x80A94A64:("func_80A94A64",), diff --git a/tools/disasm/variables.txt b/tools/disasm/variables.txt index 9e51ef3d6..31c7a2019 100644 --- a/tools/disasm/variables.txt +++ b/tools/disasm/variables.txt @@ -4949,7 +4949,7 @@ 0x8085C928:("D_8085C928","UNK_TYPE1","",0x14), 0x8085C93C:("D_8085C93C","UNK_TYPE1","",0x1), 0x8085C96C:("D_8085C96C","UNK_TYPE1","",0x1), - 0x8085C98C:("D_8085C98C","UNK_TYPE1","",0x1), + 0x8085C98C:("sZoraBarrierEnvLighting","UNK_TYPE1","",0x1), 0x8085C99C:("sItemActionParams","UNK_TYPE1","",0x1), 0x8085C9F0:("D_8085C9F0","UNK_PTR","",0x4), 0x8085CB3C:("D_8085CB3C","UNK_PTR","",0x4), @@ -12278,19 +12278,19 @@ 0x80A8FF6C:("D_80A8FF6C","f32","",0x4), 0x80A906E0:("En_Test5_InitVars","UNK_TYPE1","",0x1), 0x80A93E60:("En_Test6_InitVars","UNK_TYPE1","",0x1), - 0x80A93E80:("D_80A93E80","UNK_TYPE1","",0x1), - 0x80A9402C:("D_80A9402C","UNK_TYPE1","",0x1), - 0x80A94048:("D_80A94048","UNK_TYPE1","",0x1), - 0x80A9404C:("D_80A9404C","UNK_TYPE1","",0x1), - 0x80A94050:("D_80A94050","UNK_TYPE1","",0x1), - 0x80A94054:("D_80A94054","UNK_TYPE2","",0x2), - 0x80A94058:("D_80A94058","UNK_TYPE2","",0x2), + 0x80A93E80:("sDoubleSoTCsCamData","UNK_TYPE1","",0x1), + 0x80A9402C:("sSoTCsAmmoDropTextures","UNK_TYPE1","",0x1), + 0x80A94048:("sInvSoTCsFogColor","UNK_TYPE1","",0x1), + 0x80A9404C:("sInvSoTCsAmbientColor","UNK_TYPE1","",0x1), + 0x80A94050:("sInvSoTCsDiffuseColor","UNK_TYPE1","",0x1), + 0x80A94054:("sInvSoTCsFogNear","UNK_TYPE2","",0x2), + 0x80A94058:("sInvSoTCsZFar","UNK_TYPE2","",0x2), 0x80A9405C:("D_80A9405C","UNK_TYPE1","",0x1), - 0x80A94068:("D_80A94068","UNK_TYPE1","",0x1), - 0x80A9406C:("D_80A9406C","UNK_TYPE1","",0x1), - 0x80A94070:("D_80A94070","UNK_TYPE1","",0x1), - 0x80A94074:("D_80A94074","UNK_TYPE2","",0x2), - 0x80A94078:("D_80A94078","UNK_TYPE2","",0x2), + 0x80A94068:("sDoubleSoTCsFogColor","UNK_TYPE1","",0x1), + 0x80A9406C:("sDoubleSoTCsAmbientColor","UNK_TYPE1","",0x1), + 0x80A94070:("sDoubleSoTCsDiffuseColor","UNK_TYPE1","",0x1), + 0x80A94074:("sDoubleSoTCsFogNear","UNK_TYPE2","",0x2), + 0x80A94078:("sDoubleSoTCsZFar","UNK_TYPE2","",0x2), 0x80A94080:("D_80A94080","f32","",0x4), 0x80A94084:("D_80A94084","f32","",0x4), 0x80A94088:("D_80A94088","f32","",0x4), @@ -12321,7 +12321,7 @@ 0x80A94338:("jtbl_80A94338","UNK_PTR","",0x4), 0x80A94360:("D_80A94360","f32","",0x4), 0x80A94364:("D_80A94364","f32","",0x4), - 0x80A94910:("D_80A94910","UNK_TYPE4","",0x4), + 0x80A94910:("sSoTCsAmmoDrops","UNK_TYPE4","",0x4), 0x80A99010:("D_80A99010","UNK_TYPE4","",0x4), 0x80A990F0:("En_Az_InitVars","UNK_TYPE1","",0x1), 0x80A99110:("D_80A99110","UNK_TYPE1","",0x1), diff --git a/tools/sizes/code_functions.csv b/tools/sizes/code_functions.csv index 80d36de95..42d1e5f0b 100644 --- a/tools/sizes/code_functions.csv +++ b/tools/sizes/code_functions.csv @@ -1265,10 +1265,10 @@ asm/non_matchings/code/z_kankyo/Environment_FillScreen.s,Environment_FillScreen, 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/func_800FD59C.s,func_800FD59C,0x800FD59C,0x11 -asm/non_matchings/code/z_kankyo/func_800FD5E0.s,func_800FD5E0,0x800FD5E0,0x1D -asm/non_matchings/code/z_kankyo/func_800FD654.s,func_800FD654,0x800FD654,0x11 -asm/non_matchings/code/z_kankyo/func_800FD698.s,func_800FD698,0x800FD698,0x22 +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 From a5cc630cef67a9a2e136aaf1c6b8150f812d54eb Mon Sep 17 00:00:00 2001 From: Anghelo Carvajal Date: Sun, 18 Jun 2023 18:13:57 -0400 Subject: [PATCH 10/82] Add yar (Yaz0 ARchives) support to build system (#1255) * 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 * Update tools/buildtools/makeyar.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update tools/buildtools/makeyar.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update tools/buildtools/makeyar.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> * Update tools/buildtools/makeyar.c Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --------- Co-authored-by: engineer124 <47598039+engineer124@users.noreply.github.com> --- Makefile | 13 +- assets/xml/archives/icon_item_24_static.xml | 18 ++ assets/xml/archives/icon_item_static.xml | 194 +++++++++++++ assets/xml/archives/item_name_static.xml | 124 ++++++++ assets/xml/archives/map_grand_static.xml | 102 +++++++ assets/xml/archives/map_i_static.xml | 62 ++++ assets/xml/archives/map_name_static.xml | 20 ++ assets/xml/archives/schedule_dma_static.xml | 28 ++ include/segment_symbols.h | 12 +- .../tables/bombers_notebook/person_table.h | 40 +-- spec | 38 +-- src/code/code_8012EC80.c | 265 ++++++++--------- src/code/z_play_hireso.c | 34 +-- .../ovl_kaleido_scope/z_kaleido_scope_NES.c | 20 +- tools/buildtools/.gitignore | 1 + tools/buildtools/Makefile | 15 +- tools/buildtools/elf32.c | 4 + tools/buildtools/elf32.h | 18 ++ tools/buildtools/makeyar.c | 267 ++++++++++++++++++ tools/buildtools/yaz0.h | 2 - tools/decompress_yars.py | 115 ++++++++ tools/disasm/dma_filenames.txt | 12 +- tools/extract_baserom.py | 12 +- tools/filelists/mm.us.rev1/all.csv | 12 +- tools/filelists/mm.us.rev1/archives.csv | 6 +- tools/filelists/mm.us.rev1/deleted.csv | 6 +- tools/progress.py | 10 +- undefined_syms.txt | 26 -- 28 files changed, 1196 insertions(+), 280 deletions(-) create mode 100644 assets/xml/archives/icon_item_24_static.xml create mode 100644 assets/xml/archives/icon_item_static.xml create mode 100644 assets/xml/archives/item_name_static.xml create mode 100644 assets/xml/archives/map_grand_static.xml create mode 100644 assets/xml/archives/map_i_static.xml create mode 100644 assets/xml/archives/map_name_static.xml create mode 100644 assets/xml/archives/schedule_dma_static.xml create mode 100644 tools/buildtools/makeyar.c create mode 100755 tools/decompress_yars.py diff --git a/Makefile b/Makefile index 89eeb21d2..6394f8daa 100644 --- a/Makefile +++ b/Makefile @@ -117,6 +117,7 @@ MKLDSCRIPT := tools/buildtools/mkldscript YAZ0 := tools/buildtools/yaz0 ZAPD := tools/ZAPD/ZAPD.out FADO := tools/fado/fado.elf +MAKEYAR := tools/buildtools/makeyar OPTFLAGS := -O2 -g3 ASFLAGS := -march=vr4300 -32 -Iinclude @@ -184,9 +185,11 @@ C_FILES := $(foreach dir,$(SRC_DIRS) $(ASSET_BIN_DIRS_C_FILES),$(wildcard S_FILES := $(shell grep -F "build/asm" spec | sed 's/.*build\/// ; s/\.o\".*/.s/') \ $(shell grep -F "build/data" spec | sed 's/.*build\/// ; s/\.o\".*/.s/') BASEROM_FILES := $(shell grep -F "build/baserom" spec | sed 's/.*build\/// ; s/\.o\".*//') +ARCHIVES_O := $(shell grep -F ".yar.o" spec | sed 's/.*include "// ; s/\.o\".*/.o/') O_FILES := $(foreach f,$(S_FILES:.s=.o),build/$f) \ $(foreach f,$(C_FILES:.c=.o),build/$f) \ - $(foreach f,$(BASEROM_FILES),build/$f.o) + $(foreach f,$(BASEROM_FILES),build/$f.o) \ + $(ARCHIVES_O) OVL_RELOC_FILES := $(shell $(CPP) $(CPPFLAGS) $(SPEC) | grep -o '[^"]*_reloc.o' ) @@ -303,6 +306,7 @@ setup: $(MAKE) -C tools python3 tools/fixbaserom.py python3 tools/extract_baserom.py + python3 tools/decompress_yars.py assets: python3 extract_assets.py -j $(N_THREADS) @@ -344,6 +348,10 @@ build/assets/%.o: assets/%.c $(OBJCOPY_BIN) $(RM_MDEBUG) +build/assets/archives/%.yar.o: build/assets/archives/%.o + $(MAKEYAR) $< $(@:.yar.o=.yar.bin) $(@:.yar.o=.symbols.o) + $(OBJCOPY) -I binary -O elf32-big $(@:.yar.o=.yar.bin) $@ + build/baserom/%.o: baserom/% $(OBJCOPY) -I binary -O elf32-big $< $@ @@ -392,3 +400,6 @@ build/assets/%.jpg.inc.c: assets/%.jpg $(ZAPD) bren -eh -i $< -o $@ -include $(DEP_FILES) + +# Print target for debugging +print-% : ; $(info $* is a $(flavor $*) variable set to [$($*)]) @true diff --git a/assets/xml/archives/icon_item_24_static.xml b/assets/xml/archives/icon_item_24_static.xml new file mode 100644 index 000000000..7b3b338a3 --- /dev/null +++ b/assets/xml/archives/icon_item_24_static.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/archives/icon_item_static.xml b/assets/xml/archives/icon_item_static.xml new file mode 100644 index 000000000..3084ab2a5 --- /dev/null +++ b/assets/xml/archives/icon_item_static.xml @@ -0,0 +1,194 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/archives/item_name_static.xml b/assets/xml/archives/item_name_static.xml new file mode 100644 index 000000000..280d8862a --- /dev/null +++ b/assets/xml/archives/item_name_static.xml @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/archives/map_grand_static.xml b/assets/xml/archives/map_grand_static.xml new file mode 100644 index 000000000..d5d80bdd6 --- /dev/null +++ b/assets/xml/archives/map_grand_static.xml @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/archives/map_i_static.xml b/assets/xml/archives/map_i_static.xml new file mode 100644 index 000000000..dbb64185d --- /dev/null +++ b/assets/xml/archives/map_i_static.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/archives/map_name_static.xml b/assets/xml/archives/map_name_static.xml new file mode 100644 index 000000000..980eb890e --- /dev/null +++ b/assets/xml/archives/map_name_static.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/assets/xml/archives/schedule_dma_static.xml b/assets/xml/archives/schedule_dma_static.xml new file mode 100644 index 000000000..f3b7ba834 --- /dev/null +++ b/assets/xml/archives/schedule_dma_static.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/include/segment_symbols.h b/include/segment_symbols.h index d7c959d23..214970933 100644 --- a/include/segment_symbols.h +++ b/include/segment_symbols.h @@ -52,12 +52,12 @@ DECLARE_ROM_SEGMENT(map_i_static) DECLARE_ROM_SEGMENT(map_grand_static) DECLARE_ROM_SEGMENT(item_name_static) DECLARE_ROM_SEGMENT(map_name_static) -DECLARE_ROM_SEGMENT(icon_item_static_test) -DECLARE_ROM_SEGMENT(icon_item_static_old) -DECLARE_ROM_SEGMENT(icon_item_24_static_test) -DECLARE_ROM_SEGMENT(icon_item_24_static_old) -DECLARE_ROM_SEGMENT(schedule_dma_static_test) -DECLARE_ROM_SEGMENT(schedule_dma_static_old) +DECLARE_ROM_SEGMENT(icon_item_static_yar) +DECLARE_ROM_SEGMENT(icon_item_static_syms) +DECLARE_ROM_SEGMENT(icon_item_24_static_yar) +DECLARE_ROM_SEGMENT(icon_item_24_static_syms) +DECLARE_ROM_SEGMENT(schedule_dma_static_yar) +DECLARE_ROM_SEGMENT(schedule_dma_static_syms) DECLARE_ROM_SEGMENT(schedule_static) DECLARE_ROM_SEGMENT(story_static) DECLARE_ROM_SEGMENT(do_action_static) diff --git a/include/tables/bombers_notebook/person_table.h b/include/tables/bombers_notebook/person_table.h index 71771956b..e6ef49b27 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, D_07009800, 0x21DD, BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS, 0x2147, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMBERS) -/* 0x01 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJU, D_07000000, 0x21CA, BOMBERS_NOTEBOOK_EVENT_MET_ANJU, 0x2134, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJU) -/* 0x02 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAFEI, D_07000800, 0x21CB, BOMBERS_NOTEBOOK_EVENT_MET_KAFEI, 0x2135, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAFEI) -/* 0x03 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CURIOSITY_SHOP_MAN, D_07001000, 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, D_07001800, 0x21CD, BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY, 0x2137, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_BOMB_SHOP_LADY) -/* 0x05 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROMANI, D_07002000, 0x21CE, BOMBERS_NOTEBOOK_EVENT_MET_ROMANI, 0x2138, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROMANI) -/* 0x06 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_CREMIA, D_07002800, 0x21CF, BOMBERS_NOTEBOOK_EVENT_MET_CREMIA, 0x2139, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_CREMIA) -/* 0x07 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MAYOR_DOTOUR, D_07003000, 0x21D0, BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR, 0x213A, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MAYOR_DOTOUR) -/* 0x08 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_MADAME_AROMA, D_07003800, 0x21D1, BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA, 0x213B, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_MADAME_AROMA) -/* 0x09 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOTO, D_07004000, 0x21D2, BOMBERS_NOTEBOOK_EVENT_MET_TOTO, 0x213C, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOTO) -/* 0x0A */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN, D_07004800, 0x21D3, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN, 0x213D, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN) -/* 0x0B */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_POSTMAN, D_07005000, 0x21D4, BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN, 0x213E, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_POSTMAN) -/* 0x0C */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ROSA_SISTERS, D_07005800, 0x21D5, BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS, 0x213F, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ROSA_SISTERS) -/* 0x0D */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_TOILET_HAND, D_07006000, 0x21D6, BOMBERS_NOTEBOOK_EVENT_MET_TOLIET_HAND, 0x2140, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_TOILET_HAND) -/* 0x0E */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_ANJUS_GRANDMOTHER, D_07006800, 0x21D7, BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER, 0x2141, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_ANJUS_GRANDMOTHER) -/* 0x0F */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_KAMARO, D_07007000, 0x21D8, BOMBERS_NOTEBOOK_EVENT_MET_KAMARO, 0x2142, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_KAMARO) -/* 0x10 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GROG, D_07007800, 0x21D9, BOMBERS_NOTEBOOK_EVENT_MET_GROG, 0x2143, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GROG) -/* 0x11 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GORMAN_BROTHERS, D_07008000, 0x21DA, BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS, 0x2144, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GORMAN_BROTHERS) -/* 0x12 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_SHIRO, D_07008800, 0x21DB, BOMBERS_NOTEBOOK_EVENT_MET_SHIRO, 0x2145, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_SHIRO) -/* 0x13 */ DEFINE_PERSON(BOMBERS_NOTEBOOK_PERSON_GURU_GURU, D_07009000, 0x21DC, BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU, 0x2146, WEEKEVENTREG_BOMBERS_NOTEBOOK_EVENT_MET_GURU_GURU) +/* 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) diff --git a/spec b/spec index a7b3ee5dc..8d23d42dd 100644 --- a/spec +++ b/spec @@ -276,15 +276,17 @@ beginseg endseg beginseg - name "icon_item_static_old" + name "icon_item_static_syms" romalign 0x1000 - include "build/baserom/icon_item_static_old.o" + include "build/assets/archives/icon_item_static/icon_item_static_yar.symbols.o" + number 8 endseg beginseg - name "icon_item_24_static_old" + name "icon_item_24_static_syms" romalign 0x1000 - include "build/baserom/icon_item_24_static_old.o" + include "build/assets/archives/icon_item_24_static/icon_item_24_static_yar.symbols.o" + number 9 endseg beginseg @@ -329,43 +331,47 @@ endseg beginseg name "map_i_static" - include "build/baserom/map_i_static.o" + include "build/assets/archives/map_i_static/map_i_static.yar.o" endseg beginseg name "map_grand_static" - include "build/baserom/map_grand_static.o" + include "build/assets/archives/map_grand_static/map_grand_static.yar.o" endseg beginseg name "item_name_static" - include "build/baserom/item_name_static.o" + include "build/assets/archives/item_name_static/item_name_static.yar.o" endseg beginseg name "map_name_static" - include "build/baserom/map_name_static.o" + include "build/assets/archives/map_name_static/map_name_static.yar.o" endseg beginseg - name "icon_item_static_test" - include "build/baserom/icon_item_static_test.o" + name "icon_item_static_yar" + include "build/assets/archives/icon_item_static/icon_item_static_yar.yar.o" + number 8 endseg beginseg - name "icon_item_24_static_test" - include "build/baserom/icon_item_24_static_test.o" + name "icon_item_24_static_yar" + include "build/assets/archives/icon_item_24_static/icon_item_24_static_yar.yar.o" + number 9 endseg beginseg - name "schedule_dma_static_old" - include "build/baserom/schedule_dma_static_old.o" + name "schedule_dma_static_syms" + include "build/assets/archives/schedule_dma_static/schedule_dma_static_yar.symbols.o" + number 7 endseg beginseg - name "schedule_dma_static_test" + name "schedule_dma_static_yar" increment 0x1000 - include "build/baserom/schedule_dma_static_test.o" + include "build/assets/archives/schedule_dma_static/schedule_dma_static_yar.yar.o" + number 7 endseg beginseg diff --git a/src/code/code_8012EC80.c b/src/code/code_8012EC80.c index e10290356..1fbce712d 100644 --- a/src/code/code_8012EC80.c +++ b/src/code/code_8012EC80.c @@ -1,5 +1,7 @@ #include "global.h" #include "interface/parameter_static/parameter_static.h" +#include "archives/icon_item_static/icon_item_static_yar.h" +#include "archives/icon_item_24_static/icon_item_24_static_yar.h" // Bit Flag array in which gBitFlags[n] is (1 << n) u32 gBitFlags[] = { @@ -95,139 +97,138 @@ u32 gGsFlagsShift[] = { 24, }; -// TODO: use symbols for these icon textures once textures are properly in C TexturePtr gItemIcons[] = { - 0x08000000, // ITEM_OCARINA - 0x08001000, // ITEM_BOW - 0x08002000, // ITEM_ARROW_FIRE - 0x08003000, // ITEM_ARROW_ICE - 0x08004000, // ITEM_ARROW_LIGHT - 0x08005000, // ITEM_OCARINA_FAIRY - 0x08006000, // ITEM_BOMB - 0x08007000, // ITEM_BOMBCHU - 0x08008000, // ITEM_STICK - 0x08009000, // ITEM_NUT - 0x0800A000, // ITEM_MAGIC_BEANS - 0x0800B000, // ITEM_SLINGSHOT - 0x0800C000, // ITEM_POWDER_KEG - 0x0800D000, // ITEM_PICTO_BOX - 0x0800E000, // ITEM_LENS - 0x0800F000, // ITEM_HOOKSHOT - 0x08010000, // ITEM_SWORD_GREAT_FAIRY - 0x08011000, // ITEM_LONGSHOT - 0x08012000, // ITEM_BOTTLE - 0x08013000, // ITEM_POTION_RED - 0x08014000, // ITEM_POTION_GREEN - 0x08015000, // ITEM_POTION_BLUE - 0x08016000, // ITEM_FAIRY - 0x08017000, // ITEM_DEKU_PRINCESS - 0x08018000, // ITEM_MILK_BOTTLE - 0x08019000, // ITEM_MILK_HALF - 0x0801A000, // ITEM_FISH - 0x0801B000, // ITEM_BUG - 0x0801C000, // ITEM_BLUE_FIRE - 0x0801D000, // ITEM_POE - 0x0801E000, // ITEM_BIG_POE - 0x0801F000, // ITEM_SPRING_WATER - 0x08020000, // ITEM_HOT_SPRING_WATER - 0x08021000, // ITEM_ZORA_EGG - 0x08022000, // ITEM_GOLD_DUST - 0x08023000, // ITEM_MUSHROOM - 0x08024000, // ITEM_SEAHORSE - 0x08025000, // ITEM_CHATEAU - 0x08026000, // ITEM_HYLIAN_LOACH - 0x08027000, // ITEM_OBABA_DRINK - 0x08028000, // ITEM_MOON_TEAR - 0x08029000, // ITEM_DEED_LAND - 0x0802A000, // ITEM_DEED_SWAMP - 0x0802B000, // ITEM_DEED_MOUNTAIN - 0x0802C000, // ITEM_DEED_OCEAN - 0x0802D000, // ITEM_ROOM_KEY - 0x0802E000, // ITEM_LETTER_MAMA - 0x0802F000, // ITEM_LETTER_TO_KAFEI - 0x08030000, // ITEM_PENDANT_OF_MEMORIES - 0x08031000, // ITEM_TINGLE_MAP - 0x08032000, // ITEM_MASK_DEKU - 0x08033000, // ITEM_MASK_GORON - 0x08034000, // ITEM_MASK_ZORA - 0x08035000, // ITEM_MASK_FIERCE_DEITY - 0x08036000, // ITEM_MASK_TRUTH - 0x08037000, // ITEM_MASK_KAFEIS_MASK - 0x08038000, // ITEM_MASK_ALL_NIGHT - 0x08039000, // ITEM_MASK_BUNNY - 0x0803A000, // ITEM_MASK_KEATON - 0x0803B000, // ITEM_MASK_GARO - 0x0803C000, // ITEM_MASK_ROMANI - 0x0803D000, // ITEM_MASK_CIRCUS_LEADER - 0x0803E000, // ITEM_MASK_POSTMAN - 0x0803F000, // ITEM_MASK_COUPLE - 0x08040000, // ITEM_MASK_GREAT_FAIRY - 0x08041000, // ITEM_MASK_GIBDO - 0x08042000, // ITEM_MASK_DON_GERO - 0x08043000, // ITEM_MASK_KAMARO - 0x08044000, // ITEM_MASK_CAPTAIN - 0x08045000, // ITEM_MASK_STONE - 0x08046000, // ITEM_MASK_BREMEN - 0x08047000, // ITEM_MASK_BLAST - 0x08048000, // ITEM_MASK_SCENTS - 0x08049000, // ITEM_MASK_GIANT - 0x0804A000, // ITEM_BOW_ARROW_FIRE - 0x0804B000, // ITEM_BOW_ARROW_ICE - 0x0804C000, // ITEM_BOW_ARROW_LIGHT - 0x0804D000, // ITEM_SWORD_KOKIRI - 0x0804E000, // ITEM_SWORD_RAZOR - 0x0804F000, // ITEM_SWORD_GILDED - 0x08050000, // ITEM_SWORD_DEITY - 0x08051000, // ITEM_SHIELD_HERO - 0x08052000, // ITEM_SHIELD_MIRROR - 0x08053000, // ITEM_QUIVER_30 - 0x08054000, // ITEM_QUIVER_40 - 0x08055000, // ITEM_QUIVER_50 - 0x08056000, // ITEM_BOMB_BAG_20 - 0x08057000, // ITEM_BOMB_BAG_30 - 0x08058000, // ITEM_BOMB_BAG_40 - 0x08059000, // ITEM_WALLET_DEFAULT - 0x0805A000, // ITEM_WALLET_ADULT - 0x0805B000, // ITEM_WALLET_GIANT - 0x0805C000, // ITEM_FISHING_ROD - 0x0805D000, // ITEM_REMAINS_ODOLWA - 0x0805E000, // ITEM_REMAINS_GOHT - 0x0805F000, // ITEM_REMAINS_GYORG - 0x08060000, // ITEM_REMAINS_TWINMOLD - 0x08062000, // ITEM_SONG_SONATA - 0x08062000, // ITEM_SONG_LULLABY - 0x08062000, // ITEM_SONG_NOVA - 0x08062000, // ITEM_SONG_ELEGY - 0x08062000, // ITEM_SONG_OATH - 0x08062000, // ITEM_SONG_SARIA - 0x08062000, // ITEM_SONG_TIME - 0x08062000, // ITEM_SONG_HEALING - 0x08062000, // ITEM_SONG_EPONA - 0x08062000, // ITEM_SONG_SOARING - 0x08062000, // ITEM_SONG_STORMS - 0x08062000, // ITEM_SONG_SUN - 0x08061000, // ITEM_BOMBERS_NOTEBOOK - 0x09000000, // ITEM_SKULL_TOKEN - 0x09000900, // ITEM_HEART_CONTAINER - 0x09001200, // ITEM_HEART_PIECE - 0x08062000, // - 0x08062000, // - 0x08062000, // ITEM_SONG_LULLABY_INTRO - 0x09003600, // ITEM_KEY_BOSS - 0x09004800, // ITEM_COMPASS - 0x09003F00, // ITEM_DUNGEON_MAP - 0x09005100, // ITEM_STRAY_FAIRIES - 0x09005A00, // ITEM_KEY_SMALL - 0x09006300, // ITEM_MAGIC_SMALL - 0x09006C00, // ITEM_MAGIC_LARGE - 0x08062180, // ITEM_HEART_PIECE_2 - 0x08062A80, // ITEM_INVALID_1 - 0x08063380, // ITEM_INVALID_2 - gOcarinaCUpTex, // ITEM_INVALID_3 - gOcarinaCDownTex, // ITEM_INVALID_4 - gOcarinaCLeftTex, // ITEM_INVALID_5 - gOcarinaCRightTex, // ITEM_INVALID_6 - gOcarinaATex, // ITEM_INVALID_7 + 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 }; // Used to map item IDs to inventory slots diff --git a/src/code/z_play_hireso.c b/src/code/z_play_hireso.c index b995028ca..24dcaca55 100644 --- a/src/code/z_play_hireso.c +++ b/src/code/z_play_hireso.c @@ -1,31 +1,7 @@ #include "global.h" #include "z64bombers_notebook.h" #include "interface/schedule_static/schedule_static.h" - -// TODO: Needs YAZ0 -// Segment 0x07 schedule_dma_static_test -extern TexturePtr D_07000000; -extern TexturePtr D_07000800; -extern TexturePtr D_07001000; -extern TexturePtr D_07001800; -extern TexturePtr D_07002000; -extern TexturePtr D_07002800; -extern TexturePtr D_07003000; -extern TexturePtr D_07003800; -extern TexturePtr D_07004000; -extern TexturePtr D_07004800; -extern TexturePtr D_07005000; -extern TexturePtr D_07005800; -extern TexturePtr D_07006000; -extern TexturePtr D_07006800; -extern TexturePtr D_07007000; -extern TexturePtr D_07007800; -extern TexturePtr D_07008000; -extern TexturePtr D_07008800; -extern TexturePtr D_07009000; -extern TexturePtr D_07009800; -extern TexturePtr D_0700AC00; -extern TexturePtr D_0700AEA0; +#include "archives/schedule_dma_static/schedule_dma_static_yar.h" #define BOMBERS_NOTEBOOK_ENTRY_SIZE 3 #define BOMBERS_NOTEBOOK_ENTRY_MAX 10 @@ -395,8 +371,8 @@ void BombersNotebook_DrawColumns(Gfx** gfxP) { TexturePtr sBombersNotebookEventIconTextures[] = { gBombersNotebookEntryIconExclamationPointTex, - &D_0700AC00, - &D_0700AEA0, + schedule_dma_static_yar_Blob_00AC00, + schedule_dma_static_yar_Blob_00AEA0, }; s16 sBombersNotebookEntryIconColors[][3] = { { 255, 255, 0 }, @@ -1163,8 +1139,8 @@ void BombersNotebook_Update(PlayState* play, BombersNotebook* this, Input* input s32 stickAdjY = input->rel.stick_y; s32 cursorEntryScan; - this->scheduleDmaSegmentStart = SEGMENT_ROM_START(schedule_dma_static_test); - this->scheduleDmaSegmentSize = SEGMENT_ROM_SIZE(schedule_dma_static_old); + this->scheduleDmaSegmentStart = SEGMENT_ROM_START(schedule_dma_static_yar); + this->scheduleDmaSegmentSize = SEGMENT_ROM_SIZE(schedule_dma_static_syms); this->scheduleSegmentStart = SEGMENT_ROM_START(schedule_static); this->scheduleSegmentSize = SEGMENT_ROM_SIZE(schedule_static); 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 b60a00f9e..60d79536e 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,8 +2857,8 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->roll = -314.0f; pauseCtx->iconItemSegment = (void*)ALIGN16((uintptr_t)play->objectCtx.spaceStart); - size0 = SEGMENT_ROM_SIZE(icon_item_static_old); - CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); + size0 = SEGMENT_ROM_SIZE(icon_item_static_syms); + CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_static_yar), pauseCtx->iconItemSegment, size0); gSegments[0x08] = VIRTUAL_TO_PHYSICAL(pauseCtx->iconItemSegment); @@ -2869,8 +2869,8 @@ void KaleidoScope_Update(PlayState* play) { } pauseCtx->iconItem24Segment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0); - size1 = SEGMENT_ROM_SIZE(icon_item_24_static_old); - CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_24_static_test), pauseCtx->iconItem24Segment, + size1 = SEGMENT_ROM_SIZE(icon_item_24_static_syms); + CmpDma_LoadAllFiles((uintptr_t)SEGMENT_ROM_START(icon_item_24_static_yar), pauseCtx->iconItem24Segment, size1); pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1); @@ -3184,12 +3184,12 @@ void KaleidoScope_Update(PlayState* play) { pauseCtx->iconItemSegment = (void*)(((uintptr_t)play->objectCtx.spaceStart + 0x30) & ~0x3F); // Messed up ALIGN64 - size0 = SEGMENT_ROM_SIZE(icon_item_static_old); - CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); + size0 = SEGMENT_ROM_SIZE(icon_item_static_syms); + CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_yar), pauseCtx->iconItemSegment, size0); pauseCtx->iconItem24Segment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0); - size1 = SEGMENT_ROM_SIZE(icon_item_24_static_old); - CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_24_static_test), pauseCtx->iconItem24Segment, size1); + size1 = SEGMENT_ROM_SIZE(icon_item_24_static_syms); + CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_24_static_yar), pauseCtx->iconItem24Segment, size1); pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItem24Segment + size1); size2 = SEGMENT_ROM_SIZE(icon_item_gameover_static); @@ -3432,8 +3432,8 @@ void KaleidoScope_Update(PlayState* play) { sPauseCursorRightX = 155; pauseCtx->iconItemSegment = (void*)ALIGN16((uintptr_t)play->objectCtx.spaceStart); - size0 = SEGMENT_ROM_SIZE(icon_item_static_old); - CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_test), pauseCtx->iconItemSegment, size0); + size0 = SEGMENT_ROM_SIZE(icon_item_static_syms); + CmpDma_LoadAllFiles(SEGMENT_ROM_START(icon_item_static_yar), pauseCtx->iconItemSegment, size0); pauseCtx->iconItemAltSegment = (void*)ALIGN16((uintptr_t)pauseCtx->iconItemSegment + size0); sInDungeonScene = false; diff --git a/tools/buildtools/.gitignore b/tools/buildtools/.gitignore index ecf2dd851..1119d9786 100644 --- a/tools/buildtools/.gitignore +++ b/tools/buildtools/.gitignore @@ -5,3 +5,4 @@ makeromfs mkldscript reloc_prereq yaz0 +makeyar diff --git a/tools/buildtools/Makefile b/tools/buildtools/Makefile index 6f34b5cfa..57c5d0542 100644 --- a/tools/buildtools/Makefile +++ b/tools/buildtools/Makefile @@ -1,6 +1,5 @@ -CC := gcc -CFLAGS := -Wall -Wextra -pedantic -std=c99 -g -O2 -PROGRAMS := elf2rom makeromfs mkldscript reloc_prereq yaz0 +CFLAGS := -Wall -Wextra -Wpedantic -std=c99 -g -Os +PROGRAMS := elf2rom makeromfs mkldscript reloc_prereq yaz0 makeyar ifeq ($(shell command -v clang >/dev/null 2>&1; echo $$?),0) CC := clang @@ -8,15 +7,6 @@ else CC := gcc endif -LLD ?= 0 - -ifeq ($(shell command -v ld.lld >/dev/null 2>&1; echo $$?),0) - LLD := 1 -endif - -ifneq ($(LLD),0) - CFLAGS += -fuse-ld=lld -endif all: $(PROGRAMS) clean: @@ -27,6 +17,7 @@ makeromfs_SOURCES := makeromfs.c n64chksum.c util.c mkldscript_SOURCES := mkldscript.c spec.c util.c reloc_prereq_SOURCES := reloc_prereq.c spec.c util.c yaz0_SOURCES := yaz0tool.c yaz0.c util.c +makeyar_SOURCES := makeyar.c elf32.c yaz0.c util.c define COMPILE = $(1): $($1_SOURCES) diff --git a/tools/buildtools/elf32.c b/tools/buildtools/elf32.c index 7540406fb..64e6a9a1b 100644 --- a/tools/buildtools/elf32.c +++ b/tools/buildtools/elf32.c @@ -138,6 +138,7 @@ bool elf32_get_section(struct Elf32* e, struct Elf32_Section* sec, int secnum) { sec->flags = e->read32(sechdr + 0x08); sec->addr = e->read32(sechdr + 0x0C); sec->offset = e->read32(sechdr + 0x10); + sec->size = e->read32(sechdr + 0x14); sec->addralign = e->read32(sechdr + 0x20); sec->entsize = e->read32(sechdr + 0x24); return true; @@ -162,5 +163,8 @@ bool elf32_get_symbol(struct Elf32* e, struct Elf32_Symbol* sym, int symnum) { sym->name = strings + e->read32(symtab + symnum * 0x10); sym->value = e->read32(symtab + symnum * 0x10 + 4); + sym->size = e->read32(symtab + symnum * 0x10 + 8); + sym->st_type = symtab[symnum * 0x10 + 0xC] & 0xF; + sym->shndx = e->read16(symtab + symnum * 0x10 + 0xE); return true; } diff --git a/tools/buildtools/elf32.h b/tools/buildtools/elf32.h index 0dae635f2..f3de31358 100644 --- a/tools/buildtools/elf32.h +++ b/tools/buildtools/elf32.h @@ -3,6 +3,7 @@ #include #include +#include enum { ELF_MACHINE_NONE = 0, @@ -52,14 +53,31 @@ struct Elf32_Section { uint32_t type; uint32_t flags; uint32_t addr; + uint32_t size; uint32_t offset; uint32_t addralign; uint32_t entsize; }; +#define SHN_UNDEF 0 +#define SHN_ABS 0xFFF1 +#define SHN_COMMON 0xFFF2 + +#define STT_NOTYPE 0 +#define STT_OBJECT 1 +#define STT_FUNC 2 +#define STT_SECTION 3 +#define STT_FILE 4 +#define STT_COMMON 5 +#define STT_TLS 6 +#define STT_NUM 7 + struct Elf32_Symbol { const char* name; uint32_t value; + uint32_t size; + uint8_t st_type; + uint16_t shndx; }; bool elf32_init(struct Elf32* e, const void* data, size_t size); diff --git a/tools/buildtools/makeyar.c b/tools/buildtools/makeyar.c new file mode 100644 index 000000000..6a241f6f5 --- /dev/null +++ b/tools/buildtools/makeyar.c @@ -0,0 +1,267 @@ +/* SPDX-FileCopyrightText: © 2023 ZeldaRET */ +/* SPDX-License-Identifier: MIT */ + +/** + * Program to generate compressed yar (Yaz0 ARchive) files. + * + * The program expects an .o elf file and outputs a raw yar binary file and a + * "symbols" elf. + * + * A yar file consists of multiple Yaz0 files compressed individually. The + * archive begins with a header of non-fixed size, which describes the + * location of each individual Yaz0 block within the archive itself. This + * header is followed by each Yaz0 file. + * + * The first word (a 4 byte group) of the header indicates the size in bytes of + * the header itself (also describes the offset of the first Yaz0 block). The + * rest of the header consists of words describing the offsets of each Yaz0 + * block relative to the end of the header, because the first Yaz0 + * block is omitted from the offsets in the header. + * + * Each Yaz0 block is 0xFF-padded to a multiple of 0x10 in size. + * + * The entire archive is 0-padded to a multiple of 0x10 in size. + * + * The program works by compressing each .data symbol in the input elf file as + * its own Yaz0 compressed file, appending them in order for the generated + * archive. Other elf sections are ignored for the resulting yar file. + * + * The program also outputs an elf file that's identical to the elf input, + * but with its .data section zero'ed out completely. This "symbols" elf can be + * used for referencing each symbol as the whole file were completely + * uncompressed. + */ + + +#include +#include +#include +#include +#include +#include + +#include "elf32.h" +#include "yaz0.h" +#include "util.h" + + +typedef struct Bytearray { + uint8_t *bytes; + size_t size; +} Bytearray; + +typedef struct SymbolList { + struct Elf32_Symbol *symbols; + size_t size; // allocated size + size_t len; // elements in the list +} SymbolList; + +typedef struct DataSection { + Bytearray data; + uint32_t dataOffset; + SymbolList symbols; +} DataSection; + + +void Bytearray_Init(Bytearray *bytearr, const uint8_t *bytes, size_t size) { + bytearr->bytes = malloc(size); + if (bytearr->bytes == NULL) { + util_fatal_error("memory error"); + } + + memcpy(bytearr->bytes, bytes, size); + bytearr->size = size; +} + +void Bytearray_InitValue(Bytearray *bytearr, uint8_t val, size_t count) { + bytearr->bytes = malloc(count * sizeof(uint8_t)); + if (bytearr->bytes == NULL) { + util_fatal_error("memory error"); + } + + memset(bytearr->bytes, val, count); + bytearr->size = count; +} + +void Bytearray_ExtendValue(Bytearray *bytearr, uint8_t val, size_t count) { + size_t newSize = bytearr->size + count; + + bytearr->bytes = realloc(bytearr->bytes, newSize); + if (bytearr->bytes == NULL) { + util_fatal_error("memory error"); + } + + memset(&bytearr->bytes[bytearr->size], val, count); + bytearr->size = newSize; +} + +void Bytearray_Extend(Bytearray *bytearr, const uint8_t *bytes, size_t size) { + size_t newSize = bytearr->size + size; + + bytearr->bytes = realloc(bytearr->bytes, newSize); + if (bytearr->bytes == NULL) { + util_fatal_error("memory error"); + } + + memcpy(&bytearr->bytes[bytearr->size], bytes, size); + bytearr->size = newSize; +} + +void Bytearray_Destroy(Bytearray *bytearr) { + free(bytearr->bytes); +} + +void SymbolList_Init(SymbolList *list, size_t initialAmount) { + list->symbols = malloc(initialAmount * sizeof(struct Elf32_Symbol)); + if (list->symbols == NULL) { + util_fatal_error("memory error"); + } + list->size = initialAmount; + list->len = 0; +} + +void SymbolList_Destroy(SymbolList *list) { + free(list->symbols); +} + +void DataSection_FromElf(DataSection *dst, const Bytearray *elfBytes){ + struct Elf32 elf; + size_t i; + int symIndex; + size_t dataShndx = 0; + + if (!elf32_init(&elf, elfBytes->bytes, elfBytes->size) || (elf.machine != ELF_MACHINE_MIPS)) { + util_fatal_error("not a valid 32-bit MIPS ELF file"); + } + + for (i = 0; i < elf.shnum; i++) { + struct Elf32_Section sec; + + if (!elf32_get_section(&elf, &sec, i)) { + util_fatal_error("invalid or corrupt ELF file"); + } + + if (strcmp(sec.name, ".data") == 0) { + dst->dataOffset = sec.offset; + Bytearray_Init(&dst->data, &elfBytes->bytes[sec.offset], sec.size); + dataShndx = i; + break; + } + } + + SymbolList_Init(&dst->symbols, elf.numsymbols); + for (symIndex = 0; symIndex < elf.numsymbols; symIndex++) { + struct Elf32_Symbol sym; + + if (!elf32_get_symbol(&elf, &sym, symIndex)) { + util_fatal_error("invalid or corrupt ELF file"); + } + + if (sym.shndx != dataShndx) { + continue; + } + if (sym.st_type != STT_OBJECT) { + continue; + } + + dst->symbols.symbols[dst->symbols.len++] = sym; + } +} + +void DataSection_Destroy(DataSection *dataSect) { + Bytearray_Destroy(&dataSect->data); + SymbolList_Destroy(&dataSect->symbols); +} + +#define ALIGN16(val) (((val) + 0xF) & ~0xF) + +void createArchive(Bytearray *archive, const DataSection *dataSect) { + uint32_t firstEntryOffset = (dataSect->symbols.len + 1) * sizeof(uint32_t); + size_t i; + size_t offset; + + // Fill with zeroes until the compressed data start + Bytearray_InitValue(archive, 0, firstEntryOffset); + + util_write_uint32_be(&archive->bytes[0], firstEntryOffset); + + offset = firstEntryOffset; + for (i = 0; i < dataSect->symbols.len; i++) { + const struct Elf32_Symbol *sym = &dataSect->symbols.symbols[i]; + size_t uncompressedSize = sym->size; + uint8_t *output = malloc(uncompressedSize * sizeof(uint8_t)); // assume compressed shouldn't be bigger than uncompressed + size_t compressedSize; + + output[0] = 'Y'; + output[1] = 'a'; + output[2] = 'z'; + output[3] = '0'; + util_write_uint32_be(&output[4], uncompressedSize); + memset(&output[8], 0, 8); + compressedSize = 0x10; + + assert(sym->value + uncompressedSize <= dataSect->data.size); + compressedSize += yaz0_encode(&dataSect->data.bytes[sym->value], &output[0x10], uncompressedSize); + + // Pad to 0x10 + while (compressedSize % 0x10 != 0) { + output[compressedSize++] = 0xFF; + } + + Bytearray_Extend(archive, output, compressedSize); + + if (i > 0) { + util_write_uint32_be(&archive->bytes[i * sizeof(uint32_t)], offset - firstEntryOffset); + } + + offset += compressedSize; + free(output); + } + + util_write_uint32_be(&archive->bytes[i * sizeof(uint32_t)], offset - firstEntryOffset); + + if (archive->size % 16 != 0) { + size_t extraPad = ALIGN16(archive->size) - archive->size; + + Bytearray_ExtendValue(archive, 0, extraPad); + } +} + + +int main(int argc, char *argv[]) { + const char *inPath; + const char *binPath; + const char *symPath; + Bytearray elfBytes; + DataSection dataSect; + Bytearray archive; + + if (argc != 4) { + fprintf(stderr, "%s in_file out_bin out_sym\n", argv[0]); + exit(1); + } + + inPath = argv[1]; + binPath = argv[2]; + symPath = argv[3]; + + elfBytes.bytes = util_read_whole_file(inPath, &elfBytes.size); + + DataSection_FromElf(&dataSect, &elfBytes); + + createArchive(&archive, &dataSect); + + // Write the compressed archive file as a raw binary + util_write_whole_file(binPath, archive.bytes, archive.size); + + // Zero out data + memset(&elfBytes.bytes[dataSect.dataOffset], 0, dataSect.data.size); + + util_write_whole_file(symPath, elfBytes.bytes, elfBytes.size); + + Bytearray_Destroy(&archive); + DataSection_Destroy(&dataSect); + Bytearray_Destroy(&elfBytes); + + return 0; +} diff --git a/tools/buildtools/yaz0.h b/tools/buildtools/yaz0.h index 97656aac5..50ac586bb 100644 --- a/tools/buildtools/yaz0.h +++ b/tools/buildtools/yaz0.h @@ -1,8 +1,6 @@ #ifndef YAZ0_H #define YAZ0_H -int yaz0_encode2(uint8_t* src, uint8_t* dest, int uncompressedSize); - void yaz0_decode(uint8_t* src, uint8_t* dst, int uncompressedSize); int yaz0_encode(uint8_t* src, uint8_t* dest, int srcSize); diff --git a/tools/decompress_yars.py b/tools/decompress_yars.py new file mode 100755 index 000000000..404a50c56 --- /dev/null +++ b/tools/decompress_yars.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python3 + +# SPDX-FileCopyrightText: © 2023 ZeldaRET +# SPDX-License-Identifier: MIT + +# yar (Yaz0 ARchive) decompressor +# +# This program decompresses every raw yar binary file listed in +# `tools/filelists/{version}/archives.csv` to a corresponding +# `baserom/{file}.unarchive` raw file. +# +# It works by decompressing every Yaz0 block and appending them one by one into +# a new raw binary file so it can be processed normally by other tools. + + +from __future__ import annotations + +import argparse +import dataclasses +import libyaz0 +from pathlib import Path +import struct + + +PRINT_XML = False + +@dataclasses.dataclass +class ArchiveMeta: + start: int + end: int + + +def readFileAsBytearray(filepath: Path) -> bytearray: + with filepath.open(mode="rb") as f: + return bytearray(f.read()) + + +def readBytesAsWord(array_of_bytes: bytearray, offset: int) -> int: + return struct.unpack_from(f">I", array_of_bytes, offset)[0] + + +def getOffsetsList(archiveBytes: bytearray) -> list[ArchiveMeta]: + archivesOffsets: list[ArchiveMeta] = [] + + firstEntryOffset = readBytesAsWord(archiveBytes, 0) + firstEntrySize = readBytesAsWord(archiveBytes, 4) + + archivesOffsets.append(ArchiveMeta(firstEntryOffset, firstEntryOffset + firstEntrySize)) + + offset = 4 + while offset < firstEntryOffset - 4: + entry = readBytesAsWord(archiveBytes, offset) + nextEntry = readBytesAsWord(archiveBytes, offset + 4) + entryStart = entry + firstEntryOffset + entryEnd = nextEntry + firstEntryOffset + archivesOffsets.append(ArchiveMeta(entryStart, entryEnd)) + + offset += 4 + + return archivesOffsets + + +def extractArchive(archivePath: Path, outPath: Path): + archiveBytes = readFileAsBytearray(archivePath) + + if readBytesAsWord(archiveBytes, 0) == 0: + # Empty file, ignore it + return + + print(f"Extracting '{archivePath}' -> '{outPath}'") + archivesOffsets = getOffsetsList(archiveBytes) + + if PRINT_XML: + print('') + print(f' ') + + with outPath.open("wb") as out: + currentOffset = 0 + for meta in archivesOffsets: + decompressedBytes = libyaz0.decompress(archiveBytes[meta.start:meta.end]) + decompressedSize = len(decompressedBytes) + out.write(decompressedBytes) + + if PRINT_XML: + print(f' ') + + currentOffset += decompressedSize + + if PRINT_XML: + print(f' ') + print('') + + +def main(): + parser = argparse.ArgumentParser(description="MM archives extractor") + parser.add_argument("-v", "--version", help="version to process", default="mm.us.rev1") + parser.add_argument("--xml", help="Generate xml to stdout", action="store_true") + + args = parser.parse_args() + + global PRINT_XML + PRINT_XML = args.xml + + archivesCsvPath = Path(f"tools/filelists/{args.version}/archives.csv") + + with archivesCsvPath.open() as f: + for line in f: + archiveName = line.strip().split(",")[1] + archivePath = Path(f"baserom/{archiveName}") + + extractedPath = Path(str(archivePath) + ".unarchive") + extractArchive(archivePath, extractedPath) + +if __name__ == "__main__": + main() diff --git a/tools/disasm/dma_filenames.txt b/tools/disasm/dma_filenames.txt index aaa17ab6d..798a8b366 100644 --- a/tools/disasm/dma_filenames.txt +++ b/tools/disasm/dma_filenames.txt @@ -7,8 +7,8 @@ 'Audiotable', 'kanji', 'link_animetion', - 'icon_item_static_old', - 'icon_item_24_static_old', + 'icon_item_static_syms', + 'icon_item_24_static_syms', 'icon_item_field_static', 'icon_item_dungeon_static', 'icon_item_gameover_static', @@ -18,10 +18,10 @@ 'map_grand_static', 'item_name_static', 'map_name_static', - 'icon_item_static_test', - 'icon_item_24_static_test', - 'schedule_dma_static_old', - 'schedule_dma_static_test', + 'icon_item_static_yar', + 'icon_item_24_static_yar', + 'schedule_dma_static_syms', + 'schedule_dma_static_yar', 'schedule_static', 'story_static', 'do_action_static', diff --git a/tools/extract_baserom.py b/tools/extract_baserom.py index 03d230e80..c631a6392 100755 --- a/tools/extract_baserom.py +++ b/tools/extract_baserom.py @@ -14,8 +14,8 @@ FILE_NAMES = [ 'Audiotable', 'kanji', 'link_animetion', - 'icon_item_static_old', - 'icon_item_24_static_old', + 'icon_item_static_syms', + 'icon_item_24_static_syms', 'icon_item_field_static', 'icon_item_dungeon_static', 'icon_item_gameover_static', @@ -25,10 +25,10 @@ FILE_NAMES = [ 'map_grand_static', 'item_name_static', 'map_name_static', - 'icon_item_static_test', - 'icon_item_24_static_test', - 'schedule_dma_static_old', - 'schedule_dma_static_test', + 'icon_item_static_yar', + 'icon_item_24_static_yar', + 'schedule_dma_static_syms', + 'schedule_dma_static_yar', 'schedule_static', 'story_static', 'do_action_static', diff --git a/tools/filelists/mm.us.rev1/all.csv b/tools/filelists/mm.us.rev1/all.csv index c23622330..7c98a7cf3 100644 --- a/tools/filelists/mm.us.rev1/all.csv +++ b/tools/filelists/mm.us.rev1/all.csv @@ -6,8 +6,8 @@ 5,Audiotable 6,kanji 7,link_animetion -8,icon_item_static_old -9,icon_item_24_static_old +8,icon_item_static_syms +9,icon_item_24_static_syms 10,icon_item_field_static 11,icon_item_dungeon_static 12,icon_item_gameover_static @@ -17,10 +17,10 @@ 16,map_grand_static 17,item_name_static 18,map_name_static -19,icon_item_static_test -20,icon_item_24_static_test -21,schedule_dma_static_old -22,schedule_dma_static_test +19,icon_item_static_yar +20,icon_item_24_static_yar +21,schedule_dma_static_syms +22,schedule_dma_static_yar 23,schedule_static 24,story_static 25,do_action_static diff --git a/tools/filelists/mm.us.rev1/archives.csv b/tools/filelists/mm.us.rev1/archives.csv index a0b758dfd..3053456d0 100644 --- a/tools/filelists/mm.us.rev1/archives.csv +++ b/tools/filelists/mm.us.rev1/archives.csv @@ -2,6 +2,6 @@ 16,map_grand_static 17,item_name_static 18,map_name_static -19,icon_item_static_test -20,icon_item_24_static_test -22,schedule_dma_static_test +19,icon_item_static_yar +20,icon_item_24_static_yar +22,schedule_dma_static_yar diff --git a/tools/filelists/mm.us.rev1/deleted.csv b/tools/filelists/mm.us.rev1/deleted.csv index 12e60f6ee..2fca3fbe8 100644 --- a/tools/filelists/mm.us.rev1/deleted.csv +++ b/tools/filelists/mm.us.rev1/deleted.csv @@ -1,3 +1,3 @@ -8,icon_item_static_old -9,icon_item_24_static_old -21,schedule_dma_static_old +8,icon_item_static_syms +9,icon_item_24_static_syms +21,schedule_dma_static_syms diff --git a/tools/progress.py b/tools/progress.py index 5a2958cd8..9096715aa 100755 --- a/tools/progress.py +++ b/tools/progress.py @@ -136,7 +136,6 @@ if not args.matching: # The order of this list should not change to prevent breaking the graph of the website # New stuff shall be appended at the end of the list assetsCategories = [ - "archives", "audio", "interface", "misc", @@ -148,6 +147,11 @@ assetsCategories = [ ] assetsTracker = dict() +# Assets that we don't have a proper way of tracking right now +ignoredAssets = { + "archives", +} + # Manual fixer for files that would be counted in wrong categories # "filename": "correctSection" fileSectionFixer = { @@ -203,12 +207,12 @@ for line in map_file: file_size = int(line_split[2], 16) obj_file = line_split[3].strip() objFileSplit = obj_file.split("/") + objFileName = objFileSplit[-1].split(".o")[0] fileData = {"name": obj_file, "vram": obj_vram, "size": file_size, "section": section, "symbols": []} mapFileList.append(fileData) if (section == ".text"): - objFileName = objFileSplit[-1].split(".o")[0] srcCat = obj_file.split("/")[2] if srcCat in srcCategoriesFixer: srcCat = srcCategoriesFixer[srcCat] @@ -229,6 +233,8 @@ for line in map_file: assetCat = obj_file.split("/")[2] if assetCat in assetsTracker: assetsTracker[assetCat]["currentSize"] += file_size + elif assetCat in ignoredAssets: + pass else: eprint(f"Found file '{obj_file}' in unknown asset category '{assetCat}'") eprint("I'll ignore this for now, but please fix it!") diff --git a/undefined_syms.txt b/undefined_syms.txt index e586991ff..9dd07f623 100644 --- a/undefined_syms.txt +++ b/undefined_syms.txt @@ -1098,32 +1098,6 @@ D_06000B70 = 0x06000B70; D_06000D60 = 0x06000D60; -// segment 0x07 - -D_07000000 = 0x07000000; -D_07000800 = 0x07000800; -D_07001000 = 0x07001000; -D_07001800 = 0x07001800; -D_07002000 = 0x07002000; -D_07002800 = 0x07002800; -D_07003000 = 0x07003000; -D_07003800 = 0x07003800; -D_07004000 = 0x07004000; -D_07004800 = 0x07004800; -D_07005000 = 0x07005000; -D_07005800 = 0x07005800; -D_07006000 = 0x07006000; -D_07006800 = 0x07006800; -D_07007000 = 0x07007000; -D_07007800 = 0x07007800; -D_07008000 = 0x07008000; -D_07008800 = 0x07008800; -D_07009000 = 0x07009000; -D_07009800 = 0x07009800; -D_0700AC00 = 0x0700AC00; -D_0700AEA0 = 0x0700AEA0; - - // segment 0x08 D_08000000 = 0x08000000; From bea420f8a11ca7dbb7f5ea2664ea2ce41fc61b84 Mon Sep 17 00:00:00 2001 From: Tom Overton Date: Tue, 20 Jun 2023 00:50:15 -0700 Subject: [PATCH 11/82] 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 12/82] 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 13/82] 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 14/82] 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 15/82] 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 16/82] 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 17/82] 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 18/82] 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 19/82] `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 20/82] 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 21/82] 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 22/82] 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 23/82] 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 24/82] 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 25/82] 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 26/82] 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 27/82] 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 28/82] 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 29/82] 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 30/82] 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 31/82] 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 32/82] 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 33/82] `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 34/82] `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 35/82] 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 36/82] 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 37/82] 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 38/82] 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 39/82] 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 40/82] 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 41/82] 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 42/82] 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 43/82] 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 44/82] 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 45/82] 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 46/82] 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 47/82] 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 48/82] 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 49/82] 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 50/82] 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 51/82] 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 52/82] 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 53/82] 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 54/82] 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 55/82] 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 56/82] 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 57/82] 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 58/82] 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 59/82] 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 60/82] 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 61/82] 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 62/82] `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 63/82] 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 64/82] 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 65/82] 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 66/82] 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 67/82] 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 68/82] 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 69/82] 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 70/82] 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 71/82] 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 72/82] 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 73/82] 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 74/82] 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 75/82] 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 76/82] 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 77/82] 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 78/82] 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 79/82] `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 80/82] 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 81/82] 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 82/82] 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 }, };