mirror of https://github.com/zeldaret/mm.git
En_Zoraegg (#630)
* En_Zoraegg * Revert bgCheckFlags * roomInf Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com>
This commit is contained in:
parent
fed9dc991d
commit
3f15c0017a
|
@ -11,10 +11,11 @@
|
|||
<Texture Name="object_zoraegg_TLUT_002DF0" OutName="tlut_002DF0" Format="rgba16" Width="16" Height="16" Offset="0x2DF0" />
|
||||
<Texture Name="object_zoraegg_Tex_002FF0" OutName="tex_002FF0" Format="ci8" Width="32" Height="32" Offset="0x2FF0" />
|
||||
<Texture Name="object_zoraegg_Tex_0033F0" OutName="tex_0033F0" Format="ci8" Width="8" Height="8" Offset="0x33F0" />
|
||||
<!-- <Blob Name="object_zoraegg_Blob_003430" Size="0x400" Offset="0x3430" /> -->
|
||||
<Texture Name="object_zoraegg_Tex_003430" OutName="tex_003430" Format="ci8" Width="32" Height="32" Offset="0x3430" />
|
||||
<Texture Name="object_zoraegg_Tex_003830" OutName="tex_003830" Format="ci8" Width="32" Height="64" Offset="0x3830" />
|
||||
<Texture Name="object_zoraegg_Tex_004030" OutName="tex_004030" Format="ci8" Width="32" Height="32" Offset="0x4030" />
|
||||
<!-- <Blob Name="object_zoraegg_Blob_004430" Size="0x800" Offset="0x4430" /> -->
|
||||
<Texture Name="object_zoraegg_Tex_004430" OutName="tex_004430" Format="ci8" Width="32" Height="32" Offset="0x4430" />
|
||||
<Texture Name="object_zoraegg_Tex_004830" OutName="tex_004830" Format="ci8" Width="32" Height="32" Offset="0x4830" />
|
||||
<Limb Name="object_zoraegg_Standardlimb_004C30" Type="Standard" Offset="0x4C30" />
|
||||
<Limb Name="object_zoraegg_Standardlimb_004C3C" Type="Standard" Offset="0x4C3C" />
|
||||
<Limb Name="object_zoraegg_Standardlimb_004C48" Type="Standard" Offset="0x4C48" />
|
||||
|
|
|
@ -2023,7 +2023,7 @@ void func_801229A0(GlobalContext* globalCtx, Player* player);
|
|||
void func_80122F28(Player* player, GlobalContext* globalCtx, Actor* actor);
|
||||
s32 func_80122F9C(GlobalContext* globalCtx);
|
||||
s32 func_80122FCC(GlobalContext* globalCtx);
|
||||
// void func_8012300C(void);
|
||||
void func_8012300C(GlobalContext* globalCtx, s32 arg1);
|
||||
void func_8012301C(s32 iParm1, GlobalContext* globalCtx);
|
||||
void func_80123140(GlobalContext* globalCtx, Player* param_2);
|
||||
u32 func_80123358(GlobalContext* globalCtx, Player* player);
|
||||
|
|
3
spec
3
spec
|
@ -4015,8 +4015,7 @@ beginseg
|
|||
name "ovl_En_Zoraegg"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Zoraegg/z_en_zoraegg.o"
|
||||
include "build/data/ovl_En_Zoraegg/ovl_En_Zoraegg.data.o"
|
||||
include "build/data/ovl_En_Zoraegg/ovl_En_Zoraegg.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Zoraegg/ovl_En_Zoraegg_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
|
|
@ -5,8 +5,10 @@
|
|||
*/
|
||||
|
||||
#include "z_en_zoraegg.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
#include "objects/object_zoraegg/object_zoraegg.h"
|
||||
|
||||
#define FLAGS 0x00000010
|
||||
#define FLAGS (ACTOR_FLAG_10)
|
||||
|
||||
#define THIS ((EnZoraegg*)thisx)
|
||||
|
||||
|
@ -15,7 +17,27 @@ void EnZoraegg_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
|||
void EnZoraegg_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnZoraegg_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
#if 0
|
||||
s32 func_80B319A8(GlobalContext* globalCtx);
|
||||
void func_80B32084(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32094(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B320E0(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B321D0(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32228(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B322BC(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32390(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B324B0(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32644(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B326F4(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32820(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32928(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32A88(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32B10(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32B3C(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32B70(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32BB8(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32C34(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
void func_80B32D08(EnZoraegg* this, GlobalContext* globalCtx);
|
||||
|
||||
const ActorInit En_Zoraegg_InitVars = {
|
||||
ACTOR_EN_ZORAEGG,
|
||||
ACTORCAT_ITEMACTION,
|
||||
|
@ -28,86 +50,834 @@ const ActorInit En_Zoraegg_InitVars = {
|
|||
(ActorFunc)EnZoraegg_Draw,
|
||||
};
|
||||
|
||||
#endif
|
||||
void func_80B31590(EnZoraegg* this) {
|
||||
this->actor.shape.yOffset = 0.0f;
|
||||
|
||||
extern UNK_TYPE D_060005D4;
|
||||
extern UNK_TYPE D_06004D20;
|
||||
extern UNK_TYPE D_06004FE4;
|
||||
extern UNK_TYPE D_06005098;
|
||||
extern UNK_TYPE D_06005250;
|
||||
if (this->actor.home.rot.x == 0) {
|
||||
this->actor.scale.x = 0.4f;
|
||||
} else {
|
||||
this->actor.scale.x = this->actor.home.rot.x * 0.04f;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B31590.s")
|
||||
if (this->actor.home.rot.z == 0) {
|
||||
this->actor.scale.z = 0.4f;
|
||||
} else {
|
||||
this->actor.scale.z = this->actor.home.rot.z * 0.04f;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/EnZoraegg_Init.s")
|
||||
this->actor.shape.rot.z = 0;
|
||||
this->actor.scale.y = 0.4f;
|
||||
this->actor.draw = NULL;
|
||||
this->actor.shape.rot.y = this->actor.shape.rot.z;
|
||||
this->actor.shape.rot.x = this->actor.shape.rot.z;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/EnZoraegg_Destroy.s")
|
||||
void EnZoraegg_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
EnZoraegg* this = THIS;
|
||||
u16 sp40[] = { 0x01C9, 0x01CA, 0x01CB, 0x01CC, 0x01CD, 0x01CE, 0x01D0 };
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B319A8.s")
|
||||
Actor_SetScale(&this->actor, 0.006f);
|
||||
SkelAnime_InitFlex(globalCtx, &this->skelAnime, &object_zoraegg_Skel_004C90, &object_zoraegg_Anim_005098,
|
||||
this->jointTable, this->morphTable, 7);
|
||||
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_005098);
|
||||
ActorShape_Init(&this->actor.shape, 1100.0f, NULL, 0.0f);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B319D0.s")
|
||||
this->actionFunc = func_80B32084;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B31A34.s")
|
||||
this->unk_1ED = 255;
|
||||
this->unk_1EC = 0;
|
||||
this->unk_1EA = 0;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B31C40.s")
|
||||
this->unk_1E0 = 1.0f;
|
||||
this->unk_1E4 = 0.0f;
|
||||
this->actor.velocity.y = -10.0f;
|
||||
this->actor.terminalVelocity = -10.0f;
|
||||
this->actor.gravity = -5.0f;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B31CB4.s")
|
||||
switch (ENZORAEGG_GET_1F(&this->actor)) {
|
||||
case ENZORAEGG_1F_0:
|
||||
if (Flags_GetSwitch(globalCtx, ENZORAEGG_GET_FE00(&this->actor))) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B31D14.s")
|
||||
case ENZORAEGG_1F_17:
|
||||
if (func_80B319A8(globalCtx) >= 7) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
this->actor.home.rot.z = 1;
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B31D64.s")
|
||||
case ENZORAEGG_1F_3:
|
||||
case ENZORAEGG_1F_4:
|
||||
case ENZORAEGG_1F_5:
|
||||
case ENZORAEGG_1F_6:
|
||||
case ENZORAEGG_1F_7:
|
||||
case ENZORAEGG_1F_8:
|
||||
case ENZORAEGG_1F_9:
|
||||
if (gSaveContext.weekEventReg[19] & 0x40) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B31E00.s")
|
||||
case ENZORAEGG_1F_10:
|
||||
case ENZORAEGG_1F_11:
|
||||
case ENZORAEGG_1F_12:
|
||||
case ENZORAEGG_1F_13:
|
||||
case ENZORAEGG_1F_14:
|
||||
case ENZORAEGG_1F_15:
|
||||
case ENZORAEGG_1F_16:
|
||||
if (!(gSaveContext.weekEventReg[19] & 0x40)) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32084.s")
|
||||
switch (ENZORAEGG_GET_1F(&this->actor)) {
|
||||
case ENZORAEGG_1F_0:
|
||||
this->actionFunc = func_80B320E0;
|
||||
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
|
||||
this->actor.targetMode = 3;
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32094.s")
|
||||
case ENZORAEGG_1F_1:
|
||||
this->actionFunc = func_80B322BC;
|
||||
func_80B31590(this);
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B320E0.s")
|
||||
case ENZORAEGG_1F_2:
|
||||
this->actionFunc = func_80B32390;
|
||||
func_80B31590(this);
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B321D0.s")
|
||||
case ENZORAEGG_1F_3:
|
||||
case ENZORAEGG_1F_4:
|
||||
case ENZORAEGG_1F_5:
|
||||
case ENZORAEGG_1F_6:
|
||||
case ENZORAEGG_1F_7:
|
||||
case ENZORAEGG_1F_8:
|
||||
case ENZORAEGG_1F_9:
|
||||
this->unk_1F0 = sp40[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_3];
|
||||
Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_001E08);
|
||||
this->unk_1EC = 1;
|
||||
this->unk_1EE = 0;
|
||||
this->unk_1EF = 0;
|
||||
this->actionFunc = func_80B32B10;
|
||||
if (((ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_3) >= func_80B319A8(globalCtx)) {
|
||||
this->actionFunc = func_80B32B3C;
|
||||
this->actor.draw = NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32228.s")
|
||||
case ENZORAEGG_1F_10:
|
||||
case ENZORAEGG_1F_11:
|
||||
case ENZORAEGG_1F_12:
|
||||
case ENZORAEGG_1F_13:
|
||||
case ENZORAEGG_1F_14:
|
||||
case ENZORAEGG_1F_15:
|
||||
case ENZORAEGG_1F_16:
|
||||
this->unk_1F0 = sp40[(ENZORAEGG_GET_1F(&this->actor)) - ENZORAEGG_1F_10];
|
||||
this->unk_1EC = 2;
|
||||
this->actionFunc = func_80B324B0;
|
||||
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
|
||||
this->unk_1EE = 0;
|
||||
this->unk_1ED = 0;
|
||||
this->unk_1EA |= 3;
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B322BC.s")
|
||||
case ENZORAEGG_1F_17:
|
||||
Actor_SetScale(&this->actor, 0.0006f);
|
||||
this->actionFunc = func_80B32D08;
|
||||
this->actor.world.pos.y -= this->actor.shape.yOffset * this->actor.scale.y;
|
||||
this->actor.shape.rot.x = 0;
|
||||
this->actor.velocity.y = 0.0f;
|
||||
this->actor.terminalVelocity = -10.0f;
|
||||
this->actor.gravity = -1.0f;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32390.s")
|
||||
void EnZoraegg_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B324B0.s")
|
||||
s32 func_80B319A8(GlobalContext* globalCtx) {
|
||||
return gSaveContext.permanentSceneFlags[globalCtx->sceneNum].unk_14 & 7;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32644.s")
|
||||
void func_80B319D0(GlobalContext* globalCtx, s32 arg1) {
|
||||
if ((arg1 < 8) && (arg1 >= 0)) {
|
||||
gSaveContext.permanentSceneFlags[globalCtx->sceneNum].unk_14 &= ~7;
|
||||
gSaveContext.permanentSceneFlags[globalCtx->sceneNum].unk_14 |= arg1;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B326F4.s")
|
||||
void func_80B31A34(EnZoraegg* this) {
|
||||
s32 curFrame;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32820.s")
|
||||
if (this->unk_1EA & 1) {
|
||||
this->unk_1EE = this->unk_1EF = 100;
|
||||
return;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32928.s")
|
||||
curFrame = this->skelAnime.curFrame;
|
||||
if (curFrame < 6) {
|
||||
this->unk_1EE = 0;
|
||||
this->unk_1EF = 0;
|
||||
} else if (curFrame < 93) {
|
||||
this->unk_1EE = Math_SinS((curFrame * 0xBC) - 0x468) * 100.0f;
|
||||
if (curFrame >= 89) {
|
||||
this->unk_1EF = Math_SinS((curFrame * 0x1000) - (0x59 * 0x1000)) * 100.0f;
|
||||
} else {
|
||||
this->unk_1EF = 0;
|
||||
}
|
||||
} else {
|
||||
this->unk_1EE = this->unk_1EF = 100;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32A88.s")
|
||||
void func_80B31C40(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
Actor_MoveWithGravity(&this->actor);
|
||||
Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos);
|
||||
this->actor.focus.pos.y += 10.0f;
|
||||
Actor_UpdateBgCheckInfo(globalCtx, &this->actor, 0.0f, 0.0f, 0.0f, 4);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32B10.s")
|
||||
Actor* func_80B31CB4(GlobalContext* globalCtx) {
|
||||
Actor* actor = globalCtx->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32B3C.s")
|
||||
while (actor != NULL) {
|
||||
if ((actor->id == ACTOR_EN_ZORAEGG) && (ENZORAEGG_GET_1F(actor) == ENZORAEGG_1F_17) &&
|
||||
(actor->home.rot.z == 0)) {
|
||||
actor->home.rot.z = 1;
|
||||
return actor;
|
||||
}
|
||||
actor = actor->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32B70.s")
|
||||
Actor* func_80B31D14(GlobalContext* globalCtx) {
|
||||
Actor* actor = globalCtx->actorCtx.actorLists[ACTORCAT_ITEMACTION].first;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32BB8.s")
|
||||
while (actor != NULL) {
|
||||
if ((actor->id == ACTOR_EN_ZORAEGG) && (ENZORAEGG_GET_1F(actor) == ENZORAEGG_1F_3)) {
|
||||
return actor;
|
||||
}
|
||||
actor = actor->next;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32C34.s")
|
||||
void func_80B31D64(EnZoraegg* this, GlobalContext* globalCtx, s32 arg2, f32 arg3) {
|
||||
Vec3f sp24 = this->actor.world.pos;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32D08.s")
|
||||
sp24.y += arg3;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/EnZoraegg_Update.s")
|
||||
if ((globalCtx->gameplayFrames & arg2) == 0) {
|
||||
EffectSsBubble_Spawn(globalCtx, &this->actor.world.pos, 0.0f, 0.0f, 10.0f, 0.13f);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B32F04.s")
|
||||
void func_80B31E00(EnZoraegg* this) {
|
||||
f32 sp20[] = {
|
||||
1.0f,
|
||||
1.075f,
|
||||
1.15f,
|
||||
1.075f,
|
||||
};
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B331C8.s")
|
||||
if (this->unk_1E8 < 112) {
|
||||
if (this->unk_1E8 > 10) {
|
||||
this->unk_1ED = (s32)((112.0f - this->unk_1E8) * 2.5f) & 0xFF;
|
||||
}
|
||||
} else {
|
||||
this->unk_1ED = 0;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B3336C.s")
|
||||
if (this->unk_1E8 < 10) {
|
||||
this->unk_1E0 = sp20[this->unk_1E8 & 3];
|
||||
} else if (this->unk_1E8 < 22) {
|
||||
this->unk_1E0 = (Math_SinS((this->unk_1E8 - 10.0f) * (4096.0f / 3)) * 0.8f) + 1.0f;
|
||||
} else if (this->unk_1E8 < 26) {
|
||||
this->unk_1E0 = (Math_CosS((this->unk_1E8 - 22.0f) * 4096.0f) * 0.8f) + 1.0f;
|
||||
} else if (this->unk_1E8 < 32) {
|
||||
this->unk_1E0 = sp20[(this->unk_1E8 - 1) & 3];
|
||||
} else if (this->unk_1E8 < 47) {
|
||||
this->unk_1E0 = 1.0f;
|
||||
} else if (this->unk_1E8 < 53) {
|
||||
this->unk_1E0 = sp20[(this->unk_1E8 - 2) & 3];
|
||||
} else if (this->unk_1E8 < 74) {
|
||||
this->unk_1E0 = 1.0f - ((this->unk_1E8 - 53.0f) * (1.0f / 105));
|
||||
} else if (this->unk_1E8 < 112) {
|
||||
this->unk_1E0 = (this->unk_1E0 * 0.9f) + 0.15f;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B333DC.s")
|
||||
if ((this->unk_1E8 == 111) || (this->unk_1E8 == 32)) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_BORN);
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B33480.s")
|
||||
void func_80B32084(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/func_80B33818.s")
|
||||
void func_80B32094(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (Message_GetState(&globalCtx->msgCtx) == 2) {
|
||||
this->actionFunc = func_80B320E0;
|
||||
}
|
||||
func_80B31C40(this, globalCtx);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Zoraegg/EnZoraegg_Draw.s")
|
||||
void func_80B320E0(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (Actor_HasParent(&this->actor, globalCtx)) {
|
||||
Flags_SetSwitch(globalCtx, ENZORAEGG_GET_FE00(&this->actor));
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
} else if (Actor_ProcessTalkRequest(&this->actor, &globalCtx->state)) {
|
||||
this->actionFunc = func_80B32094;
|
||||
func_801518B0(globalCtx, 0x24B, &this->actor);
|
||||
} else {
|
||||
Actor_PickUp(&this->actor, globalCtx, GI_MAX, 80.0f, 60.0f);
|
||||
if (this->actor.isTargeted) {
|
||||
func_800B8614(&this->actor, globalCtx, 110.0f);
|
||||
}
|
||||
}
|
||||
|
||||
this->actor.flags |= (ACTOR_FLAG_1 | ACTOR_FLAG_8);
|
||||
this->actor.targetMode = 3;
|
||||
func_80B31C40(this, globalCtx);
|
||||
}
|
||||
|
||||
void func_80B321D0(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (ActorCutscene_GetCurrentIndex() != this->actor.cutscene) {
|
||||
this->actionFunc = func_80B322BC;
|
||||
func_80B319D0(globalCtx, func_80B319A8(globalCtx) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32228(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
|
||||
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, this->unk_1DC);
|
||||
this->actionFunc = func_80B321D0;
|
||||
} else {
|
||||
if (this->unk_1E8 > 0) {
|
||||
this->unk_1E8--;
|
||||
} else if (this->unk_1E8 == 0) {
|
||||
ActorCutscene_Stop(player->unk_A86);
|
||||
player->unk_A86 = -1;
|
||||
this->unk_1E8 = -1;
|
||||
}
|
||||
|
||||
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B322BC(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
if (this->actor.cutscene != -1) {
|
||||
this->unk_1DC = func_80B31CB4(globalCtx);
|
||||
if (this->unk_1DC != NULL) {
|
||||
this->unk_1E8 = 3;
|
||||
this->actionFunc = func_80B32228;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if ((fabsf(player->actor.world.pos.x - this->actor.world.pos.x) < (100.0f * this->actor.scale.x)) &&
|
||||
(fabsf(player->actor.world.pos.z - this->actor.world.pos.z) < (100.0f * this->actor.scale.z))) {
|
||||
func_8012300C(globalCtx, 25);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32390(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
s32 pad;
|
||||
Player* player = GET_PLAYER(globalCtx);
|
||||
|
||||
if (ActorCutscene_GetCanPlayNext(this->actor.cutscene)) {
|
||||
Actor* temp_v0 = func_80B31D14(globalCtx);
|
||||
|
||||
if (temp_v0 != NULL) {
|
||||
ActorCutscene_StartAndSetUnkLinkFields(this->actor.cutscene, temp_v0);
|
||||
gSaveContext.eventInf[3] |= 8;
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
} else if ((func_80B319A8(globalCtx) >= 7) &&
|
||||
(fabsf(player->actor.world.pos.x - this->actor.world.pos.x) < (100.0f * this->actor.scale.x)) &&
|
||||
(fabsf(player->actor.world.pos.z - this->actor.world.pos.z) < (100.0f * this->actor.scale.z)) &&
|
||||
(fabsf(player->actor.world.pos.y - this->actor.world.pos.y) < 30.0f)) {
|
||||
ActorCutscene_SetIntentToPlay(this->actor.cutscene);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B324B0(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
|
||||
if (func_800EE29C(globalCtx, this->unk_1F0)) {
|
||||
if (this->unk_1EA & 4) {
|
||||
if (func_800EE29C(globalCtx, this->unk_1F0) &&
|
||||
(globalCtx->csCtx.npcActions[func_800EE200(globalCtx, this->unk_1F0)]->unk0 == 3)) {
|
||||
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
|
||||
this->unk_1EA &= ~4;
|
||||
}
|
||||
} else if (func_800EE29C(globalCtx, this->unk_1F0) &&
|
||||
(globalCtx->csCtx.npcActions[func_800EE200(globalCtx, this->unk_1F0)]->unk0 == 4)) {
|
||||
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004E04);
|
||||
this->unk_1EA |= 4;
|
||||
}
|
||||
|
||||
func_800EDF24(&this->actor, globalCtx, func_800EE200(globalCtx, this->unk_1F0));
|
||||
|
||||
if ((this->unk_1EA & 4) && Animation_OnFrame(&this->skelAnime, this->unk_1E4)) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
|
||||
this->unk_1E4 = Rand_ZeroFloat(5.0f);
|
||||
}
|
||||
} else if (this->unk_1EA & 4) {
|
||||
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
|
||||
this->unk_1EA &= ~4;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32644(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
Animation_PlayLoop(&this->skelAnime, &object_zoraegg_Anim_004FE4);
|
||||
this->unk_1EE = 0;
|
||||
this->unk_1EA |= 2;
|
||||
}
|
||||
|
||||
if (!func_800EE29C(globalCtx, this->unk_1F0)) {
|
||||
this->actionFunc = func_80B324B0;
|
||||
} else {
|
||||
func_800EDF24(&this->actor, globalCtx, func_800EE200(globalCtx, this->unk_1F0));
|
||||
|
||||
if (this->unk_1EE > 25) {
|
||||
this->unk_1EE -= 25;
|
||||
} else {
|
||||
this->unk_1EE = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B326F4(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
|
||||
if (func_800EE29C(globalCtx, this->unk_1F0) &&
|
||||
(globalCtx->csCtx.npcActions[func_800EE200(globalCtx, this->unk_1F0)]->unk0 == 3)) {
|
||||
Animation_Change(&this->skelAnime, &object_zoraegg_Anim_004D20, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&object_zoraegg_Anim_004D20), 2, 5.0f);
|
||||
this->unk_1E8 = 0;
|
||||
this->actionFunc = func_80B32644;
|
||||
gSaveContext.weekEventReg[19] |= 0x40;
|
||||
this->unk_1EC = 2;
|
||||
this->unk_1EE = 100;
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_2);
|
||||
}
|
||||
|
||||
func_800EDF24(&this->actor, globalCtx, func_800EE200(globalCtx, this->unk_1F0));
|
||||
|
||||
if (Animation_OnFrame(&this->skelAnime, 4.0f)) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32820(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
if (this->unk_1E8 >= 2) {
|
||||
this->actionFunc = func_80B326F4;
|
||||
Animation_Change(&this->skelAnime, &object_zoraegg_Anim_005098, 1.0f, 0.0f,
|
||||
Animation_GetLastFrame(&object_zoraegg_Anim_005098), 0, 10.0f);
|
||||
this->unk_1E8 = 0;
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
return;
|
||||
}
|
||||
|
||||
Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_0005D4);
|
||||
this->unk_1E8 += 1;
|
||||
SkelAnime_Update(&this->skelAnime);
|
||||
}
|
||||
|
||||
func_800EDF24(&this->actor, globalCtx, func_800EE200(globalCtx, this->unk_1F0));
|
||||
|
||||
if (Animation_OnFrame(&this->skelAnime, 16.0f)) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_0);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32928(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (this->unk_1E8 < 112) {
|
||||
this->unk_1E8++;
|
||||
}
|
||||
|
||||
if (SkelAnime_Update(&this->skelAnime)) {
|
||||
Animation_PlayOnce(&this->skelAnime, &object_zoraegg_Anim_0005D4);
|
||||
this->unk_1EA |= 1;
|
||||
this->actionFunc = func_80B32820;
|
||||
this->unk_1E8 = 0;
|
||||
this->actor.velocity.y = 0.0f;
|
||||
return;
|
||||
}
|
||||
|
||||
func_80B31A34(this);
|
||||
func_80B31E00(this);
|
||||
|
||||
if (this->unk_1E8 < 112) {
|
||||
if ((this->unk_1E8 >= 69) && (this->unk_1E8 < 72)) {
|
||||
func_80B31D64(this, globalCtx, 0, 0.0f);
|
||||
func_80B31D64(this, globalCtx, 0, 0.0f);
|
||||
func_80B31D64(this, globalCtx, 0, 0.0f);
|
||||
} else {
|
||||
func_80B31D64(this, globalCtx, 0xD, 0.0f);
|
||||
}
|
||||
}
|
||||
|
||||
func_800EDF24(&this->actor, globalCtx, func_800EE200(globalCtx, this->unk_1F0));
|
||||
|
||||
if (Animation_OnFrame(&this->skelAnime, 97.0f) || Animation_OnFrame(&this->skelAnime, 101.0f) ||
|
||||
Animation_OnFrame(&this->skelAnime, 105.0f)) {
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_ZORA_KIDS_SWIM_1);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32A88(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (func_800EE29C(globalCtx, this->unk_1F0) &&
|
||||
(globalCtx->csCtx.npcActions[func_800EE200(globalCtx, this->unk_1F0)]->unk0 == 2)) {
|
||||
this->unk_1E8 = 0;
|
||||
this->actionFunc = func_80B32928;
|
||||
}
|
||||
func_80B31D64(this, globalCtx, 13, 0.0f);
|
||||
}
|
||||
|
||||
void func_80B32B10(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (gSaveContext.eventInf[3] & 8) {
|
||||
this->actionFunc = func_80B32A88;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32B3C(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
if (gSaveContext.eventInf[3] & 8) {
|
||||
this->actionFunc = func_80B32A88;
|
||||
this->actor.draw = EnZoraegg_Draw;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32B70(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
func_80B31C40(this, globalCtx);
|
||||
if (func_800EE29C(globalCtx, 0x1C9)) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32BB8(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
func_80B31C40(this, globalCtx);
|
||||
func_80B31D64(this, globalCtx, 13, 0.0f);
|
||||
|
||||
if (this->actor.bgCheckFlags & 0x1) {
|
||||
this->actionFunc = func_80B32B70;
|
||||
}
|
||||
|
||||
if (func_800EE29C(globalCtx, 0x1C9)) {
|
||||
Actor_MarkForDeath(&this->actor);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32C34(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
WaterBox* sp34;
|
||||
f32 sp30;
|
||||
s32 pad;
|
||||
|
||||
Actor_MoveWithGravity(&this->actor);
|
||||
Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos);
|
||||
this->actor.focus.pos.y += 10.0f;
|
||||
sp30 = this->actor.world.pos.y;
|
||||
|
||||
if (WaterBox_GetSurface1(globalCtx, &globalCtx->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp30,
|
||||
&sp34)) {
|
||||
if ((this->actor.world.pos.y + 50.0f) < sp30) {
|
||||
this->actionFunc = func_80B32BB8;
|
||||
}
|
||||
|
||||
func_80B31D64(this, globalCtx, 0, -20.0f);
|
||||
func_80B31D64(this, globalCtx, 0, -20.0f);
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32D08(EnZoraegg* this, GlobalContext* globalCtx) {
|
||||
WaterBox* sp44;
|
||||
f32 sp40;
|
||||
Vec3f sp34;
|
||||
s32 pad;
|
||||
|
||||
Actor_MoveWithGravity(&this->actor);
|
||||
Math_Vec3f_Copy(&this->actor.focus.pos, &this->actor.world.pos);
|
||||
this->actor.focus.pos.y += 10.0f;
|
||||
sp40 = this->actor.world.pos.y;
|
||||
|
||||
if (WaterBox_GetSurface1(globalCtx, &globalCtx->colCtx, this->actor.world.pos.x, this->actor.world.pos.z, &sp40,
|
||||
&sp44)) {
|
||||
if (this->actor.world.pos.y < sp40) {
|
||||
sp34.x = this->actor.world.pos.x;
|
||||
sp34.y = sp40;
|
||||
sp34.z = this->actor.world.pos.z;
|
||||
|
||||
EffectSsGRipple_Spawn(globalCtx, &sp34, 150, 500, 0);
|
||||
EffectSsGSplash_Spawn(globalCtx, &sp34, NULL, NULL, 0, 200);
|
||||
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_DIVE_INTO_WATER_L);
|
||||
|
||||
this->actionFunc = func_80B32C34;
|
||||
this->actor.velocity.y = -1.0f;
|
||||
this->actor.terminalVelocity = -1.0f;
|
||||
this->actor.gravity = -1.0f;
|
||||
}
|
||||
}
|
||||
|
||||
if (this->actor.scale.x < 0.006f) {
|
||||
Actor_SetScale(&this->actor, this->actor.scale.x + 0.0012f);
|
||||
}
|
||||
|
||||
if (this->actor.scale.x > 0.006f) {
|
||||
Actor_SetScale(&this->actor, 0.006f);
|
||||
}
|
||||
}
|
||||
|
||||
void EnZoraegg_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnZoraegg* this = THIS;
|
||||
|
||||
this->actionFunc(this, globalCtx);
|
||||
|
||||
if (DECR(this->unk_1F4) == 0) {
|
||||
this->unk_1F4 = Rand_S16Offset(60, 60);
|
||||
}
|
||||
|
||||
this->unk_1F2 = this->unk_1F4;
|
||||
if (this->unk_1F2 >= 3) {
|
||||
this->unk_1F2 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void func_80B32F04(Actor* thisx, GlobalContext* globalCtx) {
|
||||
f32 sp7C;
|
||||
f32 sp78;
|
||||
f32 sp74;
|
||||
EnZoraegg* this = THIS;
|
||||
s32 pad[3];
|
||||
s16 sp62;
|
||||
s16 sp60;
|
||||
f32 temp_f2;
|
||||
Gfx* gfx;
|
||||
Vec3f sp4C;
|
||||
s32 pad2;
|
||||
|
||||
Matrix_StatePush();
|
||||
|
||||
sp4C = GET_ACTIVE_CAM(globalCtx)->eye;
|
||||
|
||||
sp62 = Math_Vec3f_Yaw(&sp4C, &this->actor.focus.pos);
|
||||
sp60 = -Math_Vec3f_Pitch(&sp4C, &this->actor.focus.pos);
|
||||
|
||||
sp74 = -((15.0f * Math_SinS(sp62)) * Math_CosS(sp60));
|
||||
sp78 = -(15.0f * Math_SinS(sp60));
|
||||
sp7C = -((15.0f * Math_CosS(sp62)) * Math_CosS(sp60));
|
||||
|
||||
Matrix_InsertTranslation(this->actor.world.pos.x + sp74, this->actor.world.pos.y + sp78 + 6.0f,
|
||||
temp_f2 = this->actor.world.pos.z + sp7C, 0);
|
||||
|
||||
sp7C = Math_SinS(globalCtx->gameplayFrames * 0x4000);
|
||||
|
||||
Matrix_Scale(this->actor.scale.x * (((sp7C + 1.0f) * 0.1f) + 9.0f),
|
||||
this->actor.scale.y * (((sp7C + 1.0f) * 0.1f) + 9.0f),
|
||||
this->actor.scale.z * (((sp7C + 1.0f) * 0.1f) + 9.0f), 1);
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
gfx = POLY_XLU_DISP;
|
||||
gfx = func_8012C868(gfx);
|
||||
|
||||
gSPSetOtherMode(gfx++, G_SETOTHERMODE_H, 4, 4, 0x00000080);
|
||||
gDPSetCombineLERP(gfx++, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0, 0, 0, 0, PRIMITIVE, TEXEL0, 0, PRIMITIVE, 0);
|
||||
gSPDisplayList(gfx++, gameplay_keep_DL_029CB0);
|
||||
|
||||
gDPSetPrimColor(gfx++, 0, 0, 120, 180, 200, (s32)(this->unk_1ED * (20.0f / 51)));
|
||||
gSPMatrix(gfx++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(gfx++, gameplay_keep_DL_029CF0);
|
||||
|
||||
POLY_XLU_DISP = gfx;
|
||||
|
||||
Matrix_StatePop();
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
void func_80B331C8(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnZoraegg* this = THIS;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
Matrix_StatePush();
|
||||
|
||||
Matrix_Scale(this->unk_1E0, this->unk_1E0, this->unk_1E0, MTXMODE_APPLY);
|
||||
|
||||
if (this->unk_1ED >= 254) {
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetRenderMode(POLY_OPA_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_OPA_SURF2);
|
||||
gSPDisplayList(POLY_OPA_DISP++, object_zoraegg_DL_005250);
|
||||
} else {
|
||||
func_8012C304(POLY_XLU_DISP++);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gDPSetRenderMode(POLY_XLU_DISP++, G_RM_FOG_SHADE_A, G_RM_AA_ZB_XLU_SURF2);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 0, 0, 0, this->unk_1ED);
|
||||
gSPDisplayList(POLY_XLU_DISP++, object_zoraegg_DL_005250);
|
||||
}
|
||||
|
||||
Matrix_StatePop();
|
||||
|
||||
func_80B32F04(thisx, globalCtx);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
s32 EnZoraegg_OverrideLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3f* pos, Vec3s* rot,
|
||||
Actor* thisx) {
|
||||
EnZoraegg* this = THIS;
|
||||
|
||||
switch (this->unk_1EC) {
|
||||
case 1:
|
||||
if ((limbIndex != 1) && (limbIndex != 3) && (limbIndex != 4)) {
|
||||
*dList = NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
if ((limbIndex != 1) && (limbIndex != 3)) {
|
||||
*dList = NULL;
|
||||
}
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void func_80B333DC(GlobalContext* globalCtx, Gfx** dList, f32 arg2) {
|
||||
Matrix_StatePush();
|
||||
Matrix_Scale(arg2, arg2, arg2, MTXMODE_APPLY);
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, *dList);
|
||||
|
||||
Matrix_StatePop();
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
void EnZoraegg_PostLimbDraw(GlobalContext* globalCtx, s32 limbIndex, Gfx** dList, Vec3s* rot, Actor* thisx) {
|
||||
EnZoraegg* this = THIS;
|
||||
f32 temp_f20;
|
||||
f32 temp_f2;
|
||||
|
||||
switch (this->unk_1EC) {
|
||||
case 1:
|
||||
switch (limbIndex) {
|
||||
case 2:
|
||||
temp_f20 = this->unk_1EE * 0.01f;
|
||||
Matrix_StatePush();
|
||||
Matrix_Scale(temp_f20, temp_f20, temp_f20, MTXMODE_APPLY);
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, *dList);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
Matrix_StatePop();
|
||||
break;
|
||||
|
||||
case 5:
|
||||
case 6:
|
||||
temp_f20 = this->unk_1EF * 0.01f;
|
||||
func_80B333DC(globalCtx, dList, temp_f20);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2:
|
||||
switch (limbIndex) {
|
||||
case 2:
|
||||
temp_f20 = (this->unk_1EE * 0.005f) + 0.5f;
|
||||
Matrix_StatePush();
|
||||
Matrix_Scale(1.0f, temp_f20, temp_f20, MTXMODE_APPLY);
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, *dList);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
break;
|
||||
|
||||
case 4:
|
||||
temp_f2 = 1.0f / ((this->unk_1EE * 0.005f) + 0.5f);
|
||||
temp_f20 = (this->unk_1EE * 0.0035f) + 0.65f;
|
||||
Matrix_Scale(1.0f, temp_f20 * temp_f2, temp_f2, MTXMODE_APPLY);
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, *dList);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
Matrix_StatePop();
|
||||
break;
|
||||
|
||||
case 5:
|
||||
case 6:
|
||||
temp_f20 = this->unk_1EE * 0.01f;
|
||||
func_80B333DC(globalCtx, dList, temp_f20);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
TexturePtr D_80B33950[] = { object_zoraegg_Tex_003430, object_zoraegg_Tex_004430, object_zoraegg_Tex_004830 };
|
||||
|
||||
void func_80B33818(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnZoraegg* this = THIS;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
|
||||
gSPSegment(POLY_OPA_DISP++, 0x08, Lib_SegmentedToVirtual(D_80B33950[this->unk_1F2]));
|
||||
|
||||
SkelAnime_DrawFlexOpa(globalCtx, this->skelAnime.skeleton, this->skelAnime.jointTable, this->skelAnime.dListCount,
|
||||
EnZoraegg_OverrideLimbDraw, EnZoraegg_PostLimbDraw, &this->actor);
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
void EnZoraegg_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnZoraegg* this = THIS;
|
||||
|
||||
if (this->unk_1ED > 0) {
|
||||
func_80B331C8(thisx, globalCtx);
|
||||
}
|
||||
|
||||
if (this->unk_1ED != 255) {
|
||||
func_80B33818(thisx, globalCtx);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,9 +7,55 @@ struct EnZoraegg;
|
|||
|
||||
typedef void (*EnZoraeggActionFunc)(struct EnZoraegg*, GlobalContext*);
|
||||
|
||||
#define ENZORAEGG_GET_1F(thisx) ((thisx)->params & 0x1F)
|
||||
#define ENZORAEGG_GET_FE00(thisx) (((thisx)->params & 0xFE00) >> 9)
|
||||
|
||||
enum {
|
||||
/* 0 */ ENZORAEGG_1F_0,
|
||||
/* 1 */ ENZORAEGG_1F_1,
|
||||
/* 2 */ ENZORAEGG_1F_2,
|
||||
/* 3 */ ENZORAEGG_1F_3,
|
||||
/* 4 */ ENZORAEGG_1F_4,
|
||||
/* 5 */ ENZORAEGG_1F_5,
|
||||
/* 6 */ ENZORAEGG_1F_6,
|
||||
/* 7 */ ENZORAEGG_1F_7,
|
||||
/* 8 */ ENZORAEGG_1F_8,
|
||||
/* 9 */ ENZORAEGG_1F_9,
|
||||
/* 10 */ ENZORAEGG_1F_10,
|
||||
/* 11 */ ENZORAEGG_1F_11,
|
||||
/* 12 */ ENZORAEGG_1F_12,
|
||||
/* 13 */ ENZORAEGG_1F_13,
|
||||
/* 14 */ ENZORAEGG_1F_14,
|
||||
/* 15 */ ENZORAEGG_1F_15,
|
||||
/* 16 */ ENZORAEGG_1F_16,
|
||||
/* 17 */ ENZORAEGG_1F_17,
|
||||
/* 18 */ ENZORAEGG_1F_18,
|
||||
/* 19 */ ENZORAEGG_1F_19,
|
||||
/* 20 */ ENZORAEGG_1F_20,
|
||||
/* 21 */ ENZORAEGG_1F_21,
|
||||
/* 22 */ ENZORAEGG_1F_22,
|
||||
/* 23 */ ENZORAEGG_1F_23,
|
||||
/* 24 */ ENZORAEGG_1F_24,
|
||||
/* 25 */ ENZORAEGG_1F_25,
|
||||
};
|
||||
|
||||
typedef struct EnZoraegg {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ char unk_144[0xB4];
|
||||
/* 0x0144 */ SkelAnime skelAnime;
|
||||
/* 0x0188 */ Vec3s jointTable[7];
|
||||
/* 0x01B2 */ Vec3s morphTable[7];
|
||||
/* 0x01DC */ Actor* unk_1DC;
|
||||
/* 0x01E0 */ f32 unk_1E0;
|
||||
/* 0x01E4 */ f32 unk_1E4;
|
||||
/* 0x01E8 */ s16 unk_1E8;
|
||||
/* 0x01EA */ u16 unk_1EA;
|
||||
/* 0x01EC */ u8 unk_1EC;
|
||||
/* 0x01ED */ u8 unk_1ED;
|
||||
/* 0x01EE */ u8 unk_1EE;
|
||||
/* 0x01EF */ u8 unk_1EF;
|
||||
/* 0x01F0 */ u16 unk_1F0;
|
||||
/* 0x01F2 */ s16 unk_1F2;
|
||||
/* 0x01F4 */ s16 unk_1F4;
|
||||
/* 0x01F8 */ EnZoraeggActionFunc actionFunc;
|
||||
} EnZoraegg; // size = 0x1FC
|
||||
|
||||
|
|
|
@ -13484,9 +13484,9 @@
|
|||
0x80B32E74:("EnZoraegg_Update",),
|
||||
0x80B32F04:("func_80B32F04",),
|
||||
0x80B331C8:("func_80B331C8",),
|
||||
0x80B3336C:("func_80B3336C",),
|
||||
0x80B3336C:("EnZoraegg_OverrideLimbDraw",),
|
||||
0x80B333DC:("func_80B333DC",),
|
||||
0x80B33480:("func_80B33480",),
|
||||
0x80B33480:("EnZoraegg_PostLimbDraw",),
|
||||
0x80B33818:("func_80B33818",),
|
||||
0x80B338C0:("EnZoraegg_Draw",),
|
||||
0x80B33D30:("EnKbt_Init",),
|
||||
|
|
|
@ -1981,17 +1981,6 @@ D_06000D94 = 0x06000D94;
|
|||
D_06007650 = 0x06007650;
|
||||
D_0600D658 = 0x0600D658;
|
||||
|
||||
// ovl_En_Zoraegg
|
||||
|
||||
D_060005D4 = 0x060005D4;
|
||||
D_06001E08 = 0x06001E08;
|
||||
D_06004C90 = 0x06004C90;
|
||||
D_06004D20 = 0x06004D20;
|
||||
D_06004E04 = 0x06004E04;
|
||||
D_06004FE4 = 0x06004FE4;
|
||||
D_06005098 = 0x06005098;
|
||||
D_06005250 = 0x06005250;
|
||||
|
||||
// ovl_Mir_Ray
|
||||
|
||||
D_06000168 = 0x06000168;
|
||||
|
|
Loading…
Reference in New Issue