SSBM Decomp
Loading...
Searching...
No Matches
ftlib.c File Reference
#include "ftlib.h"
#include <melee/it/forward.h>
#include "fighter.h"
#include "forward.h"
#include "ft_081B.h"
#include "ft_0877.h"
#include "ft_0D4D.h"
#include "ftanim.h"
#include "ftchangeparam.h"
#include "ftcommon.h"
#include "ftdata.h"
#include "ftmetal.h"
#include "ftparts.h"
#include "kinds/ftCommon/forward.h"
#include "kinds/ftGameWatch/ftgamewatch.h"
#include "kinds/ftKirby/ftkirby.h"
#include <melee/cm/camera.h>
#include <melee/cm/types.h>
#include <melee/ef/efasync.h>
#include <melee/gm/gm_unsplit.h>
#include <melee/it/it_26B1.h>
#include <melee/lb/lb_00B0.h>
#include <melee/lb/lb_013B.h>
#include <melee/mn/types.h>
#include <melee/pl/player.h>
#include <melee/pl/plbonuslib.h>
#include <sysdolphin/baselib/cobj.h>
#include <sysdolphin/baselib/debug.h>
#include <sysdolphin/baselib/gobj.h>
#include <sysdolphin/baselib/random.h>
#include <sysdolphin/baselib/rumble.h>

Functions

s32 ftLib_CountFighters (void)
bool ftLib_IsMasterHandPresent (void)
bool ftLib_IsCrazyHandPresent (void)
HSD_GObj * ftLib_FindLowestPercentOpponent (HSD_GObj *gobj)
HSD_GObj * ftLib_FindNearestOpponent (Vec3 *pos, HSD_GObj *gobj)
 Closest opponent to pos (squared x/y distance), skipping teammates.
Fighter_GObj * ftLib_FindNearestOpponentInDir (Vec3 *v, Fighter_GObj *gobj, float facing_dir)
 Like ftLib_FindNearestOpponent, but only opponents on the facing_dir side of v.
static s32 sgn (float x)
float ftLib_GetOpponentsDir (Vec3 *v, HSD_GObj *gobj)
float ftLib_GetFacingDir (HSD_GObj *gobj)
s32 ftLib_GetGroundAir (HSD_GObj *gobj)
void ftLib_GetLStick (HSD_GObj *gobj, float *x, float *y)
HSD_JObj * ftLib_GetHipJObj (HSD_GObj *gobj)
HSD_JObj * ftLib_GetPartJObj (HSD_GObj *gobj, Fighter_Part part)
void ftLib_GetPos (Fighter_GObj *gobj, Vec3 *pos)
void ftLib_SetPos (HSD_GObj *gobj, Vec3 *pos)
void ftLib_GetPrevPos (HSD_GObj *gobj, Vec3 *pos)
void ftLib_SetScale (HSD_GObj *gobj, float val)
void ftLib_GetCameraBonePos (HSD_GObj *gobj, Vec3 *v)
void ftLib_ReleaseItem (HSD_GObj *gobj, HSD_GObj *other)
void ftLib_ClearHeldSpecialItem (HSD_GObj *gobj)
HSD_GObj * ftLib_GetItem (HSD_GObj *gobj)
bool ftLib_IsHoldingItem (HSD_GObj *gobj, HSD_GObj *arg1)
HSD_GObj * ftLib_GetHeldSpecialItem (HSD_GObj *gobj)
bool ftLib_IsInputDisabled (HSD_GObj *gobj)
void ftLib_DisableInput (HSD_GObj *gobj)
void ftLib_DisableAllInput (void)
void ftLib_EnableInput (HSD_GObj *gobj)
void ftLib_EnableAllInput (void)
bool ftLib_IsItemVisible (HSD_GObj *gobj, HSD_GObj *arg1)
bool ftLib_IsFighter (HSD_GObj *arg)
 Check if the HSD_GObj* class is a fighter.
