Rev 1 | Go to most recent revision | 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 | |||
4 | #include "constants.h" |
||
5 | #include "macros.h" |
||
6 | |||
18 | pmbaty | 7 | #include "brender.h" |
1 | pmbaty | 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 | |||
18 | pmbaty | 476 | typedef struct tCar_controls { // size: 0x4 |
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 | |||
18 | pmbaty | 493 | typedef struct tNet_message_mechanics_info { // size: 0x84 |
494 | tU8 contents_size; // @0x0 |
||
495 | tNet_message_type type; // @0x1 |
||
496 | tU32 ID; // @0x4 |
||
497 | tU32 time; // @0x8 |
||
498 | tReduced_matrix mat; // @0xc |
||
499 | br_vector3 v; // @0x30 |
||
500 | br_vector3 omega; // @0x3c |
||
501 | tU8 d[4]; // @0x48 |
||
502 | tCar_controls keys; // @0x4c |
||
503 | tU32 cc_coll_time; // @0x50 |
||
504 | tS16 curvature; // @0x54 |
||
505 | tU16 revs; // @0x56 |
||
506 | br_scalar front; // @0x58 |
||
507 | br_scalar back; // @0x5c |
||
508 | tU32 repair_time; // @0x60 |
||
509 | tU8 damage[12]; // @0x64 |
||
510 | tU16 powerups; // @0x70 |
||
511 | br_scalar wheel_dam_offset[4]; // @0x74 |
||
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 | |||
18 | pmbaty | 1036 | #pragma pack(push, 4) |
1 | pmbaty | 1037 | typedef struct tNet_game_player_info { // size: 0xc0 |
1038 | tPD_net_player_info pd_net_info; // @0x0 |
||
1039 | tU32 this_players_time_stamp; // @0x10 |
||
1040 | tU32 last_heard_from_him; // @0x14 |
||
1041 | tU32 reposition_time; // @0x18 |
||
1042 | tU32 last_waste_message; // @0x1c |
||
1043 | int host; // @0x20 |
||
1044 | tPlayer_ID ID; // @0x24 |
||
1045 | char player_name[32]; // @0x28 |
||
1046 | tPlayer_status player_status; // @0x48 |
||
1047 | int car_index; // @0x4c |
||
1048 | int grid_index; // @0x50 |
||
1049 | int grid_position_set; // @0x54 |
||
1050 | int opponent_list_index; // @0x58 |
||
1051 | int awaiting_confirmation; // @0x5c |
||
1052 | int score; // @0x60 |
||
1053 | int credits; // @0x64 |
||
1054 | int wasted; // @0x68 |
||
1055 | int wasteage_attributed; // @0x6c |
||
1056 | int name_not_clipped; // @0x70 |
||
1057 | int race_stuff_initialised; // @0x74 |
||
1058 | int played; // @0x78 |
||
1059 | int won; // @0x7c |
||
1060 | int next_car_index; // @0x80 |
||
1061 | int games_score; // @0x84 |
||
1062 | int last_score_index; // @0x88 |
||
1063 | br_matrix34 initial_position; // @0x8c |
||
1064 | tCar_spec* car; // @0xbc |
||
1065 | } tNet_game_player_info; |
||
18 | pmbaty | 1066 | #pragma pack(pop) |
1 | pmbaty | 1067 | |
1068 | typedef struct tNet_game_options { // size: 0x30 |
||
1069 | int show_players_on_map; // @0x0 |
||
1070 | int show_peds_on_map; // @0x4 |
||
1071 | int enable_text_messages; // @0x8 |
||
1072 | int show_powerups_on_map; // @0xc |
||
1073 | int powerup_respawn; // @0x10 |
||
1074 | int open_game; // @0x14 |
||
1075 | int starting_money_index; // @0x18 |
||
1076 | int grid_start; // @0x1c |
||
1077 | int race_end_target; // @0x20 |
||
1078 | int random_car_choice; // @0x24 |
||
1079 | tNet_sequence_type race_sequence_type; // @0x28 |
||
1080 | tCar_choice car_choice; // @0x2c |
||
1081 | } tNet_game_options; |
||
1082 | |||
1083 | typedef struct tNet_game_status { // size: 0x4 |
||
1084 | tNet_game_stage stage; // @0x0 |
||
1085 | } tNet_game_status; |
||
1086 | |||
1087 | typedef struct tNet_game_details { // size: 0x78 |
||
1088 | tPD_net_player_info pd_net_info; // @0x0 |
||
1089 | char host_name[32]; // @0x10 |
||
1090 | tPlayer_ID host_ID; // @0x30 |
||
1091 | int num_players; // @0x34 |
||
1092 | int start_race; // @0x38 |
||
1093 | int no_races_yet; // @0x3c |
||
1094 | tNet_game_status status; // @0x40 |
||
1095 | tNet_game_options options; // @0x44 |
||
1096 | tNet_game_type type; // @0x74 |
||
1097 | } tNet_game_details; |
||
1098 | |||
1099 | typedef struct tNet_message_send_me_details { |
||
1100 | tU8 contents_size; |
||
1101 | tNet_message_type type; |
||
1102 | } tNet_message_send_me_details; |
||
1103 | |||
1104 | typedef struct tNet_message_my_details { |
||
1105 | tU8 contents_size; |
||
1106 | tNet_message_type type; |
||
1107 | tNet_game_details details; |
||
1108 | } tNet_message_my_details; |
||
1109 | |||
1110 | typedef struct tNet_message_join { |
||
1111 | tU8 contents_size; |
||
1112 | tNet_message_type type; |
||
1113 | tNet_game_player_info player_info; |
||
1114 | } tNet_message_join; |
||
1115 | |||
1116 | typedef struct tNet_message_leave { |
||
1117 | tU8 contents_size; |
||
1118 | tNet_message_type type; |
||
1119 | } tNet_message_leave; |
||
1120 | |||
1121 | typedef struct tNet_message_host_pissing_off { |
||
1122 | tU8 contents_size; |
||
1123 | tNet_message_type type; |
||
1124 | } tNet_message_host_pissing_off; |
||
1125 | |||
1126 | typedef struct tNet_message_new_player_list { |
||
1127 | tU8 contents_size; |
||
1128 | tNet_message_type type; |
||
1129 | int number_of_players; |
||
1130 | int this_index; |
||
1131 | int batch_number; |
||
1132 | tNet_game_player_info player; |
||
1133 | } tNet_message_new_player_list; |
||
1134 | |||
1135 | typedef struct tNet_message_race_over { |
||
1136 | tU8 contents_size; |
||
1137 | tNet_message_type type; |
||
1138 | tRace_over_reason reason; |
||
1139 | } tNet_message_race_over; |
||
1140 | |||
1141 | typedef struct tNet_message_status_report { |
||
1142 | tU8 contents_size; |
||
1143 | tNet_message_type type; |
||
1144 | tPlayer_status status; |
||
1145 | } tNet_message_status_report; |
||
1146 | |||
1147 | typedef struct tGrid_spec { |
||
1148 | int index; |
||
1149 | int next_car_index; |
||
1150 | br_matrix34 mat; |
||
1151 | } tGrid_spec; |
||
1152 | |||
1153 | typedef struct tNet_message_start_race { |
||
1154 | tU8 contents_size; |
||
1155 | tNet_message_type type; |
||
1156 | int car_count; |
||
1157 | int racing; |
||
1158 | int next_race; |
||
1159 | tGrid_spec car_list[6]; |
||
1160 | } tNet_message_start_race; |
||
1161 | |||
1162 | typedef struct tNet_message_guarantee_reply { |
||
1163 | tU8 contents_size; |
||
1164 | tNet_message_type type; |
||
1165 | tU32 guarantee_number; |
||
1166 | } tNet_message_guarantee_reply; |
||
1167 | |||
1168 | typedef struct tNet_message_headup { |
||
1169 | tU8 contents_size; |
||
1170 | tNet_message_type type; |
||
1171 | char text[128]; |
||
1172 | } tNet_message_headup; |
||
1173 | |||
1174 | typedef struct tNet_message_host_query { |
||
1175 | tU8 contents_size; |
||
1176 | tNet_message_type type; |
||
1177 | } tNet_message_host_query; |
||
1178 | |||
1179 | typedef struct tNet_message_host_reply { |
||
1180 | tU8 contents_size; |
||
1181 | tNet_message_type type; |
||
1182 | int race_has_started; |
||
1183 | int race_index; |
||
1184 | int pending_race; |
||
1185 | } tNet_message_host_reply; |
||
1186 | |||
1187 | typedef struct tNet_message_cop_info { |
||
1188 | tU8 contents_size; |
||
1189 | tNet_message_type type; |
||
1190 | tU32 ID; |
||
1191 | tU32 time; |
||
1192 | tReduced_matrix mat; |
||
1193 | br_vector3 v; |
||
1194 | br_vector3 omega; |
||
1195 | br_scalar curvature; |
||
1196 | br_scalar d[4]; |
||
1197 | tU8 damage[12]; |
||
1198 | } tNet_message_cop_info; |
||
1199 | |||
1200 | typedef struct tNet_message_non_car_info { |
||
1201 | tU8 contents_size; |
||
1202 | tNet_message_type type; |
||
1203 | tU32 ID; |
||
1204 | tU32 time; |
||
1205 | tReduced_matrix mat; |
||
1206 | br_vector3 v; |
||
1207 | br_vector3 omega; |
||
1208 | tU32 cc_coll_time; |
||
1209 | tU16 flags; |
||
1210 | } tNet_message_non_car_info; |
||
1211 | |||
1212 | typedef struct tNet_message_non_car_position { |
||
1213 | tU8 contents_size; |
||
1214 | tNet_message_type type; |
||
1215 | tU32 ID; |
||
1216 | br_matrix34 mat; |
||
1217 | tU16 flags; |
||
1218 | } tNet_message_non_car_position; |
||
1219 | |||
1220 | typedef struct tNet_message_time_sync { |
||
1221 | tU8 contents_size; |
||
1222 | tNet_message_type type; |
||
1223 | int race_start_time; |
||
1224 | } tNet_message_time_sync; |
||
1225 | |||
1226 | typedef struct tNet_message_players_confirm { |
||
1227 | tU8 contents_size; |
||
1228 | tNet_message_type type; |
||
1229 | tPlayer_ID player; |
||
1230 | } tNet_message_players_confirm; |
||
1231 | |||
1232 | typedef struct tNet_message_disable_car { |
||
1233 | tU8 contents_size; |
||
1234 | tNet_message_type type; |
||
1235 | tPlayer_ID player; |
||
1236 | } tNet_message_disable_car; |
||
1237 | |||
1238 | typedef struct tNet_message_enable_car { |
||
1239 | tU8 contents_size; |
||
1240 | tNet_message_type type; |
||
1241 | tPlayer_ID player; |
||
1242 | } tNet_message_enable_car; |
||
1243 | |||
1244 | typedef struct tNet_message_powerup { |
||
1245 | tU8 contents_size; |
||
1246 | tNet_message_type type; |
||
1247 | tPlayer_ID player; |
||
1248 | int powerup_index; |
||
1249 | tU32 time_left; |
||
1250 | tPowerup_event event; |
||
1251 | } tNet_message_powerup; |
||
1252 | |||
1253 | typedef struct tNet_message_recover { |
||
1254 | tU8 contents_size; |
||
1255 | tNet_message_type type; |
||
1256 | tU32 ID; |
||
1257 | int time_to_recover; |
||
1258 | } tNet_message_recover; |
||
1259 | |||
1260 | typedef struct tNet_message_scores { |
||
1261 | tU8 contents_size; |
||
1262 | tNet_message_type type; |
||
1263 | int general_score; |
||
1264 | int scores[6]; |
||
1265 | } tNet_message_scores; |
||
1266 | |||
1267 | typedef struct tNet_message_wasted { |
||
1268 | tU8 contents_size; |
||
1269 | tNet_message_type type; |
||
1270 | tPlayer_ID victim; |
||
1271 | tPlayer_ID culprit; |
||
1272 | } tNet_message_wasted; |
||
1273 | |||
1274 | typedef struct tNet_message_gameplay { |
||
1275 | tU8 contents_size; |
||
1276 | tNet_message_type type; |
||
1277 | tNet_gameplay_mess mess; |
||
1278 | tU32 param_1; |
||
1279 | tU32 param_2; |
||
1280 | tU32 param_3; |
||
1281 | tU32 param_4; |
||
1282 | } tNet_message_gameplay; |
||
1283 | |||
1284 | typedef struct tNet_message_pedestrian { |
||
1285 | tU8 contents_size; |
||
1286 | tNet_message_type type; |
||
1287 | tS8 action_instruction; |
||
1288 | tS8 flags; |
||
1289 | tS16 index; |
||
1290 | br_vector3 pos; |
||
1291 | br_scalar speed; |
||
1292 | br_vector3 to_pos; |
||
1293 | br_vector3 offset; |
||
1294 | tPlayer_ID murderer; |
||
1295 | tU32 respawn_time_or_spin_period; |
||
1296 | tS8 frame; |
||
1297 | } tNet_message_pedestrian; |
||
1298 | |||
1299 | typedef struct tNet_message_car_details_req { |
||
1300 | tU8 contents_size; |
||
1301 | tNet_message_type type; |
||
1302 | } tNet_message_car_details_req; |
||
1303 | |||
1304 | typedef struct tCar_details { |
||
1305 | int car_index; |
||
1306 | char owner[16]; |
||
1307 | } tCar_details; |
||
1308 | |||
1309 | typedef struct tNet_message_car_details { |
||
1310 | tU8 contents_size; |
||
1311 | tNet_message_type type; |
||
1312 | int count; |
||
1313 | tCar_details details[6]; |
||
1314 | } tNet_message_car_details; |
||
1315 | |||
1316 | typedef struct tGame_scores { |
||
1317 | int played; |
||
1318 | int won; |
||
1319 | int score; |
||
1320 | } tGame_scores; |
||
1321 | |||
1322 | typedef struct tNet_message_game_scores { |
||
1323 | tU8 contents_size; |
||
1324 | tNet_message_type type; |
||
1325 | tGame_scores scores[6]; |
||
1326 | } tNet_message_game_scores; |
||
1327 | |||
1328 | typedef struct tNet_message_oil_spill { |
||
1329 | tU8 contents_size; |
||
1330 | tNet_message_type type; |
||
1331 | tPlayer_ID player; |
||
1332 | br_scalar full_size; |
||
1333 | br_scalar grow_rate; |
||
1334 | br_scalar current_size; |
||
1335 | } tNet_message_oil_spill; |
||
1336 | |||
1337 | typedef struct tNet_message_crush_point { |
||
1338 | tU8 contents_size; |
||
1339 | tNet_message_type type; |
||
1340 | tPlayer_ID id; |
||
1341 | tU16 vertex; |
||
1342 | br_vector3 energy_vector; |
||
1343 | } tNet_message_crush_point; |
||
1344 | |||
1345 | typedef union tNet_contents { // size: 0x160 |
||
1346 | struct { // size: 0x2 |
||
1347 | tU8 contents_size; // @0x0 |
||
1348 | tNet_message_type type; // @0x1 |
||
1349 | } header; // @0x0 |
||
1350 | union { // size: 0x160 |
||
1351 | tNet_message_send_me_details send_details; // @0x0 |
||
1352 | tNet_message_my_details details; // @0x0 |
||
1353 | tNet_message_join join; // @0x0 |
||
1354 | tNet_message_leave leave; // @0x0 |
||
1355 | tNet_message_host_pissing_off hosticide; // @0x0 |
||
1356 | tNet_message_new_player_list player_list; // @0x0 |
||
1357 | tNet_message_race_over race_over; // @0x0 |
||
1358 | tNet_message_status_report report; // @0x0 |
||
1359 | tNet_message_start_race start_race; // @0x0 |
||
1360 | tNet_message_guarantee_reply reply; // @0x0 |
||
1361 | tNet_message_headup headup; // @0x0 |
||
1362 | tNet_message_host_query where_we_at; // @0x0 |
||
1363 | tNet_message_host_reply heres_where_we_at; // @0x0 |
||
1364 | tNet_message_mechanics_info mech; // @0x0 |
||
1365 | tNet_message_non_car_info non_car; // @0x0 |
||
1366 | tNet_message_time_sync time_sync; // @0x0 |
||
1367 | tNet_message_players_confirm confirm; // @0x0 |
||
1368 | tNet_message_disable_car disable_car; // @0x0 |
||
1369 | tNet_message_enable_car enabled_car; // @0x0 |
||
1370 | tNet_message_powerup powerup; // @0x0 |
||
1371 | tNet_message_recover recover; // @0x0 |
||
1372 | tNet_message_scores scores; // @0x0 |
||
1373 | tNet_message_wasted wasted; // @0x0 |
||
1374 | tNet_message_pedestrian pedestrian; // @0x0 |
||
1375 | tNet_message_gameplay gameplay; // @0x0 |
||
1376 | tNet_message_non_car_position non_car_position; // @0x0 |
||
1377 | tNet_message_cop_info cop_info; // @0x0 |
||
1378 | tNet_message_car_details_req car_details_req; // @0x0 |
||
1379 | tNet_message_car_details car_details; // @0x0 |
||
1380 | tNet_message_game_scores game_scores; // @0x0 |
||
1381 | tNet_message_oil_spill oil_spill; // @0x0 |
||
1382 | tNet_message_crush_point crush; // @0x0 |
||
1383 | } data; // @0x0 |
||
1384 | } tNet_contents; |
||
1385 | |||
1386 | typedef struct tNet_message { // size: 0x17c |
||
1387 | tU32 pd_stuff_so_DO_NOT_USE; // @0x0 |
||
1388 | tU32 magic_number; // @0x4 |
||
1389 | tU32 guarantee_number; // @0x8 |
||
1390 | tPlayer_ID sender; // @0xc |
||
1391 | int version; // @0x10 |
||
1392 | tU32 senders_time_stamp; // @0x14 |
||
1393 | tU16 num_contents; // @0x18 |
||
1394 | tU16 overall_size; // @0x1a |
||
1395 | tNet_contents contents; // @0x1c |
||
1396 | } tNet_message; |
||
1397 | |||
1398 | typedef struct tCar_detail_info { |
||
1399 | tCar_detail_ownership ownership; |
||
1400 | char name[16]; |
||
1401 | } tCar_detail_info; |
||
1402 | |||
1403 | typedef struct tWav_header { |
||
1404 | char quote_RIFF[4]; |
||
1405 | tU32 format_length; |
||
1406 | tU8 wave[4]; |
||
1407 | tU8 fmt[4]; |
||
1408 | tU32 wave_format_length; |
||
1409 | tU16 format_tag; |
||
1410 | tU16 channels; |
||
1411 | tU32 samples_per_sec; |
||
1412 | tU32 avg_bytes_per_sec; |
||
1413 | tU16 block_align; |
||
1414 | tU16 bits_per_sample; |
||
1415 | tU8 data[4]; |
||
1416 | tU32 data_length; |
||
1417 | } tWav_header; |
||
1418 | |||
1419 | typedef struct tPowerup { |
||
1420 | tPowerup_type type; |
||
1421 | tU32 got_time; |
||
1422 | tU32 duration; |
||
1423 | tU32 lose_time; |
||
1424 | tU16 group_inclusion; |
||
1425 | br_pixelmap* icon; |
||
1426 | int fizzle_type; |
||
1427 | int number_of_float_params; |
||
1428 | int number_of_integer_params; |
||
1429 | int* integer_params; |
||
1430 | int current_value; |
||
1431 | int prat_cam_event; |
||
1432 | tNet_powerup_type net_type; |
||
1433 | tGot_proc* got_proc; |
||
1434 | tLose_proc* lose_proc; |
||
1435 | tPeriodic_proc* periodic_proc; |
||
1436 | float* float_params; |
||
1437 | tCar_spec* car; |
||
1438 | char message[64]; |
||
1439 | } tPowerup; |
||
1440 | |||
1441 | typedef struct tDepth_effect { |
||
1442 | tDepth_effect_type type; |
||
1443 | int start; |
||
1444 | int end; |
||
1445 | br_pixelmap* sky_texture; |
||
1446 | } tDepth_effect; |
||
1447 | |||
1448 | typedef struct tPlane_spec { |
||
1449 | tPlane_type plane_type; |
||
1450 | br_fvector3 n; |
||
1451 | br_scalar d; |
||
1452 | } tPlane_spec; |
||
1453 | |||
1454 | typedef struct tMaterial_modifiers { |
||
1455 | br_scalar car_wall_friction; |
||
1456 | br_scalar tyre_road_friction; |
||
1457 | br_scalar down_force; |
||
1458 | br_scalar bumpiness; |
||
1459 | int tyre_noise_index; |
||
1460 | int crash_noise_index; |
||
1461 | int scrape_noise_index; |
||
1462 | br_scalar sparkiness; |
||
1463 | int smoke_type; |
||
1464 | br_material* skid_mark_material; |
||
1465 | } tMaterial_modifiers; |
||
1466 | |||
1467 | typedef struct tSpecial_screen { |
||
1468 | br_material* material; |
||
1469 | br_scalar min_x; |
||
1470 | br_scalar min_z; |
||
1471 | br_scalar max_x; |
||
1472 | br_scalar max_z; |
||
1473 | } tSpecial_screen; |
||
1474 | |||
1475 | typedef struct tRace_list_spec { |
||
1476 | char name[32]; |
||
1477 | int rank_required; |
||
1478 | int best_rank; |
||
1479 | int suggested_rank; |
||
1480 | int been_there_done_that; |
||
1481 | } tRace_list_spec; |
||
1482 | |||
1483 | typedef struct tRace_save_info { |
||
1484 | tU32 been_there_done_that; |
||
1485 | } tRace_save_info; |
||
1486 | |||
1487 | typedef struct tGraf_spec { |
||
1488 | int depth_bits; |
||
1489 | int depth_bytes; |
||
1490 | int doubled; |
||
1491 | int total_width; |
||
1492 | int total_height; |
||
1493 | long black_value; |
||
1494 | int colour_index; |
||
1495 | char* data_dir_name; |
||
1496 | char* gfx_init_string; |
||
1497 | int row_bytes; |
||
1498 | int phys_width; |
||
1499 | int phys_height; |
||
1500 | void* base_addr; |
||
1501 | } tGraf_spec; |
||
1502 | |||
18 | pmbaty | 1503 | typedef struct tCollision_info { // size: 0x33c |
1504 | int index; // @0x0 |
||
1505 | int disabled; // @0x4 |
||
1506 | tDriver driver; // @0x8 |
||
1507 | br_actor* car_master_actor; // @0xc |
||
1508 | br_scalar min_torque_squared; // @0x10 |
||
1509 | br_scalar break_off_radians_squared; // @0x14 |
||
1510 | br_vector3 v; // @0x18 |
||
1511 | br_vector3 old_v; // @0x24 |
||
1512 | br_vector3 velocity_car_space; // @0x30 |
||
1513 | br_matrix34 oldmat; // @0x3c |
||
1514 | br_matrix34 old_frame_mat; // @0x6c |
||
1515 | br_vector3 pos; // @0x9c |
||
1516 | br_vector3 omega; // @0xa8 |
||
1517 | br_vector3 oldomega; // @0xb4 |
||
1518 | br_scalar M; // @0xc0 |
||
1519 | int infinite_mass; // @0xc4 |
||
1520 | br_vector3 I; // @0xc8 |
||
1521 | br_vector3 cmpos; // @0xd4 |
||
1522 | int extra_point_num; // @0xe0 |
||
1523 | br_bounds bounds[3]; // @0xe4 |
||
1524 | br_bounds max_bounds[2]; // @0x12c |
||
1525 | br_vector3 extra_points[6]; // @0x15c |
||
1526 | br_scalar original_extra_points_z[6]; // @0x1a4 |
||
1527 | br_vector3 old_point; // @0x1bc |
||
1528 | br_vector3 old_norm; // @0x1c8 |
||
1529 | int box_face_start; // @0x1d4 |
||
1530 | int box_face_end; // @0x1d8 |
||
1531 | int box_face_ref; // @0x1dc |
||
1532 | br_matrix34 last_box_inv_mat; // @0x1e0 |
||
1533 | br_bounds last_box; // @0x210 |
||
1534 | int doing_nothing_flag; // @0x228 |
||
1535 | tSpecial_volume* last_special_volume; // @0x22c |
||
1536 | tSpecial_volume* auto_special_volume; // @0x230 |
||
1537 | int frame_collision_flag; // @0x234 |
||
1538 | int collision_flag; // @0x238 |
||
1539 | int max_shrapnel_material; // @0x23c |
||
1540 | br_vector3 direction; // @0x240 |
||
1541 | float speed; // @0x24c |
||
1542 | tU16 car_ID; // @0x250 |
||
1543 | br_material* shrapnel_material[3]; // @0x254 |
||
1544 | br_bounds bounds_world_space; // @0x260 |
||
1545 | tBounds_type bounds_ws_type; // @0x278 |
||
1546 | tU16 fire_vertex[12]; // @0x27c |
||
1547 | tU16 num_smoke_columns; // @0x294 |
||
1548 | br_vector3 water_normal; // @0x298 |
||
1549 | br_scalar water_d; // @0x2a4 |
||
1550 | br_scalar water_depth_factor; // @0x2a8 |
||
1551 | tNet_message_mechanics_info message; // @0x2ac |
||
1552 | tU32 last_car_car_collision; // @0x330 |
||
1553 | br_scalar dt; // @0x334 |
||
1554 | tCar_spec* who_last_hit_me; // @0x338 |
||
1 | pmbaty | 1555 | } tCollision_info; |
1556 | |||
18 | pmbaty | 1557 | typedef struct tNon_car_spec { // size: 0x370 |
1558 | tCollision_info collision_info; // @0x0 |
||
1559 | br_scalar free_mass; // @0x33c |
||
1560 | br_scalar attached_mass; // @0x340 |
||
1561 | br_vector3 free_cmpos; // @0x344 |
||
1562 | br_vector3 attached_cmpos; // @0x350 |
||
1563 | br_scalar min_torque_squared; // @0x35c |
||
1564 | br_scalar snap_off_cosine; // @0x360 |
||
1565 | br_vector3 I_over_M; // @0x364 |
||
1 | pmbaty | 1566 | } tNon_car_spec; |
1567 | |||
18 | pmbaty | 1568 | typedef struct tOpp_spec { // size: 0x10 |
1569 | int index; // @0x0 |
||
1570 | int ranking; // @0x4 |
||
1571 | int net_player_index; // @0x8 |
||
1572 | tCar_spec* car_spec; // @0xc |
||
1 | pmbaty | 1573 | } tOpp_spec; |
1574 | |||
1575 | typedef struct tCheckpoint { |
||
1576 | int time_value[3]; |
||
1577 | int quad_count; |
||
1578 | br_vector3 vertices[4][4]; |
||
1579 | br_vector3 normal[4]; |
||
1580 | int map_left[2]; |
||
1581 | int map_top[2]; |
||
1582 | int map_right[2]; |
||
1583 | int map_bottom[2]; |
||
1584 | } tCheckpoint; |
||
1585 | |||
1586 | typedef struct tNet_starts { |
||
1587 | br_vector3 pos; |
||
1588 | br_scalar yaw; |
||
1589 | } tNet_starts; |
||
1590 | |||
1591 | typedef struct tText_chunk { |
||
1592 | int frame_cue; |
||
1593 | int frame_end; |
||
1594 | int x_coord; |
||
1595 | int y_coord; |
||
1596 | int line_count; |
||
1597 | char* text[8]; |
||
1598 | } tText_chunk; |
||
1599 | |||
1600 | typedef struct tRace_info { |
||
1601 | char name[32]; |
||
1602 | char track_file_name[14]; |
||
1603 | int rank_required; |
||
1604 | int best_rank; |
||
1605 | int suggested_rank; |
||
1606 | int total_laps; |
||
1607 | int check_point_count; |
||
1608 | int initial_timer[3]; |
||
1609 | int bonus_score[8][3]; |
||
1610 | int number_of_racers; |
||
1611 | int number_of_net_start_points; |
||
1612 | int text_chunk_count; |
||
1613 | tNet_starts net_starts[24]; |
||
1614 | tCheckpoint checkpoints[10]; |
||
1615 | tOpp_spec opponent_list[30]; |
||
1616 | tU8* scene_image_data; |
||
1617 | tU8* map_image_data; |
||
1618 | tU8* info_image_data; |
||
1619 | tU32 scene_image_data_length; |
||
1620 | tU32 map_image_data_length; |
||
1621 | tU32 info_image_data_length; |
||
1622 | br_vector3 initial_position; |
||
1623 | br_scalar initial_yaw; |
||
1624 | br_pixelmap* map_image; |
||
1625 | br_matrix34 map_transformation; |
||
1626 | tText_chunk* text_chunks; |
||
1627 | tMaterial_modifiers material_modifiers[11]; |
||
1628 | } tRace_info; |
||
1629 | |||
1630 | typedef struct tOpponent_save_info { |
||
1631 | tU32 dead; |
||
1632 | } tOpponent_save_info; |
||
1633 | |||
1634 | typedef struct tOpponent { |
||
1635 | char name[24]; |
||
1636 | char abbrev_name[24]; |
||
1637 | char mug_shot_name[14]; |
||
1638 | char car_file_name[14]; |
||
1639 | char stolen_car_flic_name[14]; |
||
1640 | tU8* mug_shot_image_data; |
||
1641 | tU8* stolen_car_image_data; |
||
1642 | tU32 mug_shot_image_data_length; |
||
1643 | tU32 stolen_car_image_data_length; |
||
1644 | int car_number; |
||
1645 | int strength_rating; |
||
1646 | int picked; |
||
1647 | int dead; |
||
1648 | int text_chunk_count; |
||
1649 | tNet_avail network_availability; |
||
1650 | br_pixelmap* grid_icon_image; |
||
1651 | tOppo_psyche psyche; |
||
1652 | tText_chunk* text_chunks; |
||
1653 | } tOpponent; |
||
1654 | |||
1655 | typedef struct tProgram_state { |
||
1656 | tS32 credits; |
||
1657 | tS32 credits_earned; |
||
1658 | tS32 credits_lost; |
||
1659 | tU32 view_change_start; |
||
1660 | tU32 pratcam_move_start; |
||
1661 | int peds_killed; |
||
1662 | int sausage_eater_mode; |
||
1663 | int rank; |
||
1664 | int loaded; |
||
1665 | int last_slot; |
||
1666 | int skill_level; |
||
1667 | int parts_shop_visited; |
||
1668 | int racing; |
||
1669 | int cut_scene; |
||
1670 | int saving; |
||
1671 | int loading; |
||
1672 | int dont_save_or_load; |
||
1673 | int dont_load; |
||
1674 | int mirror_on; |
||
1675 | int prat_cam_on; |
||
1676 | int cockpit_on; |
||
1677 | int cockpit_image_index; |
||
1678 | int current_render_left; |
||
1679 | int current_render_top; |
||
1680 | int current_render_right; |
||
1681 | int current_render_bottom; |
||
1682 | int frame_rate_headup; |
||
1683 | int revs; |
||
1684 | int music_volume; |
||
1685 | int effects_volume; |
||
1686 | int current_race_index; |
||
1687 | int redo_race_index; |
||
1688 | int credits_per_rank; |
||
1689 | int game_completed; |
||
1690 | int number_of_cars; |
||
1691 | int current_car_index; |
||
1692 | tWhich_view which_view; |
||
1693 | tWhich_view new_view; |
||
1694 | tWhich_view pending_view; |
||
1695 | tWhich_view old_view; |
||
1696 | tRace_sel_view_type view_type; |
||
1697 | tProg_status prog_status; |
||
1698 | tFrank_anne frank_or_anniness; |
||
1699 | tAuto_parts_reply auto_parts_reply; |
||
1700 | tCar_spec current_car; |
||
1701 | char player_name[2][14]; |
||
1702 | char track_file_name[14]; |
||
1703 | char car_name[14]; |
||
1704 | int cars_available[60]; |
||
1705 | br_vector3 initial_position; |
||
1706 | br_scalar initial_yaw; |
||
1707 | tTrack_spec track_spec; |
||
1708 | tDepth_effect default_depth_effect; |
||
1709 | tDepth_effect current_depth_effect; |
||
1710 | int special_volume_count; |
||
1711 | tSpecial_volume* special_volumes; |
||
1712 | br_material* standard_screen; |
||
1713 | br_material* standard_screen_dark; |
||
1714 | br_material* standard_screen_fog; |
||
1715 | int special_screens_count; |
||
1716 | tSpecial_screen* special_screens; |
||
1717 | tIntelligent_vehicles AI_vehicles; |
||
1718 | tNon_car_spec* non_cars; |
||
1719 | int num_non_car_spaces; |
||
1720 | } tProgram_state; |
||
1721 | |||
1722 | typedef struct tDR_font { |
||
1723 | br_pixelmap* images; |
||
1724 | int file_read_once; |
||
1725 | int height; |
||
1726 | int width; |
||
1727 | int spacing; |
||
1728 | int offset; |
||
1729 | int num_entries; |
||
1730 | int width_table[224]; |
||
1731 | } tDR_font; |
||
1732 | |||
1733 | typedef struct tGraf_data { |
||
1734 | int width; |
||
1735 | int height; |
||
1736 | int rolling_letter_y_pitch; |
||
1737 | int save_slot_y_offset; |
||
1738 | int rolling_letter_x_pitch; |
||
1739 | int save_slot_x_offset; |
||
1740 | int save_slot_rank_x_offset; |
||
1741 | int save_slot_credits_x_offset; |
||
1742 | int save_slot_height; |
||
1743 | int save_slot_letter_height; |
||
1744 | int save_slot_table[41]; |
||
1745 | int player_name_y; |
||
1746 | int player_name_x[2]; |
||
1747 | int enter_name_x[2]; |
||
1748 | int enter_name_y; |
||
1749 | int frank_panel_left; |
||
1750 | int frank_panel_top; |
||
1751 | int frank_panel_right; |
||
1752 | int frank_panel_bottom; |
||
1753 | int anne_panel_left; |
||
1754 | int anne_panel_top; |
||
1755 | int anne_panel_right; |
||
1756 | int anne_panel_bottom; |
||
1757 | int cock_margin_x; |
||
1758 | int cock_margin_y; |
||
1759 | int total_cock_width; |
||
1760 | int total_cock_height; |
||
1761 | int dial__x[2]; |
||
1762 | int dial__y[2]; |
||
1763 | int dial__x_centre; |
||
1764 | int dial__y_centre; |
||
1765 | int start_race_panel_left; |
||
1766 | int start_race_panel_top; |
||
1767 | int start_race_panel_right; |
||
1768 | int start_race_panel_bottom; |
||
1769 | int start_race_panel_top_clip; |
||
1770 | int start_race_panel_bottom_clip; |
||
1771 | int choose_race_rank_right; |
||
1772 | int choose_race_name_left; |
||
1773 | int choose_race_bullet_left; |
||
1774 | int choose_race_left; |
||
1775 | int choose_race_right; |
||
1776 | int choose_race_y_top; |
||
1777 | int choose_race_y_bottom; |
||
1778 | int choose_race_y_pitch; |
||
1779 | int choose_race_curr_y; |
||
1780 | int choose_race_box_left; |
||
1781 | int choose_race_box_top; |
||
1782 | int choose_race_line_y; |
||
1783 | int choose_race_current_text_x; |
||
1784 | int choose_race_current_text_y; |
||
1785 | int choose_race_current_num_x; |
||
1786 | int grid_x_pitch; |
||
1787 | int grid_y_pitch; |
||
1788 | int grid_x_stagger; |
||
1789 | int grid_left_x; |
||
1790 | int grid_top_y; |
||
1791 | int grid_left_clip; |
||
1792 | int grid_top_clip; |
||
1793 | int grid_right_clip; |
||
1794 | int grid_bottom_clip; |
||
1795 | int grid_numbers_left; |
||
1796 | int grid_numbers_top; |
||
1797 | int grid_numbers_right; |
||
1798 | int grid_marker_margin; |
||
1799 | int grid_marker_x_len; |
||
1800 | int dare_mugshot_left; |
||
1801 | int dare_mugshot_top; |
||
1802 | int dare_mugshot_width; |
||
1803 | int dare_mugshot_height; |
||
1804 | int dare_text_left; |
||
1805 | int dare_text_width; |
||
1806 | int dare_mug_left_margin; |
||
1807 | int dare_mug_top_margin; |
||
1808 | int dare_y_adjust; |
||
1809 | int parts_image_x; |
||
1810 | int parts_image_y; |
||
1811 | int parts_image_width; |
||
1812 | int parts_image_height; |
||
1813 | int parts_cost_x; |
||
1814 | int parts_cost_y; |
||
1815 | int parts_total_x; |
||
1816 | int parts_total_y; |
||
1817 | int parts_net_x; |
||
1818 | int parts_net_y; |
||
1819 | int parts_numbers_x; |
||
1820 | int parts_top_clip; |
||
1821 | int parts_bottom_clip; |
||
1822 | int parts_label_x; |
||
1823 | int parts_label_y; |
||
1824 | int summ1_credits_box_left; |
||
1825 | int summ1_credits_left; |
||
1826 | int summ1_credits_right; |
||
1827 | int summ1_earned_top; |
||
1828 | int summ1_earned_bottom; |
||
1829 | int summ1_lost_top; |
||
1830 | int summ1_lost_bottom; |
||
1831 | int summ1_total_top; |
||
1832 | int summ1_total_bottom; |
||
1833 | int summ1_rank_x_pitch; |
||
1834 | int summ1_rank_inc_l; |
||
1835 | int summ1_rank_inc_c; |
||
1836 | int summ1_rank_total_l; |
||
1837 | int summ1_rank_total_c; |
||
1838 | int summ1_rank_inc_left; |
||
1839 | int summ1_rank_inc_right; |
||
1840 | int summ1_rank_total_left; |
||
1841 | int summ1_rank_total_right; |
||
1842 | int summ1_rank_top; |
||
1843 | int summ1_rank_bot; |
||
1844 | int summ1_rank_y; |
||
1845 | int wreck_name_left; |
||
1846 | int wreck_name_right; |
||
1847 | int wreck_name_top; |
||
1848 | int wreck_name_bottom; |
||
1849 | int wreck_name_base_line; |
||
1850 | int wreck_render_x; |
||
1851 | int wreck_render_y; |
||
1852 | int wreck_render_w; |
||
1853 | int wreck_render_h; |
||
1854 | int power_up_icon_x; |
||
1855 | int power_up_icon_countdown_x; |
||
1856 | int power_up_icon_y; |
||
1857 | int power_up_icon_y_pitch; |
||
1858 | int power_up_icon_countdown_y_offset; |
||
1859 | int change_car_text_y; |
||
1860 | int change_car_line_left; |
||
1861 | int change_car_line_y; |
||
1862 | int change_car_line_right; |
||
1863 | int change_car_panel_left; |
||
1864 | int change_car_panel_top; |
||
1865 | int change_car_panel_right; |
||
1866 | int change_car_panel_bottom; |
||
1867 | int change_car_panel_top_clip; |
||
1868 | int change_car_panel_bottom_clip; |
||
1869 | int map_timer_text_x; |
||
1870 | int map_timer_text_y; |
||
1871 | int map_timer_border_x; |
||
1872 | int map_timer_border_y; |
||
1873 | int action_replay_R_x; |
||
1874 | int action_replay_R_y; |
||
1875 | int action_replay_controls_x; |
||
1876 | int action_replay_controls_y; |
||
1877 | int action_replay_hilite_y; |
||
1878 | int action_replay_rew_start_x; |
||
1879 | int action_replay_rew_x; |
||
1880 | int action_replay_rev_play_x; |
||
1881 | int action_replay_pause_x; |
||
1882 | int action_replay_play_x; |
||
1883 | int action_replay_ffwd_x; |
||
1884 | int action_replay_fwd_end_x; |
||
1885 | int action_replay_camera_x; |
||
1886 | int action_replay_cam_text_x; |
||
1887 | int action_replay_cam_text_y; |
||
1888 | int joinable_games_x_1; |
||
1889 | int joinable_games_x_2; |
||
1890 | int joinable_games_x_3; |
||
1891 | int joinable_games_x_4; |
||
1892 | int joinable_games_x_r; |
||
1893 | int joinable_games_y; |
||
1894 | int joinable_games_y_pitch; |
||
1895 | int joinable_games_sel_left; |
||
1896 | int joinable_games_sel_right; |
||
1897 | int joinable_games_sel_top_marg; |
||
1898 | int joinable_games_sel_bot_marg; |
||
1899 | int net_player_name_x; |
||
1900 | int net_player_name_y; |
||
1901 | int error_box_left; |
||
1902 | int error_box_top; |
||
1903 | int error_box_right; |
||
1904 | int error_box_bottom; |
||
1905 | int start_synch_x_0; |
||
1906 | int start_synch_x_1; |
||
1907 | int start_synch_x_2; |
||
1908 | int start_synch_x_r; |
||
1909 | int start_synch_top; |
||
1910 | int start_synch_y_pitch; |
||
1911 | int start_synch_start_x; |
||
1912 | int start_synch_start_y; |
||
1913 | int key_assign_col_1; |
||
1914 | int key_assign_col_1_a; |
||
1915 | int key_assign_col_2; |
||
1916 | int key_assign_col_2_a; |
||
1917 | int key_assign_y_pitch; |
||
1918 | int key_assign_y; |
||
1919 | int key_assign_key_map_y; |
||
1920 | int key_assign_flic_x; |
||
1921 | int key_assign_flic_y; |
||
1922 | int map_render_x_marg; |
||
1923 | int map_render_y_marg; |
||
1924 | int net_head_box_x; |
||
1925 | int net_head_box_pitch; |
||
1926 | int net_head_box_width; |
||
1927 | int net_head_box_top; |
||
1928 | int net_head_box_bot; |
||
1929 | int net_head_name_x_marg; |
||
1930 | int net_head_name_y; |
||
1931 | int net_head_num_x; |
||
1932 | int net_head_num_y; |
||
1933 | int net_head_num_height; |
||
1934 | int net_head_icon_x; |
||
1935 | int net_head_icon_y; |
||
1936 | int net_head_icon_height; |
||
1937 | int net_head_score_x; |
||
1938 | int net_head_score_y; |
||
1939 | int armour_headup_y[2]; |
||
1940 | int power_headup_y[2]; |
||
1941 | int offense_headup_y[2]; |
||
1942 | int ps_dim_left; |
||
1943 | int ps_dim_right; |
||
1944 | int ps_dim_height; |
||
1945 | int ps_name_left; |
||
1946 | int ps_name_top_border; |
||
1947 | int ps_bars_per_level; |
||
1948 | int ps_x_pitch; |
||
1949 | int ps_bar_top_border; |
||
1950 | int ps_bar_left; |
||
1951 | int ps_bar_height; |
||
1952 | int net_choose_race_x; |
||
1953 | int net_choose_race_y; |
||
1954 | int net_descr_race_l; |
||
1955 | int net_descr_race_r; |
||
1956 | int net_descr_race_top; |
||
1957 | int net_descr_race_bot; |
||
1958 | int net_sum_x_1; |
||
1959 | int net_sum_x_2; |
||
1960 | int net_sum_x_3; |
||
1961 | int net_sum_x_4; |
||
1962 | int net_sum_x_5; |
||
1963 | int net_sum_headings_y; |
||
1964 | int net_sum_y_pitch; |
||
1965 | int graph_opt_disable_x; |
||
1966 | int graph_opt_disable_y; |
||
1967 | int sound_opt_disable_x; |
||
1968 | int sound_opt_disable_y; |
||
1969 | int net_message_enter_x; |
||
1970 | int net_message_enter_y; |
||
1971 | int eval_x; |
||
1972 | int eval_y; |
||
1973 | } tGraf_data; |
||
1974 | |||
1975 | typedef struct tRolling_letter { |
||
1976 | int letters[9]; |
||
1977 | int x_coord; |
||
1978 | int y_coord; |
||
1979 | int number_of_letters; |
||
1980 | tRolling_type rolling_type; |
||
1981 | float current_offset; |
||
1982 | } tRolling_letter; |
||
1983 | |||
1984 | typedef struct tFlic_descriptor { |
||
1985 | char* data; |
||
1986 | char* data_start; |
||
1987 | char file_name[32]; |
||
1988 | tU8* first_pixel; |
||
1989 | tU32 bytes_remaining; |
||
1990 | tU32 frame_period; |
||
1991 | tU32 last_frame; |
||
1992 | br_pixelmap* the_pixelmap; |
||
1993 | int x_offset; |
||
1994 | int y_offset; |
||
1995 | int width; |
||
1996 | int height; |
||
1997 | int frames_left; |
||
1998 | int current_frame; |
||
1999 | int the_index; |
||
2000 | int new_format; |
||
2001 | int must_finish; |
||
2002 | int bytes_still_to_be_read; |
||
2003 | int bytes_in_buffer; |
||
2004 | FILE* f; |
||
2005 | tFlic_descriptor_ptr next; |
||
2006 | } tFlic_descriptor; |
||
2007 | |||
2008 | typedef struct tBrender_storage { |
||
2009 | int models_count; |
||
2010 | int materials_count; |
||
2011 | int shade_tables_count; |
||
2012 | int pixelmaps_count; |
||
2013 | int max_pixelmaps; |
||
2014 | int max_shade_tables; |
||
2015 | int max_materials; |
||
2016 | int max_models; |
||
2017 | br_model** models; |
||
2018 | br_pixelmap** pixelmaps; |
||
2019 | br_pixelmap** shade_tables; |
||
2020 | br_material** materials; |
||
2021 | br_pixelmap** saved_colour_maps; |
||
2022 | } tBrender_storage; |
||
2023 | |||
2024 | typedef struct tSave_game { |
||
2025 | char slot_name[16]; |
||
2026 | char car_name[16]; |
||
2027 | char player_name[2][14]; |
||
2028 | tRace_save_info race_info[100]; |
||
2029 | tOpponent_save_info opponent_info[48]; |
||
2030 | tU32 credits; |
||
2031 | tU32 rank; |
||
2032 | tU32 skill_level; |
||
2033 | tU32 game_completed; |
||
2034 | tU32 number_of_cars; |
||
2035 | tU32 cars_available[60]; |
||
2036 | tU32 current_car_index; |
||
2037 | tU32 current_race_index; |
||
2038 | tU32 redo_race_index; |
||
2039 | tU32 frank_or_annitude; |
||
2040 | tU32 power_up_levels[3]; |
||
2041 | tU32 version; |
||
2042 | tU32 checksum; |
||
2043 | } tSave_game; |
||
2044 | |||
2045 | typedef struct tPed_subs { |
||
2046 | int orig; |
||
2047 | int subs; |
||
2048 | } tPed_subs; |
||
2049 | |||
2050 | typedef struct tRadio_bastards { |
||
2051 | int count; |
||
2052 | int top; |
||
2053 | int current_value; |
||
2054 | int left[5]; |
||
2055 | } tRadio_bastards; |
||
2056 | |||
2057 | typedef struct exception_struct { |
||
2058 | tException_list next; |
||
2059 | char* name; |
||
2060 | int flags; |
||
2061 | } tException_node; |
||
2062 | |||
2063 | typedef struct tPixelmap_user_data { |
||
2064 | tU16 orig_width; |
||
2065 | tU16 orig_height; |
||
2066 | } tPixelmap_user_data; |
||
2067 | |||
2068 | typedef struct tMatrix_and_actor { |
||
2069 | br_matrix34* m; |
||
2070 | br_actor* a; |
||
2071 | } tMatrix_and_actor; |
||
2072 | |||
2073 | typedef tU16 tChunk_subject_index; |
||
2074 | |||
2075 | typedef enum tShadow_level { |
||
2076 | eShadow_none = 0, |
||
2077 | eShadow_us_only = 1, |
||
2078 | eShadow_us_and_opponents = 2, |
||
2079 | eShadow_everyone = 3 |
||
2080 | } tShadow_level; |
||
2081 | |||
2082 | typedef enum tPipe_chunk_type { |
||
2083 | ePipe_chunk_actor_rstyle = 0, |
||
2084 | ePipe_chunk_actor_translate = 1, |
||
2085 | ePipe_chunk_actor_transform = 2, |
||
2086 | ePipe_chunk_actor_create = 3, |
||
2087 | ePipe_chunk_actor_destroy = 4, |
||
2088 | ePipe_chunk_actor_relink = 5, |
||
2089 | ePipe_chunk_actor_material = 6, |
||
2090 | ePipe_chunk_face_material = 7, |
||
2091 | ePipe_chunk_material_trans = 8, |
||
2092 | ePipe_chunk_material_pixelmap = 9, |
||
2093 | ePipe_chunk_model_geometry = 10, |
||
2094 | ePipe_chunk_pedestrian = 11, |
||
2095 | ePipe_chunk_frame_boundary = 12, |
||
2096 | ePipe_chunk_car = 13, |
||
2097 | ePipe_chunk_sound = 14, |
||
2098 | ePipe_chunk_damage = 15, |
||
2099 | ePipe_chunk_special = 16, |
||
2100 | ePipe_chunk_ped_gib = 17, |
||
2101 | ePipe_chunk_incident = 18, |
||
2102 | ePipe_chunk_spark = 19, |
||
2103 | ePipe_chunk_shrapnel = 20, |
||
2104 | ePipe_chunk_screen_shake = 21, |
||
2105 | ePipe_chunk_groove_stop = 22, |
||
2106 | ePipe_chunk_non_car = 23, |
||
2107 | ePipe_chunk_smoke = 24, |
||
2108 | ePipe_chunk_oil_spill = 25, |
||
2109 | ePipe_chunk_smoke_column = 26, |
||
2110 | ePipe_chunk_flame = 27, |
||
2111 | ePipe_chunk_smudge = 28, |
||
2112 | ePipe_chunk_splash = 29, |
||
2113 | ePipe_chunk_prox_ray = 30, |
||
2114 | ePipe_chunk_skid_adjustment = 31, |
||
2115 | ePipe_chunk_enum_count = 32 |
||
2116 | } tPipe_chunk_type; |
||
2117 | |||
2118 | typedef enum tSpecial_type { |
||
2119 | ePipe_special_fade = 0, |
||
2120 | ePipe_special_giant_ped_on = 1, |
||
2121 | ePipe_special_giant_ped_off = 2, |
||
2122 | ePipe_special_min_ped_on = 3, |
||
2123 | ePipe_special_min_ped_off = 4 |
||
2124 | } tSpecial_type; |
||
2125 | |||
2126 | typedef enum tIncident_type { |
||
2127 | eIncident_ped = 0, |
||
2128 | eIncident_car = 1, |
||
2129 | eIncident_wall = 2, |
||
2130 | eNo_incident = 3 |
||
2131 | } tIncident_type; |
||
2132 | |||
2133 | typedef enum tAction_replay_camera_type { |
||
2134 | eAction_replay_standard = 0, |
||
2135 | eAction_replay_tv = 1, |
||
2136 | eAction_replay_action = 2 |
||
2137 | } tAction_replay_camera_type; |
||
2138 | |||
2139 | typedef enum tKey_down_result { |
||
2140 | tKey_down_no = 0, |
||
2141 | tKey_down_yes = 1, |
||
2142 | tKey_down_still = 2, |
||
2143 | tKey_down_repeat = 3 |
||
2144 | } tKey_down_result; |
||
2145 | typedef int dr_pick2d_cbfn(br_actor*, br_model*, br_material*, br_vector3*, br_vector3*, br_scalar, br_scalar, void*); |
||
2146 | typedef struct tReduced_pos { |
||
2147 | tS16 v[3]; |
||
2148 | } tReduced_pos; |
||
2149 | |||
2150 | typedef union tIncident_info { // size: 0x10 |
||
2151 | struct { // size: 0x10 |
||
2152 | tCar_spec* car; // @0x0 |
||
2153 | br_vector3 impact_point; // @0x4 |
||
2154 | } car_info; // @0x0 |
||
2155 | struct { // size: 0x8 |
||
2156 | br_actor* ped_actor; // @0x0 |
||
2157 | br_actor* murderer_actor; // @0x4 |
||
2158 | } ped_info; // @0x0 |
||
2159 | struct { // size: 0xc |
||
2160 | br_vector3 pos; // @0x0 |
||
2161 | } wall_info; // @0x0 |
||
2162 | } tIncident_info; |
||
2163 | |||
2164 | typedef struct tChanged_vertex { |
||
2165 | tU16 vertex_index; |
||
2166 | br_vector3 delta_coordinates; |
||
2167 | } tChanged_vertex; |
||
2168 | |||
2169 | typedef struct tPipe_actor_rstyle_data { |
||
2170 | tU8 new_rstyle; |
||
2171 | } tPipe_actor_rstyle_data; |
||
2172 | |||
2173 | typedef struct tPipe_actor_translate_data { |
||
2174 | br_vector3 new_translation; |
||
2175 | } tPipe_actor_translate_data; |
||
2176 | |||
2177 | typedef struct tPipe_actor_transform_data { |
||
2178 | br_matrix34 new_transformation; |
||
2179 | } tPipe_actor_transform_data; |
||
2180 | |||
2181 | typedef struct tPipe_actor_create_data { |
||
2182 | tU8 dummy; |
||
2183 | } tPipe_actor_create_data; |
||
2184 | |||
2185 | typedef struct tPipe_actor_destroy_data { |
||
2186 | tU8 dummy; |
||
2187 | } tPipe_actor_destroy_data; |
||
2188 | |||
2189 | typedef struct tPipe_actor_relink_data { |
||
2190 | tChunk_subject_index new_parent; |
||
2191 | } tPipe_actor_relink_data; |
||
2192 | |||
2193 | typedef struct tPipe_actor_material_data { |
||
2194 | tChunk_subject_index new_material; |
||
2195 | } tPipe_actor_material_data; |
||
2196 | |||
2197 | typedef struct tPipe_face_material_data { |
||
2198 | tU16 face_index; |
||
2199 | tChunk_subject_index new_material; |
||
2200 | } tPipe_face_material_data; |
||
2201 | |||
2202 | typedef struct tPipe_material_trans_data { |
||
2203 | br_matrix23 new_transformation; |
||
2204 | } tPipe_material_trans_data; |
||
2205 | |||
2206 | typedef struct tPipe_material_pixelmap_data { |
||
2207 | tChunk_subject_index new_pixelmap; |
||
2208 | } tPipe_material_pixelmap_data; |
||
2209 | |||
2210 | typedef struct tPipe_model_geometry_data { |
||
2211 | tU16 vertex_count; |
||
2212 | int model_index; |
||
2213 | tChanged_vertex vertex_changes[1]; |
||
2214 | } tPipe_model_geometry_data; |
||
2215 | |||
2216 | typedef struct tSmudged_vertex { |
||
2217 | tU16 vertex_index; |
||
2218 | tU16 light_index; |
||
2219 | } tSmudged_vertex; |
||
2220 | |||
2221 | typedef struct tPipe_smudge_data { |
||
2222 | tU16 vertex_count; |
||
2223 | int model_index; |
||
2224 | tSmudged_vertex vertex_changes[1]; |
||
2225 | } tPipe_smudge_data; |
||
2226 | |||
2227 | typedef struct tPipe_pedestrian_data { |
||
2228 | tU8 action_and_frame_index; |
||
2229 | tS8 hit_points; |
||
2230 | tU16 parent; |
||
2231 | br_vector3 new_translation; |
||
2232 | float spin_period; |
||
2233 | br_actor* parent_actor; |
||
2234 | br_vector3 offset; |
||
2235 | br_scalar jump_magnitude; |
||
2236 | } tPipe_pedestrian_data; |
||
2237 | |||
2238 | typedef struct tPipe_frame_boundary_data { |
||
2239 | tU32 time; |
||
2240 | } tPipe_frame_boundary_data; |
||
2241 | |||
2242 | typedef struct tPipe_car_data { |
||
2243 | br_matrix34 transformation; |
||
2244 | br_vector3 velocity; |
||
2245 | tS16 speedo_speed; |
||
2246 | tS16 steering_angle; |
||
2247 | tU16 revs_and_gear; |
||
2248 | tS8 lf_sus_position; |
||
2249 | tS8 rf_sus_position; |
||
2250 | tS8 lr_sus_position; |
||
2251 | tS8 rr_sus_position; |
||
2252 | } tPipe_car_data; |
||
2253 | |||
2254 | typedef struct tPipe_sound_data { |
||
2255 | tS3_pitch pitch; |
||
2256 | br_vector3 position; |
||
2257 | tU16 outlet_index; |
||
2258 | tU16 volume; |
||
2259 | } tPipe_sound_data; |
||
2260 | |||
2261 | typedef struct tPipe_damage_data { |
||
2262 | tS8 damage_delta[12]; |
||
2263 | } tPipe_damage_data; |
||
2264 | |||
2265 | typedef struct tPipe_special_data { |
||
2266 | tU8 dummy; |
||
2267 | tS8 padding; |
||
2268 | } tPipe_special_data; |
||
2269 | |||
2270 | typedef struct tPipe_ped_gib_data { |
||
2271 | tU16 ped_parent_index; |
||
2272 | tU8 size; |
||
2273 | tU8 gib_index; |
||
2274 | br_matrix34 transform; |
||
2275 | } tPipe_ped_gib_data; |
||
2276 | |||
2277 | typedef struct tPipe_incident_data { // size: 0x14 |
||
2278 | float severity; // @0x0 |
||
2279 | union { // size: 0x10 |
||
2280 | struct { // size: 0x10 |
||
2281 | tU16 car_ID; // @0x0 |
||
2282 | br_vector3 impact_point; // @0x4 |
||
2283 | } car_info; // @0x0 |
||
2284 | struct { // size: 0x8 |
||
2285 | tU16 ped_index; // @0x0 |
||
2286 | br_actor* actor; // @0x4 |
||
2287 | } ped_info; // @0x0 |
||
2288 | struct { // size: 0xc |
||
2289 | br_vector3 pos; // @0x0 |
||
2290 | } wall_info; // @0x0 |
||
2291 | } info; // @0x4 |
||
2292 | } tPipe_incident_data; |
||
2293 | |||
2294 | typedef struct tPipe_spark_data { |
||
2295 | br_vector3 pos; |
||
2296 | br_vector3 v; |
||
2297 | } tPipe_spark_data; |
||
2298 | |||
2299 | typedef struct tPipe_shrapnel_data { |
||
2300 | br_vector3 pos; |
||
2301 | tU16 age; |
||
2302 | br_material* material; |
||
2303 | } tPipe_shrapnel_data; |
||
2304 | |||
2305 | typedef struct tPipe_screen_shake_data { |
||
2306 | tS8 wobble_x; |
||
2307 | tS8 wobble_y; |
||
2308 | } tPipe_screen_shake_data; |
||
2309 | |||
2310 | typedef struct tPipe_non_car_data { |
||
2311 | br_actor* actor; |
||
2312 | br_matrix34 mat; |
||
2313 | } tPipe_non_car_data; |
||
2314 | |||
2315 | typedef struct tPipe_smoke_data { |
||
2316 | tReduced_pos pos; |
||
2317 | tU16 radius; |
||
2318 | tU8 strength; |
||
2319 | tU8 type; |
||
2320 | } tPipe_smoke_data; |
||
2321 | |||
2322 | typedef struct tPipe_smoke_column_data { |
||
2323 | int car_ID; |
||
2324 | tU16 vertex; |
||
2325 | } tPipe_smoke_column_data; |
||
2326 | |||
2327 | typedef struct tPipe_flame_data { |
||
2328 | tS16 frame_count; |
||
2329 | br_scalar scale_x; |
||
2330 | br_scalar scale_y; |
||
2331 | br_scalar offset_x; |
||
2332 | br_scalar offset_z; |
||
2333 | } tPipe_flame_data; |
||
2334 | |||
2335 | typedef struct tPipe_splash_data { |
||
2336 | br_scalar d; |
||
2337 | br_vector3 normal; |
||
2338 | } tPipe_splash_data; |
||
2339 | |||
2340 | typedef struct tPipe_prox_ray_data { |
||
2341 | tU16 ped_index; |
||
2342 | tU16 car_ID; |
||
2343 | tU32 time; |
||
2344 | } tPipe_prox_ray_data; |
||
2345 | |||
2346 | typedef struct tPipe_oil_spill_data { |
||
2347 | br_matrix34 mat; |
||
2348 | br_scalar full_size; |
||
2349 | br_scalar grow_rate; |
||
2350 | tU32 spill_time; |
||
2351 | tU32 previous_stop_time; |
||
2352 | tCar_spec* car; |
||
2353 | br_vector3 original_pos; |
||
2354 | br_pixelmap* pixelmap; |
||
2355 | } tPipe_oil_spill_data; |
||
2356 | |||
2357 | typedef struct tPipe_groove_stop_data { |
||
2358 | int path_interrupt; |
||
2359 | int object_interrupt; |
||
2360 | float path_resumption; |
||
2361 | float object_resumption; |
||
2362 | br_matrix34 matrix; |
||
2363 | } tPipe_groove_stop_data; |
||
2364 | |||
2365 | typedef struct tPipe_skid_adjustment { |
||
2366 | br_matrix34 matrix; |
||
2367 | int material_index; |
||
2368 | } tPipe_skid_adjustment; |
||
2369 | |||
2370 | typedef struct tPipe_chunk { // size: 0x58 |
||
2371 | tChunk_subject_index subject_index; // @0x0 |
||
2372 | #if defined(DETHRACE_REPLAY_DEBUG) |
||
2373 | int chunk_magic1; |
||
2374 | #endif |
||
2375 | union { // size: 0x54 |
||
2376 | tPipe_actor_rstyle_data actor_rstyle_data; // @0x0 |
||
2377 | tPipe_actor_translate_data actor_translate_data; // @0x0 |
||
2378 | tPipe_actor_transform_data actor_transform_data; // @0x0 |
||
2379 | tPipe_actor_create_data actor_create_data; // @0x0 |
||
2380 | tPipe_actor_destroy_data actor_destroy_data; // @0x0 |
||
2381 | tPipe_actor_relink_data actor_relink_data; // @0x0 |
||
2382 | tPipe_actor_material_data actor_material_data; // @0x0 |
||
2383 | tPipe_face_material_data face_material_data; // @0x0 |
||
2384 | tPipe_material_trans_data material_trans_data; // @0x0 |
||
2385 | tPipe_material_pixelmap_data material_pixelmap_data; // @0x0 |
||
2386 | tPipe_model_geometry_data model_geometry_data; // @0x0 |
||
2387 | tPipe_pedestrian_data pedestrian_data; // @0x0 |
||
2388 | tPipe_frame_boundary_data frame_boundary_data; // @0x0 |
||
2389 | tPipe_car_data car_data; // @0x0 |
||
2390 | tPipe_sound_data sound_data; // @0x0 |
||
2391 | tPipe_damage_data damage_data; // @0x0 |
||
2392 | tPipe_special_data special_data; // @0x0 |
||
2393 | tPipe_ped_gib_data ped_gib_data; // @0x0 |
||
2394 | tPipe_incident_data incident_data; // @0x0 |
||
2395 | tPipe_spark_data spark_data; // @0x0 |
||
2396 | tPipe_shrapnel_data shrapnel_data; // @0x0 |
||
2397 | tPipe_screen_shake_data screen_shake_data; // @0x0 |
||
2398 | tPipe_groove_stop_data groove_stop_data; // @0x0 |
||
2399 | tPipe_non_car_data non_car_data; // @0x0 |
||
2400 | tPipe_smoke_data smoke_data; // @0x0 |
||
2401 | tPipe_oil_spill_data oil_data; // @0x0 |
||
2402 | tPipe_smoke_column_data smoke_column_data; // @0x0 |
||
2403 | tPipe_flame_data flame_data; // @0x0 |
||
2404 | tPipe_smudge_data smudge_data; // @0x0 |
||
2405 | tPipe_splash_data splash_data; // @0x0 |
||
2406 | tPipe_prox_ray_data prox_ray_data; // @0x0 |
||
2407 | tPipe_skid_adjustment skid_adjustment; // @0x0 |
||
2408 | } chunk_data; // @0x4 |
||
2409 | } tPipe_chunk; |
||
2410 | |||
2411 | typedef struct tPipe_session { |
||
2412 | tPipe_chunk_type chunk_type; |
||
2413 | tU8 number_of_chunks; |
||
2414 | #if defined(DETHRACE_REPLAY_DEBUG) |
||
2415 | int pipe_magic1; |
||
2416 | #endif |
||
2417 | tPipe_chunk chunks; |
||
2418 | } tPipe_session; |
||
2419 | |||
2420 | typedef struct tCollison_data { |
||
2421 | int ref; |
||
2422 | tCollision_info* car; |
||
2423 | } tCollison_data; |
||
2424 | |||
2425 | typedef struct tSave_camera { |
||
2426 | int saved; |
||
2427 | br_scalar zoom; |
||
2428 | br_angle yaw; |
||
2429 | } tSave_camera; |
||
2430 | |||
2431 | #ifdef DETHRACE_FIX_BUGS |
||
2432 | typedef void tEdit_func(void); |
||
2433 | #else |
||
2434 | typedef void* tEdit_func(void); |
||
2435 | #endif |
||
2436 | |||
2437 | typedef enum tEdit_mode { |
||
2438 | eEdit_mode_cheat = 0, |
||
2439 | eEdit_mode_acc = 1, |
||
2440 | eEdit_mode_spec_vol = 2, |
||
2441 | eEdit_mode_ped = 3, |
||
2442 | eEdit_mode_opp = 4, |
||
2443 | eEdit_mode_pratcam = 5, |
||
2444 | eEdit_mode_depth = 6, |
||
2445 | eEdit_mode_damage = 7, |
||
2446 | eEdit_mode_bonnet = 8, |
||
2447 | eEdit_mode_options = 9, |
||
2448 | eEdit_mode_count = 10 |
||
2449 | } tEdit_mode; |
||
2450 | typedef struct tToggle_element { |
||
2451 | int key1; |
||
2452 | int key2; |
||
2453 | int in_game_only; |
||
2454 | int exact_modifiers; |
||
2455 | int on_last_time; |
||
2456 | void (*action_proc)(void); |
||
2457 | } tToggle_element; |
||
2458 | |||
2459 | typedef struct tCheat { |
||
2460 | tU32 code; |
||
2461 | tU32 code2; |
||
2462 | void (*action_proc)(int); |
||
2463 | int num; |
||
2464 | } tCheat; |
||
2465 | |||
2466 | typedef enum tSpec_vol_depth_effect { |
||
2467 | eSpec_dep_acid = 0, |
||
2468 | eSpec_dep_water = 1, |
||
2469 | eSpec_dep_slight_fog = 2, |
||
2470 | eSpec_dep_med_fog = 3, |
||
2471 | eSpec_dep_thick_fog = 4 |
||
2472 | } tSpec_vol_depth_effect; |
||
2473 | |||
2474 | typedef enum tSpec_vol_cam_effect { |
||
2475 | eSpec_cam_wobble = 0 |
||
2476 | } tSpec_vol_cam_effect; |
||
2477 | |||
2478 | typedef enum tHeadup_type { |
||
2479 | eHeadup_unused = 0, |
||
2480 | eHeadup_text = 1, |
||
2481 | eHeadup_coloured_text = 2, |
||
2482 | eHeadup_image = 3, |
||
2483 | eHeadup_fancy = 4, |
||
2484 | eHeadup_box_text = 5 |
||
2485 | } tHeadup_type; |
||
2486 | |||
2487 | typedef enum tFancy_stage { |
||
2488 | eFancy_stage_incoming = 0, |
||
2489 | eFancy_stage_halting = 1, |
||
2490 | eFancy_stage_waiting = 2, |
||
2491 | eFancy_stage_readying = 3, |
||
2492 | eFancy_stage_leaving = 4 |
||
2493 | } tFancy_stage; |
||
2494 | |||
2495 | typedef struct tHeadup { // size: 0x14c |
||
2496 | tHeadup_type type; // @0x0 |
||
2497 | int x; // @0x4 |
||
2498 | int y; // @0x8 |
||
2499 | int original_x; // @0xc |
||
2500 | int right_edge; // @0x10 |
||
2501 | int flash_period; // @0x14 |
||
2502 | int slot_index; // @0x18 |
||
2503 | int dimmed_background; // @0x1c |
||
2504 | int dim_left; // @0x20 |
||
2505 | int dim_top; // @0x24 |
||
2506 | int dim_right; // @0x28 |
||
2507 | int dim_bottom; // @0x2c |
||
2508 | int clever; // @0x30 |
||
2509 | int cockpit_anchored; // @0x34 |
||
2510 | int flash_state; // @0x38 |
||
2511 | tJustification justification; // @0x3c |
||
2512 | tU32 end_time; // @0x40 |
||
2513 | tU32 last_flash; // @0x44 |
||
2514 | union { // size: 0x104 |
||
2515 | struct { // size: 0x104 |
||
2516 | char text[250]; // @0x0 |
||
2517 | int colour; // @0xfc |
||
2518 | br_font* font; // @0x100 |
||
2519 | } text_info; // @0x0 |
||
2520 | struct { // size: 0x100 |
||
2521 | char text[250]; // @0x0 |
||
2522 | tDR_font* coloured_font; // @0xfc |
||
2523 | } coloured_text_info; // @0x0 |
||
2524 | struct { // size: 0x4 |
||
2525 | br_pixelmap* image; // @0x0 |
||
2526 | } image_info; // @0x0 |
||
2527 | struct { // size: 0x18 |
||
2528 | br_pixelmap* image; // @0x0 |
||
2529 | int offset; // @0x4 |
||
2530 | int shear_amount; // @0x8 |
||
2531 | int end_offset; // @0xc |
||
2532 | tFancy_stage fancy_stage; // @0x10 |
||
2533 | tU32 start_time; // @0x14 |
||
2534 | } fancy_info; // @0x0 |
||
2535 | } data; // @0x48 |
||
2536 | } tHeadup; |
||
2537 | |||
2538 | typedef struct tQueued_headup { |
||
2539 | int flash_rate; |
||
2540 | int lifetime; |
||
2541 | int font_index; |
||
2542 | char text[256]; |
||
2543 | } tQueued_headup; |
||
2544 | |||
2545 | typedef struct tFlicette { |
||
2546 | int flic_index; |
||
2547 | int x[2]; |
||
2548 | int y[2]; |
||
2549 | } tFlicette; |
||
2550 | |||
2551 | typedef struct tMouse_area { |
||
2552 | int left[2]; |
||
2553 | int top[2]; |
||
2554 | int right[2]; |
||
2555 | int bottom[2]; |
||
2556 | int new_choice; |
||
2557 | int new_mode; |
||
2558 | int available_when_typing; |
||
2559 | int (*mouse_click)(int*, int*, int, int); |
||
2560 | } tMouse_area; |
||
2561 | |||
2562 | typedef struct tRectile { |
||
2563 | int left[2]; |
||
2564 | int top[2]; |
||
2565 | int right[2]; |
||
2566 | int bottom[2]; |
||
2567 | } tRectile; |
||
2568 | |||
2569 | typedef struct tInterface_spec { |
||
2570 | int initial_imode; |
||
2571 | int first_opening_flic; |
||
2572 | int second_opening_flic; |
||
2573 | int end_flic_go_ahead; |
||
2574 | int end_flic_escaped; |
||
2575 | int end_flic_otherwise; |
||
2576 | int flic_bunch_to_load; |
||
2577 | int move_left_new_mode[2]; |
||
2578 | int move_left_delta[2]; |
||
2579 | int move_left_min[2]; |
||
2580 | int move_left_max[2]; |
||
2581 | int (*move_left_proc[2])(int*, int*); |
||
2582 | int move_right_new_mode[2]; |
||
2583 | int move_right_delta[2]; |
||
2584 | int move_right_min[2]; |
||
2585 | int move_right_max[2]; |
||
2586 | int (*move_right_proc[2])(int*, int*); |
||
2587 | int move_up_new_mode[2]; |
||
2588 | int move_up_delta[2]; |
||
2589 | int move_up_min[2]; |
||
2590 | int move_up_max[2]; |
||
2591 | int (*move_up_proc[2])(int*, int*); |
||
2592 | int move_down_new_mode[2]; |
||
2593 | int move_down_delta[2]; |
||
2594 | int move_down_min[2]; |
||
2595 | int move_down_max[2]; |
||
2596 | int (*move_down_proc[2])(int*, int*); |
||
2597 | int go_ahead_allowed[2]; |
||
2598 | int (*go_ahead_proc[2])(int*, int*); |
||
2599 | int escape_allowed[2]; |
||
2600 | int (*escape_proc[2])(int*, int*); |
||
2601 | int (*exit_proc)(int*, int*); |
||
2602 | void (*draw_proc)(int, int); |
||
2603 | tU32 time_out; |
||
2604 | void (*start_proc1)(void); |
||
2605 | void (*start_proc2)(void); |
||
2606 | int (*done_proc)(int, int, int, int, int); |
||
2607 | int font_needed; |
||
2608 | int typeable[2]; |
||
2609 | void (*get_original_string)(int, int, char*, int*); |
||
2610 | int escape_code; |
||
2611 | int dont_save_or_load; |
||
2612 | int number_of_button_flics; |
||
2613 | tFlicette* flicker_on_flics; |
||
2614 | tFlicette* flicker_off_flics; |
||
2615 | tFlicette* pushed_flics; |
||
2616 | int number_of_mouse_areas; |
||
2617 | tMouse_area* mouse_areas; |
||
2618 | int number_of_recopy_areas; |
||
2619 | tRectile* recopy_areas; |
||
2620 | } tInterface_spec; |
||
2621 | |||
2622 | typedef int dr_modelpick2d_cbfn(br_model*, br_material*, br_vector3*, br_vector3*, br_scalar, int, int, int, br_vector3*, br_vector2*, void*); |
||
2623 | typedef int dr_pick3d_cbfn(br_actor*, br_model*, br_material*, br_matrix34*, br_bounds*, void*); |
||
2624 | |||
2625 | typedef struct tFlic_spec { |
||
2626 | char* file_name; |
||
2627 | int interruptable; |
||
2628 | int queued; |
||
2629 | int frame_rate; |
||
2630 | int repeat; |
||
2631 | int x_offset; |
||
2632 | int y_offset; |
||
2633 | tS8* data_ptr; |
||
2634 | tU32 the_size; |
||
2635 | } tFlic_spec; |
||
2636 | |||
2637 | typedef struct tFlic_bunch { |
||
2638 | char count; |
||
2639 | int* indexes; |
||
2640 | } tFlic_bunch; |
||
2641 | |||
2642 | typedef struct tTranslation_record { |
||
2643 | int flic_index; |
||
2644 | int x; |
||
2645 | int y; |
||
2646 | int font_index; |
||
2647 | int global; |
||
2648 | int every_frame; |
||
2649 | tJustification justification; |
||
2650 | char* text; |
||
2651 | } tTranslation_record; |
||
2652 | |||
2653 | /* Changed due to conflict with tVehicle_type enum */ |
||
2654 | typedef enum tVehicle_category { |
||
2655 | eVehiclecat_self = 0, |
||
2656 | eVehiclecat_opponent = 1, |
||
2657 | eVehiclecat_rozzer = 2, |
||
2658 | eVehiclecat_drone = 3 |
||
2659 | } tVehicle_category; |
||
2660 | |||
2661 | typedef struct tTransient_bm { |
||
2662 | br_pixelmap* pixmap; |
||
2663 | int in_use; |
||
2664 | int x_coord; |
||
2665 | int y_coord; |
||
2666 | int order_number; |
||
2667 | int user_data; |
||
2668 | } tTransient_bm; |
||
2669 | |||
2670 | typedef struct tCursor_giblet { |
||
2671 | int current_giblet; |
||
2672 | int sequence_index; |
||
2673 | int landed; |
||
2674 | int transient_index; |
||
2675 | float x_speed; |
||
2676 | float y_speed; |
||
2677 | float x_coord; |
||
2678 | float y_coord; |
||
2679 | float the_speed; |
||
2680 | tU32 last_giblet_change; |
||
2681 | tU32 giblet_change_period; |
||
2682 | tU32 e_t_a; |
||
2683 | } tCursor_giblet; |
||
2684 | |||
2685 | typedef struct tWobble_spec { |
||
2686 | float amplitude_x; |
||
2687 | float amplitude_y; |
||
2688 | float period; |
||
2689 | int time_started; |
||
2690 | } tWobble_spec; |
||
2691 | |||
2692 | typedef struct tConcussion { |
||
2693 | int concussed; |
||
2694 | br_matrix34 amplitudes; |
||
2695 | br_matrix34 periods; |
||
2696 | tU32 time_started; |
||
2697 | } tConcussion; |
||
2698 | |||
2699 | typedef struct tSaved_table { |
||
2700 | br_pixelmap* original; |
||
2701 | br_pixelmap* copy; |
||
2702 | } tSaved_table; |
||
2703 | |||
2704 | typedef struct tClip_details { |
||
2705 | br_actor* clip; |
||
2706 | br_scalar length; |
||
2707 | } tClip_details; |
||
2708 | |||
2709 | typedef enum tNet_head_avail { |
||
2710 | eNet_or_otherwise = 0, |
||
2711 | eNet_only = 1, |
||
2712 | eNot_net = 2, |
||
2713 | eNot_ever_ever_ever = 3 |
||
2714 | } tNet_head_avail; |
||
2715 | typedef struct tModel_pool { |
||
2716 | br_model** model_array; |
||
2717 | int model_count; |
||
2718 | } tModel_pool; |
||
2719 | |||
2720 | typedef struct tHeadup_info { |
||
2721 | char* name; |
||
2722 | tNet_head_avail avail; |
||
2723 | } tHeadup_info; |
||
2724 | |||
2725 | typedef enum tTime_bonus_state { |
||
2726 | eTime_bonus_none = 0, |
||
2727 | eTime_bonus_initial_pause = 1, |
||
2728 | eTime_bonus_race_bonus = 2, |
||
2729 | eTime_bonus_tb_up = 3, |
||
2730 | eTime_bonus_tb_pause = 4, |
||
2731 | eTime_bonus_tb_down = 5, |
||
2732 | eTime_bonus_end_pause = 6 |
||
2733 | } tTime_bonus_state; |
||
2734 | |||
2735 | typedef enum tInfo_mode { |
||
2736 | eInfo_regular = 0, |
||
2737 | eInfo_pcam_car = 1, |
||
2738 | eInfo_nearby_mat = 2, |
||
2739 | eInfo_count = 3 |
||
2740 | } tInfo_mode; |
||
2741 | typedef struct tHeadup_pair { |
||
2742 | int player_index; |
||
2743 | int score; |
||
2744 | int out_of_game; |
||
2745 | } tHeadup_pair; |
||
2746 | |||
2747 | typedef struct tMax_message { |
||
2748 | // char buffer[516]; // 512 + sizeof(void*) |
||
2749 | char buffer[520]; |
||
2750 | } tMax_message; |
||
2751 | |||
2752 | typedef struct tMid_message { |
||
2753 | // char buffer[132]; // 128 + sizeof(void*) |
||
2754 | char buffer[136]; |
||
2755 | } tMid_message; |
||
2756 | |||
2757 | typedef struct tMin_message { |
||
2758 | // char buffer[36]; // 32 + sizeof(void*) |
||
2759 | char buffer[40]; |
||
2760 | } tMin_message; |
||
2761 | |||
2762 | typedef struct tGuaranteed_message { // size: 0x2c |
||
2763 | tNet_message* message; // @0x0 |
||
2764 | tU32 send_time; // @0x4 |
||
2765 | tU32 next_resend_time; // @0x8 |
||
2766 | tU32 resend_period; // @0xc |
||
2767 | int recieved; // @0x10 |
||
2768 | tPD_net_player_info pd_address; // @0x14 |
||
2769 | int (*NotifyFail)(tU32, tNet_message*); // @0x24 |
||
2770 | tU32 guarantee_number; // @0x28 |
||
2771 | } tGuaranteed_message; |
||
2772 | |||
2773 | typedef enum tJoin_or_host_result { |
||
2774 | eJoin_or_host_cancel = 0, |
||
2775 | eJoin_or_host_join = 1, |
||
2776 | eJoin_or_host_host = 2 |
||
2777 | } tJoin_or_host_result; |
||
2778 | typedef struct tJoinable_game { |
||
2779 | tNet_game_details* game; |
||
2780 | tU32 time; |
||
2781 | } tJoinable_game; |
||
2782 | |||
2783 | typedef struct tOil_spill_info { |
||
2784 | br_actor* actor; |
||
2785 | tCar_spec* car; |
||
2786 | tU32 spill_time; |
||
2787 | tU32 stop_time; |
||
2788 | br_scalar full_size; |
||
2789 | br_scalar current_size; |
||
2790 | br_scalar grow_rate; |
||
2791 | br_vector3 original_pos; |
||
2792 | br_vector3 pos; |
||
2793 | } tOil_spill_info; |
||
2794 | |||
2795 | typedef enum tJoy_calib_stage { |
||
2796 | eJoy_calib_tl_1 = 0, |
||
2797 | eJoy_calib_br_1 = 1, |
||
2798 | eJoy_calib_cn_1 = 2, |
||
2799 | eJoy_calib_tl_2 = 3, |
||
2800 | eJoy_calib_br_2 = 4, |
||
2801 | eJoy_calib_cn_2 = 5 |
||
2802 | } tJoy_calib_stage; |
||
2803 | |||
2804 | typedef enum tPed_instruc_type { |
||
2805 | ePed_instruc_point = 0, |
||
2806 | ePed_instruc_xpoint = 1, |
||
2807 | ePed_instruc_bchoice = 2, |
||
2808 | ePed_instruc_fchoice = 3, |
||
2809 | ePed_instruc_dead = 4, |
||
2810 | ePed_instruc_bmarker = 5, |
||
2811 | ePed_instruc_fmarker = 6, |
||
2812 | ePed_instruc_baction = 7, |
||
2813 | ePed_instruc_faction = 8, |
||
2814 | ePed_instruc_reverse = 9 |
||
2815 | } tPed_instruc_type; |
||
2816 | |||
2817 | typedef enum tPed_frame_rate_type { |
||
2818 | ePed_frame_fixed = 0, |
||
2819 | ePed_frame_speed = 1, |
||
2820 | ePed_frame_variable = 2 |
||
2821 | } tPed_frame_rate_type; |
||
2822 | |||
2823 | typedef enum tPed_collide_type { |
||
2824 | ePed_collide_none = -1, |
||
2825 | ePed_collide_on = 0 |
||
2826 | } tPed_collide_type; |
||
2827 | |||
2828 | typedef enum tPed_hit_position { |
||
2829 | ePed_hit_unknown = 0, |
||
2830 | ePed_hit_front = 1, |
||
2831 | ePed_hit_back = 2, |
||
2832 | ePed_hit_rside = 3, |
||
2833 | ePed_hit_lside = 4 |
||
2834 | } tPed_hit_position; |
||
2835 | typedef struct tPed_choice { |
||
2836 | tU16 danger_level; |
||
2837 | tU8 percentage_chance; |
||
2838 | tU8 marker_ref; |
||
2839 | } tPed_choice; |
||
2840 | |||
2841 | typedef struct tPedestrian_instruction { // size: 0x14 |
||
2842 | tPed_instruc_type type; // @0x0 |
||
2843 | union { // size: 0x10 |
||
2844 | struct { // size: 0x10 |
||
2845 | br_vector3 position; // @0x0 |
||
2846 | int irreversable; // @0xc |
||
2847 | } point_data; // @0x0 |
||
2848 | struct { // size: 0xc |
||
2849 | int number_of_choices; // @0x0 |
||
2850 | tPed_choice choices[2]; // @0x4 |
||
2851 | } choice_data; // @0x0 |
||
2852 | struct { // size: 0x4 |
||
2853 | int death_sequence; // @0x0 |
||
2854 | } death_data; // @0x0 |
||
2855 | struct { // size: 0x4 |
||
2856 | int marker_ref; // @0x0 |
||
2857 | } marker_data; // @0x0 |
||
2858 | struct { // size: 0x4 |
||
2859 | int action_index; // @0x0 |
||
2860 | } action_data; // @0x0 |
||
2861 | } data; // @0x4 |
||
2862 | } tPedestrian_instruction; |
||
2863 | |||
2864 | typedef struct tBearing_sequence { |
||
2865 | int sequence_index; |
||
2866 | float max_bearing; |
||
2867 | } tBearing_sequence; |
||
2868 | |||
2869 | typedef struct tPedestrian_action { |
||
2870 | float danger_level; |
||
2871 | float percentage_chance; |
||
2872 | int number_of_bearings; |
||
2873 | int number_of_sounds; |
||
2874 | int sounds[3]; |
||
2875 | tBearing_sequence sequences[7]; |
||
2876 | float initial_speed; |
||
2877 | float looping_speed; |
||
2878 | tU32 reaction_time; |
||
2879 | } tPedestrian_action; |
||
2880 | |||
2881 | typedef struct tPed_frame_info { |
||
2882 | br_vector2 offset; |
||
2883 | int flipped; |
||
2884 | br_pixelmap* pixelmap; |
||
2885 | } tPed_frame_info; |
||
2886 | |||
2887 | typedef struct tPedestrian_sequence { |
||
2888 | tPed_frame_rate_type frame_rate_type; |
||
2889 | float frame_rate_factor1; |
||
2890 | float frame_rate_factor2; |
||
2891 | int number_of_frames; |
||
2892 | int looping_frame_start; |
||
2893 | tPed_frame_info frames[10]; |
||
2894 | } tPedestrian_sequence; |
||
2895 | |||
2896 | typedef struct tPedestrian_data { |
||
2897 | int magic_number; |
||
2898 | br_scalar height; |
||
2899 | br_scalar jump_magnitude; |
||
2900 | br_scalar car_to_ped; |
||
2901 | br_scalar min_x; |
||
2902 | br_scalar max_x; |
||
2903 | int credits_value; |
||
2904 | int hit_points; |
||
2905 | int number_of_exploding_sounds; |
||
2906 | int exploding_sounds[3]; |
||
2907 | int falling_sound; |
||
2908 | int last_sound_action; |
||
2909 | tU16 killers_ID; |
||
2910 | br_scalar width; |
||
2911 | br_scalar height2; |
||
2912 | tCar_spec* fate; |
||
2913 | br_actor* actor; |
||
2914 | tPlayer_ID murderer; |
||
2915 | tPedestrian_instruction* instruction_list; |
||
2916 | tPedestrian_action* action_list; |
||
2917 | tU8 ref_number; |
||
2918 | tU8 active; |
||
2919 | tU8 munged; |
||
2920 | tU8 collided_last_time; |
||
2921 | tU8 flipped; |
||
2922 | tU8 reverse_frames; |
||
2923 | tU8 sent_dead_message; |
||
2924 | tS8 image_index; |
||
2925 | tS8 number_of_actions; |
||
2926 | tS8 number_of_instructions; |
||
2927 | tS8 first_instruction; |
||
2928 | tS8 current_instruction; |
||
2929 | tS8 fatal_car_impact_action; |
||
2930 | tS8 non_fatal_car_impact_action; |
||
2931 | tS8 after_impact_action; |
||
2932 | tS8 fatal_ground_impact_action; |
||
2933 | tS8 non_fatal_ground_impact_action; |
||
2934 | tS8 giblets_action; |
||
2935 | tS8 current_sequence; |
||
2936 | tS8 current_action; |
||
2937 | tS8 current_action_mode; |
||
2938 | tS8 current_frame; |
||
2939 | tS8 number_of_sequences; |
||
2940 | tS8 done_initial; |
||
2941 | tS8 giblets_being_sat_upon; |
||
2942 | tS8 mid_air; |
||
2943 | tS8 instruction_direction; |
||
2944 | tS8 irreversable; |
||
2945 | tS8 frightened_of_us; |
||
2946 | tS8 cloned; |
||
2947 | float current_speed; |
||
2948 | float acceleration; |
||
2949 | float spin_period; |
||
2950 | tU32 last_frame; |
||
2951 | tU32 last_action_change; |
||
2952 | tU32 last_sound_make; |
||
2953 | tS32 respawn_time; |
||
2954 | br_vector3 pos; |
||
2955 | br_vector3 direction; |
||
2956 | br_vector3 from_pos; |
||
2957 | br_vector3 to_pos; |
||
2958 | br_vector3 offset; |
||
2959 | float falling_speed; |
||
2960 | tSpecial_volume* last_special_volume; |
||
2961 | tPedestrian_sequence* sequences; |
||
2962 | tS3_sound_tag last_sound; |
||
2963 | br_pixelmap* colour_map; |
||
2964 | } tPedestrian_data; |
||
2965 | |||
2966 | typedef struct tPed_gib { |
||
2967 | br_actor* actor; |
||
2968 | br_scalar x_speed; |
||
2969 | br_scalar y_speed; |
||
2970 | int size; |
||
2971 | int last_frame; |
||
2972 | int gib_index; |
||
2973 | int parent_index; |
||
2974 | tU32 start_time; |
||
2975 | tU32 end_time; |
||
2976 | tU32 flip_period; |
||
2977 | } tPed_gib; |
||
2978 | |||
2979 | typedef struct tPed_gib_materials { |
||
2980 | int count; |
||
2981 | br_material* materials[5]; |
||
2982 | } tPed_gib_materials; |
||
2983 | |||
2984 | typedef struct tProximity_ray { |
||
2985 | tCar_spec* car; |
||
2986 | tPedestrian_data* ped; |
||
2987 | tU32 start_time; |
||
2988 | } tProximity_ray; |
||
2989 | |||
2990 | typedef struct tPiped_registration_snapshot { |
||
2991 | int piped_actors_count; |
||
2992 | int piped_models_count; |
||
2993 | int piped_materials_count; |
||
2994 | int piped_pixelmaps_count; |
||
2995 | } tPiped_registration_snapshot; |
||
2996 | |||
2997 | typedef struct tHeadup_icon { |
||
2998 | tPowerup* powerup; |
||
2999 | int fizzle_stage; |
||
3000 | int fizzle_direction; |
||
3001 | tU32 fizzle_start; |
||
3002 | } tHeadup_icon; |
||
3003 | |||
3004 | typedef struct tPrat_flic_spec { |
||
3005 | char* data; |
||
3006 | tU32 data_length; |
||
3007 | } tPrat_flic_spec; |
||
3008 | |||
3009 | typedef struct tPrat_alternative { |
||
3010 | int ref; |
||
3011 | int chance; |
||
3012 | int number_of_sounds; |
||
3013 | int sound_ids[8]; |
||
3014 | int sound_chance; |
||
3015 | } tPrat_alternative; |
||
3016 | |||
3017 | typedef struct tPrat_flic_chunk { |
||
3018 | int number_of_alternatives; |
||
3019 | tPrat_alternative alternatives[6]; |
||
3020 | } tPrat_flic_chunk; |
||
3021 | |||
3022 | typedef struct tPrat_sequence { |
||
3023 | int number_of_chunks; |
||
3024 | int precedence; |
||
3025 | int repeat_chunk; |
||
3026 | tPrat_flic_chunk chunks[6]; |
||
3027 | } tPrat_sequence; |
||
3028 | |||
3029 | typedef enum tGrid_draw { |
||
3030 | eGrid_draw_none = 0, |
||
3031 | eGrid_draw_icons_only = 1, |
||
3032 | eGrid_draw_all = 2 |
||
3033 | } tGrid_draw; |
||
3034 | |||
3035 | typedef enum tNet_synch_mode { |
||
3036 | eNet_synch_host_first = 0, |
||
3037 | eNet_synch_host_subsequent = 1, |
||
3038 | eNet_synch_client = 2 |
||
3039 | } tNet_synch_mode; |
||
3040 | typedef struct tWreck_info { |
||
3041 | br_actor* actor; |
||
3042 | br_matrix34 rotation; |
||
3043 | br_matrix34 original_matrix; |
||
3044 | int customised; |
||
3045 | int car_index; |
||
3046 | float pos_x; |
||
3047 | float pos_y; |
||
3048 | tVehicle_type car_type; |
||
3049 | br_scalar scaling_factor; |
||
3050 | } tWreck_info; |
||
3051 | |||
3052 | typedef struct tRectangle { |
||
3053 | int left; |
||
3054 | int top; |
||
3055 | int right; |
||
3056 | int bottom; |
||
3057 | } tRectangle; |
||
3058 | |||
3059 | typedef struct tSkid { |
||
3060 | br_actor* actor; |
||
3061 | br_vector3 normal; |
||
3062 | br_vector3 pos; |
||
3063 | } tSkid; |
||
3064 | |||
3065 | typedef struct tSpark { |
||
3066 | int count; |
||
3067 | br_vector3 pos; |
||
3068 | br_vector3 v; |
||
3069 | br_vector3 length; |
||
3070 | br_vector3 normal; |
||
3071 | tU32 time_sync; |
||
3072 | tCar_spec* car; |
||
3073 | tU8 colour; |
||
3074 | } tSpark; |
||
3075 | |||
3076 | typedef struct tShrapnel { |
||
3077 | br_actor* actor; |
||
3078 | br_vector3 v; |
||
3079 | tU32 time_sync; |
||
3080 | tU32 age; |
||
3081 | br_scalar shear1; |
||
3082 | br_scalar shear2; |
||
3083 | br_vector3 axis; |
||
3084 | } tShrapnel; |
||
3085 | |||
3086 | typedef struct tSmoke { |
||
3087 | tU32 time_sync; |
||
3088 | br_vector3 pos; |
||
3089 | br_vector3 v; |
||
3090 | br_scalar radius; |
||
3091 | br_scalar strength; |
||
3092 | br_scalar decay_factor; |
||
3093 | tU8 type; |
||
3094 | tU8 pipe_me; |
||
3095 | } tSmoke; |
||
3096 | |||
3097 | typedef struct tSmoke_column { |
||
3098 | tCar_spec* car; |
||
3099 | tU32 time; |
||
3100 | tU32 lifetime; |
||
3101 | tU32 count; |
||
3102 | int colour; |
||
3103 | int whiter; |
||
3104 | br_actor* flame_actor; |
||
3105 | int frame_count[3]; |
||
3106 | br_vector3 pos; |
||
3107 | br_scalar scale_x[3]; |
||
3108 | br_scalar scale_y[3]; |
||
3109 | br_scalar offset_x[3]; |
||
3110 | br_scalar offset_z[3]; |
||
3111 | tU32 smudge_timer; |
||
3112 | int vertex_index; |
||
3113 | int upright; |
||
3114 | |||
3115 | #ifdef DETHRACE_FIX_BUGS |
||
3116 | // Flames textures are animated per frame. At higher FPS, this happens too quickly |
||
3117 | br_scalar frame_time[3]; |
||
3118 | #endif |
||
3119 | } tSmoke_column; |
||
3120 | |||
3121 | typedef struct tSplash { |
||
3122 | br_actor* actor; |
||
3123 | br_vector3 v; |
||
3124 | int just_done; |
||
3125 | br_scalar size; |
||
3126 | br_scalar scale_x; |
||
3127 | } tSplash; |
||
3128 | |||
3129 | typedef struct tBRender_smoke { |
||
3130 | br_vector3 pos; |
||
3131 | br_scalar r; |
||
3132 | br_scalar strength; |
||
3133 | br_colour col; |
||
3134 | br_scalar aspect; |
||
3135 | } tBRender_smoke; |
||
3136 | |||
3137 | typedef struct tRGB_colour { |
||
3138 | int red; |
||
3139 | int green; |
||
3140 | int blue; |
||
3141 | } tRGB_colour; |
||
3142 | |||
3143 | #ifdef DETHRACE_FIX_BUGS |
||
3144 | typedef br_material* tPMFMCB(br_model*, tU16); |
||
3145 | #else |
||
3146 | typedef br_material** tPMFMCB(br_model*, tU16); |
||
3147 | #endif |
||
3148 | |||
3149 | typedef enum tMatrix_mod_type { |
||
3150 | eMatrix_mod_none = -1, |
||
3151 | eMatrix_mod_spin = 0, |
||
3152 | eMatrix_mod_rock = 1, |
||
3153 | eMatrix_mod_throb = 2, |
||
3154 | eMatrix_mod_slither = 3, |
||
3155 | eMatrix_mod_roll = 4 |
||
3156 | } tMatrix_mod_type; |
||
3157 | |||
3158 | typedef enum tTexture_animation_type { |
||
3159 | eTexture_animation_none = -1, |
||
3160 | eTexture_animation_frames = 0, |
||
3161 | eTexture_animation_flic = 1 |
||
3162 | } tTexture_animation_type; |
||
3163 | |||
3164 | typedef enum tMove_mode { |
||
3165 | eMove_none = -1, |
||
3166 | eMove_linear = 0, |
||
3167 | eMove_harmonic = 1, |
||
3168 | eMove_flash = 2, |
||
3169 | eMove_controlled = 3, |
||
3170 | eMove_absolute = 4, |
||
3171 | eMove_continuous = 5 |
||
3172 | } tMove_mode; |
||
3173 | |||
3174 | typedef enum tFunk_trigger_mode { |
||
3175 | eFunk_mode_constant = 0, |
||
3176 | eFunk_mode_distance = 1, |
||
3177 | eFunk_mode_last_lap_only = 2, |
||
3178 | eFunk_mode_all_laps_but_last = 3 |
||
3179 | } tFunk_trigger_mode; |
||
3180 | |||
3181 | typedef enum tGroove_trigger_mode { |
||
3182 | eGroove_mode_constant = 0, |
||
3183 | eGroove_mode_distance = 1 |
||
3184 | } tGroove_trigger_mode; |
||
3185 | |||
3186 | typedef enum tGroove_path_mode { |
||
3187 | eGroove_path_none = -1, |
||
3188 | eGroove_path_straight = 0, |
||
3189 | eGroove_path_circular = 1 |
||
3190 | } tGroove_path_mode; |
||
3191 | |||
3192 | typedef enum tGroove_object_mode { |
||
3193 | eGroove_object_none = -1, |
||
3194 | eGroove_object_spin = 0, |
||
3195 | eGroove_object_rock = 1, |
||
3196 | eGroove_object_throb = 2, |
||
3197 | eGroove_object_shear = 3 |
||
3198 | } tGroove_object_mode; |
||
3199 | |||
3200 | typedef enum tGroove_axis_mode { |
||
3201 | eGroove_axis_x = 0, |
||
3202 | eGroove_axis_y = 1, |
||
3203 | eGroove_axis_z = 2 |
||
3204 | } tGroove_axis_mode; |
||
3205 | |||
3206 | typedef enum tAnimation_time_mode { |
||
3207 | eTime_mode_approximate = 0, |
||
3208 | eTime_mode_accurate = 1 |
||
3209 | } tAnimation_time_mode; |
||
3210 | |||
3211 | typedef enum tInterrupt_status { |
||
3212 | eInterrupt_none = 0, |
||
3213 | eInterrupt_less_than = 1, |
||
3214 | eInterrupt_greater_than = 2 |
||
3215 | } tInterrupt_status; |
||
3216 | |||
3217 | typedef enum tRotate_mode { |
||
3218 | eRotate_mode_x = 0, |
||
3219 | eRotate_mode_y = 1, |
||
3220 | eRotate_mode_z = 2 |
||
3221 | } tRotate_mode; |
||
3222 | |||
3223 | typedef enum tScale_mode { |
||
3224 | eScale_mode_all = 0, |
||
3225 | eScale_mode_x = 1, |
||
3226 | eScale_mode_y = 2, |
||
3227 | eScale_mode_z = 3 |
||
3228 | } tScale_mode; |
||
3229 | |||
3230 | typedef struct tFunkotronic_spec { // size: 0xd8 |
||
3231 | int owner; // @0x0 |
||
3232 | br_material* material; // @0x4 |
||
3233 | tFunk_trigger_mode mode; // @0x8 |
||
3234 | tMatrix_mod_type matrix_mod_type; // @0xc |
||
3235 | tMove_mode matrix_mode; // @0x10 |
||
3236 | union { // size: 0x18 |
||
3237 | struct { // size: 0x4 |
||
3238 | float period; // @0x0 |
||
3239 | } spin_info; // @0x0 |
||
3240 | struct { // size: 0x10 |
||
3241 | float period; // @0x0 |
||
3242 | br_scalar x_centre; // @0x4 |
||
3243 | br_scalar y_centre; // @0x8 |
||
3244 | float rock_angle; // @0xc |
||
3245 | } rock_info; // @0x0 |
||
3246 | struct { // size: 0x18 |
||
3247 | float x_period; // @0x0 |
||
3248 | float y_period; // @0x4 |
||
3249 | br_scalar x_centre; // @0x8 |
||
3250 | br_scalar y_centre; // @0xc |
||
3251 | float x_magnitude; // @0x10 |
||
3252 | float y_magnitude; // @0x14 |
||
3253 | } throb_info; // @0x0 |
||
3254 | struct { // size: 0x10 |
||
3255 | float x_period; // @0x0 |
||
3256 | float y_period; // @0x4 |
||
3257 | float x_magnitude; // @0x8 |
||
3258 | float y_magnitude; // @0xc |
||
3259 | } slither_info; // @0x0 |
||
3260 | struct { // size: 0x8 |
||
3261 | float x_period; // @0x0 |
||
3262 | float y_period; // @0x4 |
||
3263 | } roll_info; // @0x0 |
||
3264 | } matrix_mod_data; // @0x14 |
||
3265 | tMove_mode lighting_animation_type; // @0x2c |
||
3266 | float lighting_animation_period; // @0x30 |
||
3267 | float ambient_base; // @0x34 |
||
3268 | float ambient_delta; // @0x38 |
||
3269 | float direct_base; // @0x3c |
||
3270 | float direct_delta; // @0x40 |
||
3271 | float specular_base; // @0x44 |
||
3272 | float specular_delta; // @0x48 |
||
3273 | tTexture_animation_type texture_animation_type; // @0x4c |
||
3274 | tAnimation_time_mode time_mode; // @0x50 |
||
3275 | float last_frame; // @0x54 |
||
3276 | union { // size: 0x78 |
||
3277 | struct { // size: 0x30 |
||
3278 | tMove_mode mode; // @0x0 |
||
3279 | float period; // @0x4 |
||
3280 | int texture_count; // @0x8 |
||
3281 | int current_frame; // @0xc |
||
3282 | br_pixelmap* textures[8]; // @0x10 |
||
3283 | } frames_info; // @0x0 |
||
3284 | struct { // size: 0x78 |
||
3285 | tU8* flic_data; // @0x0 |
||
3286 | tU32 flic_data_length; // @0x4 |
||
3287 | tFlic_descriptor flic_descriptor; // @0x8 |
||
3288 | } flic_info; // @0x0 |
||
3289 | } texture_animation_data; // @0x58 |
||
3290 | int proximity_count; // @0xd0 |
||
3291 | br_vector3* proximity_array; // @0xd4 |
||
3292 | } tFunkotronic_spec; |
||
3293 | |||
3294 | typedef struct tGroovidelic_spec { // size: 0x80 |
||
3295 | int owner; // @0x0 |
||
3296 | int done_this_frame; // @0x4 |
||
3297 | br_actor* actor; // @0x8 |
||
3298 | tLollipop_mode lollipop_mode; // @0xc |
||
3299 | tGroove_trigger_mode mode; // @0x10 |
||
3300 | tGroove_path_mode path_type; // @0x14 |
||
3301 | tMove_mode path_mode; // @0x18 |
||
3302 | tInterrupt_status path_interrupt_status; // @0x1c |
||
3303 | float path_resumption_value; // @0x20 |
||
3304 | union { // size: 0x1c |
||
3305 | struct { // size: 0x1c |
||
3306 | float period; // @0x0 |
||
3307 | float x_delta; // @0x4 |
||
3308 | float y_delta; // @0x8 |
||
3309 | float z_delta; // @0xc |
||
3310 | br_vector3 centre; // @0x10 |
||
3311 | } straight_info; // @0x0 |
||
3312 | struct { // size: 0x18 |
||
3313 | float period; // @0x0 |
||
3314 | float radius; // @0x4 |
||
3315 | br_vector3 centre; // @0x8 |
||
3316 | tGroove_axis_mode axis; // @0x14 |
||
3317 | } circular_info; // @0x0 |
||
3318 | } path_data; // @0x24 |
||
3319 | br_vector3 object_centre; // @0x40 |
||
3320 | br_vector3 object_position; // @0x4c |
||
3321 | tGroove_object_mode object_type; // @0x58 |
||
3322 | tMove_mode object_mode; // @0x5c |
||
3323 | tInterrupt_status object_interrupt_status; // @0x60 |
||
3324 | float object_resumption_value; // @0x64 |
||
3325 | union { // size: 0x18 |
||
3326 | struct { // size: 0x8 |
||
3327 | float period; // @0x0 |
||
3328 | tGroove_axis_mode axis; // @0x4 |
||
3329 | } spin_info; // @0x0 |
||
3330 | struct { // size: 0x10 |
||
3331 | float period; // @0x0 |
||
3332 | float max_angle; // @0x4 |
||
3333 | float current_angle; // @0x8 |
||
3334 | tGroove_axis_mode axis; // @0xc |
||
3335 | } rock_info; // @0x0 |
||
3336 | struct { // size: 0x18 |
||
3337 | float x_period; // @0x0 |
||
3338 | float y_period; // @0x4 |
||
3339 | float z_period; // @0x8 |
||
3340 | float x_magnitude; // @0xc |
||
3341 | float y_magnitude; // @0x10 |
||
3342 | float z_magnitude; // @0x14 |
||
3343 | } throb_info; // @0x0 |
||
3344 | struct { // size: 0x18 |
||
3345 | float x_period; // @0x0 |
||
3346 | float y_period; // @0x4 |
||
3347 | float z_period; // @0x8 |
||
3348 | float x_magnitude; // @0xc |
||
3349 | float y_magnitude; // @0x10 |
||
3350 | float z_magnitude; // @0x14 |
||
3351 | } shear_info; // @0x0 |
||
3352 | } object_data; // @0x68 |
||
3353 | } tGroovidelic_spec; |
||
3354 | |||
3355 | typedef struct tMem_info { |
||
3356 | unsigned int largest_block_avail; |
||
3357 | unsigned int max_unlocked_page; |
||
3358 | unsigned int largest_lockable_page; |
||
3359 | unsigned int lin_addr_space; |
||
3360 | unsigned int num_free_pages_avail; |
||
3361 | unsigned int num_physical_pages_free; |
||
3362 | unsigned int total_physical_pages; |
||
3363 | unsigned int free_lin_addr_space; |
||
3364 | unsigned int size_of_page_file; |
||
3365 | unsigned int reserved[3]; |
||
3366 | } tMem_info; |
||
3367 | |||
3368 | typedef struct tIPX_netnum { |
||
3369 | unsigned char bNetwork[4]; |
||
3370 | } tIPX_netnum; |
||
3371 | |||
3372 | #endif |