grind sound
authorhgn <hgodden00@gmail.com>
Mon, 28 Nov 2022 22:18:03 +0000 (22:18 +0000)
committerhgn <hgodden00@gmail.com>
Mon, 28 Nov 2022 22:18:03 +0000 (22:18 +0000)
17 files changed:
audio.h
build.c
maps_src/mp_mtzero.mdl
network.h
player.h
player_audio.h
player_physics.h
render.h
shaders/blitblur.fs [new file with mode: 0644]
shaders/blitblur.h [new file with mode: 0644]
skaterift.c
sound_src/grind_enter.ogg [new file with mode: 0644]
sound_src/grind_exit.ogg [new file with mode: 0644]
sound_src/grind_loop.ogg [new file with mode: 0644]
steam.h
world.h
world_gen.h

diff --git a/audio.h b/audio.h
index 43adf052e289077ef860e1ef8ba82f1452b3d1b8..f13280be013e1a7c614c2778320c07ade983389b 100644 (file)
--- a/audio.h
+++ b/audio.h
@@ -19,7 +19,10 @@ audio_clip audio_board[] =
    { .path="sound/skate.ogg" },
    { .path="sound/wheel.ogg" },
    { .path="sound/slide.ogg" },
-   { .path="sound/reverb.ogg" }
+   { .path="sound/reverb.ogg" },
+   { .path="sound/grind_loop.ogg" },
+   { .path="sound/grind_enter.ogg" },
+   { .path="sound/grind_exit.ogg" }
 };
 
 audio_clip audio_splash =
@@ -149,6 +152,11 @@ audio_player audio_player3 =
    .name = "Player3",
 };
 
+audio_player audio_player4 =
+{
+   .name = "Player4",
+};
+
 audio_player audio_player_extra =
 {
    .name = "PlayerInst"
@@ -165,6 +173,7 @@ VG_STATIC void audio_init(void)
    audio_player_init( &audio_player1 );
    audio_player_init( &audio_player2 );
    audio_player_init( &audio_player3 );
+   audio_player_init( &audio_player4 );
    audio_player_init( &audio_player_gate );
    audio_player_init( &ambient_player );
    audio_player_init( &ambient_sprites[0] );
@@ -198,6 +207,7 @@ VG_STATIC void audio_init(void)
    audio_player_set_flags( &audio_player0, flags );
    audio_player_set_flags( &audio_player1, flags );
    audio_player_set_flags( &audio_player2, flags );
+   audio_player_set_flags( &audio_player4, flags );
    audio_player_set_flags( &audio_player_gate, flags );
    audio_player_set_flags( &audio_player3, AUDIO_FLAG_LOOP );
    audio_player_set_flags( &ambient_player, AUDIO_FLAG_LOOP );
@@ -215,6 +225,7 @@ VG_STATIC void audio_init(void)
    audio_player_playclip( &audio_player1, &audio_board[1] );
    audio_player_playclip( &audio_player2, &audio_board[2] );
    audio_player_playclip( &audio_player3, &audio_board[3] );
+   audio_player_playclip( &audio_player4, &audio_board[4] );
    audio_player_playclip( &ambient_player, &audio_ambience[0] );
    audio_player_playclip( &audio_player_gate, &audio_gate_ambient );
 
@@ -237,7 +248,7 @@ VG_STATIC void audio_init(void)
    });
 }
 
