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
4#include "gr/granime.h"
5#include "gr/grcorneria.h"
6#include "gr/grdisplay.h"
7#include "gr/ground.h"
8#include "gr/types.h"
9#include "if/ifcoget.h"
10#include "if/ifstatus.h"
11#include "lb/lb_00B0.h"
12#include "MSL/math.h"
13
14#include <baselib/forward.h>
15
16#include <baselib/gobj.h>
17#include <baselib/gobjgxlink.h>
18#include <baselib/gobjproc.h>
19#include <baselib/jobj.h>
20#include <baselib/random.h>
21
22#define GET_GROUND(gobj) ((Ground*) HSD_GObjGetUserData(gobj))
23
24static inline void Ground_JObjInline1(Ground_GObj* gobj)
25{
26 Ground* gp = GET_GROUND(gobj);
27 HSD_JObj* jobj = GET_JOBJ(gobj);
28 Ground_801C2ED0(jobj, gp->map_id);
29 grAnime_801C8138(gobj, gp->map_id, 0);
30}
31
33static inline void Ground_SetupStageCallbacks(Ground_GObj* gobj,
34 StageCallbacks* callbacks)
35{
36 Ground* gp = GET_GROUND(gobj);
37 gp->x8_callback = NULL;
38 gp->xC_callback = NULL;
40 if (callbacks->callback3 != NULL) {
41 gp->x1C_callback = callbacks->callback3;
42 }
43 if (callbacks->on_init != NULL) {
44 callbacks->on_init(gobj);
45 }
46 if (callbacks->gobj_proc != NULL) {
47 HSD_GObj_SetupProc(gobj, callbacks->gobj_proc, 4);
48 }
49}
50
51static inline void Ground_InitTargetStage(HSD_GObj* (*create_gobj)(int) )
52{
53 stage_info.unk8C.b4 = false;
54 stage_info.unk8C.b5 = true;
55 create_gobj(0);
56 create_gobj(1);
57 create_gobj(2);
62}
63
65{
66 gp->u.starfox.article_gobjs[3] = NULL;
67 gp->u.starfox.article_gobjs[2] = NULL;
68 gp->u.starfox.article_gobjs[1] = NULL;
69 gp->u.starfox.article_gobjs[0] = NULL;
70}
71
73{
74 grAnime_801C7FF8(gobj, 0, 7, 1, 0.0F, 1.0F);
75 grAnime_801C8098(gobj, 2, 7, 3, 0.0F, 1.0F);
76}
77
79{
80 grAnime_801C7FF8(gobj, 7, 7, 0, 0.0F, 1.0F);
81 grAnime_801C7FF8(gobj, 8, 7, 0, 0.0F, 1.0F);
82 grAnime_801C8098(gobj, 2, 7, 3, 0.0F, 1.0F);
83}
84
85static inline void Ground_LinkStarFoxArwing(Ground* gp, HSD_GObj* linked_gobj)
86{
87 gp->u.starfox.linked_gobj = linked_gobj;
88 if (linked_gobj != NULL) {
89 Ground* linked_gp = GET_GROUND(gp->u.starfox.linked_gobj);
90 if (linked_gp != NULL) {
91 linked_gp->u.starfox.arwing_slot = gp->u.starfox.arwing_slot;
92 }
93 }
94}
95
97{
98 gp->u.starfox.article_gobjs[0] = (HSD_GObj*) -1;
99 gp->u.starfox.article_gobjs[1] = (HSD_GObj*) -1;
100}
101
103{
104 gp->u.starfox.xC4.flags.b0 = false;
105 gp->u.starfox.xD4 = 0;
106 gp->u.starfox.xF0 = 0;
107 gp->u.starfox.xF4 = 0;
108}
109
111 Ground* gp,
112 Ground_GObj* arwing_gobj,
113 int joint_id)
114{
116 Ground_801C3FA4(arwing_gobj, joint_id));
118}
119
121 HSD_JObj* jobj,
122 f32 depth_limit)
123{
124 f32 angle = ABS(gp->u.arwing.xE0.z);
125 if (angle < depth_limit) {
126 gp->u.arwing.xE0.z = 0.0F;
127 while (gp->u.arwing.xDC < -M_PI) {
128 gp->u.arwing.xDC += M_TAU;
129 }
130 while (gp->u.arwing.xDC > M_PI) {
131 gp->u.arwing.xDC -= M_TAU;
132 }
133 if (ABS(gp->u.arwing.xDC) < 1.0471976F) {
135 } else {
137 }
138 } else {
140 }
141 HSD_JObjSetTranslate(jobj, &gp->u.arwing.xE0);
142}
143
144static inline void
146 int sequence_gobj_id,
147 Ground_GObj* (*create_gobj)(int) )
148{
150 un_802FF570();
151
152 if (Ground_GetMapGObj(sequence_gobj_id) == NULL) {
154 gp->u.starfox.arwing_slot))
155 {
156 if ((s32) gp->u.starfox.xCC-- < 0) {
157 Ground_GObj* sequence_gobj = create_gobj(sequence_gobj_id);
159 sequence_gobj, &GET_GROUND(sequence_gobj)->u,
161 gp->u.starfox.arwing_slot++;
162 gp->u.starfox.xCC = 0;
163 }
164 } else if ((s32) gp->u.starfox.xCC-- < 0) {
165 Ground_801C4A08(gobj);
166 }
167 }
168}
169
170static inline void Ground_ClampSymmetric(f32 value, f32 limit, f32* out)
171{
172 if (value > limit) {
173 *out = limit;
174 } else {
175 limit = -limit;
176 if (value < limit) {
177 *out = limit;
178 }
179 }
180}
181
182static inline void Ground_WrapAngle(f32* angle)
183{
184 if (*angle > M_TAU) {
185 *angle -= M_TAU;
186 } else if (*angle < -M_TAU) {
187 *angle += M_TAU;
188 }
189}
190
191#define ZRANDI(n) ((n) != 0 ? HSD_Randi(n) : 0)
192
193static inline int rand_range(int a, int b)
194{
195 if (a > b) {
196 return b + ZRANDI(a - b);
197 } else if (a < b) {
198 return a + ZRANDI(b - a);
199 } else {
200 return a;
201 }
202}
203
204#endif
float f32
Definition types.h:13
#define GET_JOBJ(gobj)
Definition gobj.h:166
HSD_GObjProc * HSD_GObj_SetupProc(HSD_GObj *gobj, void(*func)(HSD_GObj *), u8 pri)
Definition gobjproc.c:150
static void Ground_JObjInline1(Ground_GObj *gobj)
Definition inlines.h:24
static void Ground_UpdateStarFoxArwingVisibility(Ground *gp, HSD_JObj *jobj, f32 depth_limit)
Definition inlines.h:120
static void Ground_AttachStarFoxArwingModel(Ground_GObj *gobj, Ground *gp, Ground_GObj *arwing_gobj, int joint_id)
Definition inlines.h:110
static void Ground_InitTargetStage(HSD_GObj *(*create_gobj)(int))
Definition inlines.h:51
static void Ground_AnimateStarFoxArwingWithBackground(Ground_GObj *gobj)
Definition inlines.h:78
static void Ground_LinkStarFoxArwing(Ground *gp, HSD_GObj *linked_gobj)
Definition inlines.h:85
#define GET_GROUND(gobj)
Definition inlines.h:22
static void Ground_ClampSymmetric(f32 value, f32 limit, f32 *out)
Definition inlines.h:170
static void Ground_WrapAngle(f32 *angle)
Definition inlines.h:182
static void Ground_DisableStarFoxArwingGObjs(Ground *gp)
Definition inlines.h:96
static void Ground_UpdateStarFoxSequence(Ground_GObj *gobj, Ground *gp, int sequence_gobj_id, Ground_GObj *(*create_gobj)(int))
Definition inlines.h:145
static void Ground_ResetStarFoxArwingState(Ground *gp)
Definition inlines.h:102
static int rand_range(int a, int b)
Definition inlines.h:193
#define ZRANDI(n)
Definition inlines.h:191
static void Ground_AnimateStarFoxArwing(Ground_GObj *gobj)
Definition inlines.h:72
static void Ground_SetupStageCallbacks(Ground_GObj *gobj, StageCallbacks *callbacks)
Definition inlines.h:33
static void Ground_ClearStarFoxArwingGObjs(Ground *gp)
Definition inlines.h:64
void grAnime_801C7FF8(Ground_GObj *gobj, int arg1, int arg2, int arg3, float arg4, float arg5)
Definition granime.c:1126
void grAnime_801C8138(HSD_GObj *gobj, enum_t arg1, bool arg2)
Definition granime.c:1156
void grAnime_801C8098(Ground_GObj *gobj, int arg1, int arg2, int arg3, float arg4, float arg5)
Definition granime.c:1141
#define M_TAU
Definition grbigblue.c:110
void grCorneria_801E2738(HSD_GObj *gobj, void *ptr, u32 idx1, u32 idx2)
Definition grcorneria.c:2560
s32 grCorneria_801E2598(u32 arg0, u32 arg1)
Definition grcorneria.c:2500
void grDisplay_801C5DB0(HSD_GObj *gobj, int code)
Definition grdisplay.c:76
void Ground_801C3BB4(void)
Definition ground.c:2259
s32 Ground_801C4210(void)
Definition ground.c:2455
bool Ground_801C2ED0(HSD_JObj *jobj, s32 arg1)
Definition ground.c:1654
Ground_GObj * Ground_GetMapGObj(int map_id)
Definition ground.c:1558
void Ground_801C42AC(void)
Definition ground.c:2476
StageInfo stage_info
Definition ground.c:144
void Ground_801C39C0(void)
Definition ground.c:2152
void Ground_801C4A08(HSD_GObj *gobj)
Stage destroy ground gobj.
Definition ground.c:2803
HSD_JObj * Ground_801C3FA4(HSD_GObj *gobj, int depth)
Definition ground.c:2400
signed long s32
Definition hsd_3B2B.h:1
void un_802FF570(void)
Definition if_2FF2.c:206
void ifStatus_802F6898(void)
Hide Percentage Digits.
Definition ifstatus.c:955
#define M_PI
Definition itparasol.c:14
void HSD_JObjClearFlagsAll(HSD_JObj *jobj, u32 flags)
Definition jobj.c:1036
void HSD_JObjSetFlagsAll(HSD_JObj *jobj, u32 flags)
Definition jobj.c:1010
#define JOBJ_HIDDEN
Definition jobj.h:70
static void HSD_JObjSetTranslate(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:478
void lb_8000C2F8(HSD_JObj *jobj, HSD_JObj *constraint)
Definition lb_00B0.c:430
HSD_GObj Ground_GObj
Definition forward.h:45
#define ABS(x)
Definition math.h:87
#define NULL
Definition stddef.h:19
Definition types.h:1740
HSD_GObjEvent xC_callback
Definition types.h:1744
HSD_GObjEvent x8_callback
Definition types.h:1743
GrKind map_id
Definition types.h:1764
union Ground::GroundVars u
HSD_GObjEvent x1C_callback
Definition types.h:1766
Definition gobj.h:24
Definition jobj.h:107
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:584
f32 xDC
Definition types.h:583
s32 xF0
Definition types.h:435
struct grStarFox_GroundVars::@210210150172014062101102372255344177077320161145::@152153007150201127145031366036005007204267000372 flags
HSD_GObj * article_gobjs[4]
Definition types.h:434
u32 word
Definition types.h:426
s32 arwing_slot
Definition types.h:428
HSD_GObj * linked_gobj
Definition types.h:433
s32 xD4
Definition types.h:431
s32 xF4
Definition types.h:436
s32 xCC
Definition types.h:429
union grStarFox_GroundVars::@210210150172014062101102372255344177077320161145 xC4
u8 b0
Definition types.h:423
GXColorS10 a
Definition tev.c:11
struct grStarFox_GroundVars starfox
Definition types.h:1877
struct grArwing_GroundVars arwing
Definition types.h:1804