From 92c8f2bbf735f4bb0c43bde32cd7bc0b7bd5f5e4 Mon Sep 17 00:00:00 2001 From: itsgrimetime <990274+itsgrimetime@users.noreply.github.com> Date: Mon, 29 Dec 2025 17:43:00 -0800 Subject: [PATCH 1/2] ft: Match Popo (ftPp) and Kirby (ftKb) functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Popo/Ice Climbers: - ftPp_SpecialS_80126EBC - Forward declarations for ftPp_1211 and ftPp_Init Kirby: - ftKb_Init_80130244 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/melee/ft/chara/ftKirby/ftKb_Init.c | 9 +++- src/melee/ft/chara/ftPopo/ftPp_1211.h | 1 + src/melee/ft/chara/ftPopo/ftPp_Init.h | 3 ++ src/melee/ft/chara/ftPopo/ftPp_SpecialS.c | 60 +++++++++++++++++------ 4 files changed, 57 insertions(+), 16 deletions(-) diff --git a/src/melee/ft/chara/ftKirby/ftKb_Init.c b/src/melee/ft/chara/ftKirby/ftKb_Init.c index be2a3a9ceb..0e37000b0e 100644 --- a/src/melee/ft/chara/ftKirby/ftKb_Init.c +++ b/src/melee/ft/chara/ftKirby/ftKb_Init.c @@ -2542,6 +2542,7 @@ MotionState ftKb_Init_UnkMotionStates0[] = { /* 0EE8B0 */ static void ftKb_Init_800EE8B0(void); /* 0EE8EC */ static void ftKb_Init_800EE8EC(void); /* 0EE904 */ static void ftKb_Init_800EE904(void); +/* 0F1CA0 */ static bool fn_800F1CA0(HSD_GObj* gobj); /* 105FEC */ static void fn_800F6AC8(HSD_GObj* gobj); /* 105FEC */ static void fn_80105FEC(void); /* 10C288 */ static void fn_8010C288(HSD_GObj* gobj); @@ -3779,8 +3780,12 @@ void ftKb_SpecialN_800F10A4(Fighter_GObj* gobj) /// #ftKb_SpecialN_800F10D4 -/// #ftKb_SpecialN_800F11AC - +void ftKb_SpecialN_800F11AC(Fighter_GObj* gobj) +{ + Fighter* fp = gobj->user_data; + ftKb_SpecialN_800EF69C(gobj, 0xF, ft_80459B88.hats[14]); + ftCo_UnloadDynamicBones(fp); +} /// #ftKb_SpecialN_800F11F0 void ftKb_SpecialN_800F12C8(Fighter_GObj* gobj) diff --git a/src/melee/ft/chara/ftPopo/ftPp_1211.h b/src/melee/ft/chara/ftPopo/ftPp_1211.h index 3b615a65d6..56e587cfac 100644 --- a/src/melee/ft/chara/ftPopo/ftPp_1211.h +++ b/src/melee/ft/chara/ftPopo/ftPp_1211.h @@ -22,6 +22,7 @@ /* 121B74 */ void ftPp_SpecialAirHiThrow_0_Phys(Fighter_GObj* gobj); /* 121C34 */ void ftPp_SpecialHiThrow_0_Coll(Fighter_GObj* gobj); /* 121C70 */ void ftPp_SpecialAirHiThrow_0_Coll(Fighter_GObj* gobj); +/* 121DA0 */ void ftPp_SpecialHi_80121DA0(Fighter_GObj* gobj); /* 121E10 */ void ftPp_SpecialHiStart_1_Anim(Fighter_GObj* gobj); /* 121E4C */ void ftPp_SpecialAirHiStart_1_Anim(Fighter_GObj* gobj); /* 121EB0 */ void ftPp_SpecialHiStart_1_IASA(Fighter_GObj* gobj); diff --git a/src/melee/ft/chara/ftPopo/ftPp_Init.h b/src/melee/ft/chara/ftPopo/ftPp_Init.h index d62a863d7f..1fecd6b711 100644 --- a/src/melee/ft/chara/ftPopo/ftPp_Init.h +++ b/src/melee/ft/chara/ftPopo/ftPp_Init.h @@ -27,4 +27,7 @@ /* 3CD7B4 */ extern Fighter_DemoStrings ftPp_Init_DemoMotionFilenames; /* 3CD7C4 */ extern Fighter_CostumeStrings ftPp_Init_CostumeStrings[]; +/* 4D9860 */ extern f32 ftPp_Init_804D9860; +/* 4D9880 */ extern f32 ftPp_Init_804D9880; + #endif diff --git a/src/melee/ft/chara/ftPopo/ftPp_SpecialS.c b/src/melee/ft/chara/ftPopo/ftPp_SpecialS.c index 32a815efef..ed9e4bd5e1 100644 --- a/src/melee/ft/chara/ftPopo/ftPp_SpecialS.c +++ b/src/melee/ft/chara/ftPopo/ftPp_SpecialS.c @@ -15,6 +15,7 @@ #include "ftPopo/forward.h" +#include "ftPopo/ftPp_1211.h" #include "ftPopo/ftPp_Init.h" #include "ftPopo/types.h" #include "pl/player.h" @@ -31,15 +32,18 @@ #include #include -/* 121AC8 */ static void ftPp_SpecialHiThrow_0_IASA(Fighter_GObj* gobj); -/* 121ACC */ static void ftPp_SpecialAirHiThrow_0_IASA(Fighter_GObj* gobj); -/* 121EB0 */ static void ftPp_SpecialHiStart_1_IASA(Fighter_GObj* gobj); -/* 121EB4 */ static void ftPp_SpecialAirHiStart_1_IASA(Fighter_GObj* gobj); -/* 1221B0 */ static void ftPp_SpecialAirHiThrow_1_IASA(Fighter_GObj* gobj); -/* 12248C */ static void ftPp_SpecialHiThrow2_IASA(Fighter_GObj* gobj); -/* 122490 */ static void ftPp_SpecialAirHiThrow2_IASA(Fighter_GObj* gobj); -/* 122B0C */ static void ftPp_SpecialLw_IASA(Fighter_GObj* gobj); -/* 122B10 */ static void ftPp_SpecialAirLw_IASA(Fighter_GObj* gobj); +/* 121AC8 */ void ftPp_SpecialHiThrow_0_IASA(Fighter_GObj* gobj); +/* 121ACC */ void ftPp_SpecialAirHiThrow_0_IASA(Fighter_GObj* gobj); +/* 121EB0 */ void ftPp_SpecialHiStart_1_IASA(Fighter_GObj* gobj); +/* 121EB4 */ void ftPp_SpecialAirHiStart_1_IASA(Fighter_GObj* gobj); +/* 1221B0 */ void ftPp_SpecialAirHiThrow_1_IASA(Fighter_GObj* gobj); +/* 12248C */ void ftPp_SpecialHiThrow2_IASA(Fighter_GObj* gobj); +/* 122490 */ void ftPp_SpecialAirHiThrow2_IASA(Fighter_GObj* gobj); +/* 122B0C */ void ftPp_SpecialLw_IASA(Fighter_GObj* gobj); +/* 122B10 */ void ftPp_SpecialAirLw_IASA(Fighter_GObj* gobj); + +/* 1218AC */ void ftPp_SpecialHi_801218AC(Fighter_GObj* gobj); +/* 1218F8 */ void ftPp_SpecialHi_801218F8(Fighter_GObj* gobj); static void setRefGObjFlagAndClear(Fighter* fp) { @@ -790,8 +794,26 @@ void ftPp_SpecialS_80121164(Fighter_GObj* gobj) } } -/// #ftPp_SpecialHi_Enter +void ftPp_SpecialHi_Enter(Fighter_GObj* gobj) +{ + Fighter* fp = GET_FIGHTER(gobj); + ftIceClimberAttributes* da = fp->dat_attrs; + + fp->gr_vel /= *(float*)((u8*)da + 0x84); + ftPp_SpecialHi_801218AC(gobj); + + fp = GET_FIGHTER(gobj); + fp->cmd_vars[2] = 0; + fp->cmd_vars[1] = 0; + fp->cmd_vars[0] = 0; + fp = GET_FIGHTER(gobj); + fp->mv.pp.unk_80123954.x0 = 1; + fp->fv.pp.x223C = 0; + fp->fv.pp.x2240.z = 0.0f; + fp->fv.pp.x2240.y = 0.0f; + fp->fv.pp.x2240.x = 0.0f; +} /// #ftPp_SpecialAirHi_Enter /// #ftPp_SpecialHiStart_0_Anim @@ -820,9 +842,17 @@ void ftPp_SpecialHi_8012184C(Fighter_GObj* gobj) Fighter_ChangeMotionState(gobj, 0x15B, 0x0C4C508AU, fp->cur_anim_frame, 0, 1, NULL); } -/// #ftPp_SpecialHi_801218AC +void ftPp_SpecialHi_801218AC(Fighter_GObj* gobj) +{ + Fighter_ChangeMotionState(gobj, 0x15B, Ft_MF_None, 0.0f, 1.0f, 0.0f, NULL); + ftAnim_8006EBA4(gobj); +} -/// #ftPp_SpecialHi_801218F8 +void ftPp_SpecialHi_801218F8(Fighter_GObj* gobj) +{ + Fighter_ChangeMotionState(gobj, 0x160, Ft_MF_None, 0.0f, 1.0f, 0.0f, NULL); + ftAnim_8006EBA4(gobj); +} /// #ftPp_SpecialHiThrow_0_Anim @@ -844,8 +874,10 @@ void ftPp_SpecialAirHiThrow_0_IASA(Fighter_GObj* gobj) {} /// #ftPp_SpecialHi_80121D40 -/// #ftPp_SpecialHi_80121DA0 - +void ftPp_SpecialHi_80121DA0(Fighter_GObj* gobj) +{ + Fighter_ChangeMotionState(gobj, 0x15C, 0, 0, 1.0f, 0.0f, NULL); +} /// #ftPp_SpecialHi_80121DD8 /// #ftPp_SpecialHiStart_1_Anim From c9f2655c976fb16954bc2c20a3b8b3a3e0eefedd Mon Sep 17 00:00:00 2001 From: itsgrimetime <990274+itsgrimetime@users.noreply.github.com> Date: Sat, 3 Jan 2026 12:02:12 -0800 Subject: [PATCH 2/2] ft: Add x84 member to ftIceClimberAttributes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Address PR review feedback by adding a float x84 member to the ftIceClimberAttributes struct instead of using pointer arithmetic. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- src/melee/ft/chara/ftPopo/ftPp_SpecialS.c | 2 +- src/melee/ft/chara/ftPopo/types.h | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/melee/ft/chara/ftPopo/ftPp_SpecialS.c b/src/melee/ft/chara/ftPopo/ftPp_SpecialS.c index ed9e4bd5e1..27a6a1e6a2 100644 --- a/src/melee/ft/chara/ftPopo/ftPp_SpecialS.c +++ b/src/melee/ft/chara/ftPopo/ftPp_SpecialS.c @@ -799,7 +799,7 @@ void ftPp_SpecialHi_Enter(Fighter_GObj* gobj) Fighter* fp = GET_FIGHTER(gobj); ftIceClimberAttributes* da = fp->dat_attrs; - fp->gr_vel /= *(float*)((u8*)da + 0x84); + fp->gr_vel /= da->x84; ftPp_SpecialHi_801218AC(gobj); diff --git a/src/melee/ft/chara/ftPopo/types.h b/src/melee/ft/chara/ftPopo/types.h index 919ed4d81e..31ad8da610 100644 --- a/src/melee/ft/chara/ftPopo/types.h +++ b/src/melee/ft/chara/ftPopo/types.h @@ -49,7 +49,9 @@ typedef struct ftIceClimberAttributes { int x68; float x6C; float x70; - u8 _74[0x94 - 0x74]; + u8 _74[0x84 - 0x74]; + float x84; + u8 _88[0x94 - 0x88]; float x94; float x98; u8 _9C[0xB0 - 0x9C];