Subversion Repositories Games.Carmageddon

Rev

Rev 18 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 pmbaty 1
#ifndef DR_TYPES_H
2
#define DR_TYPES_H
3
 
20 pmbaty 4
#include "brender/br_types.h"
1 pmbaty 5
#include "constants.h"
6
#include "macros.h"
7
 
8
#include "s3/s3.h"
9
#include <assert.h>
10
#include <stdarg.h>
11
#include <stddef.h>
12
#include <stdint.h>
13
#include <stdio.h>
14
 
15
typedef unsigned char tU8;
16
typedef signed char tS8;
17
typedef uint16_t tU16;
18
typedef int16_t tS16;
19
typedef uint32_t tU32;
20
typedef int32_t tS32;
21
typedef double tF64;
22
typedef int16_t tX88;
23
typedef int32_t tX1616;
24
typedef tU8 tNet_message_type;
25
typedef struct tCar_spec_struct tCar_spec;
26
typedef struct tCar_spec_struct2 tCar_spec2;
27
typedef struct tPath_node_struct tPath_node;
28
typedef struct tPath_section_struct tPath_section;
29
typedef tU32 tPlayer_ID;
30
typedef void tPipe_reset_proc(void);
31
typedef struct tPowerup tPowerup;
32
 
33
// FIXME? hardcoding pc-win95 here
34
#include "pc-win95/win95net_types.h"
35
 
36
#ifdef DETHRACE_FIX_BUGS
37
typedef int tGot_proc(tPowerup*, tCar_spec*);
38
typedef void tLose_proc(tPowerup*, tCar_spec*);
39
typedef void tPeriodic_proc(tPowerup*, tU32);
40
#else
41
typedef int* tGot_proc(tPowerup*, tCar_spec*);
42
typedef void* tLose_proc(tPowerup*, tCar_spec*);
43
typedef void* tPeriodic_proc(tPowerup*, tU32);
44
#endif
45
typedef char tPath_name[256];
46
typedef struct tFlic_descriptor* tFlic_descriptor_ptr;
47
typedef struct exception_struct* tException_list;
48
typedef struct exception_struct tException_node;
49
typedef int tKey_array[123];
50
typedef tS32 tJoy_array[8];
51
typedef void* tPMFM2CB(br_material*);
52
typedef struct v11face DR_FACE;
53
typedef struct fmt_vertex DR_VERTEX;
54
 
55
typedef enum tDriver {
56
    eDriver_non_car_unused_slot = 0,
57
    eDriver_non_car = 1,
58
    eDriver_oppo = 2,
59
    eDriver_net_human = 3,
60
    eDriver_local_human = 4
61
} tDriver;
62
 
63
typedef enum tBounds_type {
64
    eUndefined = 0,
65
    eBounds_ws = 1,
66
    eBounds_cs = 2
67
} tBounds_type;
68
 
69
typedef enum tImpact_location {
70
    eImpact_top = 0,
71
    eImpact_bottom = 1,
72
    eImpact_left = 2,
73
    eImpact_right = 3,
74
    eImpact_front = 4,
75
    eImpact_back = 5,
76
    eImpact_location_count = 6,
77
    eImpact_unknown = 7
78
} tImpact_location;
79
 
80
typedef enum tAxis_comp {
81
    eAxis_x = 0,
82
    eAxis_y = 1,
83
    eAxis_z = 2
84
} tAxis_comp;
85
 
86
typedef enum tCondition_operator {
87
    eCondition_less_than = 0,
88
    eCondition_greater_than = 1
89
} tCondition_operator;
90
 
91
typedef enum tDamage_type {
92
    eDamage_engine = 0,
93
    eDamage_transmission = 1,
94
    eDamage_driver = 2,
95
    eDamage_steering = 3,
96
    eDamage_lf_brake = 4,
97
    eDamage_rf_brake = 5,
98
    eDamage_lr_brake = 6,
99
    eDamage_rr_brake = 7,
100
    eDamage_lf_wheel = 8,
101
    eDamage_rf_wheel = 9,
102
    eDamage_lr_wheel = 10,
103
    eDamage_rr_wheel = 11,
104
    eDamage_type_count = 12
105
} tDamage_type;
106
 
107
typedef enum tJustification {
108
    eJust_left = 0,
109
    eJust_right = 1,
110
    eJust_centre = 2
111
} tJustification;
112
 
113
typedef enum tOpponent_objective_type {
114
    eOOT_none = 0,
115
    eOOT_complete_race = 1,
116
    eOOT_pursue_and_twat = 2,
117
    eOOT_run_away = 3,
118
    eOOT_get_near_player = 4,
119
    eOOT_levitate = 5,
120
    eOOT_knackered_and_freewheeling = 6,
121
    eOOT_frozen = 7,
122
    eOOT_wait_for_some_hapless_sod = 8,
123
    eOOT_rematerialise = 9,
124
    eOOT_return_to_start = 10
125
} tOpponent_objective_type;
126
 
127
typedef enum tFollow_path_result {
128
    eFPR_OK = 0,
129
    eFPR_end_of_path = 1,
130
    eFPR_given_up = 2
131
} tFollow_path_result;
132
 
133
typedef enum tPath_section_type_enum {
134
    ePST_normal = 0,
135
    ePST_race_path = 1,
136
    ePST_cheat_only = 2,
137
    ePST_count = 3
138
} tPath_section_type_enum;
139
 
140
typedef enum tPursue_car_state {
141
    ePCS_what_now = 0,
142
    ePCS_following_trail = 1,
143
    ePCS_following_line_of_sight = 2,
144
    ePCS_backing_up = 3
145
} tPursue_car_state;
146
 
147
typedef enum tProcess_objective_command {
148
    ePOC_start = 0,
149
    ePOC_run = 1,
150
    ePOC_die = 2
151
} tProcess_objective_command;
152
 
153
typedef enum tParts_category {
154
    eParts_armour = 0,
155
    eParts_power = 1,
156
    eParts_offensive = 2,
157
    eParts_count = 3
158
} tParts_category;
159
 
160
typedef enum tRace_over_reason {
161
    eRace_not_over_yet = -1,
162
    eRace_over_laps = 0,
163
    eRace_over_peds = 1,
164
    eRace_over_opponents = 2,
165
    eRace_over_abandoned = 3,
166
    eRace_over_out_of_time = 4,
167
    eRace_over_demo = 5,
168
    eRace_over_network_victory = 6,
169
    eRace_over_network_loss = 7,
170
    eRace_over_count = 8
171
} tRace_over_reason;
172
 
173
typedef enum tNet_mode {
174
    eNet_mode_none = 0,
175
    eNet_mode_thinking_about_it = 1,
176
    eNet_mode_host = 2,
177
    eNet_mode_client = 3
178
} tNet_mode;
179
 
180
typedef enum tPlayer_status {
181
    ePlayer_status_unknown = 0,
182
    ePlayer_status_ready = 1,
183
    ePlayer_status_loading = 2,
184
    ePlayer_status_wrecks_gallery = 3,
185
    ePlayer_status_summary = 4,
186
    ePlayer_status_not_responding = 5,
187
    ePlayer_status_racing = 6,
188
    ePlayer_status_main_menu = 7,
189
    ePlayer_status_recovering = 8,
190
    ePlayer_status_action_replay = 9
191
} tPlayer_status;
192
 
193
typedef enum tNet_game_type {
194
    eNet_game_type_fight_to_death = 0,
195
    eNet_game_type_car_crusher = 1,
196
    eNet_game_type_carnage = 2,
197
    eNet_game_type_checkpoint = 3,
198
    eNet_game_type_sudden_death = 4,
199
    eNet_game_type_tag = 5,
200
    eNet_game_type_foxy = 6,
201
    eNet_game_type_count = 7
202
} tNet_game_type;
203
 
204
typedef enum tNet_game_stage {
205
    eNet_game_starting = 0,
206
    eNet_game_ready = 1,
207
    eNet_game_playing = 2,
208
    eNet_game_status_count = 3
209
} tNet_game_stage;
210
 
211
typedef enum tCar_choice {
212
    eNet_car_frankie = 0,
213
    eNet_car_annie = 1,
214
    eNet_car_both = 2,
215
    eNet_car_all = 3
216
} tCar_choice;
217
 
218
typedef enum tNet_sequence_type {
219
    eNet_sequence_sequential = 0,
220
    eNet_sequence_random = 1
221
} tNet_sequence_type;
222
 
223
typedef enum tPowerup_event {
224
    ePowerup_gained = 0,
225
    ePowerup_ongoing = 1,
226
    ePowerup_lost = 2
227
} tPowerup_event;
228
 
229
typedef enum tNet_gameplay_mess {
230
    eNet_gameplay_checkpoint = 0,
231
    eNet_gameplay_wrong_checkpoint = 1,
232
    eNet_gameplay_suddenly_death = 2,
233
    eNet_gameplay_suicide = 3,
234
    eNet_gameplay_go_for_it = 4,
235
    eNet_gameplay_host_paused = 5,
236
    eNet_gameplay_host_unpaused = 6,
237
    eNet_gameplay_earn_credits = 7
238
} tNet_gameplay_mess;
239
 
240
typedef enum tCar_detail_ownership {
241
    eCar_owner_none = 0,
242
    eCar_owner_someone = 1,
243
    eCar_owner_self = 2,
244
    eCar_owner_not_allowed = 3
245
} tCar_detail_ownership;
246
 
247
typedef enum tPowerup_type {
248
    ePowerup_dummy = 0,
249
    ePowerup_instantaneous = 1,
250
    ePowerup_timed = 2,
251
    ePowerup_whole_race = 3
252
} tPowerup_type;
253
 
254
typedef enum tNet_powerup_type {
255
    eNet_powerup_local = 0,
256
    eNet_powerup_global = 1,
257
    eNet_powerup_inappropriate = 2
258
} tNet_powerup_type;
259
 
260
typedef enum tVehicle_type {
261
    eVehicle_self = 0,
262
    eVehicle_net_player = 1,
263
    eVehicle_opponent = 2,
264
    eVehicle_rozzer = 3,
265
    eVehicle_drone = 4,
266
    eVehicle_not_really = 5
267
} tVehicle_type;
268
 
269
typedef enum tDepth_effect_type {
270
    eDepth_effect_none = -1,
271
    eDepth_effect_darkness = 0,
272
    eDepth_effect_fog = 1
273
} tDepth_effect_type;
274
 
275
typedef enum tPlane_type {
276
    ePlane_pos_x = 0,
277
    ePlane_neg_x = 1,
278
    ePlane_pos_y = 2,
279
    ePlane_neg_y = 3,
280
    ePlane_pos_z = 4,
281
    ePlane_neg_z = 5,
282
    ePlane_general = 6
283
} tPlane_type;
284
 
285
typedef enum tNet_avail {
286
    eNet_avail_never = 0,
287
    eNet_avail_eagle = 1,
288
    eNet_avail_hawk = 2,
289
    eNet_avail_all = 3
290
} tNet_avail;
291
 
292
typedef enum tProg_status {
293
    eProg_intro = 0,
294
    eProg_opening = 1,
295
    eProg_idling = 2,
296
    eProg_demo = 3,
297
    eProg_game_starting = 4,
298
    eProg_game_ongoing = 5,
299
    eProg_quit = 6
300
} tProg_status;
301
 
302
typedef enum tMM_result {
303
    eMM_none = 0,
304
    eMM_continue = 1,
305
    eMM_end_game = 2,
306
    eMM_1_start = 3,
307
    eMM_n_start = 4,
308
    eMM_loaded = 5,
309
    eMM_save = 6,
310
    eMM_options = 7,
311
    eMM_quit = 8,
312
    eMM_timeout = 9,
313
    eMM_recover = 10,
314
    eMM_abort_race = 11
315
} tMM_result;
316
 
317
typedef enum tSO_result {
318
    eSO_main_menu_invoked = 0,
319
    eSO_game_over = 1,
320
    eSO_game_completed = 2,
321
    eSO_continue = 3
322
} tSO_result;
323
 
324
typedef enum tRace_result {
325
    eRace_game_abandonned = 0,
326
    eRace_aborted = 1,
327
    eRace_timed_out = 2,
328
    eRace_completed = 3
329
} tRace_result;
330
 
331
typedef enum tFrank_anne {
332
    eFrankie = 0,
333
    eAnnie = 1
334
} tFrank_anne;
335
 
336
typedef enum tRace_sel_view_type {
337
    eVT_Scene = 0,
338
    eVT_Info = 1,
339
    eVT_Opponents = 2
340
} tRace_sel_view_type;
341
 
342
typedef enum tAuto_parts_reply {
343
    eAP_auto = 0,
344
    eAP_manual = 1,
345
    eAP_piss_off = 2
346
} tAuto_parts_reply;
347
 
348
typedef enum tWhich_view {
349
    eView_undefined = 0,
350
    eView_left = 1,
351
    eView_forward = 2,
352
    eView_right = 3
353
} tWhich_view;
354
 
355
typedef enum tRolling_type {
356
    eRT_alpha = 0,
357
    eRT_numeric = 1,
358
    eRT_looping_random = 2,
359
    eRT_looping_single = 3
360
} tRolling_type;
361
 
362
typedef enum tCar_texturing_level {
363
    eCTL_none = 0,
364
    eCTL_transparent = 1,
365
    eCTL_full = 2,
366
    eCTL_count = 3
367
} tCar_texturing_level;
368
 
369
typedef enum tRoad_texturing_level {
370
    eRTL_none = 0,
371
    eRTL_full = 1,
372
    eRTL_count = 2
373
} tRoad_texturing_level;
374
 
375
typedef enum tWall_texturing_level {
376
    eWTL_none = 0,
377
    eWTL_linear = 1,
378
    eWTL_full = 2,
379
    eWTL_count = 3
380
} tWall_texturing_level;
381
 
382
typedef enum tAdd_to_storage_result {
383
    eStorage_not_enough_room = 0,
384
    eStorage_duplicate = 1,
385
    eStorage_allocated = 2
386
} tAdd_to_storage_result;
387
 
388
typedef enum tLollipop_mode {
389
    eLollipop_none = -1,
390
    eLollipop_x_match = 0,
391
    eLollipop_y_match = 1,
392
    eLollipop_z_match = 2
393
} tLollipop_mode;
394
 
395
typedef enum tSmear_type {
396
    eSmear_oil = 0,
397
    eSmear_blood = 1,
398
    eSmear_count = 2
399
} tSmear_type;
400
 
401
// Make gcc happy
402
typedef struct exception_ {
403
    int type;
404
    char* name;
405
    double arg1;
406
    double arg2;
407
    double retval;
408
} exception_;
409
 
410
typedef struct tTrack_spec {
411
    tU8 ncolumns_x;
412
    tU8 ncolumns_z;
413
    br_scalar column_size_x;
414
    br_scalar column_size_z;
415
    br_scalar origin_x;
416
    br_scalar origin_z;
417
    br_actor* the_actor;
418
    br_actor*** columns;
419
    br_actor*** lollipops;
420
    br_actor*** blends;
421
    int ampersand_digits;
422
    br_actor** non_car_list;
423
} tTrack_spec;
424
 
425
typedef struct tCrush_neighbour {
426
    br_uint_8 vertex_index;
427
    br_uint_8 factor;
428
} tCrush_neighbour;
429
 
430
typedef struct tCrush_point_spec {
431
    br_uint_16 vertex_index;
432
    br_uint_16 number_of_neighbours;
433
    br_vector3 limits_neg;
434
    br_vector3 limits_pos;
435
    br_vector3 softness_neg;
436
    br_vector3 softness_pos;
437
    tCrush_neighbour* neighbours;
438
} tCrush_point_spec;
439
 
440
typedef struct tCrush_data {
441
    int number_of_crush_points;
442
    float softness_factor;
443
    float min_fold_factor;
444
    float max_fold_factor;
445
    float wibble_factor;
446
    float limit_deviant;
447
    float split_chance;
448
    br_scalar min_y_fold_down;
449
    tCrush_point_spec* crush_points;
450
} tCrush_data;
451
 
452
typedef struct tSpecial_volume {
453
    br_matrix34 mat;
454
    br_matrix34 inv_mat;
455
    br_bounds bounds;
456
    br_scalar gravity_multiplier;
457
    br_scalar viscosity_multiplier;
458
    float car_damage_per_ms;
459
    float ped_damage_per_ms;
460
    int no_mat;
461
    int camera_special_effect_index;
462
    int sky_col;
463
    int entry_noise;
464
    int exit_noise;
465
    int engine_noise_index;
466
    br_material* screen_material;
467
    int material_modifier_index;
468
} tSpecial_volume;
469
 
