SSBM Decomp
Loading...
Searching...
No Matches
inlines.h
Go to the documentation of this file.
1#ifndef MELEE_GR_INLINES_H
2#define MELEE_GR_INLINES_H
3
5
6#include <melee/cm/camera.h>
7#include <melee/gr/granime.h>
10#include <melee/gr/ground.h>
11#include <melee/gr/stage.h>
12#include <melee/gr/types.h>
13#include <melee/if/ifcoget.h>
14#include <melee/if/ifstatus.h>
15#include <melee/lb/lb_00B0.h>
16#include <melee/lb/lb_00F9.h>
17#include <melee/mp/mpcoll.h>
23
24#define GET_GROUND(gobj) ((Ground*) HSD_GObjGetUserData(gobj))
25
28static inline void Ground_StartMapAnim(Ground_GObj* gobj)
29{
30 Ground* gp = GET_GROUND(gobj);
31 grAnime_801C8138(gobj, gp->map_id, 0);
32}
33
36static inline void Ground_InitMapCollAndAnim(Ground_GObj* gobj)
37{
38 Ground* gp = GET_GROUND(gobj);
39 HSD_JObj* jobj = GET_JOBJ(gobj);
40 Ground_InitMapColl(jobj, gp->map_id);
41 grAnime_801C8138(gobj, gp->map_id, 0);
42}
43
47{
50}
51
53static inline void Ground_SetupStageCallbacks(Ground_GObj* gobj,
54 StageCallbacks* callbacks)
55{
56 Ground* gp = GET_GROUND(gobj);
57 gp->x8_callback = NULL;
58 gp->xC_callback = NULL;
60 if (callbacks->callback3 != NULL) {
61 gp->x1C_callback = callbacks->callback3;
62 }
63 if (callbacks->on_init != NULL) {
64 callbacks->on_init(gobj);
65 }
66 if (callbacks->gobj_proc != NULL) {
67 HSD_GObj_SetupProc(gobj, callbacks->gobj_proc, 4);
68 }
69}
70
71static inline void Ground_InitScene(void)
72{
73 Camera_Init(6);
76 Ground_801C0378(0x40);
77}
78
79static inline void Stage_InitScene(StKind stkind, s32* arg1)
80{
82 Stage_802251E8(stkind, arg1);
83}
84
85static inline void Ground_InitTargetStage(HSD_GObj* (*create_gobj)(int) )
86{
87 stage_info.unk8C.b4 = false;
88 stage_info.unk8C.b5 = true;
89 create_gobj(0);
90 create_gobj(1);
91 create_gobj(2);
96}
97
99{
100 gp->u.starfox.article_gobjs[3] = NULL;
101 gp->u.starfox.article_gobjs[2] = NULL;
102 gp->u.starfox.article_gobjs[1] = NULL;
103 gp->u.starfox.article_gobjs[0] = NULL;
104}
105
107{
108 grAnime_801C7FF8(gobj, 0, 7, 1, 0.0F, 1.0F);
109 grAnime_801C8098(gobj, 2, 7, 3, 0.0F, 1.0F);
110}
111
113{
114 grAnime_801C7FF8(gobj, 7, 7, 0, 0.0F, 1.0F);
115 grAnime_801C7FF8(gobj, 8, 7, 0, 0.0F, 1.0F);
116 grAnime_801C8098(gobj, 2, 7, 3, 0.0F, 1.0F);
117}
118
119static inline void Ground_LinkStarFoxArwing(Ground* gp, HSD_GObj* linked_gobj)
120{
121 gp->u.starfox.linked_gobj = linked_gobj;
122 if (linked_gobj != NULL) {
123 Ground* linked_gp = GET_GROUND(gp->u.starfox.linked_gobj);
124 if (linked_gp != NULL) {
125 linked_gp->u.starfox.arwing_slot = gp->u.starfox.arwing_slot;
126 }
127 }
128}
129
131{
132 gp->u.starfox.article_gobjs[0] = (HSD_GObj*) -1;
133 gp->u.starfox.article_gobjs[1] = (HSD_GObj*) -1;
134}
135
137{
138 gp->u.starfox.xC4.flags.b0 = false;
139 gp->u.starfox.xD4 = 0;
140 gp->u.starfox.xF0 = 0;
141 gp->u.starfox.xF4 = 0;
142}
143
145 Ground* gp,
146 Ground_GObj* arwing_gobj,
147 int joint_id)
148{
150 Ground_801C3FA4(arwing_gobj, joint_id));
152}
153
155 HSD_JObj* jobj,
156 f32 depth_limit)
157{
158 f32 angle = ABS(gp->u.arwing.xE0.z);
159 if (angle < depth_limit) {
160 gp->u.arwing.xE0.z = 0.0F;
161 while (gp->u.arwing.xDC < -M_PI) {
162 gp->u.arwing.xDC += M_TAU;
163 }
164 while (gp->u.arwing.xDC > M_PI) {
165 gp->u.arwing.xDC -= M_TAU;
166 }
167 if (ABS(gp->u.arwing.xDC) < 1.0471976F) {
169 } else {
171 }
172 } else {
174 }
175 HSD_JObjSetTranslate(jobj, &gp->u.arwing.xE0);
176}
177
178static inline void
180 int sequence_gobj_id,
181 Ground_GObj* (*create_gobj)(int) )
182{
184 un_802FF570();
185
186 if (Ground_GetMapGObj(sequence_gobj_id) == NULL) {
188 gp->u.starfox.arwing_slot))
189 {
190 if ((gp->u.starfox.xCC--) < 0) {
191 Ground_GObj* sequence_gobj = create_gobj(sequence_gobj_id);
193 sequence_gobj, &GET_GROUND(sequence_gobj)->u,
195 gp->u.starfox.arwing_slot++;
196 gp->u.starfox.xCC = 0;
197 }
198 } else if ((gp->u.starfox.xCC--) < 0) {
199 Ground_801C4A08(gobj);
200 }
201 }
202}
203
204static inline void Ground_ClampSymmetric(f32 value, f32 limit, f32* out)
205{
206 if (value > limit) {
207 *out = limit;
208 } else {
209 limit = -limit;
210 if (value < limit) {
211 *out = limit;
212 }
213 }
214}
215
216static inline void Ground_WrapAngle(f32* angle)
217{
218 if (*angle > M_TAU) {
219 *angle -= M_TAU;
220 } else if (*angle < -M_TAU) {
221 *angle += M_TAU;
222 }
223}
224
225#define ZRANDI(n) ((n) != 0 ? HSD_Randi(n) : 0)
226
227static inline int rand_range(int a, int b)
228{
229 if (a > b) {
230 return b + ZRANDI(a - b);
231 } else if (a < b) {
232 return a + ZRANDI(b - a);
233 } else {
234 return a;
235 }
236}
237
238#endif
void Camera_Init(int n_subjects)
Definition camera.c:163
#define GET_JOBJ(gobj)
Definition gobj.h:134
HSD_GObjProc * HSD_GObj_SetupProc(HSD_GObj *gobj, HSD_GObjEvent func, u8 pri)
Definition gobjproc.c:150
static void Ground_UpdateWindAndMapColl(Ground_GObj *gobj)
Advances the dynamics wind/force list, then re-syncs the map's collision joints to its animated model...
Definition inlines.h:46
static void Ground_InitScene(void)
Definition inlines.h:71
static void Ground_UpdateStarFoxArwingVisibility(Ground *gp, HSD_JObj *jobj, f32 depth_limit)
Definition inlines.h:154
static void Ground_AttachStarFoxArwingModel(Ground_GObj *gobj, Ground *gp, Ground_GObj *arwing_gobj, int joint_id)
Definition inlines.h:144
static void Ground_InitTargetStage(HSD_GObj *(*create_gobj)(int))
Definition inlines.h:85
static void Ground_AnimateStarFoxArwingWithBackground(Ground_GObj *gobj)
Definition inlines.h:112
static void Ground_LinkStarFoxArwing(Ground *gp, HSD_GObj *linked_gobj)
Definition inlines.h:119
#define GET_GROUND(gobj)
Definition inlines.h:24
static void Ground_ClampSymmetric(f32 value, f32 limit, f32 *out)
Definition inlines.h:204
static void Ground_WrapAngle(f32 *angle)
Definition inlines.h:216
static void Ground_DisableStarFoxArwingGObjs(Ground *gp)
Definition inlines.h:130
static void Ground_InitMapCollAndAnim(Ground_GObj *gobj)
Binds the map's collision joints to its model, then starts animation set 0 from frame 0.
Definition inlines.h:36
static void Ground_UpdateStarFoxSequence(Ground_GObj *gobj, Ground *gp, int sequence_gobj_id, Ground_GObj *(*create_gobj)(int))
Definition inlines.h:179
static void Ground_ResetStarFoxArwingState(Ground *gp)
Definition inlines.h:136
static int rand_range(int a, int b)
Definition inlines.h:227
static void Stage_InitScene(StKind stkind, s32 *arg1)
Definition inlines.h:79
static void Ground_StartMapAnim(Ground_GObj *gobj)
Resets the map's model to its base pose and starts its animation set 0 from frame 0.
Definition inlines.h:28
#define ZRANDI(n)
Definition inlines.h:225
static void Ground_AnimateStarFoxArwing(Ground_GObj *gobj)
Definition inlines.h:106
static void Ground_SetupStageCallbacks(Ground_GObj *gobj, StageCallbacks *callbacks)
Definition inlines.h:53
static void Ground_ClearStarFoxArwingGObjs(Ground *gp)
Definition inlines.h:98
void grAnime_801C7FF8(Ground_GObj *gobj, int arg1, int arg2, int arg3, float arg4, float arg5)
Definition granime.c:954
void grAnime_801C8138(HSD_GObj *gobj, enum_t arg1, bool arg2)
Definition granime.c:984
void grAnime_801C8098(Ground_GObj *gobj, int arg1, int arg2, int arg3, float arg4, float arg5)
Definition granime.c:969
void grCorneria_801E2738(HSD_GObj *gobj, void *ptr, u32 idx1, u32 idx2)
Definition grcorneria.c:2500
s32 grCorneria_801E2598(u32 arg0, u32 arg1)
Definition grcorneria.c:2442
void grDisplay_801C5DB0(HSD_GObj *gobj, intptr_t code)
Definition grdisplay.c:72
void Ground_801C3BB4(void)
Definition ground.c:2242
s32 Ground_801C4210(void)
Definition ground.c:2438
void Ground_801C0378(int arg0)
Definition ground.c:281
Ground_GObj * Ground_GetMapGObj(int map_id)
Definition ground.c:1548
void Ground_801C42AC(void)
Definition ground.c:2459
StageInfo stage_info
Definition ground.c:143
bool Ground_UpdateMapColl(Ground_GObj *arg0)
Re-syncs the collision joints of the map to its animated model.
Definition ground.c:1678
void Ground_801C39C0(void)
Definition ground.c:2135
bool Ground_InitMapColl(HSD_JObj *jobj, s32 arg1)
Binds each collision joint of map map_id to a joint of jobj, syncs it to the model,...
Definition ground.c:1644
void Ground_801C4A08(HSD_GObj *gobj)
Stage destroy ground gobj.
Definition ground.c:2788
HSD_JObj * Ground_801C3FA4(HSD_GObj *gobj, int depth)
Definition ground.c:2383
void un_802FF570(void)
Definition if_2FF2.c:194
void ifStatus_802F6898(void)
Hide Percentage Digits.
Definition ifstatus.c:831
#define M_TAU
Definition itclimbersblizzard.c:20
void HSD_JObjClearFlagsAll(HSD_JObj *jobj, u32 flags)
Definition jobj.c:1032
void HSD_JObjSetFlagsAll(HSD_JObj *jobj, u32 flags)
Definition jobj.c:1006
#define JOBJ_HIDDEN
Definition jobj.h:69
static void HSD_JObjSetTranslate(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:481
void lb_8000C2F8(HSD_JObj *jobj, HSD_JObj *constraint)
Definition lb_00B0.c:418
void lb_800115F4(void)
Definition lb_00F9.c:933
void lb_8000FCDC(void)
Definition lb_00F9.c:108
signed int s32
Definition types.h:12
float f32
Definition types.h:18
HSD_GObj Ground_GObj
Definition forward.h:53
StKind
Definition forward.h:148
void mpColl_80041C78(void)
Definition mpcoll.c:71
#define ABS(x)
Definition platform.h:176
#define M_PI
Definition platform.h:156
void Stage_802251E8(StKind stkind, s32 *_)
Definition stage.c:496
#define NULL
Definition stddef.h:19
Definition types.h:1798
HSD_GObjEvent xC_callback
Definition types.h:1802
HSD_GObjEvent x8_callback
Definition types.h:1801
GrKind map_id
Definition types.h:1822
union Ground::GroundVars u
HSD_GObjEvent x1C_callback
Definition types.h:1824
Definition gobj.h:16
Definition jobj.h:106
Definition types.h:158
HSD_GObjEvent on_init
Definition types.h:159
void(* callback3)(Ground_GObj *)
Definition types.h:162
HSD_GObjEvent gobj_proc
Definition types.h:161
f32 z
Definition mtx.h:15
Vec3 xE0
Definition types.h:619
f32 xDC
Definition types.h:618
s32 xF0
Definition types.h:462
HSD_GObj * article_gobjs[4]
Definition types.h:461
s32 arwing_slot
Definition types.h:455
HSD_GObj * linked_gobj
Definition types.h:460
s32 xD4
Definition types.h:458
s32 xF4
Definition types.h:463
s32 xCC
Definition types.h:456
union grStarFox_GroundVars::grStarFox_GroundVars_xC4 xC4
struct grStarFox_GroundVars starfox
Definition types.h:1929
struct grArwing_GroundVars arwing
Definition types.h:1853
struct grStarFox_GroundVars::grStarFox_GroundVars_xC4::grStarFox_GroundVars_xC4_flags flags