From 320e19bd6ffb63e073e2b755c1308fb84b6eec56 Mon Sep 17 00:00:00 2001
From: Thar0 <17233964+Thar0@users.noreply.github.com>
Date: Sat, 16 Jul 2022 02:24:22 +0100
Subject: [PATCH 1/6] Decompiled, mostly named
---
assets/xml/objects/object_po_composer.xml | 27 +-
spec | 3 +-
.../ovl_En_Po_Composer/z_en_po_composer.c | 690 ++++++++++++++++--
.../ovl_En_Po_Composer/z_en_po_composer.h | 39 +-
4 files changed, 664 insertions(+), 95 deletions(-)
diff --git a/assets/xml/objects/object_po_composer.xml b/assets/xml/objects/object_po_composer.xml
index c45cf9039..40d77d827 100644
--- a/assets/xml/objects/object_po_composer.xml
+++ b/assets/xml/objects/object_po_composer.xml
@@ -1,4 +1,5 @@
+
@@ -13,23 +14,15 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/spec b/spec
index 5f8c616e5..6b7b441cf 100644
--- a/spec
+++ b/spec
@@ -4263,8 +4263,7 @@ beginseg
name "ovl_En_Po_Composer"
compress
include "build/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.o"
- include "build/data/ovl_En_Po_Composer/ovl_En_Po_Composer.data.o"
- include "build/data/ovl_En_Po_Composer/ovl_En_Po_Composer.reloc.o"
+ include "build/src/overlays/actors/ovl_En_Po_Composer/ovl_En_Po_Composer_reloc.o"
endseg
beginseg
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
index 0772249ba..0f88f364d 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
@@ -15,20 +15,24 @@ void EnPoComposer_Destroy(Actor* thisx, PlayState* play);
void EnPoComposer_Update(Actor* thisx, PlayState* play);
void EnPoComposer_Draw(Actor* thisx, PlayState* play);
-void func_80BC5294(EnPoComposer* this, PlayState* play);
-void func_80BC52F0(EnPoComposer* this, PlayState* play);
-void func_80BC53A0(EnPoComposer* this, PlayState* play);
-void func_80BC5404(EnPoComposer* this, PlayState* play);
-void func_80BC5570(EnPoComposer* this, PlayState* play);
-void func_80BC55E0(EnPoComposer* this, PlayState* play);
-void func_80BC5670(EnPoComposer* this, PlayState* play);
-void func_80BC56D0(EnPoComposer* this, PlayState* play);
-void func_80BC5780(EnPoComposer* this, PlayState* play);
-void func_80BC5830(EnPoComposer* this, PlayState* play);
-void func_80BC58E0(EnPoComposer* this, PlayState* play);
+void EnPoComposer_AwaitPlayer(EnPoComposer* this, PlayState* play);
+void EnPoComposer_StartCutscene(EnPoComposer* this, PlayState* play);
+void EnPoComposer_StartedCutscene(EnPoComposer* this, PlayState* play);
+void EnPoComposer_PlayCurse(EnPoComposer* this, PlayState* play);
+void EnPoComposer_IdleStill(EnPoComposer* this, PlayState* play);
+void EnPoComposer_Appear(EnPoComposer* this, PlayState* play);
+void EnPoComposer_Idle(EnPoComposer* this, PlayState* play);
+void EnPoComposer_RaiseArms(EnPoComposer* this, PlayState* play);
+void EnPoComposer_LowerArms(EnPoComposer* this, PlayState* play);
+void EnPoComposer_CutscenePlayCurse(EnPoComposer* this, PlayState* play);
+void EnPoComposer_Roll(EnPoComposer* this, PlayState* play);
-#if 0
-ActorInit En_Po_Composer_InitVars = {
+void EnPoComposer_SetupAwaitPlayer(EnPoComposer* this);
+void EnPoComposer_SetupStartCutscene(EnPoComposer* this);
+void EnPoComposer_SetupStartedCutscene(EnPoComposer* this);
+void EnPoComposer_StepLightAlpha(EnPoComposer* this);
+
+const ActorInit En_Po_Composer_InitVars = {
ACTOR_EN_PO_COMPOSER,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -40,32 +44,56 @@ ActorInit En_Po_Composer_InitVars = {
(ActorFunc)EnPoComposer_Draw,
};
-// static ColliderCylinderInit sCylinderInit = {
-static ColliderCylinderInit D_80BC6780 = {
- { COLTYPE_HIT3, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
- { ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
+static ColliderCylinderInit sCylinderInit = {
+ {
+ COLTYPE_HIT3,
+ AT_NONE,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_CYLINDER,
+ },
+ {
+ ELEMTYPE_UNK0,
+ { 0x00000000, 0x00, 0x00 },
+ { 0xF7CFFFFF, 0x00, 0x00 },
+ TOUCH_NONE | TOUCH_SFX_NORMAL,
+ BUMP_ON,
+ OCELEM_ON,
+ },
{ 20, 40, 20, { 0, 0, 0 } },
};
-// static ColliderJntSphElementInit sJntSphElementsInit[1] = {
-static ColliderJntSphElementInit D_80BC67AC[1] = {
+static ColliderJntSphElementInit sJntSphElementsInit[1] = {
{
- { ELEMTYPE_UNK0, { 0xF7CFFFFF, 0x00, 0x08 }, { 0x00000000, 0x00, 0x00 }, TOUCH_ON | TOUCH_SFX_NORMAL, BUMP_NONE, OCELEM_ON, },
+ {
+ ELEMTYPE_UNK0,
+ { 0xF7CFFFFF, 0x00, 0x08 },
+ { 0x00000000, 0x00, 0x00 },
+ TOUCH_ON | TOUCH_SFX_NORMAL,
+ BUMP_NONE,
+ OCELEM_ON,
+ },
{ 9, { { 0, -1500, 0 }, 10 }, 100 },
},
};
-// static ColliderJntSphInit sJntSphInit = {
-static ColliderJntSphInit D_80BC67D0 = {
- { COLTYPE_HIT3, AT_ON | AT_TYPE_ENEMY, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_JNTSPH, },
- ARRAY_COUNT(sJntSphElementsInit), D_80BC67AC, // sJntSphElementsInit,
+static ColliderJntSphInit sJntSphInit = {
+ {
+ COLTYPE_HIT3,
+ AT_ON | AT_TYPE_ENEMY,
+ AC_ON | AC_TYPE_PLAYER,
+ OC1_ON | OC1_TYPE_ALL,
+ OC2_TYPE_1,
+ COLSHAPE_JNTSPH,
+ },
+ ARRAY_COUNT(sJntSphElementsInit),
+ sJntSphElementsInit,
};
-// sColChkInfoInit
-static CollisionCheckInfoInit D_80BC67E0 = { 4, 25, 50, 40 };
+static CollisionCheckInfoInit sColChkInfoInit = { 4, 25, 50, 40 };
-// static DamageTable sDamageTable = {
-static DamageTable D_80BC67E8 = {
+static DamageTable sDamageTable = {
/* Deku Nut */ DMG_ENTRY(0, 0x0),
/* Deku Stick */ DMG_ENTRY(2, 0x0),
/* Horse trample */ DMG_ENTRY(1, 0x0),
@@ -100,88 +128,602 @@ static DamageTable D_80BC67E8 = {
/* Powder Keg */ DMG_ENTRY(0, 0x0),
};
-// static InitChainEntry sInitChain[] = {
-static InitChainEntry D_80BC6958[] = {
+typedef enum {
+ PO_COMPOSER_ANIM_IDLE_STILL,
+ PO_COMPOSER_ANIM_APPEAR_DISAPPEAR,
+ PO_COMPOSER_ANIM_IDLE,
+ PO_COMPOSER_ANIM_RAISE_ARMS,
+ PO_COMPOSER_ANIM_ARMS_RAISED,
+ PO_COMPOSER_ANIM_LOWER_ARMS,
+ PO_COMPOSER_ANIM_IDLE_FACING_DOWN,
+ PO_COMPOSER_ANIM_BEGIN_PLAYING_CURSE,
+ PO_COMPOSER_ANIM_PLAYING_CURSE,
+ PO_COMPOSER_ANIM_BEGIN_ROLLING,
+ PO_COMPOSER_ANIM_ROLLING,
+ PO_COMPOSER_ANIM_FLEE,
+ PO_COMPOSER_ANIM_ATTACK,
+ PO_COMPOSER_ANIM_MAX,
+} EnPoComposerAnim;
+
+static AnimationInfo sAnimationInfo[PO_COMPOSER_ANIM_MAX] = {
+ /* 0 */ { &object_po_composer_Anim_003DB0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 1 */ { &object_po_composer_Anim_003954, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ /* 2 */ { &object_po_composer_Anim_00188C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 3 */ { &object_po_composer_Anim_000570, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 4 */ { &object_po_composer_Anim_001F44, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 5 */ { &object_po_composer_Anim_0023E8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 6 */ { &object_po_composer_Anim_002AE0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 7 */ { &object_po_composer_Anim_000A58, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 8 */ { &object_po_composer_Anim_001420, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 9 */ { &object_po_composer_Anim_003024, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 10 */ { &object_po_composer_Anim_00334C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 11 */ { &object_po_composer_Anim_0015B8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 12 */ { &object_po_composer_Anim_00020C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+};
+
+static Color_RGBA8 sLightColorInit = { 255, 255, 210, 0 };
+
+static Color_RGBA8 sEnvColorInit = { 0, 0, 0, 255 };
+
+Color_RGBA8 D_80BC6948 = { 75, 20, 25, 255 };
+
+Color_RGBA8 D_80BC694C = { 80, 110, 90, 255 };
+
+Color_RGBA8 D_80BC6950 = { 90, 85, 50, 255 };
+
+Color_RGBA8 D_80BC6954 = { 100, 90, 100, 255 };
+
+static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 3200, ICHAIN_STOP),
};
-#endif
+static s32 sPlayerIsPlayingOcarina = false;
-extern ColliderCylinderInit D_80BC6780;
-extern ColliderJntSphElementInit D_80BC67AC[1];
-extern ColliderJntSphInit D_80BC67D0;
-extern CollisionCheckInfoInit D_80BC67E0;
-extern DamageTable D_80BC67E8;
-extern InitChainEntry D_80BC6958[];
+void EnPoComposer_Init(Actor* thisx, PlayState* play) {
+ EnPoComposer* this = THIS;
-extern UNK_TYPE D_0600188C;
-extern UNK_TYPE D_06006E08;
-extern UNK_TYPE D_06006FD8;
+ Actor_ProcessInitChain(&this->actor, sInitChain);
+ ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
+ SkelAnime_InitFlex(play, &this->skelAnime, &object_po_composer_Skel_009930, &object_po_composer_Anim_00188C,
+ this->jointTable, this->morphTable, OBJECT_PO_COMPOSER_LIMB_MAX);
+ Collider_InitJntSph(play, &this->lanternCollider);
+ Collider_SetJntSph(play, &this->lanternCollider, &this->actor, &sJntSphInit, this->lanternColliderElements);
+ Collider_InitCylinder(play, &this->bodyCollider);
+ Collider_SetCylinder(play, &this->bodyCollider, &this->actor, &sCylinderInit);
+ CollisionCheck_SetInfo(&this->actor.colChkInfo, &sDamageTable, &sColChkInfoInit);
+ this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo);
+ Lights_PointGlowSetInfo(&this->lightInfo, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z,
+ 255, 255, 255, 0);
+ this->actor.flags &= ~1;
+ this->lightColor = sLightColorInit;
+ this->envColor = sEnvColorInit;
+ this->lastCsAction = COMPOSER_CS_ACTION_NONE;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/EnPoComposer_Init.s")
+ if (PO_COMPOSER_IS_FLAT(&this->actor)) {
+ this->unk290 = 0;
+ this->unk330 = true;
+ EnPoComposer_SetupStartedCutscene(this);
+ } else if (this->actor.params & 0x4000) {
+ if (gSaveContext.save.entrance != 0x20A0) {
+ Actor_Kill(&this->actor);
+ } else {
+ this->unk290 = 0;
+ this->unk330 = true;
+ EnPoComposer_SetupStartedCutscene(this);
+ }
+ } else {
+ s32 i;
+ s16 csIndex = this->actor.csId;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/EnPoComposer_Destroy.s")
+ if (gSaveContext.save.saveInfo.weekEventReg[14] & 4) {
+ Actor_Kill(&this->actor);
+ return;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5250.s")
+ for (i = 0; i < ARRAY_COUNT(this->csIndices); i++) {
+ if (csIndex == -1) {
+ break;
+ }
+ this->csIndices[i] = csIndex;
+ csIndex = CutsceneManager_GetAdditionalCsId(csIndex);
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5294.s")
+ if (gSaveContext.save.saveInfo.weekEventReg[14] & 2) {
+ this->unk290 = 1;
+ } else {
+ this->unk290 = 0;
+ }
+ this->unk330 = false;
+ EnPoComposer_SetupAwaitPlayer(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC52D4.s")
+void EnPoComposer_Destroy(Actor* thisx, PlayState* play) {
+ EnPoComposer* this = THIS;
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC52F0.s")
+ LightContext_RemoveLight(play, &play->lightCtx, this->lightNode);
+ Collider_DestroyJntSph(play, &this->lanternCollider);
+ Collider_DestroyCylinder(play, &this->bodyCollider);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC538C.s")
+void EnPoComposer_SetupAwaitPlayer(EnPoComposer* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE_STILL);
+ this->actionFunc = EnPoComposer_AwaitPlayer;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC53A0.s")
+void EnPoComposer_AwaitPlayer(EnPoComposer* this, PlayState* play) {
+ if (this->actor.xzDistToPlayer < 200.0f) {
+ EnPoComposer_SetupStartCutscene(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC53B0.s")
+void EnPoComposer_SetupStartCutscene(EnPoComposer* this) {
+ this->unk330 = true;
+ this->actionFunc = EnPoComposer_StartCutscene;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5404.s")
+void EnPoComposer_StartCutscene(EnPoComposer* this, PlayState* play) {
+ if (CutsceneManager_IsNext(this->csIndices[this->unk290])) {
+ CutsceneManager_Start(this->csIndices[this->unk290], &this->actor);
+ EnPoComposer_SetupStartedCutscene(this);
+ } else {
+ if (CutsceneManager_GetCurrentCsId() == 0x7C) {
+ CutsceneManager_Stop(0x7C);
+ }
+ CutsceneManager_Queue(this->csIndices[this->unk290]);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC552C.s")
+void EnPoComposer_SetupStartedCutscene(EnPoComposer* this) {
+ this->actionFunc = EnPoComposer_StartedCutscene;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5570.s")
+void EnPoComposer_StartedCutscene(EnPoComposer* this, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5580.s")
+void EnPoComposer_SetupPlayCurse(EnPoComposer* this) {
+ this->actionTimer = 0;
+ this->actor.flags |= ACTOR_FLAG_TARGETABLE;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_PLAYING_CURSE);
+ this->actionFunc = EnPoComposer_PlayCurse;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC55E0.s")
+void EnPoComposer_PlayCurse(EnPoComposer* this, PlayState* play) {
+ Player* player = GET_PLAYER(play);
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC562C.s")
+ // Damage the player every second
+ if (this->actionTimer == 20) {
+ func_800B8D10(play, &this->actor, 0.0f, 0, 0.0f, 1, 4);
+ this->actionTimer = 0;
+ } else {
+ this->actionTimer++;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5670.s")
+ // Ocarina check
+ if (player->stateFlags2 & PLAYER_STATE2_8000000) {
+ if (!sPlayerIsPlayingOcarina) {
+ // Play sound whenever the player begins playing the Ocarina
+ Audio_PlaySfx(NA_SE_SY_TRE_BOX_APPEAR);
+ }
+ sPlayerIsPlayingOcarina = true;
+ } else {
+ sPlayerIsPlayingOcarina = false;
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5680.s")
+ // Song check, check if player just played song of storms or song of healing to react to
+ if (play->msgCtx.ocarinaMode == 3) {
+ switch (play->msgCtx.lastPlayedSong) {
+ case OCARINA_SONG_STORMS:
+ this->unk290 = 3;
+ EnPoComposer_SetupStartCutscene(this);
+ break;
+ case OCARINA_SONG_HEALING:
+ this->unk290 = 2;
+ EnPoComposer_SetupStartCutscene(this);
+ break;
+ }
+ }
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC56D0.s")
+ // Play sharp's curse bgm
+ func_801A1FB4(3, &this->actor.projectedPos, NA_BGM_SHARPS_CURSE, 2000.0f);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5738.s")
+void EnPoComposer_SetupIdleStill(EnPoComposer* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE_STILL);
+ this->actionFunc = EnPoComposer_IdleStill;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5780.s")
+void EnPoComposer_IdleStill(EnPoComposer* this, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC57E8.s")
+void EnPoComposer_SetupAppear(EnPoComposer* this) {
+ this->actionTimer = 0;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_APPEAR_DISAPPEAR);
+ this->actionFunc = EnPoComposer_Appear;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5830.s")
+void EnPoComposer_Appear(EnPoComposer* this, PlayState* play) {
+ this->actionTimer++;
+ this->actor.shape.rot.y += 0x1000;
+ if (this->actionTimer == 32) {
+ EnPoComposer_SetupIdleStill(this);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5898.s")
+void EnPoComposer_SetupIdle(EnPoComposer* this) {
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE);
+ this->actionFunc = EnPoComposer_Idle;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC58E0.s")
+void EnPoComposer_Idle(EnPoComposer* this, PlayState* play) {
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC59BC.s")
+void EnPoComposer_SetupRaiseArms(EnPoComposer* this) {
+ this->csActionTimer = 0;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SHARP_REACTION);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_RAISE_ARMS);
+ this->actionFunc = EnPoComposer_RaiseArms;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC59EC.s")
+void EnPoComposer_RaiseArms(EnPoComposer* this, PlayState* play) {
+ if (this->csActionTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->csActionTimer++;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_ARMS_RAISED);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5CC8.s")
+void EnPoComposer_SetupLowerArms(EnPoComposer* this) {
+ this->csActionTimer = 0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_LOWER_ARMS);
+ this->actionFunc = EnPoComposer_LowerArms;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5D34.s")
+void EnPoComposer_LowerArms(EnPoComposer* this, PlayState* play) {
+ if (this->csActionTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->csActionTimer++;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE_FACING_DOWN);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5DEC.s")
+void EnPoComposer_SetupCutscenePlayCurse(EnPoComposer* this) {
+ this->csActionTimer = 0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_BEGIN_PLAYING_CURSE);
+ this->actionFunc = EnPoComposer_CutscenePlayCurse;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC5FE8.s")
+void EnPoComposer_CutscenePlayCurse(EnPoComposer* this, PlayState* play) {
+ if (this->csActionTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->csActionTimer++;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_PLAYING_CURSE);
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/EnPoComposer_Update.s")
+void EnPoComposer_SetupRoll(EnPoComposer* this) {
+ this->csActionTimer = 0;
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_BEGIN_ROLLING);
+ this->actionFunc = EnPoComposer_Roll;
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC60BC.s")
+void EnPoComposer_Roll(EnPoComposer* this, PlayState* play) {
+ if (this->csActionTimer == 0) {
+ if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->csActionTimer++;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_SHARP_REACTION);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_ROLLING);
+ }
+ } else if (Animation_OnFrame(&this->skelAnime, 1.0f) && this->lightColor.a >= 33) {
+ if (this->csActionTimer == 1) {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LAST3_DEAD_WIND2_OLD);
+ this->csActionTimer = 2;
+ } else {
+ Actor_PlaySfx(&this->actor, NA_SE_EN_LAST3_DEAD_WIND3_OLD);
+ this->csActionTimer = 1;
+ }
+ }
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/func_80BC617C.s")
+void EnPoComposer_SharpCutsceneDone(EnPoComposer* this) {
+ gSaveContext.save.saveInfo.weekEventReg[14] |= 4;
+ Actor_Kill(&this->actor);
+}
-#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Po_Composer/EnPoComposer_Draw.s")
+s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
+ u16 actorAction = PO_COMPOSER_IS_FLAT(&this->actor) ? 0x1E2 : 0x1E1;
+ s32 actorActionIdx;
+
+ if (!this->unk330) {
+ return false;
+ }
+
+ if (Cutscene_IsCueInChannel(play, actorAction)) {
+ actorActionIdx = Cutscene_GetCueChannel(play, actorAction);
+ if (this->lastCsAction != play->csCtx.actorCues[actorActionIdx]->id) {
+ this->lastCsAction = play->csCtx.actorCues[actorActionIdx]->id;
+ switch (play->csCtx.actorCues[actorActionIdx]->id) {
+ case COMPOSER_CS_ACTION_IDLE: // loop idle
+ EnPoComposer_SetupIdleStill(this);
+ break;
+ case COMPOSER_CS_ACTION_APPEAR_SPIN: // appear/disappear -> loop idle
+ EnPoComposer_SetupAppear(this);
+ break;
+ case COMPOSER_CS_ACTION_IDLE2: // loop sharp idle
+ EnPoComposer_SetupIdle(this);
+ break;
+ case COMPOSER_CS_ACTION_RAISE_ARMS: // raise arms -> loop arms raised
+ EnPoComposer_SetupRaiseArms(this);
+ break;
+ case COMPOSER_CS_ACTION_LOWER_ARMS: // lower arms -> loop idle
+ EnPoComposer_SetupLowerArms(this);
+ break;
+ case COMPOSER_CS_ACTION_PLAY_CURSE: // begin playing -> loop playing
+ EnPoComposer_SetupCutscenePlayCurse(this);
+ break;
+ case COMPOSER_CS_ACTION_ROLL: // begin rolling -> loop rolling
+ EnPoComposer_SetupRoll(this);
+ break;
+ case COMPOSER_CS_ACTION_APPEAR: // appear
+ this->visible = true;
+ break;
+ case COMPOSER_CS_ACTION_DISAPPEAR: // disappear
+ this->visible = false;
+ Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR);
+ break;
+ case COMPOSER_CS_ACTION_DONE:
+ if (actorAction == 0x1E1) {
+ EnPoComposer_SharpCutsceneDone(this);
+ } else {
+ Actor_Kill(&this->actor);
+ }
+ break;
+ }
+ }
+ if (this->actionFunc != EnPoComposer_Appear) {
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, actorActionIdx);
+ } else {
+ Cutscene_ActorTranslate(&this->actor, play, actorActionIdx);
+ }
+
+ EnPoComposer_StepLightAlpha(this);
+
+ if (this->unk290 == 3 && play->csCtx.curFrame == 204) {
+ Audio_PlaySfx(NA_SE_SY_DIZZY_EFFECT);
+ }
+
+ if (this->visible == true) {
+ Actor_PlaySfx_Flagged(&this->actor, NA_SE_EN_SHARP_FLOAT - SFX_FLAG);
+ }
+ return true;
+ }
+
+ if (this->actionFunc != EnPoComposer_StartedCutscene && this->actionFunc != EnPoComposer_StartCutscene &&
+ this->actionFunc != EnPoComposer_PlayCurse && play->csCtx.state == 0) {
+ if (PO_COMPOSER_IS_FLAT(&this->actor)) {
+ EnPoComposer_SetupStartedCutscene(this);
+ } else if (this->actor.params & 0x4000) {
+ EnPoComposer_SetupStartedCutscene(this);
+ } else {
+ this->unk330 = false;
+ if (this->unk290 < 3) {
+ if (!(gSaveContext.save.saveInfo.weekEventReg[14] & 2)) {
+ gSaveContext.save.saveInfo.weekEventReg[14] |= 2;
+ }
+ EnPoComposer_SetupPlayCurse(this);
+ } else {
+ EnPoComposer_SetupStartedCutscene(this);
+ }
+ }
+ }
+
+ this->lastCsAction = COMPOSER_CS_ACTION_NONE;
+ return false;
+}
+
+void EnPoComposer_StepLightAlpha(EnPoComposer* this) {
+ if (this->visible == true && this->lightColor.a != 255) {
+ if (this->lightColor.a > 247) {
+ this->lightColor.a = 255;
+ } else {
+ this->lightColor.a = this->lightColor.a + 7;
+ }
+ } else if (!this->visible && this->lightColor.a != 0) {
+ if (this->lightColor.a < 8) {
+ this->lightColor.a = 0;
+ } else {
+ this->lightColor.a = this->lightColor.a - 7;
+ }
+ }
+}
+
+void EnPoComposer_StepLightColor(EnPoComposer* this) {
+ s16 color;
+
+ color = this->lightColor.r + 5;
+ this->lightColor.r = CLAMP_MAX(color, 255);
+
+ color = this->lightColor.g + 5;
+ this->lightColor.g = CLAMP_MAX(color, 255);
+
+ if (this->lightColor.b > 210) {
+ color = this->lightColor.b - 5;
+ this->lightColor.b = CLAMP_MIN(color, 210);
+ } else {
+ color = this->lightColor.b + 5;
+ this->lightColor.b = CLAMP_MAX(color, 210);
+ }
+}
+
+void EnPoComposer_UpdateEnvColor(EnPoComposer* this) {
+ f32 temp_fv0;
+ u32 temp_v0;
+
+ if (this->actionFunc == EnPoComposer_Appear && this->skelAnime.curFrame < 12.0f) {
+ temp_v0 = 55.0f + this->skelAnime.curFrame * 16.66f;
+ this->envColor.b = temp_v0;
+ this->envColor.g = temp_v0;
+ this->envColor.r = temp_v0;
+ this->envColor.a = this->skelAnime.curFrame * 16.666666f;
+ } else {
+ temp_fv0 = Rand_ZeroOne();
+ this->envColor.r = 225 + (s32)(temp_fv0 * 30.0f);
+ this->envColor.g = 155 + (s32)(temp_fv0 * 100.0f);
+ this->envColor.b = 95 + (s32)(temp_fv0 * 160.0f);
+ this->envColor.a = 200;
+ }
+ if (this->lightColor.a == 0) {
+ this->envColor.a = 0;
+ }
+}
+
+void EnPoComposer_UpdateCollision(EnPoComposer* this, PlayState* play) {
+ Collider_UpdateCylinder(&this->actor, &this->bodyCollider);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->bodyCollider.base);
+ CollisionCheck_SetOC(play, &play->colChkCtx, &this->lanternCollider.base);
+}
+
+void EnPoComposer_Update(Actor* thisx, PlayState* play) {
+ EnPoComposer* this = THIS;
+
+ EnPoComposer_UpdateEnvColor(this);
+ SkelAnime_Update(&this->skelAnime);
+ Actor_SetFocus(&this->actor, 42.0f);
+
+ this->actionFunc(this, play);
+
+ if (!EnPoComposer_UpdateAction(this, play)) {
+ EnPoComposer_UpdateCollision(this, play);
+ }
+}
+
+s32 EnPoComposer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* thisx,
+ Gfx** gfx) {
+ EnPoComposer* this = THIS;
+
+ if (this->lightColor.a == 0 || limbIndex == OBJECT_PO_COMPOSER_LIMB_09) { // lantern
+ *dList = NULL;
+ } else if (PO_COMPOSER_IS_FLAT(&this->actor) && limbIndex == OBJECT_PO_COMPOSER_LIMB_0A) { // head
+ *dList = object_po_composer_DL_006FD8; // flat head
+ }
+
+ if (limbIndex == 19) {
+ //! @bug skeleton does not have a limb 19, this is leftover from OoT Poes
+ gDPPipeSync((*gfx)++);
+ gDPSetEnvColor((*gfx)++, this->lightColor.r, this->lightColor.g, this->lightColor.b, this->lightColor.a);
+ }
+
+ return 0;
+}
+
+void EnPoComposer_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) {
+ EnPoComposer* this = THIS;
+
+ Collider_UpdateSpheres(limbIndex, &this->lanternCollider);
+ if (limbIndex == OBJECT_PO_COMPOSER_LIMB_09) {
+ Matrix_Get(&this->lanternMtxF);
+ }
+}
+
+void EnPoComposer_Draw(Actor* thisx, PlayState* play) {
+ EnPoComposer* this = THIS;
+ s32 pad;
+ Gfx* dl;
+ Color_RGBA8* clothingColor;
+ Color_RGBA8* var_t0;
+ Vec3f sp88;
+ Vec3s lightPos;
+
+ OPEN_DISPS(play->state.gfxCtx);
+
+ EnPoComposer_StepLightColor(this);
+
+ // Select colors
+
+ if (PO_COMPOSER_IS_FLAT(&this->actor)) {
+ clothingColor = &D_80BC694C;
+ var_t0 = &D_80BC6954;
+ } else {
+ clothingColor = &D_80BC6948;
+ var_t0 = &D_80BC6950;
+ }
+
+ // Draw skeleton
+
+ if (this->lightColor.a == 255 || this->lightColor.a == 0) {
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+
+ gSPSegment(POLY_OPA_DISP++, 0x08,
+ Gfx_EnvColor(play->state.gfxCtx, this->lightColor.r, this->lightColor.g, this->lightColor.b,
+ this->lightColor.a));
+ gSPSegment(
+ POLY_OPA_DISP++, 0x0A,
+ Gfx_EnvColor(play->state.gfxCtx, clothingColor->r, clothingColor->g, clothingColor->b, this->lightColor.a));
+ gSPSegment(POLY_OPA_DISP++, 0x0B,
+ Gfx_EnvColor(play->state.gfxCtx, var_t0->r, var_t0->g, var_t0->b, this->lightColor.a));
+ gSPSegment(POLY_OPA_DISP++, 0x0C, D_801AEFA0);
+
+ POLY_OPA_DISP =
+ SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
+ EnPoComposer_OverrideLimbDraw, EnPoComposer_PostLimbDraw, &this->actor, POLY_OPA_DISP);
+ } else {
+ Gfx_SetupDL25_Opa(play->state.gfxCtx);
+ Gfx_SetupDL25_Xlu(play->state.gfxCtx);
+
+ gSPSegment(POLY_XLU_DISP++, 0x08,
+ Gfx_EnvColor(play->state.gfxCtx, this->lightColor.r, this->lightColor.g, this->lightColor.b,
+ this->lightColor.a));
+ gSPSegment(
+ POLY_XLU_DISP++, 0x0A,
+ Gfx_EnvColor(play->state.gfxCtx, clothingColor->r, clothingColor->g, clothingColor->b, this->lightColor.a));
+ gSPSegment(POLY_XLU_DISP++, 0x0B,
+ Gfx_EnvColor(play->state.gfxCtx, var_t0->r, var_t0->g, var_t0->b, this->lightColor.a));
+ gSPSegment(POLY_XLU_DISP++, 0x0C, D_801AEF88);
+
+ POLY_XLU_DISP =
+ SkelAnime_DrawFlex(play, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
+ EnPoComposer_OverrideLimbDraw, EnPoComposer_PostLimbDraw, &this->actor, POLY_XLU_DISP);
+ }
+
+ if (this->lightColor.a != 0) {
+ // Draw lantern if visible
+
+ if (this->lightColor.a == 255) {
+ Scene_SetRenderModeXlu(play, 0, 1);
+ dl = POLY_OPA_DISP;
+ } else {
+ Scene_SetRenderModeXlu(play, 1, 2);
+ dl = POLY_XLU_DISP;
+ }
+
+ gDPPipeSync(&dl[0]);
+ gDPSetEnvColor(&dl[1], this->envColor.r, this->envColor.g, this->envColor.b, this->lightColor.a);
+
+ Matrix_Put(&this->lanternMtxF);
+ gSPMatrix(&dl[2], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
+
+ gSPDisplayList(&dl[3], object_po_composer_DL_006E08); // lantern base
+ gSPDisplayList(&dl[4], object_po_composer_DL_006F38); // lantern enclosure
+
+ gDPPipeSync(&dl[5]);
+ gDPSetEnvColor(&dl[6], clothingColor->r, clothingColor->g, clothingColor->b, this->lightColor.a);
+ gSPDisplayList(&dl[7], object_po_composer_DL_006EA8); // lantern top
+
+ if (this->lightColor.a == 255) {
+ POLY_OPA_DISP = &dl[8];
+ } else {
+ POLY_XLU_DISP = &dl[8];
+ }
+ }
+
+ Matrix_Put(&play->billboardMtxF);
+ Matrix_MultVecZ(15.0f, &sp88);
+ lightPos = this->lanternCollider.elements[0].dim.worldSphere.center;
+ lightPos.x += (s16)sp88.x;
+ lightPos.y += (s16)sp88.y;
+ lightPos.z += (s16)sp88.z;
+
+ Lights_PointGlowSetInfo(&this->lightInfo, lightPos.x, lightPos.y, lightPos.z, this->envColor.r, this->envColor.g,
+ this->envColor.b, this->envColor.a * 0.78431374f);
+
+ CLOSE_DISPS(play->state.gfxCtx);
+}
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
index a42b5048f..8eb1d8ebd 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
@@ -2,6 +2,24 @@
#define Z_EN_PO_COMPOSER_H
#include "global.h"
+#include "objects/object_po_composer/object_po_composer.h"
+
+#define PO_COMPOSER_IS_FLAT(actor) ((actor)->params & 0x8000)
+
+typedef enum {
+ COMPOSER_CS_ACTION_IDLE = 1,
+ COMPOSER_CS_ACTION_APPEAR_SPIN,
+ COMPOSER_CS_ACTION_IDLE2,
+ COMPOSER_CS_ACTION_RAISE_ARMS,
+ COMPOSER_CS_ACTION_LOWER_ARMS,
+ COMPOSER_CS_ACTION_PLAY_CURSE,
+ COMPOSER_CS_ACTION_ROLL,
+ COMPOSER_CS_ACTION_APPEAR,
+ COMPOSER_CS_ACTION_DISAPPEAR,
+ COMPOSER_CS_ACTION_DONE,
+
+ COMPOSER_CS_ACTION_NONE = 99
+} EnPoComposerCutsceneAction;
struct EnPoComposer;
@@ -9,9 +27,26 @@ typedef void (*EnPoComposerActionFunc)(struct EnPoComposer*, PlayState*);
typedef struct EnPoComposer {
/* 0x000 */ Actor actor;
- /* 0x144 */ char unk_144[0xF0];
+ /* 0x144 */ ColliderCylinder bodyCollider;
+ /* 0x190 */ ColliderJntSph lanternCollider;
+ /* 0x1B0 */ ColliderJntSphElement lanternColliderElements[1];
+ /* 0x1F0 */ SkelAnime skelAnime;
/* 0x234 */ EnPoComposerActionFunc actionFunc;
- /* 0x238 */ char unk_238[0x108];
+ /* 0x238 */ MtxF lanternMtxF;
+ /* 0x278 */ LightNode* lightNode;
+ /* 0x27C */ LightInfo lightInfo;
+ /* 0x28A */ char unk_28A[0x6];
+ /* 0x290 */ s32 unk290; // cutscene to play
+ /* 0x294 */ Vec3s jointTable[OBJECT_PO_COMPOSER_LIMB_MAX];
+ /* 0x2DC */ Vec3s morphTable[OBJECT_PO_COMPOSER_LIMB_MAX];
+ /* 0x324 */ s16 csIndices[4];
+ /* 0x32C */ s16 actionTimer;
+ /* 0x32E */ s16 csActionTimer;
+ /* 0x330 */ s16 unk330; // boolean, do respond to cs actions?
+ /* 0x332 */ s16 visible;
+ /* 0x334 */ u16 lastCsAction;
+ /* 0x336 */ Color_RGBA8 lightColor;
+ /* 0x33A */ Color_RGBA8 envColor;
} EnPoComposer; // size = 0x340
#endif // Z_EN_PO_COMPOSER_H
From 4c1e0be9f09846eaa9e9f5f3dd410f2ac494baaf Mon Sep 17 00:00:00 2001
From: Thar0 <17233964+Thar0@users.noreply.github.com>
Date: Sun, 24 Sep 2023 02:20:19 +0100
Subject: [PATCH 2/6] Few more labels and document object
---
assets/xml/objects/object_po_composer.xml | 80 ++++---
.../ovl_En_Po_Composer/z_en_po_composer.c | 198 +++++++++---------
.../ovl_En_Po_Composer/z_en_po_composer.h | 37 ++--
3 files changed, 172 insertions(+), 143 deletions(-)
diff --git a/assets/xml/objects/object_po_composer.xml b/assets/xml/objects/object_po_composer.xml
index 40d77d827..96c9a6c17 100644
--- a/assets/xml/objects/object_po_composer.xml
+++ b/assets/xml/objects/object_po_composer.xml
@@ -1,28 +1,36 @@
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -35,17 +43,21 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
index 0f88f364d..1089446bc 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
@@ -1,7 +1,7 @@
/*
* File: z_en_po_composer.c
* Overlay: ovl_En_Po_Composer
- * Description: Poe Composers
+ * Description: Poe Composers Flat and Sharp
*/
#include "z_en_po_composer.h"
@@ -129,49 +129,50 @@ static DamageTable sDamageTable = {
};
typedef enum {
- PO_COMPOSER_ANIM_IDLE_STILL,
- PO_COMPOSER_ANIM_APPEAR_DISAPPEAR,
- PO_COMPOSER_ANIM_IDLE,
- PO_COMPOSER_ANIM_RAISE_ARMS,
- PO_COMPOSER_ANIM_ARMS_RAISED,
- PO_COMPOSER_ANIM_LOWER_ARMS,
- PO_COMPOSER_ANIM_IDLE_FACING_DOWN,
- PO_COMPOSER_ANIM_BEGIN_PLAYING_CURSE,
- PO_COMPOSER_ANIM_PLAYING_CURSE,
- PO_COMPOSER_ANIM_BEGIN_ROLLING,
- PO_COMPOSER_ANIM_ROLLING,
- PO_COMPOSER_ANIM_FLEE,
- PO_COMPOSER_ANIM_ATTACK,
- PO_COMPOSER_ANIM_MAX,
+ /* 0 */ PO_COMPOSER_ANIM_IDLE_STILL,
+ /* 1 */ PO_COMPOSER_ANIM_APPEAR_DISAPPEAR,
+ /* 2 */ PO_COMPOSER_ANIM_IDLE,
+ /* 3 */ PO_COMPOSER_ANIM_RAISE_ARMS,
+ /* 4 */ PO_COMPOSER_ANIM_ARMS_RAISED,
+ /* 5 */ PO_COMPOSER_ANIM_LOWER_ARMS,
+ /* 6 */ PO_COMPOSER_ANIM_IDLE_FACING_DOWN,
+ /* 7 */ PO_COMPOSER_ANIM_BEGIN_PLAYING_CURSE,
+ /* 8 */ PO_COMPOSER_ANIM_PLAYING_CURSE,
+ /* 9 */ PO_COMPOSER_ANIM_BEGIN_ROLLING,
+ /* 10 */ PO_COMPOSER_ANIM_ROLLING,
+ /* 11 */ PO_COMPOSER_ANIM_FLEE,
+ /* 12 */ PO_COMPOSER_ANIM_ATTACK,
+
+ /* 13 */ PO_COMPOSER_ANIM_MAX
} EnPoComposerAnim;
static AnimationInfo sAnimationInfo[PO_COMPOSER_ANIM_MAX] = {
- /* 0 */ { &object_po_composer_Anim_003DB0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 1 */ { &object_po_composer_Anim_003954, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
- /* 2 */ { &object_po_composer_Anim_00188C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 3 */ { &object_po_composer_Anim_000570, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 4 */ { &object_po_composer_Anim_001F44, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 5 */ { &object_po_composer_Anim_0023E8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 6 */ { &object_po_composer_Anim_002AE0, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 7 */ { &object_po_composer_Anim_000A58, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 8 */ { &object_po_composer_Anim_001420, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 9 */ { &object_po_composer_Anim_003024, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 10 */ { &object_po_composer_Anim_00334C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 11 */ { &object_po_composer_Anim_0015B8, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 12 */ { &object_po_composer_Anim_00020C, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
+ /* 0 */ { &gPoeComposerIdleStillAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 1 */ { &gPoeComposerAppearDisappearAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
+ /* 2 */ { &gPoeComposerIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 3 */ { &gPoeComposerRaiseArmsAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 4 */ { &gPoeComposerArmsRaisedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 5 */ { &gPoeComposerLowerArmsAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 6 */ { &gPoeComposerIdleLookingDownAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 7 */ { &gPoeComposerBeginPlayingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 8 */ { &gPoeComposerPlayingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 9 */ { &gPoeComposerBeginRollingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 10 */ { &gPoeComposerRollingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 11 */ { &gPoeComposerFleeAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 12 */ { &gPoeComposerAttackAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
};
static Color_RGBA8 sLightColorInit = { 255, 255, 210, 0 };
static Color_RGBA8 sEnvColorInit = { 0, 0, 0, 255 };
-Color_RGBA8 D_80BC6948 = { 75, 20, 25, 255 };
+static Color_RGBA8 sSharpClothingColor1 = { 75, 20, 25, 255 };
-Color_RGBA8 D_80BC694C = { 80, 110, 90, 255 };
+static Color_RGBA8 sFlatClothingColor1 = { 80, 110, 90, 255 };
-Color_RGBA8 D_80BC6950 = { 90, 85, 50, 255 };
+static Color_RGBA8 sSharpClothingColor2 = { 90, 85, 50, 255 };
-Color_RGBA8 D_80BC6954 = { 100, 90, 100, 255 };
+static Color_RGBA8 sFlatClothingColor2 = { 100, 90, 100, 255 };
static InitChainEntry sInitChain[] = {
ICHAIN_F32(targetArrowOffset, 3200, ICHAIN_STOP),
@@ -184,8 +185,8 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &object_po_composer_Skel_009930, &object_po_composer_Anim_00188C,
- this->jointTable, this->morphTable, OBJECT_PO_COMPOSER_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gPoeComposerSkel, &gPoeComposerIdleAnim,
+ this->jointTable, this->morphTable, PO_COMPOSER_LIMB_MAX);
Collider_InitJntSph(play, &this->lanternCollider);
Collider_SetJntSph(play, &this->lanternCollider, &this->actor, &sJntSphInit, this->lanternColliderElements);
Collider_InitCylinder(play, &this->bodyCollider);
@@ -194,21 +195,21 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
this->lightNode = LightContext_InsertLight(play, &play->lightCtx, &this->lightInfo);
Lights_PointGlowSetInfo(&this->lightInfo, this->actor.home.pos.x, this->actor.home.pos.y, this->actor.home.pos.z,
255, 255, 255, 0);
- this->actor.flags &= ~1;
+ this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->lightColor = sLightColorInit;
this->envColor = sEnvColorInit;
this->lastCsAction = COMPOSER_CS_ACTION_NONE;
if (PO_COMPOSER_IS_FLAT(&this->actor)) {
- this->unk290 = 0;
- this->unk330 = true;
+ this->sharpCsNum = 0;
+ this->inCutscene = true;
EnPoComposer_SetupStartedCutscene(this);
} else if (this->actor.params & 0x4000) {
if (gSaveContext.save.entrance != 0x20A0) {
Actor_Kill(&this->actor);
} else {
- this->unk290 = 0;
- this->unk330 = true;
+ this->sharpCsNum = SHARP_CS_ENCOUNTER_FIRST;
+ this->inCutscene = true;
EnPoComposer_SetupStartedCutscene(this);
}
} else {
@@ -221,7 +222,7 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
}
for (i = 0; i < ARRAY_COUNT(this->csIndices); i++) {
- if (csIndex == -1) {
+ if (csIndex == CS_ID_NONE) {
break;
}
this->csIndices[i] = csIndex;
@@ -229,11 +230,11 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
}
if (gSaveContext.save.saveInfo.weekEventReg[14] & 2) {
- this->unk290 = 1;
+ this->sharpCsNum = SHARP_CS_ENCOUNTER_OTHER;
} else {
- this->unk290 = 0;
+ this->sharpCsNum = SHARP_CS_ENCOUNTER_FIRST;
}
- this->unk330 = false;
+ this->inCutscene = false;
EnPoComposer_SetupAwaitPlayer(this);
}
}
@@ -258,19 +259,19 @@ void EnPoComposer_AwaitPlayer(EnPoComposer* this, PlayState* play) {
}
void EnPoComposer_SetupStartCutscene(EnPoComposer* this) {
- this->unk330 = true;
+ this->inCutscene = true;
this->actionFunc = EnPoComposer_StartCutscene;
}
void EnPoComposer_StartCutscene(EnPoComposer* this, PlayState* play) {
- if (CutsceneManager_IsNext(this->csIndices[this->unk290])) {
- CutsceneManager_Start(this->csIndices[this->unk290], &this->actor);
+ if (CutsceneManager_IsNext(this->csIndices[this->sharpCsNum])) {
+ CutsceneManager_Start(this->csIndices[this->sharpCsNum], &this->actor);
EnPoComposer_SetupStartedCutscene(this);
} else {
- if (CutsceneManager_GetCurrentCsId() == 0x7C) {
- CutsceneManager_Stop(0x7C);
+ if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
+ CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- CutsceneManager_Queue(this->csIndices[this->unk290]);
+ CutsceneManager_Queue(this->csIndices[this->sharpCsNum]);
}
}
@@ -314,18 +315,19 @@ void EnPoComposer_PlayCurse(EnPoComposer* this, PlayState* play) {
if (play->msgCtx.ocarinaMode == 3) {
switch (play->msgCtx.lastPlayedSong) {
case OCARINA_SONG_STORMS:
- this->unk290 = 3;
+ this->sharpCsNum = SHARP_CS_SONG_STORMS;
EnPoComposer_SetupStartCutscene(this);
break;
+
case OCARINA_SONG_HEALING:
- this->unk290 = 2;
+ this->sharpCsNum = SHARP_CS_SONG_HEALING;
EnPoComposer_SetupStartCutscene(this);
break;
}
}
// Play sharp's curse bgm
- func_801A1FB4(3, &this->actor.projectedPos, NA_BGM_SHARPS_CURSE, 2000.0f);
+ func_801A1FB4(SEQ_PLAYER_BGM_SUB, &this->actor.projectedPos, NA_BGM_SHARPS_CURSE, 2000.0f);
}
void EnPoComposer_SetupIdleStill(EnPoComposer* this) {
@@ -430,48 +432,59 @@ void EnPoComposer_SharpCutsceneDone(EnPoComposer* this) {
}
s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
- u16 actorAction = PO_COMPOSER_IS_FLAT(&this->actor) ? 0x1E2 : 0x1E1;
- s32 actorActionIdx;
+ u16 cueType = PO_COMPOSER_IS_FLAT(&this->actor) ? 0x1E2 : 0x1E1;
+ s32 cueChannel;
- if (!this->unk330) {
+ if (!this->inCutscene) {
return false;
}
- if (Cutscene_IsCueInChannel(play, actorAction)) {
- actorActionIdx = Cutscene_GetCueChannel(play, actorAction);
- if (this->lastCsAction != play->csCtx.actorCues[actorActionIdx]->id) {
- this->lastCsAction = play->csCtx.actorCues[actorActionIdx]->id;
- switch (play->csCtx.actorCues[actorActionIdx]->id) {
+ if (Cutscene_IsCueInChannel(play, cueType)) {
+ cueChannel = Cutscene_GetCueChannel(play, cueType);
+
+ if (this->lastCsAction != play->csCtx.actorCues[cueChannel]->id) {
+ this->lastCsAction = play->csCtx.actorCues[cueChannel]->id;
+
+ switch (play->csCtx.actorCues[cueChannel]->id) {
case COMPOSER_CS_ACTION_IDLE: // loop idle
EnPoComposer_SetupIdleStill(this);
break;
+
case COMPOSER_CS_ACTION_APPEAR_SPIN: // appear/disappear -> loop idle
EnPoComposer_SetupAppear(this);
break;
+
case COMPOSER_CS_ACTION_IDLE2: // loop sharp idle
EnPoComposer_SetupIdle(this);
break;
+
case COMPOSER_CS_ACTION_RAISE_ARMS: // raise arms -> loop arms raised
EnPoComposer_SetupRaiseArms(this);
break;
+
case COMPOSER_CS_ACTION_LOWER_ARMS: // lower arms -> loop idle
EnPoComposer_SetupLowerArms(this);
break;
+
case COMPOSER_CS_ACTION_PLAY_CURSE: // begin playing -> loop playing
EnPoComposer_SetupCutscenePlayCurse(this);
break;
+
case COMPOSER_CS_ACTION_ROLL: // begin rolling -> loop rolling
EnPoComposer_SetupRoll(this);
break;
+
case COMPOSER_CS_ACTION_APPEAR: // appear
this->visible = true;
break;
+
case COMPOSER_CS_ACTION_DISAPPEAR: // disappear
this->visible = false;
Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR);
break;
+
case COMPOSER_CS_ACTION_DONE:
- if (actorAction == 0x1E1) {
+ if (cueType == 0x1E1) {
EnPoComposer_SharpCutsceneDone(this);
} else {
Actor_Kill(&this->actor);
@@ -479,15 +492,16 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
break;
}
}
+
if (this->actionFunc != EnPoComposer_Appear) {
- Cutscene_ActorTranslateAndYaw(&this->actor, play, actorActionIdx);
+ Cutscene_ActorTranslateAndYaw(&this->actor, play, cueChannel);
} else {
- Cutscene_ActorTranslate(&this->actor, play, actorActionIdx);
+ Cutscene_ActorTranslate(&this->actor, play, cueChannel);
}
EnPoComposer_StepLightAlpha(this);
- if (this->unk290 == 3 && play->csCtx.curFrame == 204) {
+ if (this->sharpCsNum == SHARP_CS_SONG_STORMS && play->csCtx.curFrame == 204) {
Audio_PlaySfx(NA_SE_SY_DIZZY_EFFECT);
}
@@ -498,14 +512,16 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
}
if (this->actionFunc != EnPoComposer_StartedCutscene && this->actionFunc != EnPoComposer_StartCutscene &&
- this->actionFunc != EnPoComposer_PlayCurse && play->csCtx.state == 0) {
+ this->actionFunc != EnPoComposer_PlayCurse && play->csCtx.state == CS_STATE_IDLE) {
+
if (PO_COMPOSER_IS_FLAT(&this->actor)) {
EnPoComposer_SetupStartedCutscene(this);
} else if (this->actor.params & 0x4000) {
EnPoComposer_SetupStartedCutscene(this);
} else {
- this->unk330 = false;
- if (this->unk290 < 3) {
+ this->inCutscene = false;
+
+ if (this->sharpCsNum < SHARP_CS_SONG_STORMS) {
if (!(gSaveContext.save.saveInfo.weekEventReg[14] & 2)) {
gSaveContext.save.saveInfo.weekEventReg[14] |= 2;
}
@@ -555,20 +571,14 @@ void EnPoComposer_StepLightColor(EnPoComposer* this) {
}
void EnPoComposer_UpdateEnvColor(EnPoComposer* this) {
- f32 temp_fv0;
- u32 temp_v0;
-
if (this->actionFunc == EnPoComposer_Appear && this->skelAnime.curFrame < 12.0f) {
- temp_v0 = 55.0f + this->skelAnime.curFrame * 16.66f;
- this->envColor.b = temp_v0;
- this->envColor.g = temp_v0;
- this->envColor.r = temp_v0;
+ this->envColor.r = this->envColor.g = this->envColor.b = 55.0f + this->skelAnime.curFrame * 16.66f;
this->envColor.a = this->skelAnime.curFrame * 16.666666f;
} else {
- temp_fv0 = Rand_ZeroOne();
- this->envColor.r = 225 + (s32)(temp_fv0 * 30.0f);
- this->envColor.g = 155 + (s32)(temp_fv0 * 100.0f);
- this->envColor.b = 95 + (s32)(temp_fv0 * 160.0f);
+ f32 rand = Rand_ZeroOne();
+ this->envColor.r = 225 + (s32)(rand * 30.0f);
+ this->envColor.g = 155 + (s32)(rand * 100.0f);
+ this->envColor.b = 95 + (s32)(rand * 160.0f);
this->envColor.a = 200;
}
if (this->lightColor.a == 0) {
@@ -600,10 +610,10 @@ s32 EnPoComposer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V
Gfx** gfx) {
EnPoComposer* this = THIS;
- if (this->lightColor.a == 0 || limbIndex == OBJECT_PO_COMPOSER_LIMB_09) { // lantern
+ if (this->lightColor.a == 0 || limbIndex == PO_COMPOSER_LIMB_LANTERN) { // lantern
*dList = NULL;
- } else if (PO_COMPOSER_IS_FLAT(&this->actor) && limbIndex == OBJECT_PO_COMPOSER_LIMB_0A) { // head
- *dList = object_po_composer_DL_006FD8; // flat head
+ } else if (PO_COMPOSER_IS_FLAT(&this->actor) && limbIndex == PO_COMPOSER_LIMB_HEAD) { // head
+ *dList = gPoeComposerFlatHeadDL; // flat head
}
if (limbIndex == 19) {
@@ -619,7 +629,7 @@ void EnPoComposer_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
EnPoComposer* this = THIS;
Collider_UpdateSpheres(limbIndex, &this->lanternCollider);
- if (limbIndex == OBJECT_PO_COMPOSER_LIMB_09) {
+ if (limbIndex == PO_COMPOSER_LIMB_LANTERN) {
Matrix_Get(&this->lanternMtxF);
}
}
@@ -630,7 +640,7 @@ void EnPoComposer_Draw(Actor* thisx, PlayState* play) {
Gfx* dl;
Color_RGBA8* clothingColor;
Color_RGBA8* var_t0;
- Vec3f sp88;
+ Vec3f lightOffset;
Vec3s lightPos;
OPEN_DISPS(play->state.gfxCtx);
@@ -640,11 +650,11 @@ void EnPoComposer_Draw(Actor* thisx, PlayState* play) {
// Select colors
if (PO_COMPOSER_IS_FLAT(&this->actor)) {
- clothingColor = &D_80BC694C;
- var_t0 = &D_80BC6954;
+ clothingColor = &sFlatClothingColor1;
+ var_t0 = &sFlatClothingColor2;
} else {
- clothingColor = &D_80BC6948;
- var_t0 = &D_80BC6950;
+ clothingColor = &sSharpClothingColor1;
+ var_t0 = &sSharpClothingColor2;
}
// Draw skeleton
@@ -701,12 +711,12 @@ void EnPoComposer_Draw(Actor* thisx, PlayState* play) {
Matrix_Put(&this->lanternMtxF);
gSPMatrix(&dl[2], Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
- gSPDisplayList(&dl[3], object_po_composer_DL_006E08); // lantern base
- gSPDisplayList(&dl[4], object_po_composer_DL_006F38); // lantern enclosure
+ gSPDisplayList(&dl[3], gPoeComposerLanternBaseDL);
+ gSPDisplayList(&dl[4], gPoeComposerLanternGlassDL);
gDPPipeSync(&dl[5]);
gDPSetEnvColor(&dl[6], clothingColor->r, clothingColor->g, clothingColor->b, this->lightColor.a);
- gSPDisplayList(&dl[7], object_po_composer_DL_006EA8); // lantern top
+ gSPDisplayList(&dl[7], gPoeComposerLanternTopDL);
if (this->lightColor.a == 255) {
POLY_OPA_DISP = &dl[8];
@@ -716,11 +726,11 @@ void EnPoComposer_Draw(Actor* thisx, PlayState* play) {
}
Matrix_Put(&play->billboardMtxF);
- Matrix_MultVecZ(15.0f, &sp88);
+ Matrix_MultVecZ(15.0f, &lightOffset);
lightPos = this->lanternCollider.elements[0].dim.worldSphere.center;
- lightPos.x += (s16)sp88.x;
- lightPos.y += (s16)sp88.y;
- lightPos.z += (s16)sp88.z;
+ lightPos.x += (s16)lightOffset.x;
+ lightPos.y += (s16)lightOffset.y;
+ lightPos.z += (s16)lightOffset.z;
Lights_PointGlowSetInfo(&this->lightInfo, lightPos.x, lightPos.y, lightPos.z, this->envColor.r, this->envColor.g,
this->envColor.b, this->envColor.a * 0.78431374f);
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
index 8eb1d8ebd..af8c0ecb1 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
@@ -7,20 +7,27 @@
#define PO_COMPOSER_IS_FLAT(actor) ((actor)->params & 0x8000)
typedef enum {
- COMPOSER_CS_ACTION_IDLE = 1,
- COMPOSER_CS_ACTION_APPEAR_SPIN,
- COMPOSER_CS_ACTION_IDLE2,
- COMPOSER_CS_ACTION_RAISE_ARMS,
- COMPOSER_CS_ACTION_LOWER_ARMS,
- COMPOSER_CS_ACTION_PLAY_CURSE,
- COMPOSER_CS_ACTION_ROLL,
- COMPOSER_CS_ACTION_APPEAR,
- COMPOSER_CS_ACTION_DISAPPEAR,
- COMPOSER_CS_ACTION_DONE,
+ /* 1 */ COMPOSER_CS_ACTION_IDLE = 1,
+ /* 2 */ COMPOSER_CS_ACTION_APPEAR_SPIN,
+ /* 3 */ COMPOSER_CS_ACTION_IDLE2,
+ /* 4 */ COMPOSER_CS_ACTION_RAISE_ARMS,
+ /* 5 */ COMPOSER_CS_ACTION_LOWER_ARMS,
+ /* 6 */ COMPOSER_CS_ACTION_PLAY_CURSE,
+ /* 7 */ COMPOSER_CS_ACTION_ROLL,
+ /* 8 */ COMPOSER_CS_ACTION_APPEAR,
+ /* 9 */ COMPOSER_CS_ACTION_DISAPPEAR,
+ /* 10 */ COMPOSER_CS_ACTION_DONE,
- COMPOSER_CS_ACTION_NONE = 99
+ /* 99 */ COMPOSER_CS_ACTION_NONE = 99
} EnPoComposerCutsceneAction;
+typedef enum {
+ /* 0 */ SHARP_CS_ENCOUNTER_FIRST,
+ /* 1 */ SHARP_CS_ENCOUNTER_OTHER,
+ /* 2 */ SHARP_CS_SONG_HEALING,
+ /* 3 */ SHARP_CS_SONG_STORMS
+} SharpCsId;
+
struct EnPoComposer;
typedef void (*EnPoComposerActionFunc)(struct EnPoComposer*, PlayState*);
@@ -36,13 +43,13 @@ typedef struct EnPoComposer {
/* 0x278 */ LightNode* lightNode;
/* 0x27C */ LightInfo lightInfo;
/* 0x28A */ char unk_28A[0x6];
- /* 0x290 */ s32 unk290; // cutscene to play
- /* 0x294 */ Vec3s jointTable[OBJECT_PO_COMPOSER_LIMB_MAX];
- /* 0x2DC */ Vec3s morphTable[OBJECT_PO_COMPOSER_LIMB_MAX];
+ /* 0x290 */ s32 sharpCsNum;
+ /* 0x294 */ Vec3s jointTable[PO_COMPOSER_LIMB_MAX];
+ /* 0x2DC */ Vec3s morphTable[PO_COMPOSER_LIMB_MAX];
/* 0x324 */ s16 csIndices[4];
/* 0x32C */ s16 actionTimer;
/* 0x32E */ s16 csActionTimer;
- /* 0x330 */ s16 unk330; // boolean, do respond to cs actions?
+ /* 0x330 */ s16 inCutscene;
/* 0x332 */ s16 visible;
/* 0x334 */ u16 lastCsAction;
/* 0x336 */ Color_RGBA8 lightColor;
From de9f4bd947925e16728d87612ce1b52316118cf3 Mon Sep 17 00:00:00 2001
From: Thar0 <17233964+Thar0@users.noreply.github.com>
Date: Mon, 25 Sep 2023 18:06:51 +0100
Subject: [PATCH 3/6] Review changes
---
assets/xml/objects/object_po_composer.xml | 2 +-
.../ovl_En_Po_Composer/z_en_po_composer.c | 112 +++++++++---------
.../ovl_En_Po_Composer/z_en_po_composer.h | 28 ++---
3 files changed, 74 insertions(+), 68 deletions(-)
diff --git a/assets/xml/objects/object_po_composer.xml b/assets/xml/objects/object_po_composer.xml
index 96c9a6c17..67036066f 100644
--- a/assets/xml/objects/object_po_composer.xml
+++ b/assets/xml/objects/object_po_composer.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
index 1089446bc..daa4f6338 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
@@ -32,7 +32,7 @@ void EnPoComposer_SetupStartCutscene(EnPoComposer* this);
void EnPoComposer_SetupStartedCutscene(EnPoComposer* this);
void EnPoComposer_StepLightAlpha(EnPoComposer* this);
-const ActorInit En_Po_Composer_InitVars = {
+ActorInit En_Po_Composer_InitVars = {
ACTOR_EN_PO_COMPOSER,
ACTORCAT_ITEMACTION,
FLAGS,
@@ -74,7 +74,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[1] = {
BUMP_NONE,
OCELEM_ON,
},
- { 9, { { 0, -1500, 0 }, 10 }, 100 },
+ { PO_COMPOSER_LIMB_LANTERN, { { 0, -1500, 0 }, 10 }, 100 },
},
};
@@ -142,7 +142,6 @@ typedef enum {
/* 10 */ PO_COMPOSER_ANIM_ROLLING,
/* 11 */ PO_COMPOSER_ANIM_FLEE,
/* 12 */ PO_COMPOSER_ANIM_ATTACK,
-
/* 13 */ PO_COMPOSER_ANIM_MAX
} EnPoComposerAnim;
@@ -185,8 +184,8 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
- SkelAnime_InitFlex(play, &this->skelAnime, &gPoeComposerSkel, &gPoeComposerIdleAnim,
- this->jointTable, this->morphTable, PO_COMPOSER_LIMB_MAX);
+ SkelAnime_InitFlex(play, &this->skelAnime, &gPoeComposerSkel, &gPoeComposerIdleAnim, this->jointTable,
+ this->morphTable, PO_COMPOSER_LIMB_MAX);
Collider_InitJntSph(play, &this->lanternCollider);
Collider_SetJntSph(play, &this->lanternCollider, &this->actor, &sJntSphInit, this->lanternColliderElements);
Collider_InitCylinder(play, &this->bodyCollider);
@@ -198,38 +197,38 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->lightColor = sLightColorInit;
this->envColor = sEnvColorInit;
- this->lastCsAction = COMPOSER_CS_ACTION_NONE;
+ this->lastCsAction = COMPOSER_CUEID_NONE;
if (PO_COMPOSER_IS_FLAT(&this->actor)) {
this->sharpCsNum = 0;
this->inCutscene = true;
EnPoComposer_SetupStartedCutscene(this);
- } else if (this->actor.params & 0x4000) {
- if (gSaveContext.save.entrance != 0x20A0) {
+ } else if (PO_COMPOSER_4000(&this->actor)) {
+ if (gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 10)) {
Actor_Kill(&this->actor);
- } else {
- this->sharpCsNum = SHARP_CS_ENCOUNTER_FIRST;
- this->inCutscene = true;
- EnPoComposer_SetupStartedCutscene(this);
+ return;
}
+ this->sharpCsNum = SHARP_CS_ENCOUNTER_FIRST;
+ this->inCutscene = true;
+ EnPoComposer_SetupStartedCutscene(this);
} else {
s32 i;
- s16 csIndex = this->actor.csId;
+ s16 csId = this->actor.csId;
- if (gSaveContext.save.saveInfo.weekEventReg[14] & 4) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_04)) {
Actor_Kill(&this->actor);
return;
}
- for (i = 0; i < ARRAY_COUNT(this->csIndices); i++) {
- if (csIndex == CS_ID_NONE) {
+ for (i = 0; i < ARRAY_COUNT(this->csIds); i++) {
+ if (csId == CS_ID_NONE) {
break;
}
- this->csIndices[i] = csIndex;
- csIndex = CutsceneManager_GetAdditionalCsId(csIndex);
+ this->csIds[i] = csId;
+ csId = CutsceneManager_GetAdditionalCsId(csId);
}
- if (gSaveContext.save.saveInfo.weekEventReg[14] & 2) {
+ if (CHECK_WEEKEVENTREG(WEEKEVENTREG_14_02)) {
this->sharpCsNum = SHARP_CS_ENCOUNTER_OTHER;
} else {
this->sharpCsNum = SHARP_CS_ENCOUNTER_FIRST;
@@ -264,14 +263,14 @@ void EnPoComposer_SetupStartCutscene(EnPoComposer* this) {
}
void EnPoComposer_StartCutscene(EnPoComposer* this, PlayState* play) {
- if (CutsceneManager_IsNext(this->csIndices[this->sharpCsNum])) {
- CutsceneManager_Start(this->csIndices[this->sharpCsNum], &this->actor);
+ if (CutsceneManager_IsNext(this->csIds[this->sharpCsNum])) {
+ CutsceneManager_Start(this->csIds[this->sharpCsNum], &this->actor);
EnPoComposer_SetupStartedCutscene(this);
} else {
if (CutsceneManager_GetCurrentCsId() == CS_ID_GLOBAL_TALK) {
CutsceneManager_Stop(CS_ID_GLOBAL_TALK);
}
- CutsceneManager_Queue(this->csIndices[this->sharpCsNum]);
+ CutsceneManager_Queue(this->csIds[this->sharpCsNum]);
}
}
@@ -323,6 +322,9 @@ void EnPoComposer_PlayCurse(EnPoComposer* this, PlayState* play) {
this->sharpCsNum = SHARP_CS_SONG_HEALING;
EnPoComposer_SetupStartCutscene(this);
break;
+
+ default:
+ break;
}
}
@@ -370,7 +372,7 @@ void EnPoComposer_SetupRaiseArms(EnPoComposer* this) {
}
void EnPoComposer_RaiseArms(EnPoComposer* this, PlayState* play) {
- if (this->csActionTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ if ((this->csActionTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->csActionTimer++;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_ARMS_RAISED);
}
@@ -383,7 +385,7 @@ void EnPoComposer_SetupLowerArms(EnPoComposer* this) {
}
void EnPoComposer_LowerArms(EnPoComposer* this, PlayState* play) {
- if (this->csActionTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ if ((this->csActionTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->csActionTimer++;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE_FACING_DOWN);
}
@@ -396,7 +398,7 @@ void EnPoComposer_SetupCutscenePlayCurse(EnPoComposer* this) {
}
void EnPoComposer_CutscenePlayCurse(EnPoComposer* this, PlayState* play) {
- if (this->csActionTimer == 0 && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ if ((this->csActionTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->csActionTimer++;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_PLAYING_CURSE);
}
@@ -415,7 +417,7 @@ void EnPoComposer_Roll(EnPoComposer* this, PlayState* play) {
Actor_PlaySfx(&this->actor, NA_SE_EN_SHARP_REACTION);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_ROLLING);
}
- } else if (Animation_OnFrame(&this->skelAnime, 1.0f) && this->lightColor.a >= 33) {
+ } else if (Animation_OnFrame(&this->skelAnime, 1.0f) && (this->lightColor.a >= 33)) {
if (this->csActionTimer == 1) {
Actor_PlaySfx(&this->actor, NA_SE_EN_LAST3_DEAD_WIND2_OLD);
this->csActionTimer = 2;
@@ -427,12 +429,12 @@ void EnPoComposer_Roll(EnPoComposer* this, PlayState* play) {
}
void EnPoComposer_SharpCutsceneDone(EnPoComposer* this) {
- gSaveContext.save.saveInfo.weekEventReg[14] |= 4;
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_04);
Actor_Kill(&this->actor);
}
s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
- u16 cueType = PO_COMPOSER_IS_FLAT(&this->actor) ? 0x1E2 : 0x1E1;
+ u16 cueType = PO_COMPOSER_IS_FLAT(&this->actor) ? CS_CMD_ACTOR_CUE_482 : CS_CMD_ACTOR_CUE_481;
s32 cueChannel;
if (!this->inCutscene) {
@@ -446,50 +448,53 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
this->lastCsAction = play->csCtx.actorCues[cueChannel]->id;
switch (play->csCtx.actorCues[cueChannel]->id) {
- case COMPOSER_CS_ACTION_IDLE: // loop idle
+ case COMPOSER_CUEID_IDLE: // loop idle
EnPoComposer_SetupIdleStill(this);
break;
- case COMPOSER_CS_ACTION_APPEAR_SPIN: // appear/disappear -> loop idle
+ case COMPOSER_CUEID_APPEAR_SPIN: // appear/disappear -> loop idle
EnPoComposer_SetupAppear(this);
break;
- case COMPOSER_CS_ACTION_IDLE2: // loop sharp idle
+ case COMPOSER_CUEID_IDLE2: // loop sharp idle
EnPoComposer_SetupIdle(this);
break;
- case COMPOSER_CS_ACTION_RAISE_ARMS: // raise arms -> loop arms raised
+ case COMPOSER_CUEID_RAISE_ARMS: // raise arms -> loop arms raised
EnPoComposer_SetupRaiseArms(this);
break;
- case COMPOSER_CS_ACTION_LOWER_ARMS: // lower arms -> loop idle
+ case COMPOSER_CUEID_LOWER_ARMS: // lower arms -> loop idle
EnPoComposer_SetupLowerArms(this);
break;
- case COMPOSER_CS_ACTION_PLAY_CURSE: // begin playing -> loop playing
+ case COMPOSER_CUEID_PLAY_CURSE: // begin playing -> loop playing
EnPoComposer_SetupCutscenePlayCurse(this);
break;
- case COMPOSER_CS_ACTION_ROLL: // begin rolling -> loop rolling
+ case COMPOSER_CUEID_ROLL: // begin rolling -> loop rolling
EnPoComposer_SetupRoll(this);
break;
- case COMPOSER_CS_ACTION_APPEAR: // appear
+ case COMPOSER_CUEID_APPEAR: // appear
this->visible = true;
break;
- case COMPOSER_CS_ACTION_DISAPPEAR: // disappear
+ case COMPOSER_CUEID_DISAPPEAR: // disappear
this->visible = false;
Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR);
break;
- case COMPOSER_CS_ACTION_DONE:
- if (cueType == 0x1E1) {
+ case COMPOSER_CUEID_DONE:
+ if (cueType == CS_CMD_ACTOR_CUE_481) {
EnPoComposer_SharpCutsceneDone(this);
} else {
Actor_Kill(&this->actor);
}
break;
+
+ default:
+ break;
}
}
@@ -501,7 +506,7 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
EnPoComposer_StepLightAlpha(this);
- if (this->sharpCsNum == SHARP_CS_SONG_STORMS && play->csCtx.curFrame == 204) {
+ if ((this->sharpCsNum == SHARP_CS_SONG_STORMS) && (play->csCtx.curFrame == 204)) {
Audio_PlaySfx(NA_SE_SY_DIZZY_EFFECT);
}
@@ -516,14 +521,14 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
if (PO_COMPOSER_IS_FLAT(&this->actor)) {
EnPoComposer_SetupStartedCutscene(this);
- } else if (this->actor.params & 0x4000) {
+ } else if (PO_COMPOSER_4000(&this->actor)) {
EnPoComposer_SetupStartedCutscene(this);
} else {
this->inCutscene = false;
if (this->sharpCsNum < SHARP_CS_SONG_STORMS) {
- if (!(gSaveContext.save.saveInfo.weekEventReg[14] & 2)) {
- gSaveContext.save.saveInfo.weekEventReg[14] |= 2;
+ if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_14_02))) {
+ SET_WEEKEVENTREG(WEEKEVENTREG_14_02);
}
EnPoComposer_SetupPlayCurse(this);
} else {
@@ -532,22 +537,22 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
}
}
- this->lastCsAction = COMPOSER_CS_ACTION_NONE;
+ this->lastCsAction = COMPOSER_CUEID_NONE;
return false;
}
void EnPoComposer_StepLightAlpha(EnPoComposer* this) {
- if (this->visible == true && this->lightColor.a != 255) {
+ if ((this->visible == true) && (this->lightColor.a != 255)) {
if (this->lightColor.a > 247) {
this->lightColor.a = 255;
} else {
- this->lightColor.a = this->lightColor.a + 7;
+ this->lightColor.a += 7;
}
- } else if (!this->visible && this->lightColor.a != 0) {
+ } else if (!this->visible && (this->lightColor.a != 0)) {
if (this->lightColor.a < 8) {
this->lightColor.a = 0;
} else {
- this->lightColor.a = this->lightColor.a - 7;
+ this->lightColor.a -= 7;
}
}
}
@@ -571,11 +576,12 @@ void EnPoComposer_StepLightColor(EnPoComposer* this) {
}
void EnPoComposer_UpdateEnvColor(EnPoComposer* this) {
- if (this->actionFunc == EnPoComposer_Appear && this->skelAnime.curFrame < 12.0f) {
+ if ((this->actionFunc == EnPoComposer_Appear) && (this->skelAnime.curFrame < 12.0f)) {
this->envColor.r = this->envColor.g = this->envColor.b = 55.0f + this->skelAnime.curFrame * 16.66f;
this->envColor.a = this->skelAnime.curFrame * 16.666666f;
} else {
f32 rand = Rand_ZeroOne();
+
this->envColor.r = 225 + (s32)(rand * 30.0f);
this->envColor.g = 155 + (s32)(rand * 100.0f);
this->envColor.b = 95 + (s32)(rand * 160.0f);
@@ -610,10 +616,10 @@ s32 EnPoComposer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V
Gfx** gfx) {
EnPoComposer* this = THIS;
- if (this->lightColor.a == 0 || limbIndex == PO_COMPOSER_LIMB_LANTERN) { // lantern
+ if ((this->lightColor.a == 0) || (limbIndex == PO_COMPOSER_LIMB_LANTERN)) {
*dList = NULL;
- } else if (PO_COMPOSER_IS_FLAT(&this->actor) && limbIndex == PO_COMPOSER_LIMB_HEAD) { // head
- *dList = gPoeComposerFlatHeadDL; // flat head
+ } else if (PO_COMPOSER_IS_FLAT(&this->actor) && (limbIndex == PO_COMPOSER_LIMB_HEAD)) {
+ *dList = gPoeComposerFlatHeadDL;
}
if (limbIndex == 19) {
@@ -659,7 +665,7 @@ void EnPoComposer_Draw(Actor* thisx, PlayState* play) {
// Draw skeleton
- if (this->lightColor.a == 255 || this->lightColor.a == 0) {
+ if ((this->lightColor.a == 255) || (this->lightColor.a == 0)) {
Gfx_SetupDL25_Opa(play->state.gfxCtx);
gSPSegment(POLY_OPA_DISP++, 0x08,
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
index af8c0ecb1..c067b8d5e 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
@@ -5,20 +5,20 @@
#include "objects/object_po_composer/object_po_composer.h"
#define PO_COMPOSER_IS_FLAT(actor) ((actor)->params & 0x8000)
+#define PO_COMPOSER_4000(actor) ((actor)->params & 0x4000)
typedef enum {
- /* 1 */ COMPOSER_CS_ACTION_IDLE = 1,
- /* 2 */ COMPOSER_CS_ACTION_APPEAR_SPIN,
- /* 3 */ COMPOSER_CS_ACTION_IDLE2,
- /* 4 */ COMPOSER_CS_ACTION_RAISE_ARMS,
- /* 5 */ COMPOSER_CS_ACTION_LOWER_ARMS,
- /* 6 */ COMPOSER_CS_ACTION_PLAY_CURSE,
- /* 7 */ COMPOSER_CS_ACTION_ROLL,
- /* 8 */ COMPOSER_CS_ACTION_APPEAR,
- /* 9 */ COMPOSER_CS_ACTION_DISAPPEAR,
- /* 10 */ COMPOSER_CS_ACTION_DONE,
-
- /* 99 */ COMPOSER_CS_ACTION_NONE = 99
+ /* 1 */ COMPOSER_CUEID_IDLE = 1,
+ /* 2 */ COMPOSER_CUEID_APPEAR_SPIN,
+ /* 3 */ COMPOSER_CUEID_IDLE2,
+ /* 4 */ COMPOSER_CUEID_RAISE_ARMS,
+ /* 5 */ COMPOSER_CUEID_LOWER_ARMS,
+ /* 6 */ COMPOSER_CUEID_PLAY_CURSE,
+ /* 7 */ COMPOSER_CUEID_ROLL,
+ /* 8 */ COMPOSER_CUEID_APPEAR,
+ /* 9 */ COMPOSER_CUEID_DISAPPEAR,
+ /* 10 */ COMPOSER_CUEID_DONE,
+ /* 99 */ COMPOSER_CUEID_NONE = 99
} EnPoComposerCutsceneAction;
typedef enum {
@@ -42,11 +42,11 @@ typedef struct EnPoComposer {
/* 0x238 */ MtxF lanternMtxF;
/* 0x278 */ LightNode* lightNode;
/* 0x27C */ LightInfo lightInfo;
- /* 0x28A */ char unk_28A[0x6];
+ /* 0x28A */ UNK_TYPE1 unk_28A[0x6];
/* 0x290 */ s32 sharpCsNum;
/* 0x294 */ Vec3s jointTable[PO_COMPOSER_LIMB_MAX];
/* 0x2DC */ Vec3s morphTable[PO_COMPOSER_LIMB_MAX];
- /* 0x324 */ s16 csIndices[4];
+ /* 0x324 */ s16 csIds[4];
/* 0x32C */ s16 actionTimer;
/* 0x32E */ s16 csActionTimer;
/* 0x330 */ s16 inCutscene;
From 630212af0d2a883f131e3268430aec810f5da557 Mon Sep 17 00:00:00 2001
From: Thar0 <17233964+Thar0@users.noreply.github.com>
Date: Wed, 4 Oct 2023 00:30:10 +0100
Subject: [PATCH 4/6] Further review changes
---
assets/xml/objects/object_po_composer.xml | 2 +-
.../ovl_En_Po_Composer/z_en_po_composer.c | 50 +++++++++----------
.../ovl_En_Po_Composer/z_en_po_composer.h | 13 ++---
3 files changed, 33 insertions(+), 32 deletions(-)
diff --git a/assets/xml/objects/object_po_composer.xml b/assets/xml/objects/object_po_composer.xml
index 67036066f..4b5ca10b8 100644
--- a/assets/xml/objects/object_po_composer.xml
+++ b/assets/xml/objects/object_po_composer.xml
@@ -58,6 +58,6 @@
-
+
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
index daa4f6338..e223c4504 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
@@ -197,7 +197,7 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->lightColor = sLightColorInit;
this->envColor = sEnvColorInit;
- this->lastCsAction = COMPOSER_CUEID_NONE;
+ this->cueId = COMPOSER_CUEID_NONE;
if (PO_COMPOSER_IS_FLAT(&this->actor)) {
this->sharpCsNum = 0;
@@ -365,65 +365,65 @@ void EnPoComposer_Idle(EnPoComposer* this, PlayState* play) {
}
void EnPoComposer_SetupRaiseArms(EnPoComposer* this) {
- this->csActionTimer = 0;
+ this->csCueTimer = 0;
Actor_PlaySfx(&this->actor, NA_SE_EN_SHARP_REACTION);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_RAISE_ARMS);
this->actionFunc = EnPoComposer_RaiseArms;
}
void EnPoComposer_RaiseArms(EnPoComposer* this, PlayState* play) {
- if ((this->csActionTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->csActionTimer++;
+ if ((this->csCueTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->csCueTimer++;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_ARMS_RAISED);
}
}
void EnPoComposer_SetupLowerArms(EnPoComposer* this) {
- this->csActionTimer = 0;
+ this->csCueTimer = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_LOWER_ARMS);
this->actionFunc = EnPoComposer_LowerArms;
}
void EnPoComposer_LowerArms(EnPoComposer* this, PlayState* play) {
- if ((this->csActionTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->csActionTimer++;
+ if ((this->csCueTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->csCueTimer++;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE_FACING_DOWN);
}
}
void EnPoComposer_SetupCutscenePlayCurse(EnPoComposer* this) {
- this->csActionTimer = 0;
+ this->csCueTimer = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_BEGIN_PLAYING_CURSE);
this->actionFunc = EnPoComposer_CutscenePlayCurse;
}
void EnPoComposer_CutscenePlayCurse(EnPoComposer* this, PlayState* play) {
- if ((this->csActionTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->csActionTimer++;
+ if ((this->csCueTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
+ this->csCueTimer++;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_PLAYING_CURSE);
}
}
void EnPoComposer_SetupRoll(EnPoComposer* this) {
- this->csActionTimer = 0;
+ this->csCueTimer = 0;
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_BEGIN_ROLLING);
this->actionFunc = EnPoComposer_Roll;
}
void EnPoComposer_Roll(EnPoComposer* this, PlayState* play) {
- if (this->csActionTimer == 0) {
+ if (this->csCueTimer == 0) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
- this->csActionTimer++;
+ this->csCueTimer++;
Actor_PlaySfx(&this->actor, NA_SE_EN_SHARP_REACTION);
Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_ROLLING);
}
- } else if (Animation_OnFrame(&this->skelAnime, 1.0f) && (this->lightColor.a >= 33)) {
- if (this->csActionTimer == 1) {
+ } else if (Animation_OnFrame(&this->skelAnime, 1.0f) && (this->lightColor.a > 32)) {
+ if (this->csCueTimer == 1) {
Actor_PlaySfx(&this->actor, NA_SE_EN_LAST3_DEAD_WIND2_OLD);
- this->csActionTimer = 2;
+ this->csCueTimer = 2;
} else {
Actor_PlaySfx(&this->actor, NA_SE_EN_LAST3_DEAD_WIND3_OLD);
- this->csActionTimer = 1;
+ this->csCueTimer = 1;
}
}
}
@@ -444,8 +444,8 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
if (Cutscene_IsCueInChannel(play, cueType)) {
cueChannel = Cutscene_GetCueChannel(play, cueType);
- if (this->lastCsAction != play->csCtx.actorCues[cueChannel]->id) {
- this->lastCsAction = play->csCtx.actorCues[cueChannel]->id;
+ if (this->cueId != play->csCtx.actorCues[cueChannel]->id) {
+ this->cueId = play->csCtx.actorCues[cueChannel]->id;
switch (play->csCtx.actorCues[cueChannel]->id) {
case COMPOSER_CUEID_IDLE: // loop idle
@@ -516,8 +516,8 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
return true;
}
- if (this->actionFunc != EnPoComposer_StartedCutscene && this->actionFunc != EnPoComposer_StartCutscene &&
- this->actionFunc != EnPoComposer_PlayCurse && play->csCtx.state == CS_STATE_IDLE) {
+ if ((this->actionFunc != EnPoComposer_StartedCutscene) && (this->actionFunc != EnPoComposer_StartCutscene) &&
+ (this->actionFunc != EnPoComposer_PlayCurse) && (play->csCtx.state == CS_STATE_IDLE)) {
if (PO_COMPOSER_IS_FLAT(&this->actor)) {
EnPoComposer_SetupStartedCutscene(this);
@@ -527,7 +527,7 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
this->inCutscene = false;
if (this->sharpCsNum < SHARP_CS_SONG_STORMS) {
- if (!(CHECK_WEEKEVENTREG(WEEKEVENTREG_14_02))) {
+ if (!CHECK_WEEKEVENTREG(WEEKEVENTREG_14_02)) {
SET_WEEKEVENTREG(WEEKEVENTREG_14_02);
}
EnPoComposer_SetupPlayCurse(this);
@@ -537,7 +537,7 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
}
}
- this->lastCsAction = COMPOSER_CUEID_NONE;
+ this->cueId = COMPOSER_CUEID_NONE;
return false;
}
@@ -628,7 +628,7 @@ s32 EnPoComposer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V
gDPSetEnvColor((*gfx)++, this->lightColor.r, this->lightColor.g, this->lightColor.b, this->lightColor.a);
}
- return 0;
+ return false;
}
void EnPoComposer_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx, Gfx** gfx) {
@@ -739,7 +739,7 @@ void EnPoComposer_Draw(Actor* thisx, PlayState* play) {
lightPos.z += (s16)lightOffset.z;
Lights_PointGlowSetInfo(&this->lightInfo, lightPos.x, lightPos.y, lightPos.z, this->envColor.r, this->envColor.g,
- this->envColor.b, this->envColor.a * 0.78431374f);
+ this->envColor.b, this->envColor.a * (200.0f / 255.0f));
CLOSE_DISPS(play->state.gfxCtx);
}
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
index c067b8d5e..535a63b3b 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
@@ -19,14 +19,15 @@ typedef enum {
/* 9 */ COMPOSER_CUEID_DISAPPEAR,
/* 10 */ COMPOSER_CUEID_DONE,
/* 99 */ COMPOSER_CUEID_NONE = 99
-} EnPoComposerCutsceneAction;
+} EnPoComposerCueId;
typedef enum {
/* 0 */ SHARP_CS_ENCOUNTER_FIRST,
/* 1 */ SHARP_CS_ENCOUNTER_OTHER,
/* 2 */ SHARP_CS_SONG_HEALING,
- /* 3 */ SHARP_CS_SONG_STORMS
-} SharpCsId;
+ /* 3 */ SHARP_CS_SONG_STORMS,
+ /* 4 */ SHARP_CS_MAX
+} SharpCsIdIndex;
struct EnPoComposer;
@@ -46,12 +47,12 @@ typedef struct EnPoComposer {
/* 0x290 */ s32 sharpCsNum;
/* 0x294 */ Vec3s jointTable[PO_COMPOSER_LIMB_MAX];
/* 0x2DC */ Vec3s morphTable[PO_COMPOSER_LIMB_MAX];
- /* 0x324 */ s16 csIds[4];
+ /* 0x324 */ s16 csIds[SHARP_CS_MAX];
/* 0x32C */ s16 actionTimer;
- /* 0x32E */ s16 csActionTimer;
+ /* 0x32E */ s16 csCueTimer;
/* 0x330 */ s16 inCutscene;
/* 0x332 */ s16 visible;
- /* 0x334 */ u16 lastCsAction;
+ /* 0x334 */ u16 cueId;
/* 0x336 */ Color_RGBA8 lightColor;
/* 0x33A */ Color_RGBA8 envColor;
} EnPoComposer; // size = 0x340
From 7ed2f171857fc5b830963ccc4ba11641b4b6d28b Mon Sep 17 00:00:00 2001
From: Thar0 <17233964+Thar0@users.noreply.github.com>
Date: Wed, 4 Oct 2023 03:39:48 +0100
Subject: [PATCH 5/6] Improve EnPoComposer_UpdateEnvColor
---
src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
index e223c4504..3ea6559f7 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
@@ -577,8 +577,9 @@ void EnPoComposer_StepLightColor(EnPoComposer* this) {
void EnPoComposer_UpdateEnvColor(EnPoComposer* this) {
if ((this->actionFunc == EnPoComposer_Appear) && (this->skelAnime.curFrame < 12.0f)) {
+ // Step rgb from 55 to 255 and alpha from 0 to 200 over the first 12 frames of the appear anim
this->envColor.r = this->envColor.g = this->envColor.b = 55.0f + this->skelAnime.curFrame * 16.66f;
- this->envColor.a = this->skelAnime.curFrame * 16.666666f;
+ this->envColor.a = this->skelAnime.curFrame * (200.0f / 12.0f);
} else {
f32 rand = Rand_ZeroOne();
From 974c9a6aad5d2863f78eab0214aae2dd6737ea9c Mon Sep 17 00:00:00 2001
From: Thar0 <17233964+Thar0@users.noreply.github.com>
Date: Thu, 5 Oct 2023 18:06:00 +0100
Subject: [PATCH 6/6] PO_COMPOSER -> POE_COMPOSER, tweak animation names
---
assets/xml/objects/object_po_composer.xml | 37 +++---
.../ovl_En_Po_Composer/z_en_po_composer.c | 116 +++++++++---------
.../ovl_En_Po_Composer/z_en_po_composer.h | 30 ++---
3 files changed, 92 insertions(+), 91 deletions(-)
diff --git a/assets/xml/objects/object_po_composer.xml b/assets/xml/objects/object_po_composer.xml
index 4b5ca10b8..4ac60c00b 100644
--- a/assets/xml/objects/object_po_composer.xml
+++ b/assets/xml/objects/object_po_composer.xml
@@ -1,21 +1,22 @@
+
-
-
+
+
-
-
-
+
+
+
-
+
@@ -45,19 +46,19 @@
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
+
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
index 3ea6559f7..b8a4089e8 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.c
@@ -74,7 +74,7 @@ static ColliderJntSphElementInit sJntSphElementsInit[1] = {
BUMP_NONE,
OCELEM_ON,
},
- { PO_COMPOSER_LIMB_LANTERN, { { 0, -1500, 0 }, 10 }, 100 },
+ { POE_COMPOSER_LIMB_LANTERN, { { 0, -1500, 0 }, 10 }, 100 },
},
};
@@ -129,34 +129,34 @@ static DamageTable sDamageTable = {
};
typedef enum {
- /* 0 */ PO_COMPOSER_ANIM_IDLE_STILL,
- /* 1 */ PO_COMPOSER_ANIM_APPEAR_DISAPPEAR,
- /* 2 */ PO_COMPOSER_ANIM_IDLE,
- /* 3 */ PO_COMPOSER_ANIM_RAISE_ARMS,
- /* 4 */ PO_COMPOSER_ANIM_ARMS_RAISED,
- /* 5 */ PO_COMPOSER_ANIM_LOWER_ARMS,
- /* 6 */ PO_COMPOSER_ANIM_IDLE_FACING_DOWN,
- /* 7 */ PO_COMPOSER_ANIM_BEGIN_PLAYING_CURSE,
- /* 8 */ PO_COMPOSER_ANIM_PLAYING_CURSE,
- /* 9 */ PO_COMPOSER_ANIM_BEGIN_ROLLING,
- /* 10 */ PO_COMPOSER_ANIM_ROLLING,
- /* 11 */ PO_COMPOSER_ANIM_FLEE,
- /* 12 */ PO_COMPOSER_ANIM_ATTACK,
- /* 13 */ PO_COMPOSER_ANIM_MAX
+ /* 0 */ POE_COMPOSER_ANIM_STILL,
+ /* 1 */ POE_COMPOSER_ANIM_APPEAR_DISAPPEAR,
+ /* 2 */ POE_COMPOSER_ANIM_IDLE,
+ /* 3 */ POE_COMPOSER_ANIM_RAISE_ARMS,
+ /* 4 */ POE_COMPOSER_ANIM_ARMS_RAISED,
+ /* 5 */ POE_COMPOSER_ANIM_LOWER_ARMS,
+ /* 6 */ POE_COMPOSER_ANIM_LOOKING_DOWN,
+ /* 7 */ POE_COMPOSER_ANIM_BEGIN_PLAYING_CURSE,
+ /* 8 */ POE_COMPOSER_ANIM_PLAYING_CURSE,
+ /* 9 */ POE_COMPOSER_ANIM_BEGIN_ROLLING,
+ /* 10 */ POE_COMPOSER_ANIM_ROLLING,
+ /* 11 */ POE_COMPOSER_ANIM_FLEE,
+ /* 12 */ POE_COMPOSER_ANIM_ATTACK,
+ /* 13 */ POE_COMPOSER_ANIM_MAX
} EnPoComposerAnim;
-static AnimationInfo sAnimationInfo[PO_COMPOSER_ANIM_MAX] = {
- /* 0 */ { &gPoeComposerIdleStillAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+static AnimationInfo sAnimationInfo[POE_COMPOSER_ANIM_MAX] = {
+ /* 0 */ { &gPoeComposerStillAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
/* 1 */ { &gPoeComposerAppearDisappearAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_ONCE, 0.0f },
/* 2 */ { &gPoeComposerIdleAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
/* 3 */ { &gPoeComposerRaiseArmsAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
/* 4 */ { &gPoeComposerArmsRaisedAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
/* 5 */ { &gPoeComposerLowerArmsAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 6 */ { &gPoeComposerIdleLookingDownAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 7 */ { &gPoeComposerBeginPlayingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 8 */ { &gPoeComposerPlayingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 9 */ { &gPoeComposerBeginRollingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
- /* 10 */ { &gPoeComposerRollingAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 6 */ { &gPoeComposerLookingDownAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 7 */ { &gPoeComposerBeginPlayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 8 */ { &gPoeComposerPlayAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 9 */ { &gPoeComposerBeginRollAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
+ /* 10 */ { &gPoeComposerRollAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
/* 11 */ { &gPoeComposerFleeAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, -4.0f },
/* 12 */ { &gPoeComposerAttackAnim, 1.0f, 0.0f, 0.0f, ANIMMODE_LOOP, 0.0f },
};
@@ -185,7 +185,7 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
Actor_ProcessInitChain(&this->actor, sInitChain);
ActorShape_Init(&this->actor.shape, 0.0f, ActorShadow_DrawCircle, 30.0f);
SkelAnime_InitFlex(play, &this->skelAnime, &gPoeComposerSkel, &gPoeComposerIdleAnim, this->jointTable,
- this->morphTable, PO_COMPOSER_LIMB_MAX);
+ this->morphTable, POE_COMPOSER_LIMB_MAX);
Collider_InitJntSph(play, &this->lanternCollider);
Collider_SetJntSph(play, &this->lanternCollider, &this->actor, &sJntSphInit, this->lanternColliderElements);
Collider_InitCylinder(play, &this->bodyCollider);
@@ -197,13 +197,13 @@ void EnPoComposer_Init(Actor* thisx, PlayState* play) {
this->actor.flags &= ~ACTOR_FLAG_TARGETABLE;
this->lightColor = sLightColorInit;
this->envColor = sEnvColorInit;
- this->cueId = COMPOSER_CUEID_NONE;
+ this->cueId = POE_COMPOSER_CUEID_NONE;
- if (PO_COMPOSER_IS_FLAT(&this->actor)) {
+ if (POE_COMPOSER_IS_FLAT(&this->actor)) {
this->sharpCsNum = 0;
this->inCutscene = true;
EnPoComposer_SetupStartedCutscene(this);
- } else if (PO_COMPOSER_4000(&this->actor)) {
+ } else if (POE_COMPOSER_4000(&this->actor)) {
if (gSaveContext.save.entrance != ENTRANCE(IKANA_CANYON, 10)) {
Actor_Kill(&this->actor);
return;
@@ -247,7 +247,7 @@ void EnPoComposer_Destroy(Actor* thisx, PlayState* play) {
}
void EnPoComposer_SetupAwaitPlayer(EnPoComposer* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE_STILL);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_STILL);
this->actionFunc = EnPoComposer_AwaitPlayer;
}
@@ -284,7 +284,7 @@ void EnPoComposer_StartedCutscene(EnPoComposer* this, PlayState* play) {
void EnPoComposer_SetupPlayCurse(EnPoComposer* this) {
this->actionTimer = 0;
this->actor.flags |= ACTOR_FLAG_TARGETABLE;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_PLAYING_CURSE);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_PLAYING_CURSE);
this->actionFunc = EnPoComposer_PlayCurse;
}
@@ -310,7 +310,7 @@ void EnPoComposer_PlayCurse(EnPoComposer* this, PlayState* play) {
sPlayerIsPlayingOcarina = false;
}
- // Song check, check if player just played song of storms or song of healing to react to
+ // Song check, check if player just played song of storms or song of healing
if (play->msgCtx.ocarinaMode == 3) {
switch (play->msgCtx.lastPlayedSong) {
case OCARINA_SONG_STORMS:
@@ -333,7 +333,7 @@ void EnPoComposer_PlayCurse(EnPoComposer* this, PlayState* play) {
}
void EnPoComposer_SetupIdleStill(EnPoComposer* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE_STILL);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_STILL);
this->actionFunc = EnPoComposer_IdleStill;
}
@@ -344,7 +344,7 @@ void EnPoComposer_SetupAppear(EnPoComposer* this) {
this->actionTimer = 0;
Actor_PlaySfx(&this->actor, NA_SE_EN_STALKIDS_APPEAR);
Actor_PlaySfx(&this->actor, NA_SE_EN_PO_LAUGH);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_APPEAR_DISAPPEAR);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_APPEAR_DISAPPEAR);
this->actionFunc = EnPoComposer_Appear;
}
@@ -357,7 +357,7 @@ void EnPoComposer_Appear(EnPoComposer* this, PlayState* play) {
}
void EnPoComposer_SetupIdle(EnPoComposer* this) {
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_IDLE);
this->actionFunc = EnPoComposer_Idle;
}
@@ -367,46 +367,46 @@ void EnPoComposer_Idle(EnPoComposer* this, PlayState* play) {
void EnPoComposer_SetupRaiseArms(EnPoComposer* this) {
this->csCueTimer = 0;
Actor_PlaySfx(&this->actor, NA_SE_EN_SHARP_REACTION);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_RAISE_ARMS);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_RAISE_ARMS);
this->actionFunc = EnPoComposer_RaiseArms;
}
void EnPoComposer_RaiseArms(EnPoComposer* this, PlayState* play) {
if ((this->csCueTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->csCueTimer++;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_ARMS_RAISED);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_ARMS_RAISED);
}
}
void EnPoComposer_SetupLowerArms(EnPoComposer* this) {
this->csCueTimer = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_LOWER_ARMS);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_LOWER_ARMS);
this->actionFunc = EnPoComposer_LowerArms;
}
void EnPoComposer_LowerArms(EnPoComposer* this, PlayState* play) {
if ((this->csCueTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->csCueTimer++;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_IDLE_FACING_DOWN);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_LOOKING_DOWN);
}
}
void EnPoComposer_SetupCutscenePlayCurse(EnPoComposer* this) {
this->csCueTimer = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_BEGIN_PLAYING_CURSE);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_BEGIN_PLAYING_CURSE);
this->actionFunc = EnPoComposer_CutscenePlayCurse;
}
void EnPoComposer_CutscenePlayCurse(EnPoComposer* this, PlayState* play) {
if ((this->csCueTimer == 0) && Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->csCueTimer++;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_PLAYING_CURSE);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_PLAYING_CURSE);
}
}
void EnPoComposer_SetupRoll(EnPoComposer* this) {
this->csCueTimer = 0;
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_BEGIN_ROLLING);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_BEGIN_ROLLING);
this->actionFunc = EnPoComposer_Roll;
}
@@ -415,7 +415,7 @@ void EnPoComposer_Roll(EnPoComposer* this, PlayState* play) {
if (Animation_OnFrame(&this->skelAnime, this->skelAnime.endFrame)) {
this->csCueTimer++;
Actor_PlaySfx(&this->actor, NA_SE_EN_SHARP_REACTION);
- Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, PO_COMPOSER_ANIM_ROLLING);
+ Actor_ChangeAnimationByInfo(&this->skelAnime, sAnimationInfo, POE_COMPOSER_ANIM_ROLLING);
}
} else if (Animation_OnFrame(&this->skelAnime, 1.0f) && (this->lightColor.a > 32)) {
if (this->csCueTimer == 1) {
@@ -434,7 +434,7 @@ void EnPoComposer_SharpCutsceneDone(EnPoComposer* this) {
}
s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
- u16 cueType = PO_COMPOSER_IS_FLAT(&this->actor) ? CS_CMD_ACTOR_CUE_482 : CS_CMD_ACTOR_CUE_481;
+ u16 cueType = POE_COMPOSER_IS_FLAT(&this->actor) ? CS_CMD_ACTOR_CUE_482 : CS_CMD_ACTOR_CUE_481;
s32 cueChannel;
if (!this->inCutscene) {
@@ -448,44 +448,44 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
this->cueId = play->csCtx.actorCues[cueChannel]->id;
switch (play->csCtx.actorCues[cueChannel]->id) {
- case COMPOSER_CUEID_IDLE: // loop idle
+ case POE_COMPOSER_CUEID_IDLE: // loop idle
EnPoComposer_SetupIdleStill(this);
break;
- case COMPOSER_CUEID_APPEAR_SPIN: // appear/disappear -> loop idle
+ case POE_COMPOSER_CUEID_APPEAR_SPIN: // appear/disappear -> loop idle
EnPoComposer_SetupAppear(this);
break;
- case COMPOSER_CUEID_IDLE2: // loop sharp idle
+ case POE_COMPOSER_CUEID_IDLE2: // loop sharp idle
EnPoComposer_SetupIdle(this);
break;
- case COMPOSER_CUEID_RAISE_ARMS: // raise arms -> loop arms raised
+ case POE_COMPOSER_CUEID_RAISE_ARMS: // raise arms -> loop arms raised
EnPoComposer_SetupRaiseArms(this);
break;
- case COMPOSER_CUEID_LOWER_ARMS: // lower arms -> loop idle
+ case POE_COMPOSER_CUEID_LOWER_ARMS: // lower arms -> loop idle
EnPoComposer_SetupLowerArms(this);
break;
- case COMPOSER_CUEID_PLAY_CURSE: // begin playing -> loop playing
+ case POE_COMPOSER_CUEID_PLAY_CURSE: // begin playing -> loop playing
EnPoComposer_SetupCutscenePlayCurse(this);
break;
- case COMPOSER_CUEID_ROLL: // begin rolling -> loop rolling
+ case POE_COMPOSER_CUEID_ROLL: // begin rolling -> loop rolling
EnPoComposer_SetupRoll(this);
break;
- case COMPOSER_CUEID_APPEAR: // appear
+ case POE_COMPOSER_CUEID_APPEAR: // appear
this->visible = true;
break;
- case COMPOSER_CUEID_DISAPPEAR: // disappear
+ case POE_COMPOSER_CUEID_DISAPPEAR: // disappear
this->visible = false;
Actor_PlaySfx(&this->actor, NA_SE_EN_PO_DISAPPEAR);
break;
- case COMPOSER_CUEID_DONE:
+ case POE_COMPOSER_CUEID_DONE:
if (cueType == CS_CMD_ACTOR_CUE_481) {
EnPoComposer_SharpCutsceneDone(this);
} else {
@@ -519,9 +519,9 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
if ((this->actionFunc != EnPoComposer_StartedCutscene) && (this->actionFunc != EnPoComposer_StartCutscene) &&
(this->actionFunc != EnPoComposer_PlayCurse) && (play->csCtx.state == CS_STATE_IDLE)) {
- if (PO_COMPOSER_IS_FLAT(&this->actor)) {
+ if (POE_COMPOSER_IS_FLAT(&this->actor)) {
EnPoComposer_SetupStartedCutscene(this);
- } else if (PO_COMPOSER_4000(&this->actor)) {
+ } else if (POE_COMPOSER_4000(&this->actor)) {
EnPoComposer_SetupStartedCutscene(this);
} else {
this->inCutscene = false;
@@ -537,7 +537,7 @@ s32 EnPoComposer_UpdateAction(EnPoComposer* this, PlayState* play) {
}
}
- this->cueId = COMPOSER_CUEID_NONE;
+ this->cueId = POE_COMPOSER_CUEID_NONE;
return false;
}
@@ -617,9 +617,9 @@ s32 EnPoComposer_OverrideLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, V
Gfx** gfx) {
EnPoComposer* this = THIS;
- if ((this->lightColor.a == 0) || (limbIndex == PO_COMPOSER_LIMB_LANTERN)) {
+ if ((this->lightColor.a == 0) || (limbIndex == POE_COMPOSER_LIMB_LANTERN)) {
*dList = NULL;
- } else if (PO_COMPOSER_IS_FLAT(&this->actor) && (limbIndex == PO_COMPOSER_LIMB_HEAD)) {
+ } else if (POE_COMPOSER_IS_FLAT(&this->actor) && (limbIndex == POE_COMPOSER_LIMB_HEAD)) {
*dList = gPoeComposerFlatHeadDL;
}
@@ -636,7 +636,7 @@ void EnPoComposer_PostLimbDraw(PlayState* play, s32 limbIndex, Gfx** dList, Vec3
EnPoComposer* this = THIS;
Collider_UpdateSpheres(limbIndex, &this->lanternCollider);
- if (limbIndex == PO_COMPOSER_LIMB_LANTERN) {
+ if (limbIndex == POE_COMPOSER_LIMB_LANTERN) {
Matrix_Get(&this->lanternMtxF);
}
}
@@ -656,7 +656,7 @@ void EnPoComposer_Draw(Actor* thisx, PlayState* play) {
// Select colors
- if (PO_COMPOSER_IS_FLAT(&this->actor)) {
+ if (POE_COMPOSER_IS_FLAT(&this->actor)) {
clothingColor = &sFlatClothingColor1;
var_t0 = &sFlatClothingColor2;
} else {
diff --git a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
index 535a63b3b..d64fc2430 100644
--- a/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
+++ b/src/overlays/actors/ovl_En_Po_Composer/z_en_po_composer.h
@@ -4,21 +4,21 @@
#include "global.h"
#include "objects/object_po_composer/object_po_composer.h"
-#define PO_COMPOSER_IS_FLAT(actor) ((actor)->params & 0x8000)
-#define PO_COMPOSER_4000(actor) ((actor)->params & 0x4000)
+#define POE_COMPOSER_IS_FLAT(actor) ((actor)->params & 0x8000)
+#define POE_COMPOSER_4000(actor) ((actor)->params & 0x4000)
typedef enum {
- /* 1 */ COMPOSER_CUEID_IDLE = 1,
- /* 2 */ COMPOSER_CUEID_APPEAR_SPIN,
- /* 3 */ COMPOSER_CUEID_IDLE2,
- /* 4 */ COMPOSER_CUEID_RAISE_ARMS,
- /* 5 */ COMPOSER_CUEID_LOWER_ARMS,
- /* 6 */ COMPOSER_CUEID_PLAY_CURSE,
- /* 7 */ COMPOSER_CUEID_ROLL,
- /* 8 */ COMPOSER_CUEID_APPEAR,
- /* 9 */ COMPOSER_CUEID_DISAPPEAR,
- /* 10 */ COMPOSER_CUEID_DONE,
- /* 99 */ COMPOSER_CUEID_NONE = 99
+ /* 1 */ POE_COMPOSER_CUEID_IDLE = 1,
+ /* 2 */ POE_COMPOSER_CUEID_APPEAR_SPIN,
+ /* 3 */ POE_COMPOSER_CUEID_IDLE2,
+ /* 4 */ POE_COMPOSER_CUEID_RAISE_ARMS,
+ /* 5 */ POE_COMPOSER_CUEID_LOWER_ARMS,
+ /* 6 */ POE_COMPOSER_CUEID_PLAY_CURSE,
+ /* 7 */ POE_COMPOSER_CUEID_ROLL,
+ /* 8 */ POE_COMPOSER_CUEID_APPEAR,
+ /* 9 */ POE_COMPOSER_CUEID_DISAPPEAR,
+ /* 10 */ POE_COMPOSER_CUEID_DONE,
+ /* 99 */ POE_COMPOSER_CUEID_NONE = 99
} EnPoComposerCueId;
typedef enum {
@@ -45,8 +45,8 @@ typedef struct EnPoComposer {
/* 0x27C */ LightInfo lightInfo;
/* 0x28A */ UNK_TYPE1 unk_28A[0x6];
/* 0x290 */ s32 sharpCsNum;
- /* 0x294 */ Vec3s jointTable[PO_COMPOSER_LIMB_MAX];
- /* 0x2DC */ Vec3s morphTable[PO_COMPOSER_LIMB_MAX];
+ /* 0x294 */ Vec3s jointTable[POE_COMPOSER_LIMB_MAX];
+ /* 0x2DC */ Vec3s morphTable[POE_COMPOSER_LIMB_MAX];
/* 0x324 */ s16 csIds[SHARP_CS_MAX];
/* 0x32C */ s16 actionTimer;
/* 0x32E */ s16 csCueTimer;