mirror of https://github.com/zeldaret/mm.git
Ovl_Dm_Hina decompiled (#1380)
* data * all functions without func_80A1F75C * func_80A1F75C * improvements * usage update * fix * x->y->z orders * improvements * != 0
This commit is contained in:
parent
b96732818a
commit
4e9e6c007c
3
spec
3
spec
|
@ -2440,8 +2440,7 @@ beginseg
|
|||
name "ovl_Dm_Hina"
|
||||
compress
|
||||
include "build/src/overlays/actors/ovl_Dm_Hina/z_dm_hina.o"
|
||||
include "build/data/ovl_Dm_Hina/ovl_Dm_Hina.data.o"
|
||||
include "build/data/ovl_Dm_Hina/ovl_Dm_Hina.reloc.o"
|
||||
include "build/src/overlays/actors/ovl_Dm_Hina/ovl_Dm_Hina_reloc.o"
|
||||
endseg
|
||||
|
||||
beginseg
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
#include "z_dm_hina.h"
|
||||
#include "objects/gameplay_keep/gameplay_keep.h"
|
||||
|
||||
#define FLAGS (ACTOR_FLAG_10 | ACTOR_FLAG_20)
|
||||
|
||||
|
@ -20,7 +21,6 @@ void func_80A1F56C(DmHina* this, PlayState* play);
|
|||
void func_80A1F5AC(DmHina* this, PlayState* play);
|
||||
void func_80A1F63C(DmHina* this, PlayState* play);
|
||||
|
||||
#if 0
|
||||
ActorInit Dm_Hina_InitVars = {
|
||||
ACTOR_DM_HINA,
|
||||
ACTORCAT_ITEMACTION,
|
||||
|
@ -33,24 +33,162 @@ ActorInit Dm_Hina_InitVars = {
|
|||
(ActorFunc)DmHina_Draw,
|
||||
};
|
||||
|
||||
#endif
|
||||
void DmHina_Init(Actor* thisx, PlayState* play) {
|
||||
DmHina* this = THIS;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Init.s")
|
||||
this->isDrawn = true;
|
||||
this->actionFunc = func_80A1F470;
|
||||
this->unk158 = this->actor.world.pos.y;
|
||||
this->unk148 = 0.0f;
|
||||
this->unk15C = 1.0f;
|
||||
this->actor.focus.pos.x = this->actor.world.pos.x;
|
||||
this->actor.focus.pos.y = this->actor.world.pos.y;
|
||||
this->actor.focus.pos.z = this->actor.world.pos.z;
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Destroy.s")
|
||||
void DmHina_Destroy(Actor* thisx, PlayState* play) {
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F470.s")
|
||||
void func_80A1F470(DmHina* this, PlayState* play) {
|
||||
Player* player = GET_PLAYER(play);
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F56C.s")
|
||||
Math_SmoothStepToF(&this->unk148, 0.6f, 0.5f, 0.05f, 0.001f);
|
||||
this->unk154 = Math_SinS(play->gameplayFrames * 0x708) * 8.0f;
|
||||
if ((player->stateFlags1 & PLAYER_STATE1_400) && (this->actor.xzDistToPlayer < 80.0f)) {
|
||||
this->isDrawn = false;
|
||||
this->unk154 = 0.0f;
|
||||
this->actor.world.pos.y += 40.0f;
|
||||
this->actionFunc = func_80A1F56C;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F5AC.s")
|
||||
void func_80A1F56C(DmHina* this, PlayState* play) {
|
||||
if (Message_GetState(&play->msgCtx) == TEXT_STATE_CLOSING) {
|
||||
this->unk17C = 2;
|
||||
this->actionFunc = func_80A1F5AC;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F63C.s")
|
||||
void func_80A1F5AC(DmHina* this, PlayState* play) {
|
||||
this->unk17C--;
|
||||
if (this->unk17C == 0) {
|
||||
this->isDrawn = true;
|
||||
Cutscene_StartManual(play, &play->csCtx);
|
||||
this->subCamId = Play_CreateSubCamera(play);
|
||||
Play_ChangeCameraStatus(play, CAM_ID_MAIN, CAM_STATUS_WAIT);
|
||||
Play_ChangeCameraStatus(play, this->subCamId, CAM_STATUS_ACTIVE);
|
||||
this->actionFunc = func_80A1F63C;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F75C.s")
|
||||
void func_80A1F63C(DmHina* this, PlayState* play) {
|
||||
this->subCamEye.x = this->actor.world.pos.x + 100.0f;
|
||||
this->subCamEye.y = this->unk158 + 260.0f;
|
||||
this->subCamEye.z = this->actor.world.pos.z + 100.0f;
|
||||
this->subCamAt.x = this->actor.world.pos.x;
|
||||
this->subCamAt.y = this->actor.world.pos.y + this->unk154 * this->unk15C + 40.0f * this->unk15C;
|
||||
this->subCamAt.z = this->actor.world.pos.z;
|
||||
Play_SetCameraAtEye(play, this->subCamId, &this->subCamAt, &this->subCamEye);
|
||||
Math_SmoothStepToF(&this->actor.world.pos.y, this->unk158 + 300.0f, 0.5f, 2.0f, 0.1f);
|
||||
if (((this->unk158 + 240.0f) < this->actor.world.pos.y) && (this->unk17E != 1)) {
|
||||
this->unk17E = 1;
|
||||
Actor_PlaySfx(&this->actor, NA_SE_OC_WHITE_OUT_INTO_KYOJIN);
|
||||
}
|
||||
Actor_PlaySfx(&this->actor, NA_SE_EV_MASK_RISING - SFX_FLAG);
|
||||
}
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Update.s")
|
||||
void func_80A1F75C(DmHina* this, PlayState* play) {
|
||||
s32 i;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/func_80A1F9AC.s")
|
||||
switch (this->unk17E) {
|
||||
case 0:
|
||||
this->unk17F = 0;
|
||||
this->unk14C = 0.0f;
|
||||
break;
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/ovl_Dm_Hina/DmHina_Draw.s")
|
||||
case 1:
|
||||
Math_SmoothStepToF(&this->unk14C, 1.0f, 0.4f, 0.05f, 0.001f);
|
||||
this->unk17F = this->unk14C * 255.0f;
|
||||
this->unk150 = Math_SinS(play->state.frames * 0x1F40);
|
||||
for (i = 0; i < 3; i++) {
|
||||
play->envCtx.lightSettings.ambientColor[i] = play->envCtx.lightSettings.fogColor[i] =
|
||||
play->envCtx.lightSettings.diffuseColor1[i] = -255.0f * this->unk14C;
|
||||
}
|
||||
play->envCtx.lightSettings.fogNear = -500.0f * this->unk14C;
|
||||
if (play->envCtx.lightSettings.fogNear < -300) {
|
||||
play->roomCtx.curRoom.segment = NULL;
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
void DmHina_Update(Actor* thisx, PlayState* play) {
|
||||
DmHina* this = THIS;
|
||||
|
||||
this->actionFunc(this, play);
|
||||
func_80A1F75C(this, play);
|
||||
}
|
||||
|
||||
void func_80A1F9AC(DmHina* this, PlayState* play) {
|
||||
GraphicsContext* gfxCtx = play->state.gfxCtx;
|
||||
|
||||
if (this->unk17E != 0) {
|
||||
OPEN_DISPS(gfxCtx);
|
||||
|
||||
Gfx_SetupDL25_Xlu(play->state.gfxCtx);
|
||||
|
||||
gDPSetPrimColor(POLY_XLU_DISP++, 0, 0, 255, 255, (u8)(this->unk14C * 100.0f) + 155, this->unk17F);
|
||||
gDPSetEnvColor(POLY_XLU_DISP++, 255, 255, (u8)(this->unk150 * 100.0f) + 50, 0);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrbMaterial1DL);
|
||||
|
||||
Matrix_Translate(this->actor.world.pos.x,
|
||||
this->actor.world.pos.y + (this->unk154 * this->unk15C) + (40.0f * this->unk15C),
|
||||
this->actor.world.pos.z, MTXMODE_NEW);
|
||||
Matrix_ReplaceRotation(&play->billboardMtxF);
|
||||
Matrix_Scale(this->unk14C * 20.0f, this->unk14C * 20.0f, this->unk14C * 20.0f, MTXMODE_APPLY);
|
||||
Matrix_RotateZF(Rand_ZeroFloat(2 * M_PI), MTXMODE_APPLY);
|
||||
|
||||
gSPMatrix(POLY_XLU_DISP++, Matrix_NewMtx(gfxCtx), G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPDisplayList(POLY_XLU_DISP++, gLightOrbModelDL);
|
||||
|
||||
CLOSE_DISPS(gfxCtx);
|
||||
}
|
||||
}
|
||||
|
||||
void DmHina_Draw(Actor* thisx, PlayState* play) {
|
||||
DmHina* this = THIS;
|
||||
f32 scale;
|
||||
|
||||
if (this->isDrawn) {
|
||||
Matrix_Translate(this->actor.world.pos.x,
|
||||
this->actor.world.pos.y + (this->unk154 * this->unk15C) + (40.0f * this->unk15C),
|
||||
this->actor.world.pos.z, MTXMODE_NEW);
|
||||
Matrix_RotateZYX(0, play->gameplayFrames * 0x3E8, 0, MTXMODE_APPLY);
|
||||
scale = this->unk148 * (1.0f - this->unk14C) * this->unk15C;
|
||||
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
|
||||
switch (this->actor.params) {
|
||||
case 0:
|
||||
GetItem_Draw(play, GID_REMAINS_ODOLWA);
|
||||
break;
|
||||
|
||||
case 1:
|
||||
GetItem_Draw(play, GID_REMAINS_GOHT);
|
||||
break;
|
||||
|
||||
case 2:
|
||||
GetItem_Draw(play, GID_REMAINS_GYORG);
|
||||
break;
|
||||
|
||||
case 3:
|
||||
GetItem_Draw(play, GID_REMAINS_TWINMOLD);
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
func_80A1F9AC(this, play);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,10 +10,20 @@ typedef void (*DmHinaActionFunc)(struct DmHina*, PlayState*);
|
|||
typedef struct DmHina {
|
||||
/* 0x000 */ Actor actor;
|
||||
/* 0x144 */ DmHinaActionFunc actionFunc;
|
||||
/* 0x148 */ char unk_148[0x10];
|
||||
/* 0x158 */ f32 unk_158;
|
||||
/* 0x15C */ f32 unk_15C;
|
||||
/* 0x160 */ char unk_160[0x24];
|
||||
/* 0x148 */ f32 unk148;
|
||||
/* 0x14C */ f32 unk14C;
|
||||
/* 0x150 */ f32 unk150;
|
||||
/* 0x154 */ f32 unk154;
|
||||
/* 0x158 */ f32 unk158;
|
||||
/* 0x15C */ f32 unk15C;
|
||||
/* 0x160 */ Vec3f subCamEye;
|
||||
/* 0x16C */ Vec3f subCamAt;
|
||||
/* 0x178 */ UNK_TYPE1 pad178[2];
|
||||
/* 0x17A */ s16 subCamId;
|
||||
/* 0x17C */ s16 unk17C;
|
||||
/* 0x17E */ u8 unk17E;
|
||||
/* 0x17F */ u8 unk17F;
|
||||
/* 0x180 */ u8 isDrawn;
|
||||
} DmHina; // size = 0x184
|
||||
|
||||
#endif // Z_DM_HINA_H
|
||||
|
|
|
@ -919,10 +919,10 @@ void DoorWarp1_Update(Actor* thisx, PlayState* play) {
|
|||
this->unk_204 = 1.0f;
|
||||
}
|
||||
|
||||
if ((this->unk_1A0 != NULL) && (this->unk_1A0->unk_15C != this->unk_204)) {
|
||||
if ((this->unk_1A0 != NULL) && (this->unk_1A0->unk15C != this->unk_204)) {
|
||||
this->unk_1A0->actor.world.pos.y = this->dyna.actor.world.pos.y;
|
||||
this->unk_1A0->unk_158 = this->dyna.actor.world.pos.y;
|
||||
this->unk_1A0->unk_15C = this->unk_204;
|
||||
this->unk_1A0->unk158 = this->dyna.actor.world.pos.y;
|
||||
this->unk_1A0->unk15C = this->unk_204;
|
||||
}
|
||||
|
||||
this->actionFunc(this, play);
|
||||
|
|
Loading…
Reference in New Issue