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();
rigidbody rb;
v3f angles;
- bool have_glider, glider_orphan;
+ bool have_glider, glider_orphan, drowned;
/*
* Camera management
}
}
- if( world->water.enabled ){
- for( int j=0; j<rd->part_count; j++ ){
+ if( localplayer.drowned )
+ {
+ for( int j=0; j<rd->part_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 );
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) );
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 );
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 */
/* graphics */
glmesh mesh_route_lines;
glmesh mesh_geo,
- mesh_no_collide,
- mesh_water;
+ mesh_no_collide;
u32 cubemap_cooldown, cubemap_side;
/* leaderboards */
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 )
{
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.
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 );
}