1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-02-27 11:34:29 +00:00
This commit is contained in:
Sirius902 2020-10-15 12:06:15 -07:00
parent 1365f3e68b
commit 02e27c9502
6 changed files with 94 additions and 31 deletions

View file

@ -12,7 +12,7 @@ glabel EnIk_OverrideLimbDraw2
/* 03248 80A77558 54A1000C */ bnel $a1, $at, .L80A7758C
/* 0324C 80A7755C 8FBF0014 */ lw $ra, 0x0014($sp)
.L80A77560:
/* 03250 80A77560 0C29DC50 */ jal func_80A77140
/* 03250 80A77560 0C29DC50 */ jal EnIk_AnimCurrentFrame
/* 03254 80A77564 8FA4002C */ lw $a0, 0x002C($sp)
/* 03258 80A77568 3C0141F0 */ lui $at, 0x41F0 ## $at = 41F00000
/* 0325C 80A7756C 44812000 */ mtc1 $at, $f4 ## $f4 = 30.00

View file

@ -72,7 +72,7 @@ glabel EnIk_PostLimbDraw2
/* 032E4 80A775F4 03000008 */ jr $t8
/* 032E8 80A775F8 00000000 */ nop
glabel L80A775FC
/* 032EC 80A775FC 0C29DC50 */ jal func_80A77140
/* 032EC 80A775FC 0C29DC50 */ jal EnIk_AnimCurrentFrame
/* 032F0 80A77600 8FA40080 */ lw $a0, 0x0080($sp)
/* 032F4 80A77604 3C0141F0 */ lui $at, 0x41F0 ## $at = 41F00000
/* 032F8 80A77608 44812000 */ mtc1 $at, $f4 ## $f4 = 30.00
@ -151,7 +151,7 @@ glabel L80A776D0
/* 03414 80A77724 1000003C */ beq $zero, $zero, .L80A77818
/* 03418 80A77728 AC4A0000 */ sw $t2, 0x0000($v0) ## 00000000
glabel L80A7772C
/* 0341C 80A7772C 0C29DC50 */ jal func_80A77140
/* 0341C 80A7772C 0C29DC50 */ jal EnIk_AnimCurrentFrame
/* 03420 80A77730 8FA40080 */ lw $a0, 0x0080($sp)
/* 03424 80A77734 3C0141F0 */ lui $at, 0x41F0 ## $at = 41F00000
/* 03428 80A77738 44813000 */ mtc1 $at, $f6 ## $f6 = 30.00
@ -182,7 +182,7 @@ glabel L80A7772C
/* 0348C 80A7779C 1000001E */ beq $zero, $zero, .L80A77818
/* 03490 80A777A0 AC4F0000 */ sw $t7, 0x0000($v0) ## 00000000
glabel L80A777A4
/* 03494 80A777A4 0C29DC50 */ jal func_80A77140
/* 03494 80A777A4 0C29DC50 */ jal EnIk_AnimCurrentFrame
/* 03498 80A777A8 8FA40080 */ lw $a0, 0x0080($sp)
/* 0349C 80A777AC 3C0141F0 */ lui $at, 0x41F0 ## $at = 41F00000
/* 034A0 80A777B0 44814000 */ mtc1 $at, $f8 ## $f8 = 30.00

View file

@ -1,3 +1,3 @@
glabel func_80A77140
glabel EnIk_AnimCurrentFrame
/* 02E30 80A77140 03E00008 */ jr $ra
/* 02E34 80A77144 C4800164 */ lwc1 $f0, 0x0164($a0) ## 00000164

View file

