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 <Runtime/platform.h>
5
7
8#include <dat_macros.h>
9
10#include <dolphin/mtx.h>
17
18#define JOBJ_PTCL_ACTIVE 0x7FFFFFFF
19#define JOBJ_PTCL_OFFSET_MASK 0xFFFFFF
20#define JOBJ_PTCL_OFFSET_SHIFT 6
21#define JOBJ_PTCL_BANK_MASK 0x3F
22
23#define HSD_A_J_ROTX 1
24#define HSD_A_J_ROTY 2
25#define HSD_A_J_ROTZ 3
26#define HSD_A_J_PATH 4
27#define HSD_A_J_TRAX 5
28#define HSD_A_J_TRAY 6
29#define HSD_A_J_TRAZ 7
30#define HSD_A_J_SCAX 8
31#define HSD_A_J_SCAY 9
32#define HSD_A_J_SCAZ 10
33#define HSD_A_J_NODE 11
34#define HSD_A_J_BRANCH 12
35
36#define HSD_A_J_SETBYTE0 20
37#define HSD_A_J_SETBYTE1 21
38#define HSD_A_J_SETBYTE2 22
39#define HSD_A_J_SETBYTE3 23
40#define HSD_A_J_SETBYTE4 24
41#define HSD_A_J_SETBYTE5 25
42#define HSD_A_J_SETBYTE6 26
43#define HSD_A_J_SETBYTE7 27
44#define HSD_A_J_SETBYTE8 28
45#define HSD_A_J_SETBYTE9 29
46
47#define HSD_A_J_SETFLOAT0 30
48#define HSD_A_J_SETFLOAT1 31
49#define HSD_A_J_SETFLOAT2 32
50#define HSD_A_J_SETFLOAT3 33
51#define HSD_A_J_SETFLOAT4 34
52#define HSD_A_J_SETFLOAT5 35
53#define HSD_A_J_SETFLOAT6 36
54#define HSD_A_J_SETFLOAT7 37
55#define HSD_A_J_SETFLOAT8 38
56#define HSD_A_J_SETFLOAT9 39
57
58#define JOBJ_BILLBOARD_FIELD 0xE00
59#define JOBJ_BILLBOARD 0x200
60#define JOBJ_VBILLBOARD 0x400
61#define JOBJ_HBILLBOARD 0x600
62#define JOBJ_RBILLBOARD 0x800
63#define JOBJ_PBILLBOARD 0x2000
64
65#define JOBJ_SKELETON (1 << 0)
66#define JOBJ_SKELETON_ROOT (1 << 1)
67#define JOBJ_ENVELOPE_MODEL (1 << 2)
68#define JOBJ_CLASSICAL_SCALE (1 << 3)
69#define JOBJ_HIDDEN (1 << 4)
70#define JOBJ_PTCL (1 << 5)
71#define JOBJ_MTX_DIRTY (1 << 6)
72#define JOBJ_LIGHTING (1 << 7)
73#define JOBJ_TEXGEN (1 << 8)
74#define JOBJ_INSTANCE (1 << 12)
75#define JOBJ_SPLINE (1 << 14)
76#define JOBJ_FLIP_IK (1 << 15)
77#define JOBJ_SPECULAR (1 << 16)
78#define JOBJ_USE_QUATERNION (1 << 17)
79#define JOBJ_UNK_B18 (1 << 18)
80#define JOBJ_UNK_B19 (1 << 19)
81#define JOBJ_UNK_B20 (1 << 20)
82#define JOBJ_NULL_OBJ (0 << 21)
83#define JOBJ_JOINT1 (1 << 21)
84#define JOBJ_JOINT2 (2 << 21)
85#define JOBJ_JOINT (3 << 21)
86#define JOBJ_EFFECTOR (3 << 21)
87#define JOBJ_USER_DEF_MTX (1 << 23)
88#define JOBJ_MTX_INDEP_PARENT (1 << 24)
89#define JOBJ_MTX_INDEP_SRT (1 << 25)
90#define JOBJ_UNK_B26 (1 << 26)
91#define JOBJ_UNK_B27 (1 << 27)
92#define JOBJ_ROOT_OPA (1 << 28)
93#define JOBJ_ROOT_XLU (1 << 29)
94#define JOBJ_ROOT_TEXEDGE (1 << 30)
95
96#define JOBJ_ROOT_MASK (JOBJ_ROOT_OPA | JOBJ_ROOT_TEXEDGE | JOBJ_ROOT_XLU)
97
98#define union_type_ptcl(o) ((o)->flags & JOBJ_PTCL ? true : false)
99#define union_type_spline(o) ((o)->flags & JOBJ_SPLINE ? true : false)
100#define union_type_dobj(o) \
101 ((o)->flags & (JOBJ_PTCL | JOBJ_SPLINE) ? false : true)
102
103#define HSD_JOBJ_INFO(i) ((HSD_JObjInfo*) (i))
104#define HSD_JOBJ_METHOD(o) HSD_JOBJ_INFO((o)->object.parent.class_info)
105
106typedef struct HSD_JObj {
107 /* +0 */ HSD_Obj object;
108 /* +8 */ HSD_JObj* next;
109 /* +C */ HSD_JObj* parent;
110 /* +10 */ HSD_JObj* child;
111 /* +14 */ u32 flags;
118 /* +2C */ Vec3 scale;
119 /* +38 */ Vec3 translate;
120 /* +44 */ Mtx mtx;
121 /* +74 */ Vec3* scl;
123 /* +7C */ HSD_AObj* aobj;
124 /* +80 */ HSD_RObj* robj;
125 /* +84 */ HSD_IDKey id;
126} HSD_JObj;
127ASSERT_SIZE(struct HSD_JObj, 0x88);
128
129typedef struct HSD_Joint {
130 /* +0 */ char* class_name;
131 /* +4 */ u32 flags;
132 /* +8 */ HSD_Joint* child;
133 /* +C */ HSD_Joint* next;
134 /* +10 */ union HSD_Joint_u {
138 } u;
139 /* +14 */ Vec3 rotation;
140 /* +20 */ Vec3 scale;
141 /* +2C */ Vec3 position;
142 /* +38 */ MtxPtr mtx;
144} HSD_Joint;
145
146typedef struct HSD_JObjInfo {
148 s32 (*load)(HSD_JObj* jobj, HSD_Joint* joint, HSD_JObj* jobj_2);
149 void (*make_mtx)(HSD_JObj* jobj);
150 void (*make_pmtx)(HSD_JObj* jobj, Mtx mtx, Mtx rmtx);
151 void (*disp)(HSD_JObj* jobj, Mtx vmtx, Mtx pmtx, HSD_TrspMask trsp_mask,
152 u32 rendermode);
153 void (*release_child)(HSD_JObj* jobj);
155
156extern HSD_JObjInfo hsdJObj;
158typedef void (*DPCtlCallback)(int, int lo, int hi, HSD_JObj* jobj);
159
161
162void HSD_JObjCheckDepend(HSD_JObj* jobj);
165void HSD_JObjResetRST(HSD_JObj* jobj, HSD_Joint* joint);
168void(HSD_JObjSetMtxDirty)(HSD_JObj* jobj);
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 (HSD_JObjSetMtxDirty)(jobj);
241}
242
243static inline void HSD_JObjSetMtxDirtyOutOfLine(HSD_JObj* jobj)
244{
246}
247
249#if !defined(__MWERKS__)
250static
251#endif
252 inline void HSD_JObjSetupMatrix(HSD_JObj* jobj)
253{
254 if (!jobj || !HSD_JObjMtxIsDirty(jobj)) {
255 return;
256 }
258}
259
261#define HSD_JObjSetMtxDirty(jobj) \
262 { \
263 if (jobj != NULL && !HSD_JObjMtxIsDirty(jobj)) { \
264 HSD_JObjSetMtxDirtySub(jobj); \
265 } \
266 }
267
269static inline void HSD_JObjSetMtxDirtyInline(HSD_JObj* jobj)
270{
271 if (jobj != NULL && !HSD_JObjMtxIsDirty(jobj)) {
273 }
274}
275
276static inline void HSD_JObjSetRotation(HSD_JObj* jobj, Quaternion* rotate)
277{
278 HSD_ASSERT(618, jobj);
279 HSD_ASSERT(619, rotate);
280 jobj->rotate = *rotate;
281 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
283 }
284}
285
287 Quaternion* rotate)
288{
289 HSD_ASSERT(618, jobj);
290 HSD_ASSERT(619, rotate);
291 jobj->rotate = *rotate;
292 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
293 (HSD_JObjSetMtxDirty)(jobj);
294 }
295}
296
297static inline void HSD_JObjSetRotationX(HSD_JObj* jobj, f32 x)
298{
299 HSD_ASSERT(639, jobj);
300 HSD_ASSERT(640, !(jobj->flags & JOBJ_USE_QUATERNION));
301 jobj->rotate.x = x;
302 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
304 }
305}
306
308{
309 HSD_ASSERT(639, jobj);
310 HSD_ASSERT(640, !(jobj->flags & JOBJ_USE_QUATERNION));
311 jobj->rotate.x = x;
312 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
313 (HSD_JObjSetMtxDirty)(jobj);
314 }
315}
316
317static inline void HSD_JObjSetRotationY(HSD_JObj* jobj, f32 y)
318{
319 HSD_ASSERT(660, jobj);
320 HSD_ASSERT(661, !(jobj->flags & JOBJ_USE_QUATERNION));
321 jobj->rotate.y = y;
322 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
324 }
325}
326
328{
329 HSD_ASSERT(660, jobj);
330 HSD_ASSERT(661, !(jobj->flags & JOBJ_USE_QUATERNION));
331 jobj->rotate.y = y;
332 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
333 (HSD_JObjSetMtxDirty)(jobj);
334 }
335}
336
337static inline void HSD_JObjSetRotationZ(HSD_JObj* jobj, f32 z)
338{
339 HSD_ASSERT(681, jobj);
340 HSD_ASSERT(682, !(jobj->flags & JOBJ_USE_QUATERNION));
341 jobj->rotate.z = z;
342 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
344 }
345}
346
348{
349 HSD_ASSERT(681, jobj);
350 HSD_ASSERT(682, !(jobj->flags & JOBJ_USE_QUATERNION));
351 jobj->rotate.z = z;
352 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
353 (HSD_JObjSetMtxDirty)(jobj);
354 }
355}
356
357static inline void HSD_JObjGetRotation(HSD_JObj* jobj, Quaternion* rotate)
358{
359 HSD_ASSERT(699, jobj);
360 HSD_ASSERT(700, rotate);
361 *rotate = jobj->rotate;
362}
363
365{
366 HSD_ASSERT(715, jobj);
367 return jobj->rotate.x;
368}
369
371{
372 HSD_ASSERT(730, jobj);
373 return jobj->rotate.y;
374}
375
377{
378 HSD_ASSERT(745, jobj);
379 return jobj->rotate.z;
380}
381
382static inline void HSD_JObjSetScale(HSD_JObj* jobj, Vec3* scale)
383{
384 HSD_ASSERT(760, jobj);
385 HSD_ASSERT(761, scale);
386 jobj->scale = *scale;
387 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
389 }
390}
391
393{
394 HSD_ASSERT(760, jobj);
395 HSD_ASSERT(761, scale);
396 jobj->scale = *scale;
397 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
398 (HSD_JObjSetMtxDirty)(jobj);
399 }
400}
401
402static inline void HSD_JObjSetScaleX(HSD_JObj* jobj, f32 x)
403{
404 HSD_ASSERT(776, jobj);
405 jobj->scale.x = x;
406 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
408 }
409}
410
411static inline void HSD_JObjSetScaleXWithMtxDirty(HSD_JObj* jobj, f32 x)
412{
413 HSD_ASSERT(776, jobj);
414 jobj->scale.x = x;
415 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
416 (HSD_JObjSetMtxDirty)(jobj);
417 }
418}
419
420static inline void HSD_JObjSetScaleY(HSD_JObj* jobj, f32 y)
421{
422 HSD_ASSERT(791, jobj);
423 jobj->scale.y = y;
424 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
426 }
427}
428
429static inline void HSD_JObjSetScaleYWithMtxDirty(HSD_JObj* jobj, f32 y)
430{
431 HSD_ASSERT(791, jobj);
432 jobj->scale.y = y;
433 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
434 (HSD_JObjSetMtxDirty)(jobj);
435 }
436}
437
438static inline void HSD_JObjSetScaleZ(HSD_JObj* jobj, f32 z)
439{
440 HSD_ASSERT(806, jobj);
441 jobj->scale.z = z;
442 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
444 }
445}
446
447static inline void HSD_JObjSetScaleZWithMtxDirty(HSD_JObj* jobj, f32 z)
448{
449 HSD_ASSERT(806, jobj);
450 jobj->scale.z = z;
451 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
452 (HSD_JObjSetMtxDirty)(jobj);
453 }
454}
455
456static inline void HSD_JObjGetScale(HSD_JObj* jobj, Vec3* scale)
457{
458 HSD_ASSERT(823, jobj);
459 HSD_ASSERT(824, scale);
460 *scale = jobj->scale;
461}
462
463static inline f32 HSD_JObjGetScaleX(HSD_JObj* jobj)
464{
465 HSD_ASSERT(875, jobj);
466 return jobj->scale.x;
467}
468
469static inline f32 HSD_JObjGetScaleY(HSD_JObj* jobj)
470{
471 HSD_ASSERT(888, jobj);
472 return jobj->scale.y;
473}
474
475static inline f32 HSD_JObjGetScaleZ(HSD_JObj* jobj)
476{
477 HSD_ASSERT(901, jobj);
478 return jobj->scale.z;
479}
480
481static inline void HSD_JObjSetTranslate(HSD_JObj* jobj, Vec3* translate)
482{
483 HSD_ASSERT(916, jobj);
484 HSD_ASSERT(917, translate);
485 jobj->translate = *translate;
486 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
488 }
489}
490
492 Vec3* translate)
493{
494 HSD_ASSERT(916, jobj);
495 HSD_ASSERT(917, translate);
496 jobj->translate = *translate;
497 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
498 (HSD_JObjSetMtxDirty)(jobj);
499 }
500}
501
503 Vec3* translate)
504{
505 HSD_ASSERT(916, jobj);
506 HSD_ASSERT(917, translate);
507 jobj->translate = *translate;
508 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
510 }
511}
512
513static inline void HSD_JObjSetTranslateX(HSD_JObj* jobj, f32 x)
514{
515 HSD_ASSERT(932, jobj);
516 jobj->translate.x = x;
517 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
519 }
520}
521
523{
524 HSD_ASSERT(932, jobj);
525 jobj->translate.x = x;
526 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
527 (HSD_JObjSetMtxDirty)(jobj);
528 }
529}
530
531static inline void HSD_JObjSetTranslateY(HSD_JObj* jobj, f32 y)
532{
533 HSD_ASSERT(947, jobj);
534 jobj->translate.y = y;
535 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
537 }
538}
539
541{
542 HSD_ASSERT(947, jobj);
543 jobj->translate.y = y;
544 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
545 (HSD_JObjSetMtxDirty)(jobj);
546 }
547}
548
549static inline void HSD_JObjSetTranslateZ(HSD_JObj* jobj, f32 z)
550{
551 HSD_ASSERT(962, jobj);
552 jobj->translate.z = z;
553 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
555 }
556}
557
559{
560 HSD_ASSERT(962, jobj);
561 jobj->translate.z = z;
562 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
563 (HSD_JObjSetMtxDirty)(jobj);
564 }
565}
566
567static inline void HSD_JObjGetTranslation(HSD_JObj* jobj, Vec3* translate)
568{
569 HSD_ASSERT(979, jobj);
570 HSD_ASSERT(980, translate);
571 *translate = jobj->translate;
572}
573
576static inline void HSD_JObjGetTranslation2(HSD_JObj* jobj, Vec3* translate)
577{
578 HSD_ASSERT(979, jobj);
579 *translate = jobj->translate;
580}
581
583{
584 HSD_ASSERT(993, jobj);
585 return jobj->translate.x;
586}
587
589{
590 HSD_ASSERT(1006, jobj);
591 return jobj->translate.y;
592}
593
594static inline float HSD_JObjGetTranslationZ(HSD_JObj* jobj)
595{
596 HSD_ASSERT(1019, jobj);
597 return jobj->translate.z;
598}
599
600static inline void HSD_JObjAddRotationX(HSD_JObj* jobj, float x)
601{
602 HSD_ASSERT(1029, jobj);
603 jobj->rotate.x += x;
604 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
606 }
607}
608
609static inline void HSD_JObjAddRotationXWithMtxDirty(HSD_JObj* jobj, float x)
610{
611 HSD_ASSERT(1029, jobj);
612 jobj->rotate.x += x;
613 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
614 (HSD_JObjSetMtxDirty)(jobj);
615 }
616}
617
618static inline void HSD_JObjAddRotationY(HSD_JObj* jobj, float y)
619{
620 HSD_ASSERT(1041, jobj);
621 jobj->rotate.y += y;
622 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
624 }
625}
626
627static inline void HSD_JObjAddRotationZ(HSD_JObj* jobj, float z)
628{
629 HSD_ASSERT(1053, jobj);
630 jobj->rotate.z += z;
631 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
633 }
634}
635
636static inline void HSD_JObjAddScaleX(HSD_JObj* jobj, float x)
637{
638 HSD_ASSERT(1065, jobj);
639 jobj->scale.x += x;
640 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
642 }
643}
644
645static inline void HSD_JObjAddScaleY(HSD_JObj* jobj, float y)
646{
647 HSD_ASSERT(1077, jobj);
648 jobj->scale.y += y;
649 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
651 }
652}
653
654static inline void HSD_JObjAddScaleZ(HSD_JObj* jobj, float z)
655{
656 HSD_ASSERT(1089, jobj);
657 jobj->scale.z += z;
658 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
660 }
661}
662
663static inline void HSD_JObjAddTranslationX(HSD_JObj* jobj, float x)
664{
665 HSD_ASSERT(1102, jobj);
666 jobj->translate.x += x;
667 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
669 }
670}
671
672static inline void HSD_JObjAddTranslationY(HSD_JObj* jobj, float y)
673{
674 HSD_ASSERT(1114, jobj);
675 jobj->translate.y += y;
676 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
678 }
679}
680
681static inline void HSD_JObjAddTranslationYWithMtxDirty(HSD_JObj* jobj, float y)
682{
683 HSD_ASSERT(1114, jobj);
684 jobj->translate.y += y;
685 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
686 (HSD_JObjSetMtxDirty)(jobj);
687 }
688}
689
690static inline void HSD_JObjAddTranslationZ(HSD_JObj* jobj, float z)
691{
692 HSD_ASSERT(1126, jobj);
693 jobj->translate.z += z;
694 if (!(jobj->flags & JOBJ_MTX_INDEP_SRT)) {
696 }
697}
698
700{
701 HSD_ASSERT(1144, jobj);
703 return jobj->mtx;
704}
705
706static inline void HSD_JObjCopyMtx(HSD_JObj* jobj, Mtx mtx)
707{
708 HSD_ASSERT(1170, jobj);
709 HSD_ASSERT(1171, mtx);
710 PSMTXCopy(mtx, jobj->mtx);
711}
712
713static inline void HSD_JObjRef(HSD_JObj* jobj)
714{
715 ref_INC(jobj);
716}
717
718static inline void HSD_JObjRefThis(HSD_JObj* jobj)
719{
720 if (jobj != NULL) {
721 iref_INC(jobj);
722 }
723}
724
725void HSD_JObjResolveRefs(HSD_JObj* jobj, HSD_Joint* joint);
726void HSD_JObjUnrefThis(HSD_JObj* jobj);
727void HSD_JObjMakeMatrix(HSD_JObj* jobj);
729void HSD_JObjAddChild(HSD_JObj* jobj, HSD_JObj* child);
731void HSD_JObjAddDObj(HSD_JObj* jobj, HSD_DObj* dobj);
733void resolveIKJoint1(HSD_JObj* jobj);
734void resolveIKJoint2(HSD_JObj* jobj);
737int JObjInit(HSD_Class* o);
738void JObjReleaseChild(HSD_JObj* jobj);
739void JObjRelease(HSD_Class* o);
741void JObjAmnesia(HSD_ClassInfo* info);
742void HSD_JObjReqAnimByFlags(HSD_JObj* jobj, u32 flags, f32 frame);
744void HSD_JObjReqAnim(HSD_JObj* jobj, f32 frame);
746void JObjResetRST(HSD_JObj* jobj, HSD_Joint* joint);
747void JObjUpdateFunc(void* obj, enum_t type, HSD_ObjData* val);
748void HSD_JObjAnim(HSD_JObj* jobj);
749void JObjAnimAll(HSD_JObj* jobj);
751
752void HSD_JObjAddAnim(HSD_JObj*, HSD_AnimJoint* an_joint,
753 HSD_MatAnimJoint* mat_joint,
754 HSD_ShapeAnimJoint* sh_joint);
756 f32** cb_args);
757
758#endif
Annotations describing how archive data is laid out, for the parts a C declaration cannot express: ho...
static void cb(long result, struct DVDCommandBlock *block)
Definition fstload.c:19
static float const scale
Definition itlgunray.c:21
HSD_JObjInfo hsdJObj
Definition jobj.c:21
void HSD_JObjMakeMatrix(HSD_JObj *jobj)
Definition jobj.c:138
struct HSD_DObj * HSD_JObjGetDObj(HSD_JObj *jobj)
Definition jobj.c:931
u32 HSD_JObjGetFlags(HSD_JObj *jobj)
Definition jobj.c:985
void HSD_JObjSetupMatrixSub(HSD_JObj *)
Definition jobj.c:1385
void HSD_JObjUnrefThis(HSD_JObj *jobj)
Definition jobj.c:732
void HSD_JObjPrependRObj(HSD_JObj *jobj, HSD_RObj *robj)
Definition jobj.c:957
static void HSD_JObjSetRotationZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:337
static void HSD_JObjSetTranslateWithMtxDirtyOutOfLine(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:502
void HSD_JObjClearFlags(HSD_JObj *, u32 flags)
Definition jobj.c:1019
static void HSD_JObjSetMtxDirtyOutOfLine(HSD_JObj *jobj)
Definition jobj.h:243
void HSD_JObjSetDPtclCallback(DPCtlCallback cb)
Definition jobj.c:1461
void HSD_JObjReqAnimByFlags(HSD_JObj *jobj, u32 flags, f32 frame)
Definition jobj.c:236
static void HSD_JObjAddScaleZ(HSD_JObj *jobj, float z)
Definition jobj.h:654
static void HSD_JObjSetRotationY(HSD_JObj *jobj, f32 y)
Definition jobj.h:317
static HSD_JObj * HSD_JObjGetNext(HSD_JObj *jobj)
Definition jobj.h:203
#define JOBJ_SPLINE
Definition jobj.h:75
HSD_JObj * HSD_JObjGetCurrent(void)
Definition jobj.c:1060
static void HSD_JObjSetTranslateY(HSD_JObj *jobj, f32 y)
Definition jobj.h:531
static HSD_JObj * HSD_JObjGetChild(HSD_JObj *jobj)
Definition jobj.h:194
static f32 HSD_JObjGetScaleZ(HSD_JObj *jobj)
Definition jobj.h:475
static void HSD_JObjSetScaleWithMtxDirty(HSD_JObj *jobj, Vec3 *scale)
Definition jobj.h:392
void RecalcParentTrspBits(HSD_JObj *jobj)
Definition jobj.c:799
static HSD_JObj * HSD_JObjGetParent(HSD_JObj *jobj)
Definition jobj.h:212
void resolveIKJoint1(HSD_JObj *jobj)
Definition jobj.c:1104
static void HSD_JObjSetMtxDirtyOutOfLineLeaf(HSD_JObj *jobj)
Definition jobj.h:238
void HSD_JObjWalkTree0(HSD_JObj *jobj, HSD_JObjWalkTreeCallback cb, f32 **cb_args)
Definition jobj.c:89
#define JOBJ_MTX_INDEP_SRT
Definition jobj.h:89
static void HSD_JObjAddRotationZ(HSD_JObj *jobj, float z)
Definition jobj.h:627
#define JOBJ_MTX_DIRTY
Definition jobj.h:71
void resolveIKJoint2(HSD_JObj *jobj)
Definition jobj.c:1257
static void HSD_JObjAddRotationX(HSD_JObj *jobj, float x)
Definition jobj.h:600
static void HSD_JObjSetRotationYWithMtxDirty(HSD_JObj *jobj, f32 y)
Definition jobj.h:327
static void HSD_JObjSetTranslateWithMtxDirty(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:491
void HSD_JObjAddAnimAll(HSD_JObj *, HSD_AnimJoint *, HSD_MatAnimJoint *, HSD_ShapeAnimJoint *)
Definition jobj.c:323
static void HSD_JObjSetScaleX(HSD_JObj *jobj, f32 x)
Definition jobj.h:402
static f32 HSD_JObjGetRotationY(HSD_JObj *jobj)
Definition jobj.h:370
void HSD_JObjAddNext(HSD_JObj *jobj, HSD_JObj *next)
Definition jobj.c:878
void HSD_JObjDeleteRObj(HSD_JObj *jobj, HSD_RObj *robj)
Definition jobj.c:965
static void HSD_JObjSetTranslateYWithMtxDirty(HSD_JObj *jobj, f32 y)
Definition jobj.h:540
static HSD_RObj * HSD_JObjGetRObj(HSD_JObj *jobj)
Definition jobj.h:221
void HSD_JObjRemoveAnimAll(HSD_JObj *jobj)
Definition jobj.c:231
static void HSD_JObjAddTranslationY(HSD_JObj *jobj, float y)
Definition jobj.h:672
static f32 HSD_JObjGetTranslationX(HSD_JObj *jobj)
Definition jobj.h:582
void HSD_JObjWalkTree(HSD_JObj *jobj, HSD_JObjWalkTreeCallback cb, f32 **cb_args)
Definition jobj.c:111
static void HSD_JObjAddTranslationX(HSD_JObj *jobj, float x)
Definition jobj.h:663
void HSD_JObjResolveRefsAll(HSD_JObj *, HSD_Joint *)
Definition jobj.c:703
void HSD_JObjAddAnim(HSD_JObj *, HSD_AnimJoint *an_joint, HSD_MatAnimJoint *mat_joint, HSD_ShapeAnimJoint *sh_joint)
Definition jobj.c:298
static float HSD_JObjGetTranslationZ(HSD_JObj *jobj)
Definition jobj.h:594
static void HSD_JObjCopyMtx(HSD_JObj *jobj, Mtx mtx)
Definition jobj.h:706
static void HSD_JObjSetScaleZWithMtxDirty(HSD_JObj *jobj, f32 z)
Definition jobj.h:447
void HSD_JObjRemoveAnimByFlags(HSD_JObj *jobj, u32 flags)
Definition jobj.c:198
void HSD_JObjRemoveAnim(HSD_JObj *jobj)
Definition jobj.c:226
static void HSD_JObjSetScaleYWithMtxDirty(HSD_JObj *jobj, f32 y)
Definition jobj.h:429
void HSD_JObjReqAnimAllByFlags(HSD_JObj *jobj, u32 flags, f32 frame)
Definition jobj.c:255
void HSD_JObjAddChild(HSD_JObj *jobj, HSD_JObj *child)
Definition jobj.c:828
void HSD_JObjRemoveAll(HSD_JObj *)
Definition jobj.c:774
static void HSD_JObjSetScale(HSD_JObj *jobj, Vec3 *scale)
Definition jobj.h:382
int JObjInit(HSD_Class *o)
Definition jobj.c:1466
void HSD_JObjCheckDepend(HSD_JObj *jobj)
Definition jobj.c:30
static f32 HSD_JObjGetScaleX(HSD_JObj *jobj)
Definition jobj.h:463
void HSD_JObjSetFlags(HSD_JObj *, u32 flags)
Definition jobj.c:993
static void HSD_JObjSetScaleZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:438
static void HSD_JObjAddRotationXWithMtxDirty(HSD_JObj *jobj, float x)
Definition jobj.h:609
static void HSD_JObjSetRotationX(HSD_JObj *jobj, f32 x)
Definition jobj.h:297
static void HSD_JObjSetTranslateX(HSD_JObj *jobj, f32 x)
Definition jobj.h:513
HSD_JObj * HSD_JObjAlloc(void)
Definition jobj.c:1045
static void HSD_JObjAddTranslationYWithMtxDirty(HSD_JObj *jobj, float y)
Definition jobj.h:681
static void HSD_JObjGetTranslation2(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:576
void JObjResetRST(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:57
HSD_JObj * HSD_JObjRemove(HSD_JObj *jobj)
Definition jobj.c:741
static void HSD_JObjGetTranslation(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:567
void HSD_JObjSetDefaultClass(HSD_ClassInfo *info)
Definition jobj.c:602
static void HSD_JObjSetScaleY(HSD_JObj *jobj, f32 y)
Definition jobj.h:420
void HSD_JObjReqAnim(HSD_JObj *jobj, f32 frame)
Definition jobj.c:274
static void HSD_JObjAddTranslationZ(HSD_JObj *jobj, float z)
Definition jobj.h:690
static void HSD_JObjSetupMatrix(HSD_JObj *jobj)
Definition jobj.h:252
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:1089
static void HSD_JObjSetMtxDirtyInline(HSD_JObj *jobj)
Definition jobj.h:269
void HSD_JObjSetCurrent(HSD_JObj *jobj)
Definition jobj.c:1053
void JObjReleaseChild(HSD_JObj *jobj)
Definition jobj.c:1480
void HSD_JObjAnim(HSD_JObj *jobj)
Definition jobj.c:531
void JObjSortAnim(HSD_AObj *aobj)
Definition jobj.c:279
void HSD_JObjAddDObj(HSD_JObj *jobj, HSD_DObj *dobj)
Definition jobj.c:939
#define JOBJ_PTCL
Definition jobj.h:70
static void HSD_JObjSetRotationXWithMtxDirty(HSD_JObj *jobj, f32 x)
Definition jobj.h:307
void HSD_JObjRemoveAnimAllByFlags(HSD_JObj *jobj, u32 flags)
Definition jobj.c:212
static void HSD_JObjSetRotationWithMtxDirty(HSD_JObj *jobj, Quaternion *rotate)
Definition jobj.h:286
void HSD_JObjReqAnimAll(HSD_JObj *, f32)
Definition jobj.c:269
void JObjUpdateFunc(void *obj, enum_t type, HSD_ObjData *val)
Definition jobj.c:351
#define HSD_JObjSetMtxDirty(jobj)
Why does this seem to be a define while the others are inline functions?
Definition jobj.h:261
#define JOBJ_USE_QUATERNION
Definition jobj.h:78
void HSD_JObjResolveRefs(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:682
HSD_JObj * HSD_JObjReparent(HSD_JObj *jobj, HSD_JObj *parent)
Definition jobj.c:854
static void HSD_JObjAddRotationY(HSD_JObj *jobj, float y)
Definition jobj.h:618
static void HSD_JObjAddScaleY(HSD_JObj *jobj, float y)
Definition jobj.h:645
void JObjRelease(HSD_Class *o)
Definition jobj.c:1511
void HSD_JObjResetRST(HSD_JObj *jobj, HSD_Joint *joint)
Definition jobj.c:72
static void HSD_JObjSetTranslateXWithMtxDirty(HSD_JObj *jobj, f32 x)
Definition jobj.h:522
void(* HSD_JObjWalkTreeCallback)(HSD_JObj *, f32 **, s32)
Definition jobj.h:157
static f32 HSD_JObjGetRotationX(HSD_JObj *jobj)
Definition jobj.h:364
static void HSD_JObjGetScale(HSD_JObj *jobj, Vec3 *scale)
Definition jobj.h:456
void JObjAmnesia(HSD_ClassInfo *info)
Definition jobj.c:1529
void HSD_JObjSetMtxDirtySub(HSD_JObj *)
Definition jobj.c:1445
static void HSD_JObjRefThis(HSD_JObj *jobj)
Definition jobj.h:718
void HSD_JObjDispAll(HSD_JObj *jobj, Mtx vmtx, u32 flags, u32 rendermode)
Definition jobj.c:567
void HSD_JObjUnref(HSD_JObj *jobj)
Definition jobj.c:717
HSD_JObj * HSD_JObjLoadJoint(HSD_Joint *)
Definition jobj.c:667
static void HSD_JObjRef(HSD_JObj *jobj)
Definition jobj.h:713
static f32 HSD_JObjGetTranslationY(HSD_JObj *jobj)
Definition jobj.h:588
static void HSD_JObjAddScaleX(HSD_JObj *jobj, float x)
Definition jobj.h:636
static void HSD_JObjSetTranslateZWithMtxDirty(HSD_JObj *jobj, f32 z)
Definition jobj.h:558
void HSD_JObjAnimAll(HSD_JObj *)
Definition jobj.c:558
static void HSD_JObjSetRotationZWithMtxDirty(HSD_JObj *jobj, f32 z)
Definition jobj.h:347
static void HSD_JObjSetRotation(HSD_JObj *jobj, Quaternion *rotate)
Definition jobj.h:276
void(* DPCtlCallback)(int, int lo, int hi, HSD_JObj *jobj)
Definition jobj.h:158
static bool HSD_JObjMtxIsDirty(HSD_JObj *jobj)
Definition jobj.h:227
static void HSD_JObjSetTranslate(HSD_JObj *jobj, Vec3 *translate)
Definition jobj.h:481
static f32 HSD_JObjGetScaleY(HSD_JObj *jobj)
Definition jobj.h:469
static MtxPtr HSD_JObjGetMtxPtr(HSD_JObj *jobj)
Definition jobj.h:699
s32 JObjLoad(HSD_JObj *jobj, HSD_Joint *joint, HSD_JObj *parent)
Definition jobj.c:629
static f32 HSD_JObjGetRotationZ(HSD_JObj *jobj)
Definition jobj.h:376
#define JOBJ_USER_DEF_MTX
Definition jobj.h:87
static void HSD_JObjSetScaleXWithMtxDirty(HSD_JObj *jobj, f32 x)
Definition jobj.h:411
void JObjAnimAll(HSD_JObj *jobj)
Definition jobj.c:543
static void HSD_JObjSetTranslateZ(HSD_JObj *jobj, f32 z)
Definition jobj.h:549
void HSD_JObjSetFlagsAll(HSD_JObj *, u32 flags)
Definition jobj.c:1006
void HSD_JObjClearFlagsAll(HSD_JObj *, u32 flags)
Definition jobj.c:1032
static void HSD_JObjGetRotation(HSD_JObj *jobj, Quaternion *rotate)
Definition jobj.h:357
void PSMTXCopy(Mtx src, Mtx dst)
f32(* MtxPtr)[4]
Definition mtx.h:53
struct Vec Vec3
f32 Mtx[3][4]
Definition mtx.h:50
signed int s32
Definition types.h:12
unsigned int u32
Definition types.h:13
float f32
Definition types.h:18
#define HSD_ASSERT(line, cond)
Definition mnvibration.c:6
static void iref_INC(void *o)
Definition object.h:115
static void ref_INC(void *o)
Definition object.h:83
#define ASSERT_SIZE(expr, size)
Definition platform.h:127
int enum_t
The underlying type of an enum, used as a placeholder.
Definition platform.h:29
static Mtx vmtx
Definition psdisp.c:54
static u32 next
Definition rand.c:4
int y
Definition types.h:1
int x
Definition types.h:0
#define NULL
Definition stddef.h:19
Definition aobj.h:42
Definition aobj.h:63
Definition class.h:32
Definition class.h:14
Definition dobj.h:23
Definition dobj.h:14
u32 flags
Definition dobj.h:20
HSD_Class parent
Definition dobj.h:15
HSD_AObj * aobj
Definition dobj.h:19
Definition jobj.h:146
void(* release_child)(HSD_JObj *jobj)
Definition jobj.h:153
s32(* load)(HSD_JObj *jobj, HSD_Joint *joint, HSD_JObj *jobj_2)
Definition jobj.h:148
HSD_ObjInfo parent
Definition jobj.h:147
void(* disp)(HSD_JObj *jobj, Mtx vmtx, Mtx pmtx, HSD_TrspMask trsp_mask, u32 rendermode)
Definition jobj.h:151
void(* make_mtx)(HSD_JObj *jobj)
Definition jobj.h:149
void(* make_pmtx)(HSD_JObj *jobj, Mtx mtx, Mtx rmtx)
Definition jobj.h:150
Definition jobj.h:106
u32 flags
Definition jobj.h:111
HSD_JObj * parent
Definition jobj.h:109
Vec3 translate
Definition jobj.h:119
Mtx mtx
Definition jobj.h:120
Vec3 scale
Definition jobj.h:118
Quaternion rotate
Definition jobj.h:117
MtxPtr envelopemtx
Definition jobj.h:122
HSD_AObj * aobj
Definition jobj.h:123
union HSD_JObj::HSD_JObj_u u
HSD_Obj object
Definition jobj.h:107
HSD_JObj * next
Definition jobj.h:108
HSD_JObj * child
Definition jobj.h:110
HSD_RObj * robj
Definition jobj.h:124
HSD_IDKey id
Definition jobj.h:125
Vec3 * scl
Definition jobj.h:121
Definition jobj.h:129
Vec3 scale
Definition jobj.h:140
HSD_RObjDesc * robjdesc
Definition jobj.h:143
char * class_name
Definition jobj.h:130
HSD_Joint * child
Definition jobj.h:132
HSD_Joint * next
Definition jobj.h:133
Vec3 position
Definition jobj.h:141
Vec3 rotation
Definition jobj.h:139
MtxPtr mtx
Definition jobj.h:142
u32 flags
Definition jobj.h:131
union HSD_Joint::HSD_Joint_u u
Definition mobj.h:136
Definition object.h:66
Definition object.h:60
Definition robj.h:73
Definition robj.h:61
Definition list.h:6
Definition pobj.h:115
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:146
uintptr_t HSD_IDKey
Definition forward.h:107
Definition jobj.h:112
HSD_Spline * spline
Definition jobj.h:115
struct HSD_DObj * dobj
Definition jobj.h:114
HSD_SList * ptcl
Definition jobj.h:113
Definition jobj.h:134
HSD_Spline *spline DAT_IF((flags &JOBJ_SPLINE) !=0)
HSD_DObjDesc *dobjdesc DAT_IF(!(flags &(JOBJ_PTCL|JOBJ_SPLINE)))
HSD_SList *ptcl DAT_IF((flags &JOBJ_PTCL) !=0)
Definition fobj.h:70