-VG_STATIC void audio_free(void*_)
+VG_STATIC void audio_free(void)
 {
    /* TODO! */
    vg_warn( "UNIMPLEMENTED: audio_free()\n" );
diff --git a/build.c b/build.c
index 9e56b52ee25dac6e662dd1d7f5bd1148e3fae3fc..053154fc6ed7555ece6b3abb5abd21d7eef5b5f5 100644 (file)
--- a/build.c
+++ b/build.c
@@ -119,7 +119,7 @@ void build_shaders(void)
    vg_shader_set_include_dir( "shaders" );
 
    _shader( "blit",      "shaders/blit.vs",      "shaders/blit.fs" );
-   _shader( "blit",      "shaders/blit.vs",      "shaders/blit.fs" );
+   _shader( "blitblur",  "shaders/blit.vs",      "shaders/blitblur.fs" );
    _shader( "standard",  "shaders/standard.vs",  "shaders/standard.fs" );
    _shader( "vblend",    "shaders/standard.vs",  "shaders/vblend.fs" );
    _shader( "terrain",   "shaders/standard.vs",  "shaders/terrain.fs" );
index 95d812574a1eb075dc170baa6f293a38a396f7b4..d7ed5d467bf5668af3f124e6c65e61c4858a3ab3 100644 (file)
Binary files a/maps_src/mp_mtzero.mdl and b/maps_src/mp_mtzero.mdl differ
index b47f518dd514b5003923f523cb12d8fa9fc1866b..4d34e82bb75a881c47d071879440cda821a209da 100644 (file)
--- a/network.h
+++ b/network.h
@@ -23,7 +23,7 @@ VG_STATIC void network_init(void);
 VG_STATIC void network_update(void);
 
 /* Call it at shutdown */
-VG_STATIC void network_end(void*_);
+VG_STATIC void network_end(void);
 
 /* 
  * Can buffer up a bunch of these by calling many times, they will be
@@ -349,7 +349,7 @@ VG_STATIC void network_init(void)
    }
 }
 
-VG_STATIC void network_end(void*_)
+VG_STATIC void network_end(void)
 {
    /* TODO: Fire off any buffered highscores that need to be setn */
    if( cremote_state == k_ESteamNetworkingConnectionState_Connected ||
@@ -364,7 +364,7 @@ VG_STATIC void network_end(void*_)
 
 VG_STATIC void network_init(void){}
 VG_STATIC void network_update(void){}
-VG_STATIC void network_end(void*_){}
+VG_STATIC void network_end(void){}
 
 #endif /* SR_NETWORKED */
 #endif /* NETWORK_H */
index b2a69bd4090ec7a6b157324f49051d2497076366..7b5eeaa882158316eb7c9befe4f91700679cdb8a 100644 (file)
--- a/player.h
+++ b/player.h
@@ -293,7 +293,7 @@ VG_STATIC void player_init(void)                                            /* 1
    };
 
    for( int i=0; i<vg_list_size(default_cfg); i++ )
-      execute_console_input(default_cfg[i]);
+      vg_execute_console_input(default_cfg[i]);
 
    rb_init( &player.phys.rb );
    rb_init( &player.collide_front );
index 727080cea20c36bc5cf93d996d2aa94436cdeeaa..3c86e3bde847df75fbccdea7e9701e95e909e29e 100644 (file)
@@ -59,6 +59,7 @@ VG_STATIC void player_audio(void)
    audio_player_set_position( &audio_player0, phys->rb.co );
    audio_player_set_position( &audio_player1, phys->rb.co );
    audio_player_set_position( &audio_player2, phys->rb.co );
+   audio_player_set_position( &audio_player4, phys->rb.co );
    audio_player_set_position( &audio_player_gate, world.render_gate_pos );
    audio_player_set_vol( &audio_player_gate, 5.0f );
 
@@ -115,6 +116,7 @@ VG_STATIC void player_audio(void)
       audio_player_set_vol( &audio_player1, 0.0f );
       audio_player_set_vol( &audio_player2, 0.0f );
       audio_player_set_vol( &audio_player3, 0.0f );
+      audio_player_set_vol( &audio_player4, 0.0f );
 
       int walk_phase = 0;
       if( vg_fractf(player.walk_timer) > 0.5f )
@@ -159,15 +161,19 @@ VG_STATIC void player_audio(void)
       float speed = vg_minf(v3_length( phys->rb.v )*0.1f,1.0f),
             attn  = speed,
             slide = vg_clampf( fabsf(phys->slip), 0.0f, 1.0f ),
-            vol0  = (1.0f-air)*attn*(1.0f-slide),
-            vol1  =       air *attn,
-            vol2  = (1.0f-air)*attn*slide;
+            grind = phys->grind,
+            vol0  = (1.0f-air)*attn*(1.0f-slide)*(1.0f-grind),
+            vol1  =       air *attn*(1.0f-grind),
+            vol2  = (1.0f-air)*attn*slide*(1.0f-grind),
+            vol4  = grind*2.0f;
       
       audio_player_set_vol( &audio_player0, vol0*vg.time_rate );
       audio_player_set_vol( &audio_player1, vol1*vg.time_rate );
       audio_player_set_vol( &audio_player2, vol2*vg.time_rate );
+      audio_player_set_vol( &audio_player4, vol4*vg.time_rate );
 
       float reverb_amt = vol0 * audio_occlusion_current * 0.5f;
+
       audio_player_set_pan( &audio_player3, 0.0f );
       audio_player_set_vol( &audio_player3, reverb_amt*vg.time_rate );
    }
index 80a07b2d450f54cd2d5e03c85e534d702ad8c0ad..86f49a0f34a824554f25d409e8cc23879cb824aa 100644 (file)
@@ -973,6 +973,8 @@ VG_STATIC void player_do_motion(void)
       int len = player_update_collision_manifold( manifold );
       int grind_col = player_update_grind_collision( &manifold[len] );
 
+      static int _grind_col_pre = 0;
+
       if( grind_col )
       {
          phys->grind = 1;
@@ -989,17 +991,41 @@ VG_STATIC void player_do_motion(void)
             q_mul( correction, phys->rb.q, phys->rb.q );
          }
 
-         float const DOWNFORCE = -k_downforce*2.0f*VG_TIMESTEP_FIXED;
-         v3_muladds( phys->rb.v, phys->rb.up, DOWNFORCE, phys->rb.v );
+         float const DOWNFORCE = -k_downforce*1.2f*VG_TIMESTEP_FIXED;
+         v3_muladds( phys->rb.v, manifold[len].n, DOWNFORCE, phys->rb.v );
          m3x3_identity( phys->vr );
          m3x3_identity( phys->vr_pstep );
+
+         if( !_grind_col_pre )
+         {
+            audio_lock();
+            audio_player_set_flags( &audio_player_extra, 
+                                    AUDIO_FLAG_SPACIAL_3D );
+            audio_player_set_position( &audio_player_extra, phys->rb.co );
+            audio_player_set_vol( &audio_player_extra, 20.0f );
+            audio_player_playclip( &audio_player_extra, &audio_board[5] );
+            audio_unlock();
+         }
       }
       else
       {
          phys->grind = 0;
          player_adhere_ground( manifold, len );
+
+         if( _grind_col_pre )
+         {
+            audio_lock();
+            audio_player_set_flags( &audio_player_extra, 
+                                    AUDIO_FLAG_SPACIAL_3D );
+            audio_player_set_position( &audio_player_extra, phys->rb.co );
+            audio_player_set_vol( &audio_player_extra, 20.0f );
+            audio_player_playclip( &audio_player_extra, &audio_board[6] );
+            audio_unlock();
+         }
       }
 
+      _grind_col_pre = grind_col;
+
       rb_presolve_contacts( manifold, len+ VG_MAX(0,grind_col) );
       player_collision_response( manifold, len+ VG_MAX(0,grind_col) );
 
index 317b30110bc2d6df942816a258f60940871eec82..33998221b83ea206f6ee8c0d90f44d1c4abe35b3 100644 (file)
--- a/render.h
+++ b/render.h
@@ -6,6 +6,7 @@
 #include "model.h"
 
 #include "shaders/blit.h"
+#include "shaders/blitblur.h"
 #include "shaders/standard.h"
 #include "shaders/vblend.h"
 
@@ -281,6 +282,8 @@ VG_STATIC void render_init_temp_buffer(void)
 
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
+       glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
+       glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
    glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, 
          GL_TEXTURE_2D, 
          gpipeline.rgb_background, 0);
@@ -317,7 +320,10 @@ VG_STATIC void render_init_fs_quad(void)
    vg_info( "[render] Allocate quad\n" );
 
    float quad[] = { 0.0f, 0.0f, 1.0f, 1.0f, 0.0f, 1.0f,
-                    0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f };
+                    0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 1.0f,
+
+                    0.2f, 0.0f, 0.8f, 1.0f, 0.2f, 1.0f,
+                    0.2f, 0.0f, 0.8f, 0.0f, 0.8f, 1.0f};
 
    glGenVertexArrays( 1, &gpipeline.fsquad.vao );
    glGenBuffers( 1, &gpipeline.fsquad.vbo );
@@ -350,6 +356,7 @@ VG_STATIC void render_init_uniform_buffers(void)
 VG_STATIC void render_init(void)
 {
    shader_blit_register();
+   shader_blitblur_register();
    shader_standard_register();
    shader_vblend_register();
 
@@ -376,4 +383,10 @@ VG_STATIC void render_fsquad(void)
    glDrawArrays( GL_TRIANGLES, 0, 6 );
 }
 
+VG_STATIC void render_fsquad1(void)
+{
+   glBindVertexArray( gpipeline.fsquad.vao );
+   glDrawArrays( GL_TRIANGLES, 6, 6 );
+}
+
 #endif /* RENDER_H */
diff --git a/shaders/blitblur.fs b/shaders/blitblur.fs
new file mode 100644 (file)
index 0000000..eac828e
--- /dev/null
@@ -0,0 +1,21 @@
+out vec4 FragColor;
+uniform sampler2D uTexMain;
+
+in vec2 aUv;
+
+vec2 rand_hash22( vec2 p )
+{
+   vec3 p3 = fract(vec3(p.xyx) * 213.8976123);
+   p3 += dot(p3, p3.yzx+19.19);
+   return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));
+}
+
+void main()
+{
+   vec2 voffset = rand_hash22( aUv );
+   
+   float bamt = abs(aUv.x-0.5)*2.0;
+   bamt = pow(bamt,4.0)*0.05;
+
+   FragColor = texture( uTexMain, aUv + voffset*bamt );
+}
diff --git a/shaders/blitblur.h b/shaders/blitblur.h
new file mode 100644 (file)
index 0000000..b754d12
--- /dev/null
@@ -0,0 +1,58 @@
+#ifndef SHADER_blitblur_H
+#define SHADER_blitblur_H
+static void shader_blitblur_link(void);
+static void shader_blitblur_register(void);
+static struct vg_shader _shader_blitblur = {
+   .name = "blitblur",
+   .link = shader_blitblur_link,
+   .vs = 
+{
+.static_src = 
+"layout (location=0) in vec2 a_co;\n"
+"out vec2 aUv;\n"
+"\n"
+"void main()\n"
+"{\n"
+"   gl_Position = vec4(a_co*2.0-1.0,0.0,1.0);\n"
+"   aUv = a_co;\n"
+"}\n"
+""},
+   .fs = 
+{
+.static_src = 
+"out vec4 FragColor;\n"
+"uniform sampler2D uTexMain;\n"
+"\n"
+"in vec2 aUv;\n"
+"\n"
+"vec2 rand_hash22( vec2 p )\n"
+"{\n"
+"   vec3 p3 = fract(vec3(p.xyx) * 213.8976123);\n"
+"   p3 += dot(p3, p3.yzx+19.19);\n"
+"   return fract(vec2((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y));\n"
+"}\n"
+"\n"
+"void main()\n"
+"{\n"
+"   vec2 voffset = rand_hash22( aUv );\n"
+"   \n"
+"   float bamt = abs(aUv.x-0.5)*2.0;\n"
+"   bamt = pow(bamt,4.0)*0.05;\n"
+"\n"
+"   FragColor = texture( uTexMain, aUv + voffset*bamt );\n"
+"}\n"
+""},
+};
+
+static GLuint _uniform_blitblur_uTexMain;
+static void shader_blitblur_uTexMain(int i){
+   glUniform1i(_uniform_blitblur_uTexMain,i);
+}
+static void shader_blitblur_register(void){
+   vg_shader_register( &_shader_blitblur );
+}
+static void shader_blitblur_use(void){ glUseProgram(_shader_blitblur.id); }
+static void shader_blitblur_link(void){
+   _uniform_blitblur_uTexMain = glGetUniformLocation( _shader_blitblur.id, "uTexMain" );
+}
+#endif /* SHADER_blitblur_H */
index ba26edd6ed97c61d444c948f1ef7541279c43532..0b3310ab44781d01dc6ab747cb5c3ae3e8a0aef9 100644 (file)
@@ -33,7 +33,7 @@ int main( int argc, char *argv[] )
    return 0;
 }
 
