ovl_Eff_Kamejima_Wave Decompiled (#908)

* almost there

* ovl_Eff_Kamejima_Wave Decompiled

* Us removal

* minor clean up

* pr review

* review

* sikihi rollback and function name fix

* params rename

* SetVtxAlpha

* params prefix

* Jenkins re-run
This commit is contained in:
Alejandro Asenjo 2022-07-19 12:54:30 -03:00 committed by GitHub
parent a22e72acfe
commit abf70f6dd2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 149 additions and 21 deletions

View File

@ -1,5 +1,8 @@
<Root> <Root>
<File Name="object_kamejima" Segment="6"> <File Name="object_kamejima" Segment="6">
<Array Name="object_kamejima_Vtx_000000" Count="20" Offset="0x0">
<Vtx/>
</Array>
<DList Name="object_kamejima_DL_000140" Offset="0x140" /> <DList Name="object_kamejima_DL_000140" Offset="0x140" />
<Texture Name="object_kamejima_Tex_0002D8" OutName="tex_0002D8" Format="i8" Width="32" Height="64" Offset="0x2D8" /> <Texture Name="object_kamejima_Tex_0002D8" OutName="tex_0002D8" Format="i8" Width="32" Height="64" Offset="0x2D8" />
<Texture Name="object_kamejima_Tex_000AD8" OutName="tex_000AD8" Format="i8" Width="64" Height="64" Offset="0xAD8" /> <Texture Name="object_kamejima_Tex_000AD8" OutName="tex_000AD8" Format="i8" Width="64" Height="64" Offset="0xAD8" />

4
spec
View File

@ -4501,9 +4501,7 @@ beginseg
name "ovl_Eff_Kamejima_Wave" name "ovl_Eff_Kamejima_Wave"
compress compress
include "build/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.o" include "build/src/overlays/actors/ovl_Eff_Kamejima_Wave/z_eff_kamejima_wave.o"
include "build/data/ovl_Eff_Kamejima_Wave/ovl_Eff_Kamejima_Wave.data.o" include "build/src/overlays/actors/ovl_Eff_Kamejima_Wave/ovl_Eff_Kamejima_Wave_reloc.o"
include "build/data/ovl_Eff_Kamejima_Wave/ovl_Eff_Kamejima_Wave.bss.o"
include "build/data/ovl_Eff_Kamejima_Wave/ovl_Eff_Kamejima_Wave.reloc.o"
endseg endseg
beginseg beginseg

View File

@ -5,6 +5,7 @@
*/ */
#include "z_eff_kamejima_wave.h" #include "z_eff_kamejima_wave.h"
#include "objects/object_kamejima/object_kamejima.h"
#define FLAGS (ACTOR_FLAG_10) #define FLAGS (ACTOR_FLAG_10)
@ -13,8 +14,14 @@
void EffKamejimaWave_Init(Actor* thisx, PlayState* play); void EffKamejimaWave_Init(Actor* thisx, PlayState* play);
void EffKamejimaWave_Destroy(Actor* thisx, PlayState* play); void EffKamejimaWave_Destroy(Actor* thisx, PlayState* play);
void EffKamejimaWave_Update(Actor* thisx, PlayState* play); void EffKamejimaWave_Update(Actor* thisx, PlayState* play);
void EffKamejimaWave_Draw(Actor* thisx, PlayState* play);
void func_80BCEC6C(EffKamejimaWave* this, PlayState* play);
void func_80BCEDE0(EffKamejimaWave* this, PlayState* play);
void func_80BCEBC0(EffKamejimaWave* this, PlayState* play);
void func_80BCED34(EffKamejimaWave* this, PlayState* play);
void EffKamejimaWave_SetVtxAlpha(u8 alpha);
#if 0
const ActorInit Eff_Kamejima_Wave_InitVars = { const ActorInit Eff_Kamejima_Wave_InitVars = {
ACTOR_EFF_KAMEJIMA_WAVE, ACTOR_EFF_KAMEJIMA_WAVE,
ACTORCAT_ITEMACTION, ACTORCAT_ITEMACTION,
@ -27,26 +34,138 @@ const ActorInit Eff_Kamejima_Wave_InitVars = {
(ActorFunc)NULL, (ActorFunc)NULL,
}; };
#endif static Color_RGBA8 sPrimColors[] = {
{ 255, 240, 255, 255 }, { 255, 255, 255, 255 }, { 255, 240, 230, 255 }, { 140, 170, 220, 255 }
};
static Color_RGBA8 sEnvColors[] = {
{ 130, 80, 90, 255 }, { 90, 120, 130, 255 }, { 130, 80, 70, 255 }, { 40, 60, 110, 255 }
};
extern UNK_TYPE D_06000000; s16 sVtxAlpha;
extern UNK_TYPE D_06000140; AnimatedMaterial* D_80BCF1C4;
extern UNK_TYPE D_06001AF0;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/EffKamejimaWave_Init.s") void EffKamejimaWave_Init(Actor* thisx, PlayState* play) {
EffKamejimaWave* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/EffKamejimaWave_Destroy.s") Actor_SetScale(&this->actor, 0.2f);
this->actor.scale.y = 0.0f;
if (EFFKAMEJIMAWAVE_GET_F(thisx) == EFFKAMEJIMAWAVE_PARAMS_1) {
this->actionFunc = func_80BCEDE0;
sVtxAlpha = 255;
} else {
this->actionFunc = func_80BCEC6C;
sVtxAlpha = 255;
}
D_80BCF1C4 = Lib_SegmentedToVirtual(object_kamejima_Matanimheader_001AF0);
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/func_80BCEBC0.s") void EffKamejimaWave_Destroy(Actor* thisx, PlayState* play) {
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/func_80BCEC6C.s") void func_80BCEBC0(EffKamejimaWave* this, PlayState* play) {
this->actor.scale.y += this->scaleOffset;
this->scaleOffset -= 0.003f;
this->actor.shape.rot.x += 0x64;
if (this->scaleOffset < 0.0f) {
this->actor.scale.x += 0.003f;
}
if (this->scaleOffset < -0.01f) {
this->scaleOffset = -0.01f;
}
if (this->actor.scale.y < 0.0f) {
this->actor.scale.y = 0.0f;
this->actor.scale.x = 0.2f;
this->actionFunc = func_80BCEC6C;
this->actor.draw = NULL;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/func_80BCED34.s") void func_80BCEC6C(EffKamejimaWave* this, PlayState* play) {
if (Cutscene_CheckActorAction(play, 0x1E0)) {
Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 0x1E0));
if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x1E0)]->action == 2) {
this->scaleOffset = 0.05f;
this->actionFunc = func_80BCEBC0;
this->actor.draw = EffKamejimaWave_Draw;
sVtxAlpha = 255;
this->actor.shape.rot.x = 0;
Actor_PlaySfxAtPos(&this->actor, NA_SE_EV_TORTOISE_WAKE_UP);
}
} else {
this->actor.draw = NULL;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/func_80BCEDE0.s") void func_80BCED34(EffKamejimaWave* this, PlayState* play) {
this->actor.scale.y += this->scaleOffset;
this->scaleOffset -= 0.002f;
this->actor.shape.rot.x += 0x8C;
if (this->scaleOffset < 0.0f) {
this->actor.scale.x += 0.002f;
}
if (this->scaleOffset < 0.0f) {
this->scaleOffset = 0;
}
if (sVtxAlpha >= 4) {
sVtxAlpha -= 4;
} else {
this->actor.scale.y = 0.0f;
this->actionFunc = func_80BCEDE0;
this->actor.draw = NULL;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/EffKamejimaWave_Update.s") void func_80BCEDE0(EffKamejimaWave* this, PlayState* play) {
if (Cutscene_CheckActorAction(play, 0x1F6)) {
Cutscene_ActorTranslateAndYaw(&this->actor, play, Cutscene_GetActorActionIndex(play, 0x1F6));
if (play->csCtx.actorActions[Cutscene_GetActorActionIndex(play, 0x1F6)]->action == 2) {
this->scaleOffset = 0.03f;
this->actor.scale.x = 0.35f;
this->actionFunc = func_80BCED34;
this->actor.draw = EffKamejimaWave_Draw;
this->actor.shape.rot.x = 0;
}
} else {
this->actor.draw = NULL;
}
}
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/func_80BCEEBC.s") void EffKamejimaWave_Update(Actor* thisx, PlayState* play) {
EffKamejimaWave* this = THIS;
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Eff_Kamejima_Wave/func_80BCEF0C.s") this->actionFunc(this, play);
}
void EffKamejimaWave_SetVtxAlpha(u8 alpha) {
Vtx* vtx = Lib_SegmentedToVirtual(&object_kamejima_Vtx_000000);
vtx[2].v.cn[3] = alpha;
vtx[6].v.cn[3] = alpha;
vtx[8].v.cn[3] = alpha;
vtx[9].v.cn[3] = alpha;
vtx[12].v.cn[3] = alpha;
vtx[16].v.cn[3] = alpha;
vtx[18].v.cn[3] = alpha;
vtx[19].v.cn[3] = alpha;
}
void EffKamejimaWave_Draw(Actor* thisx, PlayState* play) {
Color_RGBA8 primColor;
Color_RGBA8 envColor;
func_800FE7A8(sPrimColors, &primColor);
func_800FE7A8(sEnvColors, &envColor);
EffKamejimaWave_SetVtxAlpha(sVtxAlpha);
OPEN_DISPS(play->state.gfxCtx);
func_8012C2DC(play->state.gfxCtx);
Matrix_Scale(6.0f, 5.0f, 5.0f, MTXMODE_APPLY);
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(play->state.gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
AnimatedMat_Draw(play, D_80BCF1C4);
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0x80, primColor.r, primColor.g, primColor.b, 255);
gDPSetEnvColor(POLY_XLU_DISP++, envColor.r, envColor.g, envColor.b, 255);
gSPDisplayList(POLY_XLU_DISP++, object_kamejima_DL_000140);
CLOSE_DISPS(play->state.gfxCtx);
}

