move registration order
authorhgn <hgodden00@gmail.com>
Thu, 3 Jul 2025 00:55:49 +0000 (01:55 +0100)
committerhgn <hgodden00@gmail.com>
Thu, 3 Jul 2025 00:55:49 +0000 (01:55 +0100)
40 files changed:
build.c
src/audio.c
src/compass.c
src/compass.h
src/control_overlay.c
src/control_overlay.h
src/ent_atom.c
src/ent_atom.h
src/ent_challenge.c
src/ent_challenge.h
src/ent_tornado.c
src/ent_tornado.h
src/gui.h
src/menu.c
src/menu.h
src/metascene.c
src/metascene.h
src/network.c
src/network.h
src/player.c
src/player.h
src/player_api.h
src/player_glide.c
src/player_glide.h
src/player_ragdoll.c
src/player_ragdoll.h
src/player_remote.c
src/player_remote.h
src/render.c
src/render.h
src/replay2.c
src/replay2.h
src/skaterift.c
src/steam.c
src/steam.h
src/workshop.c
src/workshop.h
src/world_load.c
src/world_render.c
src/world_render.h

diff --git a/build.c b/build.c
index d110b588329b37ec6df92703293578dfe8d2fe1c..010dc91000c9524c788ff1f1f5b1cbcc640ac167 100644 (file)
--- a/build.c
+++ b/build.c
@@ -397,7 +397,6 @@ void s_testing_build_win(void)
    {
       .optimization = 0,
       .debug_asan = 0,
-      .pdb = 1,
       .platform = k_platform_windows,
       .arch = k_architecture_x86_64,
       .compiler = k_compiler_zigcc,
@@ -464,52 +463,11 @@ void s_dbtest_build(void)
    vg_compiler_run( &test_proj, &vg_test_env, &conf, sources.buffer, "dbtest", k_obj_type_exe );
 }
 
-#include "vg/vg_kv.h"
-#include "vg/vg_kv.c"
-
 int main( int argc, const char *argv[] )
 {
    vg_log_init();
    _vg_opt_init( argc, argv );
 
-   vg_stack_allocator stacky;
-   vg_stack_init( &stacky, NULL, 0, "Stacky" );
-   vg_stack_set_flags( &stacky, VG_STACK_ALLOCATOR_METADATA|VG_STACK_ALLOCATOR_DOUBLE_IF_FULL );
-   u32 size;
-   const char *src = vg_file_read( &stacky, "/home/harry/Documents/vg_res/test.kv", &size, 1 );
-
-   if( src )
-   {
-      vg_kvs kvs;
-      vg_kv_parse( &kvs, src, &stacky );
-      vg_kv_print_info( &kvs );
-      vg_kv_print_tree( &kvs, 0, 0 );
-
-      u32 db = vg_kv_find( &kvs, 0, "skaterift_database" );
-      if( db )
-      {
-         vg_success( "Found db\n" );
-
-         u32 users = vg_kv_find( &kvs, db, "users" );
-         if( users )
-         {
-            vg_success( "Found users\n" );
-
-            u32 vt = vg_kv_find( &kvs, users, "value_type" );
-            if( vt )
-            {
-               u32 val_length;
-               const char *val = vg_kv_value( &kvs, vt, &val_length );
-
-               if( val )
-                  vg_success( "-> %.*s\n", val_length, val );
-            }
-         }
-      }
-   }
-
-   return 0;
-
    const char *arg;
 
    if( (arg = vg_long_opt_arg( "glsl-dir", "Specify output directory for preprocessed GLSL" )) )
@@ -521,6 +479,12 @@ int main( int argc, const char *argv[] )
    if( vg_opt('r', NULL) )
       vg_test_env.optimization = 3;
 
+   if( vg_long_opt( "tsan", NULL ) )
+   {
+      vg_test_env.debug_asan = 0;
+      vg_test_env.thread_san = 1;
+   }
+
    if( vg_long_opt( "no-asan", NULL ) )
       vg_test_env.debug_asan = 0;
 
index 2d47ca542f8bf2d88627ad09ac5e0810d311341c..8186c46d99fb326615dbf067a4ff53d0245ea88b 100644 (file)
@@ -213,7 +213,6 @@ void audio_init(void)
    vg_audio_lock();
    air_audio_data.channel_id = vg_audio_get_first_idle_channel();
    VG_ASSERT( air_audio_data.channel_id );
-
    vg_audio_set_channel_clip( air_audio_data.channel_id, &air_synth );
    vg_audio_start_channel( air_audio_data.channel_id );
    vg_audio_unlock();
index 240b12f5bf6fcc7a9472291317ee84d16be3db8a..019241b80d52f1a7182ac3d3d095498a3f9e3562 100644 (file)
@@ -4,6 +4,11 @@
 
 struct _compass _compass = { .alpha = 1 };
 
+void compass_register(void)
+{
+   vg_console_reg_var( "compass_alpha", &_compass.alpha, k_var_dtype_f32, VG_VAR_PERSISTENT );
+}
+
 void compass_init(void)
 {
    mdl_context *mdl = &_compass.mdl;
@@ -25,8 +30,6 @@ void compass_init(void)
    _compass.sm_comp_w = mdl_get_submesh_index( mdl, "comp_w" );
    _compass.sm_comp_objective = mdl_get_submesh_index( mdl, "comp_objective" );
    mdl_close( mdl );
-
-   vg_console_reg_var( "compass_alpha", &_compass.alpha, k_var_dtype_f32, VG_VAR_PERSISTENT );
 }
 
 static void compass_project( m3x3f base_projection, f32 x, f32 height )
index f8b08c0be5ea15733ec8e975e6f2c089a96aecaf..8337610812fbf5202ed44ac6fc57d93db8247645 100644 (file)
@@ -24,5 +24,6 @@ struct _compass
 extern _compass;
 
 void compass_init(void);
+void compass_register(void);
 void compass_render_texture(void);
 void compass_render_imgui( ui_context *ctx );
index a9aaa9683ce4ce6b679971fadb4a4ae7c37a7838..9c4293800836161dc5cd64ce4f610a49e68d8666 100644 (file)
@@ -31,6 +31,11 @@ static void control_overlay_init_finish( void *userdata )
    }
 }
 