-VG_STATIC void highscores_save_at_exit(void*_)
+VG_STATIC void highscores_save_at_exit(void)
 {
    highscores_serialize_all();
 }
@@ -73,24 +73,22 @@ vg_info("            '        ' '--' [] '----- '----- '     ' '---'  "
    if( !highscores_read() )
       highscores_create_db();
 
-   vg_loader_highwater( NULL, highscores_save_at_exit, NULL );
-
-   //vg_sleep_ms(200);
+   vg_loader_step( NULL, highscores_save_at_exit );
 
    steam_init();
-   vg_loader_highwater( NULL, steam_end, NULL );
-   vg_loader_highwater( network_init, network_end, NULL );
+   vg_loader_step( NULL, steam_end );
+   vg_loader_step( network_init, network_end );
 }
 
 VG_STATIC void vg_load(void)
 {
-   vg_loader_highwater( render_init, NULL, NULL );
-   vg_loader_highwater( menu_init, NULL, NULL );
-   vg_loader_highwater( world_init, NULL, NULL );
-   vg_loader_highwater( player_init, NULL, NULL );
+   vg_loader_step( render_init, NULL );
+   vg_loader_step( menu_init, NULL );
+   vg_loader_step( world_init, NULL );
+   vg_loader_step( player_init, NULL );
 
    vg_bake_shaders();
-   vg_loader_highwater( audio_init, audio_free, NULL );
+   vg_loader_step( audio_init, audio_free );
    world_audio_init();
 
    /* 'systems' are completely loaded now */
@@ -112,11 +110,11 @@ VG_STATIC void draw_origin_axis(void)
    vg_line( (v3f){ 0.0f, 0.0f, 0.0f }, (v3f){ 0.0f, 0.0f, 1.0f }, 0xff0000ff );
 }
 
