X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=skaterift.c;h=be4084ef8588c6a2b9b41159a7a8002cc1ca6cab;hb=4c3dc94e7221f599491e7d111cac3d51d8d83b17;hp=422202f5655cb3151ebbbffc6a93b777dd58fd1d;hpb=14267d2fb3d228060aef8e4de729254813ec245f;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/skaterift.c b/skaterift.c index 422202f..be4084e 100644 --- a/skaterift.c +++ b/skaterift.c @@ -12,6 +12,8 @@ */ #define SR_NETWORKED +#define VG_AUDIO_FORCE_COMPRESSED +#define SDL_MAIN_HANDLED #ifndef VG_RELEASE #define VG_DEVWINDOW @@ -46,7 +48,6 @@ #include "entity.c" #include "workshop.c" #include "addon.c" -#include "highscores.c" #include "save.c" #include "world_map.c" #include "network.c" @@ -84,6 +85,10 @@ static void vg_launch_opt(void){ if( vg_long_opt( "demo" ) ){ skaterift.demo_mode = 1; } + + if( (arg = vg_long_opt_arg( "world" )) ){ + skaterift.hub_world = arg; + } } static void vg_preload(void){ @@ -159,10 +164,45 @@ static void skaterift_restore_state(void){ static addon_reg *skaterift_mount_world_unloadable( const char *path, u32 ext ){ addon_reg *reg = addon_mount_local_addon( path, k_addon_type_world, ".mdl" ); + if( !reg ) vg_fatal_error( "world not found\n" ); reg->flags |= (ADDON_REG_HIDDEN | ext); return reg; } +static void skaterift_load_world_content(void){ + /* hub world */ + addon_reg *hub = skaterift_mount_world_unloadable( skaterift.hub_world, 0 ); + skaterift_mount_world_unloadable( "maps/mp_spawn", + ADDON_REG_CITY|ADDON_REG_PREMIUM ); + skaterift_mount_world_unloadable( "maps/mp_mtzero", + ADDON_REG_MTZERO|ADDON_REG_PREMIUM ); + skaterift_mount_world_unloadable( "maps/dev_tutorial", 0 ); + skaterift_mount_world_unloadable( "maps/dev_flatworld", 0 ); + + world_static.load_state = k_world_loader_load; + + struct world_load_args args = { + .purpose = k_world_purpose_hub, + .reg = hub + }; + skaterift_world_load_thread( &args ); +} + +static void skaterift_load_player_content(void){ + u32 bytes = 1024*1024*10; + skaterift.replay.data = vg_linear_alloc( vg_mem.rtmemory, bytes ); + skaterift.replay.size = bytes; + replay_clear( &skaterift.replay ); + + particle_alloc( &particles_grind, 300 ); + particle_alloc( &particles_env, 200 ); + + player_load_animation_reference( "models/ch_none.mdl" ); + player_model_load( &localplayer.fallback_model, "models/ch_none.mdl" ); + player__bind(); + player_board_load( &localplayer.fallback_board, "models/board_none.mdl" ); +} + static void vg_load(void){ if( k_tools_mode ){ vg_async_call( async_call_ready, NULL, 0 ); @@ -189,20 +229,9 @@ static void vg_load(void){ vg_loader_step( addon_system_init, NULL ); vg_loader_step( workshop_init, NULL ); vg_loader_step( skateshop_init, NULL ); + vg_loader_step( ent_tornado_init, NULL ); - /* player setup */ - u32 bytes = 1024*1024*10; - skaterift.replay.data = vg_linear_alloc( vg_mem.rtmemory, bytes ); - skaterift.replay.size = bytes; - replay_clear( &skaterift.replay ); - - particle_alloc( &particles_grind, 300 ); - - player_load_animation_reference( "models/ch_none.mdl" ); - player_model_load( &localplayer.fallback_model, "models/ch_none.mdl" ); - player__bind(); - - player_board_load( &localplayer.fallback_board, "models/board_none.mdl" ); + vg_loader_step( skaterift_load_player_content, NULL ); /* --------------------- */ @@ -215,23 +244,8 @@ static void vg_load(void){ * ------------------------------------- */ - /* hub world */ - addon_reg *hub = skaterift_mount_world_unloadable( "maps/dev_hub", 0 ); - skaterift_mount_world_unloadable( "maps/mp_spawn", - ADDON_REG_CITY|ADDON_REG_PREMIUM ); - skaterift_mount_world_unloadable( "maps/mp_mtzero", - ADDON_REG_MTZERO|ADDON_REG_PREMIUM ); - skaterift_mount_world_unloadable( "maps/dev_tutorial", 0 ); - /* load home/permanent world manually */ - world_static.load_state = k_world_loader_load; - - struct world_load_args args = { - .purpose = k_world_purpose_hub, - .reg = hub - }; - skaterift_world_load_thread( &args ); - + vg_loader_step( skaterift_load_world_content, NULL ); vg_async_call( async_skaterift_player_start, NULL, 0 ); vg_async_stall(); @@ -489,6 +503,11 @@ static void render_scene(void){ //particle_system_debug( &particles_grind ); particle_system_prerender( &particles_grind ); particle_system_render( &particles_grind, &skaterift.cam ); + + ent_tornado_pre_update(); + particle_system_update( &particles_env, vg.time_delta ); + particle_system_prerender( &particles_env ); + particle_system_render( &particles_env, &skaterift.cam ); /* * render transition @@ -575,7 +594,9 @@ static void render_main_game(void){ } else{ player__animate(); - skaterift_record_frame( &skaterift.replay, 0 ); + skaterift_record_frame( &skaterift.replay, + localplayer.deferred_frame_record ); + localplayer.deferred_frame_record = 0; } animate_remote_players(); player__pre_render(); @@ -658,6 +679,9 @@ static void vg_render(void){ static void vg_gui(void){ if( skaterift.op == k_async_op_clientloading ) return; + vg_ui.tex_bg = gpipeline.fb_main->attachments[0].id; + render_fb_inverse_ratio( gpipeline.fb_main, vg_ui.bg_inverse_ratio ); + menu_update(); if( skaterift.activity == k_skaterift_menu ){ glClear( GL_DEPTH_BUFFER_BIT );