470
typedef struct tReduced_matrix {
471
    br_vector3 row1;
472
    br_vector3 row2;
473
    br_vector3 translation;
474
} tReduced_matrix;
475
 
20 pmbaty 476
typedef struct tCar_controls {
1 pmbaty 477
    int joystick_acc : 8;
478
    int joystick_dec : 8;
479
    unsigned int left : 1;        // 0x10000   bit 17
480
    unsigned int right : 1;       // 0x20000   bit 18
481
    unsigned int acc : 1;         // 0x40000   bit 19
482
    unsigned int dec : 1;         // 0x80000   bit 20
483
    unsigned int brake : 1;       // 0x100000   bit 21
484
    unsigned int up : 1;          // 0x200000   bit 22
485
    unsigned int down : 1;        // 0x400000   bit 23
486
    unsigned int holdw : 1;       // 0x800000   bit 24
487
    unsigned int backwards : 1;   // 0x1000000   bit 25
488
    unsigned int change_up : 1;   // 0x2000000   bit 26
489
    unsigned int change_down : 1; // 0x4000000   bit 27
490
    unsigned int horn : 1;        // 0x8000000   bit 28
491
} tCar_controls;
492
 
20 pmbaty 493
typedef struct tNet_message_mechanics_info {
494
    tU8 contents_size;
495
    tNet_message_type type;
496
    tU32 ID;
497
    tU32 time;
498
    tReduced_matrix mat;
499
    br_vector3 v;
500
    br_vector3 omega;
501
    tU8 d[4];
502
    tCar_controls keys;
503
    tU32 cc_coll_time;
504
    tS16 curvature;
505
    tU16 revs;
506
    br_scalar front;
507
    br_scalar back;
508
    tU32 repair_time;
509
    tU8 damage[12];
510
    tU16 powerups;
511
    br_scalar wheel_dam_offset[4];
1 pmbaty 512
} tNet_message_mechanics_info;
513
 
514
typedef struct tDamage_unit {
515
    int x_coord;
516
    int y_coord;
517
    int damage_level;
518
    int last_level;
519
    int smoke_last_level;
520
    int periods[5];
521
    br_pixelmap* images;
522
} tDamage_unit;
523
 
524
typedef struct tDamage_condition {
525
    tAxis_comp axis_comp;
526
    tCondition_operator condition_operator;
527
    float comparitor;
528
} tDamage_condition;
529
 
530
typedef struct tDamage_effect {
531
    tDamage_type type;
532
    float weakness_factor;
533
} tDamage_effect;
534
 
535
typedef struct tDamage_clause {
536
    tDamage_condition conditions[2];
537
    int effect_count;
538
    int condition_count;
539
    tDamage_effect effects[4];
540
} tDamage_clause;
541
 
542
typedef struct tDamage_program {
543
    int clause_count;
544
    tDamage_clause* clauses;
545
} tDamage_program;
546
 
547
typedef struct tHeadup_slot {
548
    int x;
549
    int y;
550
    int colour;
551
    int cockpit_anchored;
552
    int dimmed_background;
553
    int dim_left;
554
    int dim_top;
555
    int dim_right;
556
    int dim_bottom;
557
    tJustification justification;
558
} tHeadup_slot;
559
 
560
typedef struct tPart_info {
561
    char part_name[14];
562
    tU8* data_ptr;
563
    tU32 data_length;
564
    int rank_required;
565
    int prices[3];
566
} tPart_info;
567
 
568
typedef struct tParts_spec {
569
    int number_of_parts;
570
    tPart_info info[6];
571
} tParts_spec;
572
 
573
typedef struct tCar_actor {
574
    br_actor* actor;
575
    br_scalar min_distance_squared;
576
    tCrush_data crush_data;
577
    br_vertex* undamaged_vertices;
578
} tCar_actor;
579
 
580
typedef struct tJoystick {
581
    tS32 left;
582
    tS32 right;
583
    tS32 acc;
584
    tS32 dec;
585
} tJoystick;
586
 
587
typedef struct tPursuee_trail {
588
    br_vector3 trail_nodes[25];
589
    br_vector3 base_heading;
590
    tU32 time_of_next_recording;
591
    tU32 end_of_deviation;
592
    tU8 number_of_nodes;
593
    tU8 has_deviated_recently;
594
    tU8 nodes_shifted_this_frame;
595
} tPursuee_trail;
596
 
597
typedef struct tCar_spec_struct {              // size: 0x1a9c
598
    int index;                                 // @0x0
599
    int disabled;                              // @0x4
600
    tDriver driver;                            // @0x8
601
    br_actor* car_master_actor;                // @0xc
602
    br_scalar min_torque_squared;              // @0x10
603
    br_scalar break_off_radians_squared;       // @0x14
604
    br_vector3 v;                              // @0x18
605
    br_vector3 old_v;                          // @0x24
606
    br_vector3 velocity_car_space;             // @0x30
607
    br_matrix34 oldmat;                        // @0x3c
608
    br_matrix34 old_frame_mat;                 // @0x6c
609
    br_vector3 pos;                            // @0x9c
610
    br_vector3 omega;                          // @0xa8
611
    br_vector3 oldomega;                       // @0xb4
612
    br_scalar M;                               // @0xc0
613
    int infinite_mass;                         // @0xc4
614
    br_vector3 I;                              // @0xc8
615
    br_vector3 cmpos;                          // @0xd4
616
    int extra_point_num;                       // @0xe0
617
    br_bounds bounds[3];                       // @0xe4
618
    br_bounds max_bounds[2];                   // @0x12c
619
    br_vector3 extra_points[6];                // @0x15c
620
    br_scalar original_extra_points_z[6];      // @0x1a4
621
    br_vector3 old_point;                      // @0x1bc
622
    br_vector3 old_norm;                       // @0x1c8
623
    int box_face_start;                        // @0x1d4
624
    int box_face_end;                          // @0x1d8
625
    int box_face_ref;                          // @0x1dc
626
    br_matrix34 last_box_inv_mat;              // @0x1e0
627
    br_bounds last_box;                        // @0x210
628
    int doing_nothing_flag;                    // @0x228
629
    tSpecial_volume* last_special_volume;      // @0x22c
630
    tSpecial_volume* auto_special_volume;      // @0x230
631
    int frame_collision_flag;                  // @0x234
632
    int collision_flag;                        // @0x238
633
    int max_shrapnel_material;                 // @0x23c
634
    br_vector3 direction;                      // @0x240
635
    float speed;                               // @0x24c
636
    tU16 car_ID;                               // @0x250
637
    br_material* shrapnel_material[3];         // @0x254
638
    br_bounds bounds_world_space;              // @0x260
639
    tBounds_type bounds_ws_type;               // @0x278
640
    tU16 fire_vertex[12];                      // @0x27c
641
    tU16 num_smoke_columns;                    // @0x294
642
    br_vector3 water_normal;                   // @0x298
643
    br_scalar water_d;                         // @0x2a4
644
    br_scalar water_depth_factor;              // @0x2a8
645
    tNet_message_mechanics_info message;       // @0x2ac
646
    tU32 last_car_car_collision;               // @0x330
647
    br_scalar dt;                              // @0x334
648
    tCar_spec* who_last_hit_me;                // @0x338
649
    char name[32];                             // @0x33c
650
    char driver_name[32];                      // @0x35c
651
    char grid_icon_names[3][14];               // @0x37c
652
    tS8* cockpit_images[3];                    // @0x3a8
653
    br_pixelmap* prat_cam_left;                // @0x3b4
654
    br_pixelmap* prat_cam_top;                 // @0x3b8
655
    br_pixelmap* prat_cam_right;               // @0x3bc
656
    br_pixelmap* prat_cam_bottom;              // @0x3c0
657
    br_pixelmap* prat_cam_dummy;               // @0x3c4
658
    br_pixelmap* speedo_image[2];              // @0x3c8
659
    br_pixelmap* tacho_image[2];               // @0x3d0
660
    br_pixelmap* damage_background;            // @0x3d8
661
    br_pixelmap* lhands_images[7];             // @0x3dc
662
    br_pixelmap* rhands_images[7];             // @0x3f8
663
    br_pixelmap* grid_icon_image;              // @0x414
664
    br_pixelmap* gears_image;                  // @0x418
665
    int fg_index;                              // @0x41c
666
    int underwater_ability;                    // @0x420
667
    int invulnerable;                          // @0x424
668
    int wall_climber_mode;                     // @0x428
669
    int can_be_stolen;                         // @0x42c
670
    int has_been_stolen;                       // @0x430
671
    int active;                                // @0x434
672
    int knackered;                             // @0x438
673
    int pre_car_col_knackered;                 // @0x43c
674
    int render_left[3];                        // @0x440
675
    int render_top[3];                         // @0x44c
676
    int render_right[3];                       // @0x458
677
    int render_bottom[3];                      // @0x464
678
    int mirror_left;                           // @0x470
679
    int mirror_top;                            // @0x474
680
    int mirror_right;                          // @0x478
681
    int mirror_bottom;                         // @0x47c
682
    int prat_left;                             // @0x480
683
    int prat_top;                              // @0x484
684
    int prat_right;                            // @0x488
685
    int prat_bottom;                           // @0x48c
686
    int speedo_x[2];                           // @0x490
687
    int speedo_y[2];                           // @0x498
688
    int speedo_centre_x[2];                    // @0x4a0
689
    int speedo_centre_y[2];                    // @0x4a8
690
    int speedo_x_pitch[2];                     // @0x4b0
691
    int speedo_y_pitch[2];                     // @0x4b8
692
    int speedo_radius_1[2];                    // @0x4c0
693
    int speedo_radius_2[2];                    // @0x4c8
694
    int speedo_start_angle[2];                 // @0x4d0
695
    int speedo_end_angle[2];                   // @0x4d8
696
    int speedo_needle_colour[2];               // @0x4e0
697
    int tacho_x[2];                            // @0x4e8
698
    int tacho_y[2];                            // @0x4f0
699
    int tacho_centre_x[2];                     // @0x4f8
700
    int tacho_centre_y[2];                     // @0x500
701
    int tacho_x_pitch[2];                      // @0x508
702
    int tacho_y_pitch[2];                      // @0x510
703
    int tacho_radius_1[2];                     // @0x518
704
    int tacho_radius_2[2];                     // @0x520
705
    int tacho_start_angle[2];                  // @0x528
706
    int tacho_end_angle[2];                    // @0x530
707
    int tacho_needle_colour[2];                // @0x538
708
    int gear_x[2];                             // @0x540
709
    int gear_y[2];                             // @0x548
710
    int red_line;                              // @0x550
711
    int lhands_x[7];                           // @0x554
712
    int lhands_y[7];                           // @0x570
713
    int rhands_x[7];                           // @0x58c
714
    int rhands_y[7];                           // @0x5a8
715
    int number_of_hands_images;                // @0x5c4
716
    int max_speed;                             // @0x5c8
717
    int damage_x_offset;                       // @0x5cc
718
    int damage_y_offset;                       // @0x5d0
719
    int damage_background_x;                   // @0x5d4
720
    int damage_background_y;                   // @0x5d8
721
    int dim_count[2];                          // @0x5dc
722
    int dim_left[2][4];                        // @0x5e4
723
    int dim_top[2][4];                         // @0x604
724
    int dim_right[2][4];                       // @0x624
725
    int dim_bottom[2][4];                      // @0x644
726
    int car_actor_count;                       // @0x664
727
    int current_car_actor;                     // @0x668
728
    int principal_car_actor;                   // @0x66c
729
    int car_model_variable;                    // @0x670
730
    int number_of_steerable_wheels;            // @0x674
731
    int steering_ref[6];                       // @0x678
732
    int lf_sus_ref[4];                         // @0x690
733
    int rf_sus_ref[4];                         // @0x6a0
734
    int lr_sus_ref[2];                         // @0x6b0
735
    int rr_sus_ref[2];                         // @0x6b8
736
    int driven_wheels_spin_ref_1;              // @0x6c0
737
    int driven_wheels_spin_ref_2;              // @0x6c4
738
    int driven_wheels_spin_ref_3;              // @0x6c8
739
    int driven_wheels_spin_ref_4;              // @0x6cc
740
    int non_driven_wheels_spin_ref_1;          // @0x6d0
741
    int non_driven_wheels_spin_ref_2;          // @0x6d4
742
    int non_driven_wheels_spin_ref_3;          // @0x6d8
743
    int non_driven_wheels_spin_ref_4;          // @0x6dc
744
    int engine_noises[3];                      // @0x6e0
745
    float driver_x_offset;                     // @0x6ec
746
    float driver_y_offset;                     // @0x6f0
747
    float driver_z_offset;                     // @0x6f4
748
    float mirror_x_offset;                     // @0x6f8
749
    float mirror_y_offset;                     // @0x6fc
750
    float mirror_z_offset;                     // @0x700
751
    float rearview_camera_angle;               // @0x704
752
    float head_left_angle;                     // @0x708
753
    float head_right_angle;                    // @0x70c
754
    float steering_angle;                      // @0x710
755
    float speedo_speed;                        // @0x714
756
    float lf_sus_position;                     // @0x718
757
    float rf_sus_position;                     // @0x71c
758
    float lr_sus_position;                     // @0x720
759
    float rr_sus_position;                     // @0x724
760
    float driven_wheels_circum;                // @0x728
761
    float non_driven_wheels_circum;            // @0x72c
762
    float bounce_rate;                         // @0x730
763
    float bounce_amount;                       // @0x734
764
    float collision_mass_multiplier;           // @0x738
765
    float damage_multiplier;                   // @0x73c
766
    float grip_multiplier;                     // @0x740
767
    float engine_power_multiplier;             // @0x744
768
    tDamage_unit damage_units[12];             // @0x748
769
    tU8 frame_start_damage[12];                // @0x958
770
    tImpact_location last_impact_location;     // @0x964
771
    tDamage_program damage_programs[6];        // @0x968
772
    tHeadup_slot headup_slots[2][20];          // @0x998
773
    tParts_spec power_ups[3];                  // @0xfd8
774
    int car_actor_pipe_ref;                    // @0x12b4
775
    tCar_actor car_model_actors[5];            // @0x12b8
776
    br_material* screen_material;              // @0x13a8
777
    br_material* screen_material_source;       // @0x13ac
778
    br_matrix34 last_safe_positions[5];        // @0x13b0
779
    int wheel_slip;                            // @0x14a0
780
    br_scalar damping;                         // @0x14a4
781
    br_scalar sk[2];                           // @0x14a8
782
    br_scalar sb[2];                           // @0x14b0
783
    br_scalar susp_give[2];                    // @0x14b8
784
    br_scalar susp_height[2];                  // @0x14c0
785
    br_scalar ride_height;                     // @0x14c8
786
    br_vector3 wpos[4];                        // @0x14cc
787
    br_scalar curvature;                       // @0x14fc
788
    br_scalar maxcurve;                        // @0x1500
789
    br_scalar turn_speed;                      // @0x1504
790
    br_scalar oldd[4];                         // @0x1508
791
    int material_index[4];                     // @0x1518
792
    int dust_time[4];                          // @0x1528
793
    br_scalar mu[3];                           // @0x1538
794
    br_scalar friction_elipticity;             // @0x1544
795
    br_scalar down_force_speed;                // @0x1548
796
    int down_force_flag;                       // @0x154c
797
    br_scalar initial_brake;                   // @0x1550
798
    br_scalar brake_increase;                  // @0x1554
799
    br_scalar freduction;                      // @0x1558
800
    br_scalar acc_force;                       // @0x155c
801
    br_scalar torque;                          // @0x1560
802
    br_scalar brake_force;                     // @0x1564
803
    int traction_control;                      // @0x1568
804
    br_scalar rolling_r_front;                 // @0x156c
805
    br_scalar rolling_r_back;                  // @0x1570
806
    tCar_controls keys;                        // @0x1574
807
    tJoystick joystick;                        // @0x1578
808
    int pedals_xy;                             // @0x1588
809
    int number_of_wheels_on_ground;            // @0x158c
810
    br_actor* wheel_actors[6];                 // @0x1590
811
    float wheel_rot_pos[4];                    // @0x15a8
812
    br_scalar wheel_dam_offset[4];             // @0x15b8
813
    br_scalar damage_magnitude_accumulator;    // @0x15c8
814
    br_scalar revs;                            // @0x15cc
815
    br_scalar target_revs;                     // @0x15d0
816
    br_vector3 road_normal;                    // @0x15d4
817
    br_scalar max_force_front;                 // @0x15e0
818
    br_scalar max_force_rear;                  // @0x15e4
819
    int gear;                                  // @0x15e8
820
    int just_changed_gear;                     // @0x15ec
821
    int max_gear;                              // @0x15f0
822
    br_scalar speed_revs_ratio;                // @0x15f4
823
    br_scalar force_torque_ratio;              // @0x15f8
824
    tS3_sound_source_ptr sound_source;         // @0x15fc
825
    br_matrix34 pre_car_col_mat;               // @0x1600
826
    br_scalar pre_car_col_speed;               // @0x1630
827
    br_vector3 pre_car_col_direction;          // @0x1634
828
    br_vector3 pre_car_col_velocity;           // @0x1640
829
    br_vector3 pre_car_col_velocity_car_space; // @0x164c
830
    br_vector3 velocity_bu_per_sec;            // @0x1658
831
    float last_col_prop_x;                     // @0x1664
832
    float last_col_prop_y;                     // @0x1668
833
    float last_col_prop_z;                     // @0x166c
834
    tU32 time_last_hit;                        // @0x1670
835
    tU32 time_last_victim;                     // @0x1674
836
    struct tCar_spec_struct* last_hit_by;      // @0x1678
837
    struct tCar_spec_struct* last_culprit;     // @0x167c
838
    int no_of_processes_recording_my_trail;    // @0x1680
839
    tPursuee_trail my_trail;                   // @0x1684
840
    unsigned int grudge_raised_recently : 1;   // @0x17c8  // 0x1
841
    unsigned int big_bang : 1;                 // @0x17c8  // 0x2
842
    unsigned int scary_bang : 1;               // @0x17c8  // 0x4
843
    tU32 last_collision_time;                  // @0x17cc
844
    tU32 last_time_we_touched_a_player;        // @0x17d0
845
    tU32 end_steering_damage_effect;           // @0x17d4
846
    tU32 end_trans_damage_effect;              // @0x17d8
847
    int false_key_left;                        // @0x17dc
848
    int false_key_right;                       // @0x17e0
849
    tCar_spec* last_person_to_hit_us;          // @0x17e4
850
    tCar_spec* last_person_we_hit;             // @0x17e8
851
    br_vector3 engine_pos;                     // @0x17ec
852
    br_model* last_wheel_models[4];            // @0x17f8
853
    int last_wheel_faces[4];                   // @0x1808
854
    tU32 shadow_intersection_flags;            // @0x1818
855
    tU32 last_bounce;                          // @0x181c
856
    unsigned int new_skidding;                 // @0x1820
857
    unsigned int old_skidding;                 // @0x1824
858
    tU16 old_skid[4];                          // @0x1828
859
    br_vector3 prev_skid_pos[4];               // @0x1830
860
    br_vector3 skid_line_start[4];             // @0x1860
861
    br_vector3 skid_line_end[4];               // @0x1890
862
    br_vector3 nor[4];                         // @0x18c0
863
    br_vector3 prev_nor[4];                    // @0x18f0
864
    br_vector3 special_start[4];               // @0x1920
865
    br_scalar oil_remaining[4];                // @0x1950
866
    br_scalar blood_remaining[4];              // @0x1960
867
    br_scalar total_length[4];                 // @0x1970
868
    float proxy_ray_distance;                  // @0x1980
869
    tS32 powerups[64];                         // @0x1984
870
    tU32 time_to_recover;                      // @0x1a84
871
    tU32 repair_time;                          // @0x1a88
872
    int power_up_levels[3];                    // @0x1a8c
873
    tS3_sound_tag horn_sound_tag;              // @0x1a98
874
} tCar_spec;
875
 
