mirror of
https://github.com/zeldaret/mm.git
synced 2024-11-23 12:59:44 +00:00
parent
97e066f23f
commit
e1cb76c258
@ -2087,7 +2087,7 @@ void func_8010A33C(GlobalContext* globalCtx, s16 param_2);
|
||||
// void func_8010BEBC(void);
|
||||
// void func_8010BEF0(void);
|
||||
// void func_8010BF24(void);
|
||||
s32 func_8010BF58(Actor* actor, GlobalContext* globalCtx, s32* param_2, s32 param_3, s32* param_4);
|
||||
s32 func_8010BF58(Actor* actor, GlobalContext* globalCtx, s32* param_3, s32 param_4, s32* param_5);
|
||||
// void Nmi_Init(void);
|
||||
// void Nmi_SetPrenmiStart(void);
|
||||
// s32 Nmi_GetPrenmiHasStarted(void);
|
||||
@ -2694,7 +2694,7 @@ s32 func_8013B6B0(Path* path, UNK_PTR arg1, s32* arg2, s32 arg3, s32 arg4, s32*
|
||||
void func_8013B878(GlobalContext* globalCtx, Path* path, s32 arg2, Vec3f* arg3);
|
||||
Path* func_8013BB34(GlobalContext* globalCtx, u8 arg1, s32 arg2);
|
||||
Actor* func_8013BB7C(Actor* actor, GlobalContext* globalCtx, s32 actorCategory, s32 actorId);
|
||||
UNK_TYPE func_8013BC6C(SkelAnime* skelAnime, ActorAnimationEntryS* arg1, s32 arg2);
|
||||
s32 func_8013BC6C(SkelAnime* skelAnime, ActorAnimationEntryS* arg1, s32 arg2);
|
||||
// void func_8013BD40(void);
|
||||
// void func_8013BEDC(void);
|
||||
// void func_8013C068(UNK_TYPE1 param_1, UNK_TYPE1 param_2, UNK_TYPE1 param_3, UNK_TYPE1 param_4, UNK_TYPE4 param_5);
|
||||
|
@ -31,6 +31,7 @@ typedef enum {
|
||||
/* 0x14 */ ITEM_POTION_GREEN,
|
||||
/* 0x15 */ ITEM_POTION_BLUE,
|
||||
/* 0x16 */ ITEM_FAIRY,
|
||||
/* 0x17 */ ITEM_DEKU_PRINCESS,
|
||||
/* 0x1E */ ITEM_MUSHROOM = 0x1E,
|
||||
/* 0x38 */ ITEM_MASK_ALL_NIGHT = 0x38,
|
||||
/* 0x3A */ ITEM_MASK_KEATON = 0x3A,
|
||||
|
3
spec
3
spec
@ -3045,8 +3045,7 @@ beginseg
|
||||
name "ovl_En_Dnq"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Dnq/z_en_dnq.o"
|
||||
include "build/data/ovl_En_Dnq/ovl_En_Dnq.data.o"
|
||||
include "build/data/ovl_En_Dnq/ovl_En_Dnq.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Dnq/ovl_En_Dnq_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
@ -1,3 +1,9 @@
|
||||
/*
|
||||
* File: z_en_dnq.c
|
||||
* Overlay: ovl_En_Dnq
|
||||
* Description: Deku King
|
||||
*/
|
||||
|
||||
#include "z_en_dnq.h"
|
||||
|
||||
#define FLAGS 0x00000009
|
||||
@ -9,7 +15,31 @@ void EnDnq_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnDnq_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnDnq_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
#if 0
|
||||
void func_80A52FB8(EnDnq* this, GlobalContext* globalCtx);
|
||||
|
||||
extern AnimationHeader D_060006F0;
|
||||
extern AnimationHeader D_06000BF8;
|
||||
extern AnimationHeader D_06001100;
|
||||
extern AnimationHeader D_06001AEC;
|
||||
extern AnimationHeader D_06002690;
|
||||
extern AnimationHeader D_06003408;
|
||||
extern AnimationHeader D_06003DBC;
|
||||
extern AnimationHeader D_060047B8;
|
||||
extern AnimationHeader D_06004EA0;
|
||||
extern AnimationHeader D_06005284;
|
||||
extern AnimationHeader D_06005A14;
|
||||
extern AnimationHeader D_06005E18;
|
||||
extern AnimationHeader D_06006984;
|
||||
extern AnimationHeader D_06007528;
|
||||
extern AnimationHeader D_06008328;
|
||||
extern FlexSkeletonHeader D_0600EB48;
|
||||
extern AnimationHeader D_0600F504;
|
||||
|
||||
static s32 D_80A53400[] = {
|
||||
0x00120100, 0x150E0899, 0x0C120F08, 0x9A0C0F08, 0x9B0C0F08, 0x9C0C1112, 0x01100E08, 0x980C1000, 0x00120200,
|
||||
0x0C0E089D, 0x0C0F089E, 0x0C111202, 0x100E089F, 0x0C100000, 0x0E08A10C, 0x0F08A20C, 0x10000000,
|
||||
};
|
||||
|
||||
const ActorInit En_Dnq_InitVars = {
|
||||
ACTOR_EN_DNQ,
|
||||
ACTORCAT_NPC,
|
||||
@ -22,55 +52,424 @@ const ActorInit En_Dnq_InitVars = {
|
||||
(ActorFunc)EnDnq_Draw,
|
||||
};
|
||||
|
||||
// static ColliderCylinderInit sCylinderInit = {
|
||||
static ColliderCylinderInit D_80A53464 = {
|
||||
{ COLTYPE_HIT1, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_ON | OC1_TYPE_ALL, OC2_TYPE_1, COLSHAPE_CYLINDER, },
|
||||
{ ELEMTYPE_UNK1, { 0x00000000, 0x00, 0x00 }, { 0xF7CFFFFF, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_ON, },
|
||||
static ColliderCylinderInit sCylinderInit = {
|
||||
{
|
||||
COLTYPE_HIT1,
|
||||
AT_NONE,
|
||||
AC_ON | AC_TYPE_PLAYER,
|
||||
OC1_ON | OC1_TYPE_ALL,
|
||||
OC2_TYPE_1,
|
||||
COLSHAPE_CYLINDER,
|
||||
},
|
||||
{
|
||||
ELEMTYPE_UNK1,
|
||||
{ 0x00000000, 0x00, 0x00 },
|
||||
{ 0xF7CFFFFF, 0x00, 0x00 },
|
||||
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||
BUMP_ON,
|
||||
OCELEM_ON,
|
||||
},
|
||||
{ 34, 80, 0, { 0, 0, 0 } },
|
||||
};
|
||||
|
||||
// sColChkInfoInit
|
||||
static CollisionCheckInfoInit2 D_80A53490 = { 1, 0, 0, 0, MASS_IMMOVABLE };
|
||||
static CollisionCheckInfoInit2 sColChkInfoInit = { 1, 0, 0, 0, MASS_IMMOVABLE };
|
||||
|
||||
#endif
|
||||
static ActorAnimationEntryS D_80A5349C[] = {
|
||||
{ &D_06008328, 1.0f, 0, -1, 0, 0 }, { &D_06008328, 1.0f, 0, -1, 0, -4 }, { &D_06007528, 1.0f, 0, -1, 2, -4 },
|
||||
{ &D_060006F0, 1.0f, 0, -1, 2, 0 }, { &D_06000BF8, 1.0f, 0, -1, 0, -4 }, { &D_06002690, 0.0f, 0, -1, 2, 0 },
|
||||
{ &D_06002690, 1.0f, 0, -1, 2, -4 }, { &D_06003408, 1.0f, 0, -1, 0, -4 }, { &D_06006984, 1.0f, 0, -1, 2, -4 },
|
||||
{ &D_06005E18, 1.0f, 0, -1, 2, -4 }, { &D_06005A14, 1.0f, 0, -1, 2, -4 }, { &D_06005284, 1.0f, 0, -1, 2, -4 },
|
||||
{ &D_06001AEC, 1.0f, 0, -1, 2, 0 }, { &D_06001100, 1.0f, 0, -1, 2, 0 }, { &D_06004EA0, 1.0f, 0, -1, 0, -4 },
|
||||
{ &D_0600F504, 1.0f, 0, -1, 0, -4 }, { &D_060047B8, 1.0f, 0, -1, 0, -4 }, { &D_06003DBC, 1.0f, 0, -1, 2, -4 },
|
||||
{ &D_06005A14, 1.0f, 0, -1, 0, -4 }, { &D_06003DBC, 1.0f, 0, -1, 0, -4 },
|
||||
};
|
||||
|
||||
extern ColliderCylinderInit D_80A53464;
|
||||
extern CollisionCheckInfoInit2 D_80A53490;
|
||||
void func_80A52530(GlobalContext* globalCtx, EnDnq* this) {
|
||||
func_8013A530(globalCtx, &this->actor, 10, &this->actor.focus.pos, &this->actor.world.rot, 120.0f, 480.0f, 0x38E3);
|
||||
}
|
||||
|
||||
extern UNK_TYPE D_0600EB48;
|
||||
s32 func_80A5257C(EnDnq* this, s32 arg1) {
|
||||
s32 phi_v1 = false;
|
||||
s32 ret = false;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52530.s")
|
||||
if ((arg1 == 0) || (arg1 == 1)) {
|
||||
switch (this->unk_398) {
|
||||
case 0:
|
||||
case 1:
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A5257C.s")
|
||||
default:
|
||||
phi_v1 = true;
|
||||
break;
|
||||
}
|
||||
} else if (arg1 != this->unk_398) {
|
||||
phi_v1 = true;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52604.s")
|
||||
if (phi_v1) {
|
||||
this->unk_398 = arg1;
|
||||
ret = func_8013BC6C(&this->skelAnime, D_80A5349C, arg1);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52648.s")
|
||||
return ret;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A526F8.s")
|
||||
void func_80A52604(EnDnq* this, GlobalContext* globalCtx) {
|
||||
Collider_UpdateCylinder(&this->actor, &this->collider);
|
||||
CollisionCheck_SetOC(globalCtx, &globalCtx->colChkCtx, &this->collider.base);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52944.s")
|
||||
s32 func_80A52648(EnDnq* this, GlobalContext* globalCtx) {
|
||||
s32 ret = false;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52A78.s")
|
||||
if (globalCtx->csCtx.state != 0) {
|
||||
if (!(this->unk_37C & 0x20)) {
|
||||
this->actor.flags &= ~1;
|
||||
this->unk_1DC = 0xFF;
|
||||
this->unk_37C |= 0x20;
|
||||
}
|
||||
func_8013AED4(&this->unk_37C, 0, 7);
|
||||
ret = true;
|
||||
} else {
|
||||
if (this->unk_37C & 0x20) {
|
||||
this->actor.flags |= 1;
|
||||
this->unk_1DC = 0xFF;
|
||||
this->unk_37C &= ~0x20;
|
||||
func_8013AED4(&this->unk_37C, 3, 7);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52B68.s")
|
||||
return ret;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52C6C.s")
|
||||
s32 func_80A526F8(EnDnq* this) {
|
||||
if (this->unk_386 == 0) {
|
||||
func_80A5257C(this, 8);
|
||||
this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 4) + 3;
|
||||
this->unk_388 = 0;
|
||||
this->unk_386 = 1;
|
||||
} else if (func_801378B8(&this->skelAnime, this->skelAnime.animFrameCount)) {
|
||||
switch (this->unk_398) {
|
||||
case 8:
|
||||
if (DECR(this->unk_38C) == 0) {
|
||||
func_80A5257C(this, 9);
|
||||
}
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52CF8.s")
|
||||
case 9:
|
||||
func_80A5257C(this, 10);
|
||||
this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 3) + 2;
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52D44.s")
|
||||
case 10:
|
||||
if (DECR(this->unk_38C) == 0) {
|
||||
this->unk_388++;
|
||||
if ((this->unk_38C != 0) || (this->unk_388 < 2)) {
|
||||
func_80A5257C(this, 11);
|
||||
} else {
|
||||
func_80A5257C(this, 17);
|
||||
this->unk_38C = 4;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52DC8.s")
|
||||
case 11:
|
||||
func_80A5257C(this, 8);
|
||||
this->unk_38C = ((s32)(Rand_ZeroOne() * 100.0f) % 4) + 3;
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A52FB8.s")
|
||||
case 17:
|
||||
if (DECR(this->unk_38C) == 0) {
|
||||
this->unk_386 = 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/func_80A53038.s")
|
||||
if (this->unk_386 != 0) {
|
||||
this->skelAnime.animCurrentFrame = 0.0f;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/EnDnq_Init.s")
|
||||
this->unk_38A = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/EnDnq_Destroy.s")
|
||||
s32 func_80A52944(EnDnq* this) {
|
||||
s16 phi_v1 = 0;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/EnDnq_Update.s")
|
||||
if (this->unk_386 == 0) {
|
||||
func_80A5257C(this, 12);
|
||||
this->unk_38C = 1;
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
this->unk_386 = 1;
|
||||
phi_v1 = this->unk_38C * 0x2000;
|
||||
this->actor.shape.rot.y += phi_v1;
|
||||
} else if (func_801378B8(&this->skelAnime, this->skelAnime.animFrameCount)) {
|
||||
this->unk_386++;
|
||||
if (this->unk_386 >= 6) {
|
||||
func_80A5257C(this, 12);
|
||||
this->unk_386 = 1;
|
||||
phi_v1 = this->unk_38C * 0x2000;
|
||||
} else if (this->unk_386 <= 3) {
|
||||
this->unk_38C = -this->unk_38C;
|
||||
this->skelAnime.animCurrentFrame = 0.0f;
|
||||
phi_v1 = this->unk_38C * 0x2000;
|
||||
} else {
|
||||
func_80A5257C(this, 13);
|
||||
this->skelAnime.animCurrentFrame = 0.0f;
|
||||
}
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
this->actor.shape.rot.y += phi_v1;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnq/EnDnq_Draw.s")
|
||||
this->unk_38A = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 func_80A52A78(EnDnq* this, GlobalContext* globalCtx) {
|
||||
static s32 D_80A535DC[] = {
|
||||
17, 12, 14, 13, 16,
|
||||
};
|
||||
|
||||
if (this->unk_38A == 0) {
|
||||
this->unk_38C = 0;
|
||||
this->unk_38A = 1;
|
||||
this->unk_388 = globalCtx->state.frames % 5;
|
||||
}
|
||||
|
||||
this->actor.shape.rot.y = this->actor.world.rot.y;
|
||||
if (this->unk_38C != 0) {
|
||||
this->unk_38C--;
|
||||
}
|
||||
|
||||
if (func_801378B8(&this->skelAnime, this->skelAnime.animFrameCount)) {
|
||||
if (this->unk_38C == 0) {
|
||||
this->unk_38C = Rand_S16Offset(20, 20);
|
||||
this->unk_388 += 3;
|
||||
this->unk_388 %= 5;
|
||||
}
|
||||
func_80A5257C(this, D_80A535DC[this->unk_388]);
|
||||
this->skelAnime.animCurrentFrame = 0.0f;
|
||||
}
|
||||
|
||||
this->unk_386 = 0;
|
||||
return 0;
|
||||
}
|
||||
|
||||
s32 func_80A52B68(EnDnq* this, GlobalContext* globalCtx) {
|
||||
Player* player = PLAYER;
|
||||
u16 temp = globalCtx->msgCtx.unk11F04;
|
||||
|
||||
if ((player->stateFlags1 & 0x40) && (player->targetActor == &this->actor)) {
|
||||
switch (temp) {
|
||||
case 0x89B:
|
||||
func_80A5257C(this, 18);
|
||||
break;
|
||||
|
||||
case 0x89E:
|
||||
func_80A5257C(this, 19);
|
||||
break;
|
||||
|
||||
case 0x898:
|
||||
case 0x89F:
|
||||
func_80A5257C(this, 16);
|
||||
break;
|
||||
|
||||
case 0x899:
|
||||
case 0x89D:
|
||||
func_80A5257C(this, 14);
|
||||
break;
|
||||
|
||||
case 0x89A:
|
||||
case 0x89C:
|
||||
func_80A5257C(this, 15);
|
||||
break;
|
||||
}
|
||||
this->unk_39C = 1;
|
||||
} else if (this->unk_39C != 0) {
|
||||
func_80A5257C(this, 0);
|
||||
this->unk_39C = 0;
|
||||
this->unk_37E = 0;
|
||||
this->unk_386 = 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void func_80A52C6C(EnDnq* this, GlobalContext* globalCtx) {
|
||||
Player* player = PLAYER;
|
||||
s32 pad;
|
||||
Vec3f sp34 = { 0.0f, 0.0f, 110.0f };
|
||||
Vec3f sp28;
|
||||
Vec3f sp1C;
|
||||
|
||||
Math_Vec3f_Copy(&sp1C, &player->actor.world.pos);
|
||||
Lib_Vec3f_TranslateAndRotateY(&this->actor.world.pos, this->actor.world.rot.y, &sp34, &sp28);
|
||||
Math_Vec3f_Copy(&this->unk_370, &sp28);
|
||||
this->actor.xzDistToPlayer = Math_Vec3f_DistXZ(&sp28, &sp1C);
|
||||
}
|
||||
|
||||
s32* func_80A52CF8(EnDnq* this, GlobalContext* globalCtx) {
|
||||
if (gSaveContext.weekEventReg[23] & 0x20) {
|
||||
return &D_80A53400[14];
|
||||
}
|
||||
|
||||
if (this->unk_3A4 != 0) {
|
||||
return &D_80A53400[8];
|
||||
}
|
||||
|
||||
return &D_80A53400[0];
|
||||
}
|
||||
|
||||
s32 func_80A52D44(EnDnq* this, GlobalContext* globalCtx) {
|
||||
s32 ret = false;
|
||||
|
||||
if ((this->unk_37C & 7) && func_800B84D0(&this->actor, globalCtx)) {
|
||||
func_8013AED4(&this->unk_37C, 0, 7);
|
||||
this->unk_380 = func_80A52CF8(this, globalCtx);
|
||||
this->actionFunc = func_80A52FB8;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void func_80A52DC8(EnDnq* this, GlobalContext* globalCtx) {
|
||||
Player* player = PLAYER;
|
||||
s16 yaw = this->actor.yawTowardsPlayer - this->actor.world.rot.y;
|
||||
|
||||
if (yaw <= 0x3800) {
|
||||
func_8013AED4(&this->unk_37C, 3, 7);
|
||||
} else {
|
||||
func_8013AED4(&this->unk_37C, 0, 7);
|
||||
}
|
||||
|
||||
if (!(gSaveContext.weekEventReg[23] & 0x20)) {
|
||||
this->unk_390 = 70.0f;
|
||||
if (func_80114F2C(ITEM_DEKU_PRINCESS) && !func_801690CC(globalCtx) && (func_80152498(&globalCtx->msgCtx) == 0) &&
|
||||
(ActorCutscene_GetCurrentIndex() == -1)) {
|
||||
if ((DECR(this->unk_384) == 0) && (gSaveContext.weekEventReg[29] & 0x40)) {
|
||||
func_801518B0(globalCtx, 0x969, NULL);
|
||||
this->unk_384 = 200;
|
||||
}
|
||||
}
|
||||
|
||||
this->unk_394 = this->actor.xzDistToPlayer;
|
||||
func_80A52C6C(this, globalCtx);
|
||||
if (this->actor.xzDistToPlayer < this->unk_390) {
|
||||
player->unk_B2B = 0x1A;
|
||||
}
|
||||
|
||||
this->actor.xzDistToPlayer = this->unk_394;
|
||||
|
||||
if (gSaveContext.weekEventReg[83] & 8) {
|
||||
func_80A52A78(this, globalCtx);
|
||||
} else if (this->unk_3A4 == 0) {
|
||||
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
|
||||
func_80A526F8(this);
|
||||
} else {
|
||||
func_80A52944(this);
|
||||
}
|
||||
} else {
|
||||
Math_ApproachS(&this->actor.shape.rot.y, this->actor.world.rot.y, 3, 0x2AA8);
|
||||
this->unk_390 = 70.0f;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80A52FB8(EnDnq* this, GlobalContext* globalCtx) {
|
||||
s16 sp2E = this->actor.yawTowardsPlayer;
|
||||
|
||||
if (func_8010BF58(&this->actor, globalCtx, this->unk_380, 0, &this->unk_1E0)) {
|
||||
func_8013AED4(&this->unk_37C, 3, 7);
|
||||
this->unk_386 = 0;
|
||||
this->actionFunc = func_80A52DC8;
|
||||
} else {
|
||||
Math_ApproachS(&this->actor.shape.rot.y, sp2E, 3, 0x2AA8);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80A53038(EnDnq* this, GlobalContext* globalCtx) {
|
||||
static s32 D_80A535FC[] = {
|
||||
0, 1, 2, 3, 5, 6,
|
||||
};
|
||||
u32 temp_v0;
|
||||
u32 temp_v1;
|
||||
|
||||
if (func_800EE29C(globalCtx, 0x69)) {
|
||||
temp_v0 = func_800EE200(globalCtx, 0x69);
|
||||
temp_v1 = globalCtx->csCtx.npcActions[temp_v0]->unk0;
|
||||
if (this->unk_1DC != (u8)temp_v1) {
|
||||
func_80A5257C(this, D_80A535FC[temp_v1]);
|
||||
this->unk_1DC = temp_v1;
|
||||
}
|
||||
|
||||
if ((this->unk_398 == 4) && func_801378B8(&this->skelAnime, 2.0f)) {
|
||||
Audio_PlayActorSound2(&this->actor, NA_SE_EN_KINGNUTS_DAMAGE);
|
||||
}
|
||||
|
||||
if (((this->unk_398 == 3) || (this->unk_398 == 6)) &&
|
||||
func_801378B8(&this->skelAnime, this->skelAnime.animFrameCount)) {
|
||||
func_80A5257C(this, this->unk_398 + 1);
|
||||
}
|
||||
|
||||
func_800EDF24(&this->actor, globalCtx, temp_v0);
|
||||
}
|
||||
}
|
||||
|
||||
void EnDnq_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDnq* this = THIS;
|
||||
|
||||
ActorShape_Init(&this->actor.shape, 0.0f, NULL, 14.0f);
|
||||
SkelAnime_InitSV(globalCtx, &this->skelAnime, &D_0600EB48, NULL, this->jointTable, this->morphTable, 33);
|
||||
this->unk_398 = -1;
|
||||
func_80A5257C(this, 0);
|
||||
Collider_InitAndSetCylinder(globalCtx, &this->collider, &this->actor, &sCylinderInit);
|
||||
CollisionCheck_SetInfo2(&this->actor.colChkInfo, DamageTable_Get(0x16), &sColChkInfoInit);
|
||||
Actor_SetScale(&this->actor, 0.02f);
|
||||
this->actor.targetMode = 1;
|
||||
this->unk_386 = 0;
|
||||
this->unk_37C = 0;
|
||||
func_8013AED4(&this->unk_37C, 3, 7);
|
||||
if (gSaveContext.weekEventReg[9] & 0x80) {
|
||||
this->unk_3A4 = 1;
|
||||
} else {
|
||||
this->unk_3A4 = 0;
|
||||
}
|
||||
this->unk_144 = func_80A52530;
|
||||
this->actionFunc = func_80A52DC8;
|
||||
}
|
||||
|
||||
void EnDnq_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDnq* this = THIS;
|
||||
|
||||
Collider_DestroyCylinder(globalCtx, &this->collider);
|
||||
}
|
||||
|
||||
void EnDnq_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDnq* this = THIS;
|
||||
|
||||
if (!func_80A52D44(this, globalCtx) && func_80A52648(this, globalCtx)) {
|
||||
func_80A53038(this, globalCtx);
|
||||
SkelAnime_FrameUpdateMatrix(&this->skelAnime);
|
||||
} else {
|
||||
this->actionFunc(this, globalCtx);
|
||||
func_80A52B68(this, globalCtx);
|
||||
SkelAnime_FrameUpdateMatrix(&this->skelAnime);
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 30.0f, 12.0f, 0.0f, 4);
|
||||
this->unk_394 = this->actor.xzDistToPlayer;
|
||||
func_80A52C6C(this, globalCtx);
|
||||
func_8013C964(&this->actor, globalCtx, this->unk_390, fabsf(this->actor.yDistToPlayer) + 1.0f, 0,
|
||||
this->unk_37C & 7);
|
||||
this->actor.xzDistToPlayer = this->unk_394;
|
||||
Actor_SetHeight(&this->actor, 46.0f);
|
||||
func_80A52604(this, globalCtx);
|
||||
}
|
||||
}
|
||||
|
||||
void EnDnq_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDnq* this = THIS;
|
||||
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
SkelAnime_DrawSV(globalCtx, this->skelAnime.skeleton, this->skelAnime.limbDrawTbl, this->skelAnime.dListCount, NULL,
|
||||
NULL, &this->actor);
|
||||
}
|
||||
|
@ -6,12 +6,33 @@
|
||||
struct EnDnq;
|
||||
|
||||
typedef void (*EnDnqActionFunc)(struct EnDnq*, GlobalContext*);
|
||||
typedef void (*EnDnqFunc)(GlobalContext*, struct EnDnq*);
|
||||
|
||||
typedef struct EnDnq {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ char unk_144[0x48];
|
||||
/* 0x018C */ EnDnqActionFunc actionFunc;
|
||||
/* 0x0190 */ char unk_190[0x218];
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ EnDnqFunc unk_144;
|
||||
/* 0x148 */ SkelAnime skelAnime;
|
||||
/* 0x18C */ EnDnqActionFunc actionFunc;
|
||||
/* 0x190 */ ColliderCylinder collider;
|
||||
/* 0x1DC */ u8 unk_1DC;
|
||||
/* 0x1E0 */ s32 unk_1E0;
|
||||
/* 0x1E4 */ Vec3s jointTable[33];
|
||||
/* 0x2AA */ Vec3s morphTable[33];
|
||||
/* 0x370 */ Vec3f unk_370;
|
||||
/* 0x37C */ u16 unk_37C;
|
||||
/* 0x37E */ s16 unk_37E;
|
||||
/* 0x380 */ s32* unk_380;
|
||||
/* 0x384 */ s16 unk_384;
|
||||
/* 0x386 */ s16 unk_386;
|
||||
/* 0x388 */ s16 unk_388;
|
||||
/* 0x38A */ s16 unk_38A;
|
||||
/* 0x38C */ s16 unk_38C;
|
||||
/* 0x390 */ f32 unk_390;
|
||||
/* 0x394 */ f32 unk_394;
|
||||
/* 0x398 */ s32 unk_398;
|
||||
/* 0x39C */ s32 unk_39C;
|
||||
/* 0x3A0 */ UNK_TYPE1 unk_3A0[0x4];
|
||||
/* 0x3A4 */ s32 unk_3A4;
|
||||
} EnDnq; // size = 0x3A8
|
||||
|
||||
extern const ActorInit En_Dnq_InitVars;
|
||||
|
@ -1941,6 +1941,22 @@ D_060109D0 = 0x060109D0;
|
||||
// ovl_En_Dnq
|
||||
|
||||
D_0600EB48 = 0x0600EB48;
|
||||
D_06008328 = 0x06008328;
|
||||
D_06007528 = 0x06007528;
|
||||
D_060006F0 = 0x060006F0;
|
||||
D_06000BF8 = 0x06000BF8;
|
||||
D_06002690 = 0x06002690;
|
||||
D_06003408 = 0x06003408;
|
||||
D_06006984 = 0x06006984;
|
||||
D_06005E18 = 0x06005E18;
|
||||
D_06005284 = 0x06005284;
|
||||
D_06001AEC = 0x06001AEC;
|
||||
D_06001100 = 0x06001100;
|
||||
D_06004EA0 = 0x06004EA0;
|
||||
D_0600F504 = 0x0600F504;
|
||||
D_060047B8 = 0x060047B8;
|
||||
D_06005A14 = 0x06005A14;
|
||||
D_06003DBC = 0x06003DBC;
|
||||
|
||||
// ovl_En_Dns
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user