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