From 9e41126580f6b4284683147dded4be6684702dd6 Mon Sep 17 00:00:00 2001 From: Norgesnerd <5824576+Norgesnerd@users.noreply.github.com> Date: Tue, 10 Jun 2025 23:24:17 +0200 Subject: [PATCH] Implement & link ef_muka --- configure.py | 2 +- src/effect/ef_muka.c | 43 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/configure.py b/configure.py index 44f0de09..d12217b8 100644 --- a/configure.py +++ b/configure.py @@ -1295,7 +1295,7 @@ config.libs = [ Object(Matching, "effect/ef_make_hem.c"), Object(NonMatching, "effect/ef_mizutama.c"), Object(NonMatching, "effect/ef_motiyuge.c"), - Object(NonMatching, "effect/ef_muka.c"), + Object(Matching, "effect/ef_muka.c"), Object(Matching, "effect/ef_naku.c"), Object(NonMatching, "effect/ef_namida.c"), Object(NonMatching, "effect/ef_neboke.c"), diff --git a/src/effect/ef_muka.c b/src/effect/ef_muka.c index ff8c1689..80fa131e 100644 --- a/src/effect/ef_muka.c +++ b/src/effect/ef_muka.c @@ -1,5 +1,9 @@ #include "ef_effect_control.h" +#include "m_common_data.h" + +extern Gfx ef_muka01_00_modelT[]; + static void eMK_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1); static void eMK_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg); static void eMK_mv(eEC_Effect_c* effect, GAME* game); @@ -18,17 +22,48 @@ eEC_PROFILE_c iam_ef_muka = { }; static void eMK_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1) { - // TODO + eEC_CLIP->make_effect_proc(eEC_EFFECT_MUKA, pos, NULL, game, &angle, item_name, prio, 0, 0); } static void eMK_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg) { - // TODO + s16 angle, angle_y; + + effect->scale.x = 0.0075f; + effect->scale.y = 0.0075f; + effect->scale.z = 0.0075f; + + angle_y = (s16)getCamera2AngleY((GAME_PLAY*)game); + angle = *(s16*)ct_arg; + if (DIFF_USHORT_ANGLE(angle, (s16)(angle_y + DEG2SHORT_ANGLE(180.0f))) > DEG2SHORT_ANGLE2(180.0f)) { + effect->offset.x = -10.0f; + } else { + effect->offset.x = 10.0f; + } + effect->offset.y = 9.0f; + effect->offset.z = 23.0f; + + effect->timer = 40; + + sAdo_OngenTrgStart(0x137, &effect->position); } static void eMK_mv(eEC_Effect_c* effect, GAME* game) { - // TODO + return; } static void eMK_dw(eEC_Effect_c* effect, GAME* game) { - // TODO + s16 timer = 40 - effect->timer; + u8 prim_g = (int)eEC_CLIP->calc_adjust_proc(timer, 0, 20, 255.0f, 50.0f); + u8 prim_a = (int)eEC_CLIP->calc_adjust_proc(timer, 20, 41, 255.0f, 0.0f); + u8 env_r = (int)eEC_CLIP->calc_adjust_proc(timer, 0, 20, 255.0f, 100.0f); + + OPEN_DISP(game->graph); + + eEC_CLIP->auto_matrix_xlu_offset_proc(game, &effect->position, &effect->scale, &effect->offset); + + gDPSetPrimColor(NEXT_POLY_XLU_DISP, 0, 128, 255, prim_g, 50, prim_a); + gDPSetEnvColor(NEXT_POLY_XLU_DISP, env_r, 30, 30, 255); + gSPDisplayList(NEXT_POLY_XLU_DISP, ef_muka01_00_modelT); + + CLOSE_DISP(game->graph); }