diff --git a/linker_scripts/code_script.txt b/linker_scripts/code_script.txt index 69f6903716..53e05acd91 100644 --- a/linker_scripts/code_script.txt +++ b/linker_scripts/code_script.txt @@ -8656,8 +8656,9 @@ SECTIONS ovl_En_Ending_Hero3 : AT(RomLocation) { build/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.o(.text) - build/asm/ovl_En_Ending_Hero3_data.o(.data) - build/asm/ovl_En_Ending_Hero3_rodata.o(.rodata) + build/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.o(.data) + build/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3.o(.rodata) + build/src/overlays/actors/ovl_En_Ending_Hero3/z_en_ending_hero3_overlay.o(.ovl) } SegmentEnd = .; SegmentSize = SegmentEnd - SegmentStart; diff --git a/linker_scripts/object_script.txt b/linker_scripts/object_script.txt index 08375a8a7c..da9905b702 100644 --- a/linker_scripts/object_script.txt +++ b/linker_scripts/object_script.txt @@ -34,6 +34,10 @@ D_06018DA0 = 0x06018DA0; D_0601EF10 = 0x0601EF10; D_06018C60 = 0x06018C60; +/* en_ending_hero3 */ +D_06007150 = 0x06007150; +D_06000E50 = 0x06000E50; + /* en_ending_hero2 */ D_06007908 = 0x06007908; D_060011C0 = 0x060011C0; 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 179149f149..3209ceb8ba 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 @@ -9,7 +9,9 @@ void EnEndingHero3_Destroy(Actor* thisx, GlobalContext* globalCtx); void EnEndingHero3_Update(Actor* thisx, GlobalContext* globalCtx); void EnEndingHero3_Draw(Actor* thisx, GlobalContext* globalCtx); -/* +void func_80C23518(EnEndingHero3* this); +void func_80C23534(EnEndingHero3* this, GlobalContext* globalCtx); + const ActorInit En_Ending_Hero3_InitVars = { ACTOR_EN_ENDING_HERO3, ACTORTYPE_NPC, @@ -21,16 +23,48 @@ const ActorInit En_Ending_Hero3_InitVars = { (ActorFunc)EnEndingHero3_Update, (ActorFunc)EnEndingHero3_Draw }; -*/ -GLOBAL_ASM("asm/non_matchings/ovl_En_Ending_Hero3_0x80C23460/EnEndingHero3_Init.asm") +extern SkeletonHeader D_06007150; +extern AnimationHeader D_06000E50; -GLOBAL_ASM("asm/non_matchings/ovl_En_Ending_Hero3_0x80C23460/EnEndingHero3_Destroy.asm") +void EnEndingHero3_Init(Actor* thisx, GlobalContext* globalCtx) { + EnEndingHero3* this = THIS; -GLOBAL_ASM("asm/non_matchings/ovl_En_Ending_Hero3_0x80C23460/func_80C23518.asm") + this->actor.unkA0.mass = 0xFF; + Actor_SetScale(&this->actor, 0.01f); + this->actor.unk1F = 6; + this->actor.gravity = -3.0f; + SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_06007150, &D_06000E50, this->limbDrawTable, + this->transitionDrawTable, 17); + Actor_SetDrawParams(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f); + func_80C23518(&this->actor); +} -GLOBAL_ASM("asm/non_matchings/ovl_En_Ending_Hero3_0x80C23460/func_80C23534.asm") +void EnEndingHero3_Destroy(Actor* thisx, GlobalContext* globalCtx) { +} -GLOBAL_ASM("asm/non_matchings/ovl_En_Ending_Hero3_0x80C23460/EnEndingHero3_Update.asm") +void func_80C23518(EnEndingHero3* this) { + this->unk258 = 1; + this->actionFunc = func_80C23534; +} -GLOBAL_ASM("asm/non_matchings/ovl_En_Ending_Hero3_0x80C23460/EnEndingHero3_Draw.asm") +void func_80C23534(EnEndingHero3* this, GlobalContext* globalCtx) { + SkelAnime_FrameUpdateMatrix(&this->skelAnime); +} + +void EnEndingHero3_Update(Actor* thisx, GlobalContext* globalCtx) { + EnEndingHero3* this = THIS; + + this->actionFunc(this, globalCtx); + Actor_SetVelocityAndMoveYRotationAndGravity(&this->actor); + func_800B78B8(globalCtx, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D); +} + +void EnEndingHero3_Draw(Actor* thisx, GlobalContext* globalCtx) { + EnEndingHero3* this = THIS; + + func_8012C28C(globalCtx->state.gfxCtx); + func_8012C2DC(globalCtx->state.gfxCtx); + SkelAnime_DrawSV(globalCtx, this->skelAnime.skeleton, this->skelAnime.limbDrawTbl, this->skelAnime.dListCount, 0, 0, + &this->actor); +} 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 84c8a59d37..c040b279a8 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 @@ -5,9 +5,15 @@ struct EnEndingHero3; +typedef void (*EnEndingHero3ActionFunc)(struct BgHakaCurtain*, GlobalContext*); + typedef struct EnEndingHero3 { /* 0x000 */ Actor actor; - /* 0x144 */ char unk_144[0x118]; + /* 0x144 */ SkelAnime skelAnime; + /* 0x188 */ Vec3s limbDrawTable[17]; + /* 0x1EE */ Vec3s transitionDrawTable[17]; + /* 0x254 */ EnEndingHero3ActionFunc actionFunc; + /* 0x258 */ u16 unk258; } EnEndingHero3; // size = 0x25C extern const ActorInit En_Ending_Hero3_InitVars;