@ -67,6 +67,8 @@ extern AnimationHeader D_0600C114;
extern AnimationHeader D_0600CD70;
extern AnimationHeader D_0600DD50;
extern AnimationHeader D_0600ED24;
extern Gfx D_06018E78[];
extern Gfx D_06019100[];
extern SkeletonHeader D_0601E178;
extern AnimationHeader D_060203D8;
extern SkeletonHeader D_060205C0;
@ -681,8 +683,28 @@ Gfx* func_80A761B0(GraphicsContext* gfxCtx, u8 primR, u8 primG, u8 primB, u8 env
return displayList;
}
s32 EnIk_OverrideLimbDraw3(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_OverrideLimbDraw3.s")
s32 EnIk_OverrideLimbDraw3(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor) {
EnIk* this = (EnIk*)actor;
if (limbIndex == 0xC) {
if (this->actor.params != 0) {
*dList = D_06018E78;
}
} else if (limbIndex == 0xD) {
if (this->actor.params != 0) {
*dList = D_06019100;
}
} else if ((limbIndex == 0x1A) || (limbIndex == 0x1B)) {
if ((this->unk_2FA & 1)) {
*dList = NULL;
}
} else if ((limbIndex == 0x1C) || (limbIndex == 0x1D)) {
if (!(this->unk_2FA & 1)) {
*dList = NULL;
}
}
return 0;
}
void EnIk_PostLimbDraw3(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* actor);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_PostLimbDraw3.s")
@ -748,11 +770,13 @@ void func_80A76C14(EnIk* this) {
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A76E2C.s")
void func_80A77034(EnIk* this, GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77034.s")
void func_80A77034(EnIk* this, GlobalContext* globalCtx) {
func_8002E4B4(globalCtx, &this->actor, 75.0f, 30.0f, 30.0f, 5);
}
s32 func_80A7707C(EnIk* this, GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A7707C.s")
s32 func_80A7707C(EnIk* this) {
return SkelAnime_FrameUpdateMatrix(&this->skelAnime);
}
CsCmdActorAction* EnIk_GetNpcAction(GlobalContext* globalCtx, s32 actionIdx) {
if (globalCtx->csCtx.state != 0) {
@ -773,21 +797,44 @@ void func_80A770C0(EnIk* this, GlobalContext* globalCtx, s32 actionIdx) {
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77140.s")
f32 EnIk_AnimCurrentFrame(EnIk* this) {
return this->skelAnime.animCurrentFrame;
}
void func_80A77148(EnIk* this);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77148.s")
void func_80A77148(EnIk* this) {
this->action = 0;
this->drawMode = 0;
this->actor.shape.unk_14 = 0;
}
void func_80A77158(EnIk* this, GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77158.s")
void func_80A77158(EnIk* this, GlobalContext* globalCtx) {
SkelAnime_ChangeAnim(&this->skelAnime, &D_0600C114, 1.0f, 0.0f, SkelAnime_GetFrameCount(&D_0600C114.genericHeader),
2, 0.0f);
func_80A770C0(this, globalCtx, 4);
this->action = 1;
this->drawMode = 1;
this->actor.shape.unk_14 = 0xFF;
}
void func_80A771E4(EnIk* this);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A771E4.s")
void func_80A771E4(EnIk* this) {
SkelAnime_ChangeAnim(&this->skelAnime, &D_0600C114, 1.0f, 0.0f, SkelAnime_GetFrameCount(&D_0600C114.genericHeader),
2, 0.0f);
this->action = 2;
this->drawMode = 1;
this->unk_4D4 = 0;
this->actor.shape.unk_14 = 0xFF;
}
void func_80A77264(EnIk* this, GlobalContext* globalCtx, s32 arg2);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77264.s")
void func_80A77264(EnIk* this, GlobalContext* globalCtx, s32 arg2) {
if ((arg2 != 0) && (EnIk_GetNpcAction(globalCtx, 4) != NULL)) {
func_80A78160(this, globalCtx);
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A772A4.s")
void func_80A772A4(EnIk* this) {
Audio_PlaySoundGeneral(NA_SE_EN_IRONNACK_STAGGER_DEMO, &this->actor.projectedPos, 4, &D_801333E0, &D_801333E0,
&D_801333E8);
}
void func_80A772EC(EnIk* this, GlobalContext* globalCtx) {
static Vec3f D_80A78FA0;
@ -812,8 +859,12 @@ void func_80A7735C(EnIk* this, GlobalContext* globalCtx) {
this->actor.shape.unk_14 = 0xFF;
}
void func_80A77434(EnIk* this, GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77434.s")
void func_80A77434(EnIk* this, GlobalContext* globalCtx) {
this->action = 4;
this->drawMode = 2;
func_80A772A4(this);
this->actor.shape.unk_14 = 0xFF;
}
void func_80A77474(EnIk* this, GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A77474.s")
@ -824,8 +875,17 @@ void func_80A77474(EnIk* this, GlobalContext* globalCtx);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/func_80A774F8.s")
s32 EnIk_OverrideLimbDraw2(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_OverrideLimbDraw2.s")
s32 EnIk_OverrideLimbDraw2(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot, Actor* actor) {
EnIk* this = (EnIk*)actor;
if ((limbIndex == 0xD) || (limbIndex == 0x1A) || (limbIndex == 0x1B)) {
if (EnIk_AnimCurrentFrame(this) >= 30.0f) {
*dList = NULL;
}
}
return 0;
}
void EnIk_PostLimbDraw2(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* actor);
#pragma GLOBAL_ASM("asm/non_matchings/overlays/actors/ovl_En_Ik/EnIk_PostLimbDraw2.s")
@ -901,7 +961,7 @@ void func_80A77B0C(EnIk* this, GlobalContext* globalCtx) {
void func_80A77B3C(EnIk* this, GlobalContext* globalCtx) {
s32 sp24;
sp24 = func_80A7707C(this, globalCtx);
sp24 = func_80A7707C(this);
func_80A76C14(this);
func_80A77034(this, globalCtx);
func_80A779DC(this, globalCtx);
@ -915,7 +975,7 @@ void EnIk_Update(Actor* thisx, GlobalContext* globalCtx) {
osSyncPrintf(VT_FGCOL(RED) "メインモードがおかしい!!!!!!!!!!!!!!!!!!!!!!!!!\n" VT_RST);
return;
}
sActionFuncs[this->action](this, globalCtx);
}
@ -954,7 +1014,7 @@ void EnIk_Draw(Actor* thisx, GlobalContext* globalCtx) {
osSyncPrintf(VT_FGCOL(RED) "描画モードがおかしい!!!!!!!!!!!!!!!!!!!!!!!!!\n" VT_RST);
return;
}
sDrawFuncs[this->drawMode](this, globalCtx);
}

View file

@ -15,12 +15,12 @@ typedef struct EnIk {
/* 0x0244 */ Vec3s transitionDrawTable[30];
/* 0x02F8 */ u8 unk_2F8;
/* 0x02F9 */ u8 unk_2F9;
/* 0x02F9 */ char unk_2FA[0x01];
/* 0x02FA */ u8 unk_2FA;
/* 0x02FB */ u8 unk_2FB;
/* 0x02FC */ u8 unk_2FC;
/* 0x02FD */ char unk_2FD[0x01];
/* 0x02FE */ s8 unk_2FE;
/* 0x02FD */ s8 unk_2FF;
/* 0x02FF */ s8 unk_2FF;
/* 0x0300 */ s16 unk_300;
/* 0x0302 */ s16 switchFlags;
/* 0x0304 */ EnIkActionFunc actionFunc;
@ -33,7 +33,8 @@ typedef struct EnIk {
/* 0x04C8 */ s32 action;
/* 0x04CC */ s32 drawMode;
/* 0x04D0 */ u32 npcAction;
/* 0x04D4 */ char unk_4D4[0x08];
/* 0x04D4 */ s32 unk_4D4;
/* 0x04D8 */ char unk_4D8[0x04];
} EnIk; // size = 0x04DC
extern const ActorInit En_Ik_InitVars;

View file

@ -1185,6 +1185,8 @@ D_0600C114 = 0x0600C114;
D_0600CD70 = 0x0600CD70;
D_0600DD50 = 0x0600DD50;
D_0600ED24 = 0x0600ED24;
D_06018E78 = 0x06018E78;
D_06019100 = 0x06019100;
D_0601E178 = 0x0601E178;
D_060203D8 = 0x060203D8;
D_060205C0 = 0x060205C0;