876
typedef struct tOppo_psyche {
877
    tU8 grudge_against_player;
878
} tOppo_psyche;
879
 
880
typedef struct tComplete_race_data {
881
    tU8 finished_calcing_race_route;
882
    tU8 found_race_section;
883
} tComplete_race_data;
884
 
885
typedef struct tReturn_to_start_data {
886
    br_vector3 nearest_path_point;
887
    tS16 section_no;
888
    tU8 waiting_near_start;
889
} tReturn_to_start_data;
890
 
891
typedef struct tPath_node_struct {
892
    br_vector3 p;
893
    tS16 sections[8];
894
    tU8 number_of_sections;
895
} tPath_node;
896
 
897
typedef struct tPath_section_struct { // size: 0x14
898
    tS16 node_indices[2];             // @0x0
899
    tU8 min_speed[2];                 // @0x4
900
    tU8 max_speed[2];                 // @0x6
901
    br_scalar width;                  // @0x8
902
    br_scalar length;                 // @0xc
903
    tU8 type;                         // @0x10
904
    tU8 one_way;                      // @0x11
905
} tPath_section;
906
 
907
typedef struct tPursue_car_data {       // size: 0x70
908
    tCar_spec* pursuee;                 // @0x0
909
    tU32 time_of_next_visibility_check; // @0x4
910
    tU32 start_backup_time;             // @0x8
911
    tU32 time_last_twatted_em;          // @0xc
912
    tU32 time_pursuee_last_visible;     // @0x10
913
    tU32 time_last_away_from_pursuee;   // @0x14
914
    tPath_node direct_line_nodes[2];    // @0x18
915
    tPath_section direct_line_section;  // @0x58
916
    tU8 state;                          // @0x6c
917
} tPursue_car_data;
918
 
919
typedef struct tFollow_path_data {               // size: 0x58
920
    tU32 struggle_time;                          // @0x0
921
    tU32 last_finished_struggle_time;            // @0x4
922
    tU32 toggle_time;                            // @0x8
923
    tU32 borrowed_time_start;                    // @0xc
924
    br_scalar prev_acc;                          // @0x10
925
    br_scalar prev_acc_error;                    // @0x14
926
    br_scalar desired_speed;                     // @0x18
927
    br_scalar last_distance;                     // @0x1c
928
    br_vector3 cheaty_intersect;                 // @0x20
929
    tS16 section_no;                             // @0x2c
930
    tS16 first_section_no;                       // @0x2e
931
    tS16 last_struggle_section;                  // @0x30
932
    unsigned int number_of_struggles : 8;        // @0x34
933
    unsigned int has_moved_during_this_task : 1; // @0x34  // 0x100
934
    unsigned int made_it : 1;                    // @0x34  // 0x200
935
    unsigned int cheating : 1;                   // @0x34  // 0x400
936
    unsigned int cornering : 1;                  // @0x34  // 0x800
937
    unsigned int left_not_right : 1;             // @0x34  // 0x1000
938
    unsigned int off_path_toggle;                // @0x38
939
    unsigned int moving_to_intersect;            // @0x3c
940
    br_vector2 turning_cent;                     // @0x40
941
    br_scalar turning_radius;                    // @0x48
942
    br_scalar corner_size;                       // @0x4c
943
    br_scalar corner_width;                      // @0x50
944
    int section_after;                           // @0x54
945
} tFollow_path_data;
946
 
947
typedef struct tLevitate_data {
948
    br_scalar initial_y;
949
    tU32 time_started;
950
    unsigned int waiting_to_levitate : 1;
951
} tLevitate_data;
952
 
953
typedef struct tRun_away_data {
954
    tU32 time_to_stop;
955
} tRun_away_data;
956
 
957
typedef struct tRoute_section { // size: 0x4
958
    tS16 section_no;            // @0x0
959
    tU8 direction;              // @0x2
960
} tRoute_section;
961
 
962
typedef struct tOpponent_spec {                      // size: 0x190
963
    int index;                                       // @0x0
964
    tOpponent_objective_type current_objective;      // @0x4
965
    tCar_spec* car_spec;                             // @0x8
966
    float nastiness;                                 // @0xc
967
    br_scalar distance_to_camera;                    // @0x10
968
    br_scalar distance_from_home;                    // @0x14
969
    br_scalar player_to_oppo_d;                      // @0x18
970
    br_vector3 start_pos;                            // @0x1c
971
    br_vector3 start_direction;                      // @0x28
972
    br_vector3 pos_last_frame;                       // @0x34
973
    br_vector3 player_to_oppo_v;                     // @0x40
974
    tU32 next_out_of_world_check;                    // @0x4c
975
    tU32 stun_time_ends;                             // @0x50
976
    tU32 next_player_visibility_check;               // @0x54
977
    tU32 last_moved_ok;                              // @0x58
978
    tU32 last_in_view;                               // @0x5c
979
    tU32 time_last_processed;                        // @0x60
980
    tU32 time_this_objective_started;                // @0x64
981
    tU32 time_for_this_objective_to_finish;          // @0x68
982
    tU32 cunting_buttfuck_timer;                     // @0x6c
983
    tS16 players_section_when_last_calced_full_path; // @0x70
984
    int nnext_sections;                              // @0x74
985
    tRoute_section next_sections[10];                // @0x78
986
    unsigned int new_objective_required : 1;         // @0xa0  // 0x1
987
    unsigned int finished_for_this_race : 1;         // @0xa0  // 0x2
988
    unsigned int knackeredness_detected : 1;         // @0xa0  // 0x4
989
    unsigned int physics_me : 1;                     // @0xa0  // 0x8
990
    unsigned int pursue_from_start : 1;              // @0xa0  // 0x10
991
    unsigned int cheating : 1;                       // @0xa0  // 0x20
992
    unsigned int last_cheating_value : 1;            // @0xa0  // 0x40
993
    unsigned int pursuing_player_before_freeze : 1;  // @0xa0  // 0x80
994
    unsigned int has_moved_at_some_point : 1;        // @0xa0  // 0x100
995
    unsigned int player_in_view_now : 1;             // @0xa0  // 0x200
996
    unsigned int acknowledged_piv : 1;               // @0xa0  // 0x400
997
    unsigned int murder_reported : 1;                // @0xa0  // 0x800
998
    tComplete_race_data complete_race_data;          // @0xa4
999
    tFollow_path_data follow_path_data;              // @0xa8
1000
    tPursue_car_data pursue_car_data;                // @0x100
1001
    tLevitate_data levitate_data;                    // @0x170
1002
    tRun_away_data run_away_data;                    // @0x17c
1003
    tReturn_to_start_data return_to_start_data;      // @0x180
1004
} tOpponent_spec;
1005
 
1006
typedef struct tIntelligent_vehicles {
1007
    int number_of_opponents;
1008
    int number_of_cops;
1009
    int number_of_path_nodes;
1010
    int number_of_path_sections;
1011
    br_vector3 cop_start_points[10];
1012
    br_vector3 cop_start_vectors[10];
1013
    tOpponent_spec opponents[5];
1014
    tOpponent_spec cops[10];
1015
    tPath_node* path_nodes;
1016
    tPath_section* path_sections;
1017
} tIntelligent_vehicles;
1018
 
1019
typedef struct tBounds {
1020
    br_matrix34* mat;
1021
    br_bounds original_bounds;
1022
    br_vector3 box_centre;
1023
    br_scalar radius;
1024
    br_bounds real_bounds;
1025
} tBounds;
1026
 
1027
typedef struct tFace_ref {
1028
    br_material* material;
1029
    br_vector3 v[3];
1030
    br_vector2* map[3];
1031
    br_vector3 normal;
1032
    int flags;
1033
    br_scalar d;
1034
} tFace_ref;
1035
 
1036
typedef struct tNet_game_player_info { // size: 0xc0
1037
    tPD_net_player_info pd_net_info;   // @0x0
1038
    tU32 this_players_time_stamp;      // @0x10
1039
    tU32 last_heard_from_him;          // @0x14
1040
    tU32 reposition_time;              // @0x18
1041
    tU32 last_waste_message;           // @0x1c
1042
    int host;                          // @0x20
1043
    tPlayer_ID ID;                     // @0x24
1044
    char player_name[32];              // @0x28
1045
    tPlayer_status player_status;      // @0x48
1046
    int car_index;                     // @0x4c
1047
    int grid_index;                    // @0x50
1048
    int grid_position_set;             // @0x54
1049
    int opponent_list_index;           // @0x58
1050
    int awaiting_confirmation;         // @0x5c
1051
    int score;                         // @0x60
1052
    int credits;                       // @0x64
1053
    int wasted;                        // @0x68
1054
    int wasteage_attributed;           // @0x6c
1055
    int name_not_clipped;              // @0x70
1056
    int race_stuff_initialised;        // @0x74
1057
    int played;                        // @0x78
1058
    int won;                           // @0x7c
1059
    int next_car_index;                // @0x80
1060
    int games_score;                   // @0x84
1061
    int last_score_index;              // @0x88
1062
    br_matrix34 initial_position;      // @0x8c
1063
    tCar_spec* car;                    // @0xbc
1064
} tNet_game_player_info;
1065
 
1066
typedef struct tNet_game_options {         // size: 0x30
1067
    int show_players_on_map;               // @0x0
1068
    int show_peds_on_map;                  // @0x4
1069
    int enable_text_messages;              // @0x8
1070
    int show_powerups_on_map;              // @0xc
1071
    int powerup_respawn;                   // @0x10
1072
    int open_game;                         // @0x14
1073
    int starting_money_index;              // @0x18
1074
    int grid_start;                        // @0x1c
1075
    int race_end_target;                   // @0x20
1076
    int random_car_choice;                 // @0x24
1077
    tNet_sequence_type race_sequence_type; // @0x28
1078
    tCar_choice car_choice;                // @0x2c
1079
} tNet_game_options;
1080
 
1081
typedef struct tNet_game_status { // size: 0x4
1082
    tNet_game_stage stage;        // @0x0
1083
} tNet_game_status;
1084
 
1085
typedef struct tNet_game_details {   // size: 0x78
1086
    tPD_net_player_info pd_net_info; // @0x0
1087
    char host_name[32];              // @0x10
1088
    tPlayer_ID host_ID;              // @0x30
1089
    int num_players;                 // @0x34
1090
    int start_race;                  // @0x38
1091
    int no_races_yet;                // @0x3c
1092
    tNet_game_status status;         // @0x40
1093
    tNet_game_options options;       // @0x44
1094
    tNet_game_type type;             // @0x74
1095
} tNet_game_details;
1096
 
1097
typedef struct tNet_message_send_me_details {
1098
    tU8 contents_size;
1099
    tNet_message_type type;
1100
} tNet_message_send_me_details;
1101
 
1102
typedef struct tNet_message_my_details {
1103
    tU8 contents_size;
1104
    tNet_message_type type;
1105
    tNet_game_details details;
1106
} tNet_message_my_details;
1107
 
1108
typedef struct tNet_message_join {
1109
    tU8 contents_size;
1110
    tNet_message_type type;
1111
    tNet_game_player_info player_info;
1112
} tNet_message_join;
1113
 
1114
typedef struct tNet_message_leave {
1115
    tU8 contents_size;
1116
    tNet_message_type type;
1117
} tNet_message_leave;
1118
 
1119
typedef struct tNet_message_host_pissing_off {
1120
    tU8 contents_size;
1121
    tNet_message_type type;
1122
} tNet_message_host_pissing_off;
1123
 
1124
typedef struct tNet_message_new_player_list {
1125
    tU8 contents_size;
1126
    tNet_message_type type;
1127
    int number_of_players;
1128
    int this_index;
1129
    int batch_number;
1130
    tNet_game_player_info player;
1131
} tNet_message_new_player_list;
1132
 
1133
typedef struct tNet_message_race_over {
1134
    tU8 contents_size;
1135
    tNet_message_type type;
1136
    tRace_over_reason reason;
1137
} tNet_message_race_over;
1138
 
1139
typedef struct tNet_message_status_report {
1140
    tU8 contents_size;
1141
    tNet_message_type type;
1142
    tPlayer_status status;
1143
} tNet_message_status_report;
1144
 
1145
typedef struct tGrid_spec {
1146
    int index;
1147
    int next_car_index;
1148
    br_matrix34 mat;
1149
} tGrid_spec;
1150
 
1151
typedef struct tNet_message_start_race {
1152
    tU8 contents_size;
1153
    tNet_message_type type;
1154
    int car_count;
1155
    int racing;
1156
    int next_race;
1157
    tGrid_spec car_list[6];
1158
} tNet_message_start_race;
1159
 
1160
typedef struct tNet_message_guarantee_reply {
1161
    tU8 contents_size;
1162
    tNet_message_type type;
1163
    tU32 guarantee_number;
1164
} tNet_message_guarantee_reply;
1165
 
1166
typedef struct tNet_message_headup {
1167
    tU8 contents_size;
1168
    tNet_message_type type;
1169
    char text[128];
1170
} tNet_message_headup;
1171
 
