mirror of
https://github.com/zeldaret/mm.git
synced 2026-08-21 22:10:51 -04:00
+9
-9
@@ -1672,7 +1672,7 @@ extern PadMgr* padmgrContext;
|
||||
extern UNK_PTR D_801D1540;
|
||||
extern f32 D_801D1570[13];
|
||||
extern Vec3f D_801D15B0;
|
||||
// extern UNK_TYPE4 D_801D15BC;
|
||||
extern Vec3s D_801D15BC;
|
||||
extern RSPMatrix D_801D1DE0;
|
||||
extern MtxF D_801D1E20;
|
||||
extern UNK_PTR D_801D1E60;
|
||||
@@ -4019,14 +4019,14 @@ extern UNK_TYPE D_04055628;
|
||||
extern Gfx D_04057B10[];
|
||||
extern Gfx D_04058BA0[];
|
||||
extern Gfx D_04089070[];
|
||||
extern u64 D_0408DBE0[]; // gDust1Tex
|
||||
extern u64 D_0408DFE0[]; // gDust2Tex
|
||||
extern u64 D_0408E3E0[]; // gDust3Tex
|
||||
extern u64 D_0408E7E0[]; // gDust4Tex
|
||||
extern u64 D_0408EBE0[]; // gDust5Tex
|
||||
extern u64 D_0408EFE0[]; // gDust6Tex
|
||||
extern u64 D_0408F3E0[]; // gDust7Tex
|
||||
extern u64 D_0408F7E0[]; // gDust8Tex
|
||||
extern TexturePtr D_0408DBE0[]; // gDust1Tex
|
||||
extern TexturePtr D_0408DFE0[]; // gDust2Tex
|
||||
extern TexturePtr D_0408E3E0[]; // gDust3Tex
|
||||
extern TexturePtr D_0408E7E0[]; // gDust4Tex
|
||||
extern TexturePtr D_0408EBE0[]; // gDust5Tex
|
||||
extern TexturePtr D_0408EFE0[]; // gDust6Tex
|
||||
extern TexturePtr D_0408F3E0[]; // gDust7Tex
|
||||
extern TexturePtr D_0408F7E0[]; // gDust8Tex
|
||||
extern UNK_TYPE D_04050550;
|
||||
extern UNK_TYPE D_04050648;
|
||||
extern UNK_TYPE D_040510B0;
|
||||
|
||||
@@ -3042,8 +3042,7 @@ beginseg
|
||||
name "ovl_En_Dnb"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_En_Dnb/z_en_dnb.o"
|
||||
include "build/data/ovl_En_Dnb/ovl_En_Dnb.data.o"
|
||||
include "build/data/ovl_En_Dnb/ovl_En_Dnb.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_En_Dnb/ovl_En_Dnb_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
||||
@@ -1,3 +1,9 @@
|
||||
/*
|
||||
* File: z_en_dnb.c
|
||||
* Overlay: ovl_En_Dnb
|
||||
* Description:
|
||||
*/
|
||||
|
||||
#include "z_en_dnb.h"
|
||||
|
||||
#define FLAGS 0x000000B0
|
||||
@@ -9,7 +15,16 @@ void EnDnb_Destroy(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnDnb_Update(Actor* thisx, GlobalContext* globalCtx);
|
||||
void EnDnb_Draw(Actor* thisx, GlobalContext* globalCtx);
|
||||
|
||||
#if 0
|
||||
s32 func_80A507C0(EnDnbUnkStruct* arg0, Vec3f arg1, Vec3f arg2, u8 arg3, f32 arg4, f32 arg5);
|
||||
s32 func_80A5086C(EnDnbUnkStruct* arg0);
|
||||
s32 func_80A50950(EnDnbUnkStruct* arg0, GlobalContext* globalCtx);
|
||||
|
||||
extern Gfx D_06000000[];
|
||||
extern Gfx D_06000020[];
|
||||
extern Gfx D_06004638[];
|
||||
extern Vec3s D_06004710[];
|
||||
extern CollisionHeader D_06004D8C;
|
||||
|
||||
const ActorInit En_Dnb_InitVars = {
|
||||
ACTOR_EN_DNB,
|
||||
ACTORCAT_BG,
|
||||
@@ -22,34 +37,271 @@ const ActorInit En_Dnb_InitVars = {
|
||||
(ActorFunc)EnDnb_Draw,
|
||||
};
|
||||
|
||||
#endif
|
||||
void func_80A4FDD0(EnDnbParticle* particle, EnDnb* this, s16* alloc, s32 idx) {
|
||||
Vec3f sp1C;
|
||||
s32 idx2 = idx * 3;
|
||||
|
||||
extern UNK_TYPE D_06000020;
|
||||
extern UNK_TYPE D_06004638;
|
||||
extern UNK_TYPE D_06004D8C;
|
||||
sp1C.x = alloc[idx2 + 0] + this->dyna.actor.world.pos.x;
|
||||
sp1C.y = alloc[idx2 + 1] + this->dyna.actor.world.pos.y;
|
||||
sp1C.z = alloc[idx2 + 2] + this->dyna.actor.world.pos.z;
|
||||
particle->unk_00 = sp1C;
|
||||
particle->unk_0C = sp1C;
|
||||
particle->unk_24 = Math_Vec3f_Yaw(&this->dyna.actor.world.pos, &sp1C);
|
||||
particle->unk_18 = D_801D15BC;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A4FDD0.s")
|
||||
s32 func_80A4FEBC(EnDnbParticle* particle, f32 arg1) {
|
||||
s32 ret = false;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A4FEBC.s")
|
||||
if ((DECR(particle->unk_26) == 0) && (arg1 < particle->unk_0C.y)) {
|
||||
Math_ApproachF(&particle->unk_30, 1.0f, 0.4f, 1.0f);
|
||||
particle->unk_2C += particle->unk_34;
|
||||
particle->unk_0C.x += particle->unk_30 * Math_SinS(particle->unk_24);
|
||||
particle->unk_0C.z += particle->unk_30 * Math_CosS(particle->unk_24);
|
||||
particle->unk_0C.y += particle->unk_2C;
|
||||
if (particle->unk_0C.y <= arg1) {
|
||||
particle->unk_0C.y = arg1;
|
||||
}
|
||||
particle->unk_18.x += particle->unk_1E.x;
|
||||
particle->unk_18.y += particle->unk_1E.y;
|
||||
particle->unk_18.z += particle->unk_1E.z;
|
||||
ret = true;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A4FFE8.s")
|
||||
return ret;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A500F8.s")
|
||||
void func_80A4FFE8(EnDnbParticle* particle, s16 arg1) {
|
||||
particle->unk_0C = particle->unk_00;
|
||||
particle->unk_1E.x = (Rand_ZeroOne() - 0.5f) * 400.0f;
|
||||
particle->unk_1E.y = (Rand_ZeroOne() - 0.5f) * 400.0f;
|
||||
particle->unk_1E.z = (Rand_ZeroOne() - 0.5f) * 400.0f;
|
||||
particle->unk_18 = D_801D15BC;
|
||||
particle->unk_30 = 40.0f;
|
||||
particle->unk_2C = 0.0f;
|
||||
particle->unk_26 = arg1;
|
||||
particle->unk_34 = (Rand_ZeroOne() * -2.0f) - 2.0f;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/EnDnb_Init.s")
|
||||
s32 func_80A500F8(EnDnb* this) {
|
||||
static Vec3f D_80A50CB0 = { 0.0f, 0.0f, 1000.0f };
|
||||
Actor* actor = &this->dyna.actor;
|
||||
Vec3f spA8 = D_801D15B0;
|
||||
Vec3f sp9C;
|
||||
s32 i;
|
||||
f32 temp_f20;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/EnDnb_Destroy.s")
|
||||
for (i = 0; i < 16; i++) {
|
||||
Lib_Vec3f_TranslateAndRotateY(&actor->world.pos, i * 4096, &D_80A50CB0, &spA8);
|
||||
temp_f20 = Rand_ZeroOne() * 240.0f;
|
||||
sp9C.x = Math_SinS(i * 4096) * temp_f20;
|
||||
sp9C.z = Math_CosS(i * 4096) * temp_f20;
|
||||
sp9C.y = Rand_ZeroOne() * 180.0f;
|
||||
func_80A507C0(this->unk_0D38, spA8, sp9C, 16, 50.0f, 30.0f);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/EnDnb_Update.s")
|
||||
return i;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A50510.s")
|
||||
void EnDnb_Init(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDnb* this = THIS;
|
||||
s32 i;
|
||||
s16* alloc;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A5063C.s")
|
||||
BcCheck3_BgActorInit(&this->dyna, 1);
|
||||
BgCheck3_LoadMesh(globalCtx, &this->dyna, &D_06004D8C);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/EnDnb_Draw.s")
|
||||
alloc = (s16*)Lib_SegmentedToVirtual(D_06004710);
|
||||
for (i = 0; i < ARRAY_COUNT(this->particles); i++) {
|
||||
func_80A4FDD0(&this->particles[i], this, alloc, i);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A507C0.s")
|
||||
Actor_SetScale(&this->dyna.actor, 1.0f);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A5086C.s")
|
||||
void EnDnb_Destroy(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDnb* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_En_Dnb/func_80A50950.s")
|
||||
BgCheck_RemoveActorMesh(globalCtx, &globalCtx->colCtx.dyna, this->dyna.bgId);
|
||||
}
|
||||
|
||||
void EnDnb_Update(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDnb* this = THIS;
|
||||
s32 i;
|
||||
|
||||
if (this->unk_0D30 == 0) {
|
||||
for (i = 0; i < ARRAY_COUNT(this->particles); i++) {
|
||||
func_80A4FFE8(&this->particles[i], ((53 - i) / 18) * 4);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->unk_0D38); i++) {
|
||||
this->unk_0D38[i].isEnabled = false;
|
||||
}
|
||||
this->unk_0D32 = 20;
|
||||
this->unk_0D30 = 100;
|
||||
} else if (DECR(this->unk_0D32) == 0) {
|
||||
if ((DECR(this->unk_0D34) == 0) && (this->unk_0D30 >= 21)) {
|
||||
this->unk_0D34 = 5;
|
||||
func_80A500F8(this);
|
||||
}
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->particles); i++) {
|
||||
func_80A4FEBC(&this->particles[i], this->dyna.actor.world.pos.y);
|
||||
}
|
||||
|
||||
this->unk_0D30--;
|
||||
}
|
||||
func_80A5086C(this->unk_0D38);
|
||||
}
|
||||
|
||||
void func_80A50510(EnDnb* this, GlobalContext* globalCtx) {
|
||||
s32 i;
|
||||
Gfx** gfx = Lib_SegmentedToVirtual(D_06004638);
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_8012C2DC(globalCtx->state.gfxCtx);
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->particles); i++) {
|
||||
SysMatrix_StatePush();
|
||||
SysMatrix_InsertTranslation(this->particles[i].unk_0C.x, this->particles[i].unk_0C.y,
|
||||
this->particles[i].unk_0C.z, MTXMODE_NEW);
|
||||
SysMatrix_InsertXRotation_s(this->particles[i].unk_18.x, MTXMODE_APPLY);
|
||||
Matrix_RotateY(this->particles[i].unk_18.y, MTXMODE_APPLY);
|
||||
SysMatrix_InsertZRotation_s(this->particles[i].unk_18.z, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gfx[i]);
|
||||
|
||||
SysMatrix_StatePop();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
void func_80A5063C(EnDnb* this, GlobalContext* globalCtx) {
|
||||
s32 i;
|
||||
Gfx** gfx = Lib_SegmentedToVirtual(D_06004638);
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_8012C28C(globalCtx->state.gfxCtx);
|
||||
|
||||
for (i = 0; i < ARRAY_COUNT(this->particles); i++) {
|
||||
SysMatrix_StatePush();
|
||||
SysMatrix_InsertTranslation(this->particles[i].unk_0C.x, this->particles[i].unk_0C.y,
|
||||
this->particles[i].unk_0C.z, MTXMODE_NEW);
|
||||
SysMatrix_InsertXRotation_s(this->particles[i].unk_18.x, MTXMODE_APPLY);
|
||||
Matrix_RotateY(this->particles[i].unk_18.y, MTXMODE_APPLY);
|
||||
SysMatrix_InsertZRotation_s(this->particles[i].unk_18.z, MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_OPA_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_OPA_DISP++, gfx[i]);
|
||||
|
||||
SysMatrix_StatePop();
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
}
|
||||
|
||||
void EnDnb_Draw(Actor* thisx, GlobalContext* globalCtx) {
|
||||
EnDnb* this = THIS;
|
||||
|
||||
if (globalCtx->actorCtx.unk4 != 0) {
|
||||
func_80A50510(this, globalCtx);
|
||||
} else {
|
||||
func_80A5063C(this, globalCtx);
|
||||
}
|
||||
func_80A50950(this->unk_0D38, globalCtx);
|
||||
}
|
||||
|
||||
s32 func_80A507C0(EnDnbUnkStruct* arg0, Vec3f arg1, Vec3f arg2, u8 arg3, f32 arg4, f32 arg5) {
|
||||
s32 i;
|
||||
s32 ret = 0;
|
||||
|
||||
for (i = 0; i < 256; i++, arg0++) {
|
||||
if (arg0->isEnabled == false) {
|
||||
arg0->isEnabled = true;
|
||||
arg0->unk_01 = arg3;
|
||||
arg0->unk_02 = arg3;
|
||||
arg0->unk_0C = arg1;
|
||||
arg0->unk_18 = arg2;
|
||||
arg0->unk_04 = arg4;
|
||||
arg0->unk_08 = arg5;
|
||||
arg0->unk_24 = 255.0f;
|
||||
ret = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
s32 func_80A5086C(EnDnbUnkStruct* arg0) {
|
||||
s32 count = 0;
|
||||
s32 i;
|
||||
|
||||
for (i = 0; i < 256; i++, arg0++) {
|
||||
if (arg0->isEnabled == true) {
|
||||
count++;
|
||||
if (arg0->unk_01 != 0) {
|
||||
arg0->unk_0C.x += arg0->unk_18.x;
|
||||
arg0->unk_0C.y += arg0->unk_18.y;
|
||||
arg0->unk_0C.z += arg0->unk_18.z;
|
||||
arg0->unk_01 -= 1;
|
||||
} else {
|
||||
arg0->isEnabled = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
s32 func_80A50950(EnDnbUnkStruct* arg0, GlobalContext* globalCtx2) {
|
||||
static TexturePtr D_80A50CBC[] = {
|
||||
D_0408F7E0, D_0408F3E0, D_0408EFE0, D_0408EBE0, D_0408E7E0, D_0408E3E0, D_0408DFE0, D_0408DBE0,
|
||||
};
|
||||
GlobalContext* globalCtx = globalCtx2;
|
||||
s32 isGfxSetup = false;
|
||||
s32 sp5C = 0;
|
||||
s32 idx;
|
||||
s32 i;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
func_8012C2DC(globalCtx->state.gfxCtx);
|
||||
|
||||
for (i = 0; i < 256; i++, arg0++) {
|
||||
if (arg0->isEnabled == 1) {
|
||||
if (!isGfxSetup) {
|
||||
POLY_XLU_DISP = Gfx_CallSetupDL(POLY_XLU_DISP, 0);
|
||||
gSPDisplayList(POLY_XLU_DISP++, D_06000000);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, 255, 0);
|
||||
isGfxSetup = true;
|
||||
}
|
||||
SysMatrix_StatePush();
|
||||
|
||||
if (1) {};
|
||||
arg0->unk_24 = (arg0->unk_01 / (f32)arg0->unk_02) * 255.0f;
|
||||
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, 255, (u8)arg0->unk_24);
|
||||
|
||||
SysMatrix_InsertTranslation(arg0->unk_0C.x, arg0->unk_0C.y, arg0->unk_0C.z, MTXMODE_NEW);
|
||||
Matrix_Scale(arg0->unk_04, arg0->unk_04, 1.0f, MTXMODE_APPLY);
|
||||
SysMatrix_NormalizeXYZ(&globalCtx->mf_187FC);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(globalCtx->state.gfxCtx),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
idx = (arg0->unk_01 / (f32)arg0->unk_02) * 8.0f;
|
||||
gSPSegment(POLY_XLU_DISP++, 0x08, Lib_SegmentedToVirtual(D_80A50CBC[idx]));
|
||||
gSPDisplayList(POLY_XLU_DISP++, D_06000020);
|
||||
|
||||
SysMatrix_StatePop();
|
||||
sp5C += 1;
|
||||
}
|
||||
}
|
||||
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx);
|
||||
|
||||
return sp5C;
|
||||
}
|
||||
|
||||
@@ -5,9 +5,38 @@
|
||||
|
||||
struct EnDnb;
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ Vec3f unk_00;
|
||||
/* 0x0C */ Vec3f unk_0C;
|
||||
/* 0x18 */ Vec3s unk_18;
|
||||
/* 0x1E */ Vec3s unk_1E;
|
||||
/* 0x24 */ s16 unk_24;
|
||||
/* 0x26 */ s16 unk_26;
|
||||
/* 0x28 */ UNK_TYPE1 unk_28[0x4];
|
||||
/* 0x2C */ f32 unk_2C;
|
||||
/* 0x30 */ f32 unk_30;
|
||||
/* 0x34 */ f32 unk_34;
|
||||
} EnDnbParticle; // size = 0x38
|
||||
|
||||
typedef struct {
|
||||
/* 0x00 */ u8 isEnabled;
|
||||
/* 0x01 */ u8 unk_01;
|
||||
/* 0x02 */ u8 unk_02;
|
||||
/* 0x04 */ f32 unk_04;
|
||||
/* 0x08 */ f32 unk_08;
|
||||
/* 0x0C */ Vec3f unk_0C;
|
||||
/* 0x18 */ Vec3f unk_18;
|
||||
/* 0x24 */ f32 unk_24;
|
||||
} EnDnbUnkStruct; // size = 0x28
|
||||
|
||||
typedef struct EnDnb {
|
||||
/* 0x0000 */ Actor actor;
|
||||
/* 0x0144 */ char unk_0144[0x33F4];
|
||||
/* 0x0000 */ DynaPolyActor dyna;
|
||||
/* 0x015C */ UNK_TYPE1 unk_015C[0x4];
|
||||
/* 0x0160 */ EnDnbParticle particles[54];
|
||||
/* 0x0D30 */ s16 unk_0D30;
|
||||
/* 0x0D32 */ s16 unk_0D32;
|
||||
/* 0x0D34 */ s16 unk_0D34;
|
||||
/* 0x0D38 */ EnDnbUnkStruct unk_0D38[256];
|
||||
} EnDnb; // size = 0x3538
|
||||
|
||||
extern const ActorInit En_Dnb_InitVars;
|
||||
|
||||
@@ -450,7 +450,7 @@ void EnFg_UpdateDust(EnFgEffectDust* dustEffect) {
|
||||
}
|
||||
}
|
||||
|
||||
u64* sDustTex[] = {
|
||||
TexturePtr sDustTex[] = {
|
||||
D_0408F7E0, D_0408F3E0, D_0408EFE0, D_0408EBE0, D_0408E7E0, D_0408E3E0, D_0408DFE0, D_0408DBE0,
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user