6 typedef struct ent_spawn ent_spawn
;
7 typedef struct ent_light ent_light
;
8 typedef struct ent_gate ent_gate
;
9 typedef struct ent_route_node ent_route_node
;
10 typedef struct ent_path_index ent_path_index
;
11 typedef struct ent_checkpoint ent_checkpoint
;
12 typedef struct ent_route ent_route
;
13 typedef struct ent_water ent_water
;
14 typedef struct ent_audio_clip ent_audio_clip
;
15 typedef struct volume_particles volume_particles
;
16 typedef struct volume_trigger volume_trigger
;
17 typedef struct ent_volume ent_volume
;
18 typedef struct ent_audio ent_audio
;
19 typedef struct ent_marker ent_marker
;
20 typedef struct ent_traffic ent_traffic
;
21 typedef struct ent_font ent_font
;
22 typedef struct ent_font_variant ent_font_variant
;
23 typedef struct ent_glyph ent_glyph
;
24 typedef struct ent_skateshop ent_skateshop
;
25 typedef struct ent_camera ent_camera
;
26 typedef struct ent_swspreview ent_swspreview
;
27 typedef struct ent_worldinfo ent_worldinfo
;
28 typedef struct ent_ccmd ent_ccmd
;
29 typedef struct ent_objective ent_objective
;
30 typedef struct ent_challenge ent_challenge
;
31 typedef struct ent_relay ent_relay
;
32 typedef struct ent_cubemap ent_cubemap
;
33 typedef struct ent_miniworld ent_miniworld
;
34 typedef struct ent_prop ent_prop
;
47 k_ent_font_variant
= 10,
51 k_ent_swspreview
= 14,
62 static u32
mdl_entity_id_type( u32 entity_id
){
63 return (entity_id
& 0x0fff0000) >> 16;
66 static u32
mdl_entity_id_id( u32 entity_id
){
67 return entity_id
& 0x0000ffff;
70 static u32
mdl_entity_id( u32 type
, u32 index
){
71 return (type
& 0xfffff)<<16 | (index
& 0xfffff);
75 k_ent_function_trigger
,
76 k_ent_function_particle_spawn
,
77 k_ent_function_trigger_leave
81 mdl_transform transform
;
86 k_light_type_point
= 0,
91 mdl_transform transform
;
106 k_gate_type_unlinked
= 0,
107 k_gate_type_teleport
= 1,
108 k_gate_type_nonlocal_unlinked
= 2,
109 k_gate_type_nonlocel
= 3
115 k_ent_gate_linked
= 0x1, /* this is a working portal */
116 k_ent_gate_nonlocal
= 0x2, /* use the key string to link this portal.
117 NOTE: if set, it adds the flip flag. */
118 k_ent_gate_flip
= 0x4, /* flip direction 180* for exiting portal */
119 k_ent_gate_custom_mesh
= 0x8, /* use a custom submesh instead of default */
120 k_ent_gate_locked
= 0x10,/* has to be unlocked to be useful */
122 k_ent_gate_clean_pass
= 0x20,/* player didn't rewind while getting here */
136 m4x3f to_world
, transport
;
147 u16 routes
[4]; /* routes that pass through this gate */
151 u32 submesh_start
, submesh_count
;
154 struct ent_route_node
{
156 u8 ref_count
, ref_total
;
159 struct ent_path_index
{
163 struct ent_checkpoint
{
171 mdl_transform transform
;
172 u32 official_track_id
;
177 u16 checkpoints_start
,
183 u16 active_checkpoint
,
187 m4x3f board_transform
;
191 u32 id_camera
; /* v103+ */
193 /* v104+, but always accessible */
194 u32 achievment_status
;
199 mdl_transform transform
;
201 u32 reserved0
, reserved1
;
204 struct ent_audio_clip
{
213 struct volume_particles
{
217 struct volume_trigger
{
218 u32 event
, event_leave
;
221 enum ent_volume_flag
{
222 k_ent_volume_flag_particles
= 0x1,
223 k_ent_volume_flag_disabled
= 0x2
227 mdl_transform transform
;
228 m4x3f to_world
, to_local
;
233 volume_trigger trigger
;
234 volume_particles particles
;
239 mdl_transform transform
;
243 float volume
, crossfade
;
251 mdl_transform transform
;
256 k_skateshop_type_boardshop
= 0,
257 k_skateshop_type_charshop
= 1,
258 k_skateshop_type_worldshop
= 2,
259 k_skateshop_type_DELETED
= 3,
260 k_skateshop_type_server
= 4
263 struct ent_skateshop
{
264 mdl_transform transform
;
294 struct ent_swspreview
{
295 u32 id_camera
, id_display
, id_display1
;
299 mdl_transform transform
;
306 u32 index
; /* into the path */
310 mdl_transform transform
;
314 enum ent_menuitem_type
{
315 k_ent_menuitem_type_visual
= 0,
316 k_ent_menuitem_type_event_button
= 1,
317 k_ent_menuitem_type_page_button
= 2,
318 k_ent_menuitem_type_toggle
= 3,
319 k_ent_menuitem_type_slider
= 4,
320 k_ent_menuitem_type_page
= 5,
321 k_ent_menuitem_type_binding
= 6,
322 k_ent_menuitem_type_visual_nocol
= 7,
323 k_ent_menuitem_type_disabled
= 90
326 enum ent_menuitem_stack_behaviour
{
327 k_ent_menuitem_stack_append
= 0,
328 k_ent_menuitem_stack_replace
= 1
331 typedef struct ent_menuitem ent_menuitem
;
334 id_links
[4]; /* ent_menuitem */
335 f32 factive
, fvisible
;
337 mdl_transform transform
;
338 u32 submesh_start
, submesh_count
;
340 union{ u64 _u64
; /* force storage for 64bit pointers */
353 u32 id_min
, /* ent_marker */
355 id_handle
, /* ent_menuitem */
367 u32 id_check
, /* ent_menuitem */
369 v3f offset
; /* relative to parent */
375 id_entrypoint
, /* ent_menuitem */
376 id_viewpoint
; /* ent_camera */
388 struct ent_worldinfo
{
389 u32 pstr_name
, pstr_author
, pstr_desc
;
394 static ent_marker
*ent_find_marker( mdl_context
*mdl
,
395 mdl_array_ptr
*arr
, const char *alias
)
397 for( u32 i
=0; i
<mdl_arrcount(arr
); i
++ ){
398 ent_marker
*marker
= mdl_arritm( arr
, i
);
400 if( !strcmp( mdl_pstr( mdl
, marker
->pstr_alias
), alias
) ){
408 enum channel_behaviour
{
409 k_channel_behaviour_unlimited
= 0,
410 k_channel_behaviour_discard_if_full
= 1,
411 k_channel_behaviour_crossfade_if_full
= 2
414 enum probability_curve
{
415 k_probability_curve_constant
= 0,
416 k_probability_curve_wildlife_day
= 1,
417 k_probability_curve_wildlife_night
= 2
429 struct ent_font_variant
{
444 enum ent_objective_filter
{
445 k_ent_objective_filter_none
= 0x00000000,
446 k_ent_objective_filter_trick_shuvit
= 0x00000001,
447 k_ent_objective_filter_trick_kickflip
= 0x00000002,
448 k_ent_objective_filter_trick_treflip
= 0x00000004,
449 k_ent_objective_filter_trick_any
=
450 k_ent_objective_filter_trick_shuvit
|
451 k_ent_objective_filter_trick_treflip
|
452 k_ent_objective_filter_trick_kickflip
,
453 k_ent_objective_filter_flip_back
= 0x00000008,
454 k_ent_objective_filter_flip_front
= 0x00000010,
455 k_ent_objective_filter_flip_any
=
456 k_ent_objective_filter_flip_back
|
457 k_ent_objective_filter_flip_front
,
458 k_ent_objective_filter_grind_truck_any
= 0x00000020,
459 k_ent_objective_filter_grind_board_any
= 0x00000040,
460 k_ent_objective_filter_grind_any
=
461 k_ent_objective_filter_grind_truck_any
|
462 k_ent_objective_filter_grind_board_any
,
463 k_ent_objective_filter_footplant
= 0x00000080,
464 k_ent_objective_filter_passthrough
= 0x00000100
467 enum ent_objective_flag
{
468 k_ent_objective_hidden
= 0x1,
469 k_ent_objective_passed
= 0x2
472 struct ent_objective
{
473 mdl_transform transform
;
484 enum ent_challenge_flag
{
485 k_ent_challenge_timelimit
= 0x1
488 struct ent_challenge
{
489 mdl_transform transform
;
507 u32 resolution
, live
, texture_id
,
508 framebuffer_id
, renderbuffer_id
, placeholder
[2];
511 typedef struct ent_call ent_call
;
517 struct ent_miniworld
{
518 mdl_transform transform
;
525 mdl_transform transform
;
526 u32 submesh_start
, submesh_count
, flags
;
530 static void entity_call( world_instance
*world
, ent_call
*call
);
532 #endif /* ENTITY_H */