1172
typedef struct tNet_message_host_query {
1173
    tU8 contents_size;
1174
    tNet_message_type type;
1175
} tNet_message_host_query;
1176
 
1177
typedef struct tNet_message_host_reply {
1178
    tU8 contents_size;
1179
    tNet_message_type type;
1180
    int race_has_started;
1181
    int race_index;
1182
    int pending_race;
1183
} tNet_message_host_reply;
1184
 
1185
typedef struct tNet_message_cop_info {
1186
    tU8 contents_size;
1187
    tNet_message_type type;
1188
    tU32 ID;
1189
    tU32 time;
1190
    tReduced_matrix mat;
1191
    br_vector3 v;
1192
    br_vector3 omega;
1193
    br_scalar curvature;
1194
    br_scalar d[4];
1195
    tU8 damage[12];
1196
} tNet_message_cop_info;
1197
 
1198
typedef struct tNet_message_non_car_info {
1199
    tU8 contents_size;
1200
    tNet_message_type type;
1201
    tU32 ID;
1202
    tU32 time;
1203
    tReduced_matrix mat;
1204
    br_vector3 v;
1205
    br_vector3 omega;
1206
    tU32 cc_coll_time;
1207
    tU16 flags;
1208
} tNet_message_non_car_info;
1209
 
1210
typedef struct tNet_message_non_car_position {
1211
    tU8 contents_size;
1212
    tNet_message_type type;
1213
    tU32 ID;
1214
    br_matrix34 mat;
1215
    tU16 flags;
1216
} tNet_message_non_car_position;
1217
 
1218
typedef struct tNet_message_time_sync {
1219
    tU8 contents_size;
1220
    tNet_message_type type;
1221
    int race_start_time;
1222
} tNet_message_time_sync;
1223
 
1224
typedef struct tNet_message_players_confirm {
1225
    tU8 contents_size;
1226
    tNet_message_type type;
1227
    tPlayer_ID player;
1228
} tNet_message_players_confirm;
1229
 
1230
typedef struct tNet_message_disable_car {
1231
    tU8 contents_size;
1232
    tNet_message_type type;
1233
    tPlayer_ID player;
1234
} tNet_message_disable_car;
1235
 
1236
typedef struct tNet_message_enable_car {
1237
    tU8 contents_size;
1238
    tNet_message_type type;
1239
    tPlayer_ID player;
1240
} tNet_message_enable_car;
1241
 
1242
typedef struct tNet_message_powerup {
1243
    tU8 contents_size;
1244
    tNet_message_type type;
1245
    tPlayer_ID player;
1246
    int powerup_index;
1247
    tU32 time_left;
1248
    tPowerup_event event;
1249
} tNet_message_powerup;
1250
 
1251
typedef struct tNet_message_recover {
1252
    tU8 contents_size;
1253
    tNet_message_type type;
1254
    tU32 ID;
1255
    int time_to_recover;
1256
} tNet_message_recover;
1257
 
1258
typedef struct tNet_message_scores {
1259
    tU8 contents_size;
1260
    tNet_message_type type;
1261
    int general_score;
1262
    int scores[6];
1263
} tNet_message_scores;
1264
 
1265
typedef struct tNet_message_wasted {
1266
    tU8 contents_size;
1267
    tNet_message_type type;
1268
    tPlayer_ID victim;
1269
    tPlayer_ID culprit;
1270
} tNet_message_wasted;
1271
 
1272
typedef struct tNet_message_gameplay {
1273
    tU8 contents_size;
1274
    tNet_message_type type;
1275
    tNet_gameplay_mess mess;
1276
    tU32 param_1;
1277
    tU32 param_2;
1278
    tU32 param_3;
1279
    tU32 param_4;
1280
} tNet_message_gameplay;
1281
 
1282
typedef struct tNet_message_pedestrian {
1283
    tU8 contents_size;
1284
    tNet_message_type type;
1285
    tS8 action_instruction;
1286
    tS8 flags;
1287
    tS16 index;
1288
    br_vector3 pos;
1289
    br_scalar speed;
1290
    br_vector3 to_pos;
1291
    br_vector3 offset;
1292
    tPlayer_ID murderer;
1293
    tU32 respawn_time_or_spin_period;
1294
    tS8 frame;
1295
} tNet_message_pedestrian;
1296
 
1297
typedef struct tNet_message_car_details_req {
1298
    tU8 contents_size;
1299
    tNet_message_type type;
1300
} tNet_message_car_details_req;
1301
 
1302
typedef struct tCar_details {
1303
    int car_index;
1304
    char owner[16];
1305
} tCar_details;
1306
 
1307
typedef struct tNet_message_car_details {
1308
    tU8 contents_size;
1309
    tNet_message_type type;
1310
    int count;
1311
    tCar_details details[6];
1312
} tNet_message_car_details;
1313
 
1314
typedef struct tGame_scores {
1315
    int played;
1316
    int won;
1317
    int score;
1318
} tGame_scores;
1319
 
1320
typedef struct tNet_message_game_scores {
1321
    tU8 contents_size;
1322
    tNet_message_type type;
1323
    tGame_scores scores[6];
1324
} tNet_message_game_scores;
1325
 
1326
typedef struct tNet_message_oil_spill {
1327
    tU8 contents_size;
1328
    tNet_message_type type;
1329
    tPlayer_ID player;
1330
    br_scalar full_size;
1331
    br_scalar grow_rate;
1332
    br_scalar current_size;
1333
} tNet_message_oil_spill;
1334
 
1335
typedef struct tNet_message_crush_point {
1336
    tU8 contents_size;
1337
    tNet_message_type type;
1338
    tPlayer_ID id;
1339
    tU16 vertex;
1340
    br_vector3 energy_vector;
1341
} tNet_message_crush_point;
1342
 
1343
typedef union tNet_contents {                           // size: 0x160
1344
    struct {                                            // size: 0x2
1345
        tU8 contents_size;                              // @0x0
1346
        tNet_message_type type;                         // @0x1
1347
    } header;                                           // @0x0
1348
    union {                                             // size: 0x160
1349
        tNet_message_send_me_details send_details;      // @0x0
1350
        tNet_message_my_details details;                // @0x0
1351
        tNet_message_join join;                         // @0x0
1352
        tNet_message_leave leave;                       // @0x0
1353
        tNet_message_host_pissing_off hosticide;        // @0x0
1354
        tNet_message_new_player_list player_list;       // @0x0
1355
        tNet_message_race_over race_over;               // @0x0
1356
        tNet_message_status_report report;              // @0x0
1357
        tNet_message_start_race start_race;             // @0x0
1358
        tNet_message_guarantee_reply reply;             // @0x0
1359
        tNet_message_headup headup;                     // @0x0
1360
        tNet_message_host_query where_we_at;            // @0x0
1361
        tNet_message_host_reply heres_where_we_at;      // @0x0
1362
        tNet_message_mechanics_info mech;               // @0x0
1363
        tNet_message_non_car_info non_car;              // @0x0
1364
        tNet_message_time_sync time_sync;               // @0x0
1365
        tNet_message_players_confirm confirm;           // @0x0
1366
        tNet_message_disable_car disable_car;           // @0x0
1367
        tNet_message_enable_car enabled_car;            // @0x0
1368
        tNet_message_powerup powerup;                   // @0x0
1369
        tNet_message_recover recover;                   // @0x0
1370
        tNet_message_scores scores;                     // @0x0
1371
        tNet_message_wasted wasted;                     // @0x0
1372
        tNet_message_pedestrian pedestrian;             // @0x0
1373
        tNet_message_gameplay gameplay;                 // @0x0
1374
        tNet_message_non_car_position non_car_position; // @0x0
1375
        tNet_message_cop_info cop_info;                 // @0x0
1376
        tNet_message_car_details_req car_details_req;   // @0x0
1377
        tNet_message_car_details car_details;           // @0x0
1378
        tNet_message_game_scores game_scores;           // @0x0
1379
        tNet_message_oil_spill oil_spill;               // @0x0
1380
        tNet_message_crush_point crush;                 // @0x0
1381
    } data;                                             // @0x0
1382
} tNet_contents;
1383
 
1384
typedef struct tNet_message {    // size: 0x17c
1385
    tU32 pd_stuff_so_DO_NOT_USE; // @0x0
1386
    tU32 magic_number;           // @0x4
1387
    tU32 guarantee_number;       // @0x8
1388
    tPlayer_ID sender;           // @0xc
1389
    int version;                 // @0x10
1390
    tU32 senders_time_stamp;     // @0x14
1391
    tU16 num_contents;           // @0x18
1392
    tU16 overall_size;           // @0x1a
1393
    tNet_contents contents;      // @0x1c
1394
} tNet_message;
1395
 
1396
typedef struct tCar_detail_info {
1397
    tCar_detail_ownership ownership;
1398
    char name[16];
1399
} tCar_detail_info;
1400
 
1401
typedef struct tWav_header {
1402
    char quote_RIFF[4];
1403
    tU32 format_length;
1404
    tU8 wave[4];
1405
    tU8 fmt[4];
1406
    tU32 wave_format_length;
1407
    tU16 format_tag;
1408
    tU16 channels;
1409
    tU32 samples_per_sec;
1410
    tU32 avg_bytes_per_sec;
1411
    tU16 block_align;
1412
    tU16 bits_per_sample;
1413
    tU8 data[4];
1414
    tU32 data_length;
1415
} tWav_header;
1416
 
1417
typedef struct tPowerup {
1418
    tPowerup_type type;
1419
    tU32 got_time;
1420
    tU32 duration;
1421
    tU32 lose_time;
1422
    tU16 group_inclusion;
1423
    br_pixelmap* icon;
1424
    int fizzle_type;
1425
    int number_of_float_params;
1426
    int number_of_integer_params;
1427
    int* integer_params;
1428
    int current_value;
1429
    int prat_cam_event;
1430
    tNet_powerup_type net_type;
1431
    tGot_proc* got_proc;
1432
    tLose_proc* lose_proc;
1433
    tPeriodic_proc* periodic_proc;
1434
    float* float_params;
1435
    tCar_spec* car;
1436
    char message[64];
1437
} tPowerup;
1438
 
1439
typedef struct tDepth_effect {
1440
    tDepth_effect_type type;
1441
    int start;
1442
    int end;
1443
    br_pixelmap* sky_texture;
1444
} tDepth_effect;
1445
 
1446
typedef struct tPlane_spec {
1447
    tPlane_type plane_type;
1448
    br_fvector3 n;
1449
    br_scalar d;
1450
} tPlane_spec;
1451
 
1452
typedef struct tMaterial_modifiers {
1453
    br_scalar car_wall_friction;
1454
    br_scalar tyre_road_friction;
1455
    br_scalar down_force;
1456
    br_scalar bumpiness;
1457
    int tyre_noise_index;
1458
    int crash_noise_index;
1459
    int scrape_noise_index;
1460
    br_scalar sparkiness;
1461
    int smoke_type;
1462
    br_material* skid_mark_material;
1463
} tMaterial_modifiers;
1464
 
1465
typedef struct tSpecial_screen {
1466
    br_material* material;
1467
    br_scalar min_x;
1468
    br_scalar min_z;
1469
    br_scalar max_x;
1470
    br_scalar max_z;
1471
} tSpecial_screen;
1472
 
1473
typedef struct tRace_list_spec {
1474
    char name[32];
1475
    int rank_required;
1476
    int best_rank;
1477
    int suggested_rank;
1478
    int been_there_done_that;
1479
} tRace_list_spec;
1480
 
1481
typedef struct tRace_save_info {
1482
    tU32 been_there_done_that;
1483
} tRace_save_info;
1484
 
1485
typedef struct tGraf_spec {
1486
    int depth_bits;
1487
    int depth_bytes;
1488
    int doubled;
1489
    int total_width;
1490
    int total_height;
1491
    long black_value;
1492
    int colour_index;
1493
    char* data_dir_name;
1494
    char* gfx_init_string;
1495
    int row_bytes;
1496
    int phys_width;
1497
    int phys_height;
1498
    void* base_addr;
1499
} tGraf_spec;
1500
 
20 pmbaty 1501
typedef struct tCollision_info {
1502
    int index;
1503
    int disabled;
1504
    tDriver driver;
1505
    br_actor* car_master_actor;
1506
    br_scalar min_torque_squared;
1507
    br_scalar break_off_radians_squared;
1508
    br_vector3 v;
1509
    br_vector3 old_v;
1510
    br_vector3 velocity_car_space;
1511
    br_matrix34 oldmat;
1512
    br_matrix34 old_frame_mat;
1513
    br_vector3 pos;
1514
    br_vector3 omega;
1515
    br_vector3 oldomega;
1516
    br_scalar M;
1517
    int infinite_mass;
1518
    br_vector3 I;
1519
    br_vector3 cmpos;
1520
    int extra_point_num;
1521
    br_bounds bounds[3];
1522
    br_bounds max_bounds[2];
1523
    br_vector3 extra_points[6];
1524
    br_scalar original_extra_points_z[6];
1525
    br_vector3 old_point;
1526
    br_vector3 old_norm;
1527
    int box_face_start;
1528
    int box_face_end;
1529
    int box_face_ref;
1530
    br_matrix34 last_box_inv_mat;
1531
    br_bounds last_box;
1532
    int doing_nothing_flag;
1533
    tSpecial_volume* last_special_volume;
1534
    tSpecial_volume* auto_special_volume;
1535
    int frame_collision_flag;
1536
    int collision_flag;
1537
    int max_shrapnel_material;
1538
    br_vector3 direction;
1539
    float speed;
1540
    tU16 car_ID;
1541
    br_material* shrapnel_material[3];
1542
    br_bounds bounds_world_space;
1543
    tBounds_type bounds_ws_type;
1544
    tU16 fire_vertex[12];
1545
    tU16 num_smoke_columns;
1546
    br_vector3 water_normal;
1547
    br_scalar water_d;
1548
    br_scalar water_depth_factor;
1549
    tNet_message_mechanics_info message;
1550
    tU32 last_car_car_collision;
1551
    br_scalar dt;
1552
    tCar_spec* who_last_hit_me;
1 pmbaty 1553
} tCollision_info;
1554
 
20 pmbaty 1555
typedef struct tNon_car_spec {
1556
    tCollision_info collision_info;
1557
    br_scalar free_mass;
1558
    br_scalar attached_mass;
1559
    br_vector3 free_cmpos;
1560
    br_vector3 attached_cmpos;
1561
    br_scalar min_torque_squared;
1562
    br_scalar snap_off_cosine;
1563
    br_vector3 I_over_M;
1 pmbaty 1564
} tNon_car_spec;
1565
 
20 pmbaty 1566
typedef struct tOpp_spec {
1567
    int index;
1568
    int ranking;
1569
    int net_player_index;
1570
    tCar_spec* car_spec;
1 pmbaty 1571
} tOpp_spec;
1572
 
1573
typedef struct tCheckpoint {
1574
    int time_value[3];
1575
    int quad_count;
1576
    br_vector3 vertices[4][4];
1577
    br_vector3 normal[4];
1578
    int map_left[2];
1579
    int map_top[2];
1580
    int map_right[2];
1581
    int map_bottom[2];
1582
} tCheckpoint;
1583
 
1584
typedef struct tNet_starts {
1585
    br_vector3 pos;
1586
    br_scalar yaw;
1587
} tNet_starts;
1588
 
1589
typedef struct tText_chunk {
1590
    int frame_cue;
1591
    int frame_end;
1592
    int x_coord;
1593
    int y_coord;
1594
    int line_count;
1595
    char* text[8];
1596
} tText_chunk;
1597
 
1598
typedef struct tRace_info {
1599
    char name[32];
1600
    char track_file_name[14];
1601
    int rank_required;
1602
    int best_rank;
1603
    int suggested_rank;
1604
    int total_laps;
1605
    int check_point_count;
1606
    int initial_timer[3];
1607
    int bonus_score[8][3];
1608
    int number_of_racers;
1609
    int number_of_net_start_points;
1610
    int text_chunk_count;
1611
    tNet_starts net_starts[24];
1612
    tCheckpoint checkpoints[10];
1613
    tOpp_spec opponent_list[30];
1614
    tU8* scene_image_data;
1615
    tU8* map_image_data;
1616
    tU8* info_image_data;
1617
    tU32 scene_image_data_length;
1618
    tU32 map_image_data_length;
1619
    tU32 info_image_data_length;
1620
    br_vector3 initial_position;
1621
    br_scalar initial_yaw;
1622
    br_pixelmap* map_image;
1623
    br_matrix34 map_transformation;
1624
    tText_chunk* text_chunks;
1625
    tMaterial_modifiers material_modifiers[11];
1626
} tRace_info;
1627
 
