11
11
12
12
#pragma once
13
13
14
- #include < windows.h>
15
14
#include < game/CColModel.h>
15
+ #include " CCompressedVectorSA.h"
16
16
17
17
#define FUNC_CColModel_Constructor 0x40FB60
18
18
#define FUNC_CColModel_Destructor 0x40F700
19
19
20
- typedef struct
20
+ struct CBoxSA
21
21
{
22
- CVector vecMin;
23
- CVector vecMax;
24
- CVector vecOffset;
25
- FLOAT fRadius ;
26
- } CBoundingBoxSA;
22
+ CVector m_vecMin;
23
+ CVector m_vecMax;
24
+ };
25
+ static_assert (sizeof (CBoxSA) == 0x18, "Invalid size for CBoxSA");
27
26
28
- typedef struct
27
+ struct CBoundingBoxSA : CBoxSA
29
28
{
30
- CVector vecCenter;
31
- float fRadius ;
32
- } CColSphereSA;
29
+ };
30
+ static_assert (sizeof (CBoundingBoxSA) == 0x18, "Invalid size for CBoundingBoxSA");
33
31
34
- typedef struct
32
+ struct CColBoxSA : CBoxSA
35
33
{
36
- CVector min;
37
- CVector max;
38
- } CColBoxSA;
34
+ EColSurface m_material;
35
+ std::uint8_t m_flags;
36
+ CColLighting m_lighting;
37
+ std::uint8_t m_brightness;
38
+ };
39
+ static_assert (sizeof (CColBoxSA) == 0x1C, "Invalid size for CColBoxSA");
39
40
40
- typedef struct
41
+ struct CColLineSA
41
42
{
42
- unsigned short v1;
43
- unsigned short v2;
44
- unsigned short v3;
45
- EColSurface material;
46
- CColLighting lighting;
47
- } CColTriangleSA;
48
-
49
- typedef struct
43
+ CVector m_vecStart;
44
+ float m_startSize;
45
+ CVector m_vecStop;
46
+ float m_stopSize;
47
+ };
48
+ static_assert (sizeof (CColLineSA) == 0x20, "Invalid size for CColLineSA");
49
+
50
+ struct CColDiskSA
51
+ {
52
+ CVector m_startPosition;
53
+ float m_startRadius;
54
+ std::uint8_t m_material;
55
+ std::uint8_t m_piece;
56
+ std::uint8_t m_lighting;
57
+ CVector m_stopPosition;
58
+ float m_stopRadius;
59
+ };
60
+ static_assert (sizeof (CColDiskSA) == 0x24, "Invalid size for CColDiskSA");
61
+
62
+ struct CSphereSA
50
63
{
51
- BYTE pad0[12 ];
52
- } CColTrianglePlaneSA;
64
+ CVector m_center;
65
+ float m_radius;
66
+ };
67
+ static_assert (sizeof (CSphereSA) == 0x10, "Invalid size for CSphereSA");
53
68
54
- typedef struct
69
+ struct CColSphereSA : CSphereSA
70
+ {
71
+ union
72
+ {
73
+ EColSurface m_material;
74
+ std::uint8_t m_collisionSlot;
75
+ };
76
+
77
+ union
78
+ {
79
+ std::uint8_t m_flags;
80
+
81
+ struct
82
+ {
83
+ std::uint8_t m_hasSpheresBoxesTriangles : 1 ;
84
+ std::uint8_t m_isSingleAllocationCollisionData : 1 ;
85
+ std::uint8_t m_isActive: 1 ;
86
+ std::uint8_t m_flag0x08 : 1 ;
87
+ std::uint8_t m_flag0x10 : 1 ;
88
+ std::uint8_t m_flag0x20 : 1 ;
89
+ std::uint8_t m_flag0x40 : 1 ;
90
+ std::uint8_t m_flag0x80 : 1 ;
91
+ };
92
+ };
93
+
94
+ std::uint8_t m_lighting;
95
+ std::uint8_t m_light;
96
+
97
+ CColSphereSA ()
98
+ {
99
+ m_collisionSlot = 0 ;
100
+ m_flags = 0 ;
101
+ m_lighting = 0 ;
102
+ m_light = 0 ;
103
+ }
104
+ };
105
+ static_assert (sizeof (CColSphereSA) == 0x14, "Invalid size for CColSphereSA");
106
+
107
+ struct CColTriangleSA
108
+ {
109
+ std::uint16_t m_indices[3 ];
110
+ EColSurface m_material;
111
+ CColLighting m_lighting;
112
+ };
113
+ static_assert (sizeof (CColTriangleSA) == 0x8, "Invalid size for CColTriangleSA");
114
+
115
+ struct CColTrianglePlaneSA
116
+ {
117
+ CCompressedVectorSA m_normal;
118
+ std::uint16_t m_distance;
119
+ std::uint8_t m_orientation;
120
+ };
121
+ static_assert (sizeof (CColTrianglePlaneSA) == 0xA, "Invalid size for CColTrianglePlaneSA");
122
+
123
+ struct ColModelFileHeader
55
124
{
56
125
char version[4 ];
57
126
DWORD size;
58
127
char name[0x18 ];
59
- } ColModelFileHeader ;
128
+ };
60
129
61
- typedef struct
130
+ struct CColDataSA
62
131
{
63
- WORD numColSpheres;
64
- WORD numColBoxes;
65
- WORD numColTriangles;
66
- BYTE ucNumWheels;
67
- BYTE pad3;
68
- CColSphereSA* pColSpheres;
69
- CColBoxSA* pColBoxes;
70
- void * pSuspensionLines;
71
- void * pUnknown;
72
- CColTriangleSA* pColTriangles;
73
- CColTrianglePlaneSA* pColTrianglePlanes;
74
- } CColDataSA;
75
-
76
- class CColModelSAInterface
132
+ std::uint16_t m_numSpheres;
133
+ std::uint16_t m_numBoxes;
134
+ std::uint16_t m_numTriangles;
135
+ std::uint8_t m_numSuspensionLines;
136
+ union
137
+ {
138
+ std::uint8_t m_flags;
139
+
140
+ struct
141
+ {
142
+ std::uint8_t m_usesDisks : 1 ;
143
+ std::uint8_t m_notEmpty : 1 ;
144
+ std::uint8_t m_hasShadowInfo : 1 ;
145
+ std::uint8_t m_hasFaceGroups : 1 ;
146
+ std::uint8_t m_hasShadow : 1 ;
147
+ };
148
+ };
149
+ CColSphereSA* m_spheres;
150
+ CColBoxSA* m_boxes;
151
+ union
152
+ {
153
+ CColLineSA* m_suspensionLines;
154
+ CColDiskSA* m_disks;
155
+ };
156
+ CCompressedVectorSA* m_vertices;
157
+ CColTriangleSA* m_triangles;
158
+ CColTrianglePlaneSA* m_trianglePlanes;
159
+ std::uint32_t m_numShadowTriangles;
160
+ std::uint32_t m_numShadowVertices;
161
+ CCompressedVectorSA* m_shadowVertices;
162
+ CColTriangleSA* m_shadowTriangles;
163
+ };
164
+ static_assert (sizeof (CColDataSA) == 0x30, "Invalid size for CColDataSA");
165
+
166
+ struct CColModelSAInterface
77
167
{
78
- public:
79
- CBoundingBoxSA boundingBox;
80
- BYTE level;
81
- BYTE unknownFlags;
82
- BYTE pad[2 ];
83
- CColDataSA* pColData;
168
+ CBoundingBoxSA m_bounds;
169
+ CColSphereSA m_sphere;
170
+ CColDataSA* m_data;
84
171
};
172
+ static_assert (sizeof (CColModelSAInterface) == 0x30, "Invalid size for CColModelSAInterface");
85
173
86
174
class CColModelSA : public CColModel
87
175
{
@@ -90,8 +178,8 @@ class CColModelSA : public CColModel
90
178
CColModelSA (CColModelSAInterface* pInterface);
91
179
~CColModelSA ();
92
180
93
- CColModelSAInterface* GetInterface () { return m_pInterface; }
94
- void Destroy () { delete this ; }
181
+ CColModelSAInterface* GetInterface () override { return m_pInterface; }
182
+ void Destroy () override { delete this ; }
95
183
96
184
private:
97
185
CColModelSAInterface* m_pInterface;
0 commit comments