SSBM Decomp
All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
gobj.h
Go to the documentation of this file.
1#ifndef GALE01_390730
2#define GALE01_390730
3
4#include <platform.h>
5#include <placeholder.h>
6
7#include "baselib/forward.h" // IWYU pragma: export
8
9#include "baselib/objalloc.h"
10
11#define HSD_GOBJ_GXLINK_NONE ((u8) 0xFF)
12#define HSD_GOBJ_OBJ_NONE 0xFF
13
14#define HSD_GOBJ_CLASS_STAGE 0x3
15#define HSD_GOBJ_CLASS_FIGHTER 0x4
16#define HSD_GOBJ_CLASS_ITEM 0x6
17
19#define HSD_GOBJ_CLASS_ITEMLINK 0x7
20
21#define HSD_GOBJ_CLASS_EFFECT 0x8
22
23struct HSD_GObj {
24 /* +0 */ u16 classifier;
25 /* +2 */ u8 p_link;
26 /* +3 */ u8 gx_link;
27 /* +4 */ u8 p_priority;
28 /* +5 */ u8 render_priority;
29 /* +6 */ u8 obj_kind;
30 /* +7 */ u8 user_data_kind;
31 /* +8 */ HSD_GObj* next;
32 /* +C */ HSD_GObj* prev;
33 /* +10 */ HSD_GObj* next_gx;
34 /* +14 */ HSD_GObj* prev_gx;
35 /* +18 */ HSD_GObjProc* proc;
37 /* +20 */ u64 gxlink_prios;
38 /* +28 */ void* hsd_obj;
39 /* +2C */ void* user_data;
40 /* +30 */ void (*user_data_remove_func)(void* data);
41 /* +34 */ void* x34_unk;
42};
43
44typedef void (*GObjFunc)(HSD_Obj*);
45
46typedef struct _GObjFuncs {
47 struct _GObjFuncs* next;
48 u8 size;
50} GObjFuncs;
51
52typedef struct _HSD_GObjLibInitDataType {
53 u8 p_link_max; // 804CE380
54 u8 gx_link_max; // 804CE381
55 u8 gproc_pri_max; // 804CE382
56 GObjFuncs* funcs; // 804CE384
57 u64* unk_2; // 804CE388
59
61typedef struct _HSD_GObjList {
62 /* +0 */ HSD_GObj* x0;
63 /* +4 */ HSD_GObj* x4;
64 /* +8 */ HSD_GObj* x8;
65 /* +C */ HSD_GObj* xC;
66 /* +10 */ HSD_GObj* x10;
67 /* +14 */ HSD_GObj* x14;
68 /* +18 */ HSD_GObj* x18;
69 /* +1C */ HSD_GObj* x1C;
70 /* +20 */ HSD_GObj* fighters;
71 /* +24 */ HSD_GObj* items;
72 /* +28 */ HSD_GObj* x28;
73 /* +2C */ HSD_GObj* x2C;
74 /* +30 */ HSD_GObj* x30;
75 /* +34 */ HSD_GObj* x34;
76 /* +38 */ HSD_GObj* x38;
77 /* +3C */ HSD_GObj* x3C;
78 /* +40 */ HSD_GObj* x40;
79 /* +44 */ HSD_GObj* x44;
80 /* +48 */ HSD_GObj* x48;
82
83extern struct _unk_gobj_struct {
84 union {
85 u32 flags;
86 struct {
87 u32 b0 : 1;
88 u32 b1 : 1;
89 u32 b2 : 1;
90 u32 b3 : 1;
91 };
92 };
93 u32 type;
98
99
106extern HSD_GObj** plinklow_gobjs;
107// TODO: GObjList is a fake type, this is just a double pointer
108// (pointer to array of HSD_GObj*, indexed by p_link)
111extern s32 HSD_GObj_804D7834;
113extern s32 HSD_GObj_804D783C;
116extern s8 HSD_GObj_804D7848;
117extern s8 HSD_GObj_804D7849;
118extern s8 HSD_GObj_804D784A;
119extern u8 HSD_GObj_804D784B;
120
122
123void HSD_GObj_80390C5C(HSD_GObj* gobj);
124void HSD_GObj_80390C84(HSD_GObj* gobj);
125void HSD_GObj_80390CAC(HSD_GObj* gobj);
126u32 HSD_GObj_80390EB8(s32 i);
127void HSD_GObj_803910D8(HSD_GObj*, int);
129HSD_GObj* GObj_Create(u16 classifier, u8 p_link, u8 priority);
130void HSD_GObj_JObjCallback(HSD_GObj* gobj, int arg1);
131void HSD_GObj_80390CD4(HSD_GObj* gobj);
132void HSD_GObj_80390CFC(void);
133void render_gobj(HSD_GObj* cur, int i);
134void HSD_GObj_80390FC0(void);
135void HSD_GObj_LObjCallback(HSD_GObj* gobj, int unused);
136void HSD_GObj_FogCallback(HSD_GObj* gobj, int unused);
141void HSD_GObj_80390ED0(HSD_GObj* gobj, u32 mask);
143
144static inline void* HSD_GObjGetUserData(HSD_GObj* gobj)
145{
146 return gobj->user_data;
147}
148
149static inline void* HSD_GObjGetHSDObj(HSD_GObj* gobj)
150{
151 return gobj->hsd_obj;
152}
153
154static inline u16 HSD_GObjGetClassifier(HSD_GObj* gobj)
155{
156 return gobj->classifier;
157}
158
159static inline HSD_GObj* HSD_GObjGetNext(HSD_GObj* gobj)
160{
161 return gobj->next;
162}
163
164#define GET_COBJ(gobj) ((HSD_CObj*) HSD_GObjGetHSDObj(gobj))
165#define GET_FOG(gobj) ((HSD_Fog*) HSD_GObjGetHSDObj(gobj))
166#define GET_JOBJ(gobj) ((HSD_JObj*) HSD_GObjGetHSDObj(gobj))
167#define GET_LOBJ(gobj) ((HSD_LObj*) HSD_GObjGetHSDObj(gobj))
168
169#endif
u32 unused
Definition dbcamera.c:20
HSD_GObjList * HSD_GObj_Entities
Definition gobj.c:22
HSD_GObjProc * HSD_GObj_804D7838
Definition gobj.c:19
HSD_GObjProc ** HSD_GObj_804D7844
Definition gobj.c:16
static HSD_GObj * HSD_GObjGetNext(HSD_GObj *gobj)
Definition gobj.h:159
void HSD_GObj_JObjCallback(HSD_GObj *gobj, int arg1)
Definition gobj.c:208
HSD_GObj ** HSD_GObj_804D7824
Definition gobj.c:24
void HSD_GObj_80391304(HSD_GObjLibInitDataType *)
Definition gobjinit.c:22
HSD_GObj * HSD_GObj_804D7814
Definition gobj.c:28
void HSD_GObj_80390CAC(HSD_GObj *gobj)
Definition gobj.c:73
s8 HSD_GObj_804D784A
Definition gobj.c:13
u8 HSD_GObj_804D784B
Definition gobj.c:12
HSD_GObjProc ** HSD_GObj_804D7840
Definition gobj.c:17
void HSD_GObj_80390C5C(HSD_GObj *gobj)
Definition gobj.c:63
GObjFunc * HSD_GObj_804D7810
Definition gobj.c:29
void HSD_GObj_80390CD4(HSD_GObj *gobj)
Definition gobj.c:78
void HSD_GObj_803911C0(HSD_Obj *obj)
Definition gobj.c:240
u8 HSD_GObj_803912A8(HSD_GObjLibInitDataType *, GObjFuncs *)
Definition gobj.c:254
HSD_GObjLibInitDataType HSD_GObjLibInitData
Definition gobj.c:271
void(* GObjFunc)(HSD_Obj *)
Definition gobj.h:44
HSD_GObj ** plinklow_gobjs
Definition gobj.c:23
void HSD_GObj_FogCallback(HSD_GObj *gobj, int unused)
Definition gobj.c:220
HSD_GObj ** HSD_GObj_804D7820
Definition gobj.c:25
HSD_GObjProc * HSD_GObj_804D7830
Definition gobj.c:21
void HSD_GObj_80391260(HSD_GObjLibInitDataType *)
Definition gobj.c:245
s32 HSD_GObj_804D7834
Definition gobj.c:20
void render_gobj(HSD_GObj *cur, int i)
Definition gobj.c:150
static void * HSD_GObjGetUserData(HSD_GObj *gobj)
Definition gobj.h:144
void HSD_GObj_803912E0(HSD_GObjLibInitDataType *arg0)
Definition gobjinit.c:13
void HSD_GObj_80390CFC(void)
Definition gobj.c:89
HSD_GObj * HSD_GObj_804D781C
Definition gobj.c:26
HSD_GObj * HSD_GObj_804D7818
Definition gobj.c:27
void HSD_GObj_80390ED0(HSD_GObj *gobj, u32 mask)
Definition gobj.c:159
void HSD_GObj_LObjCallback(HSD_GObj *gobj, int unused)
Definition gobj.c:202
u32 HSD_GObj_80390EB8(s32 i)
Definition gobj.c:145
static void * HSD_GObjGetHSDObj(HSD_GObj *gobj)
Definition gobj.h:149
void HSD_GObj_80391120(HSD_Obj *obj)
Definition gobj.c:233
s8 HSD_GObj_804D7848
Definition gobj.c:15
void HSD_GObj_80390C84(HSD_GObj *gobj)
Definition gobj.c:68
HSD_GObj * GObj_Create(u16 classifier, u8 p_link, u8 priority)
Definition gobjplink.c:98
void HSD_GObj_803910D8(HSD_GObj *, int)
Definition gobj.c:225
static u16 HSD_GObjGetClassifier(HSD_GObj *gobj)
Definition gobj.h:154
struct _unk_gobj_struct HSD_GObj_804CE3E4
Definition gobj.c:268
s8 HSD_GObj_804D7849
Definition gobj.c:14
s32 HSD_GObj_804D783C
Definition gobj.c:18
void HSD_GObj_80390FC0(void)
Definition gobj.c:187
void * obj
Definition pobj.c:43
int mask
Definition state.c:133
Definition gobj.h:46
struct _GObjFuncs * next
Definition gobj.h:47
u8 size
Definition gobj.h:48
GObjFunc * funcs
Definition gobj.h:49
Definition gobj.h:52
u8 p_link_max
Definition gobj.h:53
GObjFuncs * funcs
Definition gobj.h:56
u8 gx_link_max
Definition gobj.h:54
u8 gproc_pri_max
Definition gobj.h:55
u64 * unk_2
Definition gobj.h:57
Definition gobj.h:61
HSD_GObj * x2C
Definition gobj.h:73
HSD_GObj * x0
Definition gobj.h:62
HSD_GObj * x28
Definition gobj.h:72
HSD_GObj * x44
Definition gobj.h:79
HSD_GObj * x48
Definition gobj.h:80
HSD_GObj * x14
Definition gobj.h:67
HSD_GObj * items
Definition gobj.h:71
HSD_GObj * x38
Definition gobj.h:76
HSD_GObj * fighters
Definition gobj.h:70
HSD_GObj * x40
Definition gobj.h:78
HSD_GObj * x10
Definition gobj.h:66
HSD_GObj * x4
Definition gobj.h:63
HSD_GObj * x30
Definition gobj.h:74
HSD_GObj * x8
Definition gobj.h:64
HSD_GObj * xC
Definition gobj.h:65
HSD_GObj * x18
Definition gobj.h:68
HSD_GObj * x1C
Definition gobj.h:69
HSD_GObj * x34
Definition gobj.h:75
HSD_GObj * x3C
Definition gobj.h:77
Definition gobjproc.h:8
Definition gobj.h:23
u64 gxlink_prios
Definition gobj.h:37
void * hsd_obj
Definition gobj.h:38
u16 classifier
Definition gobj.h:24
u8 p_priority
Definition gobj.h:27
u8 obj_kind
Definition gobj.h:29
HSD_GObj * prev
Definition gobj.h:32
void * x34_unk
Definition gobj.h:41
void * user_data
Definition gobj.h:39
GObj_RenderFunc render_cb
Definition gobj.h:36
HSD_GObj * next_gx
Definition gobj.h:33
HSD_GObj * next
Definition gobj.h:31
u8 render_priority
Definition gobj.h:28
u8 p_link
Definition gobj.h:25
HSD_GObj * prev_gx
Definition gobj.h:34
u8 gx_link
Definition gobj.h:26
HSD_GObjProc * proc
Definition gobj.h:35
u8 user_data_kind
Definition gobj.h:30
void(* user_data_remove_func)(void *data)
Definition gobj.h:40
Definition object.h:60
Definition gobj.h:83
u32 b0
Definition gobj.h:87
u8 p_prio
Definition gobj.h:95
HSD_GObj * gobj
Definition gobj.h:96
u32 b2
Definition gobj.h:89
u32 b1
Definition gobj.h:88
u32 flags
Definition gobj.h:85
u32 b3
Definition gobj.h:90
u32 type
Definition gobj.h:93
u8 p_link
Definition gobj.h:94
void(* GObj_RenderFunc)(HSD_GObj *gobj, int code)
Definition forward.h:102