CollData * ftLib_GetCollData (HSD_GObj *gobj)
static void vector_add (Vec3 *dst, Vec3 *src, float x, float y, float z)
void ftLib_GetECBCenter (HSD_GObj *gobj, Vec3 *v)
float ftLib_GetModelScale (HSD_GObj *gobj)
float ftLib_800869F8 (HSD_GObj *gobj)
float ftLib_GetScale (HSD_GObj *gobj)
bool ftLib_IsShielding (HSD_GObj *gobj)
void ftLib_80086A4C (HSD_GObj *gobj, float val)
bool ftLib_GetScreenPos (HSD_GObj *gobj, S32Vec2 *x)
bool ftLib_UpdateScreenVisibility (HSD_GObj *gobj)
bool ftLib_IsOffscreen (HSD_GObj *gobj)
CmSubject * ftLib_GetCameraSubject (HSD_GObj *gobj)
float ftLib_80086B80 (HSD_GObj *gobj)
void ftLib_GetCameraSubjectBonePos (HSD_GObj *gobj, Vec3 *v)
bool ftLib_IsCameraSubjectInBounds (HSD_GObj *gobj)
u8 ftLib_GetPlayerIndex (HSD_GObj *gobj)
void ftLib_GetPosDelta (HSD_GObj *gobj, Vec3 *v)
enum_t ftLib_GetMotionId (HSD_GObj *gobj)
static void helper (HSD_GObj *gobj, s32 arg1, s32 arg2, s32 val)
void ftLib_StartRumble (HSD_GObj *gobj, s32 arg1, s32 arg2)
void ftLib_StartRumbleAll (s32 arg0, s32 arg1)
void ftLib_StartItemRumble (HSD_GObj *arg0, s32 arg1, s32 arg2)
void ftLib_StartItemRumbleAll (s32 arg0, s32 arg1)
void ftLib_StopItemRumble (HSD_GObj *gobj)
s32 ftLib_GetTeam (HSD_GObj *gobj)
 Get fighter's team ID.
bool ftLib_IsInHitstun (HSD_GObj *gobj)
bool ftLib_CanBeMagnified (HSD_GObj *gobj)
bool ftLib_80086F4C (HSD_GObj *gobj)
float ftLib_GetNameTagHeight (HSD_GObj *gobj)
bool ftLib_IsSwordSwing (HSD_GObj *gobj)
bool ftLib_IsSamePlayer (HSD_GObj *gobj0, HSD_GObj *gobj1)
bool ftLib_IsSleeping (HSD_GObj *gobj)
void ftLib_IncFighterRefCount (s32 arg0)
void ftLib_DecFighterRefCount (s32 arg0)
bool ftLib_GetShakeOffset (HSD_GObj *gobj, Vec3 *v)
bool ftLib_GetSubColor (HSD_GObj *gobj, GXColor *val)
void ftLib_SetPercent (HSD_GObj *gobj, s32 x)
s32 ftLib_GetPercent (HSD_GObj *gobj)
void ftLib_80087140 (HSD_GObj *gobj)
void ftLib_ApplyMetalBox (Fighter_GObj *gobj, Item_GObj *item_gobj)
bool ftLib_80087284 (HSD_GObj *gobj)
 Unbounded: true for every motion state from ftCo_MS_LightThrowF4 on.
FighterKind ftLib_GetKind (HSD_GObj *gobj)
LbShadow * ftLib_GetShadow (HSD_GObj *gobj)
bool ftLib_CastsShadow (HSD_GObj *gobj)
s32 ftLib_GetLastAttackerSlot (HSD_GObj *gobj)
s32 ftLib_IsLastAttackerSubFighter (HSD_GObj *gobj)
s32 ftLib_IsSleeping_8008731C (HSD_GObj *gobj)
bool ftLib_IsDead (HSD_GObj *gobj)
bool ftLib_IsDeadUp (HSD_GObj *gobj)
bool ftLib_IsDeadUpStar (HSD_GObj *gobj)
bool ftLib_IsDeadUpFall (HSD_GObj *gobj)
bool ftLib_IsRebirth (HSD_GObj *gobj)
bool ftLib_IsEntry (HSD_GObj *gobj)
HSD_GObj * ftLib_FindBySpawnNum (u32 i)
float ftLib_GetCrowdKnockback (HSD_GObj *gobj)
 Knockback reweighted by the crowd config's angle multiplier (un_803222EC); only the crowd sound code reads it.