1628
typedef struct tOpponent_save_info {
1629
    tU32 dead;
1630
} tOpponent_save_info;
1631
 
1632
typedef struct tOpponent {
1633
    char name[24];
1634
    char abbrev_name[24];
1635
    char mug_shot_name[14];
1636
    char car_file_name[14];
1637
    char stolen_car_flic_name[14];
1638
    tU8* mug_shot_image_data;
1639
    tU8* stolen_car_image_data;
1640
    tU32 mug_shot_image_data_length;
1641
    tU32 stolen_car_image_data_length;
1642
    int car_number;
1643
    int strength_rating;
1644
    int picked;
1645
    int dead;
1646
    int text_chunk_count;
1647
    tNet_avail network_availability;
1648
    br_pixelmap* grid_icon_image;
1649
    tOppo_psyche psyche;
1650
    tText_chunk* text_chunks;
1651
} tOpponent;
1652
 
1653
typedef struct tProgram_state {
1654
    tS32 credits;
1655
    tS32 credits_earned;
1656
    tS32 credits_lost;
1657
    tU32 view_change_start;
1658
    tU32 pratcam_move_start;
1659
    int peds_killed;
1660
    int sausage_eater_mode;
1661
    int rank;
1662
    int loaded;
1663
    int last_slot;
1664
    int skill_level;
1665
    int parts_shop_visited;
1666
    int racing;
1667
    int cut_scene;
1668
    int saving;
1669
    int loading;
1670
    int dont_save_or_load;
1671
    int dont_load;
1672
    int mirror_on;
1673
    int prat_cam_on;
1674
    int cockpit_on;
1675
    int cockpit_image_index;
1676
    int current_render_left;
1677
    int current_render_top;
1678
    int current_render_right;
1679
    int current_render_bottom;
1680
    int frame_rate_headup;
1681
    int revs;
1682
    int music_volume;
1683
    int effects_volume;
1684
    int current_race_index;
1685
    int redo_race_index;
1686
    int credits_per_rank;
1687
    int game_completed;
1688
    int number_of_cars;
1689
    int current_car_index;
1690
    tWhich_view which_view;
1691
    tWhich_view new_view;
1692
    tWhich_view pending_view;
1693
    tWhich_view old_view;
1694
    tRace_sel_view_type view_type;
1695
    tProg_status prog_status;
1696
    tFrank_anne frank_or_anniness;
1697
    tAuto_parts_reply auto_parts_reply;
1698
    tCar_spec current_car;
1699
    char player_name[2][14];
1700
    char track_file_name[14];
1701
    char car_name[14];
1702
    int cars_available[60];
1703
    br_vector3 initial_position;
1704
    br_scalar initial_yaw;
1705
    tTrack_spec track_spec;
1706
    tDepth_effect default_depth_effect;
1707
    tDepth_effect current_depth_effect;
1708
    int special_volume_count;
1709
    tSpecial_volume* special_volumes;
1710
    br_material* standard_screen;
1711
    br_material* standard_screen_dark;
1712
    br_material* standard_screen_fog;
1713
    int special_screens_count;
1714
    tSpecial_screen* special_screens;
1715
    tIntelligent_vehicles AI_vehicles;
1716
    tNon_car_spec* non_cars;
1717
    int num_non_car_spaces;
1718
} tProgram_state;
1719
 
1720
typedef struct tDR_font {
1721
    br_pixelmap* images;
1722
    int file_read_once;
1723
    int height;
1724
    int width;
1725
    int spacing;
1726
    int offset;
1727
    int num_entries;
1728
    int width_table[224];
1729
} tDR_font;
1730
 
1731
typedef struct tGraf_data {
1732
    int width;
1733
    int height;
1734
    int rolling_letter_y_pitch;
1735
    int save_slot_y_offset;
1736
    int rolling_letter_x_pitch;
1737
    int save_slot_x_offset;
1738
    int save_slot_rank_x_offset;
1739
    int save_slot_credits_x_offset;
1740
    int save_slot_height;
1741
    int save_slot_letter_height;
1742
    int save_slot_table[41];
1743
    int player_name_y;
1744
    int player_name_x[2];
1745
    int enter_name_x[2];
1746
    int enter_name_y;
1747
    int frank_panel_left;
1748
    int frank_panel_top;
1749
    int frank_panel_right;
1750
    int frank_panel_bottom;
1751
    int anne_panel_left;
1752
    int anne_panel_top;
1753
    int anne_panel_right;
1754
    int anne_panel_bottom;
1755
    int cock_margin_x;
1756
    int cock_margin_y;
1757
    int total_cock_width;
1758
    int total_cock_height;
1759
    int dial__x[2];
1760
    int dial__y[2];
1761
    int dial__x_centre;
1762
    int dial__y_centre;
1763
    int start_race_panel_left;
1764
    int start_race_panel_top;
1765
    int start_race_panel_right;
1766
    int start_race_panel_bottom;
1767
    int start_race_panel_top_clip;
1768
    int start_race_panel_bottom_clip;
1769
    int choose_race_rank_right;
1770
    int choose_race_name_left;
1771
    int choose_race_bullet_left;
1772
    int choose_race_left;
1773
    int choose_race_right;
1774
    int choose_race_y_top;
1775
    int choose_race_y_bottom;
1776
    int choose_race_y_pitch;
1777
    int choose_race_curr_y;
1778
    int choose_race_box_left;
1779
    int choose_race_box_top;
1780
    int choose_race_line_y;
1781
    int choose_race_current_text_x;
1782
    int choose_race_current_text_y;
1783
    int choose_race_current_num_x;
1784
    int grid_x_pitch;
1785
    int grid_y_pitch;
1786
    int grid_x_stagger;
1787
    int grid_left_x;
1788
    int grid_top_y;
1789
    int grid_left_clip;
1790
    int grid_top_clip;
1791
    int grid_right_clip;
1792
    int grid_bottom_clip;
1793
    int grid_numbers_left;
1794
    int grid_numbers_top;
1795
    int grid_numbers_right;
1796
    int grid_marker_margin;
1797
    int grid_marker_x_len;
1798
    int dare_mugshot_left;
1799
    int dare_mugshot_top;
1800
    int dare_mugshot_width;
1801
    int dare_mugshot_height;
1802
    int dare_text_left;
1803
    int dare_text_width;
1804
    int dare_mug_left_margin;
1805
    int dare_mug_top_margin;
1806
    int dare_y_adjust;
1807
    int parts_image_x;
1808
    int parts_image_y;
1809
    int parts_image_width;
1810
    int parts_image_height;
1811
    int parts_cost_x;
1812
    int parts_cost_y;
1813
    int parts_total_x;
1814
    int parts_total_y;
1815
    int parts_net_x;
1816
    int parts_net_y;
1817
    int parts_numbers_x;
1818
    int parts_top_clip;
1819
    int parts_bottom_clip;
1820
    int parts_label_x;
1821
    int parts_label_y;
1822
    int summ1_credits_box_left;
1823
    int summ1_credits_left;
1824
    int summ1_credits_right;
1825
    int summ1_earned_top;
1826
    int summ1_earned_bottom;
1827
    int summ1_lost_top;
1828
    int summ1_lost_bottom;
1829
    int summ1_total_top;
1830
    int summ1_total_bottom;
1831
    int summ1_rank_x_pitch;
1832
    int summ1_rank_inc_l;
1833
    int summ1_rank_inc_c;
1834
    int summ1_rank_total_l;
1835
    int summ1_rank_total_c;
1836
    int summ1_rank_inc_left;
1837
    int summ1_rank_inc_right;
1838
    int summ1_rank_total_left;
1839
    int summ1_rank_total_right;
1840
    int summ1_rank_top;
1841
    int summ1_rank_bot;
1842
    int summ1_rank_y;
1843
    int wreck_name_left;
1844
    int wreck_name_right;
1845
    int wreck_name_top;
1846
    int wreck_name_bottom;
1847
    int wreck_name_base_line;
1848
    int wreck_render_x;
1849
    int wreck_render_y;
1850
    int wreck_render_w;
1851
    int wreck_render_h;
1852
    int power_up_icon_x;
1853
    int power_up_icon_countdown_x;
1854
    int power_up_icon_y;
1855
    int power_up_icon_y_pitch;
1856
    int power_up_icon_countdown_y_offset;
1857
    int change_car_text_y;
1858
    int change_car_line_left;
1859
    int change_car_line_y;
1860
    int change_car_line_right;
1861
    int change_car_panel_left;
1862
    int change_car_panel_top;
1863
    int change_car_panel_right;
1864
    int change_car_panel_bottom;
1865
    int change_car_panel_top_clip;
1866
    int change_car_panel_bottom_clip;
1867
    int map_timer_text_x;
1868
    int map_timer_text_y;
1869
    int map_timer_border_x;
1870
    int map_timer_border_y;
1871
    int action_replay_R_x;
1872
    int action_replay_R_y;
1873
    int action_replay_controls_x;
1874
    int action_replay_controls_y;
1875
    int action_replay_hilite_y;
1876
    int action_replay_rew_start_x;
1877
    int action_replay_rew_x;
1878
    int action_replay_rev_play_x;
1879
    int action_replay_pause_x;
1880
    int action_replay_play_x;
1881
    int action_replay_ffwd_x;
1882
    int action_replay_fwd_end_x;
1883
    int action_replay_camera_x;
1884
    int action_replay_cam_text_x;
1885
    int action_replay_cam_text_y;
1886
    int joinable_games_x_1;
1887
    int joinable_games_x_2;
1888
    int joinable_games_x_3;
1889
    int joinable_games_x_4;
1890
    int joinable_games_x_r;
1891
    int joinable_games_y;
1892
    int joinable_games_y_pitch;
1893
    int joinable_games_sel_left;
1894
    int joinable_games_sel_right;
1895
    int joinable_games_sel_top_marg;
1896
    int joinable_games_sel_bot_marg;
1897
    int net_player_name_x;
1898
    int net_player_name_y;
1899
    int error_box_left;
1900
    int error_box_top;
1901
    int error_box_right;
1902
    int error_box_bottom;
1903
    int start_synch_x_0;
1904
    int start_synch_x_1;
1905
    int start_synch_x_2;
1906
    int start_synch_x_r;
1907
    int start_synch_top;
1908
    int start_synch_y_pitch;
1909
    int start_synch_start_x;
1910
    int start_synch_start_y;
1911
    int key_assign_col_1;
1912
    int key_assign_col_1_a;
1913
    int key_assign_col_2;
1914
    int key_assign_col_2_a;
1915
    int key_assign_y_pitch;
1916
    int key_assign_y;
1917
    int key_assign_key_map_y;
1918
    int key_assign_flic_x;
1919
    int key_assign_flic_y;
1920
    int map_render_x_marg;
1921
    int map_render_y_marg;
1922
    int net_head_box_x;
1923
    int net_head_box_pitch;
1924
    int net_head_box_width;
1925
    int net_head_box_top;
1926
    int net_head_box_bot;
1927
    int net_head_name_x_marg;
1928
    int net_head_name_y;
1929
    int net_head_num_x;
1930
    int net_head_num_y;
1931
    int net_head_num_height;
1932
    int net_head_icon_x;
1933
    int net_head_icon_y;
1934
    int net_head_icon_height;
1935
    int net_head_score_x;
1936
    int net_head_score_y;
1937
    int armour_headup_y[2];
1938
    int power_headup_y[2];
1939
    int offense_headup_y[2];
1940
    int ps_dim_left;
1941
    int ps_dim_right;
1942
    int ps_dim_height;
1943
    int ps_name_left;
1944
    int ps_name_top_border;
1945
    int ps_bars_per_level;
1946
    int ps_x_pitch;
1947
    int ps_bar_top_border;
1948
    int ps_bar_left;
1949
    int ps_bar_height;
1950
    int net_choose_race_x;
1951
    int net_choose_race_y;
1952
    int net_descr_race_l;
1953
    int net_descr_race_r;
1954
    int net_descr_race_top;
1955
    int net_descr_race_bot;
1956
    int net_sum_x_1;
1957
    int net_sum_x_2;
1958
    int net_sum_x_3;
1959
    int net_sum_x_4;
1960
    int net_sum_x_5;
1961
    int net_sum_headings_y;
1962
    int net_sum_y_pitch;
1963
    int graph_opt_disable_x;
1964
    int graph_opt_disable_y;
1965
    int sound_opt_disable_x;
1966
    int sound_opt_disable_y;
1967
    int net_message_enter_x;
1968
    int net_message_enter_y;
1969
    int eval_x;
1970
    int eval_y;
1971
} tGraf_data;
1972
 
1973
typedef struct tRolling_letter {
1974
    int letters[9];
1975
    int x_coord;
1976
    int y_coord;
1977
    int number_of_letters;
1978
    tRolling_type rolling_type;
1979
    float current_offset;
1980
} tRolling_letter;
1981
 
1982
typedef struct tFlic_descriptor {
1983
    char* data;
1984
    char* data_start;
1985
    char file_name[32];
1986
    tU8* first_pixel;
1987
    tU32 bytes_remaining;
1988
    tU32 frame_period;
1989
    tU32 last_frame;
1990
    br_pixelmap* the_pixelmap;
1991
    int x_offset;
1992
    int y_offset;
1993
    int width;
1994
    int height;
1995
    int frames_left;
1996
    int current_frame;
1997
    int the_index;
1998
    int new_format;
1999
    int must_finish;
2000
    int bytes_still_to_be_read;
2001
    int bytes_in_buffer;
2002
    FILE* f;
2003
    tFlic_descriptor_ptr next;
2004
} tFlic_descriptor;
2005
 
2006
typedef struct tBrender_storage {
2007
    int models_count;
2008
    int materials_count;
2009
    int shade_tables_count;
2010
    int pixelmaps_count;
2011
    int max_pixelmaps;
2012
    int max_shade_tables;
2013
    int max_materials;
2014
    int max_models;
2015
    br_model** models;
2016
    br_pixelmap** pixelmaps;
2017
    br_pixelmap** shade_tables;
2018
    br_material** materials;
2019
    br_pixelmap** saved_colour_maps;
2020
} tBrender_storage;
2021
 
2022
typedef struct tSave_game {
2023
    char slot_name[16];
2024
    char car_name[16];
2025
    char player_name[2][14];
2026
    tRace_save_info race_info[100];
2027
    tOpponent_save_info opponent_info[48];
2028
    tU32 credits;
2029
    tU32 rank;
2030
    tU32 skill_level;
2031
    tU32 game_completed;
2032
    tU32 number_of_cars;
2033
    tU32 cars_available[60];
2034
    tU32 current_car_index;
2035
    tU32 current_race_index;
2036
    tU32 redo_race_index;
2037
    tU32 frank_or_annitude;
2038
    tU32 power_up_levels[3];
2039
    tU32 version;
2040
    tU32 checksum;
2041
} tSave_game;
2042
 
2043
typedef struct tPed_subs {
2044
    int orig;
2045
    int subs;
2046
} tPed_subs;
2047
 
2048
typedef struct tRadio_bastards {
2049
    int count;
2050
    int top;
2051
    int current_value;
2052
    int left[5];
2053
} tRadio_bastards;
2054
 
2055
typedef struct exception_struct {
2056
    tException_list next;
2057
    char* name;
2058
    int flags;
2059
} tException_node;
2060
 
2061
typedef struct tPixelmap_user_data {
2062
    tU16 orig_width;
2063
    tU16 orig_height;
2064
} tPixelmap_user_data;
2065
 
2066
typedef struct tMatrix_and_actor {
2067
    br_matrix34* m;
2068
    br_actor* a;
2069
} tMatrix_and_actor;
2070
 
2071
typedef tU16 tChunk_subject_index;
2072
 
2073
typedef enum tShadow_level {
2074
    eShadow_none = 0,
2075
    eShadow_us_only = 1,
2076
    eShadow_us_and_opponents = 2,
2077
    eShadow_everyone = 3
2078
} tShadow_level;
2079
 
