From: hgn Date: Mon, 4 Dec 2023 16:51:40 +0000 (+0000) Subject: stuff for demo X-Git-Url: https://harrygodden.com/git/?a=commitdiff_plain;h=2dbc6f4022802b89c934ba78e7085cc7ee81799b;p=carveJwlIkooP6JGAAIwe30JlM.git stuff for demo --- diff --git a/build.c b/build.c index cd721e7..4fff0d3 100644 --- a/build.c +++ b/build.c @@ -14,6 +14,8 @@ */ int compiled_something = 0; +int content_enabled = 1; +int binary_enabled = 1; /* old highscores server */ void build_server( enum compiler compiler ){ @@ -107,21 +109,21 @@ void write_generic_addon_inf( u32 type, const char *title, } void build_shaders(void); -void build_game( enum compiler compiler ){ +void build_game_binary( enum compiler compiler ){ static int shaders_built = 0; if( !shaders_built ){ shaders_built = 1; build_shaders(); } - vg_build_start( "skaterift", compiler ); vg_build_object( "skaterift.c " ); vg_build_add_link_for_graphics(); vg_build_add_link_for_game(); - vg_build_copy_graphics_dependencies(); vg_build_copy_game_dependencies(); +} +void build_game_content( enum compiler compiler ){ vg_build_symbolic_link( "textures_src", "textures" ); vg_build_symbolic_link( "models_src", "models" ); vg_build_symbolic_link( "boards_src", "boards" ); @@ -130,7 +132,6 @@ void build_game( enum compiler compiler ){ vg_build_symbolic_link( "playermodels_src", "playermodels" ); vg_build_syscall( "mkdir -p %s/cfg", vg_compiler.build_dir ); vg_build_syscall( "mkdir -p %s/savedata", vg_compiler.build_dir ); - vg_build_syscall( "mkdir -p %s/tools", vg_compiler.build_dir ); vg_build_syscall( "cp blender_export.py %s/tools/", vg_compiler.build_dir ); @@ -168,8 +169,19 @@ void build_game( enum compiler compiler ){ write_generic_addon_inf( k_addon_type_player, "Aaron", "ch_aaron.mdl", "playermodels_src/skaterift_aaron/addon.inf" ); +} + +void build_game( enum compiler compiler ){ + vg_build_start( "skaterift", compiler ); + + if( binary_enabled ){ + build_game_binary( compiler ); + vg_build(); + } + + if( content_enabled ) + build_game_content( compiler ); - vg_build(); compiled_something = 1; } @@ -214,6 +226,15 @@ int main( int argc, char *argv[] ){ if( vg_long_opt( "mingw" ) ) build_game( k_compiler_mingw ); + if( vg_long_opt( "none" ) ) + build_game( k_compiler_none ); + + if( (arg=vg_long_opt_arg( "content" )) ) + content_enabled = atoi(arg); + + if( (arg=vg_long_opt_arg( "binary" )) ) + binary_enabled = atoi(arg); + if( vg_opt('p') || vg_long_opt("run") ){ chdir( vg_compiler.build_dir ); if( vg_compiler.compiler == k_compiler_mingw ) @@ -226,15 +247,17 @@ int main( int argc, char *argv[] ){ if( vg_long_opt( "tar" ) || vg_opt( 't' ) ){ vg_build_syscall( "mkdir -p dist" ); if( compiled_something ) - vg_build_syscall( "tar -chzvf dist/%s-%u.tar.gz %s", - vg_compiler.name, uid, vg_compiler.build_dir ); + vg_build_syscall( "tar -chzvf dist/%s-%u-%s.tar.gz %s", + vg_compiler.name, uid, vg_compiler_str(), + vg_compiler.build_dir ); } if( vg_long_opt( "zip" ) || vg_opt( 'z' ) ){ vg_build_syscall( "mkdir -p dist" ); if( compiled_something ) vg_build_syscall( "zip -r9 dist/%s-%u.zip %s", - vg_compiler.name, uid, vg_compiler.build_dir ); + vg_compiler.name, uid, vg_compiler_str(), + vg_compiler.build_dir ); } } } diff --git a/build_release.sh b/build_release.sh new file mode 100755 index 0000000..e69c7d1 --- /dev/null +++ b/build_release.sh @@ -0,0 +1 @@ +./build.sh --clean --content=0 -r --mingw --tar --content=1 --binary=0 --none --tar diff --git a/ent_miniworld.c b/ent_miniworld.c index afd7b48..46def88 100644 --- a/ent_miniworld.c +++ b/ent_miniworld.c @@ -148,14 +148,17 @@ static void ent_miniworld_preupdate(void){ (global_miniworld.transition) || (world_static.active_instance != k_world_purpose_hub) || (!miniworld) || - (dest->status != k_world_status_loaded) ){ + (dest->status != k_world_status_loaded) || + (skaterift.activity != k_skaterift_default)) { return; } if( button_down( k_srbind_miniworld_resume ) ){ if( skaterift.demo_mode ){ if( world_static.instance_addons[1]->flags & ADDON_REG_PREMIUM ){ - /* TODO: open menu page with link to buy */ + skaterift.activity = k_skaterift_menu; + menu.page = 0xffffffff; + menu_open_page( "Premium", k_ent_menuitem_stack_append ); return; } } diff --git a/ent_skateshop.c b/ent_skateshop.c index 14df0dc..50b4569 100644 --- a/ent_skateshop.c +++ b/ent_skateshop.c @@ -64,8 +64,7 @@ static void skateshop_async_preview_imageload( void *data, u32 len ){ global_skateshop.tex_preview; } else { - skaterift.rt_textures[k_skaterift_rt_workshop_preview] = - global_skateshop.tex_preview_err; + skaterift.rt_textures[k_skaterift_rt_workshop_preview] = vg.tex_missing; } SDL_AtomicLock( &addon_system.sl_cache_using_resources ); @@ -193,11 +192,8 @@ static void skateshop_init_async(void *_data,u32 size){ glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE ); glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE ); - skaterift.rt_textures[ k_skaterift_rt_workshop_preview ] = - global_skateshop.tex_preview_err; - - skaterift.rt_textures[ k_skaterift_rt_server_status ] = - global_skateshop.tex_preview_err; + skaterift.rt_textures[ k_skaterift_rt_workshop_preview ] = vg.tex_missing; + skaterift.rt_textures[ k_skaterift_rt_server_status ] = vg.tex_missing; render_server_status_gui(); } @@ -205,7 +201,6 @@ static void skateshop_init_async(void *_data,u32 size){ * VG event init */ static void skateshop_init(void){ - vg_tex2d_replace_with_error( &global_skateshop.tex_preview_err ); vg_async_call( skateshop_init_async, NULL, 0 ); } diff --git a/ent_skateshop.h b/ent_skateshop.h index 455c61d..68a34f4 100644 --- a/ent_skateshop.h +++ b/ent_skateshop.h @@ -41,7 +41,7 @@ struct{ addon_reg *reg_preview, *reg_loaded_preview; - GLuint tex_preview, tex_preview_err; + GLuint tex_preview; } static global_skateshop={ .render={.reg_id=0xffffffff,.world_reg=0xffffffff} diff --git a/freecam.c b/freecam.c new file mode 100644 index 0000000..2e79ff1 --- /dev/null +++ b/freecam.c @@ -0,0 +1,51 @@ +#include "skaterift.h" +#include "input.h" + +static void freecam_preupdate(void){ + camera *cam = &skaterift.replay_freecam; + v3f angles; + v3_copy( cam->angles, angles ); + player_look( angles, 1.0f ); + + f32 decay = vg_maxf(0.0f,1.0f-vg.time_frame_delta*10.0f); + + v3f d; + v3_sub( angles, cam->angles, d ); + v3_muladds( skaterift.freecam_w, d, 20.0f, skaterift.freecam_w ); + v3_muls( skaterift.freecam_w, decay, skaterift.freecam_w ); + v3_muladds( cam->angles, skaterift.freecam_w, vg.time_frame_delta, + cam->angles ); + cam->angles[1] = vg_clampf( cam->angles[1], -VG_PIf*0.5f,VG_PIf*0.5f); + + camera_update_transform( cam ); + + v3f lookdir = { 0.0f, 0.0f, -1.0f }, + sidedir = { 1.0f, 0.0f, 0.0f }; + + m3x3_mulv( cam->transform, lookdir, lookdir ); + m3x3_mulv( cam->transform, sidedir, sidedir ); + + v2f input; + joystick_state( k_srjoystick_steer, input ); + v2_muls( input, vg.time_frame_delta*6.0f*20.0f, input ); + + v3_muladds( skaterift.freecam_v, lookdir, -input[1], + skaterift.freecam_v ); + v3_muladds( skaterift.freecam_v, sidedir, input[0], + skaterift.freecam_v ); + + v3_muls( skaterift.freecam_v, decay, skaterift.freecam_v ); + v3_muladds( cam->pos, + skaterift.freecam_v, vg.time_frame_delta, cam->pos ); +} + +static int freecam_cmd( int argc, const char *argv[] ){ + if( argc ){ + skaterift.freecam = atoi(argv[0]); + + if( skaterift.freecam ){ + camera_copy( &skaterift.cam, &skaterift.replay_freecam ); + } + } + return 0; +} diff --git a/freecam.h b/freecam.h new file mode 100644 index 0000000..e0d5ade --- /dev/null +++ b/freecam.h @@ -0,0 +1 @@ +static void freecam_preupdate(void); diff --git a/menu.h b/menu.h index 6df04db..cb823b4 100644 --- a/menu.h +++ b/menu.h @@ -49,7 +49,7 @@ struct { camera view; mdl_context model; - GLuint texture; + GLuint *textures; glmesh mesh; mdl_array_ptr items, markers, cameras; @@ -145,19 +145,23 @@ static void menu_init(void){ MDL_LOAD_ARRAY( &menu.model, &menu.markers, ent_marker, alloc ); MDL_LOAD_ARRAY( &menu.model, &menu.cameras, ent_camera, alloc ); - vg_linear_clear( vg_mem.scratch ); + u32 count = mdl_arrcount( &menu.model.textures ); + menu.textures = vg_linear_alloc(alloc,vg_align8(sizeof(GLuint)*(count+1))); + menu.textures[0] = vg.tex_missing; - if( !mdl_arrcount( &menu.model.textures ) ) - vg_fatal_error( "No texture in menu file" ); + mdl_async_load_glmesh( &menu.model, &menu.mesh, NULL ); - mdl_texture *tex0 = mdl_arritm( &menu.model.textures, 0 ); - void *data = vg_linear_alloc( vg_mem.scratch, tex0->file.pack_size ); - mdl_fread_pack_file( &menu.model, &tex0->file, data ); + for( u32 i=0; ifile.pack_size, - VG_TEX2D_LINEAR|VG_TEX2D_CLAMP, - &menu.texture ); + mdl_texture *tex = mdl_arritm( &menu.model.textures, i ); + void *data = vg_linear_alloc( vg_mem.scratch, tex->file.pack_size ); + mdl_fread_pack_file( &menu.model, &tex->file, data ); + vg_tex2d_load_qoi_async( data, tex->file.pack_size, + VG_TEX2D_LINEAR|VG_TEX2D_CLAMP, + &menu.textures[i+1] ); + } mdl_close( &menu.model ); shader_model_menu_register(); @@ -186,6 +190,7 @@ static void menu_back_page(void){ */ static void menu_open_page( const char *name, enum ent_menuitem_stack_behaviour stackmode ){ + srinput.state = k_input_state_resume; if( stackmode == k_ent_menuitem_stack_append ){ if( menu.page_depth >= MENU_STACK_SIZE ) vg_fatal_error( "Stack overflow\n" ); @@ -253,7 +258,6 @@ static void menu_trigger_item( ent_menuitem *item ){ } else if( MDL_CONST_PSTREQ( &menu.model, q, "hub" ) ){ if( world_static.active_instance == k_world_purpose_client ){ - srinput.state = k_input_state_resume; menu_close(); ent_miniworld_goback(); } @@ -264,6 +268,14 @@ static void menu_trigger_item( ent_menuitem *item ){ else if( MDL_CONST_PSTREQ( &menu.model, q, "workshop" ) ){ workshop_submit_command(0,NULL); } + else if( MDL_CONST_PSTREQ( &menu.model, q, "prem_store" ) ){ + if( steam_ready ) + SteamAPI_ISteamFriends_ActivateGameOverlayToStore( + SteamAPI_SteamFriends(), 2103940, k_EOverlayToStoreFlag_None); + } + else if( MDL_CONST_PSTREQ( &menu.model, q, "prem_nevermind" ) ){ + menu_close(); + } } else if( item->type == k_ent_menuitem_type_page_button ){ menu_open_page( mdl_pstr( &menu.model, item->button.pstr ), @@ -654,8 +666,6 @@ static void menu_render(void){ shader_model_menu_use(); shader_model_menu_uTexMain( 1 ); - glActiveTexture( GL_TEXTURE1 ); - glBindTexture( GL_TEXTURE_2D, menu.texture ); shader_model_menu_uPv( menu.view.mtx.pv ); shader_model_menu_uPvmPrev( menu.view.mtx_prev.pv ); @@ -669,6 +679,8 @@ static void menu_render(void){ ent_menuitem *text_list[ 8 ]; u32 text_count = 0; + u32 current_tex = 0xffffffff; + for( u32 i=0; isubmesh_count; j++ ){ u32 index = item->submesh_start + j; - mdl_draw_submesh( mdl_arritm( &menu.model.submeshs, index )); + mdl_submesh *sm = mdl_arritm( &menu.model.submeshs, index ); + + mdl_material *mat = mdl_arritm( &menu.model.materials, + sm->material_id-1 ); + + if( mat->tex_diffuse != current_tex ){ + glActiveTexture( GL_TEXTURE1 ); + glBindTexture( GL_TEXTURE_2D, menu.textures[ mat->tex_diffuse ] ); + current_tex = mat->tex_diffuse; + } + + mdl_draw_submesh( sm ); } } diff --git a/models_src/rs_menu.mdl b/models_src/rs_menu.mdl index 590edc3..24f30b0 100644 Binary files a/models_src/rs_menu.mdl and b/models_src/rs_menu.mdl differ diff --git a/player_replay.c b/player_replay.c index 1b33947..12f7f6b 100644 --- a/player_replay.c +++ b/player_replay.c @@ -4,6 +4,7 @@ #include "player_replay.h" #include "input.h" #include "gui.h" +#include "freecam.h" static void replay_clear( replay_buffer *replay ){ replay->head = NULL; @@ -451,41 +452,7 @@ static void skaterift_replay_pre_update(void){ } if( skaterift.freecam ){ - camera *cam = &skaterift.replay_freecam; - v3f angles; - v3_copy( cam->angles, angles ); - player_look( angles, 1.0f ); - - f32 decay = vg_maxf(0.0f,1.0f-vg.time_frame_delta*10.0f); - - v3f d; - v3_sub( angles, cam->angles, d ); - v3_muladds( skaterift.freecam_w, d, 20.0f, skaterift.freecam_w ); - v3_muls( skaterift.freecam_w, decay, skaterift.freecam_w ); - v3_muladds( cam->angles, skaterift.freecam_w, vg.time_frame_delta, - cam->angles ); - cam->angles[1] = vg_clampf( cam->angles[1], -VG_PIf*0.5f,VG_PIf*0.5f); - - camera_update_transform( cam ); - - v3f lookdir = { 0.0f, 0.0f, -1.0f }, - sidedir = { 1.0f, 0.0f, 0.0f }; - - m3x3_mulv( cam->transform, lookdir, lookdir ); - m3x3_mulv( cam->transform, sidedir, sidedir ); - - v2f input; - joystick_state( k_srjoystick_steer, input ); - v2_muls( input, vg.time_frame_delta*6.0f*20.0f, input ); - - v3_muladds( skaterift.freecam_v, lookdir, -input[1], - skaterift.freecam_v ); - v3_muladds( skaterift.freecam_v, sidedir, input[0], - skaterift.freecam_v ); - - v3_muls( skaterift.freecam_v, decay, skaterift.freecam_v ); - v3_muladds( cam->pos, - skaterift.freecam_v, vg.time_frame_delta, cam->pos ); + //freecam_preupdate(); } else { if( button_down( k_srbind_replay_resume ) ){ @@ -541,6 +508,7 @@ static void skaterift_replay_post_render(void){ } } +#if 0 static void skaterift_get_replay_camera( camera *cam ){ if( skaterift.freecam ){ cam->nearz = 0.1f; @@ -553,6 +521,7 @@ static void skaterift_get_replay_camera( camera *cam ){ replay_get_camera( &skaterift.replay, &skaterift.cam ); } } +#endif static void skaterift_replay_debug_info(void){ player__debugtext( 2, "replay info" ); diff --git a/skaterift.c b/skaterift.c index c7e2d42..23b1db0 100644 --- a/skaterift.c +++ b/skaterift.c @@ -58,6 +58,7 @@ #include "world_routes_ui.c" #include "particle.c" #include "player_effects.c" +#include "freecam.c" static int k_tools_mode = 0; @@ -97,6 +98,12 @@ vg_info(" | \\/ | | / | | \\ | / | \n" ); vg_info(" ' ' '--' [] '----- '----- ' ' '---' " "SOFTWARE\n" ); + /* please forgive me! */ + u32 sz; char *drm; + if( (drm = vg_file_read_text( vg_mem.scratch, "DRM", &sz )) ) + if( !strcmp(drm, "blibby!") ) + skaterift.demo_mode = 0; + vg_loader_step( remote_players_init, NULL ); if( k_tools_mode ) @@ -175,6 +182,8 @@ static void vg_load(void){ vg_console_reg_cmd( "load_world", skaterift_load_world_command, NULL ); vg_console_reg_cmd( "switch_active_instance", skaterift_switch_instance_cmd, NULL ); + vg_console_reg_cmd( "fc", freecam_cmd, NULL ); + vg_console_reg_var( "immobile", &localplayer.immobile, k_var_dtype_i32, 0 ); vg_loader_step( render_init, NULL ); vg_loader_step( menu_init, NULL ); @@ -540,8 +549,16 @@ static void skaterift_composite_maincamera(void){ camera_lerp( &localplayer.cam, &world_static.focus_cam, vg_smoothstepf(world_static.focus_strength), &skaterift.cam ); - if( skaterift.activity == k_skaterift_replay ){ - skaterift_get_replay_camera( &skaterift.cam ); + if( skaterift.freecam ){ + freecam_preupdate(); + v3_copy( skaterift.replay_freecam.pos, skaterift.cam.pos ); + v3_copy( skaterift.replay_freecam.angles, skaterift.cam.angles ); + skaterift.cam.fov = skaterift.replay_freecam.fov; + } + else { + if( skaterift.activity == k_skaterift_replay ){ + replay_get_camera( &skaterift.replay, &skaterift.cam ); + } } skaterift.cam.nearz = 0.1f; diff --git a/skaterift.h b/skaterift.h index fdb0554..35ac9bf 100644 --- a/skaterift.h +++ b/skaterift.h @@ -49,7 +49,7 @@ struct{ struct gui_helper *helper_resume, *helper_freecam; camera replay_freecam; - int freecam; + i32 freecam; v3f freecam_v, freecam_w; enum skaterift_activity { @@ -67,7 +67,8 @@ struct{ u32 achievements; int demo_mode; } -static skaterift = { .op = k_async_op_clientloading, .time_rate = 1.0f }; +static skaterift = { + .op = k_async_op_clientloading, .time_rate = 1.0f, .demo_mode = 1 }; /* Skaterift api */ static void skaterift_change_world_start( addon_reg *reg ); diff --git a/steam.h b/steam.h index e0569a7..dadcd90 100644 --- a/steam.h +++ b/steam.h @@ -63,6 +63,9 @@ static void steam_store_achievements(void) static void update_ach_models(void); static void steam_set_achievement( const char *name ){ + if( skaterift.demo_mode ) + return; + /* hack lol */ if( !strcmp(name,"MARC") ) skaterift.achievements |= 0x1; if( !strcmp(name,"ALBERT") ) skaterift.achievements |= 0x2; diff --git a/steam_build_script.vdf b/steam_build_script.vdf index eb8eff3..02d53f7 100644 --- a/steam_build_script.vdf +++ b/steam_build_script.vdf @@ -8,7 +8,7 @@ "Depots" { - "2103942" // Linux depot + "2103942" // Linux Binary { "FileMapping" { @@ -17,7 +17,7 @@ "recursive" "1" } } - "2103941" // Windoes + "2103941" // Windows Binary { "FileMapping" { @@ -26,5 +26,23 @@ "recursive" "1" } } + "2103943" // Shared Content + { + "FileMapping" + { + "LocalPath" "skaterift-none/*" + "DepotPath" "." + "recursive" "1" + } + } + "2720161" // Extreme DRM solutions + { + "FileMapping" + { + "LocalPath" "DRM" + "DepotPath" "." + "recursive" "0" + } + } } } diff --git a/world_gen.c b/world_gen.c index df5b342..b94c689 100644 --- a/world_gen.c +++ b/world_gen.c @@ -683,8 +683,7 @@ static void world_gen_load_surfaces( world_instance *world ){ world->texture_count = world->meta.textures.count+1; world->textures = vg_linear_alloc( world->heap, vg_align8(sizeof(GLuint)*world->texture_count) ); - - vg_tex2d_replace_with_error( &world->textures[0] ); + world->textures[0] = vg.tex_missing; for( u32 i=0; imeta.textures); i++ ){ mdl_texture *tex = mdl_arritm( &world->meta.textures, i ); diff --git a/world_load.c b/world_load.c index 3dce028..5ab2dfb 100644 --- a/world_load.c +++ b/world_load.c @@ -412,7 +412,7 @@ static void world_free( world_instance *world ){ glDeleteTextures( 1, &world->tex_light_cubes ); /* delete textures and meshes */ - glDeleteTextures( world->texture_count, world->textures ); + glDeleteTextures( world->texture_count-1, world->textures+1 ); u32 world_index = world - world_static.instances; if( world_index ){