u32 ftLib_GetSpawnNum (HSD_GObj *gobj)
s32 ftLib_8008746C (HSD_GObj *gobj)
s32 ftLib_IsSubFighter (HSD_GObj *gobj)
void ftLib_800874CC (HSD_GObj *gobj, ItemKind arg1[], s32 arg2)
void ftLib_LoadFighterCostume (s8 ft_kind, u8 arg1)
 void ftLib_LoadFighterCostume(FighterKind ft_kind, u8 arg1)
void ftLib_LoadFighterAllCostumes (s8 ft_kind)
 void ftLib_LoadFighterAllCostumes(FighterKind ft_kind)
void ftLib_LoadKirbyHats (u8 arg0)
 /* 087574 *‍/ void ftLib_LoadFighterAllCostumes(FighterKind);
void ftLib_IsFramesRemaining (HSD_GObj *gobj)
bool ftLib_IsChargingSmash (HSD_GObj *gobj)
s32 ftLib_GetLastHitSourceType (HSD_GObj *gobj)
s32 ftLib_GetLastHitSourceKind (HSD_GObj *gobj)
void ftLib_GetGameWatchColor (HSD_GObj *gobj, void *dst)
void ftLib_GetGameWatchOutlineColor (HSD_GObj *gobj, void *dst)
float ftLib_GetGroundSlopeAngle (HSD_GObj *gobj)
bool ftLib_IsBeingNudged (HSD_GObj *gobj)

Function Documentation

◆ ftLib_CountFighters()

s32 ftLib_CountFighters ( void )

◆ ftLib_IsMasterHandPresent()

bool ftLib_IsMasterHandPresent ( void )

◆ ftLib_IsCrazyHandPresent()

bool ftLib_IsCrazyHandPresent ( void )

◆ ftLib_FindLowestPercentOpponent()

HSD_GObj * ftLib_FindLowestPercentOpponent ( HSD_GObj * gobj)
Todo
Figure out how these are really declared

◆ ftLib_FindNearestOpponent()

HSD_GObj * ftLib_FindNearestOpponent ( Vec3 * pos,
HSD_GObj * gobj )

Closest opponent to pos (squared x/y distance), skipping teammates.

◆ ftLib_FindNearestOpponentInDir()

Fighter_GObj * ftLib_FindNearestOpponentInDir ( Vec3 * v,
Fighter_GObj * gobj,
float facing_dir )

Like ftLib_FindNearestOpponent, but only opponents on the facing_dir side of v.

◆ sgn()

s32 sgn ( float x)
inlinestatic

◆ ftLib_GetOpponentsDir()

float ftLib_GetOpponentsDir ( Vec3 * v,
HSD_GObj * gobj )

◆ ftLib_GetFacingDir()

float ftLib_GetFacingDir ( HSD_GObj * gobj)

◆ ftLib_GetGroundAir()

s32 ftLib_GetGroundAir ( HSD_GObj * gobj)

◆ ftLib_GetLStick()

void ftLib_GetLStick ( HSD_GObj * gobj,
float * x,
float * y )

◆ ftLib_GetHipJObj()

HSD_JObj * ftLib_GetHipJObj ( HSD_GObj * gobj)

◆ ftLib_GetPartJObj()

HSD_JObj * ftLib_GetPartJObj ( HSD_GObj * gobj,
Fighter_Part part )

◆ ftLib_GetPos()

void ftLib_GetPos ( Fighter_GObj * gobj,
Vec3 * pos )

◆ ftLib_SetPos()

void ftLib_SetPos ( HSD_GObj * gobj,
Vec3 * pos )

◆ ftLib_GetPrevPos()

void ftLib_GetPrevPos ( HSD_GObj * gobj,
Vec3 * pos )

◆ ftLib_SetScale()

void ftLib_SetScale ( HSD_GObj * gobj,
float val )

◆ ftLib_GetCameraBonePos()

void ftLib_GetCameraBonePos ( HSD_GObj * gobj,
Vec3 * v )

◆ ftLib_ReleaseItem()

void ftLib_ReleaseItem ( HSD_GObj * gobj,
HSD_GObj * other )

◆ ftLib_ClearHeldSpecialItem()

void ftLib_ClearHeldSpecialItem ( HSD_GObj * gobj)

◆ ftLib_GetItem()

HSD_GObj * ftLib_GetItem ( HSD_GObj * gobj)

◆ ftLib_IsHoldingItem()

bool ftLib_IsHoldingItem ( HSD_GObj * gobj,
HSD_GObj * arg1 )

◆ ftLib_GetHeldSpecialItem()

HSD_GObj * ftLib_GetHeldSpecialItem ( HSD_GObj * gobj)

◆ ftLib_IsInputDisabled()

bool ftLib_IsInputDisabled ( HSD_GObj * gobj)

◆ ftLib_DisableInput()

void ftLib_DisableInput ( HSD_GObj * gobj)

◆ ftLib_DisableAllInput()

void ftLib_DisableAllInput ( void )

◆ ftLib_EnableInput()

void ftLib_EnableInput ( HSD_GObj * gobj)

◆ ftLib_EnableAllInput()

void ftLib_EnableAllInput ( void )

◆ ftLib_IsItemVisible()

bool ftLib_IsItemVisible ( HSD_GObj * gobj,
HSD_GObj * arg1 )

◆ ftLib_IsFighter()

bool ftLib_IsFighter ( HSD_GObj * gobj)

Check if the HSD_GObj* class is a fighter.

Returns
true if gobj is a Fighter, otherwise false.

◆ ftLib_GetCollData()

CollData * ftLib_GetCollData ( HSD_GObj * gobj)

◆ vector_add()

void vector_add ( Vec3 * dst,
Vec3 * src,
float x,
float y,
float z )
inlinestatic

◆ ftLib_GetECBCenter()

void ftLib_GetECBCenter ( HSD_GObj * gobj,
Vec3 * v )

◆ ftLib_GetModelScale()

float ftLib_GetModelScale ( HSD_GObj * gobj)

◆ ftLib_800869F8()

float ftLib_800869F8 ( HSD_GObj * gobj)

◆ ftLib_GetScale()

float ftLib_GetScale ( HSD_GObj * gobj)

◆ ftLib_IsShielding()

bool ftLib_IsShielding ( HSD_GObj * gobj)
Note
Only ftCo_MS_GuardOn, ftCo_MS_Guard and ftCo_MS_GuardSetOff: not GuardOff, GuardReflect or Yoshi's ftYs_MS_GuardHold.

◆ ftLib_80086A4C()

void ftLib_80086A4C ( HSD_GObj * gobj,
float val )

◆ ftLib_GetScreenPos()

bool ftLib_GetScreenPos ( HSD_GObj * gobj,
S32Vec2 * x )

◆ ftLib_UpdateScreenVisibility()

bool ftLib_UpdateScreenVisibility ( HSD_GObj * gobj)

◆ ftLib_IsOffscreen()

bool ftLib_IsOffscreen ( HSD_GObj * gobj)

◆ ftLib_GetCameraSubject()

CmSubject * ftLib_GetCameraSubject ( HSD_GObj * gobj)

◆ ftLib_80086B80()

float ftLib_80086B80 ( HSD_GObj * gobj)

◆ ftLib_GetCameraSubjectBonePos()

void ftLib_GetCameraSubjectBonePos ( HSD_GObj * gobj,
Vec3 * v )

◆ ftLib_IsCameraSubjectInBounds()

bool ftLib_IsCameraSubjectInBounds ( HSD_GObj * gobj)

◆ ftLib_GetPlayerIndex()

u8 ftLib_GetPlayerIndex ( HSD_GObj * gobj)

◆ ftLib_GetPosDelta()

void ftLib_GetPosDelta ( HSD_GObj * gobj,
Vec3 * v )

◆ ftLib_GetMotionId()

enum_t ftLib_GetMotionId ( HSD_GObj * gobj)
Returns
A fighter action state ID.

◆ helper()

void helper ( HSD_GObj * gobj,
s32 arg1,
s32 arg2,
s32 val )
inlinestatic

◆ ftLib_StartRumble()

void ftLib_StartRumble ( HSD_GObj * gobj,
s32 arg1,
s32 arg2 )

◆ ftLib_StartRumbleAll()

void ftLib_StartRumbleAll ( s32 arg0,
s32 arg1 )

◆ ftLib_StartItemRumble()

void ftLib_StartItemRumble ( HSD_GObj * arg0,
s32 arg1,
s32 arg2 )

◆ ftLib_StartItemRumbleAll()

void ftLib_StartItemRumbleAll ( s32 arg0,
s32 arg1 )

◆ ftLib_StopItemRumble()

void ftLib_StopItemRumble ( HSD_GObj * gobj)

◆ ftLib_GetTeam()

s32 ftLib_GetTeam ( HSD_GObj * gobj)

Get fighter's team ID.

◆ ftLib_IsInHitstun()

bool ftLib_IsInHitstun ( HSD_GObj * gobj)

◆ ftLib_CanBeMagnified()

bool ftLib_CanBeMagnified ( HSD_GObj * gobj)

◆ ftLib_80086F4C()

bool ftLib_80086F4C ( HSD_GObj * gobj)

◆ ftLib_GetNameTagHeight()

float ftLib_GetNameTagHeight ( HSD_GObj * gobj)

◆ ftLib_IsSwordSwing()

bool ftLib_IsSwordSwing ( HSD_GObj * gobj)

◆ ftLib_IsSamePlayer()

bool ftLib_IsSamePlayer ( HSD_GObj * gobj0,
HSD_GObj * gobj1 )

◆ ftLib_IsSleeping()

bool ftLib_IsSleeping ( HSD_GObj * gobj)

◆ ftLib_IncFighterRefCount()

void ftLib_IncFighterRefCount ( s32 arg0)

◆ ftLib_DecFighterRefCount()

void ftLib_DecFighterRefCount ( s32 arg0)

◆ ftLib_GetShakeOffset()

bool ftLib_GetShakeOffset ( HSD_GObj * gobj,
Vec3 * v )

◆ ftLib_GetSubColor()

bool ftLib_GetSubColor ( HSD_GObj * gobj,
GXColor * val )

◆ ftLib_SetPercent()

void ftLib_SetPercent ( HSD_GObj * gobj,
s32 x )

◆ ftLib_GetPercent()

s32 ftLib_GetPercent ( HSD_GObj * gobj)

◆ ftLib_80087140()

void ftLib_80087140 ( HSD_GObj * gobj)

◆ ftLib_ApplyMetalBox()

void ftLib_ApplyMetalBox ( Fighter_GObj * gobj,
Item_GObj * item_gobj )

◆ ftLib_80087284()

bool ftLib_80087284 ( HSD_GObj * gobj)

Unbounded: true for every motion state from ftCo_MS_LightThrowF4 on.

The flipper's thrown code uses it to pick its smash-throw duration.

◆ ftLib_GetKind()

FighterKind ftLib_GetKind ( HSD_GObj * gobj)

◆ ftLib_GetShadow()

LbShadow * ftLib_GetShadow ( HSD_GObj * gobj)

◆ ftLib_CastsShadow()

bool ftLib_CastsShadow ( HSD_GObj * gobj)

◆ ftLib_GetLastAttackerSlot()

s32 ftLib_GetLastAttackerSlot ( HSD_GObj * gobj)

◆ ftLib_IsLastAttackerSubFighter()

s32 ftLib_IsLastAttackerSubFighter ( HSD_GObj * gobj)

◆ ftLib_IsSleeping_8008731C()

s32 ftLib_IsSleeping_8008731C ( HSD_GObj * gobj)

◆ ftLib_IsDead()

bool ftLib_IsDead ( HSD_GObj * gobj)

◆ ftLib_IsDeadUp()

bool ftLib_IsDeadUp ( HSD_GObj * gobj)

◆ ftLib_IsDeadUpStar()

bool ftLib_IsDeadUpStar ( HSD_GObj * gobj)

◆ ftLib_IsDeadUpFall()

bool ftLib_IsDeadUpFall ( HSD_GObj * gobj)

◆ ftLib_IsRebirth()

bool ftLib_IsRebirth ( HSD_GObj * gobj)

◆ ftLib_IsEntry()

bool ftLib_IsEntry ( HSD_GObj * gobj)

◆ ftLib_FindBySpawnNum()

HSD_GObj * ftLib_FindBySpawnNum ( u32 i)
Todo
Is i really u32?

◆ ftLib_GetCrowdKnockback()

float ftLib_GetCrowdKnockback ( HSD_GObj * gobj)

Knockback reweighted by the crowd config's angle multiplier (un_803222EC); only the crowd sound code reads it.

◆ ftLib_GetSpawnNum()

u32 ftLib_GetSpawnNum ( HSD_GObj * gobj)

◆ ftLib_8008746C()

s32 ftLib_8008746C ( HSD_GObj * gobj)

◆ ftLib_IsSubFighter()

s32 ftLib_IsSubFighter ( HSD_GObj * gobj)

◆ ftLib_800874CC()

void ftLib_800874CC ( HSD_GObj * gobj,
ItemKind arg1[],
s32 arg2 )

◆ ftLib_LoadFighterCostume()

void ftLib_LoadFighterCostume ( s8 ft_kind,
u8 arg1 )

void ftLib_LoadFighterCostume(FighterKind ft_kind, u8 arg1)

◆ ftLib_LoadFighterAllCostumes()

void ftLib_LoadFighterAllCostumes ( s8 ft_kind)

void ftLib_LoadFighterAllCostumes(FighterKind ft_kind)

/* 087508 *‍/ void ftLib_LoadFighterCostume(FighterKind, u8);

void ftLib_LoadFighterAllCostumes(FighterKind ft_kind)

◆ ftLib_LoadKirbyHats()

void ftLib_LoadKirbyHats ( u8 arg0)

/* 087574 *‍/ void ftLib_LoadFighterAllCostumes(FighterKind);

◆ ftLib_IsFramesRemaining()

void ftLib_IsFramesRemaining ( HSD_GObj * gobj)

◆ ftLib_IsChargingSmash()

bool ftLib_IsChargingSmash ( HSD_GObj * gobj)
Note
Only checks SmashState_Charging, so Ness's yo-yo smash (ftNs_AttackHi4_YoyoApplySmash) is not covered.

◆ ftLib_GetLastHitSourceType()

s32 ftLib_GetLastHitSourceType ( HSD_GObj * gobj)

◆ ftLib_GetLastHitSourceKind()

s32 ftLib_GetLastHitSourceKind ( HSD_GObj * gobj)

◆ ftLib_GetGameWatchColor()

void ftLib_GetGameWatchColor ( HSD_GObj * gobj,
void * dst )

◆ ftLib_GetGameWatchOutlineColor()

void ftLib_GetGameWatchOutlineColor ( HSD_GObj * gobj,
void * dst )

◆ ftLib_GetGroundSlopeAngle()

float ftLib_GetGroundSlopeAngle ( HSD_GObj * gobj)

◆ ftLib_IsBeingNudged()

bool ftLib_IsBeingNudged ( HSD_GObj * gobj)