From 5f72a844de1ea0e9e196cac757e91cda156da51d Mon Sep 17 00:00:00 2001 From: Prakxo Date: Sun, 21 Apr 2024 18:01:39 +0200 Subject: [PATCH] link ef_buruburu --- config/rel_slices.yml | 4 ++++ src/ef_buruburu.c | 43 +++++++++++++++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/config/rel_slices.yml b/config/rel_slices.yml index 6c46fbaa..1ea1270a 100644 --- a/config/rel_slices.yml +++ b/config/rel_slices.yml @@ -998,6 +998,10 @@ ef_bubu.c: .text: [0x8060672C, 0x80606878] .rodata: [0x8064BD60, 0x8064BD68] .data: [0x806D1F20, 0x806D1F38] +ef_buruburu.c: + .text: [0x80606878, 0x80606A68] + .rodata: [0x8064BD68, 0x8064BD78] + .data: [0x806D1F38, 0x806D1F68] ef_coin.c: .text: [0x80608060, 0x806087EC] .rodata: [0x8064BE48, 0x8064BEA0] diff --git a/src/ef_buruburu.c b/src/ef_buruburu.c index cd798e04..7290a8a9 100644 --- a/src/ef_buruburu.c +++ b/src/ef_buruburu.c @@ -1,10 +1,17 @@ #include "ef_effect_control.h" +#include "m_common_data.h" + +extern u8 ef_buruburu01_0_int_i4[]; +extern u8 ef_buruburu01_1_int_i4[]; + +extern Gfx ef_buruburu01_00_modelT[]; static void eBR_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1); static void eBR_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg); static void eBR_mv(eEC_Effect_c* effect, GAME* game); static void eBR_dw(eEC_Effect_c* effect, GAME* game); + eEC_PROFILE_c iam_ef_buruburu = { // clang-format off &eBR_init, @@ -17,18 +24,46 @@ eEC_PROFILE_c iam_ef_buruburu = { // clang-format on }; +static f32 eBR_scale_x[] = { 0.015f, 0.016f }; +static f32 eBR_scale_z[] = { 0.01f, 0.011f }; + +static u8* eBR_tex_anime_table[] = { + ef_buruburu01_0_int_i4,ef_buruburu01_1_int_i4, +}; + static void eBR_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1) { - // TODO + xyz_t offs; + + offs.x = 0.0f; + offs.y = -10.0f; + offs.z = 0.0f; + eEC_CLIP->make_effect_proc(eEC_EFFECT_BURUBURU,pos,&offs,game,NULL,item_name,prio,0,0); } static void eBR_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg) { - // TODO + effect->scale.x = 0.01f; + effect->scale.y = 0.01f; + effect->scale.z = 0.01f; + effect->timer = 8; } + static void eBR_mv(eEC_Effect_c* effect, GAME* game) { - // TODO + eEC_CLIP->set_continious_env_proc(effect,8,8); + sAdo_OngenPos((u32) effect, 0x2D, &effect->position); } static void eBR_dw(eEC_Effect_c* effect, GAME* game) { - // TODO + s16 idx = (effect->timer >> 1) & 1; + + effect->scale.x = eBR_scale_x[idx]; + effect->scale.z = eBR_scale_z[idx]; + + OPEN_DISP(game->graph); + + eEC_CLIP->auto_matrix_xlu_offset_proc(game, &effect->position, &effect->scale, &effect->offset); + gSPSegment(NEXT_POLY_XLU_DISP,G_MWO_SEGMENT_8,eBR_tex_anime_table[idx]); + gSPDisplayList(NEXT_POLY_XLU_DISP,ef_buruburu01_00_modelT); + + CLOSE_DISP(game->graph); }