View File

@ -3,16 +3,24 @@
#include "global.h" #include "global.h"
#define EFFKAMEJIMAWAVE_GET_F(thisx) ((thisx)->params & 0xF)
struct EffKamejimaWave; struct EffKamejimaWave;
typedef void (*EffKamejimaWaveActionFunc)(struct EffKamejimaWave*, PlayState*); typedef void (*EffKamejimaWaveActionFunc)(struct EffKamejimaWave*, PlayState*);
typedef struct EffKamejimaWave { typedef struct EffKamejimaWave {
/* 0x000 */ Actor actor; /* 0x000 */ Actor actor;
/* 0x144 */ char unk_144[0x8]; /* 0x144 */ f32 scaleOffset;
/* 0x148 */ UNK_TYPE1 pad148[4];
/* 0x14C */ EffKamejimaWaveActionFunc actionFunc; /* 0x14C */ EffKamejimaWaveActionFunc actionFunc;
} EffKamejimaWave; // size = 0x150 } EffKamejimaWave; // size = 0x150
typedef enum params {
/* 0x0 */ EFFKAMEJIMAWAVE_PARAMS_0,
/* 0x1 */ EFFKAMEJIMAWAVE_PARAMS_1
} EffKamejimaWaveParams;
extern const ActorInit Eff_Kamejima_Wave_InitVars; extern const ActorInit Eff_Kamejima_Wave_InitVars;
#endif // Z_EFF_KAMEJIMA_WAVE_H #endif // Z_EFF_KAMEJIMA_WAVE_H

View File

@ -15668,8 +15668,8 @@
0x80BCED34:("func_80BCED34",), 0x80BCED34:("func_80BCED34",),
0x80BCEDE0:("func_80BCEDE0",), 0x80BCEDE0:("func_80BCEDE0",),
0x80BCEE98:("EffKamejimaWave_Update",), 0x80BCEE98:("EffKamejimaWave_Update",),
0x80BCEEBC:("func_80BCEEBC",), 0x80BCEEBC:("EffKamejimaWave_SetVtxAlpha",),
0x80BCEF0C:("func_80BCEF0C",), 0x80BCEF0C:("EffKamejimaWave_Draw",),
0x80BCF1D0:("EnHg_Init",), 0x80BCF1D0:("EnHg_Init",),
0x80BCF328:("EnHg_Destroy",), 0x80BCF328:("EnHg_Destroy",),
0x80BCF354:("func_80BCF354",), 0x80BCF354:("func_80BCF354",),

View File

@ -15824,7 +15824,7 @@
0x80BCF0C0:("D_80BCF0C0","f32","",0x4), 0x80BCF0C0:("D_80BCF0C0","f32","",0x4),
0x80BCF0C4:("D_80BCF0C4","f32","",0x4), 0x80BCF0C4:("D_80BCF0C4","f32","",0x4),
0x80BCF0C8:("D_80BCF0C8","f32","",0x4), 0x80BCF0C8:("D_80BCF0C8","f32","",0x4),
0x80BCF1C0:("D_80BCF1C0","UNK_TYPE1","",0x1), 0x80BCF1C0:("sVtxAlpha","UNK_TYPE1","",0x1),
0x80BCF1C1:("D_80BCF1C1","UNK_TYPE1","",0x1), 0x80BCF1C1:("D_80BCF1C1","UNK_TYPE1","",0x1),
0x80BCF1C4:("D_80BCF1C4","UNK_TYPE1","",0x1), 0x80BCF1C4:("D_80BCF1C4","UNK_TYPE1","",0x1),
0x80BCFF90:("En_Hg_InitVars","UNK_TYPE1","",0x1), 0x80BCFF90:("En_Hg_InitVars","UNK_TYPE1","",0x1),