+void control_overlay_register(void)
+{
+   vg_console_reg_var( "control_overlay", &control_overlay.enabled, k_var_dtype_i32, VG_VAR_PERSISTENT );
+}
+
 void control_overlay_init(void)
 {
    mdl_context *mdl = &control_overlay.mdl;
@@ -40,8 +45,6 @@ void control_overlay_init(void)
    mdl_async_full_load_std( mdl, NULL );
    mdl_close( mdl );
    vg_async_call( &vg.main_tasks, control_overlay_init_finish, NULL );
-
-   vg_console_reg_var( "control_overlay", &control_overlay.enabled, k_var_dtype_i32, VG_VAR_PERSISTENT );
 }
 
 static void draw_key( bool press, bool wide )
index 089136de7026cbfaeaa9aedb939b4f6a101fd273..a8f734abc8bf45fa9f787e9eacedb2e010cb8065 100644 (file)
@@ -15,3 +15,4 @@ extern control_overlay;
 
 void control_overlay_render(void);
 void control_overlay_init(void);
+void control_overlay_register(void);
index ad8c7332c09c405e1f06522ff3b3d52e13623794..5654eceb56781d836f450569ff52df4e34651f68 100644 (file)
@@ -251,7 +251,7 @@ static void _ent_atom_ccmd_poll( int argc, const char *argv[] )
    }
 }
 
-void _ent_atom_init(void)
+void _ent_atom_register(void)
 {
    vg_console_reg_cmd( "atom", _ent_atom_ccmd, _ent_atom_ccmd_poll );
 }
index 28609978f45ee947f8ff03cdcf1c15387886cc6e..5620c1beee5e32aa901eb8a2ba8c9bf58ac7bc11 100644 (file)
@@ -23,4 +23,4 @@ void _atom_notify( enum e_atom_list list, const char *alias );
 void _atom_notify_list( enum e_atom_list list );
 
 entity_event_result _ent_atom_event( ent_event *event );
-void _ent_atom_init(void);
+void _ent_atom_register(void);
index d925f6525a55c24381e8e704274aadb5a02112e8..e8eec541068fc21938bdb85f5e1649e4fd8d02b1 100644 (file)
@@ -393,7 +393,7 @@ static int _skaterift_challenge_ccmd( int argc, const char *argv[] )
    return 1;
 }
 
-void _ent_challenge_init(void)
+void _ent_challenge_register(void)
 {
    vg_console_reg_cmd( "challenge", _skaterift_challenge_ccmd, NULL );
 }
index e449e6f1ef680d61fa795a7f313fb9fb73049c37..0e3a860ed0d3b2c2c13064cd0dbea1ff08e816f6 100644 (file)
@@ -6,4 +6,4 @@ void _ent_challenge_ui( ui_context *ctx );
 void _restart_active_challenge(void);
 void _ent_challenge_complete( ent_challenge *challenge );
 void _ent_challenge_win(void);
-void _ent_challenge_init(void);
+void _ent_challenge_register(void);
index cb38b8ab1edeb081cc9e715a54a3137bbd125ef2..52b33d48a5b65b70dd0f5471f8c8619d2eeaed17 100644 (file)
@@ -5,7 +5,7 @@ static f32 k_tornado_strength = 0.0f,
            k_tornado_ratio    = 0.5f,
            k_tornado_range    = 10.f;
 
