-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSA2Structs.h
3383 lines (3160 loc) · 56.6 KB
/
SA2Structs.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
#pragma once
#include <stdint.h>
#include "ninja.h"
#include "SA2Enums.h"
typedef Uint32 NJD_SPRITE;
typedef Uint32 NJD_FLAG;
typedef Uint32 NJD_CONTROL_3D;
typedef DWORD _DWORD;
typedef Uint32 NJD_COLOR_TARGET;
typedef Uint32 NJD_COLOR_BLENDING;
typedef Uint32 NJD_TEX_SHADING;
typedef Uint32 NJD_DRAW;
typedef Uint32 NJD_TEXATTR;
// SA2 Structs
struct EntityData1;
struct taskwk;
struct ObjectListEntry;
struct COL;
struct ModelIndex;
struct SETEntry;
struct _OBJ_EDITENTRY;
struct SETObjectData;
struct OBJ_CONDITION;
struct CollisionInfo;
struct colliwk;
struct struct_0;
struct AnimationIndex;
struct AnimationInfo;
struct CollisionData;
struct CCL_INFO;
struct CharObj2Base;
struct playerwk;
struct EntityData2;
struct motionwk;
struct LaunchConfig_vtable;
struct ChaoDataBase;
struct ChaoUnknownE;
struct ChaoDebugData1;
struct UnknownData2;
struct ChaoData1;
struct ObjUnknownA;
struct ObjUnknownB;
struct ObjectMaster;
struct task;
struct LoopHead;
struct CameraInfo;
struct CameraParam;
using ObjectFuncPtr = void(__cdecl*)(ObjectMaster*);
using TaskFuncPtr = void(__cdecl*)(task*);
using CameraFuncPtr = void(__cdecl*)(CameraInfo*, CameraParam*);
// All structs should be packed.
#pragma pack(push, 1)
struct AllocatedMem
{
int Cookie;
void *Data;
};
union __declspec(align(2)) Data1Ptr
{
void *Undefined;
EntityData1 *Entity;
ChaoData1 *Chao;
ChaoDebugData1 *ChaoDebug;
};
union __declspec(align(2)) taskwkPtr
{
void* Undefined;
taskwk* twp;
ChaoData1* Chao;
ChaoDebugData1* ChaoDebug;
};
union Data2Ptr
{
void *Undefined;
ObjUnknownB *UnknownB;
EntityData2 *Entity;
CharObj2Base *Character;
UnknownData2 *Unknown_Chao;
};
union motionwkPtr
{
void* Undefined;
ObjUnknownB* UnknownB;
motionwk* Entity;
playerwk* Character;
UnknownData2* Unknown_Chao;
};
struct ObjectMaster
{
ObjectMaster *PrevObject;
ObjectMaster *NextObject;
ObjectMaster *Parent;
ObjectMaster *Child;
ObjectFuncPtr MainSub;
ObjectFuncPtr DisplaySub;
ObjectFuncPtr DeleteSub;
ObjectFuncPtr DisplaySub_Delayed1;
ObjectFuncPtr DisplaySub_Delayed2;
ObjectFuncPtr DisplaySub_Delayed3;
ObjectFuncPtr DisplaySub_Delayed4;
void *field_2C;
SETObjectData *SETData;
Data1Ptr Data1;
UnknownData2 *EntityData2;
ObjUnknownA *UnknownA_ptr;
Data2Ptr Data2;
char *Name;
char *NameAgain;
void *field_4C;
};
struct task
{
task* last;
task* next;
task* ptp;
task* ctp;
TaskFuncPtr exec;
TaskFuncPtr disp;
TaskFuncPtr dest;
TaskFuncPtr dispDelayed1;
TaskFuncPtr dispDelayed2;
TaskFuncPtr dispDelayed3;
TaskFuncPtr dispDelayed4;
void* field_2C;
OBJ_CONDITION* ocp;
taskwkPtr Data1;
UnknownData2* EntityData2;
ObjUnknownA* UnknownA_ptr;
motionwkPtr anywk;
char* Name;
char* NameAgain;
void* thp;
};
struct SETObjectData
{
uint8_t LoadCount;
char field_1;
__int16 Flags;
ObjectMaster *Object;
SETEntry *SETEntry;
float Distance;
};
struct OBJ_CONDITION
{
char scCount;
char scUserFlag;
__int16 ssCondition;
task* pTask;
_OBJ_EDITENTRY* pObjEditEntry;
float fRangeOut;
};
struct Rotation
{
Angle x, y, z;
};
using Angle3 = Rotation;
struct EntityData1
{
char Action;
char NextAction;
char field_2;
char Index;
__int16 Status;
__int16 Timer;
Rotation Rotation;
NJS_VECTOR Position;
NJS_VECTOR Scale;
CollisionInfo *Collision;
};
struct taskwk
{
char mode;
char smode;
char id;
char btimer;
__int16 flag;
unsigned __int16 wtimer;
Angle3 ang;
NJS_POINT3 pos;
NJS_POINT3 scl;
colliwk* cwp;
};
struct MotionTableData
{
__int16 flag;
__int16 gap2;
int AnimID;
int TransitionToID;
float frameIncreaseSpeed_;
float someSpeedThing;
float dword14;
__int16 SomeFlagThingInEntry2;
__int16 field_1A;
float frame;
float StartFrame2;
float EndFrame2;
float PlaySpeed2;
NJS_MOTION *LastNJS_Motion;
__int16 SomeFlagThingInEntry;
__int16 field_32;
float StartFrame;
float StartFrame_;
float EndFrame;
float PlaySpeed;
NJS_MOTION *NJS_MOTION;
void *PointerToAnimations;
};
struct ChaoUnknownD
{
__int16 field_0;
__int16 field_2;
__int16 field_4;
__int16 field_6;
int field_8;
int field_C;
int field_10;
int field_14;
int field_18;
};
struct ChaoSomeUnknownA
{
__int16 index;
__int16 index2;
__int16 ID;
__int16 someFlag;
int saveData;
int field_C;
NJS_VECTOR locationVector;
int field_1C;
int field_20;
int field_24;
float field_28;
float field_2C;
float playerDistance;
__int16 setSomeIndex;
__int16 field_36;
__int16 field_38;
__int16 field_3A;
ObjectMaster *pointerToOwner;
ChaoSomeUnknownA *heldBy;
ChaoSomeUnknownA *field_44;
};
struct ChaoGlobalObjectDefinition
{
__int16 field_0;
__int16 field_2;
__int16 field_4;
__int16 field_6;
float Distance;
int field_C;
int field_10;
int field_14;
ChaoSomeUnknownA *UnknownA;
};
struct ChaoObjectList
{
__int16 Count;
__int16 field_2;
int IsSet;
int field_8;
int field_C;
float Distance;
__int16 Count2;
__int16 field_16;
ChaoGlobalObjectDefinition field_18[32];
};
struct ChaoCurrentActionInfo
{
__int16 field_0;
unsigned __int16 Index;
__int16 field_4;
__int16 field_6;
int field_8;
int Timer;
int field_10;
int field_14;
int BehaviourTime;
};
struct ChaoBehaviourInfothing
{
int field_0[8];
};
struct ChaoBehaviourInfo
{
ChaoCurrentActionInfo CurrentActionInfo;
__int16 CanThink_;
__int16 field_1E;
int field_20;
int field_24;
ChaoBehaviourInfothing field_28;
ChaoBehaviourInfothing field_48;
char field_68[8];
char field_70[72];
int field_B8;
int field_BC;
int field_C0;
char field_288[420];
int field_268;
int field_430;
float someFloat;
NJS_VECTOR someKindaPosition;
int LastBehaviour;
int behaviourNumber;
int currentBehaviourIndex;
int BehaviourBase[15];
int field_2C8;
int BehaviourTimer[15];
};
struct ChaoToyChunk
{
NJS_OBJECT *model;
NJS_TEXLIST *texlist;
float scale;
int exists;
};
struct ChaoFacialData
{
int eyeTimer;
__int16 field_4;
__int16 field_6;
__int16 Eye;
__int16 field_A;
int mouthTimer;
__int16 field_10;
__int16 Mouth;
NJS_VECTOR somekindaposition;
float field_20;
int field_24;
NJS_CNK_MODEL *Eye1;
NJS_CNK_MODEL *Eye2;
int field_30;
int blinkState;
int blinkTimer;
int dword3C;
unsigned int unsigned40;
int gap44;
int field_48;
int VertRotAlt;
int VertRot;
int field_54;
int HorizRotAlt;
int HorizRot;
};
struct EmotionBallData
{
__int16 ballID;
__int16 ballID2;
int notsure;
int timer;
int sizeSine;
int yPosSine;
int color;
__int16 torchTimer;
__int16 timer1;
int randomZRot;
NJS_VECTOR HeadPosUnitTransPortion;
NJS_VECTOR parentPosition;
__int16 gap38;
unsigned __int16 field_3A;
__int16 field_3C;
__int16 field_3E;
float field_40;
float sizeTimer;
int gap48;
NJS_VECTOR position;
NJS_VECTOR velocity;
NJS_VECTOR someSize;
__int16 field_70;
__int16 field_72;
__int16 field_74;
__int16 field_76;
__int16 field_78;
__int16 field_7A;
__int16 field_7C;
__int16 field_7E;
__int16 field_80;
__int16 field_82;
int field_84;
float float88;
int field_8C;
NJS_VECTOR float90;
NJS_VECTOR float9C;
NJS_VECTOR field_A8;
};
struct ChaoObjectListInfo
{
float MinimumDistance;
int a2;
int MinimumRotation;
float a4;
float a5;
};
struct ChaoEvos
{
NJS_OBJECT *child[40];
NJS_OBJECT *normal[40];
NJS_OBJECT *swim[40];
NJS_OBJECT *fly[40];
NJS_OBJECT *run[40];
NJS_OBJECT *power[40];
};
struct ChaoData1
{
EntityData1 entity;
int gap_30;
int field_34;
ObjectMaster *ObjectMaster_ptr1;
int field_38;
ObjectMaster *ObjectMaster_ptr2;
int field_44;
float field_54;
int field_4C;
int field_50;
int field_60;
int field_58;
ChaoDataBase *ChaoDataBase_ptr;
char field_70[40];
int field_88;
int field_8C;
char field_90[16];
int Flags;
__int16 field_B4;
__int16 field_A6;
float waypointID;
MotionTableData MotionTable;
MotionTableData BodyTypeNone_MotionTable;
char gap144[112];
ChaoBehaviourInfo ChaoBehaviourInfo;
int field_4BC[21];
int PointerToStructWithCnkObject;
float ChaoNodes[40];
ChaoEvos *NormalModels;
ChaoEvos *HeroModels;
ChaoEvos *DarkModels;
NJS_VECTOR BaseTranslationPos;
NJS_VECTOR HeadTranslationPos;
NJS_VECTOR LeftHandTranslationPos;
NJS_VECTOR RightHandTranslationPos;
NJS_VECTOR LeftLegTranslationPos;
NJS_VECTOR RightLegTranslationPos;
NJS_VECTOR NoseTranslationPos;
NJS_VECTOR NoseUnitTransPortion;
NJS_VECTOR LeftEyeTranslationPos;
NJS_VECTOR LeftEyeUnitTransPortion;
NJS_VECTOR RightEyeTranslationPos;
NJS_VECTOR RightEyeUnitTransPortion;
ChaoToyChunk LeftHandToyChunk;
ChaoToyChunk RightHandToyChunk;
int field_670;
int field_674;
int field_678;
int field_67C;
int field_680;
int field_684;
int field_688;
ChaoFacialData ChaoFacialData;
EmotionBallData EmotionBallData;
NJS_VECTOR field_7A4;
float waypointLerpFactor;
NJS_VECTOR field_7B4;
NJS_VECTOR field_7C0;
ChaoObjectListInfo ObjectListInfo;
ChaoObjectList PlayerObjects;
ChaoObjectList ChaoObjects;
ChaoObjectList FruitObjects;
ChaoObjectList TreeObjects;
ChaoObjectList ToyObjects;
char ObjectListEnd;
char field_19D9[927];
};
struct ChaoDebugData1
{
char CurrentMenu;
char MenuSelection;
char field_2[18];
__int16 ChaoID;
char field_16[10];
};
struct UnknownData2_B
{
int field_0;
char gap_4[12];
float field_10;
NJS_VECTOR field_14;
};
struct UnknownData2
{
NJS_VECTOR vector_0;
char gap_C[4];
float field_10;
char gap_14[8];
int field_1C;
char gap_20[8];
int field_28;
int field_2C;
float field_30;
int field_34;
char gap_38[4];
int field_3C;
__int16 field_40;
__int16 Index;
char gap_44[4];
float field_48;
char gap_4C[20];
NJS_VECTOR some_vector;
char gap_6C[4];
float field_70;
char gap_74[28];
float field_90;
float field_94;
float field_98;
float field_9C;
float field_A0;
float field_A4;
float field_A8;
float field_AC;
char gap_B0[4];
float field_B4;
float field_B8;
float field_BC;
float field_C0;
float field_C4;
float field_C8;
float field_CC;
float field_D0;
char gap_D4[4];
float field_D8;
float field_DC;
NJS_VECTOR field_E0;
UnknownData2_B WeirdStructures[12];
};
struct ObjUnknownA
{
int field_0;
int field_4;
int field_8;
int field_C;
int field_10;
int field_14;
int field_18;
int field_1C;
int field_20;
float field_24;
float field_28;
float field_2C;
int field_30;
int field_34;
};
struct ObjUnknownB
{
int Time;
int Index;
int Mode;
int field_C;
};
// Movement information (motionwk internally)
struct EntityData2
{
NJS_POINT3 Velocity;
NJS_POINT3 Acceleration;
Rotation Forward;
Rotation SpeedAngle;
float Radius;
float Height;
float Weight;
};
struct motionwk
{
NJS_POINT3 spd;
NJS_POINT3 acc;
Angle3 ang_aim;
Angle3 ang_spd;
float rad;
float height;
float weight;
};
struct PhysicsData
{
int HangTime;
float FloorGrip;
float SpeedCapH;
float SpeedCapV;
float SpeedMaxH;
float PushSpeedMax;
float JumpSpeed;
float NoControlSpeed;
float SlideSpeed;
float JogSpeed;
float RunSpeed;
float RushSpeed;
float KnockbackSpeed;
float DashSpeed;
float JumpAdd;
float RunAccel;
float AirAccel;
float RunDecel;
float RunBrake;
float AirBrake;
float AirDecel;
float AirResist;
float AirResistV;
float AirResistH;
float GroundFriction;
float GroundFrictionH;
float FrictionCap;
float RatBound;
float Radius;
float Height;
float Weight;
float CameraY;
float CenterHeight;
};
// Physics struct from SADX symbols
struct player_parameter
{
int jump2_timer;
float pos_error;
float lim_h_spd;
float lim_v_spd;
float max_x_spd;
float max_psh_spd;
float jmp_y_spd;
float nocon_speed;
float slide_speed;
float jog_speed;
float run_speed;
float rush_speed;
float crash_speed;
float dash_speed;
float jmp_addit;
float run_accel;
float air_accel;
float slow_down;
float run_break;
float air_break;
float air_resist_air;
float air_resist;
float air_resist_y;
float air_resist_z;
float grd_frict;
float grd_frict_z;
float lim_frict;
float rat_bound;
float rad;
float height;
float weight;
float eyes_height;
float center_height;
};
struct CharAnimInfo
{
__int16 mtnmode;
__int16 Next;
__int16 Current;
__int16 Animation3;
__int16 field_8;
__int16 acttimer;
__int16 field_C;
char field_E;
char field_F;
float nframe;
float field_14;
float field_18;
char field_1C;
char field_1D;
char field_1E;
char field_1F;
char field_20;
char field_21;
char field_22;
char field_23;
AnimationInfo *Animations;
NJS_MOTION *Motion;
};
struct mtnjvwk
{
__int16 mtnmode;
unsigned __int16 reqaction;
unsigned __int16 field_19;
unsigned __int16 action;
unsigned __int16 lastaction;
unsigned __int16 nextaction;
unsigned __int16 acttimer;
__int16 flag;
float nframe;
float start_frame;
float* spdp;
float* workp;
char field_20;
char field_21;
char field_22;
char field_23;
AnimationInfo* plactptr;
NJS_MOTION* actwkptr;
};
struct shadowwk
{
int angx;
int angz;
unsigned int Attr_top;
unsigned int Attr_bottom;
float y_top;
float y_bottom;
unsigned int _Attr_top;
unsigned int _Attr_bottom;
};
// Vertical surface information for shadows and ripples
struct CharSurfaceInfo
{
Angle AngX;
Angle AngZ;
SurfaceFlags TopSurface;
SurfaceFlags BottomSurface;
Float TopSurfaceDist;
Float BottomSurfaceDist;
SurfaceFlags PrevTopSurface;
SurfaceFlags PrevBottomSurface;
};
// Contains input (first 4 variables) and output information for the dynamic collision system.
struct csts
{
float radius;
NJS_POINT3 pos;
NJS_POINT3 spd;
NJS_POINT3 tnorm;
unsigned __int16 find_count;
unsigned __int16 selected_nmb;
float yt;
float yb;
int angx;
int angz;
NJS_POINT3 normal;
NJS_POINT3 normal2;
NJS_POINT3 onpoly;
NJS_POINT3 pshbk;
NJS_POINT3 anaspdh;
NJS_POINT3 anaspdv;
};
// Player-specific data, common base for all characters.
struct CharObj2Base
{
char PlayerNum;
char CharID;
char Costume;
char CharID2;
char ActionWindowItems[8];
char ActionWindowItemCount;
char field_D[3];
__int16 Powerups;
__int16 field_12;
__int16 DisableControlTimer;
__int16 UnderwaterTime;
__int16 IdleTime;
__int16 ConfuseTime;
char gap1C[8];
int Upgrades;
float field_28;
Angle TiltAngle;
float PathDist;
float Up;
char field_38[8];
float SomeMultiplier;
int field_44;
float MechHP;
NJS_POINT3 Eff;
NJS_POINT3 Acceleration;
NJS_VECTOR Speed;
NJS_POINT3 WallNormal;
NJS_POINT3 FloorNormal;
SurfaceFlags CurrentSurfaceFlags;
SurfaceFlags PreviousSurfaceFlags;
csts* DynColInfo;
ObjectMaster* HeldObject;
char gap98[4];
ObjectMaster* HoldTarget;
ObjectMaster* CurrentDyncolTask;
int field_A4;
char gapA8[16];
LoopHead* PathData;
NJS_MOTION** Animation;
PhysicsData PhysData;
NJS_VECTOR SomeVectors[4];
CharAnimInfo AnimInfo;
CharSurfaceInfo SurfaceInfo;
};
struct playerwk
{
char PlayerNum;
char CharID;
char Costume;
char CharID2;
char ActionWindowItems[8];
char ActionWindowItemCount;
char field_D[3];
__int16 Powerups;
__int16 field_12;
__int16 DisableControlTimer;
__int16 UnderwaterTime;
__int16 IdleTime;
__int16 ConfuseTime;
char gap1C[8];
int Upgrades;
float field_28;
Angle TiltAngle;
float PathDist;
float Up;
char field_38[8];
float SomeMultiplier;
int field_44;
float MechHP;
NJS_POINT3 eff;
NJS_POINT3 acc;
NJS_VECTOR spd;
NJS_POINT3 wall_normal;
NJS_POINT3 floor_normal;
SurfaceFlags CurrentSurfaceFlags;
SurfaceFlags PreviousSurfaceFlags;
csts* cstsp; //dyncol info
task* htp;
char gap98[4];
task* HoldTarget;
task* CurrentDyncolTask;
int field_A4;
char gapA8[16];
LoopHead* PathData;
NJS_MOTION** Animation;
player_parameter p;
NJS_VECTOR SomeVectors[4];
mtnjvwk mj;
shadowwk shadow;
};
struct SETEntry
{
__int16 ID;
__int16 XRot;
__int16 YRot;
__int16 ZRot;
NJS_VECTOR Position;
NJS_VECTOR Scale;
};
struct _OBJ_EDITENTRY
{
unsigned __int16 usID;
__int16 rotx;
__int16 roty;
__int16 rotz;
float xpos;
float ypos;
float zpos;
float xscl;
float yscl;
float zscl;
};
struct CollisionHitInfo
{
__int8 my_num;
__int8 hit_num;
unsigned __int16 flag;
EntityData1* hit_entity;
};
struct c_colli_hit_info
{
char my_num;
char hit_num;
unsigned __int16 flag;
taskwk* hit_twp;
};
struct CollisionInfo
{
unsigned __int16 Id;
__int16 HitCount;
unsigned __int16 Flag;
unsigned __int16 Count;
float Range;
CollisionData* CollisionArray;
CollisionHitInfo CollisionHits[16]; // the first 16 entities that collide with this
NJS_POINT3 Normal;
ObjectMaster* Object;
__int16 my_num;
__int16 hit_num;
CollisionInfo* CollidingObject; // the first colliding object
};
struct colliwk
{
unsigned __int16 id;
__int16 nbHit;
unsigned __int16 flag;
unsigned __int16 nbInfo;
float colli_range;
CCL_INFO* info;
c_colli_hit_info hit_info[16];
NJS_POINT3 normal;
task* mytask;
__int16 my_num;
__int16 hit_num;
colliwk* hit_cwp;
};
struct ChaoCharacterBond
{
char a;
char b;
int unknown;
};
struct ChaoDNA
{
char ResetTrigger;
char field_1[91];
char SwimStatGrade1;
char SwimStatGrade2;
char FlyStatGrade1;
char FlyStatGrade2;
char RunStatGrade1;
char RunStatGrade2;
char PowerStatGrade1;
char PowerStatGrade2;
char StaminaStatGrade1;
char StaminaStatGrade2;
char LuckStatGrade1;
char LuckStatGrade2;
char IntelligenceStatGrade1;
char IntelligenceStatGrade2;
char UnknownStatGrade1;
char UnknownStatGrade2;
char field_4A4[34];
char FavoriteFruit1;
char FavoriteFruit2;
char field_4C8[4];
char Color1;
char Color2;
char MonotoneFlag1;
char MonotoneFlag2;
char Texture1;
char Texture2;
char ShinyFlag1;
char ShinyFlag2;
char EggColor1;
char EggColor2;
char gap_4D6[6];
};
struct ChaoEmotions
{
__int16 field_124;