Decompile `ovl_TG_Sw` (#44)

Co-authored-by: MMDecomp <MMDecomp@anon.tld>
This commit is contained in:
Kenix3 2020-12-09 19:35:40 -05:00 committed by GitHub
parent 96f680d1d1
commit 6ac8ea373c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 116 additions and 40 deletions

View File

@ -1540,8 +1540,8 @@ s32 func_800E9250(GlobalContext* ctxt, Actor* actor, Vec3s* param_3, Vec3s* para
u8 func_800E9360(void); // func_800E9360
void static_context_init(void); // func_800E93E0
void func_800E9470(void); // func_800E9470
void func_800E9488(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE2 param_5, UNK_TYPE2 param_6, UNK_TYPE4 param_7, UNK_TYPE4 param_8, UNK_TYPE4 param_9, UNK_TYPE1 param_10, UNK_TYPE1 param_11, UNK_TYPE1 param_12, UNK_TYPE1 param_13, UNK_TYPE2 param_14, UNK_TYPE4 param_15); // func_800E9488
void func_800E9564(void); // func_800E9564
void DebugDisplay_AddObject(f32 posX, f32 posY, f32 posZ, s16 rotX, s16 rotY, s16 rotZ, f32 scaleX, f32 scaleY, f32 scaleZ, u8 red, u8 green, u8 blue, u8 alpha, s16 type, GraphicsContext* gfxCtx); // func_800E9488
void DebugDisplay_DrawObjects(GlobalContext* globalCtx); // func_800E9564
void func_800E95F4(void); // func_800E95F4
void func_800E97D8(void); // func_800E97D8
void func_800E992C(void); // func_800E992C
@ -2737,7 +2737,7 @@ void func_8013D768(void); // func_8013D768
void func_8013D83C(void); // func_8013D83C
void func_8013D8DC(void); // func_8013D8DC
void func_8013D924(void); // func_8013D924
void func_8013D960(void); // func_8013D960
Actor* func_ActorCategoryIterateById(GlobalContext* globalCtx, struct Actor* actorListStart, s32 actorCategory, s32 actorId); // func_8013D960
void func_8013D9C8(void); // func_8013D9C8
void func_8013DB90(void); // func_8013DB90
void func_8013DC40(void); // func_8013DC40

View File

@ -9102,12 +9102,6 @@ void func_80B19718(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_
void EnSnowman_Draw(void); // func_80B198B0
void func_80B19948(void); // func_80B19948
void func_80B19998(void); // func_80B19998
void func_80B19F60(void); // func_80B19F60
void func_80B1A008(void); // func_80B1A008
void TGSw_Init(void); // func_80B1A15C
void TGSw_Destroy(void); // func_80B1A17C
void TGSw_Update(void); // func_80B1A18C
void TGSw_Draw(void); // func_80B1A1B0
void EnPoSisters_Init(void); // func_80B1A3B0
void EnPoSisters_Destroy(void); // func_80B1A600
void func_80B1A648(void); // func_80B1A648

View File

@ -40,12 +40,13 @@ extern GraphicsContext* oGfxCtx;
#define GRAPH_ALLOC(gfxCtx, size) \
((gfxCtx)->polyOpa.d = (Gfx*)((u8*)(gfxCtx)->polyOpa.d - (size)))
#define SQ(x) ((x)*(x))
#define ABS(x) ((x) >= 0 ? (x) : -(x))
#define ULTRA_ABS(x) ((x) > 0) ? (x) : -(x)
#define DECR(x) ((x) == 0 ? 0 : ((x) -= 1))
#define SQ(x) ((x)*(x))
#define ABS(x) ((x) >= 0 ? (x) : -(x))
#define ABS_ALT(x) ((x) < 0 ? -(x) : (x))
#define DECR(x) ((x) == 0 ? 0 : ((x) -= 1))
#define CLAMP(x, min, max) ((x) < (min) ? (min) : (x) > (max) ? (max) : (x))
#define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x))
#define CLAMP_MIN(x, min) ((x) < (min) ? (min) : (x))
#define CLAMP_MAX(x, max) ((x) > (max) ? (max) : (x))
#define CLAMP_MIN(x, min) ((x) < (min) ? (min) : (x))
#endif // _MACROS_H_

View File

@ -10509,10 +10509,6 @@ extern OverlayRelocationSection enSnowmanOverlayInfo; // D_80B19BA0
extern u32 enSnowmanOverlayRelocations[233]; // D_80B19BB4
extern u32 enSnowmanOverlayInfoOffset; // D_80B19F5C
extern ActorInit TG_Sw_InitVars; // TG_Sw_InitVars
extern UNK_TYPE4 D_80B1A340; // D_80B1A340
extern UNK_TYPE4 D_80B1A344; // D_80B1A344
extern UNK_TYPE4 D_80B1A348; // D_80B1A348
extern UNK_TYPE4 D_80B1A34C; // D_80B1A34C
extern OverlayRelocationSection tGSwOverlayInfo; // D_80B1A350
extern u32 tGSwOverlayRelocations[16]; // D_80B1A364
extern u32 tGSwOverlayInfoOffset; // D_80B1A3AC

View File

@ -6108,8 +6108,9 @@ SECTIONS
ovl_TG_Sw : AT(RomLocation)
{
build/src/overlays/actors/ovl_TG_Sw/z_tg_sw.o(.text)
build/asm/ovl_TG_Sw_data.o(.data)
build/asm/ovl_TG_Sw_rodata.o(.rodata)
build/src/overlays/actors/ovl_TG_Sw/z_tg_sw.o(.data)
build/src/overlays/actors/ovl_TG_Sw/z_tg_sw.o(.rodata)
build/src/overlays/actors/ovl_TG_Sw/z_tg_sw_overlay.o(.ovl)
}
SegmentEnd = .;
SegmentSize = SegmentEnd - SegmentStart;

View File

@ -4,12 +4,14 @@
#define THIS ((TGSw*)thisx)
// Prototypes
void TGSw_Init(Actor* thisx, GlobalContext* globalCtx);
void TGSw_Destroy(Actor* thisx, GlobalContext* globalCtx);
void TGSw_Update(Actor* thisx, GlobalContext* globalCtx);
void TGSw_Draw(Actor* thisx, GlobalContext* globalCtx);
/*
static void TGSw_ActionExecuteOneShot(struct TGSw* this, GlobalContext* globalCtx);
const ActorInit TG_Sw_InitVars = {
ACTOR_TG_SW,
ACTORTYPE_PROP,
@ -21,16 +23,102 @@ const ActorInit TG_Sw_InitVars = {
(ActorFunc)TGSw_Update,
(ActorFunc)TGSw_Draw
};
*/
GLOBAL_ASM("asm/non_matchings/ovl_TG_Sw_0x80B19F60/func_80B19F60.asm")
static void TGSw_ActionDecider(struct TGSw* this, GlobalContext* globalCtx) {
f32 scaledAbsoluteRotZ;
f32 scaledAbsoluteRotY;
u8 unk1F4;
GLOBAL_ASM("asm/non_matchings/ovl_TG_Sw_0x80B19F60/func_80B1A008.asm")
// Maybe actorCtx Debug Flag?
if (!!globalCtx->actorCtx.unk1F5) {
scaledAbsoluteRotY = ABS_ALT(this->actor.currPosRot.rot.y) * 4.0f;
scaledAbsoluteRotZ = ABS_ALT(this->actor.currPosRot.rot.z) * 4.0f;
GLOBAL_ASM("asm/non_matchings/ovl_TG_Sw_0x80B19F60/TGSw_Init.asm")
if (!(scaledAbsoluteRotZ < this->actor.xzDistanceFromLink) &&
!(scaledAbsoluteRotY < this->actor.yDistanceFromLink)) {
unk1F4 = globalCtx->actorCtx.unk1F4;
if (unk1F4 == 2 || !unk1F4) {
this->actionFunc = &TGSw_ActionExecuteOneShot;
}
}
}
}
GLOBAL_ASM("asm/non_matchings/ovl_TG_Sw_0x80B19F60/TGSw_Destroy.asm")
static void TGSw_ActionExecuteOneShot(struct TGSw* this, GlobalContext* globalCtx) {
void* actorIterator;
struct Actor* actorEntry;
GLOBAL_ASM("asm/non_matchings/ovl_TG_Sw_0x80B19F60/TGSw_Update.asm")
actorIterator = NULL;
do {
actorEntry = func_ActorCategoryIterateById(globalCtx, (struct Actor*)actorIterator, ACTORTYPE_ENEMY, ACTOR_EN_SW);
if (actorIterator = (void*)!actorEntry) {
break;
}
GLOBAL_ASM("asm/non_matchings/ovl_TG_Sw_0x80B19F60/TGSw_Draw.asm")
if ((((this->actor.params & 0xFC) >> 2) & 0xFF) == (((actorEntry->params & 0xFC) >> 2) & 0xFF)) {
// Prevents register swap
if (1) {}
actorEntry->parent = (struct Actor*)this;
actorEntry->speedXZ = ABS_ALT(this->actor.currPosRot.rot.x);
break;
}
} while (actorIterator = actorEntry->next);
actorIterator = NULL;
do {
actorEntry = func_ActorCategoryIterateById(globalCtx, actorIterator, ACTORTYPE_NPC, ACTOR_EN_SW);
if (actorIterator = (void*)!actorEntry) {
break;
}
if ((((this->actor.params & 0xFC) >> 2) & 0xFF) == (((actorEntry->params & 0xFC) >> 2) & 0xFF)) {
actorEntry->parent = (struct Actor*)this;
actorEntry->speedXZ = ABS_ALT(this->actor.currPosRot.rot.x);
break;
}
} while (actorIterator = actorEntry->next);
Actor_MarkForDeath((Actor*)this);
}
void TGSw_Init(Actor* thisx, GlobalContext* globalCtx) {
TGSw* this = THIS;
this->actor.cutscene = this->actor.currPosRot.rot.z;
this->actionFunc = &TGSw_ActionDecider;
}
void TGSw_Destroy(Actor* thisx, GlobalContext* globalCtx) {
;
}
void TGSw_Update(Actor* thisx, GlobalContext* globalCtx) {
TGSw* this = THIS;
this->actionFunc(this, globalCtx);
}
void TGSw_Draw(Actor* thisx, GlobalContext* globalCtx) {
s32 pad0;
s32 absoluteRotZ;
s32 absoluteRotY;
f32 factoredRotZ;
TGSw* this = THIS;
if (!!sREG(0)) {
absoluteRotZ = ABS_ALT(this->actor.currPosRot.rot.z);
factoredRotZ = absoluteRotZ * 0.2f;
// if needs to use the factored Rot as a var, "true" doesnt work
if (factoredRotZ)
{
;
}
absoluteRotY = ABS_ALT(this->actor.currPosRot.rot.y);
DebugDisplay_AddObject(this->actor.currPosRot.pos.x, this->actor.currPosRot.pos.y, this->actor.currPosRot.pos.z,
0, this->actor.shape.rot.y, 0, 0.1f, 0.1f, factoredRotZ, 0xA0, 0xA0, 0xA0, 0xFF, 6,
globalCtx->state.gfxCtx);
DebugDisplay_AddObject(this->actor.currPosRot.pos.x, this->actor.currPosRot.pos.y, this->actor.currPosRot.pos.z,
0, 0, 0, 0.1f, absoluteRotY * 0.2f, 0.1f, 0xA0, 0xA0, 0xA0, 0xFF, 6,
globalCtx->state.gfxCtx);
this->actor.shape.rot.y = (s16)(this->actor.shape.rot.y + 0x1000);
}
}

View File

@ -4,10 +4,11 @@
#include <global.h>
struct TGSw;
typedef void (*TGSwActionFunc)(struct TGSw*, GlobalContext*);
typedef struct TGSw {
/* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x4];
/* 0x144 */ TGSwActionFunc actionFunc;
} TGSw; // size = 0x148
extern const ActorInit TG_Sw_InitVars;

View File

@ -389,7 +389,6 @@ ovl_Obj_Dhouse_0x80B12980
ovl_Obj_Hakaisi_0x80B14180
ovl_Bg_Hakugin_Switch_0x80B15790
ovl_En_Snowman_0x80B16B00
ovl_TG_Sw_0x80B19F60
ovl_En_Po_Sisters_0x80B1A3B0
ovl_En_Pp_0x80B1DEB0
ovl_En_Hakurock_0x80B21B00

View File

@ -1530,8 +1530,8 @@
0x800E9360:("func_800E9360",),
0x800E93E0:("static_context_init",),
0x800E9470:("func_800E9470",),
0x800E9488:("func_800E9488",),
0x800E9564:("func_800E9564",),
0x800E9488:("DebugDisplay_AddObject",),
0x800E9564:("DebugDisplay_DrawObjects",),
0x800E95F4:("func_800E95F4",),
0x800E97D8:("func_800E97D8",),
0x800E992C:("func_800E992C",),
@ -2698,7 +2698,7 @@
0x8013D83C:("func_8013D83C",),
0x8013D8DC:("func_8013D8DC",),
0x8013D924:("func_8013D924",),
0x8013D960:("func_8013D960",),
0x8013D960:("func_ActorCategoryIterateById",),
0x8013D9C8:("func_8013D9C8",),
0x8013DB90:("func_8013DB90",),
0x8013DC40:("func_8013DC40",),
@ -13098,8 +13098,8 @@
0x80B198B0:("EnSnowman_Draw",),
0x80B19948:("func_80B19948",),
0x80B19998:("func_80B19998",),
0x80B19F60:("func_80B19F60",),
0x80B1A008:("func_80B1A008",),
0x80B19F60:("TGSw_ActionDecider",),
0x80B1A008:("TGSw_ActionExecuteOneShot",),
0x80B1A15C:("TGSw_Init",),
0x80B1A17C:("TGSw_Destroy",),
0x80B1A18C:("TGSw_Update",),

View File

@ -15423,10 +15423,6 @@
0x80B19BB4:("enSnowmanOverlayRelocations","u32","[233]",0x3a4),
0x80B19F5C:("enSnowmanOverlayInfoOffset","u32","",0x4),
0x80B1A320:("TG_Sw_InitVars","UNK_TYPE1","",0x1),
0x80B1A340:("D_80B1A340","UNK_TYPE4","",0x4),
0x80B1A344:("D_80B1A344","UNK_TYPE4","",0x4),
0x80B1A348:("D_80B1A348","UNK_TYPE4","",0x4),
0x80B1A34C:("D_80B1A34C","UNK_TYPE4","",0x4),
0x80B1A350:("tGSwOverlayInfo","OverlayRelocationSection","",0x14),
0x80B1A364:("tGSwOverlayRelocations","u32","[16]",0x40),
0x80B1A3AC:("tGSwOverlayInfoOffset","u32","",0x4),