From a74209ff03eb047163586d000bbe7df5a50f63d0 Mon Sep 17 00:00:00 2001 From: Norgesnerd <5824576+Norgesnerd@users.noreply.github.com> Date: Sat, 14 Jun 2025 15:20:26 +0200 Subject: [PATCH] Implement & link ef_siawase_hikari --- configure.py | 2 +- src/effect/ef_siawase_hikari.c | 54 +++++++++++++++++++++++++++++++--- 2 files changed, 51 insertions(+), 5 deletions(-) diff --git a/configure.py b/configure.py index 4d3c7527..faf826d9 100644 --- a/configure.py +++ b/configure.py @@ -1322,7 +1322,7 @@ config.libs = [ Object(Matching, "effect/ef_shooting_set.c"), Object(Matching, "effect/ef_siawase_hana.c"), Object(Matching, "effect/ef_siawase_hana_ch.c"), - Object(NonMatching, "effect/ef_siawase_hikari.c"), + Object(Matching, "effect/ef_siawase_hikari.c"), Object(NonMatching, "effect/ef_sibuki.c"), Object(NonMatching, "effect/ef_situren.c"), Object(NonMatching, "effect/ef_slip.c"), diff --git a/src/effect/ef_siawase_hikari.c b/src/effect/ef_siawase_hikari.c index 7065cba3..99f063da 100644 --- a/src/effect/ef_siawase_hikari.c +++ b/src/effect/ef_siawase_hikari.c @@ -1,5 +1,10 @@ #include "ef_effect_control.h" +#include "m_common_data.h" + +extern Gfx ef_siawase01_00_modelT[]; +extern EVW_ANIME_DATA ef_siawase01_00_evw_anime; + static void eSSHKR_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1); static void eSSHKR_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg); static void eSSHKR_mv(eEC_Effect_c* effect, GAME* game); @@ -18,17 +23,58 @@ eEC_PROFILE_c iam_ef_siawase_hikari = { }; static void eSSHKR_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1) { - // TODO + xyz_t ofs; + + eEC_CLIP->effect_make_proc(eEC_EFFECT_SIAWASE_HANA, pos, prio, angle, game, item_name, 0, 0); + + ofs = ZeroVec; + ofs.z = -22.0f; + eEC_CLIP->make_effect_proc(eEC_EFFECT_SIAWASE_HIKARI, pos, &ofs, game, NULL, item_name, prio, 0, 0); } static void eSSHKR_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg) { - // TODO + effect->scale.x = 0.0f; + effect->scale.y = 0.0f; + effect->scale.z = 0.0f; + + effect->effect_specific[0] = 150; + + effect->timer = 22; } static void eSSHKR_mv(eEC_Effect_c* effect, GAME* game) { - // TODO + f32 scale; + + sAdo_OngenPos((u32)effect, 14, &effect->position); + + eEC_CLIP->set_continious_env_proc(effect, 22, 122); + + if (effect->state == eEC_STATE_NORMAL) { + scale = eEC_CLIP->calc_adjust_proc(22 - effect->timer, 0, 21, 0.0f, 0.015f); + effect->scale.x = scale; + effect->scale.y = scale; + effect->scale.z = scale; + effect->effect_specific[0] = 150; + } else if (effect->state == eEC_STATE_CONTINUOUS) { + effect->scale.x = 0.015f; + effect->scale.y = 0.015f; + effect->scale.z = 0.015f; + effect->effect_specific[0] = 150; + } else if (effect->state == eEC_STATE_FINISHED) { + effect->effect_specific[0] = eEC_CLIP->calc_adjust_proc(72 - effect->timer, 0, 72, 150.0f, 0.0f); + } } static void eSSHKR_dw(eEC_Effect_c* effect, GAME* game) { - // TODO + u8 alpha = effect->effect_specific[0]; + + OPEN_DISP(game->graph); + + eEC_CLIP->auto_matrix_xlu_offset_proc(game, &effect->position, &effect->scale, &effect->offset); + + Evw_Anime_Set((GAME_PLAY*)game, &ef_siawase01_00_evw_anime); + gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0, 50, 255, 255, 200, alpha); + gSPDisplayList(NEXT_POLY_XLU_DISP, ef_siawase01_00_modelT); + + CLOSE_DISP(game->graph); }