From 66b3ec9c538fefd79c2de08e0dcdf070b4331885 Mon Sep 17 00:00:00 2001 From: hgn Date: Fri, 31 Mar 2023 13:08:58 +0100 Subject: [PATCH] whoopsie --- blender_export.py | 2 + maps_src/mp_gridmap.mdl | Bin 693952 -> 693952 bytes player_audio.h | 198 ---------------------------------------- player_ragdoll.h | 6 +- player_walk.c | 56 ++++++++++-- player_walk.h | 2 + rigidbody.h | 12 +-- skaterift.c | 2 +- skeleton.h | 2 + world.h | 24 ++--- world_routes.h | 4 +- 11 files changed, 75 insertions(+), 233 deletions(-) delete mode 100644 player_audio.h diff --git a/blender_export.py b/blender_export.py index 3b3f5cd..8b04a20 100644 --- a/blender_export.py +++ b/blender_export.py @@ -430,6 +430,8 @@ def sr_compile_material( mat ): if mat.name in sr_compile.material_cache: return sr_compile.material_cache[mat.name] + print( "\n"+ mat.name+"\n" ) + index = (len(sr_compile.material_data)//sizeof(mdl_material))+1 sr_compile.material_cache[mat.name] = index diff --git a/maps_src/mp_gridmap.mdl b/maps_src/mp_gridmap.mdl index 2f44b2153fcbaeeb307db0492f562e060a2bc498..f20740e41ecf73329e5bb8a195f135ca7e82a996 100644 GIT binary patch delta 1078 zcmYLIe@vTI6y<#FSNI^nHk=7IjZ?xPAoLH>0c*d98bTBpn2i)S{0FGDdjhDXHUtYr4CD(=%^6IfI>Rqk?_mmmOSLz?Cm8H@; z@Hyn*<16MqKCD46u2GH_g+LZ}$*>~Gmt~|YuViMJGq2j&DKhBrKoYlG6}$y4*%TxJ z%`_N|?DtY2D)yKjK%<$znLD0mDjfidne3H?!}P#t@+hQ(9BgkBA7 zyfF_J<(b9%zLB7V{mN(aMAp%)Jm1ilPS!{3d9Z8I%x(EX^i#T#52FrOxLkyNsH4Ur z6hJ9SSyt6Qtt`aHi^b!vsk`cDzgXEC4~E0njxMSF^H#Qr47<=E!O7jF!k$P9mcpWe zi}LqiH_%CgWk}a3-uo(3^C{6G~= zh>>9DwJkU<`vZ1%ov*iusddPPL{xf2gDTDDDfbyI`nhL5kYcx zZkPFk5hn{#;0X3fIK=ZiU{qpevdwP{JDHn1Iz(3=QlJB8Wc&F3(~W7J4`^kG$g#e(YCksn{(EgGdzGX+{{Uo?l->XU delta 1082 zcmYLIaZHqD81MIf_Z@tIoQ1aRBr8H11pFZm(Yx-FgQZYu-V0$F)4rOcX48}&I$pl+cCLzKmr(TSTXVW{gmp30c5q(V)VCdtz2ag0?*=(VjHy4`@vM`lQnv+} zCOjjSqtLARvxF`Gfx(Yc(;D1dg+HnEdCV#5?!MUlS|2~b7DMydR{_%(PvMHz8Y zOucN{Zo5nV7jfZnOp4O2NXA9cz7>Obf%3P(3al43Hl)HQx@}VbTP;f;c(RDErfD0R z6;z9|bmVCpCYL;2^DcfzjHb&hcS^da<7uuylP7{ye! z1DVir;%0T*?+(5wyxGCWL%-=?{OsUMVm=tY^8So|cHF@&6ulFN8IB8gj< zaFR0i;5Ep*Jr@azcFmUOI~rBRKc&%qIHe$zat|O6@KSdn1{Afesh01jvV$0A>Xhrc z=S`7TB%A(4lorVfUnYMMEDWhM`4;M+y?U#}w|A_N$BM!dnPs7-609%`QPW{LHjGn# zIl>u^i9;1=RXx*AJ|O}Xvg*z8pV+r8I(dUgtVEt#d+85*8M!O5Nx?PYt(KNmFMp-i zd5&z6;?JL6Ic9G~rBYLRc8SH0Y*A36qErYKS^Y6+jF44L=ILv4ft`m~v zv$37_x-Nsy)AR`xGrT7<>XEEPUf*Ib=rnkvaMjDM8fm&77gRZ5*J)XdrK;JpEGAFO zrCm*>jrfacDT`)r`Zorjqp~wdWw=KjA7Ca72gv;~tn0Mak{NyBhJ#BN`(O>he)10l z4XC6x9~Kn!iiRPnyW1A<-FbQsKS$mnWQJi}sH1p*z4T~QZl#uWW!K>S4Hj;Q>6<8! z@+h7eCX9%8 zl3BvP|ByP9Syz&z$$gzI#A`o&)aQNp<5}H7*={Bc&Kccontroller == k_player_controller_skate) && - (!_air && l2) && (revert_delta > 0.7) && - (player.air_time > 0.5f) ) - { - audio_player_set_position( &audio_player_extra, phys->rb.co ); - audio_player_set_flags( &audio_player_extra, AUDIO_FLAG_SPACIAL_3D ); - audio_player_set_vol( &audio_player_extra, 2.0f ); - - if( (fabsf(phys->slip) > 0.75f) ) - { - audio_player_playclip( &audio_player_extra, &audio_lands[rand()%2+3] ); - } - else - { - audio_player_playclip( &audio_player_extra, &audio_lands[rand()%3] ); - } - - last_revert = vg.time; - } - - static float air = 0.0f; - air = vg_lerpf( air, player_skate.activity == k_skate_activity_air, - 5.0f*vg.time_delta ); - - /* Spacial info */ - v3f ears = { 1.0f,0.0f,0.0f }; - v3f delta; - - float *cam = main_camera.transform[3], - *pos = phys->rb.co; - - 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 ); - - v3_sub( phys->rb.co, main_camera.transform[3], delta ); - v3_normalize( delta ); - m3x3_mulv( main_camera.transform, ears, ears ); - - /* TODO, Make function */ - v3_copy( ears, vg_audio.listener_ears ); - v3_copy( main_camera.transform[3], vg_audio.listener_pos ); - - /* Tunnel / occlusion */ - audio_sample_occlusion( main_camera.transform[3] ); - - int sprite_avail = -1; - for( int i=0; irb.co, waterpos ); - - if( sprite_type != k_audio_sprite_type_none ) - { - audio_player *avail = &ambient_sprites[ sprite_avail ]; - - audio_player_set_vol( avail, 20.0f ); - audio_player_set_flags( avail, AUDIO_FLAG_SPACIAL_3D ); - audio_player_set_position( avail, waterpos ); - - if( sprite_type == k_audio_sprite_type_grass ) - { - audio_player_playclip( avail, &audio_grass[rand()%4] ); - } - else if( sprite_type == k_audio_sprite_type_water ) - { - if( world.water.enabled ) - audio_player_playclip( avail, &audio_water[rand()%6] ); - } - } - } - - if( freecam || player.is_dead || - !(phys->controller != k_player_controller_skate)) - { - audio_player_set_vol( &audio_player0, 0.0f ); - 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 ) - walk_phase = 1; - else - walk_phase = 0; - - if( (player.step_phase != walk_phase) && - !(player_walk.activity == k_walk_activity_air) ) - { - 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, 6.0f ); - - if( player.surface_prop == k_surface_prop_concrete ) - { - audio_player_playclip( - &audio_player_extra, - &audio_footsteps[rand()%vg_list_size(audio_footsteps)] - ); - } - else if( player.surface_prop == k_surface_prop_grass ) - { - audio_player_playclip( - &audio_player_extra, - &audio_footsteps_grass[rand()%vg_list_size(audio_footsteps_grass)] - ); - } - else if( player.surface_prop == k_surface_prop_wood ) - { - audio_player_playclip( - &audio_player_extra, - &audio_footsteps_wood[rand()%vg_list_size(audio_footsteps_wood)] - ); - } - } - - player.step_phase = walk_phase; - } - else - { - /* Composite */ - 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 ), - grind = player_skate.activity == k_skate_activity_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 ); - } - -#if 0 - world_audio_update( cam, ears ); -#endif - audio_unlock(); - - if( player_skate.activity == k_skate_activity_air ) - player.air_time += vg.time_delta; - else - player.air_time = 0.0f; -#endif -} - -#endif /* PLAYER_AUDIO_H */ diff --git a/player_ragdoll.h b/player_ragdoll.h index 497aedd..e471163 100644 --- a/player_ragdoll.h +++ b/player_ragdoll.h @@ -90,8 +90,10 @@ VG_STATIC void player_init_ragdoll_bone_collider( struct skeleton_bone *bone, rp->colour = 0xff000000 | (0xff << (major_axis*8)); } - else + else{ + vg_warn( "type: %u\n", bone->collider ); vg_fatal_exit_loop( "Invalid bone collider type" ); + } m4x3_invert_affine( rp->collider_mtx, rp->inv_collider_mtx ); @@ -130,7 +132,7 @@ VG_STATIC void player_setup_ragdoll_from_avatar( struct player_ragdoll *rd, rd->position_constraints_count = 0; rd->cone_constraints_count = 0; - for( u32 i=0; isk.bone_count; i ++ ){ + for( u32 i=1; isk.bone_count; i ++ ){ struct skeleton_bone *bone = &av->sk.bones[i]; /* diff --git a/player_walk.c b/player_walk.c index 6d02052..75e3a37 100644 --- a/player_walk.c +++ b/player_walk.c @@ -408,6 +408,8 @@ VG_STATIC void player__walk_update( player_instance *player ) if( w->state.activity != k_walk_activity_lockedmove ) w->state.activity = k_walk_activity_air; + w->surface = k_surface_prop_concrete; + for( int i=0; istate.activity = k_walk_activity_ground; v3_add( surface_avg, ct->n, surface_avg ); + + struct world_surface *surf = world_contact_surface( world, ct ); + if( surf->info.surface_prop > w->surface ) + w->surface = surf->info.surface_prop; } rb_prepare_contact( ct, k_rb_delta ); @@ -456,9 +462,6 @@ VG_STATIC void player__walk_update( player_instance *player ) } else{ player_friction( player->rb.v ); - - struct world_surface *surf = world_contact_surface( world, manifold ); - w->surface = surf->info.surface_prop; } } else{ @@ -633,6 +636,40 @@ VG_STATIC void player__walk_post_update( player_instance *player ) v3_add( player->rb.co, p1, p1 ); vg_line( player->rb.co, p1, VG__PINK ); + + + int walk_phase = 0; + if( vg_fractf(w->walk_timer) > 0.5f ) + walk_phase = 1; + else + walk_phase = 0; + + if( (w->step_phase != walk_phase) && + (w->state.activity == k_walk_activity_ground ) ) + { + audio_lock(); + if( w->surface == k_surface_prop_concrete ){ + audio_oneshot_3d( + &audio_footsteps[rand()%vg_list_size(audio_footsteps)], + player->rb.co, 40.0f, 1.0f + ); + } + else if( w->surface == k_surface_prop_grass ){ + audio_oneshot_3d( + &audio_footsteps_grass[rand()%vg_list_size(audio_footsteps_grass)], + player->rb.co, 40.0f, 1.0f + ); + } + else if( w->surface == k_surface_prop_wood ){ + audio_oneshot_3d( + &audio_footsteps_wood[rand()%vg_list_size(audio_footsteps_wood)], + player->rb.co, 40.0f, 1.0f + ); + } + audio_unlock(); + } + + w->step_phase = walk_phase; } VG_STATIC void player__walk_animate( player_instance *player, @@ -659,8 +696,7 @@ VG_STATIC void player__walk_animate( player_instance *player, player_pose apose, bpose; - if( w->move_speed > 0.025f ) - { + if( w->move_speed > 0.025f ){ /* TODO move */ float walk_norm = 30.0f/(float)w->anim_walk->length, run_norm = 30.0f/(float)w->anim_run->length, @@ -668,8 +704,7 @@ VG_STATIC void player__walk_animate( player_instance *player, w->walk_timer += walk_adv * vg.time_delta; } - else - { + else{ w->walk_timer = 0.0f; } @@ -812,6 +847,13 @@ VG_STATIC void player__walk_im_gui( player_instance *player ) "k_walk_activity_immobile", "k_walk_activity_lockedmove" } [w->state.activity] ); + player__debugtext( 1, "surface: %s\n", + (const char *[]){ "concrete", + "wood", + "grass", + "tiles", + "metal" } + [w->surface] ); if( w->state.outro_anim ) { diff --git a/player_walk.h b/player_walk.h index beb87d2..fc26280 100644 --- a/player_walk.h +++ b/player_walk.h @@ -53,6 +53,8 @@ struct player_walk move_speed, walk_timer; + + int step_phase; }; VG_STATIC void player__walk_pre_update ( player_instance *player ); diff --git a/rigidbody.h b/rigidbody.h index 0fcb894..3987913 100644 --- a/rigidbody.h +++ b/rigidbody.h @@ -1509,8 +1509,7 @@ VG_STATIC int rb_sphere__scene( m4x3f mtxA, rb_sphere *b, v3_sub( mtxA[3], (v3f){ r,r,r }, box[0] ); v3_add( mtxA[3], (v3f){ r,r,r }, box[1] ); - while( bh_next( s->bh_scene, &it, box, &idx ) ) - { + while( bh_next( s->bh_scene, &it, box, &idx ) ){ u32 *ptri = &sc->arrindices[ idx*3 ]; v3f tri[3]; @@ -1526,8 +1525,7 @@ VG_STATIC int rb_sphere__scene( m4x3f mtxA, rb_sphere *b, int contact = rb_sphere__triangle( mtxA, b, tri, &buf[count] ); count += contact; - if( count == 16 ) - { + if( count == 16 ){ vg_warn( "Exceeding sphere_vs_scene capacity. Geometry too dense!\n" ); return count; } @@ -1999,8 +1997,7 @@ VG_STATIC int rb_capsule__scene( m4x3f mtxA, rb_capsule *c, scene *sc = s->bh_scene->user; - while( bh_next( s->bh_scene, &it, bbx, &idx ) ) - { + while( bh_next( s->bh_scene, &it, bbx, &idx ) ){ u32 *ptri = &sc->arrindices[ idx*3 ]; v3f tri[3]; @@ -2012,8 +2009,7 @@ VG_STATIC int rb_capsule__scene( m4x3f mtxA, rb_capsule *c, int contact = rb_capsule__triangle( mtxA, c, tri, &buf[count] ); count += contact; - if( count >= 16 ) - { + if( count >= 16 ){ vg_warn("Exceeding capsule_vs_scene capacity. Geometry too dense!\n"); return count; } diff --git a/skaterift.c b/skaterift.c index 4b73237..8e7b738 100644 --- a/skaterift.c +++ b/skaterift.c @@ -45,7 +45,7 @@ static int cl_ui = 1, int main( int argc, char *argv[] ) { - vg_mem.use_libc_malloc = 0; + vg_mem.use_libc_malloc = 1; vg_set_mem_quota( 160*1024*1024 ); vg_enter( argc, argv, "Voyager Game Engine" ); diff --git a/skeleton.h b/skeleton.h index 2595cda..0332a60 100644 --- a/skeleton.h +++ b/skeleton.h @@ -475,6 +475,8 @@ VG_STATIC void skeleton_setup( struct skeleton *skele, sb->collider = bone->collider; sb->orig_bone = bone; + vg_info( "orig: %u\n", bone->collider ); + if( sb->flags & k_bone_flag_ik ){ skele->bones[ sb->parent ].flags |= k_bone_flag_ik; diff --git a/world.h b/world.h index ff2c2e3..9883b29 100644 --- a/world.h +++ b/world.h @@ -731,16 +731,14 @@ VG_STATIC int spherecast_world( world_instance *world, float min_t = 1.0f; int idx; - while( bh_next( world->geo_bh, &it, region, &idx ) ) - { + while( bh_next( world->geo_bh, &it, region, &idx ) ){ u32 *ptri = &world->scene_geo->arrindices[ idx*3 ]; v3f tri[3]; boxf box; box_init_inf( box ); - for( int j=0; j<3; j++ ) - { + for( int j=0; j<3; j++ ){ v3_copy( world->scene_geo->arrvertices[ptri[j]].co, tri[j] ); box_addpt( box, tri[j] ); } @@ -753,10 +751,8 @@ VG_STATIC int spherecast_world( world_instance *world, float t; v3f n1; - if( spherecast_triangle( tri, pa, dir, r, &t, n1 ) ) - { - if( t < min_t ) - { + if( spherecast_triangle( tri, pa, dir, r, &t, n1 ) ){ + if( t < min_t ){ min_t = t; hit = idx; v3_copy( n1, n ); @@ -772,18 +768,16 @@ VG_STATIC struct world_surface *world_tri_index_surface( world_instance *world, u32 index ) { - for( int i=1; isurface_count; i++ ) - { - struct world_surface *mat = &world->surfaces[i]; + for( int i=1; isurface_count; i++ ){ + struct world_surface *surf = &world->surfaces[i]; - if( (index >= mat->sm_geo.vertex_start) && - (index < mat->sm_geo.vertex_start+mat->sm_geo.vertex_count ) ) + if( (index >= surf->sm_geo.vertex_start) && + (index < surf->sm_geo.vertex_start+surf->sm_geo.vertex_count ) ) { - return mat; + return surf; } } - /* error surface */ return &world->surfaces[0]; } diff --git a/world_routes.h b/world_routes.h index 91456aa..5862657 100644 --- a/world_routes.h +++ b/world_routes.h @@ -196,7 +196,7 @@ VG_STATIC void world_routes_debug( world_instance *world ) } VG_STATIC void world_routes_place_curve( world_instance *world, - v4f h[4], v3f n0, v3f n2 ) + v4f h[3], v3f n0, v3f n2 ) { float t; v3f p, pd; @@ -422,7 +422,7 @@ VG_STATIC void world_routes_generate( world_instance *world ) } for( u32 i=0; ient_route_node); i++ ){ - ent_route_node *rn = mdl_arritm( &world->ent_route, i ); + ent_route_node *rn = mdl_arritm( &world->ent_route_node, i ); rn->ref_count = 0; rn->ref_total = 0; } -- 2.25.1