mirror of https://github.com/zeldaret/mm.git
ovl_En_Ending_Hero6 OK (#333)
* All functions in z_en_ending_hero6.c matching * Add data to z_en_ending_hero6.c * Remove duplicate declarations * Add symbols to undefined_syms.txt * Address initial PR comments * Add heading, rename variables, and remove U suffix * Further variable renamings according to PR suggestions
This commit is contained in:
parent
9478fc760f
commit
1713e8a97d
3
spec
3
spec
|
@ -5518,8 +5518,7 @@ beginseg
|
|||
name "ovl_En_Ending_Hero6"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Ending_Hero6/z_en_ending_hero6.o"
|
||||
include "build/data/ovl_En_Ending_Hero6/ovl_En_Ending_Hero6.data.o"
|
||||
include "build/data/ovl_En_Ending_Hero6/ovl_En_Ending_Hero6.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Ending_Hero6/ovl_En_Ending_Hero6_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
/*
|
||||
* File: z_en_ending_hero6.c
|
||||
* Overlay: ovl_En_Ending_Hero6
|
||||
* Description:
|
||||
*/
|
||||
|
||||
#include "z_en_ending_hero6.h"
|
||||
|
||||
#define FLAGS 0x00000009
|
||||
|
@ -9,9 +15,40 @@ void EnEndingHero6_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
|||
void EnEndingHero6_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnEndingHero6_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
void func_80C23E18(EnEndingHero6* this, GlobalContext* globalCtx);
|
||||
void EnEndingHero6_InitSkelAnime(EnEndingHero6* this, s32 npcIndex);
|
||||
void EnEndingHero6_SetupIdle(EnEndingHero6* this);
|
||||
void EnEndingHero6_Idle(EnEndingHero6* this, GlobalContext* globalCtx);
|
||||
|
||||
extern FlexSkeletonHeader D_0600B0CC; // object_dt
|
||||
extern FlexSkeletonHeader D_06007908; // object_bai
|
||||
extern FlexSkeletonHeader D_06007150; // object_toryo
|
||||
extern FlexSkeletonHeader D_0600D640; // object_sdn
|
||||
extern FlexSkeletonHeader D_0600A850; // object_daiku
|
||||
|
||||
extern AnimationHeader D_06000BE0; // object_dt
|
||||
extern AnimationHeader D_060011C0; // object_bai
|
||||
extern AnimationHeader D_06000E50; // object_toryo
|
||||
extern AnimationHeader D_06002A84; // object_sdn
|
||||
extern AnimationHeader D_06002FA0; // object_daiku
|
||||
|
||||
// object_daiku
|
||||
extern Gfx D_060070C0[];
|
||||
extern Gfx D_06006FB0[];
|
||||
extern Gfx D_06006E80[];
|
||||
extern Gfx D_06006D70[];
|
||||
extern Gfx D_0600A390_dl[];
|
||||
|
||||
// object_dt
|
||||
extern TexturePtr D_06007350;
|
||||
extern TexturePtr D_06009590;
|
||||
extern TexturePtr D_06009F90;
|
||||
extern TexturePtr D_0600A790;
|
||||
extern TexturePtr D_0600AB90;
|
||||
|
||||
extern TexturePtr D_06007750;
|
||||
extern TexturePtr D_0600A390_tex;
|
||||
extern TexturePtr D_0600A490;
|
||||
|
||||
#if 0
|
||||
const ActorInit En_Ending_Hero6_InitVars = {
|
||||
ACTOR_EN_ENDING_HERO6,
|
||||
ACTORCAT_NPC,
|
||||
|
@ -24,20 +61,131 @@ const ActorInit En_Ending_Hero6_InitVars = {
|
|||
(ActorFunc)EnEndingHero6_Draw,
|
||||
};
|
||||
|
||||
#endif
|
||||
static FlexSkeletonHeader* sSkeletons[] = { &D_0600B0CC, &D_06007908, &D_06007150, &D_0600D640, &D_0600A850,
|
||||
&D_0600A850, &D_0600A850, &D_0600A850, &D_0600A850 };
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ending_Hero6/EnEndingHero6_Init.s")
|
||||
static AnimationHeader* sAnimations[] = { &D_06000BE0, &D_060011C0, &D_06000E50, &D_06002A84, &D_06002FA0,
|
||||
&D_06002FA0, &D_06002FA0, &D_06002FA0, &D_06002FA0 };
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ending_Hero6/EnEndingHero6_Destroy.s")
|
||||
static s32 sLimbCounts[] = { 15, 20, 17, 17, 17, 17, 17, 17, 17 };
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ending_Hero6/func_80C23D60.s")
|
||||
void EnEndingHero6_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnEndingHero6* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ending_Hero6/func_80C23DDC.s")
|
||||
this->actor.colChkInfo.mass = MASS_IMMOVABLE;
|
||||
Actor_SetScale(&this->actor, 0.01f);
|
||||
this->actor.targetMode = 6;
|
||||
this->actor.gravity = -3.0f;
|
||||
SkelAnime_InitSV(globalCtx, &this->skelAnime, sSkeletons[this->npcIndex], sAnimations[this->npcIndex],
|
||||
this->jointTable, this->morphTable, sLimbCounts[this->npcIndex]);
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, func_800B3FC0, 25.0f);
|
||||
EnEndingHero6_SetupIdle(this);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ending_Hero6/func_80C23E18.s")
|
||||
void EnEndingHero6_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ending_Hero6/EnEndingHero6_Update.s")
|
||||
void EnEndingHero6_InitSkelAnime(EnEndingHero6* this, s32 npcIndex) {
|
||||
this->animIndex = npcIndex;
|
||||
this->frameCount = SkelAnime_GetFrameCount(&sAnimations[npcIndex]->common);
|
||||
SkelAnime_ChangeAnim(&this->skelAnime, sAnimations[this->animIndex], 1.0f, 0.f, this->frameCount, 0, 0.0f);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ending_Hero6/func_80C23F14.s")
|
||||
void EnEndingHero6_SetupIdle(EnEndingHero6* this) {
|
||||
EnEndingHero6_InitSkelAnime(this, this->npcIndex);
|
||||
this->isIdle = 1;
|
||||
this->actionFunc = EnEndingHero6_Idle;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Ending_Hero6/EnEndingHero6_Draw.s")
|
||||
void EnEndingHero6_Idle(EnEndingHero6* this, GlobalContext* globalCtx) {
|
||||
SkelAnime_FrameUpdateMatrix(&this->skelAnime);
|
||||
}
|
||||
|
||||
void EnEndingHero6_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnEndingHero6* this = THIS;
|
||||
|
||||
if (this->timer != 0) {
|
||||
this->timer--;
|
||||
}
|
||||
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
|
||||
if (this->blinkTimer == 0) {
|
||||
this->eyeState++;
|
||||
if (this->eyeState >= 3) {
|
||||
this->eyeState = 0;
|
||||
this->blinkTimer = (s16)Rand_ZeroFloat(60.0f) + 20;
|
||||
}
|
||||
}
|
||||
|
||||
this->actionFunc(this, globalCtx);
|
||||
Actor_SetVelocityAndMoveYRotationAndGravity(&this->actor);
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 20.0f, 20.0f, 50.0f, 0x1D);
|
||||
}
|
||||
|
||||
void EnEndingHero6_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||
static Gfx* D_80C2426C[] = { D_060070C0, D_06006FB0, D_06006E80, D_06006D70, D_0600A390_dl };
|
||||
EnEndingHero6* this = THIS;
|
||||
s32 index;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
if (this->npcIndex >= 4 && limbIndex == 15) {
|
||||
index = this->npcIndex - 4;
|
||||
gSPDisplayList(POLY_OPA_DISP++, D_80C2426C[index]);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
void EnEndingHero6_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
static TexturePtr D_80C24280[] = { &D_06007350, &D_06009590, &D_06009F90, &D_0600A790, &D_0600AB90 };
|
||||
static TexturePtr D_80C24294[] = { &D_06007750, &D_0600A390_tex, &D_0600A490 };
|
||||
s32 pad;
|
||||
EnEndingHero6* this = THIS;
|
||||
s32 index = 0;
|
||||
|
||||
if (this->isIdle == 1) {
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
func_8012C2DC(globalCtx->state.gfxCtx);
|
||||
|
||||
if (this->objectIndex >= 0 && Object_IsLoaded(&globalCtx->objectCtx, this->objectIndex)) {
|
||||
gSPSegment(POLY_OPA_DISP++, 0x06, globalCtx->objectCtx.status[this->objectIndex].segment);
|
||||
|
||||
switch (this->npcIndex) {
|
||||
case 4:
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 170, 10, 70, 255);
|
||||
break;
|
||||
case 5:
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 170, 200, 255, 255);
|
||||
break;
|
||||
case 6:
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 0, 230, 70, 255);
|
||||
break;
|
||||
case 7:
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 200, 0, 150, 255);
|
||||
break;
|
||||
case 8:
|
||||
gDPSetEnvColor(POLY_OPA_DISP++, 245, 155, 0, 255);
|
||||
break;
|
||||
}
|
||||
|
||||
if (this->npcIndex == 0) {
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80C24280[this->eyeState]));
|
||||
|
||||
if (this->eyeState < 3) {
|
||||
index = this->eyeState;
|
||||
}
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x09, Lib_SegmentedToVirtual(D_80C24294[index]));
|
||||
}
|
||||
|
||||
SkelAnime_DrawSV(globalCtx, this->skelAnime.skeleton, this->skelAnime.limbDrawTbl,
|
||||
this->skelAnime.dListCount, NULL, EnEndingHero6_PostLimbDraw, &this->actor);
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,9 +9,18 @@ typedef void (*EnEndingHero6ActionFunc)(struct EnEndingHero6*, GlobalContext*);
|
|||
|
||||
typedef struct EnEndingHero6 {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ char unk_144[0x134];
|
||||
/* 0x0144 */ SkelAnime skelAnime;
|
||||
/* 0x0188 */ Vec3s jointTable[20];
|
||||
/* 0x0200 */ Vec3s morphTable[20];
|
||||
/* 0x0278 */ EnEndingHero6ActionFunc actionFunc;
|
||||
/* 0x027C */ char unk_27C[0x18];
|
||||
/* 0x027C */ s32 animIndex;
|
||||
/* 0x0280 */ s32 npcIndex;
|
||||
/* 0x0284 */ s8 objectIndex;
|
||||
/* 0x0286 */ s16 timer;
|
||||
/* 0x0288 */ s16 blinkTimer;
|
||||
/* 0x028A */ s16 eyeState;
|
||||
/* 0x028C */ f32 frameCount;
|
||||
/* 0x0290 */ s16 isIdle;
|
||||
} EnEndingHero6; // size = 0x294
|
||||
|
||||
extern const ActorInit En_Ending_Hero6_InitVars;
|
||||
|
|
|
@ -16988,13 +16988,13 @@
|
|||
0x80C23BD0:("En_Ending_Hero5_InitVars","UNK_TYPE1","",0x1),
|
||||
0x80C23BF0:("D_80C23BF0","UNK_TYPE1","",0x1),
|
||||
0x80C23C10:("jtbl_80C23C10","UNK_PTR","",0x4),
|
||||
0x80C241E0:("En_Ending_Hero6_InitVars","UNK_TYPE1","",0x1),
|
||||
0x80C24200:("D_80C24200","UNK_TYPE1","",0x1),
|
||||
0x80C24224:("D_80C24224","UNK_TYPE1","",0x1),
|
||||
0x80C24248:("D_80C24248","UNK_TYPE1","",0x1),
|
||||
0x80C2426C:("D_80C2426C","UNK_TYPE1","",0x1),
|
||||
0x80C24280:("D_80C24280","UNK_TYPE1","",0x1),
|
||||
0x80C24294:("D_80C24294","UNK_TYPE1","",0x1),
|
||||
0x80C241E0:("En_Ending_Hero6_InitVars","ActorInit","",0x20),
|
||||
0x80C24200:("D_80C24200","FlexSkeletonHeader*","[9]",0x24),
|
||||
0x80C24224:("D_80C24224","AnimationHeader*","[9]",0x24),
|
||||
0x80C24248:("D_80C24248","s32","[9]",0x24),
|
||||
0x80C2426C:("D_80C2426C","Gfx*","[5]",0x14),
|
||||
0x80C24280:("D_80C24280","TexturePtr","[5]",0x14),
|
||||
0x80C24294:("D_80C24294","TexturePtr","[3]",0xc),
|
||||
0x80C242A0:("jtbl_80C242A0","UNK_PTR","",0x4),
|
||||
0x80C250F0:("Dm_Gm_InitVars","UNK_TYPE1","",0x1),
|
||||
0x80C25110:("D_80C25110","UNK_TYPE1","",0x1),
|
||||
|
|
|
@ -2089,6 +2089,32 @@ D_060070C0 = 0x060070C0;
|
|||
D_0600A390 = 0x0600A390;
|
||||
D_0600A850 = 0x0600A850;
|
||||
|
||||
// ovl_En_Ending_Hero6
|
||||
|
||||
D_0600B0CC = 0x0600B0CC;
|
||||
D_06007908 = 0x06007908;
|
||||
D_06007150 = 0x06007150;
|
||||
D_0600D640 = 0x0600D640;
|
||||
D_0600A850 = 0x0600A850;
|
||||
D_06000BE0 = 0x06000BE0;
|
||||
D_060011C0 = 0x060011C0;
|
||||
D_06000E50 = 0x06000E50;
|
||||
D_06002A84 = 0x06002A84;
|
||||
D_06002FA0 = 0x06002FA0;
|
||||
D_060070C0 = 0x060070C0;
|
||||
D_06006FB0 = 0x06006FB0;
|
||||
D_06006E80 = 0x06006E80;
|
||||
D_06006D70 = 0x06006D70;
|
||||
D_0600A390_dl = 0x0600A390;
|
||||
D_06007350 = 0x06007350;
|
||||
D_06009590 = 0x06009590;
|
||||
D_06009F90 = 0x06009F90;
|
||||
D_0600A790 = 0x0600A790;
|
||||
D_0600AB90 = 0x0600AB90;
|
||||
D_06007750 = 0x06007750;
|
||||
D_0600A390_tex = 0x0600A390;
|
||||
D_0600A490 = 0x0600A490;
|
||||
|
||||
// ovl_En_Estone
|
||||
|
||||
D_06010240 = 0x06010240;
|
||||
|
|
Loading…
Reference in New Issue