2080
typedef enum tPipe_chunk_type {
2081
    ePipe_chunk_actor_rstyle = 0,
2082
    ePipe_chunk_actor_translate = 1,
2083
    ePipe_chunk_actor_transform = 2,
2084
    ePipe_chunk_actor_create = 3,
2085
    ePipe_chunk_actor_destroy = 4,
2086
    ePipe_chunk_actor_relink = 5,
2087
    ePipe_chunk_actor_material = 6,
2088
    ePipe_chunk_face_material = 7,
2089
    ePipe_chunk_material_trans = 8,
2090
    ePipe_chunk_material_pixelmap = 9,
2091
    ePipe_chunk_model_geometry = 10,
2092
    ePipe_chunk_pedestrian = 11,
2093
    ePipe_chunk_frame_boundary = 12,
2094
    ePipe_chunk_car = 13,
2095
    ePipe_chunk_sound = 14,
2096
    ePipe_chunk_damage = 15,
2097
    ePipe_chunk_special = 16,
2098
    ePipe_chunk_ped_gib = 17,
2099
    ePipe_chunk_incident = 18,
2100
    ePipe_chunk_spark = 19,
2101
    ePipe_chunk_shrapnel = 20,
2102
    ePipe_chunk_screen_shake = 21,
2103
    ePipe_chunk_groove_stop = 22,
2104
    ePipe_chunk_non_car = 23,
2105
    ePipe_chunk_smoke = 24,
2106
    ePipe_chunk_oil_spill = 25,
2107
    ePipe_chunk_smoke_column = 26,
2108
    ePipe_chunk_flame = 27,
2109
    ePipe_chunk_smudge = 28,
2110
    ePipe_chunk_splash = 29,
2111
    ePipe_chunk_prox_ray = 30,
2112
    ePipe_chunk_skid_adjustment = 31,
2113
    ePipe_chunk_enum_count = 32
2114
} tPipe_chunk_type;
2115
 
2116
typedef enum tSpecial_type {
2117
    ePipe_special_fade = 0,
2118
    ePipe_special_giant_ped_on = 1,
2119
    ePipe_special_giant_ped_off = 2,
2120
    ePipe_special_min_ped_on = 3,
2121
    ePipe_special_min_ped_off = 4
2122
} tSpecial_type;
2123
 
2124
typedef enum tIncident_type {
2125
    eIncident_ped = 0,
2126
    eIncident_car = 1,
2127
    eIncident_wall = 2,
2128
    eNo_incident = 3
2129
} tIncident_type;
2130
 
2131
typedef enum tAction_replay_camera_type {
2132
    eAction_replay_standard = 0,
2133
    eAction_replay_tv = 1,
2134
    eAction_replay_action = 2
2135
} tAction_replay_camera_type;
2136
 
2137
typedef enum tKey_down_result {
2138
    tKey_down_no = 0,
2139
    tKey_down_yes = 1,
2140
    tKey_down_still = 2,
2141
    tKey_down_repeat = 3
2142
} tKey_down_result;
2143
typedef int dr_pick2d_cbfn(br_actor*, br_model*, br_material*, br_vector3*, br_vector3*, br_scalar, br_scalar, void*);
2144
typedef struct tReduced_pos {
2145
    tS16 v[3];
2146
} tReduced_pos;
2147
 
2148
typedef union tIncident_info {    // size: 0x10
2149
    struct {                      // size: 0x10
2150
        tCar_spec* car;           // @0x0
2151
        br_vector3 impact_point;  // @0x4
2152
    } car_info;                   // @0x0
2153
    struct {                      // size: 0x8
2154
        br_actor* ped_actor;      // @0x0
2155
        br_actor* murderer_actor; // @0x4
2156
    } ped_info;                   // @0x0
2157
    struct {                      // size: 0xc
2158
        br_vector3 pos;           // @0x0
2159
    } wall_info;                  // @0x0
2160
} tIncident_info;
2161
 
2162
typedef struct tChanged_vertex {
2163
    tU16 vertex_index;
2164
    br_vector3 delta_coordinates;
2165
} tChanged_vertex;
2166
 
2167
typedef struct tPipe_actor_rstyle_data {
2168
    tU8 new_rstyle;
2169
} tPipe_actor_rstyle_data;
2170
 
2171
typedef struct tPipe_actor_translate_data {
2172
    br_vector3 new_translation;
2173
} tPipe_actor_translate_data;
2174
 
2175
typedef struct tPipe_actor_transform_data {
2176
    br_matrix34 new_transformation;
2177
} tPipe_actor_transform_data;
2178
 
2179
typedef struct tPipe_actor_create_data {
2180
    tU8 dummy;
2181
} tPipe_actor_create_data;
2182
 
2183
typedef struct tPipe_actor_destroy_data {
2184
    tU8 dummy;
2185
} tPipe_actor_destroy_data;
2186
 
2187
typedef struct tPipe_actor_relink_data {
2188
    tChunk_subject_index new_parent;
2189
} tPipe_actor_relink_data;
2190
 
2191
typedef struct tPipe_actor_material_data {
2192
    tChunk_subject_index new_material;
2193
} tPipe_actor_material_data;
2194
 
2195
typedef struct tPipe_face_material_data {
2196
    tU16 face_index;
2197
    tChunk_subject_index new_material;
2198
} tPipe_face_material_data;
2199
 
2200
typedef struct tPipe_material_trans_data {
2201
    br_matrix23 new_transformation;
2202
} tPipe_material_trans_data;
2203
 
2204
typedef struct tPipe_material_pixelmap_data {
2205
    tChunk_subject_index new_pixelmap;
2206
} tPipe_material_pixelmap_data;
2207
 
2208
typedef struct tPipe_model_geometry_data {
2209
    tU16 vertex_count;
2210
    int model_index;
2211
    tChanged_vertex vertex_changes[1];
2212
} tPipe_model_geometry_data;
2213
 
2214
typedef struct tSmudged_vertex {
2215
    tU16 vertex_index;
2216
    tU16 light_index;
2217
} tSmudged_vertex;
2218
 
2219
typedef struct tPipe_smudge_data {
2220
    tU16 vertex_count;
2221
    int model_index;
2222
    tSmudged_vertex vertex_changes[1];
2223
} tPipe_smudge_data;
2224
 
2225
typedef struct tPipe_pedestrian_data {
2226
    tU8 action_and_frame_index;
2227
    tS8 hit_points;
2228
    tU16 parent;
2229
    br_vector3 new_translation;
2230
    float spin_period;
2231
    br_actor* parent_actor;
2232
    br_vector3 offset;
2233
    br_scalar jump_magnitude;
2234
} tPipe_pedestrian_data;
2235
 
2236
typedef struct tPipe_frame_boundary_data {
2237
    tU32 time;
2238
} tPipe_frame_boundary_data;
2239
 
2240
typedef struct tPipe_car_data {
2241
    br_matrix34 transformation;
2242
    br_vector3 velocity;
2243
    tS16 speedo_speed;
2244
    tS16 steering_angle;
2245
    tU16 revs_and_gear;
2246
    tS8 lf_sus_position;
2247
    tS8 rf_sus_position;
2248
    tS8 lr_sus_position;
2249
    tS8 rr_sus_position;
2250
} tPipe_car_data;
2251
 
2252
typedef struct tPipe_sound_data {
2253
    tS3_pitch pitch;
2254
    br_vector3 position;
2255
    tU16 outlet_index;
2256
    tU16 volume;
2257
} tPipe_sound_data;
2258
 
2259
typedef struct tPipe_damage_data {
2260
    tS8 damage_delta[12];
2261
} tPipe_damage_data;
2262
 
2263
typedef struct tPipe_special_data {
2264
    tU8 dummy;
2265
    tS8 padding;
2266
} tPipe_special_data;
2267
 
2268
typedef struct tPipe_ped_gib_data {
2269
    tU16 ped_parent_index;
2270
    tU8 size;
2271
    tU8 gib_index;
2272
    br_matrix34 transform;
2273
} tPipe_ped_gib_data;
2274
 
2275
typedef struct tPipe_incident_data { // size: 0x14
2276
    float severity;                  // @0x0
2277
    union {                          // size: 0x10
2278
        struct {                     // size: 0x10
2279
            tU16 car_ID;             // @0x0
2280
            br_vector3 impact_point; // @0x4
2281
        } car_info;                  // @0x0
2282
        struct {                     // size: 0x8
2283
            tU16 ped_index;          // @0x0
2284
            br_actor* actor;         // @0x4
2285
        } ped_info;                  // @0x0
2286
        struct {                     // size: 0xc
2287
            br_vector3 pos;          // @0x0
2288
        } wall_info;                 // @0x0
2289
    } info;                          // @0x4
2290
} tPipe_incident_data;
2291
 
2292
typedef struct tPipe_spark_data {
2293
    br_vector3 pos;
2294
    br_vector3 v;
2295
} tPipe_spark_data;
2296
 
2297
typedef struct tPipe_shrapnel_data {
2298
    br_vector3 pos;
2299
    tU16 age;
2300
    br_material* material;
2301
} tPipe_shrapnel_data;
2302
 
2303
typedef struct tPipe_screen_shake_data {
2304
    tS8 wobble_x;
2305
    tS8 wobble_y;
2306
} tPipe_screen_shake_data;
2307
 
2308
typedef struct tPipe_non_car_data {
2309
    br_actor* actor;
2310
    br_matrix34 mat;
2311
} tPipe_non_car_data;
2312
 
2313
typedef struct tPipe_smoke_data {
2314
    tReduced_pos pos;
2315
    tU16 radius;
2316
    tU8 strength;
2317
    tU8 type;
2318
} tPipe_smoke_data;
2319
 
2320
typedef struct tPipe_smoke_column_data {
2321
    int car_ID;
2322
    tU16 vertex;
2323
} tPipe_smoke_column_data;
2324
 
2325
typedef struct tPipe_flame_data {
2326
    tS16 frame_count;
2327
    br_scalar scale_x;
2328
    br_scalar scale_y;
2329
    br_scalar offset_x;
2330
    br_scalar offset_z;
2331
} tPipe_flame_data;
2332
 
2333
typedef struct tPipe_splash_data {
2334
    br_scalar d;
2335
    br_vector3 normal;
2336
} tPipe_splash_data;
2337
 
2338
typedef struct tPipe_prox_ray_data {
2339
    tU16 ped_index;
2340
    tU16 car_ID;
2341
    tU32 time;
2342
} tPipe_prox_ray_data;
2343
 
2344
typedef struct tPipe_oil_spill_data {
2345
    br_matrix34 mat;
2346
    br_scalar full_size;
2347
    br_scalar grow_rate;
2348
    tU32 spill_time;
2349
    tU32 previous_stop_time;
2350
    tCar_spec* car;
2351
    br_vector3 original_pos;
2352
    br_pixelmap* pixelmap;
2353
} tPipe_oil_spill_data;
2354
 
2355
typedef struct tPipe_groove_stop_data {
2356
    int path_interrupt;
2357
    int object_interrupt;
2358
    float path_resumption;
2359
    float object_resumption;
2360
    br_matrix34 matrix;
2361
} tPipe_groove_stop_data;
2362
 
2363
typedef struct tPipe_skid_adjustment {
2364
    br_matrix34 matrix;
2365
    int material_index;
2366
} tPipe_skid_adjustment;
2367
 
2368
typedef struct tPipe_chunk {            // size: 0x58
2369
    tChunk_subject_index subject_index; // @0x0
2370
#if defined(DETHRACE_REPLAY_DEBUG)
2371
    int chunk_magic1;
2372
#endif
2373
    union {                                                  // size: 0x54
2374
        tPipe_actor_rstyle_data actor_rstyle_data;           // @0x0
2375
        tPipe_actor_translate_data actor_translate_data;     // @0x0
2376
        tPipe_actor_transform_data actor_transform_data;     // @0x0
2377
        tPipe_actor_create_data actor_create_data;           // @0x0
2378
        tPipe_actor_destroy_data actor_destroy_data;         // @0x0
2379
        tPipe_actor_relink_data actor_relink_data;           // @0x0
2380
        tPipe_actor_material_data actor_material_data;       // @0x0
2381
        tPipe_face_material_data face_material_data;         // @0x0
2382
        tPipe_material_trans_data material_trans_data;       // @0x0
2383
        tPipe_material_pixelmap_data material_pixelmap_data; // @0x0
2384
        tPipe_model_geometry_data model_geometry_data;       // @0x0
2385
        tPipe_pedestrian_data pedestrian_data;               // @0x0
2386
        tPipe_frame_boundary_data frame_boundary_data;       // @0x0
2387
        tPipe_car_data car_data;                             // @0x0
2388
        tPipe_sound_data sound_data;                         // @0x0
2389
        tPipe_damage_data damage_data;                       // @0x0
2390
        tPipe_special_data special_data;                     // @0x0
2391
        tPipe_ped_gib_data ped_gib_data;                     // @0x0
2392
        tPipe_incident_data incident_data;                   // @0x0
2393
        tPipe_spark_data spark_data;                         // @0x0
2394
        tPipe_shrapnel_data shrapnel_data;                   // @0x0
2395
        tPipe_screen_shake_data screen_shake_data;           // @0x0
2396
        tPipe_groove_stop_data groove_stop_data;             // @0x0
2397
        tPipe_non_car_data non_car_data;                     // @0x0
2398
        tPipe_smoke_data smoke_data;                         // @0x0
2399
        tPipe_oil_spill_data oil_data;                       // @0x0
2400
        tPipe_smoke_column_data smoke_column_data;           // @0x0
2401
        tPipe_flame_data flame_data;                         // @0x0
2402
        tPipe_smudge_data smudge_data;                       // @0x0
2403
        tPipe_splash_data splash_data;                       // @0x0
2404
        tPipe_prox_ray_data prox_ray_data;                   // @0x0
2405
        tPipe_skid_adjustment skid_adjustment;               // @0x0
2406
    } chunk_data;                                            // @0x4
2407
} tPipe_chunk;
2408
 
2409
typedef struct tPipe_session {
2410
    tPipe_chunk_type chunk_type;
2411
    tU8 number_of_chunks;
2412
#if defined(DETHRACE_REPLAY_DEBUG)
2413
    int pipe_magic1;
2414
#endif
2415
    tPipe_chunk chunks;
2416
} tPipe_session;
2417
 
2418
typedef struct tCollison_data {
2419
    int ref;
2420
    tCollision_info* car;
2421
} tCollison_data;
2422
 
2423
typedef struct tSave_camera {
2424
    int saved;
2425
    br_scalar zoom;
2426
    br_angle yaw;
2427
} tSave_camera;
2428
 
2429
#ifdef DETHRACE_FIX_BUGS
2430
typedef void tEdit_func(void);
2431
#else
2432
typedef void* tEdit_func(void);
2433
#endif
2434
 
2435
typedef enum tEdit_mode {
2436
    eEdit_mode_cheat = 0,
2437
    eEdit_mode_acc = 1,
2438
    eEdit_mode_spec_vol = 2,
2439
    eEdit_mode_ped = 3,
2440
    eEdit_mode_opp = 4,
2441
    eEdit_mode_pratcam = 5,
2442
    eEdit_mode_depth = 6,
2443
    eEdit_mode_damage = 7,
2444
    eEdit_mode_bonnet = 8,
2445
    eEdit_mode_options = 9,
2446
    eEdit_mode_count = 10
2447
} tEdit_mode;
2448
typedef struct tToggle_element {
2449
    int key1;
2450
    int key2;
2451
    int in_game_only;
2452
    int exact_modifiers;
2453
    int on_last_time;
2454
    void (*action_proc)(void);
2455
} tToggle_element;
2456
 
2457
typedef struct tCheat {
2458
    tU32 code;
2459
    tU32 code2;
2460
    void (*action_proc)(int);
2461
    int num;
2462
} tCheat;
2463
 
2464
typedef enum tSpec_vol_depth_effect {
2465
    eSpec_dep_acid = 0,
2466
    eSpec_dep_water = 1,
2467
    eSpec_dep_slight_fog = 2,
2468
    eSpec_dep_med_fog = 3,
2469
    eSpec_dep_thick_fog = 4
2470
} tSpec_vol_depth_effect;
2471
 
2472
typedef enum tSpec_vol_cam_effect {
2473
    eSpec_cam_wobble = 0
2474
} tSpec_vol_cam_effect;
2475
 
2476
typedef enum tHeadup_type {
2477
    eHeadup_unused = 0,
2478
    eHeadup_text = 1,
2479
    eHeadup_coloured_text = 2,
2480
    eHeadup_image = 3,
2481
    eHeadup_fancy = 4,
2482
    eHeadup_box_text = 5
2483
} tHeadup_type;
2484
 
2485
typedef enum tFancy_stage {
2486
    eFancy_stage_incoming = 0,
2487
    eFancy_stage_halting = 1,
2488
    eFancy_stage_waiting = 2,
2489
    eFancy_stage_readying = 3,
2490
    eFancy_stage_leaving = 4
2491
} tFancy_stage;
2492
 
