- vg_loader_highwater( world_render_init, world_render_free, NULL );
- vg_loader_highwater( world_sfd_init, world_sfd_free, NULL );
- vg_loader_highwater( world_water_init, world_water_free, NULL );
- vg_loader_highwater( world_gates_init, world_gates_free, NULL );
- vg_loader_highwater( world_routes_init, world_routes_free, NULL );
+ vg_loader_highwater( world_render_init, NULL, NULL );
+ vg_loader_highwater( world_sfd_init, NULL, NULL );
+ vg_loader_highwater( world_water_init, NULL, NULL );
+ vg_loader_highwater( world_gates_init, NULL, NULL );
+ vg_loader_highwater( world_routes_init, NULL, NULL );
+
+ /* Allocate dynamic world memory arena */
+ u32 max_size = 72*1024*1024;
+ world.dynamic_vgl = vg_create_linear_allocator( vg_mem.rtmemory, max_size,
+ VG_MEMORY_SYSTEM );
+}
+
+VG_STATIC void world_audio_init(void)
+{
+ u32 size = vg_linear_remaining( vg_audio.audio_pool )
+ - sizeof(vg_linear_allocator);
+
+ world.audio_vgl = vg_create_linear_allocator( vg_audio.audio_pool,
+ size, VG_MEMORY_SYSTEM );
+}
+
+VG_STATIC void world_trigger_achievement( u32 uid )
+{
+ struct logic_achievement *ach = &world.logic_achievements[ uid ];
+
+ if( ach->achieved )
+ return;
+
+ steam_set_achievement( ach->achievement_id );
+ steam_store_achievements();
+
+ ach->achieved = 1;
+}
+
+VG_STATIC void world_run_relay( struct relay_target *rt );
+VG_STATIC void world_trigger_relay( u32 uid )
+{
+ struct logic_relay *relay = &world.logic_relays[ uid ];
+
+ for( int i=0; i<relay->target_count; i++ )
+ {
+ world_run_relay( &relay->targets[i] );
+ }
+}
+
+VG_STATIC void world_trigger_audio( u32 uid )
+{
+ struct world_audio_thing *wat = &world.audio_things[ uid ];
+
+ audio_lock();
+ audio_player_playclip( &wat->player,
+ &wat->temp_embedded_clip );
+ audio_unlock();