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/class.h"
7#include "baselib/debug.h"
8
9#include "baselib/forward.h" // IWYU pragma: export
10
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;
119 /* +2C */ Vec3 scale;
120 /* +38 */ Vec3 translate;
121 /* +44 */ Mtx mtx;
122 /* +74 */ Vec3* scl;
124 /* +7C */ HSD_AObj* aobj;
125 /* +80 */ HSD_RObj* robj;
126 /* +84 */ u32 id;
127};
128STATIC_ASSERT(sizeof(struct HSD_JObj) == 0x88);
129
130struct HSD_Joint {
131 /* +0 */ char* class_name;
132 /* +4 */ u32 flags;
133 /* +8 */ HSD_Joint* child;
134 /* +C */ HSD_Joint* next;
135 /* +10 */ union {
139 } u;
140 /* +14 */ Vec3 rotation;
141 /* +20 */ Vec3 scale;
142 /* +2C */ Vec3 position;
143 /* +38 */ MtxPtr mtx;
145};
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;
159typedef void (*DPCtlCallback)(int, int lo, int hi, HSD_JObj* jobj);
160
162
163void HSD_JObjCheckDepend(HSD_JObj* jobj);
166void HSD_JObjResetRST(HSD_JObj* jobj, HSD_Joint* joint);
169void(HSD_JObjSetMtxDirty)(HSD_JObj* jobj);
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 (HSD_JObjSetMtxDirty)(jobj);
242}
243
244static inline void HSD_JObjSetMtxDirtyOutOfLine(HSD_JObj* jobj)
245{
247}
248
250{
251 if (!jobj || !HSD_JObjMtxIsDirty(jobj)) {
252 return;
253 }
255}
256
258#define HSD_JObjSetMtxDirty(jobj) \
259 { \
260 if (jobj != NULL && !HSD_JObjMtxIsDirty(jobj)) { \
261 HSD_JObjSetMtxDirtySub(jobj); \
262 } \
263 }
264
266static inline void HSD_JObjSetMtxDirtyInline(HSD_JObj* jobj)
267{
268 if (jobj != NULL && !HSD_JObjMtxIsDirty(jobj)) {
270 }
271}
272
273static inline void HSD_JObjSetRotation(HSD_JObj* jobj, Quaternion* rotate)
274{
275 HSD_ASSERT(618, jobj);
276 HSD_ASSERT(619, rotate);
277 jobj->rotate = *rotate;
278 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
280 }
281}
282
284 Quaternion* rotate)
285{
286 HSD_ASSERT(618, jobj);
287 HSD_ASSERT(619, rotate);
288 jobj->rotate = *rotate;
289 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
290 (HSD_JObjSetMtxDirty)(jobj);
291 }
292}
293
294static inline void HSD_JObjSetRotationX(HSD_JObj* jobj, f32 x)
295{
296 HSD_ASSERT(639, jobj);
297 HSD_ASSERT(640, !(jobj->flags & JOBJ_USE_QUATERNION));
298 jobj->rotate.x = x;
299 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
301 }
302}
303
305{
306 HSD_ASSERT(639, jobj);
307 HSD_ASSERT(640, !(jobj->flags & JOBJ_USE_QUATERNION));
308 jobj->rotate.x = x;
309 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
310 (HSD_JObjSetMtxDirty)(jobj);
311 }
312}
313
314static inline void HSD_JObjSetRotationY(HSD_JObj* jobj, f32 y)
315{
316 HSD_ASSERT(660, jobj);
317 HSD_ASSERT(661, !(jobj->flags & JOBJ_USE_QUATERNION));
318 jobj->rotate.y = y;
319 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
321 }
322}
323
325{
326 HSD_ASSERT(660, jobj);
327 HSD_ASSERT(661, !(jobj->flags & JOBJ_USE_QUATERNION));
328 jobj->rotate.y = y;
329 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
330 (HSD_JObjSetMtxDirty)(jobj);
331 }
332}
333
334static inline void HSD_JObjSetRotationZ(HSD_JObj* jobj, f32 z)
335{
336 HSD_ASSERT(681, jobj);
337 HSD_ASSERT(682, !(jobj->flags & JOBJ_USE_QUATERNION));
338 jobj->rotate.z = z;
339 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
341 }
342}
343
345{
346 HSD_ASSERT(681, jobj);
347 HSD_ASSERT(682, !(jobj->flags & JOBJ_USE_QUATERNION));
348 jobj->rotate.z = z;
349 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
350 (HSD_JObjSetMtxDirty)(jobj);
351 }
352}
353
354static inline void HSD_JObjGetRotation(HSD_JObj* jobj, Quaternion* rotate)
355{
356 HSD_ASSERT(699, jobj);
357 HSD_ASSERT(700, rotate);
358 *rotate = jobj->rotate;
359}
360
362{
363 HSD_ASSERT(715, jobj);
364 return jobj->rotate.x;
365}
366
368{
369 HSD_ASSERT(730, jobj);
370 return jobj->rotate.y;
371}
372
374{
375 HSD_ASSERT(745, jobj);
376 return jobj->rotate.z;
377}
378
379static inline void HSD_JObjSetScale(HSD_JObj* jobj, Vec3* scale)
380{
381 HSD_ASSERT(760, jobj);
382 HSD_ASSERT(761, scale);
383 jobj->scale = *scale;
384 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
386 }
387}
388
390{
391 HSD_ASSERT(760, jobj);
392 HSD_ASSERT(761, scale);
393 jobj->scale = *scale;
394 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
395 (HSD_JObjSetMtxDirty)(jobj);
396 }
397}
398
399static inline void HSD_JObjSetScaleX(HSD_JObj* jobj, f32 x)
400{
401 HSD_ASSERT(776, jobj);
402 jobj->scale.x = x;
403 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
405 }
406}
407
408static inline void HSD_JObjSetScaleXWithMtxDirty(HSD_JObj* jobj, f32 x)
409{
410 HSD_ASSERT(776, jobj);
411 jobj->scale.x = x;
412 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
413 (HSD_JObjSetMtxDirty)(jobj);
414 }
415}
416
417static inline void HSD_JObjSetScaleY(HSD_JObj* jobj, f32 y)
418{
419 HSD_ASSERT(791, jobj);
420 jobj->scale.y = y;
421 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
423 }
424}
425
426static inline void HSD_JObjSetScaleYWithMtxDirty(HSD_JObj* jobj, f32 y)
427{
428 HSD_ASSERT(791, jobj);
429 jobj->scale.y = y;
430 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
431 (HSD_JObjSetMtxDirty)(jobj);
432 }
433}
434
435static inline void HSD_JObjSetScaleZ(HSD_JObj* jobj, f32 z)
436{
437 HSD_ASSERT(806, jobj);
438 jobj->scale.z = z;
439 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
441 }
442}
443
444static inline void HSD_JObjSetScaleZWithMtxDirty(HSD_JObj* jobj, f32 z)
445{
446 HSD_ASSERT(806, jobj);
447 jobj->scale.z = z;
448 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
449 (HSD_JObjSetMtxDirty)(jobj);
450 }
451}
452
453static inline void HSD_JObjGetScale(HSD_JObj* jobj, Vec3* scale)
454{
455 HSD_ASSERT(823, jobj);
456 HSD_ASSERT(824, scale);
457 *scale = jobj->scale;
458}
459
460static inline f32 HSD_JObjGetScaleX(HSD_JObj* jobj)
461{
462 HSD_ASSERT(875, jobj);
463 return jobj->scale.x;
464}
465
466static inline f32 HSD_JObjGetScaleY(HSD_JObj* jobj)
467{
468 HSD_ASSERT(888, jobj);
469 return jobj->scale.y;
470}
471
472static inline f32 HSD_JObjGetScaleZ(HSD_JObj* jobj)
473{
474 HSD_ASSERT(901, jobj);
475 return jobj->scale.z;
476}
477
478static inline void HSD_JObjSetTranslate(HSD_JObj* jobj, Vec3* translate)
479{
480 HSD_ASSERT(916, jobj);
481 HSD_ASSERT(917, translate);
482 jobj->translate = *translate;
483 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
485 }
486}
487
490{
491 HSD_ASSERT(916, jobj);
492 HSD_ASSERT(917, translate);
493 jobj->translate = *translate;
494 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
495 (HSD_JObjSetMtxDirty)(jobj);
496 }
497}
498
501{
502 HSD_ASSERT(916, jobj);
503 HSD_ASSERT(917, translate);
504 jobj->translate = *translate;
505 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
507 }
508}
509
510static inline void HSD_JObjSetTranslateX(HSD_JObj* jobj, f32 x)
511{
512 HSD_ASSERT(932, jobj);
513 jobj->translate.x = x;
514 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
516 }
517}
518
520{
521 HSD_ASSERT(932, jobj);
522 jobj->translate.x = x;
523 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
524 (HSD_JObjSetMtxDirty)(jobj);
525 }
526}
527
528static inline void HSD_JObjSetTranslateY(HSD_JObj* jobj, f32 y)
529{
530 HSD_ASSERT(947, jobj);
531 jobj->translate.y = y;
532 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
534 }
535}
536
538{
539 HSD_ASSERT(947, jobj);
540 jobj->translate.y = y;
541 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
542 (HSD_JObjSetMtxDirty)(jobj);
543 }
544}
545
546static inline void HSD_JObjSetTranslateZ(HSD_JObj* jobj, f32 z)
547{
548 HSD_ASSERT(962, jobj);
549 jobj->translate.z = z;
550 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
552 }
553}
554
556{
557 HSD_ASSERT(962, jobj);
558 jobj->translate.z = z;
559 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
560 (HSD_JObjSetMtxDirty)(jobj);
561 }
562}
563
565{
566 HSD_ASSERT(979, jobj);
567 HSD_ASSERT(980, translate);
568 *translate = jobj->translate;
569}
570
574{
575 HSD_ASSERT(979, jobj);
576 *translate = jobj->translate;
577}
578
580{
581 HSD_ASSERT(993, jobj);
582 return jobj->translate.x;
583}
584
586{
587 HSD_ASSERT(1006, jobj);
588 return jobj->translate.y;
589}
590
591static inline float HSD_JObjGetTranslationZ(HSD_JObj* jobj)
592{
593 HSD_ASSERT(1019, jobj);
594 return jobj->translate.z;
595}
596
597static inline void HSD_JObjAddRotationX(HSD_JObj* jobj, float x)
598{
599 HSD_ASSERT(1029, jobj);
600 jobj->rotate.x += x;
601 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
603 }
604}
605
606static inline void HSD_JObjAddRotationXWithMtxDirty(HSD_JObj* jobj, float x)
607{
608 HSD_ASSERT(1029, jobj);
609 jobj->rotate.x += x;
610 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
611 (HSD_JObjSetMtxDirty)(jobj);
612 }
613}
614
615static inline void HSD_JObjAddRotationY(HSD_JObj* jobj, float y)
616{
617 HSD_ASSERT(1041, jobj);
618 jobj->rotate.y += y;
619 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
621 }
622}
623
624static inline void HSD_JObjAddRotationZ(HSD_JObj* jobj, float z)
625{
626 HSD_ASSERT(1053, jobj);
627 jobj->rotate.z += z;
628 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
630 }
631}
632
633static inline void HSD_JObjAddScaleX(HSD_JObj* jobj, float x)
634{
635 HSD_ASSERT(1065, jobj);
636 jobj->scale.x += x;
637 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
639 }
640}
641
642static inline void HSD_JObjAddScaleY(HSD_JObj* jobj, float y)
643{
644 HSD_ASSERT(1077, jobj);
645 jobj->scale.y += y;
646 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
648 }
649}
650
651static inline void HSD_JObjAddScaleZ(HSD_JObj* jobj, float z)
652{
653 HSD_ASSERT(1089, jobj);
654 jobj->scale.z += z;
655 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
657 }
658}
659
660static inline void HSD_JObjAddTranslationX(HSD_JObj* jobj, float x)
661{
662 HSD_ASSERT(1102, jobj);
663 jobj->translate.x += x;
664 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
666 }
667}
668
669static inline void HSD_JObjAddTranslationY(HSD_JObj* jobj, float y)
670{
671 HSD_ASSERT(1114, jobj);
672 jobj->translate.y += y;
673 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
675 }
676}
677
678static inline void HSD_JObjAddTranslationYWithMtxDirty(HSD_JObj* jobj, float y)
679{
680 HSD_ASSERT(1114, jobj);
681 jobj->translate.y += y;
682 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
683 (HSD_JObjSetMtxDirty)(jobj);
684 }
685}
686
687static inline void HSD_JObjAddTranslationZ(HSD_JObj* jobj, float z)
688{
689 HSD_ASSERT(1126, jobj);
690 jobj->translate.z += z;
691 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
693 }
694}
695
697{
698 HSD_ASSERT(1144, jobj);
700 return jobj->mtx;
701}
702
703static inline void HSD_JObjCopyMtx(HSD_JObj* jobj, Mtx mtx)
704{
705 HSD_ASSERT(1170, jobj);
706 HSD_ASSERT(1171, mtx);
707 PSMTXCopy(mtx, jobj->mtx);
708}
709
710static inline void HSD_JObjRef(HSD_JObj* jobj)
711{
712 ref_INC(jobj);
713}
714
715static inline void HSD_JObjRefThis(HSD_JObj* jobj)
716{
717 if (jobj != NULL) {
718 iref_INC(jobj);
719 }
720}
721
722void HSD_JObjResolveRefs(HSD_JObj* jobj, HSD_Joint* joint);
723void HSD_JObjUnrefThis(HSD_JObj* jobj);
724void HSD_JObjRefThis(HSD_JObj* jobj);
725void HSD_JObjMakeMatrix(HSD_JObj* jobj);
727void HSD_JObjAddChild(HSD_JObj* jobj, HSD_JObj* child);
729void HSD_JObjAddDObj(HSD_JObj* jobj, HSD_DObj* dobj);
731void resolveIKJoint1(HSD_JObj* jobj);
732void resolveIKJoint2(HSD_JObj* jobj);
735int JObjInit(HSD_Class* o);
736void JObjReleaseChild(HSD_JObj* jobj);
737void JObjRelease(HSD_Class* o);
739void JObjAmnesia(HSD_ClassInfo* info);
740void HSD_JObjReqAnimByFlags(HSD_JObj* jobj, u32 flags, f32 frame);
742void HSD_JObjReqAnim(HSD_JObj* jobj, f32 frame);
744void JObjResetRST(HSD_JObj* jobj, HSD_Joint* joint);
745void JObjUpdateFunc(void* obj, enum_t type, HSD_ObjData* val);
746void HSD_JObjAnim(HSD_JObj* jobj);
747void JObjAnimAll(HSD_JObj* jobj);
749
750void HSD_JObjAddAnim(HSD_JObj*, HSD_AnimJoint* an_joint,
751 HSD_MatAnimJoint* mat_joint,
752 HSD_ShapeAnimJoint* sh_joint);
754 f32** cb_args);
755
756#endif
void PSMTXCopy(Mtx src, Mtx dst)
f32(* MtxPtr)[4]
Definition mtx.h:53
struct Vec Vec3
f32 Mtx[3][4]
Definition mtx.h:50
unsigned long u32
Definition types.h:9
float f32
Definition types.h:13
Mtx mtx
Definition ftparts.static.h:5
Vec3 translate
Definition gmresult.c:1114
signed long s32
Definition hsd_3B2B.h:1
static float const scale
Definition itlgunray.c:25
HSD_JObjInfo hsdJObj
Definition jobj.c:25
void HSD_JObjMakeMatrix(HSD_JObj *jobj)
Definition jobj.c:142
struct HSD_DObj * HSD_JObjGetDObj(HSD_JObj *jobj)
Definition jobj.c:935
u32 HSD_JObjGetFlags(HSD_JObj *jobj)
Definition jobj.c:989
void HSD_JObjSetupMatrixSub(HSD_JObj *)
Definition jobj.c:1392
void HSD_JObjUnrefThis(HSD_JObj *jobj)
Definition jobj.c:735
void HSD_JObjPrependRObj(HSD_JObj *jobj, HSD_RObj *robj)
Definition jobj.c:961
static void HSD_JObjSetRotationZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:334
static void HSD_JObjSetTranslateWithMtxDirtyOutOfLine(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:499
void HSD_JObjClearFlags(HSD_JObj *, u32 flags)
Definition jobj.c:1023
static void HSD_JObjSetMtxDirtyOutOfLine(HSD_JObj *jobj)
Definition jobj.h:244
void HSD_JObjSetDPtclCallback(DPCtlCallback cb)
Definition jobj.c:1468
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:651
static void HSD_JObjSetRotationY(HSD_JObj *jobj, f32 y)
Definition jobj.h:314
static HSD_JObj * HSD_JObjGetNext(HSD_JObj *jobj)
Definition jobj.h:204
HSD_JObj * HSD_JObjGetCurrent(void)
Definition jobj.c:1064
static void HSD_JObjSetTranslateY(HSD_JObj *jobj, f32 y)
Definition jobj.h:528
static HSD_JObj * HSD_JObjGetChild(HSD_JObj *jobj)
Definition jobj.h:195
static f32 HSD_JObjGetScaleZ(HSD_JObj *jobj)
Definition jobj.h:472
static void HSD_JObjSetScaleWithMtxDirty(HSD_JObj *jobj, Vec3 *scale)
Definition jobj.h:389
void RecalcParentTrspBits(HSD_JObj *jobj)
Definition jobj.c:803
static HSD_JObj * HSD_JObjGetParent(HSD_JObj *jobj)
Definition jobj.h:213
void resolveIKJoint1(HSD_JObj *jobj)
Definition jobj.c:1110
static void HSD_JObjSetMtxDirtyOutOfLineLeaf(HSD_JObj *jobj)
Definition jobj.h:239
void HSD_JObjWalkTree0(HSD_JObj *jobj, HSD_JObjWalkTreeCallback cb, f32 **cb_args)
Definition jobj.c:93
#define JOBJ_MTX_INDEP_SRT
Definition jobj.h:90
static void HSD_JObjAddRotationZ(HSD_JObj *jobj, float z)
Definition jobj.h:624
#define JOBJ_MTX_DIRTY
Definition jobj.h:72
void resolveIKJoint2(HSD_JObj *jobj)
Definition jobj.c:1264
static void HSD_JObjAddRotationX(HSD_JObj *jobj, float x)
Definition jobj.h:597
static void HSD_JObjSetRotationYWithMtxDirty(HSD_JObj *jobj, f32 y)
Definition jobj.h:324
static void HSD_JObjSetTranslateWithMtxDirty(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:488
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:399
static f32 HSD_JObjGetRotationY(HSD_JObj *jobj)
Definition jobj.h:367
void HSD_JObjAddNext(HSD_JObj *jobj, HSD_JObj *next)
Definition jobj.c:882
void HSD_JObjDeleteRObj(HSD_JObj *jobj, HSD_RObj *robj)
Definition jobj.c:969
static void HSD_JObjSetTranslateYWithMtxDirty(HSD_JObj *jobj, f32 y)
Definition jobj.h:537
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:669
static f32 HSD_JObjGetTranslationX(HSD_JObj *jobj)
Definition jobj.h:579
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:660
void HSD_JObjResolveRefsAll(HSD_JObj *, HSD_Joint *)
Definition jobj.c:706
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:591
static void HSD_JObjCopyMtx(HSD_JObj *jobj, Mtx mtx)
Definition jobj.h:703
static void HSD_JObjSetScaleZWithMtxDirty(HSD_JObj *jobj, f32 z)
Definition jobj.h:444
void HSD_JObjRemoveAnimByFlags(HSD_JObj *jobj, u32 flags)
Definition jobj.c:202
void HSD_JObjRemoveAnim(HSD_JObj *jobj)
Definition jobj.c:230
static void HSD_JObjSetScaleYWithMtxDirty(HSD_JObj *jobj, f32 y)
Definition jobj.h:426
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:832
void HSD_JObjRemoveAll(HSD_JObj *)
Definition jobj.c:778
static void HSD_JObjSetScale(HSD_JObj *jobj, Vec3 *scale)
Definition jobj.h:379
int JObjInit(HSD_Class *o)
Definition jobj.c:1473
void HSD_JObjCheckDepend(HSD_JObj *jobj)
Definition jobj.c:34
static f32 HSD_JObjGetScaleX(HSD_JObj *jobj)
Definition jobj.h:460
void HSD_JObjSetFlags(HSD_JObj *, u32 flags)
Definition jobj.c:997
static void HSD_JObjSetScaleZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:435
static void HSD_JObjAddRotationXWithMtxDirty(HSD_JObj *jobj, float x)
Definition jobj.h:606
static void HSD_JObjSetRotationX(HSD_JObj *jobj, f32 x)
Definition jobj.h:294
static void HSD_JObjSetTranslateX(HSD_JObj *jobj, f32 x)
Definition jobj.h:510
HSD_JObj * HSD_JObjAlloc(void)
Definition jobj.c:1049
static void HSD_JObjAddTranslationYWithMtxDirty(HSD_JObj *jobj, float y)
Definition jobj.h:678
static void HSD_JObjGetTranslation2(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:573
void JObjResetRST(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:61
HSD_JObj * HSD_JObjRemove(HSD_JObj *jobj)
Definition jobj.c:744
static void HSD_JObjGetTranslation(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:564
void HSD_JObjSetDefaultClass(HSD_ClassInfo *info)
Definition jobj.c:606
static void HSD_JObjSetScaleY(HSD_JObj *jobj, f32 y)
Definition jobj.h:417
void HSD_JObjReqAnim(HSD_JObj *jobj, f32 frame)
Definition jobj.c:278
static void HSD_JObjAddTranslationZ(HSD_JObj *jobj, float z)
Definition jobj.h:687
HSD_JObj * jobj_get_effector_checked(HSD_JObj *eff)
Note: this must not be declared inline, so that the "eff" assertion string data is placed before "rob...
Definition jobj.c:1093
static void HSD_JObjSetMtxDirtyInline(HSD_JObj *jobj)
Definition jobj.h:266
void HSD_JObjSetCurrent(HSD_JObj *jobj)
Definition jobj.c:1057
void JObjReleaseChild(HSD_JObj *jobj)
Definition jobj.c:1487
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:943
void HSD_JObjSetupMatrix(HSD_JObj *jobj)
Definition jobj.h:249
static void HSD_JObjSetRotationXWithMtxDirty(HSD_JObj *jobj, f32 x)
Definition jobj.h:304
void HSD_JObjRemoveAnimAllByFlags(HSD_JObj *jobj, u32 flags)
Definition jobj.c:216
static void HSD_JObjSetRotationWithMtxDirty(HSD_JObj *jobj, Quaternion *rotate)
Definition jobj.h:283
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)
Why does this seem to be a define while the others are inline functions?
Definition jobj.h:258
#define JOBJ_USE_QUATERNION
Definition jobj.h:79
void HSD_JObjResolveRefs(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:686
HSD_JObj * HSD_JObjReparent(HSD_JObj *jobj, HSD_JObj *parent)
Definition jobj.c:858
static void HSD_JObjAddRotationY(HSD_JObj *jobj, float y)
Definition jobj.h:615
static void HSD_JObjAddScaleY(HSD_JObj *jobj, float y)
Definition jobj.h:642
void JObjRelease(HSD_Class *o)
Definition jobj.c:1518
void HSD_JObjResetRST(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:76
static void HSD_JObjSetTranslateXWithMtxDirty(HSD_JObj *jobj, f32 x)
Definition jobj.h:519
void(* HSD_JObjWalkTreeCallback)(HSD_JObj *, f32 **, s32)
Definition jobj.h:158
static f32 HSD_JObjGetRotationX(HSD_JObj *jobj)
Definition jobj.h:361
static void HSD_JObjGetScale(HSD_JObj *jobj, Vec3 *scale)
Definition jobj.h:453
void JObjAmnesia(HSD_ClassInfo *info)
Definition jobj.c:1536
void HSD_JObjSetMtxDirtySub(HSD_JObj *)
Definition jobj.c:1452
void HSD_JObjDispAll(HSD_JObj *jobj, Mtx vmtx, u32 flags, u32 rendermode)
Definition jobj.c:571
void HSD_JObjUnref(HSD_JObj *jobj)
Definition jobj.c:720
HSD_JObj * HSD_JObjLoadJoint(HSD_Joint *)
Definition jobj.c:671
static void HSD_JObjRef(HSD_JObj *jobj)
Definition jobj.h:710
static f32 HSD_JObjGetTranslationY(HSD_JObj *jobj)
Definition jobj.h:585
static void HSD_JObjAddScaleX(HSD_JObj *jobj, float x)
Definition jobj.h:633
static void HSD_JObjRefThis(HSD_JObj *jobj)
Definition jobj.h:715
static void HSD_JObjSetTranslateZWithMtxDirty(HSD_JObj *jobj, f32 z)
Definition jobj.h:555
void HSD_JObjAnimAll(HSD_JObj *)
Definition jobj.c:562
static void HSD_JObjSetRotationZWithMtxDirty(HSD_JObj *jobj, f32 z)
Definition jobj.h:344
static void HSD_JObjSetRotation(HSD_JObj *jobj, Quaternion *rotate)
Definition jobj.h:273
void(* DPCtlCallback)(int, int lo, int hi, HSD_JObj *jobj)
Definition jobj.h:159
static bool HSD_JObjMtxIsDirty(HSD_JObj *jobj)
Definition jobj.h:228
static void HSD_JObjSetTranslate(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:478
static f32 HSD_JObjGetScaleY(HSD_JObj *jobj)
Definition jobj.h:466
static MtxPtr HSD_JObjGetMtxPtr(HSD_JObj *jobj)
Definition jobj.h:696
s32 JObjLoad(HSD_JObj *jobj, HSD_Joint *joint, HSD_JObj *parent)
Definition jobj.c:633
static f32 HSD_JObjGetRotationZ(HSD_JObj *jobj)
Definition jobj.h:373
#define JOBJ_USER_DEF_MTX
Definition jobj.h:88
static void HSD_JObjSetScaleXWithMtxDirty(HSD_JObj *jobj, f32 x)
Definition jobj.h:408
void JObjAnimAll(HSD_JObj *jobj)
Definition jobj.c:547
static void HSD_JObjSetTranslateZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:546
void HSD_JObjSetFlagsAll(HSD_JObj *, u32 flags)
Definition jobj.c:1010
void HSD_JObjClearFlagsAll(HSD_JObj *, u32 flags)
Definition jobj.c:1036
static void HSD_JObjGetRotation(HSD_JObj *jobj, Quaternion *rotate)
Definition jobj.h:354
#define HSD_ASSERT(line, cond)
Definition mnvibration.c:7
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:132
int enum_t
The underlying type of an enum, used as a placeholder.
Definition platform.h:27
void * obj
Definition pobj.c:42
static unsigned long int next
Definition rand.c:3
#define NULL
Definition stddef.h:19
Definition aobj.h:41
Definition aobj.h:58
Definition class.h:32
Definition class.h:14
Definition dobj.h:26
Definition dobj.h:17
u32 flags
Definition dobj.h:23
HSD_Class parent
Definition dobj.h:18
HSD_AObj * aobj
Definition dobj.h:22
Definition jobj.h:147
void(* release_child)(HSD_JObj *jobj)
Definition jobj.h:154
s32(* load)(HSD_JObj *jobj, HSD_Joint *joint, HSD_JObj *jobj_2)
Definition jobj.h:149
HSD_ObjInfo parent
Definition jobj.h:148
void(* disp)(HSD_JObj *jobj, Mtx vmtx, Mtx pmtx, HSD_TrspMask trsp_mask, u32 rendermode)
Definition jobj.h:152
void(* make_mtx)(HSD_JObj *jobj)
Definition jobj.h:150
void(* make_pmtx)(HSD_JObj *jobj, Mtx mtx, Mtx rmtx)
Definition jobj.h:151
Definition jobj.h:107
u32 flags
Definition jobj.h:112
union HSD_JObj::@140100343326260066157231264312360267130371306225 u
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
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
HSD_RObjDesc * robjdesc
Definition jobj.h:144
char * class_name
Definition jobj.h:131
union HSD_Joint::@377102274010177013356207347041224013117260206021 u
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:138
Definition object.h:66
Definition object.h:60
Definition robj.h:72
Definition robj.h:60
Definition list.h:6
Definition pobj.h:107
Definition spline.h:8
Definition mtx.h:46
f32 z
Definition mtx.h:47
f32 y
Definition mtx.h:47
f32 x
Definition mtx.h:47
f32 z
Definition mtx.h:15
f32 x
Definition mtx.h:15
f32 y
Definition mtx.h:15
HSD_TrspMask
Definition forward.h:142
Definition fobj.h:65