SSBM Decomp
Loading...
Searching...
No Matches
jobj.h
Go to the documentation of this file.
1#ifndef _jobj_h_
2#define _jobj_h_
3
4#include <platform.h>
5
6#include "baselib/forward.h" // IWYU pragma: export
8
9#include "baselib/aobj.h"
10#include "baselib/class.h"
11#include "baselib/debug.h"
12#include "baselib/list.h"
13#include "baselib/object.h"
14#include "baselib/pobj.h"
15
16#include <dolphin/mtx.h>
17
18struct HSD_JObj;
19
20#define JOBJ_PTCL_ACTIVE 0x7FFFFFFF
21#define JOBJ_PTCL_OFFSET_MASK 0xFFFFFF
22#define JOBJ_PTCL_OFFSET_SHIFT 6
23#define JOBJ_PTCL_BANK_MASK 0x3F
24
25#define HSD_A_J_ROTX 1
26#define HSD_A_J_ROTY 2
27#define HSD_A_J_ROTZ 3
28#define HSD_A_J_PATH 4
29#define HSD_A_J_TRAX 5
30#define HSD_A_J_TRAY 6
31#define HSD_A_J_TRAZ 7
32#define HSD_A_J_SCAX 8
33#define HSD_A_J_SCAY 9
34#define HSD_A_J_SCAZ 10
35#define HSD_A_J_NODE 11
36#define HSD_A_J_BRANCH 12
37
38#define HSD_A_J_SETBYTE0 20
39#define HSD_A_J_SETBYTE1 21
40#define HSD_A_J_SETBYTE2 22
41#define HSD_A_J_SETBYTE3 23
42#define HSD_A_J_SETBYTE4 24
43#define HSD_A_J_SETBYTE5 25
44#define HSD_A_J_SETBYTE6 26
45#define HSD_A_J_SETBYTE7 27
46#define HSD_A_J_SETBYTE8 28
47#define HSD_A_J_SETBYTE9 29
48
49#define HSD_A_J_SETFLOAT0 30
50#define HSD_A_J_SETFLOAT1 31
51#define HSD_A_J_SETFLOAT2 32
52#define HSD_A_J_SETFLOAT3 33
53#define HSD_A_J_SETFLOAT4 34
54#define HSD_A_J_SETFLOAT5 35
55#define HSD_A_J_SETFLOAT6 36
56#define HSD_A_J_SETFLOAT7 37
57#define HSD_A_J_SETFLOAT8 38
58#define HSD_A_J_SETFLOAT9 39
59
60#define JOBJ_BILLBOARD_FIELD 0xE00
61#define JOBJ_BILLBOARD 0x200
62#define JOBJ_VBILLBOARD 0x400
63#define JOBJ_HBILLBOARD 0x600
64#define JOBJ_RBILLBOARD 0x800
65#define JOBJ_PBILLBOARD 0x2000
66
67#define JOBJ_SKELETON (1 << 0)
68#define JOBJ_SKELETON_ROOT (1 << 1)
69#define JOBJ_ENVELOPE_MODEL (1 << 2)
70#define JOBJ_CLASSICAL_SCALE (1 << 3)
71#define JOBJ_HIDDEN (1 << 4)
72#define JOBJ_PTCL (1 << 5)
73#define JOBJ_MTX_DIRTY (1 << 6)
74#define JOBJ_LIGHTING (1 << 7)
75#define JOBJ_TEXGEN (1 << 8)
76#define JOBJ_INSTANCE (1 << 12)
77#define JOBJ_SPLINE (1 << 14)
78#define JOBJ_FLIP_IK (1 << 15)
79#define JOBJ_SPECULAR (1 << 16)
80#define JOBJ_USE_QUATERNION (1 << 17)
81#define JOBJ_UNK_B18 (1 << 18)
82#define JOBJ_UNK_B19 (1 << 19)
83#define JOBJ_UNK_B20 (1 << 20)
84#define JOBJ_NULL_OBJ (0 << 21)
85#define JOBJ_JOINT1 (1 << 21)
86#define JOBJ_JOINT2 (2 << 21)
87#define JOBJ_JOINT (3 << 21)
88#define JOBJ_EFFECTOR (3 << 21)
89#define JOBJ_USER_DEF_MTX (1 << 23)
90#define JOBJ_MTX_INDEP_PARENT (1 << 24)
91#define JOBJ_MTX_INDEP_SRT (1 << 25)
92#define JOBJ_UNK_B26 (1 << 26)
93#define JOBJ_UNK_B27 (1 << 27)
94#define JOBJ_ROOT_OPA (1 << 28)
95#define JOBJ_ROOT_XLU (1 << 29)
96#define JOBJ_ROOT_TEXEDGE (1 << 30)
97
98#define JOBJ_ROOT_MASK (JOBJ_ROOT_OPA | JOBJ_ROOT_TEXEDGE | JOBJ_ROOT_XLU)
99
100#define union_type_ptcl(o) ((o)->flags & JOBJ_PTCL ? true : false)
101#define union_type_spline(o) ((o)->flags & JOBJ_SPLINE ? true : false)
102#define union_type_dobj(o) \
103 ((o)->flags & (JOBJ_PTCL | JOBJ_SPLINE) ? false : true)
104
105#define HSD_JOBJ_INFO(i) ((HSD_JObjInfo*) (i))
106#define HSD_JOBJ_METHOD(o) HSD_JOBJ_INFO((o)->object.parent.class_info)
107
108struct HSD_JObj {
109 /* +0 */ HSD_Obj object;
110 /* +8 */ HSD_JObj* next;
111 /* +C */ HSD_JObj* parent;
112 /* +10 */ HSD_JObj* child;
113 /* +14 */ u32 flags;
114 /* +18 */ union {
116 struct HSD_DObj* dobj;
118 } u;
119 /* +1C */ Quaternion rotate;
120 /* +2C */ Vec3 scale;
121 /* +38 */ Vec3 translate;
122 /* +44 */ Mtx mtx;
123 /* +74 */ Vec3* scl;
125 /* +7C */ HSD_AObj* aobj;
126 /* +80 */ HSD_RObj* robj;
127 /* +84 */ u32 id;
128};
129STATIC_ASSERT(sizeof(struct HSD_JObj) == 0x88);
130
147
148typedef struct _HSD_JObjInfo {
150 s32 (*load)(HSD_JObj* jobj, HSD_Joint* joint, HSD_JObj* jobj_2);
151 void (*make_mtx)(HSD_JObj* jobj);
152 void (*make_pmtx)(HSD_JObj* jobj, Mtx mtx, Mtx rmtx);
153 void (*disp)(HSD_JObj* jobj, Mtx vmtx, Mtx pmtx, HSD_TrspMask trsp_mask,
154 u32 rendermode);
155 void (*release_child)(HSD_JObj* jobj);
157
158extern HSD_JObjInfo hsdJObj;
160typedef void (*DPCtlCallback)(int, int lo, int hi, HSD_JObj* jobj);
161
163
164void HSD_JObjCheckDepend(HSD_JObj* jobj);
167void HSD_JObjResetRST(HSD_JObj* jobj, HSD_Joint* joint);
170void HSD_JObjUnref(HSD_JObj* jobj);
173struct HSD_DObj* HSD_JObjGetDObj(HSD_JObj* jobj);
183void HSD_JObjSetCurrent(HSD_JObj* jobj);
186void HSD_JObjDispAll(HSD_JObj* jobj, Mtx vmtx, u32 flags, u32 rendermode);
187void HSD_JObjRemoveAnim(HSD_JObj* jobj);
191 f32** cb_args);
192void HSD_JObjPrependRObj(HSD_JObj* jobj, HSD_RObj* robj);
193void HSD_JObjDeleteRObj(HSD_JObj* jobj, HSD_RObj* robj);
194
195static inline HSD_JObj* HSD_JObjGetChild(HSD_JObj* jobj)
196{
197 if (jobj == NULL) {
198 return NULL;
199 } else {
200 return jobj->child;
201 }
202}
203
204static inline HSD_JObj* HSD_JObjGetNext(HSD_JObj* jobj)
205{
206 if (jobj == NULL) {
207 return NULL;
208 } else {
209 return jobj->next;
210 }
211}
212
214{
215 if (jobj == NULL) {
216 return NULL;
217 } else {
218 return jobj->parent;
219 }
220}
221
222static inline HSD_RObj* HSD_JObjGetRObj(HSD_JObj* jobj)
223{
224 HSD_ASSERT(405, jobj);
225 return jobj->robj;
226}
227
228static inline bool HSD_JObjMtxIsDirty(HSD_JObj* jobj)
229{
230 bool result;
231 HSD_ASSERT(564, jobj);
232 result = false;
233 if (!(jobj->flags & JOBJ_USER_DEF_MTX) && (jobj->flags & JOBJ_MTX_DIRTY)) {
234 result = true;
235 }
236 return result;
237}
238
240{
241 if (!jobj || !HSD_JObjMtxIsDirty(jobj)) {
242 return;
243 }
245}
246
247// Why does this seem to be a define while the others are inline functions?
248#define HSD_JObjSetMtxDirty(jobj) \
249 { \
250 if (jobj != NULL && !HSD_JObjMtxIsDirty(jobj)) { \
251 HSD_JObjSetMtxDirtySub(jobj); \
252 } \
253 }
254
255static inline void HSD_JObjSetRotation(HSD_JObj* jobj, Quaternion* rotate)
256{
257 HSD_ASSERT(618, jobj);
258 HSD_ASSERT(619, rotate);
259 jobj->rotate = *rotate;
260 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
262 }
263}
264
265static inline void HSD_JObjSetRotationX(HSD_JObj* jobj, f32 x)
266{
267 HSD_ASSERT(639, jobj);
268 HSD_ASSERT(640, !(jobj->flags & JOBJ_USE_QUATERNION));
269 jobj->rotate.x = x;
270 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
272 }
273}
274
275static inline void HSD_JObjSetRotationY(HSD_JObj* jobj, f32 y)
276{
277 HSD_ASSERT(660, jobj);
278 HSD_ASSERT(661, !(jobj->flags & JOBJ_USE_QUATERNION));
279 jobj->rotate.y = y;
280 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
282 }
283}
284
285static inline void HSD_JObjSetRotationZ(HSD_JObj* jobj, f32 z)
286{
287 HSD_ASSERT(681, jobj);
288 HSD_ASSERT(682, !(jobj->flags & JOBJ_USE_QUATERNION));
289 jobj->rotate.z = z;
290 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
292 }
293}
294
295static inline void HSD_JObjGetRotation(HSD_JObj* jobj, Quaternion* quat)
296{
297 HSD_ASSERT(699, jobj);
298 *quat = jobj->rotate;
299}
300
302{
303 HSD_ASSERT(715, jobj);
304 return jobj->rotate.x;
305}
306
308{
309 HSD_ASSERT(730, jobj);
310 return jobj->rotate.y;
311}
312
314{
315 HSD_ASSERT(745, jobj);
316 return jobj->rotate.z;
317}
318
319static inline void HSD_JObjSetScale(HSD_JObj* jobj, Vec3* scale)
320{
321 HSD_ASSERT(760, jobj);
322 HSD_ASSERT(761, scale);
323 jobj->scale = *scale;
324 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
326 }
327}
328
329static inline void HSD_JObjSetScaleX(HSD_JObj* jobj, f32 x)
330{
331 HSD_ASSERT(776, jobj);
332 jobj->scale.x = x;
333 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
335 }
336}
337
338static inline void HSD_JObjSetScaleY(HSD_JObj* jobj, f32 y)
339{
340 HSD_ASSERT(791, jobj);
341 jobj->scale.y = y;
342 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
344 }
345}
346
347static inline void HSD_JObjSetScaleZ(HSD_JObj* jobj, f32 z)
348{
349 HSD_ASSERT(806, jobj);
350 jobj->scale.z = z;
351 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
353 }
354}
355
356static inline void HSD_JObjGetScale(HSD_JObj* jobj, Vec3* scale)
357{
358 HSD_ASSERT(823, jobj);
359 HSD_ASSERT(824, scale);
360 *scale = jobj->scale;
361}
362
363static inline f32 HSD_JObjGetScaleX(HSD_JObj* jobj)
364{
365 HSD_ASSERT(875, jobj);
366 return jobj->scale.x;
367}
368
369static inline f32 HSD_JObjGetScaleY(HSD_JObj* jobj)
370{
371 HSD_ASSERT(888, jobj);
372 return jobj->scale.y;
373}
374
375static inline f32 HSD_JObjGetScaleZ(HSD_JObj* jobj)
376{
377 HSD_ASSERT(901, jobj);
378 return jobj->scale.z;
379}
380
381static inline void HSD_JObjSetTranslate(HSD_JObj* jobj, Vec3* translate)
382{
383 HSD_ASSERT(916, jobj);
384 HSD_ASSERT(917, translate);
385 jobj->translate = *translate;
386 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
388 }
389}
390
391static inline void HSD_JObjSetTranslateX(HSD_JObj* jobj, f32 x)
392{
393 HSD_ASSERT(932, jobj);
394 jobj->translate.x = x;
395 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
397 }
398}
399
400static inline void HSD_JObjSetTranslateY(HSD_JObj* jobj, f32 y)
401{
402 HSD_ASSERT(947, jobj);
403 jobj->translate.y = y;
404 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
406 }
407}
408
409static inline void HSD_JObjSetTranslateZ(HSD_JObj* jobj, f32 z)
410{
411 HSD_ASSERT(962, jobj);
412 jobj->translate.z = z;
413 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
415 }
416}
417
418static inline void HSD_JObjGetTranslation(HSD_JObj* jobj, Vec3* translate)
419{
420 HSD_ASSERT(979, jobj);
421 HSD_ASSERT(980, translate);
422 *translate = jobj->translate;
423}
424
427static inline void HSD_JObjGetTranslation2(HSD_JObj* jobj, Vec3* translate)
428{
429 HSD_ASSERT(979, jobj);
430 *translate = jobj->translate;
431}
432
434{
435 HSD_ASSERT(993, jobj);
436 return jobj->translate.x;
437}
438
440{
441 HSD_ASSERT(1006, jobj);
442 return jobj->translate.y;
443}
444
445static inline float HSD_JObjGetTranslationZ(HSD_JObj* jobj)
446{
447 HSD_ASSERT(1019, jobj);
448 return jobj->translate.z;
449}
450
451static inline void HSD_JObjAddRotationX(HSD_JObj* jobj, float x)
452{
453 HSD_ASSERT(1029, jobj);
454 jobj->rotate.x += x;
455 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
457 }
458}
459
460static inline void HSD_JObjAddRotationY(HSD_JObj* jobj, float y)
461{
462 HSD_ASSERT(1041, jobj);
463 jobj->rotate.y += y;
464 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
466 }
467}
468
469static inline void HSD_JObjAddRotationZ(HSD_JObj* jobj, float z)
470{
471 HSD_ASSERT(1053, jobj);
472 jobj->rotate.z += z;
473 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
475 }
476}
477
478static inline void HSD_JObjAddScaleX(HSD_JObj* jobj, float x)
479{
480 // ((jobj) ? ((void) 0) : __assert("jobj.h", 1065, "jobj"));
481 HSD_ASSERT(1065, jobj);
482 jobj->scale.x += x;
483 // if (!(jobj->flags & (1 << 25))) {
484 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
485 // { if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) {
486 // HSD_JObjSetMtxDirtySub(jobj); } };
488 }
489}
490
491static inline void HSD_JObjAddScaleY(HSD_JObj* jobj, float y)
492{
493 // ((jobj) ? ((void) 0) : __assert("jobj.h", 1077, "jobj"));
494 HSD_ASSERT(1077, jobj);
495 jobj->scale.y += y;
496 // if (!(jobj->flags & (1 << 25))) {
497 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
498 // { if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) {
499 // HSD_JObjSetMtxDirtySub(jobj); } };
501 }
502}
503
504static inline void HSD_JObjAddScaleZ(HSD_JObj* jobj, float z)
505{
506 // ((jobj) ? ((void) 0) : __assert("jobj.h", 1089, "jobj"));
507 HSD_ASSERT(1089, jobj);
508 jobj->scale.z += z;
509 // if (!(jobj->flags & (1 << 25))) {
510 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
511 // { if (jobj != ((void*) 0) && !HSD_JObjMtxIsDirty(jobj)) {
512 // HSD_JObjSetMtxDirtySub(jobj); } };
514 }
515}
516
517static inline void HSD_JObjAddTranslationX(HSD_JObj* jobj, float x)
518{
519 HSD_ASSERT(1102, jobj);
520 jobj->translate.x += x;
521 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
523 }
524}
525
526static inline void HSD_JObjAddTranslationY(HSD_JObj* jobj, float y)
527{
528 HSD_ASSERT(1114, jobj);
529 jobj->translate.y += y;
530 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
532 }
533}
534
535static inline void HSD_JObjAddTranslationZ(HSD_JObj* jobj, float z)
536{
537 HSD_ASSERT(1126, jobj);
538 jobj->translate.z += z;
539 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
541 }
542}
543
548
550{
551 HSD_ASSERT(1144, jobj);
553 return jobj->mtx;
554}
555
556static inline void HSD_JObjCopyMtx(HSD_JObj* jobj, Mtx mtx)
557{
558 HSD_ASSERT(1170, jobj);
559 HSD_ASSERT(1171, mtx);
560 PSMTXCopy(mtx, jobj->mtx);
561}
562
563static inline void HSD_JObjRef(HSD_JObj* jobj)
564{
565 ref_INC(jobj);
566}
567
568static inline void HSD_JObjRefThis(HSD_JObj* jobj)
569{
570 if (jobj != NULL) {
571 iref_INC(jobj);
572 }
573}
574
575void HSD_JObjResolveRefs(HSD_JObj* jobj, HSD_Joint* joint);
576void HSD_JObjUnrefThis(HSD_JObj* jobj);
577void HSD_JObjRefThis(HSD_JObj* jobj);
578void HSD_JObjMakeMatrix(HSD_JObj* jobj);
580void HSD_JObjAddChild(HSD_JObj* jobj, HSD_JObj* child);
582void HSD_JObjAddDObj(HSD_JObj* jobj, HSD_DObj* dobj);
584void resolveIKJoint1(HSD_JObj* jobj);
585void resolveIKJoint2(HSD_JObj* jobj);
588int JObjInit(HSD_Class* o);
589void JObjReleaseChild(HSD_JObj* jobj);
590void JObjRelease(HSD_Class* o);
592void JObjAmnesia(HSD_ClassInfo* info);
593void HSD_JObjReqAnimByFlags(HSD_JObj* jobj, u32 flags, f32 frame);
595void HSD_JObjReqAnim(HSD_JObj* jobj, f32 frame);
597void JObjResetRST(HSD_JObj* jobj, HSD_Joint* joint);
598void JObjUpdateFunc(void* obj, enum_t type, HSD_ObjData* val);
599void HSD_JObjAnim(HSD_JObj* jobj);
600void JObjAnimAll(HSD_JObj* jobj);
602
603void HSD_JObjAddAnim(HSD_JObj*, HSD_AnimJoint* an_joint,
604 HSD_MatAnimJoint* mat_joint,
605 HSD_ShapeAnimJoint* sh_joint);
607 f32** cb_args);
608
609#endif
#define HSD_ASSERT(line, cond)
Definition debug.h:20
f32(* MtxPtr)[4]
Definition forward.h:7
f32 Mtx[3][4]
Definition forward.h:6
void PSMTXCopy(const Mtx src, Mtx dst)
void cb(s32 param_1, DVDCommandBlock *block)
Definition fstload.c:21
Mtx mtx
Definition ftparts.c:62
static float const scale
Definition itlgunray.c:24
void HSD_JObjMakeMatrix(HSD_JObj *jobj)
Definition jobj.c:142
struct HSD_DObj * HSD_JObjGetDObj(HSD_JObj *jobj)
Definition jobj.c:944
u32 HSD_JObjGetFlags(HSD_JObj *jobj)
Definition jobj.c:998
void HSD_JObjSetupMatrixSub(HSD_JObj *)
Definition jobj.c:1401
void HSD_JObjUnrefThis(HSD_JObj *jobj)
Definition jobj.c:740
void HSD_JObjPrependRObj(HSD_JObj *jobj, HSD_RObj *robj)
Definition jobj.c:970
static void HSD_JObjSetRotationZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:285
void HSD_JObjClearFlags(HSD_JObj *, u32 flags)
Definition jobj.c:1032
void lbColl_JObjSetupMatrix(HSD_JObj *)
Definition lbcollision.c:1580
void HSD_JObjSetDPtclCallback(DPCtlCallback cb)
Definition jobj.c:1477
void HSD_JObjReqAnimByFlags(HSD_JObj *jobj, u32 flags, f32 frame)
Definition jobj.c:240
static void HSD_JObjAddScaleZ(HSD_JObj *jobj, float z)
Definition jobj.h:504
static void HSD_JObjSetRotationY(HSD_JObj *jobj, f32 y)
Definition jobj.h:275
static HSD_JObj * HSD_JObjGetNext(HSD_JObj *jobj)
Definition jobj.h:204
HSD_JObj * HSD_JObjGetCurrent(void)
Definition jobj.c:1073
static void HSD_JObjSetTranslateY(HSD_JObj *jobj, f32 y)
Definition jobj.h:400
static HSD_JObj * HSD_JObjGetChild(HSD_JObj *jobj)
Definition jobj.h:195
static f32 HSD_JObjGetScaleZ(HSD_JObj *jobj)
Definition jobj.h:375
void RecalcParentTrspBits(HSD_JObj *jobj)
Definition jobj.c:808
static HSD_JObj * HSD_JObjGetParent(HSD_JObj *jobj)
Definition jobj.h:213
void resolveIKJoint1(HSD_JObj *jobj)
Definition jobj.c:1119
void HSD_JObjWalkTree0(HSD_JObj *jobj, HSD_JObjWalkTreeCallback cb, f32 **cb_args)
Definition jobj.c:93
#define JOBJ_MTX_INDEP_SRT
Definition jobj.h:91
static void HSD_JObjAddRotationZ(HSD_JObj *jobj, float z)
Definition jobj.h:469
#define JOBJ_MTX_DIRTY
Definition jobj.h:73
void resolveIKJoint2(HSD_JObj *jobj)
Definition jobj.c:1273
static void HSD_JObjAddRotationX(HSD_JObj *jobj, float x)
Definition jobj.h:451
void HSD_JObjAddAnimAll(HSD_JObj *, HSD_AnimJoint *, HSD_MatAnimJoint *, HSD_ShapeAnimJoint *)
Definition jobj.c:327
static void HSD_JObjSetScaleX(HSD_JObj *jobj, f32 x)
Definition jobj.h:329
static f32 HSD_JObjGetRotationY(HSD_JObj *jobj)
Definition jobj.h:307
void HSD_JObjAddNext(HSD_JObj *jobj, HSD_JObj *next)
Definition jobj.c:891
void HSD_JObjDeleteRObj(HSD_JObj *jobj, HSD_RObj *robj)
Definition jobj.c:978
static HSD_RObj * HSD_JObjGetRObj(HSD_JObj *jobj)
Definition jobj.h:222
void HSD_JObjRemoveAnimAll(HSD_JObj *jobj)
Definition jobj.c:235
static void HSD_JObjAddTranslationY(HSD_JObj *jobj, float y)
Definition jobj.h:526
HSD_JObjInfo hsdJObj
Definition jobj.c:25
static f32 HSD_JObjGetTranslationX(HSD_JObj *jobj)
Definition jobj.h:433
static void HSD_JObjGetRotation(HSD_JObj *jobj, Quaternion *quat)
Definition jobj.h:295
void HSD_JObjWalkTree(HSD_JObj *jobj, HSD_JObjWalkTreeCallback cb, f32 **cb_args)
Definition jobj.c:115
static void HSD_JObjAddTranslationX(HSD_JObj *jobj, float x)
Definition jobj.h:517
void HSD_JObjResolveRefsAll(HSD_JObj *, HSD_Joint *)
Definition jobj.c:711
void HSD_JObjAddAnim(HSD_JObj *, HSD_AnimJoint *an_joint, HSD_MatAnimJoint *mat_joint, HSD_ShapeAnimJoint *sh_joint)
Definition jobj.c:302
static float HSD_JObjGetTranslationZ(HSD_JObj *jobj)
Definition jobj.h:445
static void HSD_JObjCopyMtx(HSD_JObj *jobj, Mtx mtx)
Definition jobj.h:556
void HSD_JObjRemoveAnimByFlags(HSD_JObj *jobj, u32 flags)
Definition jobj.c:202
void HSD_JObjRemoveAnim(HSD_JObj *jobj)
Definition jobj.c:230
void HSD_JObjReqAnimAllByFlags(HSD_JObj *jobj, u32 flags, f32 frame)
Definition jobj.c:259
void HSD_JObjAddChild(HSD_JObj *jobj, HSD_JObj *child)
Definition jobj.c:837
void HSD_JObjRemoveAll(HSD_JObj *)
Definition jobj.c:783
static void HSD_JObjSetScale(HSD_JObj *jobj, Vec3 *scale)
Definition jobj.h:319
int JObjInit(HSD_Class *o)
Definition jobj.c:1482
void HSD_JObjCheckDepend(HSD_JObj *jobj)
Definition jobj.c:34
static f32 HSD_JObjGetScaleX(HSD_JObj *jobj)
Definition jobj.h:363
void HSD_JObjSetFlags(HSD_JObj *, u32 flags)
Definition jobj.c:1006
static void HSD_JObjSetScaleZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:347
static void HSD_JObjSetRotationX(HSD_JObj *jobj, f32 x)
Definition jobj.h:265
static void HSD_JObjSetTranslateX(HSD_JObj *jobj, f32 x)
Definition jobj.h:391
HSD_JObj * HSD_JObjAlloc(void)
Definition jobj.c:1058
static void HSD_JObjGetTranslation2(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:427
void JObjResetRST(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:61
HSD_JObj * HSD_JObjRemove(HSD_JObj *jobj)
Definition jobj.c:749
static void HSD_JObjGetTranslation(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:418
void HSD_JObjSetDefaultClass(HSD_ClassInfo *info)
Definition jobj.c:611
static void HSD_JObjSetScaleY(HSD_JObj *jobj, f32 y)
Definition jobj.h:338
void HSD_JObjReqAnim(HSD_JObj *jobj, f32 frame)
Definition jobj.c:278
static void HSD_JObjAddTranslationZ(HSD_JObj *jobj, float z)
Definition jobj.h:535
HSD_JObj * jobj_get_effector_checked(HSD_JObj *eff)
Definition jobj.c:1102
void HSD_JObjSetCurrent(HSD_JObj *jobj)
Definition jobj.c:1066
void JObjReleaseChild(HSD_JObj *jobj)
Definition jobj.c:1496
void HSD_JObjAnim(HSD_JObj *jobj)
Definition jobj.c:535
void JObjSortAnim(HSD_AObj *aobj)
Definition jobj.c:283
void HSD_JObjAddDObj(HSD_JObj *jobj, HSD_DObj *dobj)
Definition jobj.c:952
void HSD_JObjSetupMatrix(HSD_JObj *jobj)
Definition jobj.h:239
void HSD_JObjRemoveAnimAllByFlags(HSD_JObj *jobj, u32 flags)
Definition jobj.c:216
void HSD_JObjReqAnimAll(HSD_JObj *, f32)
Definition jobj.c:273
void JObjUpdateFunc(void *obj, enum_t type, HSD_ObjData *val)
Definition jobj.c:355
#define HSD_JObjSetMtxDirty(jobj)
Definition jobj.h:248
#define JOBJ_USE_QUATERNION
Definition jobj.h:80
void HSD_JObjResolveRefs(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:691
HSD_JObj * HSD_JObjReparent(HSD_JObj *jobj, HSD_JObj *parent)
Definition jobj.c:867
static void HSD_JObjAddRotationY(HSD_JObj *jobj, float y)
Definition jobj.h:460
static void HSD_JObjAddScaleY(HSD_JObj *jobj, float y)
Definition jobj.h:491
void JObjRelease(HSD_Class *o)
Definition jobj.c:1527
void HSD_JObjResetRST(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:76
void(* HSD_JObjWalkTreeCallback)(HSD_JObj *, f32 **, s32)
Definition jobj.h:159
static f32 HSD_JObjGetRotationX(HSD_JObj *jobj)
Definition jobj.h:301
static void HSD_JObjGetScale(HSD_JObj *jobj, Vec3 *scale)
Definition jobj.h:356
void JObjAmnesia(HSD_ClassInfo *info)
Definition jobj.c:1545
void HSD_JObjSetMtxDirtySub(HSD_JObj *)
Definition jobj.c:1461
void HSD_JObjDispAll(HSD_JObj *jobj, Mtx vmtx, u32 flags, u32 rendermode)
Definition jobj.c:576
void HSD_JObjUnref(HSD_JObj *jobj)
Definition jobj.c:725
HSD_JObj * HSD_JObjLoadJoint(HSD_Joint *)
Definition jobj.c:676
static void HSD_JObjRef(HSD_JObj *jobj)
Definition jobj.h:563
static f32 HSD_JObjGetTranslationY(HSD_JObj *jobj)
Definition jobj.h:439
static void HSD_JObjAddScaleX(HSD_JObj *jobj, float x)
Definition jobj.h:478
static void HSD_JObjRefThis(HSD_JObj *jobj)
Definition jobj.h:568
void HSD_JObjAnimAll(HSD_JObj *)
Definition jobj.c:562
static void HSD_JObjSetRotation(HSD_JObj *jobj, Quaternion *rotate)
Definition jobj.h:255
void(* DPCtlCallback)(int, int lo, int hi, HSD_JObj *jobj)
Definition jobj.h:160
static bool HSD_JObjMtxIsDirty(HSD_JObj *jobj)
Definition jobj.h:228
static void HSD_JObjSetTranslate(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:381
static f32 HSD_JObjGetScaleY(HSD_JObj *jobj)
Definition jobj.h:369
static MtxPtr HSD_JObjGetMtxPtr(HSD_JObj *jobj)
Definition jobj.h:549
s32 JObjLoad(HSD_JObj *jobj, HSD_Joint *joint, HSD_JObj *parent)
Definition jobj.c:638
static f32 HSD_JObjGetRotationZ(HSD_JObj *jobj)
Definition jobj.h:313
#define JOBJ_USER_DEF_MTX
Definition jobj.h:89
void JObjAnimAll(HSD_JObj *jobj)
Definition jobj.c:547
static void HSD_JObjSetTranslateZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:409
void HSD_JObjSetFlagsAll(HSD_JObj *, u32 flags)
Definition jobj.c:1019
void HSD_JObjClearFlagsAll(HSD_JObj *, u32 flags)
Definition jobj.c:1045
static void iref_INC(void *o)
Definition object.h:115
static void ref_INC(void *o)
Definition object.h:83
unsigned long u32
An unsigned 32-bit integer.
Definition platform.h:26
#define STATIC_ASSERT(cond)
Definition platform.h:169
float f32
A 32-bit floating-point number.
Definition platform.h:62
int enum_t
The underlying type of an enum, used as a placeholder.
Definition platform.h:74
signed long s32
A signed 32-bit integer.
Definition platform.h:14
void * obj
Definition pobj.c:49
static unsigned long int next
Definition rand.c:3
#define NULL
A null pointer.
Definition stddef.h:19
Definition aobj.h:40
Definition aobj.h:57
Definition class.h:32
Definition class.h:14
Definition dobj.h:24
Definition dobj.h:15
u32 flags
Definition dobj.h:21
HSD_Class parent
Definition dobj.h:16
HSD_AObj * aobj
Definition dobj.h:20
Definition jobj.h:148
HSD_ObjInfo parent
Definition jobj.h:149
Definition jobj.h:108
u32 flags
Definition jobj.h:113
HSD_JObj * parent
Definition jobj.h:111
HSD_Spline * spline
Definition jobj.h:117
Vec3 translate
Definition jobj.h:121
Mtx mtx
Definition jobj.h:122
HSD_SList * ptcl
Definition jobj.h:115
Vec3 scale
Definition jobj.h:120
Quaternion rotate
Definition jobj.h:119
MtxPtr envelopemtx
Definition jobj.h:124
union HSD_JObj::@271 u
HSD_AObj * aobj
Definition jobj.h:125
struct HSD_DObj * dobj
Definition jobj.h:116
u32 id
Definition jobj.h:127
HSD_Obj object
Definition jobj.h:109
HSD_JObj * next
Definition jobj.h:110
HSD_JObj * child
Definition jobj.h:112
HSD_RObj * robj
Definition jobj.h:126
Vec3 * scl
Definition jobj.h:123
Definition jobj.h:131
Vec3 scale
Definition jobj.h:142
HSD_RObjDesc * robjdesc
Definition jobj.h:145
char * class_name
Definition jobj.h:132
HSD_Joint * child
Definition jobj.h:134
union HSD_Joint::@272 u
HSD_Joint * next
Definition jobj.h:135
Vec3 position
Definition jobj.h:143
HSD_Spline * spline
Definition jobj.h:138
Vec3 rotation
Definition jobj.h:141
HSD_DObjDesc * dobjdesc
Definition jobj.h:137
MtxPtr mtx
Definition jobj.h:144
u32 flags
Definition jobj.h:133
HSD_SList * ptcl
Definition jobj.h:139
Definition mobj.h:135
Definition object.h:66
Definition object.h:60
Definition robj.h:73
Definition robj.h:61
Definition list.h:6
Definition pobj.h:106
Definition spline.h:10
Definition types.h:13
f32 x
The x component.
Definition types.h:14
f32 z
The z component.
Definition types.h:14
f32 y
The y component.
Definition types.h:14
HSD_TrspMask
Definition forward.h:137
Definition fobj.h:65