*/
int compiled_something = 0;
+int content_enabled = 1;
+int binary_enabled = 1;
/* old highscores server */
void build_server( enum compiler compiler ){
}
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" );
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 );
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;
}
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 )
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 );
}
}
}
--- /dev/null
+./build.sh --clean --content=0 -r --mingw --tar --content=1 --binary=0 --none --tar
(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;
}
}
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 );
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();
}
* 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 );
}
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}
--- /dev/null
+#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;
+}
--- /dev/null
+static void freecam_preupdate(void);
camera view;
mdl_context model;
- GLuint texture;
+ GLuint *textures;
glmesh mesh;
mdl_array_ptr items, markers, cameras;
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; i<count; i ++ ){
+ vg_linear_clear( vg_mem.scratch );
+ menu.textures[i+1] = vg.tex_missing;
- mdl_async_load_glmesh( &menu.model, &menu.mesh, NULL );
- vg_tex2d_load_qoi_async( data, tex0->file.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();
*/
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" );
}
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();
}
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 ),
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 );
ent_menuitem *text_list[ 8 ];
u32 text_count = 0;
+ u32 current_tex = 0xffffffff;
+
for( u32 i=0; i<mdl_arrcount(&menu.items); i++ ){
ent_menuitem *item = mdl_arritm( &menu.items, i );
for( u32 j=0; j<item->submesh_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 );
}
}
#include "player_replay.h"
#include "input.h"
#include "gui.h"
+#include "freecam.h"
static void replay_clear( replay_buffer *replay ){
replay->head = NULL;
}
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 ) ){
}
}
+#if 0
static void skaterift_get_replay_camera( camera *cam ){
if( skaterift.freecam ){
cam->nearz = 0.1f;
replay_get_camera( &skaterift.replay, &skaterift.cam );
}
}
+#endif
static void skaterift_replay_debug_info(void){
player__debugtext( 2, "replay info" );
#include "world_routes_ui.c"
#include "particle.c"
#include "player_effects.c"
+#include "freecam.c"
static int k_tools_mode = 0;
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 )
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 );
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;
struct gui_helper *helper_resume, *helper_freecam;
camera replay_freecam;
- int freecam;
+ i32 freecam;
v3f freecam_v, freecam_w;
enum skaterift_activity {
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 );
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;
\r
"Depots"\r
{\r
- "2103942" // Linux depot\r
+ "2103942" // Linux Binary\r
{\r
"FileMapping"\r
{\r
"recursive" "1"\r
}\r
}\r
- "2103941" // Windoes\r
+ "2103941" // Windows Binary\r
{\r
"FileMapping"\r
{\r
"recursive" "1"\r
}\r
}\r
+ "2103943" // Shared Content\r
+ {\r
+ "FileMapping"\r
+ {\r
+ "LocalPath" "skaterift-none/*"\r
+ "DepotPath" "."\r
+ "recursive" "1"\r
+ }\r
+ }\r
+ "2720161" // Extreme DRM solutions\r
+ {\r
+ "FileMapping"\r
+ {\r
+ "LocalPath" "DRM"\r
+ "DepotPath" "."\r
+ "recursive" "0"\r
+ }\r
+ }\r
}\r
}\r
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; i<mdl_arrcount(&world->meta.textures); i++ ){
mdl_texture *tex = mdl_arritm( &world->meta.textures, i );
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 ){