From dfb855ef48d1e7022650719d0b76a22a718912b6 Mon Sep 17 00:00:00 2001 From: Norgesnerd <5824576+Norgesnerd@users.noreply.github.com> Date: Mon, 16 Jun 2025 14:52:42 +0200 Subject: [PATCH] Implement & link ef_slip --- configure.py | 2 +- src/effect/ef_slip.c | 96 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 93 insertions(+), 5 deletions(-) diff --git a/configure.py b/configure.py index be80a3a5..f0ae10b4 100644 --- a/configure.py +++ b/configure.py @@ -1325,7 +1325,7 @@ config.libs = [ Object(Matching, "effect/ef_siawase_hikari.c"), Object(Matching, "effect/ef_sibuki.c"), Object(Matching, "effect/ef_situren.c"), - Object(NonMatching, "effect/ef_slip.c"), + Object(Matching, "effect/ef_slip.c"), Object(NonMatching, "effect/ef_slip_footprint.c"), Object(NonMatching, "effect/ef_soba_yuge.c"), Object(NonMatching, "effect/ef_steam.c"), diff --git a/src/effect/ef_slip.c b/src/effect/ef_slip.c index b0a73062..55e66fa5 100644 --- a/src/effect/ef_slip.c +++ b/src/effect/ef_slip.c @@ -1,5 +1,7 @@ #include "ef_effect_control.h" +#include "m_common_data.h" + static void eSlip_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1); static void eSlip_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg); static void eSlip_mv(eEC_Effect_c* effect, GAME* game); @@ -18,17 +20,103 @@ eEC_PROFILE_c iam_ef_slip = { }; static void eSlip_init(xyz_t pos, int prio, s16 angle, GAME* game, u16 item_name, s16 arg0, s16 arg1) { - // TODO + s16 weather; + + if (eEC_CLIP != NULL) { + weather = mEnv_NowWeather(); + pos.y += 2.0f; + + switch (Common_Get(time).season) { + case mTM_SEASON_WINTER: { + switch (arg0) { + case mCoBG_ATTRIBUTE_GRASS0: + case mCoBG_ATTRIBUTE_GRASS1: + case mCoBG_ATTRIBUTE_GRASS2: + if (((arg1 & 3) == 0) && (arg1 < 14)) { + pos.x -= sin_s(angle) * 10.0f; + pos.z -= cos_s(angle) * 10.0f; + pos.y += 5.0f; + eEC_CLIP->effect_make_proc(eEC_EFFECT_YUKIHANE, pos, prio, angle, game, item_name, arg0, 0); + } + break; + + case mCoBG_ATTRIBUTE_BUSH: + break; + + case mCoBG_ATTRIBUTE_SAND: + if (((arg1 & 3) == 0) && (arg1 < 10)) { + pos.x -= sin_s(angle) * 13.0f; + pos.z -= cos_s(angle) * 13.0f; + pos.y += 6.0f; + eEC_CLIP->effect_make_proc(eEC_EFFECT_SANDSPLASH, pos, prio, angle, game, item_name, 2, 0); + } + break; + + default: + if ((weather == mEnv_WEATHER_RAIN) || (arg0 == mCoBG_ATTRIBUTE_WAVE)) { + if (((arg1 & 3) == 0) && (arg1 < 10)) { + pos.x -= sin_s(angle) * 13.0f; + pos.z -= cos_s(angle) * 13.0f; + pos.y += 6.0f; + eEC_CLIP->effect_make_proc(eEC_EFFECT_SIBUKI, pos, prio, angle, game, item_name, arg0, + 0); + } + } else if (((arg1 & 3) == 0) && (arg1 < 10)) { + pos.y += 7.0f; + eEC_CLIP->effect_make_proc(eEC_EFFECT_DUST, pos, prio, angle, game, item_name, arg0, 8); + } + break; + } + break; + } + + default: { + switch (arg0) { + case mCoBG_ATTRIBUTE_BUSH: + break; + + case mCoBG_ATTRIBUTE_SAND: + if (((arg1 & 3) == 0) && (arg1 < 10)) { + pos.x -= sin_s(angle) * 13.0f; + pos.z -= cos_s(angle) * 13.0f; + pos.y += 6.0f; + eEC_CLIP->effect_make_proc(eEC_EFFECT_SANDSPLASH, pos, prio, angle, game, item_name, 2, 0); + } + break; + + default: + if ((weather == mEnv_WEATHER_RAIN) || (arg0 == mCoBG_ATTRIBUTE_WAVE)) { + if (((arg1 & 3) == 0) && (arg1 < 10)) { + pos.x -= sin_s(angle) * 13.0f; + pos.z -= cos_s(angle) * 13.0f; + pos.y += 6.0f; + eEC_CLIP->effect_make_proc(eEC_EFFECT_SIBUKI, pos, prio, angle, game, item_name, arg0, + 0); + } + break; + } + if (((arg1 & 3) == 0) && (arg1 < 10)) { + pos.y += 7.0f; + eEC_CLIP->effect_make_proc(eEC_EFFECT_DUST, pos, prio, angle, game, item_name, arg0, 8); + } + break; + } + break; + } + } + } + + eEC_CLIP->make_effect_proc(eEC_EFFECT_SLIP, pos, NULL, game, NULL, item_name, prio, 0, 0); } static void eSlip_ct(eEC_Effect_c* effect, GAME* game, void* ct_arg) { - // TODO + effect->timer = 0; } static void eSlip_mv(eEC_Effect_c* effect, GAME* game) { - // TODO + return; } static void eSlip_dw(eEC_Effect_c* effect, GAME* game) { - // TODO + return; }