2493
typedef struct tHeadup {              // size: 0x14c
2494
    tHeadup_type type;                // @0x0
2495
    int x;                            // @0x4
2496
    int y;                            // @0x8
2497
    int original_x;                   // @0xc
2498
    int right_edge;                   // @0x10
2499
    int flash_period;                 // @0x14
2500
    int slot_index;                   // @0x18
2501
    int dimmed_background;            // @0x1c
2502
    int dim_left;                     // @0x20
2503
    int dim_top;                      // @0x24
2504
    int dim_right;                    // @0x28
2505
    int dim_bottom;                   // @0x2c
2506
    int clever;                       // @0x30
2507
    int cockpit_anchored;             // @0x34
2508
    int flash_state;                  // @0x38
2509
    tJustification justification;     // @0x3c
2510
    tU32 end_time;                    // @0x40
2511
    tU32 last_flash;                  // @0x44
2512
    union {                           // size: 0x104
2513
        struct {                      // size: 0x104
2514
            char text[250];           // @0x0
2515
            int colour;               // @0xfc
2516
            br_font* font;            // @0x100
2517
        } text_info;                  // @0x0
2518
        struct {                      // size: 0x100
2519
            char text[250];           // @0x0
2520
            tDR_font* coloured_font;  // @0xfc
2521
        } coloured_text_info;         // @0x0
2522
        struct {                      // size: 0x4
2523
            br_pixelmap* image;       // @0x0
2524
        } image_info;                 // @0x0
2525
        struct {                      // size: 0x18
2526
            br_pixelmap* image;       // @0x0
2527
            int offset;               // @0x4
2528
            int shear_amount;         // @0x8
2529
            int end_offset;           // @0xc
2530
            tFancy_stage fancy_stage; // @0x10
2531
            tU32 start_time;          // @0x14
2532
        } fancy_info;                 // @0x0
2533
    } data;                           // @0x48
2534
} tHeadup;
2535
 
2536
typedef struct tQueued_headup {
2537
    int flash_rate;
2538
    int lifetime;
2539
    int font_index;
2540
    char text[256];
2541
} tQueued_headup;
2542
 
2543
typedef struct tFlicette {
2544
    int flic_index;
2545
    int x[2];
2546
    int y[2];
2547
} tFlicette;
2548
 
2549
typedef struct tMouse_area {
2550
    int left[2];
2551
    int top[2];
2552
    int right[2];
2553
    int bottom[2];
2554
    int new_choice;
2555
    int new_mode;
2556
    int available_when_typing;
2557
    int (*mouse_click)(int*, int*, int, int);
2558
} tMouse_area;
2559
 
2560
typedef struct tRectile {
2561
    int left[2];
2562
    int top[2];
2563
    int right[2];
2564
    int bottom[2];
2565
} tRectile;
2566
 
2567
typedef struct tInterface_spec {
2568
    int initial_imode;
2569
    int first_opening_flic;
2570
    int second_opening_flic;
2571
    int end_flic_go_ahead;
2572
    int end_flic_escaped;
2573
    int end_flic_otherwise;
2574
    int flic_bunch_to_load;
2575
    int move_left_new_mode[2];
2576
    int move_left_delta[2];
2577
    int move_left_min[2];
2578
    int move_left_max[2];
2579
    int (*move_left_proc[2])(int*, int*);
2580
    int move_right_new_mode[2];
2581
    int move_right_delta[2];
2582
    int move_right_min[2];
2583
    int move_right_max[2];
2584
    int (*move_right_proc[2])(int*, int*);
2585
    int move_up_new_mode[2];
2586
    int move_up_delta[2];
2587
    int move_up_min[2];
2588
    int move_up_max[2];
2589
    int (*move_up_proc[2])(int*, int*);
2590
    int move_down_new_mode[2];
2591
    int move_down_delta[2];
2592
    int move_down_min[2];
2593
    int move_down_max[2];
2594
    int (*move_down_proc[2])(int*, int*);
2595
    int go_ahead_allowed[2];
2596
    int (*go_ahead_proc[2])(int*, int*);
2597
    int escape_allowed[2];
2598
    int (*escape_proc[2])(int*, int*);
2599
    int (*exit_proc)(int*, int*);
2600
    void (*draw_proc)(int, int);
2601
    tU32 time_out;
2602
    void (*start_proc1)(void);
2603
    void (*start_proc2)(void);
2604
    int (*done_proc)(int, int, int, int, int);
2605
    int font_needed;
2606
    int typeable[2];
2607
    void (*get_original_string)(int, int, char*, int*);
2608
    int escape_code;
2609
    int dont_save_or_load;
2610
    int number_of_button_flics;
2611
    tFlicette* flicker_on_flics;
2612
    tFlicette* flicker_off_flics;
2613
    tFlicette* pushed_flics;
2614
    int number_of_mouse_areas;
2615
    tMouse_area* mouse_areas;
2616
    int number_of_recopy_areas;
2617
    tRectile* recopy_areas;
2618
} tInterface_spec;
2619
 
2620
typedef int dr_modelpick2d_cbfn(br_model*, br_material*, br_vector3*, br_vector3*, br_scalar, int, int, int, br_vector3*, br_vector2*, void*);
2621
typedef int dr_pick3d_cbfn(br_actor*, br_model*, br_material*, br_matrix34*, br_bounds*, void*);
2622
 
2623
typedef struct tFlic_spec {
2624
    char* file_name;
2625
    int interruptable;
2626
    int queued;
2627
    int frame_rate;
2628
    int repeat;
2629
    int x_offset;
2630
    int y_offset;
2631
    tS8* data_ptr;
2632
    tU32 the_size;
2633
} tFlic_spec;
2634
 
2635
typedef struct tFlic_bunch {
2636
    char count;
2637
    int* indexes;
2638
} tFlic_bunch;
2639
 
2640
typedef struct tTranslation_record {
2641
    int flic_index;
2642
    int x;
2643
    int y;
2644
    int font_index;
2645
    int global;
2646
    int every_frame;
2647
    tJustification justification;
2648
    char* text;
2649
} tTranslation_record;
2650
 
2651
/* Changed due to conflict with tVehicle_type enum */
2652
typedef enum tVehicle_category {
2653
    eVehiclecat_self = 0,
2654
    eVehiclecat_opponent = 1,
2655
    eVehiclecat_rozzer = 2,
2656
    eVehiclecat_drone = 3
2657
} tVehicle_category;
2658
 
2659
typedef struct tTransient_bm {
2660
    br_pixelmap* pixmap;
2661
    int in_use;
2662
    int x_coord;
2663
    int y_coord;
2664
    int order_number;
2665
    int user_data;
2666
} tTransient_bm;
2667
 
2668
typedef struct tCursor_giblet {
2669
    int current_giblet;
2670
    int sequence_index;
2671
    int landed;
2672
    int transient_index;
2673
    float x_speed;
2674
    float y_speed;
2675
    float x_coord;
2676
    float y_coord;
2677
    float the_speed;
2678
    tU32 last_giblet_change;
2679
    tU32 giblet_change_period;
2680
    tU32 e_t_a;
2681
} tCursor_giblet;
2682
 
2683
typedef struct tWobble_spec {
2684
    float amplitude_x;
2685
    float amplitude_y;
2686
    float period;
2687
    int time_started;
2688
} tWobble_spec;
2689
 
2690
typedef struct tConcussion {
2691
    int concussed;
2692
    br_matrix34 amplitudes;
2693
    br_matrix34 periods;
2694
    tU32 time_started;
2695
} tConcussion;
2696
 
2697
typedef struct tSaved_table {
2698
    br_pixelmap* original;
2699
    br_pixelmap* copy;
2700
} tSaved_table;
2701
 
2702
typedef struct tClip_details {
2703
    br_actor* clip;
2704
    br_scalar length;
2705
} tClip_details;
2706
 
2707
typedef enum tNet_head_avail {
2708
    eNet_or_otherwise = 0,
2709
    eNet_only = 1,
2710
    eNot_net = 2,
2711
    eNot_ever_ever_ever = 3
2712
} tNet_head_avail;
2713
typedef struct tModel_pool {
2714
    br_model** model_array;
2715
    int model_count;
2716
} tModel_pool;
2717
 
2718
typedef struct tHeadup_info {
2719
    char* name;
2720
    tNet_head_avail avail;
2721
} tHeadup_info;
2722
 
2723
typedef enum tTime_bonus_state {
2724
    eTime_bonus_none = 0,
2725
    eTime_bonus_initial_pause = 1,
2726
    eTime_bonus_race_bonus = 2,
2727
    eTime_bonus_tb_up = 3,
2728
    eTime_bonus_tb_pause = 4,
2729
    eTime_bonus_tb_down = 5,
2730
    eTime_bonus_end_pause = 6
2731
} tTime_bonus_state;
2732
 
2733
typedef enum tInfo_mode {
2734
    eInfo_regular = 0,
2735
    eInfo_pcam_car = 1,
2736
    eInfo_nearby_mat = 2,
2737
    eInfo_count = 3
2738
} tInfo_mode;
2739
typedef struct tHeadup_pair {
2740
    int player_index;
2741
    int score;
2742
    int out_of_game;
2743
} tHeadup_pair;
2744
 
2745
typedef struct tMax_message {
2746
    // char buffer[516];  // 512 + sizeof(void*)
2747
    char buffer[520];
2748
} tMax_message;
2749
 
2750
typedef struct tMid_message {
2751
    // char buffer[132];  // 128 + sizeof(void*)
2752
    char buffer[136];
2753
} tMid_message;
2754
 
2755
typedef struct tMin_message {
2756
    // char buffer[36];   // 32 + sizeof(void*)
2757
    char buffer[40];
2758
} tMin_message;
2759
 
2760
typedef struct tGuaranteed_message {        // size: 0x2c
2761
    tNet_message* message;                  // @0x0
2762
    tU32 send_time;                         // @0x4
2763
    tU32 next_resend_time;                  // @0x8
2764
    tU32 resend_period;                     // @0xc
2765
    int recieved;                           // @0x10
2766
    tPD_net_player_info pd_address;         // @0x14
2767
    int (*NotifyFail)(tU32, tNet_message*); // @0x24
2768
    tU32 guarantee_number;                  // @0x28
2769
} tGuaranteed_message;
2770
 
2771
typedef enum tJoin_or_host_result {
2772
    eJoin_or_host_cancel = 0,
2773
    eJoin_or_host_join = 1,
2774
    eJoin_or_host_host = 2
2775
} tJoin_or_host_result;
2776
typedef struct tJoinable_game {
2777
    tNet_game_details* game;
2778
    tU32 time;
2779
} tJoinable_game;
2780
 
2781
typedef struct tOil_spill_info {
2782
    br_actor* actor;
2783
    tCar_spec* car;
2784
    tU32 spill_time;
2785
    tU32 stop_time;
2786
    br_scalar full_size;
2787
    br_scalar current_size;
2788
    br_scalar grow_rate;
2789
    br_vector3 original_pos;
2790
    br_vector3 pos;
2791
} tOil_spill_info;
2792
 
2793
typedef enum tJoy_calib_stage {
2794
    eJoy_calib_tl_1 = 0,
2795
    eJoy_calib_br_1 = 1,
2796
    eJoy_calib_cn_1 = 2,
2797
    eJoy_calib_tl_2 = 3,
2798
    eJoy_calib_br_2 = 4,
2799
    eJoy_calib_cn_2 = 5
2800
} tJoy_calib_stage;
2801
 
2802
typedef enum tPed_instruc_type {
2803
    ePed_instruc_point = 0,
2804
    ePed_instruc_xpoint = 1,
2805
    ePed_instruc_bchoice = 2,
2806
    ePed_instruc_fchoice = 3,
2807
    ePed_instruc_dead = 4,
2808
    ePed_instruc_bmarker = 5,
2809
    ePed_instruc_fmarker = 6,
2810
    ePed_instruc_baction = 7,
2811
    ePed_instruc_faction = 8,
2812
    ePed_instruc_reverse = 9
2813
} tPed_instruc_type;
2814
 
2815
typedef enum tPed_frame_rate_type {
2816
    ePed_frame_fixed = 0,
2817
    ePed_frame_speed = 1,
2818
    ePed_frame_variable = 2
2819
} tPed_frame_rate_type;
2820
 
2821
typedef enum tPed_collide_type {
2822
    ePed_collide_none = -1,
2823
    ePed_collide_on = 0
2824
} tPed_collide_type;
2825
 
2826
typedef enum tPed_hit_position {
2827
    ePed_hit_unknown = 0,
2828
    ePed_hit_front = 1,
2829
    ePed_hit_back = 2,
2830
    ePed_hit_rside = 3,
2831
    ePed_hit_lside = 4
2832
} tPed_hit_position;
2833
typedef struct tPed_choice {
2834
    tU16 danger_level;
2835
    tU8 percentage_chance;
2836
    tU8 marker_ref;
2837
} tPed_choice;
2838
 
2839
typedef struct tPedestrian_instruction { // size: 0x14
2840
    tPed_instruc_type type;              // @0x0
2841
    union {                              // size: 0x10
2842
        struct {                         // size: 0x10
2843
            br_vector3 position;         // @0x0
2844
            int irreversable;            // @0xc
2845
        } point_data;                    // @0x0
2846
        struct {                         // size: 0xc
2847
            int number_of_choices;       // @0x0
2848
            tPed_choice choices[2];      // @0x4
2849
        } choice_data;                   // @0x0
2850
        struct {                         // size: 0x4
2851
            int death_sequence;          // @0x0
2852
        } death_data;                    // @0x0
2853
        struct {                         // size: 0x4
2854
            int marker_ref;              // @0x0
2855
        } marker_data;                   // @0x0
2856
        struct {                         // size: 0x4
2857
            int action_index;            // @0x0
2858
        } action_data;                   // @0x0
2859
    } data;                              // @0x4
2860
} tPedestrian_instruction;
2861
 
2862
typedef struct tBearing_sequence {
2863
    int sequence_index;
2864
    float max_bearing;
2865
} tBearing_sequence;
2866
 
2867
typedef struct tPedestrian_action {
2868
    float danger_level;
2869
    float percentage_chance;
2870
    int number_of_bearings;
2871
    int number_of_sounds;
2872
    int sounds[3];
2873
    tBearing_sequence sequences[7];
2874
    float initial_speed;
2875
    float looping_speed;
2876
    tU32 reaction_time;
2877
} tPedestrian_action;
2878
 
2879
typedef struct tPed_frame_info {
2880
    br_vector2 offset;
2881
    int flipped;
2882
    br_pixelmap* pixelmap;
2883
} tPed_frame_info;
2884
 
2885
typedef struct tPedestrian_sequence {
2886
    tPed_frame_rate_type frame_rate_type;
2887
    float frame_rate_factor1;
2888
    float frame_rate_factor2;
2889
    int number_of_frames;
2890
    int looping_frame_start;
2891
    tPed_frame_info frames[10];
2892
} tPedestrian_sequence;
2893
 
2894
typedef struct tPedestrian_data {
2895
    int magic_number;
2896
    br_scalar height;
2897
    br_scalar jump_magnitude;
2898
    br_scalar car_to_ped;
2899
    br_scalar min_x;
2900
    br_scalar max_x;
2901
    int credits_value;
2902
    int hit_points;
2903
    int number_of_exploding_sounds;
2904
    int exploding_sounds[3];
2905
    int falling_sound;
2906
    int last_sound_action;
2907
    tU16 killers_ID;
2908
    br_scalar width;
2909
    br_scalar height2;
2910
    tCar_spec* fate;
2911
    br_actor* actor;
2912
    tPlayer_ID murderer;
2913
    tPedestrian_instruction* instruction_list;
2914
    tPedestrian_action* action_list;
2915
    tU8 ref_number;
2916
    tU8 active;
2917
    tU8 munged;
2918
    tU8 collided_last_time;
2919
    tU8 flipped;
2920
    tU8 reverse_frames;
2921
    tU8 sent_dead_message;
2922
    tS8 image_index;
2923
    tS8 number_of_actions;
2924
    tS8 number_of_instructions;
2925
    tS8 first_instruction;
2926
    tS8 current_instruction;
2927
    tS8 fatal_car_impact_action;
2928
    tS8 non_fatal_car_impact_action;
2929
    tS8 after_impact_action;
2930
    tS8 fatal_ground_impact_action;
2931
    tS8 non_fatal_ground_impact_action;
2932
    tS8 giblets_action;
2933
    tS8 current_sequence;
2934
    tS8 current_action;
2935
    tS8 current_action_mode;
2936
    tS8 current_frame;
2937
    tS8 number_of_sequences;
2938
    tS8 done_initial;
2939
    tS8 giblets_being_sat_upon;
2940
    tS8 mid_air;
2941
    tS8 instruction_direction;
2942
    tS8 irreversable;
2943
    tS8 frightened_of_us;
2944
    tS8 cloned;
2945
    float current_speed;
2946
    float acceleration;
2947
    float spin_period;
2948
    tU32 last_frame;
2949
    tU32 last_action_change;
2950
    tU32 last_sound_make;
2951
    tS32 respawn_time;
2952
    br_vector3 pos;
2953
    br_vector3 direction;
2954
    br_vector3 from_pos;
2955
    br_vector3 to_pos;
2956
    br_vector3 offset;
2957
    float falling_speed;
2958
    tSpecial_volume* last_special_volume;
2959
    tPedestrian_sequence* sequences;
2960
    tS3_sound_tag last_sound;
2961
    br_pixelmap* colour_map;
2962
} tPedestrian_data;
2963
 
