From 4090c55b29c638ad9e0a66d5eb63400088cb2239 Mon Sep 17 00:00:00 2001 From: hgn Date: Sat, 19 Apr 2025 09:34:15 +0100 Subject: [PATCH] small simplifying --- build.c | 46 ++++---- src/client.c | 70 ------------ src/client.h | 2 - src/menu.c | 3 +- src/player_render.c | 4 +- src/skaterift.c | 253 ++++++++++++++++++++++++++------------------ src/skaterift.h | 4 + src/world_load.c | 27 ++--- 8 files changed, 192 insertions(+), 217 deletions(-) diff --git a/build.c b/build.c index 46e3bec..32c6d06 100644 --- a/build.c +++ b/build.c @@ -425,39 +425,41 @@ void s_queuetest_build(void) vg_compiler_run( &test_proj, &vg_test_env, &conf, sources.buffer, "qtest", k_obj_type_exe ); } -int main( int argc, char *argv[] ) +int main( int argc, const char *argv[] ) { vg_log_init(); + _vg_opt_init( argc, argv ); - char *arg; - while( vg_argp( argc, argv ) ){ - if( vg_long_opt( "release-all", NULL ) ) - s_release_all(); + const char *arg; + if( vg_long_opt( "release-all", NULL ) ) + s_release_all(); - if( vg_long_opt( "testing-build", NULL ) ) - s_testing_build(); + if( vg_long_opt( "testing-build", NULL ) ) + s_testing_build(); - if( vg_long_opt( "utest", NULL ) ) - s_utest_build(); + if( vg_long_opt( "utest", NULL ) ) + s_utest_build(); - if( vg_long_opt( "testing-server", NULL ) ) - s_testing_server(); + if( vg_long_opt( "testing-server", NULL ) ) + s_testing_server(); - if( vg_long_opt( "queuetest", NULL ) ) - s_queuetest_build(); + if( vg_long_opt( "queuetest", NULL ) ) + s_queuetest_build(); - if( vg_long_opt( "tools", NULL ) ) - s_compile_tools(); + if( vg_long_opt( "tools", NULL ) ) + s_compile_tools(); - if( vg_opt('r', NULL) ) - vg_test_env.optimization = 3; + if( vg_opt('r', NULL) ) + vg_test_env.optimization = 3; - if( vg_long_opt( "no-asan", NULL ) ) - vg_test_env.debug_asan = 0; + if( vg_long_opt( "no-asan", NULL ) ) + vg_test_env.debug_asan = 0; - if( (arg = vg_long_opt_arg( "strdjb2", NULL )) ) - printf( "vg_strdjb2('%s'): %u\n", arg, vg_strdjb2(arg) ); - } + if( (arg = vg_long_opt_arg( "strdjb2", NULL )) ) + printf( "vg_strdjb2('%s'): %u\n", arg, vg_strdjb2(arg) ); + + if( !_vg_opt_check() ) + return 0; vg_success( "All scripts completed\n" ); } diff --git a/src/client.c b/src/client.c index 6d0dbd9..b8cbacc 100644 --- a/src/client.c +++ b/src/client.c @@ -14,76 +14,6 @@ const char* __asan_default_options() { return "detect_leaks=0"; } struct game_client g_client = { .demo_mode = 1, - .unreadyness = 2 /* once for client, once for world switcher */ }; -void async_client_ready( void *userdata ) -{ - THREAD_0; - - g_client.unreadyness --; - - if( network_client.auto_connect ) - network_client.user_intent = k_server_intent_online; - - menu_at_begin(); -} - -void vg_load(void) -{ - THREAD_1; - - //vg_audio.always_keep_compressed = 1; - vg_loader_step( render_init, NULL ); - game_load(); -} - -void vg_preload(void) -{ - /* 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; - - 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 ); -} - -void vg_launch_opt(void) -{ - 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; - - game_launch_opt(); -} - -int main( int argc, char *argv[] ) -{ - vg_log_init(); - network_set_host( "skaterift.com", NULL ); - vg_mem.use_libc_malloc = 0; - vg_set_mem_quota( 200*1024*1024 ); - vg_enter( argc, argv, "Voyager Game Engine" ); - return 0; -} - #include "skaterift.c" diff --git a/src/client.h b/src/client.h index 5b0b24a..ab7c980 100644 --- a/src/client.h +++ b/src/client.h @@ -10,10 +10,8 @@ struct game_client { bool demo_mode, nosteam; - u32 unreadyness; } extern g_client; /* game defined */ void game_launch_opt( void ); -void game_load( void ); diff --git a/src/menu.c b/src/menu.c index 77c82f0..d36cca8 100644 --- a/src/menu.c +++ b/src/menu.c @@ -16,7 +16,8 @@ struct global_menu menu = { .skip_starter = 0 }; void menu_at_begin(void) { - if( menu.skip_starter ) return; + if( menu.skip_starter ) + return; skaterift.activity = k_skaterift_menu; menu.page = k_menu_page_starter; diff --git a/src/player_render.c b/src/player_render.c index 2138e79..0f5b6c7 100644 --- a/src/player_render.c +++ b/src/player_render.c @@ -166,7 +166,7 @@ void player_board_load( player_board *board, const char *path, void *arena ) void player_board_unload( struct player_board *board ) { - VG_ASSERT( vg_thread_purpose() == k_thread_purpose_main ); + THREAD_0; mdl_sync_std_unload( &board->mdl ); } @@ -211,7 +211,7 @@ void player_model_load( player_model *pm, const char *path, void *arena ) void player_model_unload( player_model *pm ) { - VG_ASSERT( vg_thread_purpose() == k_thread_purpose_main ); + THREAD_0; mdl_sync_std_unload( &pm->mdl ); } diff --git a/src/skaterift.c b/src/skaterift.c index 32398b6..eb7ff71 100644 --- a/src/skaterift.c +++ b/src/skaterift.c @@ -61,13 +61,6 @@ struct skaterift_globals skaterift = .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 ); @@ -80,109 +73,119 @@ static void skaterift_load_player_content(void) 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 ); } /* @@ -199,12 +202,15 @@ void skaterift_change_client_world_preupdate(void); 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(); @@ -249,7 +255,7 @@ void vg_pre_update(void) void vg_fixed_update(void) { - if( g_client.unreadyness ) + if( !_vg_tower_clearence( skaterift.full_ready_mask ) ) return; world_routes_fixedupdate( &_world.main ); @@ -259,7 +265,7 @@ void vg_fixed_update(void) void vg_post_update(void) { - if( g_client.unreadyness ) + if( !_vg_tower_clearence( skaterift.full_ready_mask ) ) return; player__post_update(); @@ -339,7 +345,7 @@ static void skaterift_composite_maincamera(void) 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 ); @@ -510,7 +516,7 @@ static void render_main_game(void) void vg_render(void) { - if( g_client.unreadyness ) + if( !_vg_tower_clearence( skaterift.full_ready_mask ) ) { vg_loader_render(); return; @@ -541,7 +547,7 @@ void vg_render(void) void vg_gui( ui_context *ctx ) { - if( g_client.unreadyness ) + if( !_vg_tower_clearence( skaterift.full_ready_mask ) ) return; glBindFramebuffer( GL_FRAMEBUFFER, 0 ); @@ -650,3 +656,44 @@ void vg_framebuffer_resize( int w, int h ) //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; +} diff --git a/src/skaterift.h b/src/skaterift.h index f7d7ddc..f54c994 100644 --- a/src/skaterift.h +++ b/src/skaterift.h @@ -2,6 +2,8 @@ #define SKATERIFT #define SKATERIFT_APPID 2103940 +#define SKATERIFT_WORLD_READY 0x10000 + #include "vg/vg_engine.h" #include "vg/vg_camera.h" @@ -29,6 +31,8 @@ struct skaterift_globals u32 achievements; int demo_mode; i32 allow_replay_resume; + vg_signal_id sig_world; + u64 full_ready_mask; const char *override_load_world; } diff --git a/src/world_load.c b/src/world_load.c index c23357d..24bb911 100644 --- a/src/world_load.c +++ b/src/world_load.c @@ -379,7 +379,7 @@ void async_worldsave_go( vg_async_task *task ) network_send_item( k_netmsg_playeritem_world0 ); _world.loader_state = k_world_loader_done; _world.load_addon = 0; - g_client.unreadyness --; + _vg_tower_set_flag( skaterift.sig_world, 1 ); } void load_world_savedata_t1( void *userdata ) @@ -394,19 +394,6 @@ void load_world_savedata_t1( void *userdata ) vg_async_task_dispatch( task, async_worldsave_go ); } -vg_async_task *world_load_go(void) -{ - THREAD_0; - _world.loader_state = k_world_loader_loading; - vg_linear_clear( _world.loader_heap ); - vg_async_task *task = vg_allocate_async_task( &vg.loader_tasks, sizeof(struct world_load_info), 1 ); - struct world_load_info *info = (void *)task->data; - vg_str folder_str; - vg_strnull( &folder_str, info->path, sizeof(info->path) ); - info->OK = addon_get_content_folder( _world.load_addon, &folder_str ); - return task; -} - void world_switcher_update(void) { if( !_world.load_addon ) @@ -433,7 +420,13 @@ void world_switcher_update(void) if( _world.loader_state == k_world_loader_ready ) { - vg_async_task *task = world_load_go(); + _world.loader_state = k_world_loader_loading; + vg_linear_clear( _world.loader_heap ); + vg_async_task *task = vg_allocate_async_task( &vg.loader_tasks, sizeof(struct world_load_info), 1 ); + struct world_load_info *info = (void *)task->data; + vg_str folder_str; + vg_strnull( &folder_str, info->path, sizeof(info->path) ); + info->OK = addon_get_content_folder( _world.load_addon, &folder_str ); vg_async_task_dispatch( task, skaterift_world_load_t1 ); } @@ -454,7 +447,7 @@ void world_switcher_update(void) void skaterift_load_world_start( addon_id addon_id, bool preview ) { - if( g_client.unreadyness ) + if( !_vg_tower_clearence( skaterift.full_ready_mask ) ) { vg_error( "Cannot start changeworld while client is not ready?\n" ); return; @@ -484,7 +477,7 @@ void skaterift_load_world_start( addon_id addon_id, bool preview ) if( addon_id != world->addon_id ) _world.previous_world_addon = _world.main.addon_id; - g_client.unreadyness ++; + _vg_tower_set_flag( skaterift.sig_world, 0 ); _world.loader_state = k_world_loader_saving_current; _world.event = k_world_event_none; vg_loader_set_user_information( "Saving current world" ); -- 2.25.1