en_nnh OK (#42)

* Matching (last thing to figure out is ColliderInit)

* nnh work

* Working on collider

* formatting

* Fixing en_nnh

* Fixed build error. The issue was a collider init, not sure what made me think it was OK before

* Removed overlay helper stuff

* Removed weird qemu file

* Fixed collider once and for all.

Co-authored-by: fullgrowngaming <fullgrowngaming@gmail.com>
This commit is contained in:
kyleburnette 2021-02-12 15:25:48 -08:00 committed by GitHub
parent ee0ab1cbc9
commit 08e964972f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 79 additions and 14 deletions

View File

@ -2899,7 +2899,7 @@ void func_8014D7B4(void); // func_8014D7B4
void func_80150A84(void); // func_80150A84
void func_80150D08(GlobalContext* ctxt, unsigned int uParm2); // func_80150D08
void func_801514B0(void); // func_801514B0
void func_801518B0(GlobalContext* ctxt, u32 uParm2, UNK_TYPE4 uParm3); // func_801518B0
void func_801518B0(GlobalContext* ctxt, u32 uParm2, Actor* uParm3); // func_801518B0
void func_80151938(GlobalContext* ctxt, u16 param_2); // func_80151938
void func_80151A68(GlobalContext* ctxt, u16 param_2); // func_80151A68
void func_80151BB4(s32 iParm1, u32 uParm2); // func_80151BB4

View File

@ -8236,8 +8236,9 @@ SECTIONS
ovl_En_Nnh : AT(RomLocation)
{
build/src/overlays/actors/ovl_En_Nnh/z_en_nnh.o(.text)
build/asm/ovl_En_Nnh_data.o(.data)
build/asm/ovl_En_Nnh_rodata.o(.rodata)
build/src/overlays/actors/ovl_En_Nnh/z_en_nnh.o(.data)
build/src/overlays/actors/ovl_En_Nnh/z_en_nnh.o(.rodata)
build/src/overlays/actors/ovl_En_Nnh/z_en_nnh_overlay.o(.ovl)
}
SegmentEnd = .;
SegmentSize = SegmentEnd - SegmentStart;

View File

@ -14,6 +14,11 @@ D_0E000140 = 0x0E000140;
D_0E0001C8 = 0x0E0001C8;
D_0E0002C8 = 0x0E0002C8;
D_06000500 = 0x06000500;
/* z_en_nnh */
D_06001510 = 0x06001510;
/* bg_haka_curtain */
D_06001410 = 0x06001410;
D_06001588 = 0x06001588;

View File

@ -9,7 +9,11 @@ void EnNnh_Destroy(Actor* thisx, GlobalContext* globalCtx);
void EnNnh_Update(Actor* thisx, GlobalContext* globalCtx);
void EnNnh_Draw(Actor* thisx, GlobalContext* globalCtx);
/*
void func_80C08828(EnNnh* this);
void func_80C0883C(EnNnh* this, GlobalContext* globalCtx);
void func_80C088A4(EnNnh* this);
void func_80C088B8(EnNnh* this, GlobalContext* globalCtx);
const ActorInit En_Nnh_InitVars = {
ACTOR_EN_NNH,
ACTORTYPE_PROP,
@ -21,20 +25,72 @@ const ActorInit En_Nnh_InitVars = {
(ActorFunc)EnNnh_Update,
(ActorFunc)EnNnh_Draw
};
*/
GLOBAL_ASM("asm/non_matchings/ovl_En_Nnh_0x80C08760/EnNnh_Init.asm")
ColCylinderInit D_80C08A00 =
{
{ 0x0D, 0x00, 0x09, 0x39, 0x10, 0x01 },
{ 0x01, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, 0x00, 0x01, 0x01 },
{ 20, 50, 0, { 0, 0, 0 } },
};
GLOBAL_ASM("asm/non_matchings/ovl_En_Nnh_0x80C08760/EnNnh_Destroy.asm")
extern Gfx D_06001510[];
GLOBAL_ASM("asm/non_matchings/ovl_En_Nnh_0x80C08760/func_80C08828.asm")
void EnNnh_Init(Actor *thisx, GlobalContext *globalCtx) {
EnNnh* this = THIS;
GLOBAL_ASM("asm/non_matchings/ovl_En_Nnh_0x80C08760/func_80C0883C.asm")
Actor_SetScale(&this->actor, 0.01f);
Collision_InitCylinderDefault(globalCtx, &this->collider);
Collision_InitCylinderWithData(globalCtx, &this->collider, &this->actor, &D_80C08A00);
this->actor.unk1F = 1;
this->actor.topPosRot.pos = this->actor.currPosRot.pos;
this->actor.topPosRot.pos.y += 30.0f;
func_80C08828(this);
}
GLOBAL_ASM("asm/non_matchings/ovl_En_Nnh_0x80C08760/func_80C088A4.asm")
void EnNnh_Destroy(Actor *thisx, GlobalContext *globalCtx) {
EnNnh* this = THIS;
GLOBAL_ASM("asm/non_matchings/ovl_En_Nnh_0x80C08760/func_80C088B8.asm")
Collision_FiniCylinder(globalCtx, &this->collider);
}
GLOBAL_ASM("asm/non_matchings/ovl_En_Nnh_0x80C08760/EnNnh_Update.asm")
void func_80C08828(EnNnh* this) {
this->actionFunc = func_80C0883C;
}
GLOBAL_ASM("asm/non_matchings/ovl_En_Nnh_0x80C08760/EnNnh_Draw.asm")
void func_80C0883C(EnNnh* this, GlobalContext* globalCtx) {
if (func_800B84D0(&this->actor, globalCtx)) {
func_801518B0(globalCtx, 0x228U, &this->actor);
func_80C088A4(this);
return;
}
func_800B8614(&this->actor, globalCtx, 100.0f);
}
void func_80C088A4(EnNnh* this) {
this->actionFunc = func_80C088B8;
}
void func_80C088B8(EnNnh* this, GlobalContext* globalCtx) {
if (func_800B867C(&this->actor, globalCtx)) {
func_80C08828(this);
}
}
void EnNnh_Update(Actor *thisx, GlobalContext *globalCtx) {
EnNnh* this = THIS;
s32 pad;
this->actionFunc(this, globalCtx);
Collision_CylinderMoveToActor(&this->actor, &this->collider);
Collision_AddOT(globalCtx, &globalCtx->colCheckCtx, &this->collider.base);
}
void EnNnh_Draw(Actor *thisx, GlobalContext *globalCtx) {
GraphicsContext* gfxCtx = globalCtx->state.gfxCtx;
s32 pad;
func_8012C28C(gfxCtx);
gSPMatrix(gfxCtx->polyOpa.p++, SysMatrix_AppendStateToPolyOpaDisp(globalCtx->state.gfxCtx),
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
gSPDisplayList(gfxCtx->polyOpa.p++, D_06001510);
}

View File

@ -5,9 +5,12 @@
struct EnNnh;
typedef void (*EnNnhActionFunc)(struct EnNnh*, GlobalContext*);
typedef struct EnNnh {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x50];
/* 0x144 */ ColCylinder collider;
/* 0x190 */ EnNnhActionFunc actionFunc;
} EnNnh; // size = 0x194
extern const ActorInit En_Nnh_InitVars;