-VG_STATIC void vg_update( int loaded )
+VG_STATIC void vg_update(void)
 {
    steam_update();
 
-   if( loaded )
+   if( vg.is_loaded )
    {
       draw_origin_axis();
       network_update();
@@ -126,17 +124,17 @@ VG_STATIC void vg_update( int loaded )
    }
 }
 
-VG_STATIC void vg_update_fixed( int loaded )
+VG_STATIC void vg_update_fixed(void)
 {
-   if( loaded )
+   if( vg.is_loaded )
    {
       player_update_fixed();
    }
 }
 
-VG_STATIC void vg_update_post( int loaded )
+VG_STATIC void vg_update_post(void)
 {
-   if( loaded )
+   if( vg.is_loaded )
    {
       player_update_post();
       menu_update();
diff --git a/sound_src/grind_enter.ogg b/sound_src/grind_enter.ogg
new file mode 100644 (file)
index 0000000..f2c0e62
Binary files /dev/null and b/sound_src/grind_enter.ogg differ
diff --git a/sound_src/grind_exit.ogg b/sound_src/grind_exit.ogg
new file mode 100644 (file)
index 0000000..fa28116
Binary files /dev/null and b/sound_src/grind_exit.ogg differ
diff --git a/sound_src/grind_loop.ogg b/sound_src/grind_loop.ogg
new file mode 100644 (file)
index 0000000..339645f
Binary files /dev/null and b/sound_src/grind_loop.ogg differ
diff --git a/steam.h b/steam.h
index 360a45fd7bda6d6a070ae508faec44c22b1334b8..5d768b88c88ffd84b09581bd73b7026b4c6552b4 100644 (file)
--- a/steam.h
+++ b/steam.h
@@ -6,6 +6,7 @@
 #ifndef STEAM_H
 #define STEAM_H
 
+#define VG_GAME
 #include "vg/vg_steam.h"
 #include "vg/vg_steam_utils.h"
 #include "vg/vg_steam_networking.h"
@@ -309,7 +310,7 @@ VG_STATIC void steam_update(void)
    }
 }
 
