mirror of https://github.com/zeldaret/mm.git
ovl_Bg_Dkjail_Ivy OK (#1014)
* ovl_Bg_Dkjail_Ivy OK * Co-authored-by: petrie911 petrie911@users.noreply.github.com * xml * pr review * pr review * pos / vel / accel * format * angle * Update src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.c Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com> * in-function static * BgDkjailIvy_SetIdle * _WaitForCut * setup * pr review * Actor_Kill Co-authored-by: Anghelo Carvajal <angheloalf95@gmail.com> Co-authored-by: EllipticEllipsis <elliptic.ellipsis@gmail.com>
This commit is contained in:
parent
29a7a6714a
commit
62b465b3ea
|
@ -1,6 +1,6 @@
|
||||||
<Root>
|
<Root>
|
||||||
<File Name="object_dkjail_obj" Segment="6">
|
<File Name="object_dkjail_obj" Segment="6">
|
||||||
<DList Name="object_dkjail_obj_DL_000080" Offset="0x80" />
|
<DList Name="gDkjailIvyDL" Offset="0x80" />
|
||||||
<DList Name="object_dkjail_obj_DL_000150" Offset="0x150" />
|
<DList Name="object_dkjail_obj_DL_000150" Offset="0x150" />
|
||||||
<Texture Name="object_dkjail_obj_Tex_000158" OutName="tex_000158" Format="rgba16" Width="32" Height="32" Offset="0x158" />
|
<Texture Name="object_dkjail_obj_Tex_000158" OutName="tex_000158" Format="rgba16" Width="32" Height="32" Offset="0x158" />
|
||||||
<Texture Name="object_dkjail_obj_Tex_000958" OutName="tex_000958" Format="ia8" Width="32" Height="64" Offset="0x958" />
|
<Texture Name="object_dkjail_obj_Tex_000958" OutName="tex_000958" Format="ia8" Width="32" Height="64" Offset="0x958" />
|
||||||
|
|
3
spec
3
spec
|
@ -3388,8 +3388,7 @@ beginseg
|
||||||
name "ovl_Bg_Dkjail_Ivy"
|
name "ovl_Bg_Dkjail_Ivy"
|
||||||
compress
|
compress
|
||||||
include "build/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.o"
|
include "build/src/overlays/actors/ovl_Bg_Dkjail_Ivy/z_bg_dkjail_ivy.o"
|
||||||
include "build/data/ovl_Bg_Dkjail_Ivy/ovl_Bg_Dkjail_Ivy.data.o"
|
include "build/src/overlays/actors/ovl_Bg_Dkjail_Ivy/ovl_Bg_Dkjail_Ivy_reloc.o"
|
||||||
include "build/data/ovl_Bg_Dkjail_Ivy/ovl_Bg_Dkjail_Ivy.reloc.o"
|
|
||||||
endseg
|
endseg
|
||||||
|
|
||||||
beginseg
|
beginseg
|
||||||
|
|
|
@ -5,6 +5,8 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "z_bg_dkjail_ivy.h"
|
#include "z_bg_dkjail_ivy.h"
|
||||||
|
#include "assets/objects/gameplay_keep/gameplay_keep.h"
|
||||||
|
#include "assets/objects/object_dkjail_obj/object_dkjail_obj.h"
|
||||||
|
|
||||||
#define FLAGS 0x00000000
|
#define FLAGS 0x00000000
|
||||||
|
|
||||||
|
@ -15,7 +17,13 @@ void BgDkjailIvy_Destroy(Actor* thisx, PlayState* play);
|
||||||
void BgDkjailIvy_Update(Actor* thisx, PlayState* play);
|
void BgDkjailIvy_Update(Actor* thisx, PlayState* play);
|
||||||
void BgDkjailIvy_Draw(Actor* thisx, PlayState* play);
|
void BgDkjailIvy_Draw(Actor* thisx, PlayState* play);
|
||||||
|
|
||||||
#if 0
|
void BgDkjailIvy_SetupWaitForCut(BgDkjailIvy* this);
|
||||||
|
void BgDkjailIvy_WaitForCut(BgDkjailIvy* this, PlayState* play);
|
||||||
|
void BgDkjailIvy_SetupCutscene(BgDkjailIvy* this);
|
||||||
|
void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play);
|
||||||
|
void BgDkjailIvy_SetupFadeOut(BgDkjailIvy* this);
|
||||||
|
void BgDkjailIvy_FadeOut(BgDkjailIvy* this, PlayState* play);
|
||||||
|
|
||||||
const ActorInit Bg_Dkjail_Ivy_InitVars = {
|
const ActorInit Bg_Dkjail_Ivy_InitVars = {
|
||||||
ACTOR_BG_DKJAIL_IVY,
|
ACTOR_BG_DKJAIL_IVY,
|
||||||
ACTORCAT_BG,
|
ACTORCAT_BG,
|
||||||
|
@ -28,47 +36,175 @@ const ActorInit Bg_Dkjail_Ivy_InitVars = {
|
||||||
(ActorFunc)BgDkjailIvy_Draw,
|
(ActorFunc)BgDkjailIvy_Draw,
|
||||||
};
|
};
|
||||||
|
|
||||||
// static ColliderCylinderInit sCylinderInit = {
|
static ColliderCylinderInit sCylinderInit = {
|
||||||
static ColliderCylinderInit D_80ADE950 = {
|
{
|
||||||
{ COLTYPE_NONE, AT_NONE, AC_ON | AC_TYPE_PLAYER, OC1_NONE, OC2_NONE, COLSHAPE_CYLINDER, },
|
COLTYPE_NONE,
|
||||||
{ ELEMTYPE_UNK0, { 0x00000000, 0x00, 0x00 }, { 0x01000200, 0x00, 0x00 }, TOUCH_NONE | TOUCH_SFX_NORMAL, BUMP_ON, OCELEM_NONE, },
|
AT_NONE,
|
||||||
|
AC_ON | AC_TYPE_PLAYER,
|
||||||
|
OC1_NONE,
|
||||||
|
OC2_NONE,
|
||||||
|
COLSHAPE_CYLINDER,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
ELEMTYPE_UNK0,
|
||||||
|
{ 0x00000000, 0x00, 0x00 },
|
||||||
|
{ 0x01000200, 0x00, 0x00 },
|
||||||
|
TOUCH_NONE | TOUCH_SFX_NORMAL,
|
||||||
|
BUMP_ON,
|
||||||
|
OCELEM_NONE,
|
||||||
|
},
|
||||||
{ 20, 80, 0, { 0, 0, 0 } },
|
{ 20, 80, 0, { 0, 0, 0 } },
|
||||||
};
|
};
|
||||||
|
|
||||||
// static InitChainEntry sInitChain[] = {
|
void BgDkjailIvy_IvyCutEffects(BgDkjailIvy* this, PlayState* play) {
|
||||||
static InitChainEntry D_80ADE98C[] = {
|
static Gfx* sLeafDlists[] = { gKakeraLeafMiddle, gKakeraLeafTip };
|
||||||
|
static s16 sLeafScales[] = { 110, 80, 60, 40 };
|
||||||
|
f32 phi_fs0;
|
||||||
|
s32 i;
|
||||||
|
Vec3f spD4;
|
||||||
|
Vec3f pos;
|
||||||
|
Vec3f vel;
|
||||||
|
Vec3f accel;
|
||||||
|
s16 angle;
|
||||||
|
|
||||||
|
Matrix_RotateYS(this->dyna.actor.home.rot.y, MTXMODE_NEW);
|
||||||
|
|
||||||
|
for (i = 0, angle = 0; i < 50; i++, angle += 0x4E20) {
|
||||||
|
spD4.y = (i * (90.0f / 49.0f)) + 2.0f;
|
||||||
|
if (spD4.y < 45.0f) {
|
||||||
|
phi_fs0 = ((1.0f / 180.0f) * spD4.y) + 0.75f;
|
||||||
|
} else if (spD4.y < 90.0f) {
|
||||||
|
phi_fs0 = ((-1.0f / 180.0f) * spD4.y) + 1.25f;
|
||||||
|
} else {
|
||||||
|
phi_fs0 = ((-1.0f / 30.0f) * spD4.y) + 3.75f;
|
||||||
|
}
|
||||||
|
|
||||||
|
spD4.x = Math_SinS(angle) * 40.0f * phi_fs0;
|
||||||
|
spD4.z = (Rand_ZeroOne() * 6.0f) - 3.0f;
|
||||||
|
|
||||||
|
Matrix_MultVec3f(&spD4, &pos);
|
||||||
|
|
||||||
|
vel.x = (Rand_ZeroOne() - 0.5f) + (pos.x * 0.075f);
|
||||||
|
vel.y = 2.0f * Rand_ZeroOne();
|
||||||
|
vel.z = (Rand_ZeroOne() - 0.5f) + (pos.z * 0.075f);
|
||||||
|
|
||||||
|
pos.x += this->dyna.actor.world.pos.x;
|
||||||
|
pos.y += this->dyna.actor.world.pos.y;
|
||||||
|
pos.z += this->dyna.actor.world.pos.z;
|
||||||
|
|
||||||
|
EffectSsKakera_Spawn(play, &pos, &vel, &pos, -0x82, 0x40, 0x28, 0, 0, sLeafScales[i & 3], 0, 0, 44, -1,
|
||||||
|
GAMEPLAY_KEEP, sLeafDlists[(s32)Rand_Next() > 0]);
|
||||||
|
|
||||||
|
if ((i > 20) && ((i % 2) != 0)) {
|
||||||
|
accel.x = (Rand_ZeroOne() - 0.5f) * 0.2f;
|
||||||
|
accel.y = (Rand_ZeroOne() * 0.02f) - 0.1f;
|
||||||
|
accel.z = (Rand_ZeroOne() - 0.5f) * 0.2f;
|
||||||
|
|
||||||
|
func_800B12F0(play, &pos, &gZeroVec3f, &accel, ((Rand_Next() >> 26) + 10), (Rand_Next() >> 28), 50);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static InitChainEntry sInitChain[] = {
|
||||||
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
|
ICHAIN_F32(uncullZoneForward, 4000, ICHAIN_CONTINUE),
|
||||||
ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
|
ICHAIN_F32(uncullZoneScale, 200, ICHAIN_CONTINUE),
|
||||||
ICHAIN_F32(uncullZoneDownward, 200, ICHAIN_CONTINUE),
|
ICHAIN_F32(uncullZoneDownward, 200, ICHAIN_CONTINUE),
|
||||||
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
|
ICHAIN_VEC3F_DIV1000(scale, 100, ICHAIN_STOP),
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
void BgDkjailIvy_Init(Actor* thisx, PlayState* play) {
|
||||||
|
s32 pad;
|
||||||
|
BgDkjailIvy* this = THIS;
|
||||||
|
|
||||||
extern ColliderCylinderInit D_80ADE950;
|
Actor_ProcessInitChain(&this->dyna.actor, sInitChain);
|
||||||
extern InitChainEntry D_80ADE98C[];
|
DynaPolyActor_Init(&this->dyna, 0);
|
||||||
|
Collider_InitCylinder(play, &this->collider);
|
||||||
|
|
||||||
extern UNK_TYPE D_06000080;
|
if (Flags_GetSwitch(play, BG_DKJAIL_GET_SWITCH(thisx))) {
|
||||||
extern UNK_TYPE D_060011A8;
|
Actor_Kill(&this->dyna.actor);
|
||||||
|
} else {
|
||||||
|
DynaPolyActor_LoadMesh(play, &this->dyna, &object_dkjail_obj_Colheader_0011A8);
|
||||||
|
Collider_SetCylinder(play, &this->collider, &this->dyna.actor, &sCylinderInit);
|
||||||
|
Collider_UpdateCylinder(&this->dyna.actor, &this->collider);
|
||||||
|
this->alpha = 255;
|
||||||
|
BgDkjailIvy_SetupWaitForCut(this);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE230.s")
|
void BgDkjailIvy_Destroy(Actor* thisx, PlayState* play) {
|
||||||
|
BgDkjailIvy* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/BgDkjailIvy_Init.s")
|
DynaPoly_DeleteBgActor(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||||
|
Collider_DestroyCylinder(play, &this->collider);
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/BgDkjailIvy_Destroy.s")
|
void BgDkjailIvy_SetupWaitForCut(BgDkjailIvy* this) {
|
||||||
|
this->actionFunc = BgDkjailIvy_WaitForCut;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE6AC.s")
|
void BgDkjailIvy_WaitForCut(BgDkjailIvy* this, PlayState* play) {
|
||||||
|
if (this->collider.base.acFlags & AC_HIT) {
|
||||||
|
this->collider.base.acFlags &= ~AC_HIT;
|
||||||
|
this->dyna.actor.flags |= ACTOR_FLAG_10;
|
||||||
|
ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
|
||||||
|
BgDkjailIvy_SetupCutscene(this);
|
||||||
|
} else {
|
||||||
|
CollisionCheck_SetAC(play, &play->colChkCtx, &this->collider.base);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE6C0.s")
|
void BgDkjailIvy_SetupCutscene(BgDkjailIvy* this) {
|
||||||
|
this->actionFunc = BgDkjailIvy_BeginCutscene;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE734.s")
|
void BgDkjailIvy_BeginCutscene(BgDkjailIvy* this, PlayState* play) {
|
||||||
|
if (ActorCutscene_GetCanPlayNext(this->dyna.actor.cutscene)) {
|
||||||
|
ActorCutscene_StartAndSetUnkLinkFields(this->dyna.actor.cutscene, &this->dyna.actor);
|
||||||
|
this->fadeOutTimer = 50;
|
||||||
|
func_800C62BC(play, &play->colCtx.dyna, this->dyna.bgId);
|
||||||
|
Flags_SetSwitch(play, BG_DKJAIL_GET_SWITCH(&this->dyna.actor));
|
||||||
|
BgDkjailIvy_IvyCutEffects(this, play);
|
||||||
|
Actor_PlaySfxAtPos(&this->dyna.actor, NA_SE_EV_GRASS_WALL_BROKEN);
|
||||||
|
BgDkjailIvy_SetupFadeOut(this);
|
||||||
|
} else {
|
||||||
|
ActorCutscene_SetIntentToPlay(this->dyna.actor.cutscene);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE748.s")
|
void BgDkjailIvy_SetupFadeOut(BgDkjailIvy* this) {
|
||||||
|
this->actionFunc = BgDkjailIvy_FadeOut;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE7E0.s")
|
void BgDkjailIvy_FadeOut(BgDkjailIvy* this, PlayState* play) {
|
||||||
|
if (this->alpha > 8) {
|
||||||
|
this->alpha -= 8;
|
||||||
|
} else {
|
||||||
|
this->alpha = 0;
|
||||||
|
this->dyna.actor.draw = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/func_80ADE7F4.s")
|
this->fadeOutTimer--;
|
||||||
|
if (this->fadeOutTimer <= 0) {
|
||||||
|
Actor_Kill(&this->dyna.actor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/BgDkjailIvy_Update.s")
|
void BgDkjailIvy_Update(Actor* thisx, PlayState* play) {
|
||||||
|
BgDkjailIvy* this = THIS;
|
||||||
|
|
||||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Bg_Dkjail_Ivy/BgDkjailIvy_Draw.s")
|
this->actionFunc(this, play);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BgDkjailIvy_Draw(Actor* thisx, PlayState* play) {
|
||||||
|
BgDkjailIvy* this = THIS;
|
||||||
|
|
||||||
|
OPEN_DISPS(play->state.gfxCtx);
|
||||||
|
|
||||||
|
func_8012C2DC(play->state.gfxCtx);
|
||||||
|
|
||||||
|
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0xFF, 255, 255, 255, this->alpha);
|
||||||
|
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||||
|
gSPDisplayList(POLY_XLU_DISP++, &gDkjailIvyDL);
|
||||||
|
|
||||||
|
CLOSE_DISPS(play->state.gfxCtx);
|
||||||
|
}
|
||||||
|
|
|
@ -3,15 +3,18 @@
|
||||||
|
|
||||||
#include "global.h"
|
#include "global.h"
|
||||||
|
|
||||||
|
#define BG_DKJAIL_GET_SWITCH(thisx) ((thisx)->params & 0x7F)
|
||||||
|
|
||||||
struct BgDkjailIvy;
|
struct BgDkjailIvy;
|
||||||
|
|
||||||
typedef void (*BgDkjailIvyActionFunc)(struct BgDkjailIvy*, PlayState*);
|
typedef void (*BgDkjailIvyActionFunc)(struct BgDkjailIvy*, PlayState*);
|
||||||
|
|
||||||
typedef struct BgDkjailIvy {
|
typedef struct BgDkjailIvy {
|
||||||
/* 0x000 */ Actor actor;
|
/* 0x000 */ DynaPolyActor dyna;
|
||||||
/* 0x144 */ char unk_144[0x64];
|
/* 0x15C */ ColliderCylinder collider;
|
||||||
/* 0x1A8 */ BgDkjailIvyActionFunc actionFunc;
|
/* 0x1A8 */ BgDkjailIvyActionFunc actionFunc;
|
||||||
/* 0x1AC */ char unk_1AC[0x4];
|
/* 0x1AC */ s8 fadeOutTimer;
|
||||||
|
/* 0x1AD */ u8 alpha;
|
||||||
} BgDkjailIvy; // size = 0x1B0
|
} BgDkjailIvy; // size = 0x1B0
|
||||||
|
|
||||||
extern const ActorInit Bg_Dkjail_Ivy_InitVars;
|
extern const ActorInit Bg_Dkjail_Ivy_InitVars;
|
||||||
|
|
|
@ -12330,15 +12330,15 @@
|
||||||
0x80ADD7B4:("func_80ADD7B4",),
|
0x80ADD7B4:("func_80ADD7B4",),
|
||||||
0x80ADD7CC:("EnSellnuts_TransformLimbDraw",),
|
0x80ADD7CC:("EnSellnuts_TransformLimbDraw",),
|
||||||
0x80ADD8A4:("EnSellnuts_Draw",),
|
0x80ADD8A4:("EnSellnuts_Draw",),
|
||||||
0x80ADE230:("func_80ADE230",),
|
0x80ADE230:("BgDkjailIvy_IvyCutEffects",),
|
||||||
0x80ADE5A4:("BgDkjailIvy_Init",),
|
0x80ADE5A4:("BgDkjailIvy_Init",),
|
||||||
0x80ADE664:("BgDkjailIvy_Destroy",),
|
0x80ADE664:("BgDkjailIvy_Destroy",),
|
||||||
0x80ADE6AC:("func_80ADE6AC",),
|
0x80ADE6AC:("BgDkjailIvy_SetupWaitForCut",),
|
||||||
0x80ADE6C0:("func_80ADE6C0",),
|
0x80ADE6C0:("BgDkjailIvy_WaitForCut",),
|
||||||
0x80ADE734:("func_80ADE734",),
|
0x80ADE734:("BgDkjailIvy_SetupCutscene",),
|
||||||
0x80ADE748:("func_80ADE748",),
|
0x80ADE748:("BgDkjailIvy_BeginCutscene",),
|
||||||
0x80ADE7E0:("func_80ADE7E0",),
|
0x80ADE7E0:("BgDkjailIvy_SetupFadeOut",),
|
||||||
0x80ADE7F4:("func_80ADE7F4",),
|
0x80ADE7F4:("BgDkjailIvy_FadeOut",),
|
||||||
0x80ADE850:("BgDkjailIvy_Update",),
|
0x80ADE850:("BgDkjailIvy_Update",),
|
||||||
0x80ADE874:("BgDkjailIvy_Draw",),
|
0x80ADE874:("BgDkjailIvy_Draw",),
|
||||||
0x80ADEA70:("ObjVisiblock_Init",),
|
0x80ADEA70:("ObjVisiblock_Init",),
|
||||||
|
|
Loading…
Reference in New Issue