-void ent_tornado_init(void)
+void ent_tornado_register(void)
 {
    vg_console_reg_var( "k_tonado_strength", &k_tornado_strength,
                         k_var_dtype_f32, VG_VAR_PERSISTENT|VG_VAR_CHEAT );
index f89c070246273503154a2f5b98251308e77e72b1..c2dfb8be48d5aaf0709a1aba0cdd61fc6090f446 100644 (file)
@@ -1,6 +1,6 @@
 #pragma once
 
-void ent_tornado_init(void);
+void ent_tornado_register(void);
 void ent_tornado_debug(void);
 void ent_tornado_forces( v3f co, v3f cv, v3f out_a );
 void ent_tornado_pre_update(void);
index 7ff3678a3dcedf46bed085592b4bb1632fd9a9a2..cf506b20d9bf79f98aff0782f325db32f30bf386 100644 (file)
--- a/src/gui.h
+++ b/src/gui.h
@@ -347,10 +347,14 @@ static void gui_icon_setcolour( v4f colour ){
    v4_copy( colour, gui.cur_icon_colour );
 }
 
+void gui_register(void)
+{
+   vg_console_reg_cmd( "gui_location", gui_location_print_ccmd, NULL );
+}
+
 static void gui_init(void)
 {
    font3d_load( &gui.font, "models/rs_font.mdl", &vg.rtmem );
-   vg_console_reg_cmd( "gui_location", gui_location_print_ccmd, NULL );
 
    /* load icons */
    mdl_context *mdl = &gui.model_icons;
index fff11907704e8c16b80965fcf7d26f40dd268b26..301f7ca0f296425a3a54768a6f37eabf7e3d84f9 100644 (file)
@@ -33,11 +33,14 @@ static int cmd_menu_impromptu( int argc, const char *argv[] )
    return 1;
 }
 
-void menu_init(void)
+void menu_register(void)
 {
    vg_console_reg_var( "skip_starter_menu", &menu.skip_starter, k_var_dtype_i32, VG_VAR_PERSISTENT );
    vg_console_reg_cmd( "menu_impromptu", cmd_menu_impromptu, NULL );
+}
 
+void menu_init(void)
+{
    u32 flags = VG_TEX2D_CLAMP|VG_TEX2D_NOMIP|VG_TEX2D_NEAREST;
    vg_tex2d_load_qoi_async_file( "textures/prem.qoi", flags, &menu.prem_tex );
    vg_tex2d_load_qoi_async_file( "textures/guide_pump.qoi", flags, &menu.guide_pump_tex );
index 4eda5a29a3039de07358b4fc6c5a7b56bfe1727d..242cb74cfadbde1f13f0a423f8fcf9cf7d87cd6c 100644 (file)
@@ -81,6 +81,7 @@ struct global_menu
 }
 extern menu;
 
+void menu_register(void);
 void menu_init(void);
 void menu_at_begin(void);
 void menu_gui( ui_context *ctx );
index 6a6b5c866f5acef42870b02baf53bf4f9e285c64..7c75699de621babaf0d640a89a649d387b0b7dc9 100644 (file)
@@ -45,8 +45,8 @@ void _cutscene_unload(void)
 {
    vg_info( "Unloading cutscene\n" );
    vg_audio_lock();
-   vg_audio_fadeout_flagged_audio( AUDIO_FLAG_CUTSCENE, 1.0f );
    vg_audio_set_flagged_pause( AUDIO_FLAG_CUTSCENE, 0 );
+   vg_audio_fadeout_flagged_audio( AUDIO_FLAG_CUTSCENE, 1.0f );
    vg_audio_unlock();
 
    for( u32 i=0; i<_cutscene.unique_refs; i ++ )
@@ -146,14 +146,14 @@ static void cutscene_load_thread( vg_async_task *task )
    struct cutscene_load_info *info = (void *)task->data;
    vg_info( "Loading cutscene: %s\n", info->path );
 
-   _cutscene.stack = vg_stack_make_substack( &vg.rtmem, VG_MB(20), "Cutscene Stack" );
-   metascene_load( &_cutscene.meta, info->path, _cutscene.stack );
+   vg_stack_init( &_cutscene.stack, NULL, VG_MB(20), "Cutscene Stack" );
+   metascene_load( &_cutscene.meta, info->path, &_cutscene.stack );
 
    _cutscene.instance_count = af_arrcount( &_cutscene.meta.instances );
-   _cutscene.instances = vg_stack_allocate( _cutscene.stack, sizeof(struct cs_instance) * _cutscene.instance_count, 
+   _cutscene.instances = vg_stack_allocate( &_cutscene.stack, sizeof(struct cs_instance) * _cutscene.instance_count, 
                                              8, "Instances" );
 
-   _cutscene.refs = vg_stack_allocate( _cutscene.stack, 0, 8, "References" );
+   _cutscene.refs = vg_stack_allocate( &_cutscene.stack, 0, 8, "References" );
    _cutscene.unique_refs = 0;
    for( u32 i=0; i < _cutscene.instance_count; i ++ )
    {
@@ -178,7 +178,7 @@ static void cutscene_load_thread( vg_async_task *task )
 
       if( !ref )
       {
-         _cutscene.refs = vg_stack_extend_last( _cutscene.stack, sizeof(struct model_ref) );
+         _cutscene.refs = vg_stack_extend_last( &_cutscene.stack, sizeof(struct model_ref) );
          ref_id = _cutscene.unique_refs;
          ref = &_cutscene.refs[ ref_id ];
          ref->name = name;
@@ -205,20 +205,20 @@ static void cutscene_load_thread( vg_async_task *task )
       vg_strcat( &mdl_path, ".mdl" );
 
       vg_info( "Loading instance model: %s\n", mdl_path.buffer );
-      mdl_open( &ref->mdl, mdl_path.buffer, _cutscene.stack );
-      mdl_load_metadata_block( &ref->mdl, _cutscene.stack );
+      mdl_open( &ref->mdl, mdl_path.buffer, &_cutscene.stack );
+      mdl_load_metadata_block( &ref->mdl, &_cutscene.stack );
       mdl_async_full_load_std( &ref->mdl, NULL );
       mdl_close( &ref->mdl );
 
       u32 skeleton_count = ref->mdl.armature_count;
       if( skeleton_count )
       {
-         ref->skeletons = vg_stack_allocate( _cutscene.stack, sizeof(struct cs_skeleton) * skeleton_count, 8, "Skeletons" );
+         ref->skeletons = vg_stack_allocate( &_cutscene.stack, sizeof(struct cs_skeleton) * skeleton_count, 8, "Skeletons" );
          ref->total_skinning_bones = 0;
          for( u32 j=0; j<skeleton_count; j ++ )
          {
             struct cs_skeleton *skele = &ref->skeletons[ j ];
-            skeleton_setup( &skele->sk, &ref->mdl, j, _cutscene.stack );
+            skeleton_setup( &skele->sk, &ref->mdl, j, &_cutscene.stack );
             skele->skinning_offset = ref->total_skinning_bones;
             ref->total_skinning_bones += skele->sk.bone_count;
          }
@@ -236,7 +236,7 @@ static void cutscene_load_thread( vg_async_task *task )
       struct cs_instance *ins = &_cutscene.instances[ i ];
       struct model_ref *ref = &_cutscene.refs[ ins->ref_id ];
 
-      ins->skinning_data = vg_stack_allocate( _cutscene.stack, sizeof(m4x3f) * ref->total_skinning_bones,
+      ins->skinning_data = vg_stack_allocate( &_cutscene.stack, sizeof(m4x3f) * ref->total_skinning_bones,
                                               8, "Skinning Data" );
       for( u32 j=0; j<ref->total_skinning_bones; j ++ )
          m4x3_identity( ins->skinning_data[ j ] );
@@ -280,7 +280,7 @@ static void cutscene_load_thread( vg_async_task *task )
             clip->_.clip.size = 0;
          }
 
-         audio_clip_load( &clip->_.clip, _cutscene.stack );
+         audio_clip_load( &clip->_.clip, &_cutscene.stack );
       }
    }
 
@@ -481,7 +481,7 @@ void cutscene_update( f32 delta )
          return;
       }
 
-      vg_stack_free( _cutscene.stack );
+      vg_stack_free( &_cutscene.stack );
       _cutscene.state = k_cutscene_state_none;
       _cutscene.marker_this_frame = NULL;
       _cutscene.subtitle = NULL;
@@ -1011,7 +1011,7 @@ static int cmd_cutscene_inspector( int argc, const char *argv[] )
    return 1;
 }
 
-void cutscene_init(void)
+void cutscene_register(void)
 {
    vg_console_reg_cmd( "cutscene_play", cmd_cutscene_play, NULL );
    vg_console_reg_cmd( "cutscene_inspector", cmd_cutscene_inspector, NULL );
index a26fe30773a32220d39b1a95e2704b0b41fa37b3..4e1211b8079ff5bbe8603b5780ec27aac4663e72 100644 (file)
@@ -132,7 +132,7 @@ struct cs_subtitle
 struct _cutscene
 {
    ms_context meta;
-   vg_stack_allocator *stack;
+   vg_stack_allocator stack;
 
    enum cutscene_state
    {
@@ -214,7 +214,7 @@ struct _cutscene
 extern _cutscene;
 
 void metascene_load( ms_context *ms, const char *path, void *alloc );
-void cutscene_init(void);
+void cutscene_register(void);
 void cutscene_render( world_instance *world, vg_camera *cam );
 void cutscene_render_fadeout(void);
 bool _cutscene_load_and_play( const char *path, bool freeze_player, u32 raiser_entity );
index 5c27f3190e352a3a07dfb73a1eb2d46bd008fedd..f09e82806ee5852f50e31d89041abadfba01aaad 100644 (file)
@@ -68,7 +68,7 @@ static void on_auth_ticket_recieved( void *result, void *context ){
    }
 }
 
-static void request_auth_ticket(void)
+void request_auth_ticket(void)
 {
    /* 
     * TODO Check for one thats cached on the disk and load it.
@@ -286,7 +286,7 @@ void render_server_status_gui(void)
    skaterift.rt_textures[ k_skaterift_rt_server_status ] = g_render.fb_network_status->attachments[0].id;
 }
 
-static void on_server_connect_status( CallbackMsg_t *msg )
+void on_server_connect_status( CallbackMsg_t *msg )
 {
    SteamNetConnectionStatusChangedCallback_t *info = (void *)msg->m_pubParam;
    vg_info( "  Connection status changed for %lu\n", info->m_hConn );
@@ -344,7 +344,7 @@ static void on_server_connect_status( CallbackMsg_t *msg )
    render_server_status_gui();
 }
 
-static void on_persona_state_change( CallbackMsg_t *msg )
+void on_persona_state_change( CallbackMsg_t *msg )
 {
    if( !network_connected() )
       return;
@@ -687,18 +687,15 @@ static int cmd_network_send_rcon( int argc, const char *argv[] )
    return 0;
 }
 
-void network_init(void)
+void network_register(void)
 {
    vg_console_reg_var( "auto_connect", &network_client.auto_connect, k_var_dtype_i32, VG_VAR_PERSISTENT );
-   if( steam_ready )
-   {
-      _net_requests_init();
-      steam_register_callback( k_iSteamNetConnectionStatusChangedCallBack, on_server_connect_status );
-      steam_register_callback( k_iPersonaStateChange, on_persona_state_change );
-      request_auth_ticket();
+   vg_console_reg_cmd( "rcon", cmd_network_send_rcon, NULL );
+}
 
-      vg_console_reg_cmd( "rcon", cmd_network_send_rcon, NULL );
-   }
+void network_init(void)
+{
+   _net_requests_init();
 }
 
 void network_end(void)
index 6c84a2e39f366325df2acef14b88d624e89f65bd..a24dd3b10d299a1792b76a9637e160a1a0cce57c 100644 (file)
  * Interface
  */
 
+/* TEMP!!!!!!!!!!!! */
+void on_server_connect_status( CallbackMsg_t *msg );
+void on_persona_state_change( CallbackMsg_t *msg );
+void request_auth_ticket(void);
+
 /* Call it at start; Connects us to the gameserver */
+void network_register(void);
 void network_init(void);
 
 /* Run this from main loop */
index de25a2428121cdd4175fa148354b171f6eb60188..f706eefebb17a8543fb025b2c0099c0fd60da969 100644 (file)
@@ -15,7 +15,6 @@
 
 #include "player_walk.h"
 #include "player_dead.h"
-#include "player_drive.h"
 #include "player_skate.h"
 #include "player_basic_info.h"
 #include "player_glide.h"
@@ -36,11 +35,10 @@ struct localplayer localplayer =
    .immunity = 1 /* just for one frame */
 };
 
-struct player_subsystem_interface *player_subsystems[] = 
+struct player_subsystem_interface *player_subsystems[k_player_subsystem_max] = 
 {
    [k_player_subsystem_walk]  = &player_subsystem_walk,
    [k_player_subsystem_dead]  = &player_subsystem_dead,
-   [k_player_subsystem_drive] = &player_subsystem_drive,
    [k_player_subsystem_skate] = &player_subsystem_skate,
    [k_player_subsystem_basic_info]=&player_subsystem_basic_info,
    [k_player_subsystem_glide] = &player_subsystem_glide,
@@ -65,15 +63,8 @@ int localplayer_cmd_respawn( int argc, const char *argv[] )
    return 1;
 }
 
-void player_init(void)
+void player_register(void)
 {
-   for( u32 i=0; i<k_player_subsystem_max; i++ )
-   {
-      struct player_subsystem_interface *sys = player_subsystems[i];
-      if( sys->system_register ) 
-         sys->system_register();
-   }
-
    vg_console_reg_var( "player_battery", &localplayer.has_battery, k_var_dtype_i32, 0 );
    vg_console_reg_cmd( "respawn", localplayer_cmd_respawn, NULL );
    VG_VAR_F32( k_cam_damp );
@@ -89,6 +80,16 @@ void player_init(void)
 #endif
    vg_console_reg_var( "invert_y", &k_invert_y, k_var_dtype_i32, VG_VAR_PERSISTENT );
 
+   for( u32 i=0; i<k_player_subsystem_max; i++ )
+   {
+      struct player_subsystem_interface *sys = player_subsystems[i];
+      if( sys && sys->system_register ) 
+         sys->system_register();
+   }
+}
+
+void player_init(void)
+{
    mdl_context *mdl = &localplayer.battery;
    mdl_open( mdl, "models/battery.mdl", &vg.rtmem );
    mdl_load_metadata_block( mdl, &vg.rtmem );
@@ -124,8 +125,8 @@ void player__bind(void)
    for( u32 i=0; i<k_player_subsystem_max; i++ )
    {
       struct player_subsystem_interface *sys = player_subsystems[i];
-
-      if( sys->bind ) sys->bind();
+      if( sys && sys->bind ) 
+         sys->bind();
    }
 }
 
index 76b2d1b9de3a79fc0bdbded5979524a23f9c6ef0..c4ed1d3b4a245329e479b9f942aaf42c6f82bf70 100644 (file)
@@ -173,6 +173,7 @@ extern struct player_subsystem_interface *player_subsystems[];
  * ---------------------------------------------------------
  */
 
+void player_register(void);
 void player_init(void);
 void player__debugtext( ui_context *ctx, int size, const char *fmt, ... );
 void player__use_mesh( glmesh *mesh );
index 51b21b69de22bf41c6e710b97fe4f0b6d1e54d48..cd8a477b7c29907e74d3819a029e43e21bf637a2 100644 (file)
@@ -27,7 +27,7 @@ enum player_subsystem{
    k_player_subsystem_walk = 0,
    k_player_subsystem_skate = 1,
    k_player_subsystem_dead = 2,
-   k_player_subsystem_drive = 3,
+   k_player_subsystem_REMOVED0 = 3,
    k_player_subsystem_basic_info = 4,
    k_player_subsystem_glide = 5,
    k_player_subsystem_max,
index 5c2d56503da05aa313521b04883c60ab87eb8cf9..6c077c3ac63f56dd7e1057e5f287ac774f57a4fe 100644 (file)
@@ -64,6 +64,7 @@ struct player_subsystem_interface player_subsystem_glide =
    .network_animator_exchange = player_glide_animator_exchange,
    .im_gui = player_glide_im_gui,
    .bind = player_glide_bind,
+   .system_register = player_glide_register,
 
    .animator_data = &player_glide.animator,
    .animator_size = sizeof(player_glide.animator),
@@ -383,7 +384,7 @@ static int ccmd_player_glider_spawn( int argc, const char *argv[] ){
    return 0;
 }
 
-void player_glide_bind(void)
+void player_glide_register(void)
 {
    u32 mask = VG_VAR_CHEAT|VG_VAR_PERSISTENT;
    VG_VAR_F32( k_glide_steer, flags=mask );
@@ -395,9 +396,11 @@ void player_glide_bind(void)
    VG_VAR_I32( k_glide_pause, flags=mask );
    VG_VAR_F32( k_glide_balance, flags=mask );
    VG_VAR_F32( k_glide_wing_orient, flags=mask );
-
    vg_console_reg_cmd( "spawn_glider", ccmd_player_glider_spawn, NULL );
+}
 
+void player_glide_bind(void)
+{
    f32 mass = 0.0f,k_density = 8.0f;
    m3x3f I;
    m3x3_zero( I );
index 8d10d176e33c5c989976ba06026bd0d28833b3af..f189cc69e51f029aa147a97f966320d34fd29884 100644 (file)
@@ -55,6 +55,7 @@ struct player_glide
 extern player_glide;
 extern struct player_subsystem_interface player_subsystem_glide;
 
+void player_glide_register(void);
 void player_glide_pre_update(void);
 void player_glide_update(void);
 void player_glide_post_update(void);
index ebaa55d3b6c8f526a37406f4676c504b1511297c..5ef3ebdc0e1f9133c8a5b0d69143d702eba6f07e 100644 (file)
@@ -57,7 +57,7 @@ static int dev_ragdoll_saveload(int argc, const char *argv[]){
    return 0;
 }
 
-void player_ragdoll_init(void)
+void player_ragdoll_register(void)
 {
    VG_VAR_F32( k_ragdoll_active_threshold );
    VG_VAR_F32( k_ragdoll_angular_drag );
index 3a67ee6b69e0ce9243b486317c95793dabd032ed..b47bdca06feb3124bc78e5167a640eac4527e81c 100644 (file)
@@ -58,7 +58,7 @@ enum player_die_type {
    k_player_die_type_water
 };
 
-void player_ragdoll_init(void);
+void player_ragdoll_register(void);
 void player_init_ragdoll_bone_collider( struct skeleton_bone *bone,
                                            struct ragdoll_part *rp );
 u32 ragdoll_bone_parent( struct player_ragdoll *rd, u32 bone_id );
index e1e1aff9d4ffff7f95f86cd7c4ab213cb65da862..cd846efd52fe153b43c2dd09468ac690e3182bb2 100644 (file)
@@ -1248,11 +1248,15 @@ static int cmd_network_info( int argc, const char *argv[] )
    return 1;
 }
 
-void remote_players_init(void)
+void remote_players_register(void)
 {
    vg_console_reg_cmd( "network_info", cmd_network_info, NULL );
    vg_console_reg_cmd( "add_test_players", remote_players_randomize, NULL );
    vg_console_reg_var( "k_show_own_name", &k_show_own_name, k_var_dtype_i32, 0 );
+}
+
+void remote_players_init(void)
+{
    for( u32 i=0; i<NETWORK_SFX_QUEUE_LENGTH; i ++ )
       netplayers.sfx_queue[i].system = k_player_subsystem_invalid;
 }
index e44208b94d8a92c52383af3d7ff7a52ea69022f1..d411978153d97c8c705df724f8f8c1a2a5a526d7 100644 (file)
@@ -104,6 +104,7 @@ void animate_remote_players(void);
 void render_remote_players( world_instance *world, vg_camera *cam );
 void relink_all_remote_player_worlds(void);
 void player_remote_update_friendflags( struct network_player *remote );
+void remote_players_register(void);
 void remote_players_init(void);
 void remote_sfx_pre_update(void);
 void remote_players_imgui_world( ui_context *ctx, world_instance *world, m4x4f pv, f32 max_dist, int geo_cull );
index 68bb8a3af30bd602b9f02ee2030528016c099b4b..32238354f126b602bbe2121a1e5d0823f891b941 100644 (file)
@@ -58,12 +58,15 @@ static void async_render_init( void *userdata )
    g_render.ready = 1;
 }
 
-void render_init(void)
+void render_register(void)
 {
-   THREAD_1;
-
    vg_console_reg_var( "fov", &k_fov, k_var_dtype_f32, VG_VAR_PERSISTENT );
    vg_console_reg_var( "cam_height", &k_cam_height, k_var_dtype_f32, VG_VAR_PERSISTENT );
+}
+
+void render_init(void)
+{
+   THREAD_1;
 
    /* 
     * Workshop preview
index 15bb6b6cef3f1fd810fd7f6d3535f50371896dd9..3024f21cc7f0718633254fc797de48b4279cb78f 100644 (file)
@@ -35,6 +35,7 @@ struct pipeline
 }
 static g_render;
 
+void render_register(void);
 void render_init(void);
 void render_fsquad(void);
 void render_fsquad1(void);
index 04486ba129b52932f916e0ca880e7fc35021ef91..e0a6959117ab3d4edc0d81ddfb6b8deb29ceef44 100644 (file)
@@ -46,10 +46,13 @@ static int cmd_replay2_manual_download( int argc, const char *argv[] )
    return 1;
 }
 
-void _replay2_init(void)
+void _replay2_register(void)
 {
    vg_console_reg_cmd( "replay2_watch", cmd_replay2_manual_download, NULL );
+}
 
+void _replay2_init(void)
+{
    u32 MB = 1024*1024,
        size = 4*MB;
 
index 4231dd314c016a68e35be1f7a193523dda1bbe5f..872de7e5001c50f16149de3e6aedaab9f6efdcc4 100644 (file)
@@ -127,6 +127,7 @@ struct _replay2
 }
 extern _replay2;
 
+void _replay2_register(void);
 void _replay2_init(void);
 void _replay2_pre_update(void);
 void _replay2_imgui( ui_context *ctx );
index 939951876ddabf93b77b583ac84e91d7b3381349..85c6b07be1d78927846ac619129aa50ac8ddc2ed 100644 (file)
@@ -33,7 +33,6 @@
 #include "player.h"
 #include "network.h"
 #include "menu.h"
-#include "vehicle.h"
 #include "save.h"
 #include "player_remote.h"
 #include "particle.h"
@@ -96,6 +95,17 @@ static void game_load_co( vg_coroutine *co )
       co_thread( co, 1, &vg.loader_tasks );
    }
 
+   if( co_step( co, 0 ) )
+   {
+      if( !g_client.nosteam )
+      {
+         steam_init();
+         steam_register_callback( k_iSteamNetConnectionStatusChangedCallBack, on_server_connect_status );
+         steam_register_callback( k_iPersonaStateChange, on_persona_state_change );
+         request_auth_ticket();
+      }
+   }
+
    if( co_step( co, 1 ) )
    {
       vg_loader_step( render_init, NULL );
@@ -112,42 +122,26 @@ static void game_load_co( vg_coroutine *co )
       vg_loader_step( remote_players_init, NULL );
 
       if( !g_client.nosteam )
-      {
-         steam_init();
          vg_loader_step( NULL, steam_end );
-      }
 
       vg_loader_step( network_init, network_end );
-
       vg_loader_set_user_information( "Initializing subsystems" );
-      vg_console_reg_cmd( "quit", skaterift_quit_command, NULL );
-      vg_console_reg_cmd( "load_world", skaterift_load_world_command, NULL );
-      vg_console_reg_var( "immobile", &localplayer.immobile, k_var_dtype_i32, 0 );
-      vg_console_reg_var( "allow_resume", &skaterift.allow_replay_resume, k_var_dtype_i32, VG_VAR_CHEAT );
-      vg_console_reg_var( "boost_scale", &skaterift.boost_scale, k_var_dtype_f32, VG_VAR_CHEAT );
       vg_loader_step( menu_init, NULL );
       vg_loader_step( _user_profile_init, NULL );
       vg_loader_step( control_overlay_init, NULL );
       vg_loader_step( world_init, NULL );
-      vg_loader_step( vehicle_init, NULL );
       vg_loader_step( gui_init, NULL );
       vg_loader_step( compass_init, NULL );
 
       vg_loader_step( player_init, NULL );
-      vg_loader_step( player_ragdoll_init, NULL );
-      vg_loader_step( cutscene_init, NULL );
 
       /* content stuff */
       vg_loader_step( addon_system_init, NULL );
-      vg_loader_step( workshop_init, NULL );
       vg_loader_step( skateshop_init, NULL );
       vg_loader_step( world_map_init, NULL );
-      vg_loader_step( ent_tornado_init, NULL );
       vg_loader_step( skaterift_load_player_content, NULL );
       vg_loader_step( _replay2_init, NULL );
       vg_loader_step( _ent_npc_init, NULL );
-      vg_loader_step( _ent_atom_init, NULL );
-      vg_loader_step( _ent_challenge_init, NULL );
 
       vg_loader_set_user_information( "Compiling shaders" );
       vg_bake_shaders();
@@ -158,7 +152,6 @@ static void game_load_co( vg_coroutine *co )
       _world.default_hub_addon = _addon_mount_from_folder_path( "maps/dev_hub", k_addon_type_world, ".mdl" );
       VG_ASSERT( _world.default_hub_addon );
 
-      vg_console_load_autos();
       vg_loader_set_user_information( "Mounting addons" );
       _addon_mount_content_folder( k_addon_type_player, "playermodels", ".mdl" );
       _addon_mount_content_folder( k_addon_type_board, "boards", ".mdl" );
@@ -298,7 +291,6 @@ void vg_fixed_update(void)
 
    world_routes_fixedupdate( &_world.main );
    player__update();
-   vehicle_update_fixed();
 }
 
 void vg_post_update(void)
@@ -326,7 +318,6 @@ void vg_post_update(void)
    v3_copy( localplayer.rb.v, _vg_audio.controls.listener_velocity );
    vg_audio_unlock();
 
-   vehicle_update_post();
    skaterift_autosave_update();
 
    localplayer.immunity = 0;
@@ -633,7 +624,6 @@ void vg_framebuffer_resize( int w, int h )
 #include "player.c"
 #include "player_common.c"
 #include "player_dead.c"
-#include "player_drive.c"
 #include "player_effects.c"
 #include "player_glide.c"
 #include "player_ragdoll.c"
@@ -646,7 +636,6 @@ void vg_framebuffer_resize( int w, int h )
 #include "scene.c"
 #include "steam.c"
 #include "trail.c"
-#include "vehicle.c"
 #include "workshop.c"
 #include "world_audio.c"
 #include "world.c"
@@ -718,6 +707,31 @@ int main( int argc, const char *argv[] )
                                _vg_tower_mask( vg.sig_engine ) | 
                                _vg_tower_mask( vg.sig_client );
    _vg_tower_register_trigger( _vg_tower_mask( vg.sig_engine ), _handle_vg_signal );
+
+   vg_console_reg_cmd( "quit", skaterift_quit_command, NULL );
+   vg_console_reg_cmd( "load_world", skaterift_load_world_command, NULL );
+   vg_console_reg_var( "immobile", &localplayer.immobile, k_var_dtype_i32, 0 );
+   vg_console_reg_var( "allow_resume", &skaterift.allow_replay_resume, k_var_dtype_i32, VG_VAR_CHEAT );
+   vg_console_reg_var( "boost_scale", &skaterift.boost_scale, k_var_dtype_f32, VG_VAR_CHEAT );
+
+   /* TODO Modules that do this automatically.... */
+   render_register();
+   remote_players_register();
+   network_register();
+   menu_register();
+   control_overlay_register();
+   world_render_register();
+   gui_register();
+   compass_register();
+   player_register();
+   player_ragdoll_register();
+   cutscene_register();
+   workshop_register();
+   ent_tornado_register();
+   _replay2_register();
+   _ent_atom_register();
+   _ent_challenge_register();
+
    vg_run();
    return 0;
 }
index c0301535686eea24e4ccf5a7b22fc3d8961d7c30..a5db0f66e2f34448ed03b7483026baf765a568e3 100644 (file)
@@ -109,7 +109,8 @@ void steam_print_all_achievements(void)
 
 int steam_achievement_ccmd( int argc, char const *argv[] )
 {
-   if( !(steam_ready && steam_stats_ready) ) return 1;
+   if( !(steam_ready && steam_stats_ready) ) 
+      return 1;
 
    if( argc == 1 ){
       if( !strcmp( argv[0], "list" ) ){
@@ -222,6 +223,11 @@ u32 str_utf8_collapse( const char *str, char *buf, u32 length )
    return j;
 }
 
+void steam_register(void)
+{
+   vg_console_reg_cmd( "ach", steam_achievement_ccmd, NULL );
+}
+
 int steam_init(void)
 {
    const char *username = "offline player";
@@ -236,7 +242,6 @@ int steam_init(void)
    }
 
    steam_ready = 1;
-
    SteamAPI_ManualDispatch_Init();
 
    /* Connect interfaces */
@@ -258,32 +263,26 @@ int steam_init(void)
     * --------------------------------------------------------
     */
    hSteamUserStats = SteamAPI_SteamUserStats();
-   steam_register_callback( k_iUserStatsReceived,
-                            steam_on_recieve_current_stats );
+   steam_register_callback( k_iUserStatsReceived, steam_on_recieve_current_stats );
 
    if( !SteamAPI_ISteamUserStats_RequestCurrentStats( hSteamUserStats ) )
       vg_warn( "No Steam Logon: Cannot request stats\n" );
 
-
-   vg_console_reg_cmd( "ach", steam_achievement_ccmd, NULL );
-
    /* TODO: On username update callback */
-   str_utf8_collapse( username, steam_username_at_startup, 
-                        VG_ARRAY_LEN(steam_username_at_startup) );
-
+   str_utf8_collapse( username, steam_username_at_startup, VG_ARRAY_LEN(steam_username_at_startup) );
    return 1;
 }
 
 void steam_update(void)
 {
-   if( steam_ready ){
+   if( steam_ready )
       steamworks_event_loop( hSteamClientPipe );
-   }
 }
 
 void steam_end(void)
 {
-   if( steam_ready ){
+   if( steam_ready )
+   {
       vg_info( "Shutting down\n..." );
       SteamAPI_Shutdown();
    }
index e2ed9822ceed634aa84106aa87ab91cdb2e8925a..c9ecf2b7e15be451e2fc877b24cbe8deab5e34a7 100644 (file)
@@ -8,6 +8,7 @@ extern int steam_ready, steam_stats_ready;
 extern void *hSteamNetworkingSockets, *hSteamUser, *hSteamUserStats;
 extern char steam_username_at_startup[128];
 
+void steam_register(void);
 int steam_init(void);
 void steam_update(void);
 void steam_end(void);
index 7735e7f553ea2a7e9816df7a4051adaf662bd968..5c88b82bfaf01af0162ec3d3d6a0fa3b21fd451a 100644 (file)
@@ -860,7 +860,7 @@ int workshop_submit_command( int argc, const char *argv[] )
    return 0;
 }
 
-void workshop_init(void)
+void workshop_register(void)
 {
    vg_console_reg_cmd( "workshop_submit", workshop_submit_command, NULL );
 }
index a162d3eef20ad5ed156aa7e26f44bf8f20a00cc1..5c4e2f4b3d1e63f317292b80fcbfcf3259ce801a 100644 (file)
@@ -133,7 +133,7 @@ struct workshop_form
 }
 extern workshop_form;
 
-void workshop_init(void);
+void workshop_register(void);
 int workshop_submit_command( int argc, const char *argv[] );
 void async_workshop_get_filepath( void *data, u32 len );
 void async_workshop_get_installed_files( void *data, u32 len );
index 701df9fe618258e4a4c1453ce3b330043c6055da..01890c38c1bf2f37507a3a20cbcea25b7509bf60 100644 (file)
@@ -518,8 +518,8 @@ void skaterift_load_world_start( addon_id addon_id, bool preview )
          _cutscene_unload();
 
       vg_audio_lock();
-      vg_audio_fadeout_flagged_audio( AUDIO_FLAG_WORLD, 1.0f );
       vg_audio_set_flagged_pause( AUDIO_FLAG_WORLD, 0 );
+      vg_audio_fadeout_flagged_audio( AUDIO_FLAG_WORLD, 1.0f );
       vg_audio_unlock();
    }
 
index 58ba661bd16231081771bad9b94a99bea7f12027..cc08328bbb9bd517396bef209bb545602168a220 100644 (file)
@@ -41,7 +41,7 @@ static void async_world_render_init( void *userdata )
    glBindBufferBase( GL_UNIFORM_BUFFER, 0, world->ubo_lighting );
 }
 
-void world_render_init(void)
+void world_render_register(void)
 {
    VG_VAR_F32( k_day_length );
    VG_VAR_I32( k_debug_light_indices );
@@ -50,7 +50,10 @@ void world_render_init(void)
    VG_VAR_I32( k_light_editor );
    vg_console_reg_cmd( "set_time", ccmd_set_time, NULL );
    vg_console_reg_cmd( "render_portals", ccmd_render_portals, NULL );
+}
 
+void world_render_init(void)
+{
    vg_info( "Loading world resources\n" );
    vg_stack_clear( &vg.scratch );
 
index 347cea7eebbabfc676d4b30867de840ee645306a..4f329d5e85f478154610840bf7fe5a1fa4834f37 100644 (file)
@@ -56,6 +56,7 @@ struct world_render
 }
 extern world_render;
 
+void world_render_register(void);
 void world_render_init(void);
 
 void world_prerender( world_instance *world );