LibT2FS 0.1
C API for accessing TEngine data in memory.
Loading...
Searching...
No Matches
levels.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_LEVELS
18#define H_T2FS_LEVELS
19
20#include <stdint.h>
21
22#include "t2fs.h"
23#include "models/common.h"
24
25// ********************************************************************
26// Structs as in file (possible after decompression and/or deinterleaving)
27// ********************************************************************
28
31typedef struct __attribute__((__packed__)) s_t2fsDataLevelInfo {
33 uint16_t unk_u16_00; // 0xFFFF
34 uint16_t unk_u16_01; // 0xFFFF
35 uint16_t unk_u16_02; // 0xFFFF
36 uint16_t unk_u16_03; // 0xFFFF
37 uint16_t unk_u16_04; // 0xFF??
38 uint16_t unk_u16_05;
39 uint16_t unk_u16_06;
40 uint16_t unk_u16_07;
41 uint16_t unk_u16_08;
42 uint16_t unk_u16_09;
44
46
47
48
54typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_1_0 {
55 uint8_t unk[100];
57
59
60
61
65typedef struct __attribute__((__packed__)) s_t2fsDataLevelMeshBuffer {
67 uint32_t unk;
69
71
72
73
77typedef struct __attribute__((__packed__)) s_t2fsDataLevelMeshIndices {
78 uint16_t someIndex;
79 uint16_t flags;
80
81 uint16_t indexA;
82 uint16_t indexB;
83 uint16_t indexC;
84
85 uint16_t indexToSelfA;
86 uint16_t indexToSelfB;
87 uint16_t indexToSelfC;
88
89 uint16_t unk_u16_07;
90 uint16_t unk_u16_08;
92
94
95
96
100typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_1_3 {
101 float min_x, min_y;
102 float max_x, max_y;
103 float unk;
105
107
108
109
111typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_2_x_0 {
112 uint8_t unk[8];
114
116
117
118
122typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_2_x_1 {
123 uint8_t unk[28];
125
127
128
129
151
153
154
155
156
160typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_4_0 {
161 uint32_t unk;
163
165
166
167
171typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_4_1 {
172 uint32_t unk;
174
176
177
178
182typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_4_2 {
183 uint32_t unk;
185
187
188
189
193typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_4_3 {
194 uint32_t unk;
196
198
199
200
206typedef struct __attribute__((__packed__)) s_t2fsDataRegionBounds {
207 float min_x, min_y;
208 float max_x, max_y;
209 uint16_t unk;
210 uint16_t unk2;
212
214
215
216
229typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_5_x_0 {
230 uint32_t unk_u32_00; // 0xFFFFFFFF
231 float scale;
232 uint16_t modelId;
233
234 uint16_t unk_u16_04;
235 uint8_t flags; // 0x0C
236
237 int16_t z;
238 uint16_t unk_u16_05;
239 //uint16_t unk_u16_06;
240
241 uint8_t unk_u8_09;
242
243 uint16_t unk_u16_07;
244
245 uint16_t unk_u16_08;
246 uint16_t unk_u16_09;
247 uint8_t x;
248 uint8_t y;
249 uint16_t unk_u16_10;
250 //uint16_t unk_u16_11;
251 //uint16_t unk_u16_12;
253
255
256
257
265typedef struct __attribute__((__packed__)) s_t2fsDataRegionObject {
266 int16_t unk_u16_00; // 00 2 0xFFFF
267 int16_t unk_u16_02; // 02 2 0xFFFF
268
272
276
277 float unk_u32_1C; // 28 4
278 float unk_u32_20; // 32 4
279 float unk_u32_24; // 36 4
280
281 int16_t modelId; // 40 2
282 //int16_t unk_u16_2A; // 42 2
283 uint8_t unk_u8_01;
284 uint8_t unk_u8_02;
285 int16_t unk_u16_2C; // 44 2
286 //int16_t unk_u16_2E; // 46 2
288 uint8_t unk_u8_00;
289 int16_t unk_u16_30; // 48 2
290 int16_t unk_u16_32; // 50 2
291} t2fsDataRegionObject; // size of 52 (on Turok2Demo.lss it's 56..)
292
294
295
296
302typedef struct __attribute__((__packed__)) s_t2fsDataRegionItem {
303 uint32_t unk_u32_00; // 0xFFFFFFFF
305
307 uint16_t modelId;
308 int16_t unk_s16_05;
309 int16_t unk_s16_06;
310 int16_t unk_s16_07;
311 int16_t unk_s16_08;
312 int16_t unk_s16_09;
313} t2fsDataRegionItem; // size of 32
314
316
317
318
324typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_5_x_3 {
325 uint8_t unk[72];
327
329
330
331
335typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_6 {
336 uint8_t unk[44];
338
340
341
342
346typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_7_0 {
347 uint8_t unk[4];
349
351
352
353
357typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_7_1 {
358 uint8_t unk[20];
360
362
363
364
368typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_7_2 {
369 uint8_t unk[4];
371
373
374
375
379typedef struct __attribute__((__packed__)) s_t2fsDataLevel_unk_7_3 {
380 uint8_t unk[20];
382
384
385
386// ********************************************************************
387// Our structs
388// ********************************************************************
389
390typedef struct s_t2fsLevel {
392 uint8_t isValid;
393
395
396 // set some nodes for later use
401
402 uint8_t const *name;
404
405
406void
408
409uint32_t
411
412int
414
415int
417
418int
420
421int
423
424int
426
427int
429
430uint32_t
432
433int
434t2fs_level_get_unk5_x_0_array(t2fsLevel *level, t2fsArray *dest, uint32_t regionId);
435
436int
437t2fs_level_get_region_objects(t2fsLevel *level, t2fsArray *dest, uint32_t regionId);
438
439int
440t2fs_level_get_region_items(t2fsLevel *level, t2fsArray *dest, uint32_t regionId);
441
442int
443t2fs_level_get_unk5_x_3_array(t2fsLevel *level, t2fsArray *dest, uint32_t regionId);
444
445// levelNode data should be loaded
446int
448
449int
450t2fs_level_load(t_t2fs *lib, t2fsLevel *level, uint32_t id);
451
452void
454
455#endif
struct s_t2fsArray t2fsArray
struct s_t2fsDataLevel_unk_5_x_3 t2fsDataLevel_unk_5_x_3
struct s_t2fsDataWorldCoordF32 t2fsDataWorldCoordF32
struct s_t2fsDataRegionBounds t2fsDataRegionBounds
struct s_t2fsDataLevel_unk_4_2 t2fsDataLevel_unk_4_2
struct s_t2fsDataCoordF32 t2fsDataCoordF32
struct s_t2fsDataLevel_unk_2_x_1 t2fsDataLevel_unk_2_x_1
struct s_t2fsDataRegionObject t2fsDataRegionObject
struct s_t2fsDataLevel_unk_7_2 t2fsDataLevel_unk_7_2
struct s_t2fsDataLevel_unk_6 t2fsDataLevel_unk_6
struct s_t2fsDataRegionItem t2fsDataRegionItem
struct s_t2fsDataLevel_unk_7_1 t2fsDataLevel_unk_7_1
struct s_t2fsDataLevel_unk_1_0 t2fsDataLevel_unk_1_0
struct s_t2fsDataLevel_unk_7_0 t2fsDataLevel_unk_7_0
struct s_t2fsDataCoordS32 t2fsDataCoordS32
yeah.. not kiddin
struct s_t2fsDataLevel_unk_4_1 t2fsDataLevel_unk_4_1
struct s_t2fsDataLevel_unk_2_x_0 t2fsDataLevel_unk_2_x_0
struct s_t2fsDataLevel_unk_1_3 t2fsDataLevel_unk_1_3
struct s_t2fsDataLevelInfo t2fsDataLevelInfo
struct s_t2fsDataLevelMeshBuffer t2fsDataLevelMeshBuffer
struct s_t2fsDataLevelScriptedObject t2fsDataLevelScriptedObject
struct s_t2fsDataLevel_unk_4_3 t2fsDataLevel_unk_4_3
struct s_t2fsDataLevel_unk_5_x_0 t2fsDataLevel_unk_5_x_0
struct s_t2fsDataLevelMeshIndices t2fsDataLevelMeshIndices
struct s_t2fsDataLevel_unk_7_3 t2fsDataLevel_unk_7_3
struct s_t2fsDataLevel_unk_4_0 t2fsDataLevel_unk_4_0
int t2fs_level_set_node(t2fsNode *levelNode, t2fsLevel *level)
int t2fs_level_get_unk5_x_3_array(t2fsLevel *level, t2fsArray *dest, uint32_t regionId)
int t2fs_level_get_region_bounds(t2fsLevel *level, t2fsArray *dest)
int t2fs_level_get_mesh_indices(t2fsLevel *level, t2fsArray *dest)
int t2fs_level_load(t_t2fs *lib, t2fsLevel *level, uint32_t id)
struct s_t2fsLevel t2fsLevel
uint32_t t2fs_level_count(t_t2fs *lib)
void t2fs_level_clear(t2fsLevel *level)
int t2fs_level_get_region_objects(t2fsLevel *level, t2fsArray *dest, uint32_t regionId)
int t2fs_level_get_unk_1_0(t2fsLevel *level, t2fsArray *dest)
void t2fs_level_unload(t2fsLevel *level)
int t2fs_level_get_mesh_buffer(t2fsLevel *level, t2fsArray *dest)
uint32_t t2fs_level_get_region_count(t2fsLevel *level)
int t2fs_level_get_unk_1_3(t2fsLevel *level, t2fsArray *dest)
int t2fs_level_get_region_items(t2fsLevel *level, t2fsArray *dest, uint32_t regionId)
int t2fs_level_get_scripted_objects(t2fsLevel *level, t2fsArray *dest)
int t2fs_level_get_unk5_x_0_array(t2fsLevel *level, t2fsArray *dest, uint32_t regionId)
#define SASSERT_SIZE(what, size)
Definition models/common.h:24
Definition levels.h:31
uint16_t unk_u16_06
Definition levels.h:39
uint16_t unk_u16_04
Definition levels.h:37
uint16_t unk_u16_09
Definition levels.h:42
float gridMultiplier
guess for try-out
Definition levels.h:32
uint16_t unk_u16_01
Definition levels.h:34
uint16_t unk_u16_03
Definition levels.h:36
uint16_t unk_u16_00
Definition levels.h:33
uint16_t unk_u16_08
Definition levels.h:41
uint16_t unk_u16_07
Definition levels.h:40
uint16_t unk_u16_05
Definition levels.h:38
uint16_t unk_u16_02
Definition levels.h:35
Definition levels.h:65
t2fsDataCoordS32 position
needs to be scaled to something.. * 0.03f looks reasonable but it's off.. is it a fixed point thingy?
Definition levels.h:66
uint32_t unk
Definition levels.h:67
Definition levels.h:77
uint16_t indexToSelfB
max value seems to match last index of this array.
Definition levels.h:86
uint16_t unk_u16_07
0xFFFF
Definition levels.h:89
uint16_t flags
guess, but strongly looks like flags, purpose unknown.
Definition levels.h:79
uint16_t indexC
index to entry of t2fsDataLevelMeshBuffer
Definition levels.h:83
uint16_t unk_u16_08
0xFFFF
Definition levels.h:90
uint16_t indexToSelfC
max value seems to match last index of this array.
Definition levels.h:87
uint16_t someIndex
looks like index for t2fsDataLevel_unk_1_0
Definition levels.h:78
uint16_t indexA
index to entry of t2fsDataLevelMeshBuffer
Definition levels.h:81
uint16_t indexToSelfA
max value seems to match last index of this array.
Definition levels.h:85
uint16_t indexB
index to entry of t2fsDataLevelMeshBuffer
Definition levels.h:82
Definition levels.h:139
int16_t unk_u16_02
Definition levels.h:145
uint16_t unk_u16_01
0xFFFF
Definition levels.h:141
t2fsDataWorldCoordF32 position
Definition levels.h:142
int16_t unk_u16_05
Definition levels.h:148
uint16_t unk_u16_00
0xFFFF
Definition levels.h:140
int16_t unk_u16_06
Definition levels.h:149
int16_t unk_u16_04
Definition levels.h:147
int16_t unk_u16_03
Definition levels.h:146
t2fsDataWorldCoordF32 scale
Definition levels.h:143
uint16_t modelId
Definition levels.h:144
Definition levels.h:54
uint8_t unk[100]
Definition levels.h:55
Definition levels.h:100
float max_y
Definition levels.h:102
float max_x
Definition levels.h:102
float min_y
Definition levels.h:101
float unk
Definition levels.h:103
float min_x
Definition levels.h:101
Definition levels.h:111
uint8_t unk[8]
Definition levels.h:112
Definition levels.h:122
uint8_t unk[28]
Definition levels.h:123
Definition levels.h:160
uint32_t unk
Definition levels.h:161
Definition levels.h:171
uint32_t unk
Definition levels.h:172
Definition levels.h:182
uint32_t unk
Definition levels.h:183
Definition levels.h:193
uint32_t unk
Definition levels.h:194
Definition levels.h:229
uint16_t modelId
Definition levels.h:232
uint16_t unk_u16_09
Definition levels.h:246
int16_t z
Definition levels.h:237
uint32_t unk_u32_00
Definition levels.h:230
float scale
Definition levels.h:231
uint16_t unk_u16_04
Definition levels.h:234
uint8_t y
Definition levels.h:248
uint16_t unk_u16_10
Definition levels.h:249
uint16_t unk_u16_05
Definition levels.h:238
uint8_t flags
Definition levels.h:235
uint16_t unk_u16_08
Definition levels.h:245
uint16_t unk_u16_07
Definition levels.h:243
uint8_t unk_u8_09
Definition levels.h:241
uint8_t x
Definition levels.h:247
Definition levels.h:324
uint8_t unk[72]
Definition levels.h:325
Definition levels.h:335
uint8_t unk[44]
Definition levels.h:336
Definition levels.h:346
uint8_t unk[4]
Definition levels.h:347
Definition levels.h:357
uint8_t unk[20]
Definition levels.h:358
Definition levels.h:368
uint8_t unk[4]
Definition levels.h:369
Definition levels.h:379
uint8_t unk[20]
Definition levels.h:380
Definition levels.h:206
float max_x
Definition levels.h:208
float max_y
Definition levels.h:208
uint16_t unk
Definition levels.h:209
float min_x
Definition levels.h:207
float min_y
Definition levels.h:207
uint16_t unk2
Definition levels.h:210
Definition levels.h:302
int16_t unk_s16_08
Definition levels.h:311
int16_t unk_s16_09
Definition levels.h:312
uint16_t modelId
Definition levels.h:307
float unk_u32_04
Definition levels.h:306
t2fsDataWorldCoordF32 position
Definition levels.h:304
int16_t unk_s16_05
Definition levels.h:308
uint32_t unk_u32_00
Definition levels.h:303
int16_t unk_s16_07
Definition levels.h:310
int16_t unk_s16_06
Definition levels.h:309
Definition levels.h:265
float unk_u32_20
Definition levels.h:278
int16_t unk_u16_32
Definition levels.h:290
t2fsDataWorldCoordF32 position
Definition levels.h:271
int16_t unk_u16_00
Definition levels.h:266
uint8_t unk_u8_01
Definition levels.h:283
t2fsDataCoordF32 scale
Definition levels.h:275
uint8_t rotzMultiplier
multiplied by 90
Definition levels.h:287
int16_t unk_u16_30
Definition levels.h:289
float unk_u32_24
Definition levels.h:279
uint8_t unk_u8_02
Definition levels.h:284
float unk_u32_1C
Definition levels.h:277
uint8_t unk_u8_00
Definition levels.h:288
int16_t unk_u16_2C
Definition levels.h:285
int16_t unk_u16_02
Definition levels.h:267
int16_t modelId
Definition levels.h:281
Definition levels.h:390
t2fsNode * nodeUnk1
Definition levels.h:397
t2fsDataLevelInfo * info
Definition levels.h:394
t2fsNode * nodeUnk5
Definition levels.h:400
t2fsNode * nodeUnk4
Definition levels.h:399
t2fsNode * nodeUnk3
Definition levels.h:398
t2fsNode * node
Definition levels.h:391
uint8_t isValid
Definition levels.h:392
uint8_t const * name
Definition levels.h:402
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