From: hgn Date: Fri, 29 Mar 2024 13:00:35 +0000 (+0000) Subject: water fog material prop; ragdoll float only on drowned X-Git-Url: https://skaterift.com/git/?a=commitdiff_plain;h=be5e25dee2c54c2a22ca3bbb5bbe0eb6149343be;p=carveJwlIkooP6JGAAIwe30JlM.git water fog material prop; ragdoll float only on drowned --- diff --git a/maps_src/mp_line1/main.mdl b/maps_src/mp_line1/main.mdl index 21dc6ee..681c8b9 100644 Binary files a/maps_src/mp_line1/main.mdl and b/maps_src/mp_line1/main.mdl differ diff --git a/player.c b/player.c index 8321fee..a60c8c2 100644 --- a/player.c +++ b/player.c @@ -330,6 +330,7 @@ void player__reset(void) localplayer.gate_waiting = NULL; localplayer.have_glider = 0; localplayer.glider_orphan = 0; + localplayer.drowned = 0; v3_copy( localplayer.rb.co, localplayer.cam_control.tpv_lpf ); player__clean_refs(); diff --git a/player.h b/player.h index 69da509..ea4ef46 100644 --- a/player.h +++ b/player.h @@ -63,7 +63,7 @@ struct localplayer rigidbody rb; v3f angles; - bool have_glider, glider_orphan; + bool have_glider, glider_orphan, drowned; /* * Camera management diff --git a/player_ragdoll.c b/player_ragdoll.c index 84908ff..6f9d430 100644 --- a/player_ragdoll.c +++ b/player_ragdoll.c @@ -433,11 +433,14 @@ void player_ragdoll_iter( struct player_ragdoll *rd ) } } - if( world->water.enabled ){ - for( int j=0; jpart_count; j++ ){ + if( localplayer.drowned ) + { + for( int j=0; jpart_count; j++ ) + { struct ragdoll_part *pj = &rd->parts[j]; - if( run_sim ){ + if( run_sim ) + { rb_effect_simple_bouyency( &pj->rb, world->water.plane, k_ragdoll_floatyiness, k_ragdoll_floatydrag ); diff --git a/player_replay.c b/player_replay.c index 15bbd47..7abd993 100644 --- a/player_replay.c +++ b/player_replay.c @@ -442,6 +442,7 @@ void skaterift_record_frame( replay_buffer *replay, int force_gamestate ) replay_frame_data( frame, k_replay_framedata_internal_gamestate ); gs->current_run_version = world_static.current_run_version; + gs->drowned = localplayer.drowned; /* permanent block */ memcpy( &gs->rb, &localplayer.rb, sizeof(rigidbody) ); @@ -521,13 +522,14 @@ void skaterift_record_frame( replay_buffer *replay, int force_gamestate ) localplayer.local_sfx_buffer_count = 0; } -static -void skaterift_restore_frame( replay_frame *frame ){ +static void skaterift_restore_frame( replay_frame *frame ) +{ replay_gamestate *gs = replay_frame_data( frame, k_replay_framedata_internal_gamestate ); void *src = replay_frame_data( frame, k_replay_framedata_gamestate ); u16 src_size = frame->data_table[ k_replay_framedata_gamestate ][1]; world_static.current_run_version = gs->current_run_version; + localplayer.drowned = gs->drowned; if(frame->system == k_player_subsystem_walk ){ memcpy( &player_walk.state, src, src_size ); diff --git a/player_replay.h b/player_replay.h index d6e2293..e97584c 100644 --- a/player_replay.h +++ b/player_replay.h @@ -59,6 +59,7 @@ struct replay_gamestate v3f angles; struct player_cam_controller cam_control; u32 current_run_version; + bool drowned; }; /* we save this per-anim-frame. if there glider is existing in any state */ diff --git a/world.h b/world.h index d9b4439..efa5f9d 100644 --- a/world.h +++ b/world.h @@ -215,8 +215,7 @@ struct world_instance { /* graphics */ glmesh mesh_route_lines; glmesh mesh_geo, - mesh_no_collide, - mesh_water; + mesh_no_collide; u32 cubemap_cooldown, cubemap_side; /* leaderboards */ diff --git a/world_gen.c b/world_gen.c index 3d88ecd..04d6131 100644 --- a/world_gen.c +++ b/world_gen.c @@ -758,6 +758,12 @@ void world_gen_load_surfaces( world_instance *world ) surf->info = *(mdl_material *)mdl_arritm( &world->meta.materials, i ); surf->flags = 0; + if( surf->info.shader == k_shader_water ) + { + struct shader_props_water *props = surf->info.props.compiled; + world->ub_lighting.g_water_fog = props->fog_scale; + } + if( surf->info.shader == k_shader_standard_cutout || surf->info.shader == k_shader_foliage ) { diff --git a/world_load.c b/world_load.c index cf1032e..5a28613 100644 --- a/world_load.c +++ b/world_load.c @@ -471,7 +471,6 @@ void world_free( world_instance *world ) mesh_free( &world->mesh_route_lines ); mesh_free( &world->mesh_geo ); mesh_free( &world->mesh_no_collide ); - mesh_free( &world->mesh_water ); /* glDeleteBuffers silently ignores 0's and names that do not correspond to * existing buffer objects. diff --git a/world_water.c b/world_water.c index dc8206b..38038bf 100644 --- a/world_water.c +++ b/world_water.c @@ -227,10 +227,12 @@ void render_water_surface( world_instance *world, vg_camera *cam ) static void world_water_drown(void) { + if( localplayer.drowned ) return; player__networked_sfx( k_player_subsystem_walk, 32, k_player_walk_soundeffect_splash, localplayer.rb.co, 1.0f ); vg_info( "player fell of due to walking into walker\n" ); + localplayer.drowned = 1; player__dead_transition( k_player_die_type_generic ); }