mirror of
https://github.com/zeldaret/oot.git
synced 2025-07-13 03:14:38 +00:00
ovl_Effect_Ss_Extra (#339)
* ovl_Effect_Ss_Extra * EffectSsExtra_Spawn * Typo * PR review * PR review
This commit is contained in:
parent
18775320f8
commit
d44dd61cd6
14 changed files with 86 additions and 341 deletions
|
@ -4,6 +4,7 @@
|
|||
#include "overlays/effects/ovl_Effect_Ss_Bomb/z_eff_ss_bomb.h"
|
||||
#include "overlays/effects/ovl_Effect_Ss_Bomb2/z_eff_ss_bomb2.h"
|
||||
#include "overlays/effects/ovl_Effect_Ss_Blast/z_eff_ss_blast.h"
|
||||
#include "overlays/effects/ovl_Effect_Ss_Extra/z_eff_ss_extra.h"
|
||||
#include "overlays/effects/ovl_Effect_Ss_G_Spk/z_eff_ss_g_spk.h"
|
||||
#include "overlays/effects/ovl_Effect_Ss_Solder_Srch_Ball/z_eff_ss_solder_srch_ball.h"
|
||||
#include "overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h"
|
||||
|
@ -465,7 +466,16 @@ void EffectSsSolderSrchBall_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* v
|
|||
|
||||
// EffectSsExtra Spawn Functions
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/code/z_effect_soft_sprite_old_init/func_8002A5F4.s")
|
||||
void EffectSsExtra_Spawn(GlobalContext* globalCtx, Vec3f* pos, Vec3f* velocity, Vec3f* accel, s16 scale, s16 scoreIdx) {
|
||||
EffectSsExtraInitParams initParams;
|
||||
|
||||
Math_Vec3f_Copy(&initParams.pos, pos);
|
||||
Math_Vec3f_Copy(&initParams.velocity, velocity);
|
||||
Math_Vec3f_Copy(&initParams.accel, accel);
|
||||
initParams.scale = scale;
|
||||
initParams.scoreIdx = scoreIdx;
|
||||
EffectSs_Spawn(globalCtx, EFFECT_SS_EXTRA, 100, &initParams);
|
||||
}
|
||||
|
||||
// EffectSsFCircle Spawn Functions
|
||||
|
||||
|
|
|
@ -1,40 +1,87 @@
|
|||
/*
|
||||
* File: z_eff_ss_extra.c
|
||||
* Overlay: ovl_Effect_Ss_Extra
|
||||
* Description:
|
||||
* Description: Minigame Score Points
|
||||
*/
|
||||
|
||||
#include "z_eff_ss_extra.h"
|
||||
|
||||
typedef enum {
|
||||
/* 0x00 */ SS_EXTRA_0,
|
||||
/* 0x01 */ SS_EXTRA_1,
|
||||
/* 0x02 */ SS_EXTRA_2,
|
||||
/* 0x03 */ SS_EXTRA_3,
|
||||
/* 0x04 */ SS_EXTRA_4,
|
||||
/* 0x05 */ SS_EXTRA_5,
|
||||
/* 0x06 */ SS_EXTRA_6,
|
||||
/* 0x07 */ SS_EXTRA_7,
|
||||
/* 0x08 */ SS_EXTRA_8,
|
||||
/* 0x09 */ SS_EXTRA_9,
|
||||
/* 0x0A */ SS_EXTRA_A,
|
||||
/* 0x0B */ SS_EXTRA_B,
|
||||
/* 0x0C */ SS_EXTRA_C,
|
||||
/* 0x00 */ SS_EXTRA_OBJ_IDX,
|
||||
/* 0x01 */ SS_EXTRA_TIMER,
|
||||
/* 0x02 */ SS_EXTRA_SCORE_IDX,
|
||||
/* 0x03 */ SS_EXTRA_SCALE
|
||||
} EffectSsExtraRegs;
|
||||
|
||||
u32 EffectSsExtra_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx);
|
||||
void EffectSsExtra_Draw(GlobalContext* globalCtx, u32 index, EffectSs* this);
|
||||
void EffectSsExtra_Update(GlobalContext* globalCtx, u32 index, EffectSs* this);
|
||||
|
||||
/*
|
||||
static s16 sScores[] = { 30, 60, 100 };
|
||||
|
||||
EffectSsInit Effect_Ss_Extra_InitVars = {
|
||||
EFFECT_SS_EXTRA,
|
||||
EffectSsExtra_Init,
|
||||
};
|
||||
*/
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/effects/ovl_Effect_Ss_Extra/EffectSsExtra_Init.s")
|
||||
static UNK_PTR D_809A4070[] = { 0x06000000, 0x06000480, 0x06000900 };
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/effects/ovl_Effect_Ss_Extra/func_809A3E00.s")
|
||||
extern Gfx D_06000DC0[];
|
||||
|
||||
#pragma GLOBAL_ASM("asm/non_matchings/overlays/effects/ovl_Effect_Ss_Extra/func_809A3FF8.s")
|
||||
u32 EffectSsExtra_Init(GlobalContext* globalCtx, u32 index, EffectSs* this, void* initParamsx) {
|
||||
EffectSsExtraInitParams* initParams = (EffectSsExtraInitParams*)initParamsx;
|
||||
s32 pad;
|
||||
s32 objBankIndex;
|
||||
u32 oldSeg6;
|
||||
|
||||
objBankIndex = Object_GetIndex(&globalCtx->objectCtx, OBJECT_YABUSAME_POINT);
|
||||
|
||||
if ((objBankIndex >= 0) && Object_IsLoaded(&globalCtx->objectCtx, objBankIndex)) {
|
||||
oldSeg6 = gSegments[6];
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(globalCtx->objectCtx.status[objBankIndex].segment);
|
||||
this->pos = initParams->pos;
|
||||
this->velocity = initParams->velocity;
|
||||
this->accel = initParams->accel;
|
||||
this->draw = EffectSsExtra_Draw;
|
||||
this->update = EffectSsExtra_Update;
|
||||
this->life = 50;
|
||||
this->regs[SS_EXTRA_SCORE_IDX] = initParams->scoreIdx;
|
||||
this->regs[SS_EXTRA_SCALE] = initParams->scale;
|
||||
this->regs[SS_EXTRA_TIMER] = 5;
|
||||
this->regs[SS_EXTRA_OBJ_IDX] = objBankIndex;
|
||||
gSegments[6] = oldSeg6;
|
||||
return 1;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void EffectSsExtra_Draw(GlobalContext* globalCtx, u32 index, EffectSs* this) {
|
||||
s32 pad;
|
||||
f32 scale = this->regs[SS_EXTRA_SCALE] / 100.0f;
|
||||
void* object = globalCtx->objectCtx.status[this->regs[SS_EXTRA_OBJ_IDX]].segment;
|
||||
|
||||
OPEN_DISPS(globalCtx->state.gfxCtx, "../z_eff_ss_extra.c", 168);
|
||||
gSegments[6] = VIRTUAL_TO_PHYSICAL(object);
|
||||
gSPSegment(oGfxCtx->polyXlu.p++, 0x06, object);
|
||||
Matrix_Translate(this->pos.x, this->pos.y, this->pos.z, MTXMODE_NEW);
|
||||
Matrix_Scale(scale, scale, scale, MTXMODE_APPLY);
|
||||
func_80093D84(globalCtx->state.gfxCtx);
|
||||
func_800D1FD4(&globalCtx->mf_11DA0);
|
||||
gSPMatrix(oGfxCtx->polyXlu.p++, Matrix_NewMtx(globalCtx->state.gfxCtx, "../z_eff_ss_extra.c", 186),
|
||||
G_MTX_NOPUSH | G_MTX_LOAD | G_MTX_MODELVIEW);
|
||||
gSPSegment(oGfxCtx->polyXlu.p++, 0x08, SEGMENTED_TO_VIRTUAL(D_809A4070[this->regs[SS_EXTRA_SCORE_IDX]]));
|
||||
gSPDisplayList(oGfxCtx->polyXlu.p++, SEGMENTED_TO_VIRTUAL(D_06000DC0));
|
||||
CLOSE_DISPS(globalCtx->state.gfxCtx, "../z_eff_ss_extra.c", 194);
|
||||
}
|
||||
|
||||
void EffectSsExtra_Update(GlobalContext* globalCtx, u32 index, EffectSs* this) {
|
||||
if (this->regs[SS_EXTRA_TIMER] != 0) {
|
||||
this->regs[SS_EXTRA_TIMER] -= 1;
|
||||
} else {
|
||||
this->velocity.y = 0.0f;
|
||||
}
|
||||
if (this->regs[SS_EXTRA_TIMER] == 1) {
|
||||
globalCtx->interfaceCtx.unk_23C = sScores[this->regs[SS_EXTRA_SCORE_IDX]];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,6 +8,8 @@ typedef struct {
|
|||
/* 0x00 */ Vec3f pos;
|
||||
/* 0x0C */ Vec3f velocity;
|
||||
/* 0x18 */ Vec3f accel;
|
||||
} EffectSsExtraInitParams; // size = 0x
|
||||
/* 0x24 */ s16 scale;
|
||||
/* 0x26 */ s16 scoreIdx;
|
||||
} EffectSsExtraInitParams; // size = 0x28
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue