.time_rate = 1.0f,
};
-void game_launch_opt(void)
-{
- const char *arg;
- if( (arg = vg_long_opt_arg( "world", "Specify path to world to load" )) )
- skaterift.override_load_world = arg;
-}
-
static void skaterift_load_player_content(void)
{
particle_alloc( &particles_grind, 300 );
player_board_load( &localplayer.fallback_board, "models/board_none.mdl", vg_mem.rtmemory );
}
-static void game_load_0(void *_);
-static void game_load_1(void *_);
-static void game_load_2(void *_);
-static void game_load_3(void *_);
-static void game_load_4( vg_async_task *task );
-void game_load(void) { THREAD_1; game_load_0(NULL); }
-
-static void game_load_0(void *_)
+static void game_load_co( vg_coroutine *co )
{
- THREAD_1;
-
- _skaterift_script_init();
-
- vg_loader_set_user_information( "Initializing subsystems" );
- 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_loader_step( menu_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_replay_init, NULL );
- vg_loader_step( skaterift_load_player_content, NULL );
- vg_loader_step( _replay2_init, NULL );
-
- vg_loader_set_user_information( "Compiling shaders" );
- vg_bake_shaders();
-
- vg_loader_set_user_information( "Loading content files" );
- vg_loader_step( audio_init, NULL );
-
- _world.default_hub_addon = _addon_mount_from_folder( "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" );
- _addon_mount_content_folder( k_addon_type_world, "maps", ".mdl" );
- vg_async_call( &vg.main_tasks, game_load_1, NULL );
-}
+ if( co_begin( co ) )
+ {
+ co_thread( co, 0, &vg.main_tasks );
+ co_thread( co, 1, &vg.loader_tasks );
+ }
-static void game_load_1(void *_)
-{
- THREAD_0;
- _mount_workshop_addons( NULL );
- vg_async_call( &vg.loader_tasks, game_load_2, NULL );
-}
+ if( co_step( co, 1 ) )
+ {
+ vg_loader_step( render_init, NULL );
-static void game_load_2(void *_)
-{
- THREAD_1;
+ /* please forgive me! */
+ u32 sz; char *drm;
+ if( (drm = vg_file_read_text( vg_mem.scratch, "DRM", &sz )) )
+ if( !strcmp(drm, "blibby!") )
+ g_client.demo_mode = 0;
- /* initializing / loading world. */
- vg_loader_set_user_information( "Loading savedata" );
- skaterift_load_mainsave();
+ vg_loader_step( remote_players_init, NULL );
- if( skaterift.override_load_world )
- _world.load_addon = _addon_mount_from_folder( skaterift.override_load_world, k_addon_type_world, ".mdl" );
+ if( !g_client.nosteam )
+ {
+ steam_init();
+ vg_loader_step( NULL, steam_end );
+ }
- _world.loader_instance = &_world.main;
- _world.loader_preview_mode = 0;
- _world.loader_heap = _world.heap;
+ vg_loader_step( network_init, network_end );
+
+ _skaterift_script_init();
+ vg_loader_set_user_information( "Initializing subsystems" );
+ 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_loader_step( menu_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_replay_init, NULL );
+ vg_loader_step( skaterift_load_player_content, NULL );
+ vg_loader_step( _replay2_init, NULL );
+
+ vg_loader_set_user_information( "Compiling shaders" );
+ vg_bake_shaders();
+
+ vg_loader_set_user_information( "Loading content files" );
+ vg_loader_step( audio_init, NULL );
+
+ _world.default_hub_addon = _addon_mount_from_folder( "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" );
+ _addon_mount_content_folder( k_addon_type_world, "maps", ".mdl" );
+ }
- if( !_world.load_addon )
+ if( co_step( co, 0 ) )
{
- vg_warn( "Falling back to default hub world...\n" );
- _world.load_addon = _world.default_hub_addon;
+ _mount_workshop_addons( NULL );
}
- _world_loader_set_addon( _world.load_addon );
- vg_async_call( &vg.main_tasks, game_load_3, NULL );
-}
+ if( co_step( co, 1 ) )
+ {
+ /* initializing / loading world. */
+ vg_loader_set_user_information( "Loading savedata" );
+ skaterift_load_mainsave();
-static void game_load_3(void *_)
-{
- THREAD_0;
- vg_async_task *task = world_load_go();
- vg_async_task_dispatch( task, game_load_4 );
-}
+ if( skaterift.override_load_world )
+ _world.load_addon = _addon_mount_from_folder( skaterift.override_load_world, k_addon_type_world, ".mdl" );
-static void game_load_4( vg_async_task *task )
-{
- THREAD_1;
- skaterift_world_load_t1( task );
+ _world.loader_instance = &_world.main;
+ _world.loader_preview_mode = 0;
+ _world.loader_heap = _world.heap;
+
+ if( !_world.load_addon )
+ {
+ vg_warn( "Falling back to default hub world...\n" );
+ _world.load_addon = _world.default_hub_addon;
+ }
- /* add autosave function to exit list */
- vg_loader_step( NULL, skaterift_autosave_synchronous );
- vg_async_call( &vg.main_tasks, async_client_ready, NULL );
- _vg_load_temp_end();
+ _world_loader_set_addon( _world.load_addon );
+ }
+
+ if( co_step( co, 0 ) )
+ {
+ _world.loader_state = k_world_loader_ready;
+
+ if( network_client.auto_connect )
+ network_client.user_intent = k_server_intent_online;
+ menu_at_begin();
+ }
+
+ if( co_step( co, 1 ) )
+ {
+ vg_loader_step( NULL, skaterift_autosave_synchronous );
+ _vg_tower_set_flag( vg.sig_client, 1 );
+ }
+
+ co_end( co );
}
/*
void vg_pre_update(void)
{
+ if( !_vg_tower_clearence( _vg_tower_mask(vg.sig_engine)|_vg_tower_mask(vg.sig_client) ) )
+ return;
+
skaterift_preupdate_inputs();
steam_update();
world_switcher_update();
- if( g_client.unreadyness )
+ if( !_vg_tower_clearence( skaterift.full_ready_mask ) )
return;
//draw_origin_axis();
void vg_fixed_update(void)
{
- if( g_client.unreadyness )
+ if( !_vg_tower_clearence( skaterift.full_ready_mask ) )
return;
world_routes_fixedupdate( &_world.main );
void vg_post_update(void)
{
- if( g_client.unreadyness )
+ if( !_vg_tower_clearence( skaterift.full_ready_mask ) )
return;
player__post_update();
else
{
_world.entity_camera_modulate = vg_maxf( 0.0f, _world.entity_camera_modulate-vg.time_frame_delta );
-}
+ }
vg_camera_lerp( &localplayer.cam, &_world.entity_driven_camera,
vg_smoothstepf(_world.entity_camera_modulate), &g_render.cam );
void vg_render(void)
{
- if( g_client.unreadyness )
+ if( !_vg_tower_clearence( skaterift.full_ready_mask ) )
{
vg_loader_render();
return;
void vg_gui( ui_context *ctx )
{
- if( g_client.unreadyness )
+ if( !_vg_tower_clearence( skaterift.full_ready_mask ) )
return;
glBindFramebuffer( GL_FRAMEBUFFER, 0 );
//TODO
//#include "vg/submodules/hashmap.c/hashmap.c"
+
+static void _handle_vg_signal( vg_signal_id id, bool state )
+{
+ if( (id == vg.sig_engine) && state )
+ {
+ //vg_audio.always_keep_compressed = 1;
+ co_run( game_load_co, NULL );
+ }
+}
+
+int main( int argc, const char *argv[] )
+{
+ vg_init( argc, argv, "Voyager Game Engine" );
+
+ const char *arg;
+ if( vg_long_opt( "noauth", "Disable server authentication" ) )
+ network_client.auth_mode = eServerModeNoAuthentication;
+
+ if( (arg = vg_long_opt_arg( "server", "Specify server address" )) )
+ network_set_host( arg, NULL );
+
+ if( vg_long_opt( "demo", "Turn demo mode on" ) )
+ g_client.demo_mode = 1;
+
+ if( vg_long_opt( "nosteam", "Disable steam integration (offline)" ) )
+ g_client.nosteam = 1;
+
+ if( (arg = vg_long_opt_arg( "world", "Specify path to world to load" )) )
+ skaterift.override_load_world = arg;
+
+ network_set_host( "skaterift.com", NULL );
+ vg_mem.use_libc_malloc = 0;
+ vg_set_mem_quota( 200*1024*1024 );
+ skaterift.sig_world = _vg_tower_create_signal( "World Loaded" );
+ skaterift.full_ready_mask = _vg_tower_mask( skaterift.sig_world ) |
+ _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_run();
+ return 0;
+}