2964
typedef struct tPed_gib {
2965
    br_actor* actor;
2966
    br_scalar x_speed;
2967
    br_scalar y_speed;
2968
    int size;
2969
    int last_frame;
2970
    int gib_index;
2971
    int parent_index;
2972
    tU32 start_time;
2973
    tU32 end_time;
2974
    tU32 flip_period;
2975
} tPed_gib;
2976
 
2977
typedef struct tPed_gib_materials {
2978
    int count;
2979
    br_material* materials[5];
2980
} tPed_gib_materials;
2981
 
2982
typedef struct tProximity_ray {
2983
    tCar_spec* car;
2984
    tPedestrian_data* ped;
2985
    tU32 start_time;
2986
} tProximity_ray;
2987
 
2988
typedef struct tPiped_registration_snapshot {
2989
    int piped_actors_count;
2990
    int piped_models_count;
2991
    int piped_materials_count;
2992
    int piped_pixelmaps_count;
2993
} tPiped_registration_snapshot;
2994
 
2995
typedef struct tHeadup_icon {
2996
    tPowerup* powerup;
2997
    int fizzle_stage;
2998
    int fizzle_direction;
2999
    tU32 fizzle_start;
3000
} tHeadup_icon;
3001
 
3002
typedef struct tPrat_flic_spec {
3003
    char* data;
3004
    tU32 data_length;
3005
} tPrat_flic_spec;
3006
 
3007
typedef struct tPrat_alternative {
3008
    int ref;
3009
    int chance;
3010
    int number_of_sounds;
3011
    int sound_ids[8];
3012
    int sound_chance;
3013
} tPrat_alternative;
3014
 
3015
typedef struct tPrat_flic_chunk {
3016
    int number_of_alternatives;
3017
    tPrat_alternative alternatives[6];
3018
} tPrat_flic_chunk;
3019
 
3020
typedef struct tPrat_sequence {
3021
    int number_of_chunks;
3022
    int precedence;
3023
    int repeat_chunk;
3024
    tPrat_flic_chunk chunks[6];
3025
} tPrat_sequence;
3026
 
3027
typedef enum tGrid_draw {
3028
    eGrid_draw_none = 0,
3029
    eGrid_draw_icons_only = 1,
3030
    eGrid_draw_all = 2
3031
} tGrid_draw;
3032
 
3033
typedef enum tNet_synch_mode {
3034
    eNet_synch_host_first = 0,
3035
    eNet_synch_host_subsequent = 1,
3036
    eNet_synch_client = 2
3037
} tNet_synch_mode;
3038
typedef struct tWreck_info {
3039
    br_actor* actor;
3040
    br_matrix34 rotation;
3041
    br_matrix34 original_matrix;
3042
    int customised;
3043
    int car_index;
3044
    float pos_x;
3045
    float pos_y;
3046
    tVehicle_type car_type;
3047
    br_scalar scaling_factor;
3048
} tWreck_info;
3049
 
3050
typedef struct tRectangle {
3051
    int left;
3052
    int top;
3053
    int right;
3054
    int bottom;
3055
} tRectangle;
3056
 
3057
typedef struct tSkid {
3058
    br_actor* actor;
3059
    br_vector3 normal;
3060
    br_vector3 pos;
3061
} tSkid;
3062
 
3063
typedef struct tSpark {
3064
    int count;
3065
    br_vector3 pos;
3066
    br_vector3 v;
3067
    br_vector3 length;
3068
    br_vector3 normal;
3069
    tU32 time_sync;
3070
    tCar_spec* car;
3071
    tU8 colour;
3072
} tSpark;
3073
 
3074
typedef struct tShrapnel {
3075
    br_actor* actor;
3076
    br_vector3 v;
3077
    tU32 time_sync;
3078
    tU32 age;
3079
    br_scalar shear1;
3080
    br_scalar shear2;
3081
    br_vector3 axis;
3082
} tShrapnel;
3083
 
3084
typedef struct tSmoke {
3085
    tU32 time_sync;
3086
    br_vector3 pos;
3087
    br_vector3 v;
3088
    br_scalar radius;
3089
    br_scalar strength;
3090
    br_scalar decay_factor;
3091
    tU8 type;
3092
    tU8 pipe_me;
3093
} tSmoke;
3094
 
3095
typedef struct tSmoke_column {
3096
    tCar_spec* car;
3097
    tU32 time;
3098
    tU32 lifetime;
3099
    tU32 count;
3100
    int colour;
3101
    int whiter;
3102
    br_actor* flame_actor;
3103
    int frame_count[3];
3104
    br_vector3 pos;
3105
    br_scalar scale_x[3];
3106
    br_scalar scale_y[3];
3107
    br_scalar offset_x[3];
3108
    br_scalar offset_z[3];
3109
    tU32 smudge_timer;
3110
    int vertex_index;
3111
    int upright;
3112
 
3113
#ifdef DETHRACE_FIX_BUGS
3114
    // Flames textures are animated per frame. At higher FPS, this happens too quickly
3115
    br_scalar frame_time[3];
3116
#endif
3117
} tSmoke_column;
3118
 
3119
typedef struct tSplash {
3120
    br_actor* actor;
3121
    br_vector3 v;
3122
    int just_done;
3123
    br_scalar size;
3124
    br_scalar scale_x;
3125
} tSplash;
3126
 
3127
typedef struct tBRender_smoke {
3128
    br_vector3 pos;
3129
    br_scalar r;
3130
    br_scalar strength;
3131
    br_colour col;
3132
    br_scalar aspect;
3133
} tBRender_smoke;
3134
 
3135
typedef struct tRGB_colour {
3136
    int red;
3137
    int green;
3138
    int blue;
3139
} tRGB_colour;
3140
 
3141
#ifdef DETHRACE_FIX_BUGS
3142
typedef br_material* tPMFMCB(br_model*, tU16);
3143
#else
3144
typedef br_material** tPMFMCB(br_model*, tU16);
3145
#endif
3146
 
3147
typedef enum tMatrix_mod_type {
3148
    eMatrix_mod_none = -1,
3149
    eMatrix_mod_spin = 0,
3150
    eMatrix_mod_rock = 1,
3151
    eMatrix_mod_throb = 2,
3152
    eMatrix_mod_slither = 3,
3153
    eMatrix_mod_roll = 4
3154
} tMatrix_mod_type;
3155
 
3156
typedef enum tTexture_animation_type {
3157
    eTexture_animation_none = -1,
3158
    eTexture_animation_frames = 0,
3159
    eTexture_animation_flic = 1
3160
} tTexture_animation_type;
3161
 
3162
typedef enum tMove_mode {
3163
    eMove_none = -1,
3164
    eMove_linear = 0,
3165
    eMove_harmonic = 1,
3166
    eMove_flash = 2,
3167
    eMove_controlled = 3,
3168
    eMove_absolute = 4,
3169
    eMove_continuous = 5
3170
} tMove_mode;
3171
 
3172
typedef enum tFunk_trigger_mode {
3173
    eFunk_mode_constant = 0,
3174
    eFunk_mode_distance = 1,
3175
    eFunk_mode_last_lap_only = 2,
3176
    eFunk_mode_all_laps_but_last = 3
3177
} tFunk_trigger_mode;
3178
 
3179
typedef enum tGroove_trigger_mode {
3180
    eGroove_mode_constant = 0,
3181
    eGroove_mode_distance = 1
3182
} tGroove_trigger_mode;
3183
 
3184
typedef enum tGroove_path_mode {
3185
    eGroove_path_none = -1,
3186
    eGroove_path_straight = 0,
3187
    eGroove_path_circular = 1
3188
} tGroove_path_mode;
3189
 
3190
typedef enum tGroove_object_mode {
3191
    eGroove_object_none = -1,
3192
    eGroove_object_spin = 0,
3193
    eGroove_object_rock = 1,
3194
    eGroove_object_throb = 2,
3195
    eGroove_object_shear = 3
3196
} tGroove_object_mode;
3197
 
3198
typedef enum tGroove_axis_mode {
3199
    eGroove_axis_x = 0,
3200
    eGroove_axis_y = 1,
3201
    eGroove_axis_z = 2
3202
} tGroove_axis_mode;
3203
 
3204
typedef enum tAnimation_time_mode {
3205
    eTime_mode_approximate = 0,
3206
    eTime_mode_accurate = 1
3207
} tAnimation_time_mode;
3208
 
3209
typedef enum tInterrupt_status {
3210
    eInterrupt_none = 0,
3211
    eInterrupt_less_than = 1,
3212
    eInterrupt_greater_than = 2
3213
} tInterrupt_status;
3214
 
3215
typedef enum tRotate_mode {
3216
    eRotate_mode_x = 0,
3217
    eRotate_mode_y = 1,
3218
    eRotate_mode_z = 2
3219
} tRotate_mode;
3220
 
3221
typedef enum tScale_mode {
3222
    eScale_mode_all = 0,
3223
    eScale_mode_x = 1,
3224
    eScale_mode_y = 2,
3225
    eScale_mode_z = 3
3226
} tScale_mode;
3227
 
3228
typedef struct tFunkotronic_spec {                  // size: 0xd8
3229
    int owner;                                      // @0x0
3230
    br_material* material;                          // @0x4
3231
    tFunk_trigger_mode mode;                        // @0x8
3232
    tMatrix_mod_type matrix_mod_type;               // @0xc
3233
    tMove_mode matrix_mode;                         // @0x10
3234
    union {                                         // size: 0x18
3235
        struct {                                    // size: 0x4
3236
            float period;                           // @0x0
3237
        } spin_info;                                // @0x0
3238
        struct {                                    // size: 0x10
3239
            float period;                           // @0x0
3240
            br_scalar x_centre;                     // @0x4
3241
            br_scalar y_centre;                     // @0x8
3242
            float rock_angle;                       // @0xc
3243
        } rock_info;                                // @0x0
3244
        struct {                                    // size: 0x18
3245
            float x_period;                         // @0x0
3246
            float y_period;                         // @0x4
3247
            br_scalar x_centre;                     // @0x8
3248
            br_scalar y_centre;                     // @0xc
3249
            float x_magnitude;                      // @0x10
3250
            float y_magnitude;                      // @0x14
3251
        } throb_info;                               // @0x0
3252
        struct {                                    // size: 0x10
3253
            float x_period;                         // @0x0
3254
            float y_period;                         // @0x4
3255
            float x_magnitude;                      // @0x8
3256
            float y_magnitude;                      // @0xc
3257
        } slither_info;                             // @0x0
3258
        struct {                                    // size: 0x8
3259
            float x_period;                         // @0x0
3260
            float y_period;                         // @0x4
3261
        } roll_info;                                // @0x0
3262
    } matrix_mod_data;                              // @0x14
3263
    tMove_mode lighting_animation_type;             // @0x2c
3264
    float lighting_animation_period;                // @0x30
3265
    float ambient_base;                             // @0x34
3266
    float ambient_delta;                            // @0x38
3267
    float direct_base;                              // @0x3c
3268
    float direct_delta;                             // @0x40
3269
    float specular_base;                            // @0x44
3270
    float specular_delta;                           // @0x48
3271
    tTexture_animation_type texture_animation_type; // @0x4c
3272
    tAnimation_time_mode time_mode;                 // @0x50
3273
    float last_frame;                               // @0x54
3274
    union {                                         // size: 0x78
3275
        struct {                                    // size: 0x30
3276
            tMove_mode mode;                        // @0x0
3277
            float period;                           // @0x4
3278
            int texture_count;                      // @0x8
3279
            int current_frame;                      // @0xc
3280
            br_pixelmap* textures[8];               // @0x10
3281
        } frames_info;                              // @0x0
3282
        struct {                                    // size: 0x78
3283
            tU8* flic_data;                         // @0x0
3284
            tU32 flic_data_length;                  // @0x4
3285
            tFlic_descriptor flic_descriptor;       // @0x8
3286
        } flic_info;                                // @0x0
3287
    } texture_animation_data;                       // @0x58
3288
    int proximity_count;                            // @0xd0
3289
    br_vector3* proximity_array;                    // @0xd4
3290
} tFunkotronic_spec;
3291
 
3292
typedef struct tGroovidelic_spec {             // size: 0x80
3293
    int owner;                                 // @0x0
3294
    int done_this_frame;                       // @0x4
3295
    br_actor* actor;                           // @0x8
3296
    tLollipop_mode lollipop_mode;              // @0xc
3297
    tGroove_trigger_mode mode;                 // @0x10
3298
    tGroove_path_mode path_type;               // @0x14
3299
    tMove_mode path_mode;                      // @0x18
3300
    tInterrupt_status path_interrupt_status;   // @0x1c
3301
    float path_resumption_value;               // @0x20
3302
    union {                                    // size: 0x1c
3303
        struct {                               // size: 0x1c
3304
            float period;                      // @0x0
3305
            float x_delta;                     // @0x4
3306
            float y_delta;                     // @0x8
3307
            float z_delta;                     // @0xc
3308
            br_vector3 centre;                 // @0x10
3309
        } straight_info;                       // @0x0
3310
        struct {                               // size: 0x18
3311
            float period;                      // @0x0
3312
            float radius;                      // @0x4
3313
            br_vector3 centre;                 // @0x8
3314
            tGroove_axis_mode axis;            // @0x14
3315
        } circular_info;                       // @0x0
3316
    } path_data;                               // @0x24
3317
    br_vector3 object_centre;                  // @0x40
3318
    br_vector3 object_position;                // @0x4c
3319
    tGroove_object_mode object_type;           // @0x58
3320
    tMove_mode object_mode;                    // @0x5c
3321
    tInterrupt_status object_interrupt_status; // @0x60
3322
    float object_resumption_value;             // @0x64
3323
    union {                                    // size: 0x18
3324
        struct {                               // size: 0x8
3325
            float period;                      // @0x0
3326
            tGroove_axis_mode axis;            // @0x4
3327
        } spin_info;                           // @0x0
3328
        struct {                               // size: 0x10
3329
            float period;                      // @0x0
3330
            float max_angle;                   // @0x4
3331
            float current_angle;               // @0x8
3332
            tGroove_axis_mode axis;            // @0xc
3333
        } rock_info;                           // @0x0
3334
        struct {                               // size: 0x18
3335
            float x_period;                    // @0x0
3336
            float y_period;                    // @0x4
3337
            float z_period;                    // @0x8
3338
            float x_magnitude;                 // @0xc
3339
            float y_magnitude;                 // @0x10
3340
            float z_magnitude;                 // @0x14
3341
        } throb_info;                          // @0x0
3342
        struct {                               // size: 0x18
3343
            float x_period;                    // @0x0
3344
            float y_period;                    // @0x4
3345
            float z_period;                    // @0x8
3346
            float x_magnitude;                 // @0xc
3347
            float y_magnitude;                 // @0x10
3348
            float z_magnitude;                 // @0x14
3349
        } shear_info;                          // @0x0
3350
    } object_data;                             // @0x68
3351
} tGroovidelic_spec;
3352
 
3353
typedef struct tMem_info {
3354
    unsigned int largest_block_avail;
3355
    unsigned int max_unlocked_page;
3356
    unsigned int largest_lockable_page;
3357
    unsigned int lin_addr_space;
3358
    unsigned int num_free_pages_avail;
3359
    unsigned int num_physical_pages_free;
3360
    unsigned int total_physical_pages;
3361
    unsigned int free_lin_addr_space;
3362
    unsigned int size_of_page_file;
3363
    unsigned int reserved[3];
3364
} tMem_info;
3365
 
3366
typedef struct tIPX_netnum {
3367
    unsigned char bNetwork[4];
3368
} tIPX_netnum;
3369
 
3370
#endif