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 "gm/gm_16AE.h"
11#include "it/it_26B1.h"
12
13#include <common_structs.h>
14#include <dolphin/mtx.h>
15#include <baselib/archive.h>
16#include <baselib/controller.h>
17#include <baselib/dobj.h>
18#include <baselib/gobj.h>
19#include <baselib/gobjgxlink.h>
21#include <baselib/jobj.h>
22#include <baselib/lobj.h>
23#include <baselib/random.h>
24
25#define PUSH_ATTRS(fp, attributeName) \
26 do { \
27 void* backup = (fp)->dat_attrs_backup; \
28 attributeName* src = (attributeName*) (fp)->ft_data->ext_attr; \
29 void** da = &(fp)->dat_attrs; \
30 *(attributeName*) (fp)->dat_attrs_backup = *src; \
31 *da = backup; \
32 } while (0)
33
35#define COPY_ATTRS(gobj, attributeName) \
36 Fighter* fp = GET_FIGHTER(gobj); \
37 attributeName* sA2 = (attributeName*) fp->dat_attrs; \
38 attributeName* ext_attr = (attributeName*) fp->ft_data->ext_attr; \
39 *sA2 = *ext_attr;
40
41#ifdef M2CTX
42#define GET_FIGHTER(gobj) ((Fighter*) HSD_GObjGetUserData((HSD_GObj*) gobj))
43#else
44#define GET_FIGHTER(gobj) ((Fighter*) HSD_GObjGetUserData(gobj))
45#endif
46
48static inline Fighter* getFighter(Fighter_GObj* gobj)
49{
50 return gobj->user_data;
51}
52
54static inline Fighter* getFighterPlus(Fighter_GObj* gobj)
55{
56 Fighter* fp = gobj->user_data;
57 return fp;
58}
59
60static inline void* getFtSpecialAttrs(Fighter* fp)
61{
62 void* fighter_attr = fp->dat_attrs;
63 return fighter_attr;
64}
65
66static inline void* getFtSpecialAttrsD(Fighter* fp) // Direct
67{
68 return fp->dat_attrs;
69}
70
71static inline s32 ftGetKind(Fighter* fp)
72{
73 return fp->kind;
74}
75
76static inline s32 ftGetAction(Fighter* fp)
77{
78 return fp->motion_id;
79}
80
81static inline void* getFtSpecialAttrs2CC(Fighter* fp)
82{
83 void* fighter_attr = fp->x2CC;
84 return fighter_attr;
85}
86
87static inline ftCo_DatAttrs* getFtAttrs(Fighter* fp)
88{
89 return &fp->co_attrs;
90}
91
92static inline CollData* getFtColl(Fighter* fp)
93{
94 return &fp->coll_data;
95}
96
97static inline Fighter_GObj* getFtVictim(Fighter* fp)
98{
99 return fp->victim_gobj;
100}
101
103{
104 return fp->target_item_gobj;
105}
106
107static inline bool ftGetGroundAir(Fighter* fp)
108{
109 return fp->ground_or_air;
110}
111
112static inline int getStickDirX(Fighter* fp)
113{
114 if (fp->input.lstick.x < 0.0f) {
115 return -1;
116 } else {
117 return +1;
118 }
119}
120
121static inline float stickGetDir(float x1, float x2)
122{
123 if (x1 < x2) {
124 return -x1;
125 } else {
126 return x1;
127 }
128}
129
130static inline void getAccelAndTarget(Fighter* fp, float* accel,
131 float* target_vel)
132{
133 ftCo_DatAttrs* co_attrs = &fp->co_attrs;
134 *accel = fp->input.lstick.x * fp->co_attrs.dash_run_acceleration_a;
135 *accel += fp->input.lstick.x > 0 ? +co_attrs->dash_run_acceleration_b
136 : -co_attrs->dash_run_acceleration_b;
137 *target_vel = fp->input.lstick.x * co_attrs->dash_run_terminal_velocity;
138}
139
141static inline void Fighter_OnItemPickup(Fighter_GObj* gobj, bool catchItemFlag,
142 bool bool2, bool bool3)
143{
144 Fighter* fp = GET_FIGHTER(gobj);
145 if (!it_8026B2B4(fp->item_gobj)) {
146 switch (it_8026B320(fp->item_gobj)) {
147 case 1:
148 ftAnim_80070FB4(gobj, bool2, 1);
149 break;
150 case 2:
151 ftAnim_80070FB4(gobj, bool2, 0);
152 break;
153 case 3:
154 ftAnim_80070FB4(gobj, bool2, 2);
155 break;
156 case 4:
157 ftAnim_80070FB4(gobj, bool2, 3);
158 break;
159 }
160 if (catchItemFlag) {
161 ftAnim_80070C48(gobj, bool3);
162 }
163 }
164}
165
166static inline void Fighter_OnItemInvisible(Fighter_GObj* gobj, bool flag)
167{
168 Fighter* fp = GET_FIGHTER(gobj);
169 if (!it_8026B2B4(fp->item_gobj)) {
170 ftAnim_80070CC4(gobj, flag);
171 }
172}
173
174static inline void Fighter_OnItemVisible(Fighter_GObj* gobj, bool flag)
175{
176 Fighter* fp = GET_FIGHTER(gobj);
177 if (!it_8026B2B4(fp->item_gobj)) {
178 ftAnim_80070C48(gobj, flag);
179 }
180}
181
182static inline void Fighter_OnItemDrop(Fighter_GObj* gobj, bool dropItemFlag,
183 bool bool2, bool bool3)
184{
185 ftAnim_80070FB4(gobj, bool2, -1);
186 if (dropItemFlag) {
187 ftAnim_80070CC4(gobj, bool3);
188 }
189}
190
191static inline void Fighter_OnKnockbackEnter(Fighter_GObj* gobj, s32 arg1)
192{
193 ftAnim_800704F0(gobj, arg1, 3.0f);
194 ftAnim_800704F0(gobj, 0, 3.0f);
195}
196
197static inline void Fighter_OnKnockbackExit(Fighter_GObj* gobj, s32 arg1)
198{
199 ftAnim_800704F0(gobj, arg1, 0.0f);
200 ftAnim_800704F0(gobj, 0, 0.0f);
201}
202
203static inline void Fighter_UnsetCmdVar0(Fighter_GObj* gobj)
204{
205 Fighter* fp = GET_FIGHTER(gobj);
206 fp->cmd_vars[0] = 0;
207}
208
210{
211 return &fp->coll_data;
212}
213
215static inline bool ftCheckThrowB0(Fighter* fp)
216{
217 if (fp->throw_flags_b0) {
218 fp->throw_flags_b0 = false;
219 return true;
220 } else {
221 return false;
222 }
223}
224
225static inline bool ftCheckThrowB3(Fighter* fp)
226{
227 if (fp->throw_flags_b3) {
228 fp->throw_flags_b3 = false;
229 return true;
230 } else {
231 return false;
232 }
233}
234
235static inline bool ftCheckThrowB4(Fighter* fp)
236{
237 if (fp->throw_flags_b4) {
238 fp->throw_flags_b4 = false;
239 return true;
240 } else {
241 return false;
242 }
243}
244
245static inline float ftGetFacingDir(Fighter_GObj* gobj)
246{
247 return GET_FIGHTER(gobj)->facing_dir;
248}
249
250static inline int ftGetFacingDirInt(Fighter* fp)
251{
252 if (fp->facing_dir < 0.0f) {
253 return -1;
254 } else {
255 return +1;
256 }
257}
258
260#define CLIFFCATCH_O(fp) \
261 ((fp)->facing_dir < 0.0f) ? CLIFFCATCH_LEFT : CLIFFCATCH_RIGHT
262
264#define CLIFFCATCH_U(fp) \
265 ((fp)->facing_dir != 1.0f) ? CLIFFCATCH_LEFT : CLIFFCATCH_RIGHT
266
268#define gmScriptEventCast(p_event, type) ((type*) p_event)
269#define gmScriptEventUpdatePtr(event, type) \
270 (event = (void*) ((uintptr_t) event + 4))
271
273{
274 return &fp->x3E4_fighterCmdScript;
275}
276
277static inline bool canUseCstick(Fighter* fp)
278{
281 if (!gm_8016B0FC() || it_8026B30C(fp->item_gobj) == 0) {
282 return true;
283 } else {
284 return false;
285 }
286}
287
288#endif
UnkFlagStruct x1
Definition dbbonus.c:20
static void Fighter_OnKnockbackExit(Fighter_GObj *gobj, s32 arg1)
Definition inlines.h:197
static s32 ftGetKind(Fighter *fp)
Definition inlines.h:71
static void * getFtSpecialAttrsD(Fighter *fp)
Definition inlines.h:66
static int getStickDirX(Fighter *fp)
Definition inlines.h:112
static bool canUseCstick(Fighter *fp)
Definition inlines.h:277
static s32 ftGetAction(Fighter *fp)
Definition inlines.h:76
static void getAccelAndTarget(Fighter *fp, float *accel, float *target_vel)
Definition inlines.h:130
static void Fighter_OnItemVisible(Fighter_GObj *gobj, bool flag)
Definition inlines.h:174
static void Fighter_OnItemDrop(Fighter_GObj *gobj, bool dropItemFlag, bool bool2, bool bool3)
Definition inlines.h:182
static Fighter * getFighterPlus(Fighter_GObj *gobj)
Definition inlines.h:54
static void * getFtSpecialAttrs(Fighter *fp)
Definition inlines.h:60
static int ftGetFacingDirInt(Fighter *fp)
Definition inlines.h:250
static bool ftCheckThrowB4(Fighter *fp)
Definition inlines.h:235
static bool ftCheckThrowB3(Fighter *fp)
Definition inlines.h:225
static void * getFtSpecialAttrs2CC(Fighter *fp)
Definition inlines.h:81
static Fighter * getFighter(Fighter_GObj *gobj)
Definition inlines.h:48
static bool ftGetGroundAir(Fighter *fp)
Definition inlines.h:107
static ftCo_DatAttrs * getFtAttrs(Fighter *fp)
Definition inlines.h:87
static void Fighter_OnKnockbackEnter(Fighter_GObj *gobj, s32 arg1)
Definition inlines.h:191
#define GET_FIGHTER(gobj)
Definition inlines.h:44
static float ftGetFacingDir(Fighter_GObj *gobj)
Definition inlines.h:245
static void Fighter_UnsetCmdVar0(Fighter_GObj *gobj)
Definition inlines.h:203
static float stickGetDir(float x1, float x2)
Definition inlines.h:121
static void Fighter_OnItemPickup(Fighter_GObj *gobj, bool catchItemFlag, bool bool2, bool bool3)
used for all fighters except Kirby and Purin
Definition inlines.h:141
static Item_GObj * getFtTargetItem(Fighter *fp)
Definition inlines.h:102
static bool ftCheckThrowB0(Fighter *fp)
Definition inlines.h:215
static CollData * getFtColl(Fighter *fp)
Definition inlines.h:92
static void Fighter_OnItemInvisible(Fighter_GObj *gobj, bool flag)
Definition inlines.h:166
static Fighter_GObj * getFtVictim(Fighter *fp)
Definition inlines.h:97
static CollData * Fighter_GetCollData(Fighter *fp)
Definition inlines.h:209
CommandInfo * getCmdScript(Fighter *fp)
Definition inlines.h:272
void ftAnim_80070FB4(Fighter_GObj *arg0, s32 arg1, s32 arg2)
ftAnim_80070C48
Definition ftanim.c:1084
void ftAnim_800704F0(Fighter_GObj *arg0, int arg1, f32 frame)
Definition ftanim.c:920
void ftAnim_80070C48(Fighter_GObj *, s32)
void ftAnim_80070CC4(Fighter_GObj *, s32)
u8 x2
Definition gm_1601.c:142
bool gm_8016B0FC(void)
single-button mode enabled
Definition gm_16AE.c:171
enum_t it_8026B320(HSD_GObj *gobj)
Return item hold kind.
Definition it_26B1.c:119
enum_t it_8026B30C(Item_GObj *gobj)
Return flag from Item Attributes.
Definition it_26B1.c:112
bool it_8026B2B4(HSD_GObj *gobj)
Check if item is heavy.
Definition it_26B1.c:83
Definition types.h:181
Definition types.h:564
Definition types.h:1106
FtMotionId motion_id
Definition types.h:1111
u8 throw_flags_b4
Definition types.h:1578
Item_GObj * item_gobj
Definition types.h:1400
u8 throw_flags_b0
Definition types.h:1574
Item_GObj * target_item_gobj
Definition types.h:1445
GroundOrAir ground_or_air
Definition types.h:1132
CollData coll_data
Definition types.h:1275
ftCo_DatAttrs co_attrs
Definition types.h:1146
struct Fighter::@121 input
u32 cmd_vars[4]
Definition types.h:1570
CommandInfo x3E4_fighterCmdScript
Definition types.h:1160
float facing_dir
Definition types.h:1118
Fighter_GObj * victim_gobj
Definition types.h:1443
void * dat_attrs
Definition types.h:1151
FighterKind kind
Definition types.h:1108
ftDonkeyAttributes * x2CC
Definition types.h:1149
Vec2 lstick
Definition types.h:1221
u8 throw_flags_b3
Definition types.h:1577
was using this to try and fix some matches, unsuccessfully
Definition gobj.h:26
Definition types.h:681
float dash_run_acceleration_b
Definition types.h:691
float dash_run_terminal_velocity
Definition types.h:692
float dash_run_acceleration_a
Definition types.h:690