3 #include "vg/vg_audio.h"
4 #include "vg/vg_ui/imgui.h"
7 typedef struct ent_spawn ent_spawn
;
8 typedef struct ent_light ent_light
;
9 typedef struct ent_gate ent_gate
;
10 typedef struct ent_route_node ent_route_node
;
11 typedef struct ent_path_index ent_path_index
;
12 typedef struct ent_checkpoint ent_checkpoint
;
13 typedef struct ent_route ent_route
;
14 typedef struct ent_water ent_water
;
15 typedef struct ent_audio_clip ent_audio_clip
;
16 typedef struct volume_particles volume_particles
;
17 typedef struct volume_trigger volume_trigger
;
18 typedef struct ent_volume ent_volume
;
19 typedef struct ent_audio ent_audio
;
20 typedef struct ent_marker ent_marker
;
21 typedef struct ent_traffic ent_traffic
;
22 typedef struct ent_font ent_font
;
23 typedef struct ent_font_variant ent_font_variant
;
24 typedef struct ent_glyph ent_glyph
;
25 typedef struct ent_skateshop ent_skateshop
;
26 typedef struct ent_camera ent_camera
;
27 typedef struct ent_swspreview ent_swspreview
;
28 typedef struct ent_worldinfo ent_worldinfo
;
29 typedef struct ent_ccmd ent_ccmd
;
30 typedef struct ent_objective ent_objective
;
31 typedef struct ent_challenge ent_challenge
;
32 typedef struct ent_relay ent_relay
;
33 typedef struct ent_cubemap ent_cubemap
;
34 typedef struct ent_miniworld ent_miniworld
;
35 typedef struct ent_prop ent_prop
;
36 typedef struct ent_region ent_region
;
37 typedef struct ent_list ent_list
;
38 typedef struct ent_glider ent_glider
;
39 typedef struct ent_npc ent_npc
;
52 k_ent_font_variant
= 10,
56 k_ent_swspreview
= 14,
72 typedef struct ent_call ent_call
;
73 typedef enum entity_call_result entity_call_result
;
74 enum entity_call_result
76 k_entity_call_result_OK
,
77 k_entity_call_result_unhandled
,
78 k_entity_call_result_invalid
81 static inline u32
mdl_entity_id_type( u32 entity_id
)
83 return (entity_id
& 0x0fff0000) >> 16;
86 static inline u32
mdl_entity_id_id( u32 entity_id
)
88 return entity_id
& 0x0000ffff;
91 static inline u32
mdl_entity_id( u32 type
, u32 index
)
93 return (type
& 0xfffff)<<16 | (index
& 0xfffff);
98 k_ent_function_trigger
,
99 k_ent_function_particle_spawn
,
100 k_ent_function_trigger_leave
104 mdl_transform transform
;
109 k_light_type_point
= 0,
110 k_light_type_spot
= 1
114 mdl_transform transform
;
129 k_gate_type_unlinked
= 0,
130 k_gate_type_teleport
= 1,
131 k_gate_type_nonlocal_unlinked
= 2,
132 k_gate_type_nonlocel
= 3
138 k_ent_gate_linked
= 0x1, /* this is a working portal */
139 k_ent_gate_nonlocal
= 0x2, /* use the key string to link this portal.
140 NOTE: if set, it adds the flip flag. */
141 k_ent_gate_flip
= 0x4, /* flip direction 180* for exiting portal */
142 k_ent_gate_custom_mesh
= 0x8, /* use a custom submesh instead of default */
143 k_ent_gate_locked
= 0x10,/* has to be unlocked to be useful */
145 k_ent_gate_clean_pass
= 0x20,/* player didn't rewind while getting here */
159 m4x3f to_world
, transport
;
170 u16 routes
[4]; /* routes that pass through this gate */
174 u32 submesh_start
, submesh_count
;
177 struct ent_route_node
{
179 u8 ref_count
, ref_total
;
182 struct ent_path_index
{
186 struct ent_checkpoint
{
195 enum ent_route_flag
{
196 k_ent_route_flag_achieve_silver
= 0x1,
197 k_ent_route_flag_achieve_gold
= 0x2,
199 k_ent_route_flag_out_of_zone
= 0x10,
200 k_ent_region_flag_hasname
= 0x20
205 mdl_transform transform
;
206 u32 official_track_id
; /* TODO: remove this */
211 u16 checkpoints_start
,
217 u16 active_checkpoint
,
221 m4x3f board_transform
;
225 u32 id_camera
; /* v103+ */
227 /* v104+, but always accessible */
230 f32 ui_stopper
, ui_residual
;
232 ui_px ui_first_block_width
, ui_residual_block_w
;
236 mdl_transform transform
;
238 u32 reserved0
, reserved1
;
241 struct ent_audio_clip
{
250 struct volume_particles
{
254 struct volume_trigger
{
255 i32 event
, event_leave
;
258 enum ent_volume_flag
{
259 k_ent_volume_flag_particles
= 0x1,
260 k_ent_volume_flag_disabled
= 0x2
264 mdl_transform transform
;
265 m4x3f to_world
, to_local
;
270 volume_trigger trigger
;
271 volume_particles particles
;
276 mdl_transform transform
;
280 float volume
, crossfade
;
288 mdl_transform transform
;
293 k_skateshop_type_boardshop
= 0,
294 k_skateshop_type_charshop
= 1,
295 k_skateshop_type_worldshop
= 2,
296 k_skateshop_type_DELETED
= 3,
297 k_skateshop_type_server
= 4
300 struct ent_skateshop
{
301 mdl_transform transform
;
331 struct ent_swspreview
{
332 u32 id_camera
, id_display
, id_display1
;
336 mdl_transform transform
;
343 u32 index
; /* into the path */
347 mdl_transform transform
;
351 enum ent_menuitem_type
{
352 k_ent_menuitem_type_visual
= 0,
353 k_ent_menuitem_type_event_button
= 1,
354 k_ent_menuitem_type_page_button
= 2,
355 k_ent_menuitem_type_toggle
= 3,
356 k_ent_menuitem_type_slider
= 4,
357 k_ent_menuitem_type_page
= 5,
358 k_ent_menuitem_type_binding
= 6,
359 k_ent_menuitem_type_visual_nocol
= 7,
360 k_ent_menuitem_type_disabled
= 90
363 enum ent_menuitem_stack_behaviour
{
364 k_ent_menuitem_stack_append
= 0,
365 k_ent_menuitem_stack_replace
= 1
368 typedef struct ent_menuitem ent_menuitem
;
371 id_links
[4]; /* ent_menuitem */
372 f32 factive
, fvisible
;
374 mdl_transform transform
;
375 u32 submesh_start
, submesh_count
;
377 union{ u64 _u64
; /* force storage for 64bit pointers */
390 u32 id_min
, /* ent_marker */
392 id_handle
, /* ent_menuitem */
404 u32 id_check
, /* ent_menuitem */
406 v3f offset
; /* relative to parent */
412 id_entrypoint
, /* ent_menuitem */
413 id_viewpoint
; /* ent_camera */
425 struct ent_worldinfo
{
426 u32 pstr_name
, pstr_author
, pstr_desc
;
432 ent_marker
*ent_find_marker( mdl_context
*mdl
, mdl_array_ptr
*arr
,
435 enum channel_behaviour
{
436 k_channel_behaviour_unlimited
= 0,
437 k_channel_behaviour_discard_if_full
= 1,
438 k_channel_behaviour_crossfade_if_full
= 2
441 enum probability_curve
{
442 k_probability_curve_constant
= 0,
443 k_probability_curve_wildlife_day
= 1,
444 k_probability_curve_wildlife_night
= 2
456 struct ent_font_variant
{
471 enum ent_objective_filter
{
472 k_ent_objective_filter_none
= 0x00000000,
473 k_ent_objective_filter_trick_shuvit
= 0x00000001,
474 k_ent_objective_filter_trick_kickflip
= 0x00000002,
475 k_ent_objective_filter_trick_treflip
= 0x00000004,
476 k_ent_objective_filter_trick_any
=
477 k_ent_objective_filter_trick_shuvit
|
478 k_ent_objective_filter_trick_treflip
|
479 k_ent_objective_filter_trick_kickflip
,
480 k_ent_objective_filter_flip_back
= 0x00000008,
481 k_ent_objective_filter_flip_front
= 0x00000010,
482 k_ent_objective_filter_flip_any
=
483 k_ent_objective_filter_flip_back
|
484 k_ent_objective_filter_flip_front
,
485 k_ent_objective_filter_grind_truck_any
= 0x00000020,
486 k_ent_objective_filter_grind_board_any
= 0x00000040,
487 k_ent_objective_filter_grind_any
=
488 k_ent_objective_filter_grind_truck_any
|
489 k_ent_objective_filter_grind_board_any
,
490 k_ent_objective_filter_footplant
= 0x00000080,
491 k_ent_objective_filter_passthrough
= 0x00000100
494 enum ent_objective_flag
{
495 k_ent_objective_hidden
= 0x1,
496 k_ent_objective_passed
= 0x2
499 struct ent_objective
{
500 mdl_transform transform
;
511 enum ent_challenge_flag
{
512 k_ent_challenge_timelimit
= 0x1
515 struct ent_challenge
{
516 mdl_transform transform
;
530 i32 targets_events
[4];
535 u32 resolution
, live
, texture_id
,
536 framebuffer_id
, renderbuffer_id
, placeholder
[2];
539 struct ent_miniworld
{
540 mdl_transform transform
;
547 mdl_transform transform
;
548 u32 submesh_start
, submesh_count
, flags
, pstr_alias
;
552 mdl_transform transform
;
553 u32 submesh_start
, submesh_count
, pstr_title
, flags
, zone_volume
,
560 mdl_transform transform
;
567 mdl_transform transform
;
568 u32 id
, context
, camera
;
579 typedef enum entity_call_result
580 (*fn_entity_call_handler
)( world_instance
*, ent_call
*);
582 void entity_call( world_instance
*world
, ent_call
*call
);