SSBM Decomp
Loading...
Searching...
No Matches
inlines.h
Go to the documentation of this file.
1#ifndef MELEE_FT_INLINES_H
2#define MELEE_FT_INLINES_H
3
4#include <platform.h>
5
6#include "ft/forward.h"
7
8#include "ft/ftanim.h"
9#include "ft/types.h"
10#include "it/it_26B1.h"
11
12#include <common_structs.h>
13#include <dolphin/mtx.h>
14#include <baselib/archive.h>
15#include <baselib/controller.h>
16#include <baselib/dobj.h>
17#include <baselib/gobj.h>
18#include <baselib/gobjgxlink.h>
20#include <baselib/jobj.h>
21#include <baselib/lobj.h>
22#include <baselib/random.h>
23
24#define PUSH_ATTRS(fp, attributeName) \
25 do { \
26 void* backup = (fp)->dat_attrs_backup; \
27 attributeName* src = (attributeName*) (fp)->ft_data->ext_attr; \
28 void** da = &(fp)->dat_attrs; \
29 *(attributeName*) (fp)->dat_attrs_backup = *src; \
30 *da = backup; \
31 } while (0)
32
34#define COPY_ATTRS(gobj, attributeName) \
35 Fighter* fp = GET_FIGHTER(gobj); \
36 attributeName* sA2 = (attributeName*) fp->dat_attrs; \
37 attributeName* ext_attr = (attributeName*) fp->ft_data->ext_attr; \
38 *sA2 = *ext_attr;
39
40#ifdef M2CTX
41#define GET_FIGHTER(gobj) ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj))
42#else
43#define GET_FIGHTER(gobj) ((Fighter*) HSD_GObjGetUserData(gobj))
44#endif
45
47static inline Fighter* getFighter(Fighter_GObj* gobj)
48{
49 return gobj->user_data;
50}
51
53static inline Fighter* getFighterPlus(Fighter_GObj* gobj)
54{
55 Fighter* fp = gobj->user_data;
56 return fp;
57}
58
59static inline void* getFtSpecialAttrs(Fighter* fp)
60{
61 void* fighter_attr = fp->dat_attrs;
62 return fighter_attr;
63}
64
65static inline void* getFtSpecialAttrsD(Fighter* fp) // Direct
66{
67 return fp->dat_attrs;
68}
69
70static inline s32 ftGetKind(Fighter* fp)
71{
72 return fp->kind;
73}
74
75static inline s32 ftGetAction(Fighter* fp)
76{
77 return fp->motion_id;
78}
79
80static inline void* getFtSpecialAttrs2CC(Fighter* fp)
81{
82 void* fighter_attr = fp->x2CC;
83 return fighter_attr;
84}
85
86static inline ftCo_DatAttrs* getFtAttrs(Fighter* fp)
87{
88 return &fp->co_attrs;
89}
90
91static inline CollData* getFtColl(Fighter* fp)
92{
93 return &fp->coll_data;
94}
95
96static inline Fighter_GObj* getFtVictim(Fighter* fp) {
97 return fp->victim_gobj;
98}
99
100static inline bool ftGetGroundAir(Fighter* fp)
101{
102 return fp->ground_or_air;
103}
104
105static inline float stickGetDir(float x1, float x2)
106{
107 if (x1 < x2) {
108 return -x1;
109 } else {
110 return x1;
111 }
112}
113
114static inline void getAccelAndTarget(Fighter* fp, float* accel,
115 float* target_vel)
116{
117 ftCo_DatAttrs* co_attrs = &fp->co_attrs;
118 *accel = fp->input.lstick.x * fp->co_attrs.dash_run_acceleration_a;
119 *accel += fp->input.lstick.x > 0 ? +co_attrs->dash_run_acceleration_b
120 : -co_attrs->dash_run_acceleration_b;
121 *target_vel = fp->input.lstick.x * co_attrs->dash_run_terminal_velocity;
122}
123
125static inline void Fighter_OnItemPickup(Fighter_GObj* gobj, bool catchItemFlag,
126 bool bool2, bool bool3)
127{
128 Fighter* fp = GET_FIGHTER(gobj);
129 if (!it_8026B2B4(fp->item_gobj)) {
130 switch (it_8026B320(fp->item_gobj)) {
131 case 1:
132 ftAnim_80070FB4(gobj, bool2, 1);
133 break;
134 case 2:
135 ftAnim_80070FB4(gobj, bool2, 0);
136 break;
137 case 3:
138 ftAnim_80070FB4(gobj, bool2, 2);
139 break;
140 case 4:
141 ftAnim_80070FB4(gobj, bool2, 3);
142 break;
143 }
144 if (catchItemFlag) {
145 ftAnim_80070C48(gobj, bool3);
146 }
147 }
148}
149
150static inline void Fighter_OnItemInvisible(Fighter_GObj* gobj, bool flag)
151{
152 Fighter* fp = GET_FIGHTER(gobj);
153 if (!it_8026B2B4(fp->item_gobj)) {
154 ftAnim_80070CC4(gobj, flag);
155 }
156}
157
158static inline void Fighter_OnItemVisible(Fighter_GObj* gobj, bool flag)
159{
160 Fighter* fp = GET_FIGHTER(gobj);
161 if (!it_8026B2B4(fp->item_gobj)) {
162 ftAnim_80070C48(gobj, flag);
163 }
164}
165
166static inline void Fighter_OnItemDrop(Fighter_GObj* gobj, bool dropItemFlag,
167 bool bool2, bool bool3)
168{
169 ftAnim_80070FB4(gobj, bool2, -1);
170 if (dropItemFlag) {
171 ftAnim_80070CC4(gobj, bool3);
172 }
173}
174
175static inline void Fighter_OnKnockbackEnter(Fighter_GObj* gobj, s32 arg1)
176{
177 ftAnim_800704F0(gobj, arg1, 3.0f);
178 ftAnim_800704F0(gobj, 0, 3.0f);
179}
180
181static inline void Fighter_OnKnockbackExit(Fighter_GObj* gobj, s32 arg1)
182{
183 ftAnim_800704F0(gobj, arg1, 0.0f);
184 ftAnim_800704F0(gobj, 0, 0.0f);
185}
186
187static inline void Fighter_UnsetCmdVar0(Fighter_GObj* gobj)
188{
189 Fighter* fp = GET_FIGHTER(gobj);
190 fp->cmd_vars[0] = 0;
191}
192
194{
195 return &fp->coll_data;
196}
197
199static inline bool ftCheckThrowB0(Fighter* fp)
200{
201 if (fp->throw_flags_b0) {
202 fp->throw_flags_b0 = false;
203 return true;
204 } else {
205 return false;
206 }
207}
208
209static inline bool ftCheckThrowB3(Fighter* fp)
210{
211 if (fp->throw_flags_b3) {
212 fp->throw_flags_b3 = false;
213 return true;
214 } else {
215 return false;
216 }
217}
218
219static inline bool ftCheckThrowB4(Fighter* fp)
220{
221 if (fp->throw_flags_b4) {
222 fp->throw_flags_b4 = false;
223 return true;
224 } else {
225 return false;
226 }
227}
228
230#define CLIFFCATCH_O(fp) \
231 ((fp)->facing_dir < 0.0f) ? CLIFFCATCH_LEFT : CLIFFCATCH_RIGHT
232
234#define CLIFFCATCH_U(fp) \
235 ((fp)->facing_dir != 1.0f) ? CLIFFCATCH_LEFT : CLIFFCATCH_RIGHT
236
238#define gmScriptEventCast(p_event, type) ((type*) p_event)
239#define gmScriptEventUpdatePtr(event, type) \
240 (event = (void*) ((uintptr_t) event + (sizeof(type))))
241
243{
244 return &fp->x3E4_fighterCmdScript;
245}
246
247#endif
UnkFlagStruct x1
Definition dbbonus.c:19
static void Fighter_OnKnockbackExit(Fighter_GObj *gobj, s32 arg1)
Definition inlines.h:181
static s32 ftGetKind(Fighter *fp)
Definition inlines.h:70
static void * getFtSpecialAttrsD(Fighter *fp)
Definition inlines.h:65
static s32 ftGetAction(Fighter *fp)
Definition inlines.h:75
static void getAccelAndTarget(Fighter *fp, float *accel, float *target_vel)
Definition inlines.h:114
static void Fighter_OnItemVisible(Fighter_GObj *gobj, bool flag)
Definition inlines.h:158
static void Fighter_OnItemDrop(Fighter_GObj *gobj, bool dropItemFlag, bool bool2, bool bool3)
Definition inlines.h:166
static Fighter * getFighterPlus(Fighter_GObj *gobj)
Definition inlines.h:53
static void * getFtSpecialAttrs(Fighter *fp)
Definition inlines.h:59
static bool ftCheckThrowB4(Fighter *fp)
Definition inlines.h:219
static bool ftCheckThrowB3(Fighter *fp)
Definition inlines.h:209
static void * getFtSpecialAttrs2CC(Fighter *fp)
Definition inlines.h:80
static Fighter * getFighter(Fighter_GObj *gobj)
Definition inlines.h:47
static bool ftGetGroundAir(Fighter *fp)
Definition inlines.h:100
static ftCo_DatAttrs * getFtAttrs(Fighter *fp)
Definition inlines.h:86
static void Fighter_OnKnockbackEnter(Fighter_GObj *gobj, s32 arg1)
Definition inlines.h:175
#define GET_FIGHTER(gobj)
Definition inlines.h:43
static void Fighter_UnsetCmdVar0(Fighter_GObj *gobj)
Definition inlines.h:187
static float stickGetDir(float x1, float x2)
Definition inlines.h:105
static void Fighter_OnItemPickup(Fighter_GObj *gobj, bool catchItemFlag, bool bool2, bool bool3)
used for all fighters except Kirby and Purin
Definition inlines.h:125
static bool ftCheckThrowB0(Fighter *fp)
Definition inlines.h:199
ftCmdScript * getCmdScript(Fighter *fp)
Definition inlines.h:242
static CollData * getFtColl(Fighter *fp)
Definition inlines.h:91
static void Fighter_OnItemInvisible(Fighter_GObj *gobj, bool flag)
Definition inlines.h:150
static Fighter_GObj * getFtVictim(Fighter *fp)
Definition inlines.h:96
static CollData * Fighter_GetCollData(Fighter *fp)
Definition inlines.h:193
void ftAnim_80070FB4(Fighter_GObj *, s32, s32)
void ftAnim_80070C48(Fighter_GObj *, s32)
void ftAnim_80070CC4(Fighter_GObj *, s32)
void ftAnim_800704F0(Fighter_GObj *, s32, float)
enum_t it_8026B320(HSD_GObj *gobj)
Return item hold kind.
Definition it_26B1.c:119
bool it_8026B2B4(HSD_GObj *gobj)
Check if item is heavy.
Definition it_26B1.c:83
Definition types.h:197
Definition types.h:1121
FtMotionId motion_id
Definition types.h:1126
u8 throw_flags_b4
Definition types.h:1599
Item_GObj * item_gobj
Definition types.h:1416
u8 throw_flags_b0
Definition types.h:1595
struct Fighter::@120 input
GroundOrAir ground_or_air
Definition types.h:1147
CollData coll_data
Definition types.h:1309
ftCo_DatAttrs co_attrs
Definition types.h:1161
u32 cmd_vars[4]
Definition types.h:1591
Fighter_GObj * victim_gobj
Definition types.h:1459
void * dat_attrs
Definition types.h:1166
FighterKind kind
Definition types.h:1123
ftDonkeyAttributes * x2CC
Definition types.h:1164
Vec2 lstick
Definition types.h:1255
u8 throw_flags_b3
Definition types.h:1598
ftCmdScript x3E4_fighterCmdScript
Definition types.h:1175
Definition types.h:904
Definition types.h:656
float dash_run_acceleration_b
Definition types.h:666
float dash_run_terminal_velocity
Definition types.h:667
float dash_run_acceleration_a
Definition types.h:665
unsigned char x2
Definition un_2FC9.static.h:127