Ovl_Obj_HsStump Ok but one function does not match (#156)

* Everything matches but func_80BDABCC

* Better names, still stuck on func_80BDABCC

* Some cleanup

* Add param macros and document not matching

* format

* PR suggestions

* Bring over data to c file

* Retry Jenkins

* Retry Jenkins take 2

* PR suggestions for comments

* PR comments
This commit is contained in:
Derek Hensley 2021-06-02 15:57:19 -07:00 committed by GitHub
parent fb84cabd4a
commit 631225a626
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 145 additions and 19 deletions

View File

@ -8240,9 +8240,13 @@ SECTIONS
ovl_Obj_HsStump : AT(RomLocation)
{
build/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.o(.text)
build/asm/overlays/ovl_Obj_HsStump_data.o(.data)
build/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.o(.data)
build/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump.o(.rodata)
build/asm/overlays/ovl_Obj_HsStump_rodata.o(.rodata)
#ifdef NON_MATCHING
build/src/overlays/actors/ovl_Obj_HsStump/z_obj_hsstump_overlay.o(.ovl)
#else
build/asm/overlays/ovl_Obj_HsStump_rodata.o(.rodata)
#endif
}
SegmentEnd = .;
SegmentSize = SegmentEnd - SegmentStart;

View File

@ -65,6 +65,10 @@ D_06001470 = 0x06001470;
/* z_en_nnh */
D_06001510 = 0x06001510;
/* obj_hsstump */
D_060003B8 = 0x060003B8;
D_060011B0 = 0x060011B0;
/* en_encount2 */
D_06000A00 = 0x6000A00;
D_06000D78 = 0x6000D78;

View File

@ -9,7 +9,11 @@ void ObjHsStump_Destroy(Actor* thisx, GlobalContext* globalCtx);
void ObjHsStump_Update(Actor* thisx, GlobalContext* globalCtx);
void ObjHsStump_Draw(Actor* thisx, GlobalContext* globalCtx);
/*
void ObjHsStump_SetupIdle(ObjHsStump* this, GlobalContext* globalCtx);
void ObjHsStump_Idle(ObjHsStump* this, GlobalContext* globalCtx);
void ObjHsStump_SetupAppear(ObjHsStump* this, GlobalContext* globalCtx);
void ObjHsStump_Appear(ObjHsStump* this, GlobalContext* globalCtx);
const ActorInit Obj_HsStump_InitVars = {
ACTOR_OBJ_HSSTUMP,
ACTORCAT_BG,
@ -21,20 +25,124 @@ const ActorInit Obj_HsStump_InitVars = {
(ActorFunc)ObjHsStump_Update,
(ActorFunc)ObjHsStump_Draw,
};
*/
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/ObjHsStump_Init.asm")
extern Gfx D_060003B8[];
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/func_80BDAB00.asm")
extern CollisionHeader D_060011B0;
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/func_80BDAB18.asm")
static InitChainEntry sInitChain[] = {
ICHAIN_VEC3F_DIV1000(scale, 180, ICHAIN_STOP),
};
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/func_80BDAB6C.asm")
Vec3f iceSmokeAccel = {0.0f, 0.0f, 0.0f}; // Readd as static when possible
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/func_80BDABCC.asm")
void ObjHsStump_Init(Actor* thisx, GlobalContext* globalCtx) {
ObjHsStump* this = THIS;
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/ObjHsStump_Destroy.asm")
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
this->isHidden = OBJHSSTUMP_GET_ISHIDDEN(thisx);
this->switchFlag = OBJHSSTUMP_GET_SWITCHFLAG(thisx); // Must be thisx to match
BcCheck3_BgActorInit(&this->dyna, 1);
BgCheck3_LoadMesh(globalCtx, &this->dyna, &D_060011B0);
switch (this->isHidden) {
case true:
if (Flags_GetSwitch(globalCtx, this->switchFlag)) {
this->isHidden = false;
} else {
this->dyna.actor.draw = NULL;
Actor_SetScale(&this->dyna.actor, 0.0f);
func_800C62BC(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
}
case false:
ObjHsStump_SetupIdle(this, globalCtx);
}
}
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/ObjHsStump_Update.asm")
void ObjHsStump_SetupIdle(ObjHsStump* this, GlobalContext* globalCtx) {
this->actionFunc = ObjHsStump_Idle;
}
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/ObjHsStump_Draw.asm")
void ObjHsStump_Idle(ObjHsStump* this, GlobalContext* globalCtx) {
if (this->isHidden == true && Flags_GetSwitch(globalCtx, this->switchFlag)) {
ObjHsStump_SetupAppear(this, globalCtx);
}
}
void ObjHsStump_SetupAppear(ObjHsStump* this, GlobalContext* globalCtx) {
this->dyna.actor.draw = ObjHsStump_Draw;
this->framesAppeared = 0;
this->rotAngle = 0;
this->rotFactor = 3640.0f;
func_8019F128(0x3A86);
this->actionFunc = ObjHsStump_Appear;
}
#ifdef NON_MATCHING
// Correct instructions, but they are all out of order in the (this->framesAppeared) < 11 branch
// Loop looks fine, it's everything before
void ObjHsStump_Appear(ObjHsStump* this, GlobalContext* globalCtx) {
s16 i;
f32 angle;
s16 numDirections;
Vec3f iceSmokePosOffset;
Vec3f iceSmokeVelOffset;
s16 offsetAngle;
Vec3f iceSmokeVel;
f32 angleBAMS;
Vec3f iceSmokePos;
if (this->framesAppeared >= 0) {
Math_SmoothStepToF(&this->rotFactor, 0.0f, 1.0f, this->framesAppeared + 18.0f, 0.01f);
this->dyna.actor.shape.rot.x = (Math_SinS(this->rotAngle) * this->rotFactor) + this->dyna.actor.home.rot.x;
this->dyna.actor.shape.rot.z = (Math_SinS(this->rotAngle * 2) * this->rotFactor) + this->dyna.actor.home.rot.z;
this->rotAngle += 0x2000;
}
if (this->framesAppeared < 11) {
if (this->framesAppeared == 0) {
iceSmokePosOffset.x = iceSmokeVelOffset.x = 1.0f;
iceSmokePosOffset.y = iceSmokeVelOffset.y = 0.5f;
iceSmokePosOffset.z = iceSmokeVelOffset.z = 0.0f;
numDirections = 4;
angle = 360.0f / numDirections;
angleBAMS = angle * (0x10000 / 360.0f);
for (i = 0; i < numDirections; i++) {
offsetAngle = i * angleBAMS;
Lib_Vec3f_TranslateAndRotateY(&this->dyna.actor.world.pos, offsetAngle, &iceSmokePosOffset,
&iceSmokePos);
Lib_Vec3f_TranslateAndRotateY(&D_801D15B0, offsetAngle, &iceSmokeVelOffset, &iceSmokeVel);
EffectSsIceSmoke_Spawn(globalCtx, &iceSmokePos, &iceSmokeVel, &iceSmokeAccel, 100);
}
}
}
if (this->framesAppeared >= 10) {
Math_SmoothStepToF(&this->dyna.actor.scale.x, 0.17999999f, 1.0f, 0.01f, 0.001f);
Actor_SetScale(&this->dyna.actor, this->dyna.actor.scale.x);
}
if (this->dyna.actor.scale.x == 0.17999999f) {
this->isHidden = false;
func_800C6314(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
ObjHsStump_SetupIdle(this, globalCtx);
}
this->framesAppeared++;
}
#else
#pragma GLOBAL_ASM("./asm/non_matchings/overlays/ovl_Obj_HsStump_0x80BDAA30/ObjHsStump_Appear.asm")
#endif
void ObjHsStump_Destroy(Actor* thisx, GlobalContext* globalCtx) {
ObjHsStump* this = THIS;
BgCheck_RemoveActorMesh(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
}
void ObjHsStump_Update(Actor* thisx, GlobalContext* globalCtx) {
ObjHsStump* this = THIS;
this->actionFunc(this, globalCtx);
}
void ObjHsStump_Draw(Actor* thisx, GlobalContext* globalCtx) {
func_800BDFC0(globalCtx, D_060003B8);
}

View File

@ -3,11 +3,21 @@
#include <global.h>
#define OBJHSSTUMP_GET_SWITCHFLAG(thisx) ((thisx)->params & 0x7F)
#define OBJHSSTUMP_GET_ISHIDDEN(thisx) (((thisx)->params >> 12) & 0xF)
struct ObjHsStump;
typedef void (*ObjHsStumpActionFunc)(struct ObjHsStump*, GlobalContext*);
typedef struct ObjHsStump {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x28];
/* 0x000 */ DynaPolyActor dyna;
/* 0x15C */ ObjHsStumpActionFunc actionFunc;
/* 0x160 */ s16 switchFlag;
/* 0x162 */ u8 isHidden;
/* 0x164 */ s16 framesAppeared;
/* 0x166 */ s16 rotAngle;
/* 0x168 */ f32 rotFactor;
} ObjHsStump; // size = 0x16C
extern const ActorInit Obj_HsStump_InitVars;

View File

@ -15955,10 +15955,10 @@
0x80BDA2E0:("func_80BDA2E0",),
0x80BDA344:("func_80BDA344",),
0x80BDAA30:("ObjHsStump_Init",),
0x80BDAB00:("func_80BDAB00",),
0x80BDAB18:("func_80BDAB18",),
0x80BDAB6C:("func_80BDAB6C",),
0x80BDABCC:("func_80BDABCC",),
0x80BDAB00:("ObjHsStump_SetupIdle",),
0x80BDAB18:("ObjHsStump_Idle",),
0x80BDAB6C:("ObjHsStump_SetupAppear",),
0x80BDABCC:("ObjHsStump_Appear",),
0x80BDAECC:("ObjHsStump_Destroy",),
0x80BDAF00:("ObjHsStump_Update",),
0x80BDAF24:("ObjHsStump_Draw",),

View File

@ -17869,7 +17869,7 @@
0x80BDAA2C:("enPameraOverlayInfoOffset","u32","",0x4),
0x80BDAF60:("Obj_HsStump_InitVars","UNK_TYPE1","",0x1),
0x80BDAF80:("D_80BDAF80","UNK_TYPE1","",0x1),
0x80BDAF84:("D_80BDAF84","UNK_TYPE1","",0x1),
0x80BDAF84:("iceSmokeAccel","Vec3f","",0xc),
0x80BDAF90:("D_80BDAF90","f32","",0x4),
0x80BDAF94:("D_80BDAF94","f32","",0x4),
0x80BDAF98:("D_80BDAF98","f32","",0x4),