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#define HSD_GOBJ_CLASS_LIGHT 0xB
23#define HSD_GOBJ_CLASS_UI 0xE
24#define HSD_GOBJ_CLASS_CAMERA 0x13
25
26struct HSD_GObj {
27 /* +0 */ u16 classifier;
28 /* +2 */ u8 p_link;
29 /* +3 */ u8 gx_link;
30 /* +4 */ u8 p_priority;
31 /* +5 */ u8 render_priority;
32 /* +6 */ u8 obj_kind;
33 /* +7 */ u8 user_data_kind;
34 /* +8 */ HSD_GObj* next;
35 /* +C */ HSD_GObj* prev;
36 /* +10 */ HSD_GObj* next_gx;
37 /* +14 */ HSD_GObj* prev_gx;
38 /* +18 */ HSD_GObjProc* proc;
40 /* +20 */ u64 gxlink_prios;
41 /* +28 */ void* hsd_obj;
42 /* +2C */ void* user_data;
43 /* +30 */ void (*user_data_remove_func)(void* data);
44 /* +34 */ void* x34_unk;
45};
46
47typedef void (*GObjFunc)(HSD_Obj*);
48
49typedef struct _GObjFuncs {
50 struct _GObjFuncs* next;
51 u8 size;
53} GObjFuncs;
54
55typedef struct _HSD_GObjLibInitDataType {
56 u8 p_link_max; // 804CE380
57 u8 gx_link_max; // 804CE381
58 u8 gproc_pri_max; // 804CE382
59 GObjFuncs* funcs; // 804CE384
60 u64* unk_2; // 804CE388
62
64typedef struct _HSD_GObjList {
65 /* +0 */ HSD_GObj* x0;
66 /* +4 */ HSD_GObj* x4;
67 /* +8 */ HSD_GObj* x8;
68 /* +C */ HSD_GObj* xC;
69 /* +10 */ HSD_GObj* x10;
70 /* +14 */ HSD_GObj* x14;
71 /* +18 */ HSD_GObj* x18;
72 /* +1C */ HSD_GObj* x1C;
73 /* +20 */ HSD_GObj* fighters;
74 /* +24 */ HSD_GObj* items;
75 /* +28 */ HSD_GObj* x28;
76 /* +2C */ HSD_GObj* x2C;
77 /* +30 */ HSD_GObj* x30;
78 /* +34 */ HSD_GObj* x34;
79 /* +38 */ HSD_GObj* x38;
80 /* +3C */ HSD_GObj* x3C;
81 /* +40 */ HSD_GObj* x40;
82 /* +44 */ HSD_GObj* x44;
83 /* +48 */ HSD_GObj* x48;
85
86extern struct _unk_gobj_struct {
87 union {
88 u32 flags;
89 struct {
90 u32 b0 : 1;
91 u32 b1 : 1;
92 u32 b2 : 1;
93 u32 b3 : 1;
94 };
95 };
96 u32 type;
101
108extern HSD_GObj** plinklow_gobjs;
109// TODO: GObjList is a fake type, this is just a double pointer
110// (pointer to array of HSD_GObj*, indexed by p_link)
113extern s32 HSD_GObj_804D7834;
115extern s32 HSD_GObj_804D783C;
118extern s8 HSD_GObj_804D7848;
119extern s8 HSD_GObj_804D7849;
120extern s8 HSD_GObj_804D784A;
121extern u8 HSD_GObj_804D784B;
122
124
125void HSD_GObj_80390C5C(HSD_GObj* gobj);
126void HSD_GObj_80390C84(HSD_GObj* gobj);
127void HSD_GObj_80390CAC(HSD_GObj* gobj);
128u32 HSD_GObj_80390EB8(s32 i);
129void HSD_GObj_803910D8(HSD_GObj*, int);
131HSD_GObj* GObj_Create(u16 classifier, u8 p_link, u8 priority);
132void HSD_GObj_JObjCallback(HSD_GObj* gobj, int arg1);
133void HSD_GObj_80390CD4(HSD_GObj* gobj);
134void HSD_GObj_80390CFC(void);
135void render_gobj(HSD_GObj* cur, int i);
136void HSD_GObj_80390FC0(void);
137void HSD_GObj_LObjCallback(HSD_GObj* gobj, int unused);
138void HSD_GObj_FogCallback(HSD_GObj* gobj, int unused);
143void HSD_GObj_80390ED0(HSD_GObj* gobj, u32 mask);
145
146static inline void* HSD_GObjGetUserData(HSD_GObj* gobj)
147{
148 return gobj->user_data;
149}
150
151static inline void* HSD_GObjGetHSDObj(HSD_GObj* gobj)
152{
153 return gobj->hsd_obj;
154}
155
156static inline u16 HSD_GObjGetClassifier(HSD_GObj* gobj)
157{
158 return gobj->classifier;
159}
160
161static inline HSD_GObj* HSD_GObjGetNext(HSD_GObj* gobj)
162{
163 return gobj->next;
164}
165
166#define GET_COBJ(gobj) ((HSD_CObj*) HSD_GObjGetHSDObj(gobj))
167#define GET_FOG(gobj) ((HSD_Fog*) HSD_GObjGetHSDObj(gobj))
168#define GET_JOBJ(gobj) ((HSD_JObj*) HSD_GObjGetHSDObj(gobj))
169#define GET_LOBJ(gobj) ((HSD_LObj*) HSD_GObjGetHSDObj(gobj))
170
171#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:161
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:47
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:146
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:151
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:156
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:49
struct _GObjFuncs * next
Definition gobj.h:50
u8 size
Definition gobj.h:51
GObjFunc * funcs
Definition gobj.h:52
Definition gobj.h:55
u8 p_link_max
Definition gobj.h:56
GObjFuncs * funcs
Definition gobj.h:59
u8 gx_link_max
Definition gobj.h:57
u8 gproc_pri_max
Definition gobj.h:58
u64 * unk_2
Definition gobj.h:60
Definition gobj.h:64
HSD_GObj * x2C
Definition gobj.h:76
HSD_GObj * x0
Definition gobj.h:65
HSD_GObj * x28
Definition gobj.h:75
HSD_GObj * x44
Definition gobj.h:82
HSD_GObj * x48
Definition gobj.h:83
HSD_GObj * x14
Definition gobj.h:70
HSD_GObj * items
Definition gobj.h:74
HSD_GObj * x38
Definition gobj.h:79
HSD_GObj * fighters
Definition gobj.h:73
HSD_GObj * x40
Definition gobj.h:81
HSD_GObj * x10
Definition gobj.h:69
HSD_GObj * x4
Definition gobj.h:66
HSD_GObj * x30
Definition gobj.h:77
HSD_GObj * x8
Definition gobj.h:67
HSD_GObj * xC
Definition gobj.h:68
HSD_GObj * x18
Definition gobj.h:71
HSD_GObj * x1C
Definition gobj.h:72
HSD_GObj * x34
Definition gobj.h:78
HSD_GObj * x3C
Definition gobj.h:80
Definition gobjproc.h:8
Definition gobj.h:26
u64 gxlink_prios
Definition gobj.h:40
void * hsd_obj
Definition gobj.h:41
u16 classifier
Definition gobj.h:27
u8 p_priority
Definition gobj.h:30
u8 obj_kind
Definition gobj.h:32
HSD_GObj * prev
Definition gobj.h:35
void * x34_unk
Definition gobj.h:44
void * user_data
Definition gobj.h:42
GObj_RenderFunc render_cb
Definition gobj.h:39
HSD_GObj * next_gx
Definition gobj.h:36
HSD_GObj * next
Definition gobj.h:34
u8 render_priority
Definition gobj.h:31
u8 p_link
Definition gobj.h:28
HSD_GObj * prev_gx
Definition gobj.h:37
u8 gx_link
Definition gobj.h:29
HSD_GObjProc * proc
Definition gobj.h:38
u8 user_data_kind
Definition gobj.h:33
void(* user_data_remove_func)(void *data)
Definition gobj.h:43
Definition object.h:60
Definition gobj.h:86
u32 b0
Definition gobj.h:90
u8 p_prio
Definition gobj.h:98
HSD_GObj * gobj
Definition gobj.h:99
u32 b2
Definition gobj.h:92
u32 b1
Definition gobj.h:91
u32 flags
Definition gobj.h:88
u32 b3
Definition gobj.h:93
u32 type
Definition gobj.h:96
u8 p_link
Definition gobj.h:97
void(* GObj_RenderFunc)(HSD_GObj *gobj, int code)
Definition forward.h:102