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 <math.h>
7
8#include <melee/cm/camera.h>
9#include <melee/gr/granime.h>
10#include <melee/gr/grcorneria.h>
11#include <melee/gr/grdisplay.h>
12#include <melee/gr/ground.h>
13#include <melee/gr/stage.h>
14#include <melee/gr/types.h>
15#include <melee/if/ifcoget.h>
16#include <melee/if/ifstatus.h>
17#include <melee/lb/lb_00B0.h>
18#include <melee/lb/lb_00F9.h>
19#include <melee/mp/mpcoll.h>
25
26#define GET_GROUND(gobj) ((Ground*) HSD_GObjGetUserData(gobj))
27
31{
32 Ground* gp = GET_GROUND(gobj);
34}
35
39{
40 Ground* gp = GET_GROUND(gobj);
41 HSD_JObj* jobj = GET_JOBJ(gobj);
42 Ground_InitMapColl(jobj, gp->map_id);
44}
45
53
56 StageCallbacks* callbacks)
57{
58 Ground* gp = GET_GROUND(gobj);
59 gp->x8_callback = NULL;
60 gp->xC_callback = NULL;
62 if (callbacks->callback3 != NULL) {
63 gp->x1C_callback = callbacks->callback3;
64 }
65 if (callbacks->on_init != NULL) {
66 callbacks->on_init(gobj);
67 }
68 if (callbacks->gobj_proc != NULL) {
69 HSD_GObj_SetupProc(gobj, callbacks->gobj_proc, 4);
70 }
71}
72
73static inline void Ground_InitScene(void)
74{
75 Camera_Init(6);
78 Ground_801C0378(0x40);
79}
80
81static inline void Stage_InitScene(StKind stkind, s32* arg1)
82{
84 Stage_802251E8(stkind, arg1);
85}
86
87static inline void Ground_InitTargetStage(HSD_GObj* (*create_gobj)(int) )
88{
89 stage_info.unk8C.b4 = false;
90 stage_info.unk8C.b5 = true;
91 create_gobj(0);
92 create_gobj(1);
93 create_gobj(2);
98}
99
101{
102 gp->u.starfox.article_gobjs[3] = NULL;
103 gp->u.starfox.article_gobjs[2] = NULL;
104 gp->u.starfox.article_gobjs[1] = NULL;
105 gp->u.starfox.article_gobjs[0] = NULL;
106}
107
109{
110 grAnime_801C7FF8(gobj, 0, 7, 1, 0.0F, 1.0F);
111 grAnime_801C8098(gobj, 2, 7, 3, 0.0F, 1.0F);
112}
113
115{
116 grAnime_801C7FF8(gobj, 7, 7, 0, 0.0F, 1.0F);
117 grAnime_801C7FF8(gobj, 8, 7, 0, 0.0F, 1.0F);
118 grAnime_801C8098(gobj, 2, 7, 3, 0.0F, 1.0F);
119}
120
121static inline void Ground_LinkStarFoxArwing(Ground* gp, HSD_GObj* linked_gobj)
122{
123 gp->u.starfox.linked_gobj = linked_gobj;
124 if (linked_gobj != NULL) {
125 Ground* linked_gp = GET_GROUND(gp->u.starfox.linked_gobj);
126 if (linked_gp != NULL) {
127 linked_gp->u.starfox.arwing_slot = gp->u.starfox.arwing_slot;
128 }
129 }
130}
131
133{
134 gp->u.starfox.article_gobjs[0] = (HSD_GObj*) -1;
135 gp->u.starfox.article_gobjs[1] = (HSD_GObj*) -1;
136}
137
139{
140 gp->u.starfox.xC4.flags.b0 = false;
141 gp->u.starfox.xD4 = 0;
142 gp->u.starfox.xF0 = 0;
143 gp->u.starfox.xF4 = 0;
144}
145
147 Ground* gp,
148 Ground_GObj* arwing_gobj,
149 int joint_id)
150{
152 Ground_801C3FA4(arwing_gobj, joint_id));
154}
155
157 HSD_JObj* jobj,
158 f32 depth_limit)
159{
160 f32 angle = ABS(gp->u.arwing.xE0.z);
161 if (angle < depth_limit) {
162 gp->u.arwing.xE0.z = 0.0F;
163 while (gp->u.arwing.xDC < -M_PI) {
164 gp->u.arwing.xDC += M_TAU;
165 }
166 while (gp->u.arwing.xDC > M_PI) {
167 gp->u.arwing.xDC -= M_TAU;
168 }
169 if (ABS(gp->u.arwing.xDC) < 1.0471976F) {
171 } else {
173 }
174 } else {
176 }
177 HSD_JObjSetTranslate(jobj, &gp->u.arwing.xE0);
178}
179
180static inline void
182 int sequence_gobj_id,
183 Ground_GObj* (*create_gobj)(int) )
184{
186 un_802FF570();
187
188 if (Ground_GetMapGObj(sequence_gobj_id) == NULL) {
190 gp->u.starfox.arwing_slot))
191 {
192 if ((gp->u.starfox.xCC--) < 0) {
193 Ground_GObj* sequence_gobj = create_gobj(sequence_gobj_id);
195 sequence_gobj, &GET_GROUND(sequence_gobj)->u,
197 gp->u.starfox.arwing_slot++;
198 gp->u.starfox.xCC = 0;
199 }
200 } else if ((gp->u.starfox.xCC--) < 0) {
202 }
203 }
204}
205
206static inline void Ground_ClampSymmetric(f32 value, f32 limit, f32* out)
207{
208 if (value > limit) {
209 *out = limit;
210 } else {
211 limit = -limit;
212 if (value < limit) {
213 *out = limit;
214 }
215 }
216}
217
218static inline void Ground_WrapAngle(f32* angle)
219{
220 if (*angle > M_TAU) {
221 *angle -= M_TAU;
222 } else if (*angle < -M_TAU) {
223 *angle += M_TAU;
224 }
225}
226
227#define ZRANDI(n) ((n) != 0 ? HSD_Randi(n) : 0)
228
229static inline int rand_range(int a, int b)
230{
231 if (a > b) {
232 return b + ZRANDI(a - b);
233 } else if (a < b) {
234 return a + ZRANDI(b - a);
235 } else {
236 return a;
237 }
238}
239
240#endif
void Camera_Init(int n_subjects)
Definition camera.c:163
float f32
Definition types.h:13
signed long s32
Definition types.h:8
HSD_GObj * gobj
Definition gm_19EF.c:73
#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:48
static void Ground_InitScene(void)
Definition inlines.h:73
static void Ground_UpdateStarFoxArwingVisibility(Ground *gp, HSD_JObj *jobj, f32 depth_limit)
Definition inlines.h:156
static void Ground_AttachStarFoxArwingModel(Ground_GObj *gobj, Ground *gp, Ground_GObj *arwing_gobj, int joint_id)
Definition inlines.h:146
static void Ground_InitTargetStage(HSD_GObj *(*create_gobj)(int))
Definition inlines.h:87
static void Ground_AnimateStarFoxArwingWithBackground(Ground_GObj *gobj)
Definition inlines.h:114
static void Ground_LinkStarFoxArwing(Ground *gp, HSD_GObj *linked_gobj)
Definition inlines.h:121
#define GET_GROUND(gobj)
Definition inlines.h:26
static void Ground_ClampSymmetric(f32 value, f32 limit, f32 *out)
Definition inlines.h:206
static void Ground_WrapAngle(f32 *angle)
Definition inlines.h:218
static void Ground_DisableStarFoxArwingGObjs(Ground *gp)
Definition inlines.h:132
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:38
static void Ground_UpdateStarFoxSequence(Ground_GObj *gobj, Ground *gp, int sequence_gobj_id, Ground_GObj *(*create_gobj)(int))
Definition inlines.h:181
static void Ground_ResetStarFoxArwingState(Ground *gp)
Definition inlines.h:138
static int rand_range(int a, int b)
Definition inlines.h:229
static void Stage_InitScene(StKind stkind, s32 *arg1)
Definition inlines.h:81
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:30
#define ZRANDI(n)
Definition inlines.h:227
static void Ground_AnimateStarFoxArwing(Ground_GObj *gobj)
Definition inlines.h:108
static void Ground_SetupStageCallbacks(Ground_GObj *gobj, StageCallbacks *callbacks)
Definition inlines.h:55
static void Ground_ClearStarFoxArwingGObjs(Ground *gp)
Definition inlines.h:100
void grAnime_801C7FF8(Ground_GObj *gobj, int arg1, int arg2, int arg3, float arg4, float arg5)
Definition granime.c:953
void grAnime_801C8138(HSD_GObj *gobj, enum_t arg1, bool arg2)
Definition granime.c:983
void grAnime_801C8098(Ground_GObj *gobj, int arg1, int arg2, int arg3, float arg4, float arg5)
Definition granime.c:968
void grCorneria_801E2738(HSD_GObj *gobj, void *ptr, u32 idx1, u32 idx2)
Definition grcorneria.c:2554
s32 grCorneria_801E2598(u32 arg0, u32 arg1)
Definition grcorneria.c:2486
void grDisplay_801C5DB0(HSD_GObj *gobj, int code)
Definition grdisplay.c:72
void Ground_801C3BB4(void)
Definition ground.c:2249
s32 Ground_801C4210(void)
Definition ground.c:2445
void Ground_801C0378(int arg0)
Definition ground.c:280
Ground_GObj * Ground_GetMapGObj(int map_id)
Definition ground.c:1546
void Ground_801C42AC(void)
Definition ground.c:2466
StageInfo stage_info
Definition ground.c:142
bool Ground_UpdateMapColl(Ground_GObj *arg0)
Re-syncs the collision joints of the map to its animated model.
Definition ground.c:1676
void Ground_801C39C0(void)
Definition ground.c:2142
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:1642
void Ground_801C4A08(HSD_GObj *gobj)
Stage destroy ground gobj.
Definition ground.c:2793
HSD_JObj * Ground_801C3FA4(HSD_GObj *gobj, int depth)
Definition ground.c:2390
void un_802FF570(void)
Definition if_2FF2.c:203
void ifStatus_802F6898(void)
Hide Percentage Digits.
Definition ifstatus.c:959
#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:67
static void HSD_JObjSetTranslate(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:479
void lb_8000C2F8(HSD_JObj *jobj, HSD_JObj *constraint)
Definition lb_00B0.c:418
void lb_800115F4(void)
Definition lb_00F9.c:939
void lb_8000FCDC(void)
Definition lb_00F9.c:108
HSD_GObj Ground_GObj
Definition forward.h:49
StKind
Definition forward.h:144
void mpColl_80041C78(void)
80041C78 https://decomp.me/scratch/V6eYQ
Definition mpcoll.c:79
#define ABS(x)
Definition platform.h:171
#define M_PI
Definition math.h:15
void Stage_802251E8(StKind stkind, s32 *_)
Definition stage.c:496
#define NULL
Definition stddef.h:14
Definition types.h:1799
HSD_GObjEvent xC_callback
Definition types.h:1803
HSD_GObjEvent x8_callback
Definition types.h:1802
GrKind map_id
Definition types.h:1823
union Ground::GroundVars u
HSD_GObjEvent x1C_callback
Definition types.h:1825
Definition gobj.h:16
Definition jobj.h:104
Definition types.h:130
HSD_GObjEvent on_init
Definition types.h:131
void(* callback3)(Ground_GObj *)
Definition types.h:134
HSD_GObjEvent gobj_proc
Definition types.h:133
f32 z
Definition mtx.h:15
Vec3 xE0
Definition types.h:591
f32 xDC
Definition types.h:590
s32 xF0
Definition types.h:434
struct grStarFox_GroundVars::@354204156006373033377214340262116205311112147333::@210210150172014062101102372255344177077320161145 flags
HSD_GObj * article_gobjs[4]
Definition types.h:433
u32 word
Definition types.h:425
union grStarFox_GroundVars::@354204156006373033377214340262116205311112147333 xC4
s32 arwing_slot
Definition types.h:427
HSD_GObj * linked_gobj
Definition types.h:432
s32 xD4
Definition types.h:430
s32 xF4
Definition types.h:435
s32 xCC
Definition types.h:428
u8 b0
Definition types.h:422
GXColorS10 a
Definition tev.c:9
struct grStarFox_GroundVars starfox
Definition types.h:1934
struct grArwing_GroundVars arwing
Definition types.h:1854