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/types.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)->x2D8_specialAttributes2; \
27 attributeName* src = (attributeName*) (fp)->ft_data->ext_attr; \
28 void** da = &(fp)->dat_attrs; \
29 *(attributeName*) (fp)->x2D8_specialAttributes2 = *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 bool ftGetGroundAir(Fighter* fp)
97{
98 return fp->ground_or_air;
99}
100
101static inline float stickGetDir(float x1, float x2)
102{
103 if (x1 < x2) {
104 return -x1;
105 } else {
106 return x1;
107 }
108}
110static inline void Fighter_OnItemPickup(Fighter_GObj* gobj, bool catchItemFlag,
111 bool bool2, bool bool3)
112{
113 Fighter* fp = GET_FIGHTER(gobj);
114 if (!it_8026B2B4(fp->item_gobj)) {
115 switch (it_8026B320(fp->item_gobj)) {
116 case 1:
117 ftAnim_80070FB4(gobj, bool2, 1);
118 break;
119 case 2:
120 ftAnim_80070FB4(gobj, bool2, 0);
121 break;
122 case 3:
123 ftAnim_80070FB4(gobj, bool2, 2);
124 break;
125 case 4:
126 ftAnim_80070FB4(gobj, bool2, 3);
127 break;
128 }
129 if (catchItemFlag) {
130 ftAnim_80070C48(gobj, bool3);
131 }
132 }
133}
134
135static inline void Fighter_OnItemInvisible(Fighter_GObj* gobj, bool flag)
136{
137 Fighter* fp = GET_FIGHTER(gobj);
138 if (!it_8026B2B4(fp->item_gobj)) {
139 ftAnim_80070CC4(gobj, flag);
140 }
141}
142
143static inline void Fighter_OnItemVisible(Fighter_GObj* gobj, bool flag)
144{
145 Fighter* fp = GET_FIGHTER(gobj);
146 if (!it_8026B2B4(fp->item_gobj)) {
147 ftAnim_80070C48(gobj, flag);
148 }
149}
150
151static inline void Fighter_OnItemDrop(Fighter_GObj* gobj, bool dropItemFlag,
152 bool bool2, bool bool3)
153{
154 ftAnim_80070FB4(gobj, bool2, -1);
155 if (dropItemFlag) {
156 ftAnim_80070CC4(gobj, bool3);
157 }
158}
159
160static inline void Fighter_OnKnockbackEnter(Fighter_GObj* gobj, s32 arg1)
161{
162 ftAnim_800704F0(gobj, arg1, 3.0f);
163 ftAnim_800704F0(gobj, 0, 3.0f);
164}
165
166static inline void Fighter_OnKnockbackExit(Fighter_GObj* gobj, s32 arg1)
167{
168 ftAnim_800704F0(gobj, arg1, 0.0f);
169 ftAnim_800704F0(gobj, 0, 0.0f);
170}
171
172static inline void Fighter_UnsetCmdVar0(Fighter_GObj* gobj)
173{
174 Fighter* fp = GET_FIGHTER(gobj);
175 fp->cmd_vars[0] = 0;
176}
177
179{
180 return &fp->coll_data;
181}
182
184static inline bool ftCheckThrowB0(Fighter* fp)
185{
186 if (fp->throw_flags_b0) {
187 fp->throw_flags_b0 = false;
188 return true;
189 } else {
190 return false;
191 }
192}
193
194static inline bool ftCheckThrowB3(Fighter* fp)
195{
196 if (fp->throw_flags_b3) {
197 fp->throw_flags_b3 = false;
198 return true;
199 } else {
200 return false;
201 }
202}
203
204static inline bool ftCheckThrowB4(Fighter* fp)
205{
206 if (fp->throw_flags_b4) {
207 fp->throw_flags_b4 = false;
208 return true;
209 } else {
210 return false;
211 }
212}
213
215#define CLIFFCATCH_O(fp) \
216 ((fp)->facing_dir < 0.0f) ? CLIFFCATCH_LEFT : CLIFFCATCH_RIGHT
217
219#define CLIFFCATCH_U(fp) \
220 ((fp)->facing_dir != 1.0f) ? CLIFFCATCH_LEFT : CLIFFCATCH_RIGHT
221
223#define gmScriptEventCast(p_event, type) ((type*) p_event)
224#define gmScriptEventUpdatePtr(event, type) \
225 (event = (void*) ((uintptr_t) event + (sizeof(type))))
226
228{
229 return &fp->x3E4_fighterCmdScript;
230}
231
232#endif
static void Fighter_OnKnockbackExit(Fighter_GObj *gobj, s32 arg1)
Definition inlines.h:166
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 Fighter_OnItemVisible(Fighter_GObj *gobj, bool flag)
Definition inlines.h:143
static void Fighter_OnItemDrop(Fighter_GObj *gobj, bool dropItemFlag, bool bool2, bool bool3)
Definition inlines.h:151
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:204
static bool ftCheckThrowB3(Fighter *fp)
Definition inlines.h:194
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:96
static ftCo_DatAttrs * getFtAttrs(Fighter *fp)
Definition inlines.h:86
static void Fighter_OnKnockbackEnter(Fighter_GObj *gobj, s32 arg1)
Definition inlines.h:160
#define GET_FIGHTER(gobj)
Definition inlines.h:43
static void Fighter_UnsetCmdVar0(Fighter_GObj *gobj)
Definition inlines.h:172
static float stickGetDir(float x1, float x2)
Definition inlines.h:101
static void Fighter_OnItemPickup(Fighter_GObj *gobj, bool catchItemFlag, bool bool2, bool bool3)
used for all fighters except Kirby and Purin
Definition inlines.h:110
static bool ftCheckThrowB0(Fighter *fp)
Definition inlines.h:184
ftCmdScript * getCmdScript(Fighter *fp)
Definition inlines.h:227
static CollData * getFtColl(Fighter *fp)
Definition inlines.h:91
static void Fighter_OnItemInvisible(Fighter_GObj *gobj, bool flag)
Definition inlines.h:135
static CollData * Fighter_GetCollData(Fighter *fp)
Definition inlines.h:178
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:116
bool it_8026B2B4(HSD_GObj *gobj)
Check if item is heavy.
Definition it_26B1.c:82
signed long s32
A signed 32-bit integer.
Definition platform.h:14
Definition types.h:203
Definition types.h:1063
FtMotionId motion_id
Definition types.h:1068
u8 throw_flags_b4
Definition types.h:1528
Item_GObj * item_gobj
Definition types.h:1345
u8 throw_flags_b0
Definition types.h:1524
GroundOrAir ground_or_air
Definition types.h:1089
CollData coll_data
Definition types.h:1234
ftCo_DatAttrs co_attrs
Definition types.h:1103
u32 cmd_vars[4]
Definition types.h:1520
void * dat_attrs
Definition types.h:1108
FighterKind kind
Definition types.h:1065
ftDonkeyAttributes * x2CC
Definition types.h:1106
u8 throw_flags_b3
Definition types.h:1527
ftCmdScript x3E4_fighterCmdScript
Definition types.h:1117
Definition types.h:884
Definition types.h:648