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:
Connor Anderson 2021-09-29 00:50:04 +00:00 committed by GitHub
parent 9478fc760f
commit 1713e8a97d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 204 additions and 22 deletions

3
spec
View File

@ -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

View File

@ -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);
}
}

View File

@ -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;

View File

@ -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),

View File

@ -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;