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