LibT2FS 0.1
C API for accessing TEngine data in memory.
Loading...
Searching...
No Matches
models.h
Go to the documentation of this file.
1/* This file is part of LibT2FS.
2 *
3 * LibT2FS is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 3 of the License, or
6 * (at your option) any later version.
7 *
8 * LibT2FS is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <https://www.gnu.org/licenses/>.
15 */
16
17#ifndef H_T2FS_MODELS
18#define H_T2FS_MODELS
19
20#include <stdint.h>
21
22#include "t2fs.h"
23#include "array.h"
24#include "models/common.h"
25
26// Usefull links:
27// https://ultra64.ca/files/documentation/online-manuals/man/header/gbi.htm
28
29
30#define T2FS_MODEL_BONE_SYMBOL_LEG 0b001 // else arm also depends on T2FS_MODEL_BONE_SYMBOL_NOT_HEAD
31#define T2FS_MODEL_BONE_SYMBOL_NOT_HEAD 0b010
32#define T2FS_MODEL_BONE_SYMBOL_RIGHT 0b100 // else left
33
34// ********************************************************************
35// Structs as in file (possible after decompression and/or deinterleaving)
36// ********************************************************************
37
38
51
53
54
55
57typedef struct __attribute__((__packed__)) s_t2fsDataBone {
58 /* The bouding box order:
59
60 7-----6 Z axis
61 / | /| |
62 / | / | |
63 3-----2 | |
64 | 4-|--5 | Y axis
65 | / | / | /
66 | / |/ | /
67 0-----1 | /
68 | /
69 X axis ---------
70
71 Are these always rectangular prisms or any cuboid?
72
73 */
75 float maxBounds;
77 uint8_t symbol;
78 uint8_t materialType;
79 uint8_t pad;
81 uint32_t flags;
83
85
86
87
89typedef struct __attribute__((__packed__)) s_t2fsDataBoneOrientation {
91 int16_t rotx, roty, rotz, rotw;
93
95
96
97
98
108typedef struct __attribute__((__packed__)) s_t2fsDataAnimationBoneIndices {
112
114
115
116
124typedef struct __attribute__((__packed__)) s_t2fsDataAnimationHeader {
125 uint16_t unk_u16_00;
126 uint16_t unk_u16_01;
127
130 uint16_t unk_u16_02;
131 uint16_t unk_u16_03;
132
133 uint16_t unk_u16_04;
134 uint16_t unk_u16_05;
135
136 //uint16_t unk_u16_06;
137 //uint16_t unk_u16_07;
138 float scale;
139
143 uint16_t unk_u16_09;
144
148 uint16_t unk_u16_11;
149
150 uint16_t unk_u16_12;
151 uint16_t unk_u16_13;
152 uint16_t unk_u16_14;
153 uint16_t unk_u16_15;
155
157
158
159
161typedef struct __attribute__((__packed__)) s_t2fsDataHotpoint {
163 uint32_t flags;
164 uint16_t boneId;
165 uint16_t unk;
167
169
170
171
173typedef struct __attribute__((__packed__)) s_t2fsDataColorRGBA8 {
174 uint8_t r, g, b, a;
176
177
184typedef struct __attribute__((__packed__)) s_t2fsDataMaterial {
185 uint32_t textureId; // 0xFFFFFFFF means no texture
186 uint32_t unk_u32_1;
187 uint32_t unk_u32_2; // flags?
188
189 // fgColor looks good on South Park model 652
190 t2fsDataColorRGBA8 fgColor; // most set to 0x******FF
191 t2fsDataColorRGBA8 bgColor; // most set to 0xFFFFFF**
192
205 uint16_t sc, tc;
207
209
210
211
215typedef struct __attribute__((__packed__)) s_t2fsDataVertex {
216 int16_t x, y, z;
217 uint16_t flags; //<! n64 docs say unused, but some models do set this
225 int16_t s, t;
226 int8_t nx, ny, nz;
227 uint8_t unk;
230
232
233
234
235// ********************************************************************
236// Our structs
237// ********************************************************************
238
239
246
247
256
257
273
274
275typedef struct s_t2fsTCoord {
276 float u, v;
278
279
287
288
289typedef struct s_t2fsIndices {
290 uint32_t a, b, c;
291
292 // for debugging, remove later FIXME
293 uint8_t boneId;
294 uint8_t blockType;
295 uint32_t blockOffset;
296 uint32_t vertCount; // for this block
297 uint32_t la, lb, lc; // local inside block
298 uint32_t ra, rb, rc; // real
300
301
310
311
360
361
362void
364
365void
367
368void
370
371uint32_t
373
374int
375t2fs_model_load(t_t2fs *lib, t2fsModel *model, uint32_t id);
376
377void
379
381t2fs_model_get_bone(t2fsModel *model, uint32_t boneId);
382
383int
384t2fs_model_get_bone_orientations(t2fsModel *model, t2fsArray *orientations, uint32_t poseId);
385
386void
388
389int
390t2fs_model_get_mesh(t2fsModel *model, t2fsModelMesh *dest, uint32_t meshId);
391
392void
394
395int
397
398int
400
401
402#endif
struct s_t2fsArray t2fsArray
struct s_t2fsDataAnimationHeader t2fsDataAnimationHeader
struct s_t2fsDataCoordF32 t2fsDataCoordF32
struct s_t2fsDataBone t2fsDataBone
struct s_t2fsDataColorRGBA8 t2fsDataColorRGBA8
struct s_t2fsDataHotpoint t2fsDataHotpoint
struct s_t2fsDataBoneOrientation t2fsDataBoneOrientation
struct s_t2fsDataAnimationBoneIndices t2fsDataAnimationBoneIndices
struct s_t2fsDataVertex t2fsDataVertex
struct s_t2fsDataModelInfo t2fsDataModelInfo
struct s_t2fsDataMaterial t2fsDataMaterial
#define SASSERT_SIZE(what, size)
Definition models/common.h:24
struct s_t2fsModelMesh t2fsModelMesh
void t2fs_triangles_init(t2fsTriangles *tri)
int t2fs_model_get_mesh(t2fsModel *model, t2fsModelMesh *dest, uint32_t meshId)
struct s_t2fsModelSurface t2fsModelSurface
struct s_t2fsTCoord t2fsTCoord
int t2fs_model_surface_get_triangles(t2fsModelSurface *surface, t2fsTriangles *dest, uint32_t vertOffset)
void t2fs_model_clear(t2fsModel *model)
int t2fs_model_get_bone_orientations(t2fsModel *model, t2fsArray *orientations, uint32_t poseId)
void t2fs_model_mesh_surface_clear(t2fsModelSurface *surface)
struct s_t2fsVertex t2fsVertex
int t2fs_model_mesh_get_surface(t2fsModelMesh *mesh, t2fsModelSurface *dest, uint32_t surfaceId)
struct s_t2fsIndices t2fsIndices
struct s_t2fsModel t2fsModel
void t2fs_model_unload(t2fsModel *model)
void t2fs_triangles_free(t2fsTriangles *tri)
int t2fs_model_load(t_t2fs *lib, t2fsModel *model, uint32_t id)
t2fsDataBone * t2fs_model_get_bone(t2fsModel *model, uint32_t boneId)
void t2fs_model_mesh_init(t2fsModelMesh *mesh)
struct s_t2fsTriangles t2fsTriangles
uint32_t t2fs_model_count(t_t2fs *lib)
Definition models.h:108
int16_t positionIndex
-1 == UNUSED (no position changes for this bone)
Definition models.h:110
int16_t rotationIndex
-1 == UNUSED (no rotation changes for this bone)
Definition models.h:109
Definition models.h:124
uint16_t unk_u16_01
Definition models.h:126
uint16_t unk_u16_02
Definition models.h:130
uint16_t positionBoneCount
Definition models.h:142
uint16_t unk_u16_13
Missing on South Park.
Definition models.h:151
uint16_t unk_u16_05
Definition models.h:134
uint16_t unk_u16_04
Definition models.h:133
uint16_t rotationBoneCount
Count of 71c35b87 in 0/x/2/x/5/1/data ??? at least seams to affect data size, when this is larger,...
Definition models.h:147
uint16_t unk_u16_03
Definition models.h:131
uint16_t unk_u16_09
Definition models.h:143
uint16_t unk_u16_11
Definition models.h:148
uint16_t unk_u16_12
Missing on South Park.
Definition models.h:150
uint16_t unk_u16_00
Definition models.h:125
uint16_t unk_u16_14
Missing on South Park.
Definition models.h:152
float scale
this is a guess, value looks like scale values I've seen before ..
Definition models.h:138
uint16_t unk_u16_15
Missing on South Park.
Definition models.h:153
Definition models.h:89
int16_t roty
Definition models.h:91
t2fsDataCoordF32 pos
Definition models.h:90
int16_t rotz
Definition models.h:91
int16_t rotx
Definition models.h:91
int16_t rotw
Definition models.h:91
Definition models.h:57
int8_t parentIndex
Definition models.h:76
uint8_t pad
Definition models.h:79
t2fsDataCoordF32 bbox[8]
Definition models.h:74
float damageScaler
Definition models.h:80
uint32_t flags
Definition models.h:81
float maxBounds
Definition models.h:75
uint8_t materialType
Definition models.h:78
uint8_t symbol
Definition models.h:77
Definition models.h:173
uint8_t b
Definition models.h:174
uint8_t r
Definition models.h:174
uint8_t a
Definition models.h:174
uint8_t g
Definition models.h:174
Definition models.h:161
uint16_t unk
Definition models.h:165
uint16_t boneId
Definition models.h:164
t2fsDataCoordF32 pos
Definition models.h:162
uint32_t flags
Definition models.h:163
Definition models.h:184
uint32_t textureId
Definition models.h:185
uint16_t sc
Definition models.h:205
t2fsDataColorRGBA8 bgColor
Definition models.h:191
uint16_t tc
Definition models.h:205
uint32_t unk_u32_2
Definition models.h:187
uint32_t unk_u32_1
Definition models.h:186
t2fsDataColorRGBA8 fgColor
Definition models.h:190
Definition models.h:41
int8_t headTrackFactor
Definition models.h:46
int8_t pad
Definition models.h:47
int8_t headTrackStartNode
Definition models.h:44
int8_t headTrackEndNode
Definition models.h:45
int16_t scale
Definition models.h:49
t2fsDataCoordF32 max
Definition models.h:43
uint16_t variationCount
Definition models.h:48
t2fsDataCoordF32 min
Definition models.h:42
Definition models.h:215
uint8_t unk
Definition models.h:227
int16_t y
Definition models.h:216
int8_t ny
Definition models.h:226
int16_t z
Definition models.h:216
int8_t nz
Definition models.h:226
int16_t s
Definition models.h:225
int16_t x
Definition models.h:216
int16_t t
s10.5
Definition models.h:225
t2fsDataColorRGBA8 color
Definition models.h:228
int8_t nx
Definition models.h:226
uint16_t flags
Definition models.h:217
Definition models.h:289
uint32_t a
Definition models.h:290
uint8_t boneId
Definition models.h:293
uint32_t lb
Definition models.h:297
uint32_t rb
Definition models.h:298
uint32_t rc
Definition models.h:298
uint32_t vertCount
Definition models.h:296
uint32_t la
Definition models.h:297
uint32_t ra
Definition models.h:298
uint32_t c
Definition models.h:290
uint32_t b
Definition models.h:290
uint8_t blockType
Definition models.h:294
uint32_t lc
Definition models.h:297
uint32_t blockOffset
Definition models.h:295
Definition models.h:248
uint32_t surfaceCount
Definition models.h:250
t2fsArray vertexBuffer
Definition models.h:252
t2fsDataHotpoint * hotpoints
Definition models.h:253
t2fsNode * nodeSurfaces
Definition models.h:254
uint32_t id
Definition models.h:249
uint32_t hotpointCount
Definition models.h:251
Definition models.h:240
t2fsArray * vertexBuffer
Definition models.h:244
t2fsDataMaterial * material
Definition models.h:241
uint8_t * triangleData
Definition models.h:242
uint32_t triangleDataSize
Definition models.h:243
Definition models.h:258
uint32_t meshCount
Definition models.h:271
t2fsNode * nodeBones
Definition models.h:263
t2fsNode * node
Definition models.h:259
t2fsNode * nodeSurfaces
Definition models.h:262
uint32_t boneCount
Definition models.h:269
t2fsNode * nodeOrientations
Definition models.h:265
t2fsNode * nodeHotpoints
Definition models.h:264
t2fsDataModelInfo * info
Definition models.h:268
t2fsNode * nodeVertBuffers
Definition models.h:261
uint8_t isValid
Definition models.h:266
t2fsNode * nodeMeshes
Definition models.h:260
uint32_t poseCount
Definition models.h:270
Definition models.h:275
float v
Definition models.h:276
float u
Definition models.h:276
Definition models.h:302
uint32_t vertOffset
Definition models.h:308
uint32_t vertCount
Definition models.h:303
uint32_t indiceCount
Definition models.h:304
t2fsIndices * indices
Definition models.h:306
t2fsVertex * verts
Definition models.h:305
Definition models.h:280
int8_t boneId
Definition models.h:285
t2fsDataCoordF32 position
Definition models.h:281
t2fsTCoord tcoord
Definition models.h:284
t2fsDataColorRGBA8 color
Definition models.h:283
t2fsDataCoordF32 normal
Definition models.h:282
struct s_t2fsNode t2fsNode
This is the core object to describe a path inside the tree.
Definition t2fs.h:110
struct s_t2fs t_t2fs
This is the core LibT2FS object that you will be passing around.
Definition t2fs.h:53