-VG_STATIC void steam_end(void *nothing)
+VG_STATIC void steam_end(void)
 {
    if( steam_ready )
    {
diff --git a/world.h b/world.h
index bf58144a3b8727c9b80fc5fea3bfa7752d1fa968..d3072785671a37955b62bcd75e10c1f13e0a5022 100644 (file)
--- a/world.h
+++ b/world.h
@@ -451,11 +451,11 @@ VG_STATIC void world_init(void)
    /* Other systems */
    vg_info( "Loading other world systems\n" );
 
-   vg_loader_highwater( world_render_init, NULL, NULL );
-   vg_loader_highwater( world_sfd_init, NULL, NULL );
-   vg_loader_highwater( world_water_init, NULL, NULL );
-   vg_loader_highwater( world_gates_init, NULL, NULL );
-   vg_loader_highwater( world_routes_init, NULL, NULL );
+   vg_loader_step( world_render_init, NULL );
+   vg_loader_step( world_sfd_init, NULL );
+   vg_loader_step( world_water_init, NULL );
+   vg_loader_step( world_gates_init, NULL );
+   vg_loader_step( world_routes_init, NULL );
 
    /* Allocate dynamic world memory arena */
    u32 max_size = 76*1024*1024;
@@ -557,11 +557,11 @@ VG_STATIC void world_update( v3f pos )
       {
          world.switching_to_new_world = 0;
          world_unload();
-         world_load();
+         vg_loader_start( world_load );
+         return;
       }
    }
 
-
    world.sky_time += world.sky_rate * vg.time_delta;
    world.sky_rate = vg_lerp( world.sky_rate, world.sky_target_rate, 
                                  vg.time_delta * 5.0 );
index 96928b60bd166b05fb58c52810b43f6f83b4a130..ee774bb7486fc63cd8488ec61c61c35c8931f803 100644 (file)
@@ -655,6 +655,8 @@ VG_STATIC void world_process_resources(void)
 
 VG_STATIC void world_unload(void)
 {
+   vg_acquire_thread_sync();
+
    /* free meshes */
    mesh_free( &world.mesh_route_lines );
    mesh_free( &world.mesh_geo );
@@ -734,6 +736,8 @@ VG_STATIC void world_unload(void)
    world.collector_count = 0;
 
    world.water.enabled = 0;
+
+   vg_release_thread_sync();
 }
 
 VG_STATIC void world_load(void)