#include common_scripts\utility; #include maps\_utility; ENDING_MOVE_SPEED = 0.45; main() { precacheshellshock( "slowview" ); precacheshellshock( "aftermath" ); //precacheshellshock( "aftermath_fall" ); precacheShader( "overlay_hunted_black" ); precacheShader( "overlay_hunted_white" ); flag_init( "force_limp" ); flag_init( "fall" ); flag_init( "collapse" ); flag_init( "collapse_done" ); flag_init( "aftermath_dont_do_wakeup" ); flag_init( "start_doing_aftermath_walk" ); flag_init( "player_heartbeat_sound" ); flag_init( "player_limping" ); flag_init( "stop_being_stunned" ); waittillframeend; level.player_heartrate = 0.8; level.player.movespeedscale = 1; } aftermath_style_walking() { // level.player childthread player_heartbeat(); waittillframeend; // so flag can get set waittillframeend; // for main init if ( flag( "stop_aftermath_player" ) ) return; level endon( "stop_aftermath_player" ); level.ground_ref_ent = spawn( "script_model", ( 0, 0, 0 ) ); level.player playerSetGroundReferenceEnt( level.ground_ref_ent ); // level childthread slowview(); set_vision_set( "aftermath_walking", 0 ); if ( flag( "aftermath_dont_do_wakeup" ) ) return; player_wakeup(); // level.player childthread player_jump_punishment(); } slowview() { while ( true ) { level waittill( "slowview", wait_time ); if ( isdefined( wait_time ) ) wait( wait_time ); childthread restart_slowview(); //level.player shellshock( "slowview", 15 ); } } restart_slowview() { level endon ( "slowview" ); wait 10; level notify ( "slowview" ); } player_heartbeat() { // flag_clear( "stop_heart" ); level notify ( "stop_heart" ); level endon ( "stop_heart" ); // wait 3; while ( true ) { if ( !flag( "fall" ) ) { if ( isdefined( level.heartbeat_blood_func ) ) { [[ level.heartbeat_blood_func ]](); } if ( flag( "player_heartbeat_sound" ) ) { level.player thread play_sound_on_entity( "breathing_heartbeat" ); wait 0.05; level.player PlayRumbleOnEntity( "damage_light" ); } wait level.player_heartrate; } wait( 0 + randomfloat( 0.1 ) ); if ( randomint( 50 ) > level.player.movespeedscale * 190 ) wait randomfloat( 1 ); } } get_player_speed() { } player_wakeup() { level.player play_sound_on_entity( "sprint_gasp" ); flag_wait( "start_doing_aftermath_walk" ); thread swivel(); // childthread recover(); //level.player playerSetGroundReferenceEnt( undefined ); level.player play_sound_on_entity( "breathing_hurt_start" ); level.player thread play_sound_on_entity( "breathing_better" ); level.player childthread player_random_blur(); } adjust_angles_to_player( stumble_angles ) { pa = stumble_angles[ 0 ]; ra = stumble_angles[ 2 ]; rv = anglestoright( level.player.angles ); fv = anglestoforward( level.player.angles ); rva = ( rv[ 0 ], 0, rv[ 1 ] * - 1 ); fva = ( fv[ 0 ], 0, fv[ 1 ] * - 1 ); angles = vector_multiply( rva, pa ); angles = angles + vector_multiply( fva, ra ); return angles + ( 0, stumble_angles[ 1 ], 0 ); } limp() { thread limp_thread(); // thread limp_old(); } adjust_swivel_over_time( ent ) { level endon( "stop_drunk_walk" ); next_switch = 1; original_range = 7; // 25; for ( ;; ) { range = original_range * level.unsteady_scale; yaw = randomfloatrange( range * 0.5, range ); next_switch--; if ( next_switch <= 0 ) { next_switch = randomint( 3 ); yaw *= -1; } dif = yaw - ent.origin[0]; dif = abs( dif ); time = dif * 0.05; if ( time < 0.05 ) time = 0.05; start_time = gettime(); ent moveto( ( yaw, 0, 0 ), time, time * 0.5, time * 0.5 ); wait time; wait_for_buffer_time_to_pass( start_time, 0.6 ); for ( ;; ) { player_speed = distance( (0,0,0), level.player getvelocity() ); if ( player_speed >= 80 ) break; wait 0.05; } } } swivel_ends() { level waittill( "stop_drunk_walk" ); time = 0.8; level.ground_ref_ent rotateto( (0,0,0), time, time * 0.5, time * 0.5 ); wait time; level.ground_ref_ent delete(); level.player playerSetGroundReferenceEnt( undefined ); SetSlowMotion( 0.95, 1, 0.5 ); } swivel() { thread swivel_ends(); level endon( "stop_drunk_walk" ); level.unsteady_scale = 4.1; thread SetSlowMotion_overtime(); ent = spawn_tag_origin(); roll_ent = spawn_tag_origin(); thread adjust_swivel_over_time( ent ); thread adjust_roll_ent( roll_ent ); pitch_sin = 0; last_stun = gettime(); stuns = 3; stun_interval = 3500; time = 0.1; last_angles = level.player getplayerangles()[1]; for ( ;; ) { new_angles = level.player getplayerangles()[1]; dif = new_angles - last_angles; //angles = level.player getplayerangles(); //yaw = angles[1]; //yaw += ent.origin[0]; yaw = ent.origin[0] + dif; last_angles = new_angles; // roll = roll_ent.origin[0]; player_speed = distance( (0,0,0), level.player getvelocity() ); pitch_sin += player_speed * 0.06; if ( player_speed > 80 ) { new_sin = sin( gettime() * -0.1 ); pitch_sin += new_sin * 10; if ( gettime() > last_stun + stun_interval && !flag( "stop_being_stunned" ) && stuns ) { stuns--; last_stun = gettime(); stuntime = randomfloatrange( 1, 2.5 ); axis = getaiarray( "axis" ); closest = getClosest( level.player.origin, axis ); too_close = isalive( closest ) && distance( level.player.origin, closest.origin ) < 400; if ( !too_close ) { assert( stuntime * 1000 < stun_interval ); // avoiding overlap of allowcrouch delay calls. could get messy. childthread swivel_stunplayer( stuntime ); level.player StunPlayer( stuntime ); // level.player thread play_sound_on_entity( "breathing_hurt" ); } } // if ( randomint( 100 ) > 1 ) // Earthquake( 0.1, 1, level.player.origin, 9000 ); } pitch = sin( pitch_sin ) * 4 * level.unsteady_scale; // 12; if ( !flag( "player_limping" ) ) level.ground_ref_ent rotateto( ( pitch * 0.15, yaw * -1, pitch * 0.85 ), time, time * 0.5, time * 0.5 ); // level.ground_ref_ent rotateto( ( roll, yaw, roll ), time, time * 0.5, time * 0.5 ); wait 0.05; } } swivel_stunplayer( stuntime ) { level notify ( "swivel_stunplayer" ); level endon ( "swivel_stunplayer" ); level.player allowcrouch( false ); level.player allowprone( false ); wait stuntime; level.player allowcrouch( true ); level.player allowprone( true ); } SetSlowMotion_overtime() { level endon( "stop_drunk_walk" ); timescale = 1; range = 0.15; time = 4; wait 3; for ( ;; ) { SetSlowMotion( timescale, 0.89, time ); wait time; SetSlowMotion( timescale, 1.06, time ); wait time; } } adjust_roll_ent( roll_ent ) { level endon( "stop_drunk_walk" ); walking_count = 0; cap = 140; struct = getstruct( "limp_yaw_ent", "targetname" ); targ = getstruct( struct.target, "targetname" ); angles = vectortoangles( targ.origin - struct.origin ); forward = anglestoforward( angles ); limped = false; for ( ;; ) { player_speed = distance( (0,0,0), level.player getvelocity() ); //limp_yaw_ent fast_enough = player_speed > 80; player_angles = level.player getplayerangles(); player_forward = anglestoforward( player_angles ); correct_limp_direction = vectordot( player_forward, forward ) >= 0.8; if ( fast_enough && correct_limp_direction ) walking_count += 2; else walking_count -= 1; walking_count = clamp( walking_count, 0, cap ); if ( walking_count < cap ) { wait 0.05; continue; } walking_count = 0; if ( !limped ) { limped = true; limp(); time = 2; ent = spawn_tag_origin(); ent.origin = ( level.unsteady_scale, 0, 0 ); ent moveto( (1,0,0), time, time * 0.5, time * 0.5 ); for ( ;; ) { level.unsteady_scale = ent.origin[0]; if ( level.unsteady_scale == 1 ) break; wait 0.05; } ent delete(); return; //continue; } cap = randomintrange( 70, 125 ); time = 0.45; roll = randomfloatrange( -16, -11 ); roll_ent moveto( (roll,0,0), time, 0, time ); wait time; time *= 0.8; offset = randomfloatrange( -2, 2 ); roll_ent moveto( (offset,0,0), time, time * 0.5, time * 0.5 ); wait time; } } limp_thread() { level notify ( "kill_limp" ); level endon ( "kill_limp" ); while ( true ) { player_speed = distance( (0,0,0), level.player getvelocity() ); if ( player_speed < 80 ) { wait 0.05; continue; } stun_time = 2.3; level.player thread swivel_stunplayer( stun_time ); level.player thread play_sound_on_entity( "breathing_hurt" ); level notify ( "not_random_blur" ); noself_delayCall( .5, ::setblur, 4, .25 ); noself_delayCall( 1.2, ::setblur, 0, 1 ); delaythread( stun_time, ::player_random_blur ); delaythread( 1, maps\af_chase_knife_fight_code::fade_out, stun_time * 4); delaythread( stun_time, maps\af_chase_knife_fight_code::fade_in, stun_time ); set_vision_set( "aftermath_hurt", stun_time * 2 ); delaythread( 1, ::set_vision_set, "aftermath_walking", stun_time ); delaythread( stun_time * 2, ::set_vision_set, "aftermath_walking", stun_time ); level.player PlayRumbleOnEntity( "damage_light" ); level.player blend_movespeedscale( 0.25, 0.3 ); level.player delaythread( stun_time * 0.5, ::blend_movespeedscale, ENDING_MOVE_SPEED, stun_time ); // level.player thread play_sound_on_entity( "breathing_hurt" ); flag_clear( "force_limp" ); wait stun_time; break; } } limp_old() { stumble = 0; alt = 0; while ( true ) { timer = randomfloatrange( 2, 4 ); wait timer; velocity = level.player getvelocity(); player_speed = abs( velocity [ 0 ] ) + abs( velocity[ 1 ] ); if ( player_speed < 10 && !flag( "force_limp" ) ) { wait 0.05; continue; } speed_multiplier = player_speed / ( level.player.movespeedscale * 190 ); p = randomfloatrange( 3, 5 ); if ( randomint( 100 ) < 20 ) p *= 1.5; stumble_time = randomfloatrange( 0.35, 0.45 ); recover_time = randomfloatrange( 0.65, 0.8 ); if ( flag( "force_limp" ) ) { flag_clear( "force_limp" ); speed_multiplier = 0.35; p *= 3; stumble_time = randomfloatrange( 0.7, 0.85 ); recover_time = randomfloatrange( 1.65, 1.8 ); } r = randomfloatrange( 3, 7 ); y = randomfloatrange( -8, -2 ); stumble_angles = ( p, y, r ); stumble_angles = vector_multiply( stumble_angles, speed_multiplier ); stumble++ ; if ( speed_multiplier > 1.3 ) stumble++ ; flag_set( "player_limping" ); childthread stumble( stumble_angles, stumble_time, recover_time ); level waittill_either( "recovered", "force_limp" ); flag_clear( "player_limping" ); } } player_random_blur() { level endon( "dying" ); level endon ( "not_random_blur" ); while ( true ) { wait 0.05; if ( randomint( 100 ) > 10 ) continue; blur = randomint( 3 ) + 2; blur_time = randomfloatrange( 0.3, 0.7 ); recovery_time = randomfloatrange( 0.3, 1 ); setblur( blur * 1.2, blur_time ); wait blur_time; setblur( 0, recovery_time ); wait 5; } } player_jump_punishment() { wait( 2 ); for ( ;; ) { if ( level.player isonground() ) break; wait( 0.05 ); } while ( true ) { wait 0.05; if ( level.player isonground() ) continue; wait 0.2; if ( level.player isonground() ) continue; level notify( "stop_stumble" ); wait 0.2; // if( !flag( "force_limp" ) ) // level.player fall(); } } /* fall() { level endon( "stop_stumble" ); flag_set( "fall" ); level.player setstance( "prone" ); level.player thread play_sound_on_entity( "bodyfall_gravel_large" ); level.ground_ref_ent childthread stumble( ( 20, 10, 30 ), .2, 1.5, true ); wait .2; set_vision_set( "aftermath_pain", 0 ); level.player PlayRumbleOnEntity( "grenade_rumble" ); level.player allowstand( false ); level.player allowcrouch( false ); level.player viewkick( 127, level.player.origin ); level.player shellshock( "aftermath_fall", 3 ); level notify( "slowview", 3.5 ); // level.player PlayRumbleloopOnEntity( "damage_heavy" ); wait 1.5; flag_set( "fall" ); childthread recover(); level.player play_sound_in_space( "sprint_gasp" ); level.player play_sound_in_space( "breathing_hurt_start" ); level.player play_sound_in_space( "breathing_better" ); set_vision_set( "aftermath_walking", 5 ); level.player play_sound_on_entity( "breathing_better" ); flag_clear( "fall" ); level.player allowstand( true ); level.player allowcrouch( true ); level notify( "recovered" ); } */ stumble( stumble_angles, stumble_time, recover_time, no_notify ) { level endon( "stop_stumble" ); if ( flag( "collapse" ) ) return; stumble_angles = adjust_angles_to_player( stumble_angles ); level.ground_ref_ent rotateto( stumble_angles, stumble_time, ( stumble_time / 4 * 3 ), ( stumble_time / 4 ) ); level.ground_ref_ent waittill( "rotatedone" ); // if ( level.player getstance() == "stand" ) // level.player PlayRumbleOnEntity( "damage_light" ); base_angles = ( randomfloat( 4 ) - 4, randomfloat( 5 ), 0 ); base_angles = adjust_angles_to_player( base_angles ); level.ground_ref_ent rotateto( base_angles, recover_time, 0, recover_time / 2 ); level.ground_ref_ent waittill( "rotatedone" ); if ( !isdefined( no_notify ) ) level notify( "recovered" ); } recover() { angles = adjust_angles_to_player( ( -5, -5, 0 ) ); level.ground_ref_ent rotateto( angles, .6, 0.6, 0 ); level.ground_ref_ent waittill( "rotatedone" ); angles = adjust_angles_to_player( ( -15, -20, 0 ) ); level.ground_ref_ent rotateto( angles, 2.5, 0, 2.5 ); level.ground_ref_ent waittill( "rotatedone" ); angles = adjust_angles_to_player( ( 5, 5, 0 ) ); level.ground_ref_ent rotateto( angles, 2.5, 2, 0.5 ); level.ground_ref_ent waittill( "rotatedone" ); level.ground_ref_ent rotateto( ( 0, 0, 0 ), 1, 0.2, 0.8 ); } create_overlay_element( shader_name, start_alpha ) { overlay = newHudElem(); overlay.x = 0; overlay.y = 0; overlay setshader( shader_name, 640, 480 ); overlay.alignX = "left"; overlay.alignY = "top"; overlay.horzAlign = "fullscreen"; overlay.vertAlign = "fullscreen"; overlay.alpha = start_alpha; overlay.foreground = true; return overlay; } hud_hide( state ) { wait 0.1; SetSavedDvar( "hud_showStance", 0 ); SetSavedDvar( "compass", "0" ); SetSavedDvar( "ammoCounterHide", "1" ); }