1471 lines
39 KiB
Plaintext
1471 lines
39 KiB
Plaintext
#include maps\_utility;
|
|
#include common_scripts\utility;
|
|
#include animscripts\utility;
|
|
#include maps\_anim;
|
|
#include maps\_vehicle;
|
|
//#include maps\af_chase_code;
|
|
//#include maps\af_chase_zodiac;
|
|
#include maps\af_chase_knife_fight_code;
|
|
#include maps\_hud_util;
|
|
|
|
|
|
ENDING_MOVE_SPEED = 0.45;
|
|
|
|
add_knife_fight_starts()
|
|
{
|
|
add_start( "wakeup", ::start_wakeup_after_crash, "", ::wakeup_after_crash );
|
|
add_start( "wakefast", ::start_wakeup_after_crash, "", ::wakeup_after_crash );
|
|
add_start( "turnbuckle", ::start_turnbuckle, "", ::fight_turnbuckle );
|
|
add_start( "gloat", ::start_shepherd_gloats, "", ::shepherd_gloats );
|
|
add_start( "gun_drop", ::start_gun_drop, "", ::gun_drop );
|
|
add_start( "crawl", ::start_gun_crawl, "", ::gun_crawl );
|
|
add_start( "gun_kick", ::start_gun_kick, "", ::gun_kick );
|
|
add_start( "wounded", ::start_wounded_show, "Watch Price/Shep fight", ::wounded_show );
|
|
add_start( "pullout", ::start_knife_pullout, "", ::knife_pullout );
|
|
add_start( "kill", ::start_knife_kill, "", ::knife_kill );
|
|
add_start( "price_wakeup", ::start_price_wakeup, "", ::price_wakeup );
|
|
add_start( "walkoff", ::start_walkoff, "", ::walkoff );
|
|
|
|
}
|
|
|
|
|
|
init_ending()
|
|
{
|
|
// ^3[{+usereload}]^7
|
|
add_hint_string( "knife", &"AF_CHASE_PRESS_USE", ::stop_pressing_use );
|
|
// ^3[{+attack}]^7
|
|
add_hint_string( "hint_crawl_right", &"AF_CHASE_HINT_CRAWL_RIGHT", ::hint_crawl_right );
|
|
// ^3[{+speed_throw}]^7
|
|
add_hint_string( "hint_crawl_left", &"AF_CHASE_HINT_CRAWL_LEFT", ::hint_crawl_left );
|
|
|
|
add_hint_string( "hint_melee", &"AF_CHASE_HINT_MELEE_EMPTY", ::stop_melee_hint );
|
|
|
|
flag_init( "player_learned_melee" );
|
|
|
|
flag_init( "stop_heart" );
|
|
flag_init( "fell_off_waterfall" );
|
|
flag_init( "shepherd_spawned" );
|
|
flag_init( "wakeup_start" );
|
|
flag_init( "player_standing" );
|
|
flag_init( "focused_on_knife" );
|
|
flag_init( "player_looks_at_knife" );
|
|
flag_init( "helicopter_sound_played" );
|
|
flag_init( "player_uses_knife" );
|
|
flag_init( "player_aims_knife_at_shepherd" );
|
|
flag_init( "stop_aftermath_player" );
|
|
flag_init( "two_hand_pull_begins" );
|
|
flag_init( "price_shepherd_fight_e_flag" );
|
|
flag_init( "gloat_fade_in" );
|
|
|
|
flag_init( "dialog_all_finished" );
|
|
flag_init( "fog_pulse_window_for_spawn" );
|
|
flag_init( "player_near_shepherd" );
|
|
flag_init( "turn_buckle_fadeout" );
|
|
flag_init( "steady_boat_participating" );
|
|
flag_init( "trigger_over_waterfall" );
|
|
flag_init( "shepherd_stumbles_by" );
|
|
flag_init( "shepherd_killed" );
|
|
flag_init( "player_throws_knife" );
|
|
flag_init( "fade_away_idle_crawl_fight" );
|
|
flag_init( "price_told_player_to_hold_steady" );
|
|
flag_init( "stop_boat_dialogue" );
|
|
flag_init( "af_chase_nextmission" );
|
|
flag_init( "shepherd_should_do_idle_b" );
|
|
flag_init( "player_touched_shepherd" );
|
|
flag_init( "bloody_player_rig" );
|
|
flag_init( "end_heli_crashed" );
|
|
flag_init( "end_heli_nearly_crashed" );
|
|
flag_init( "player_gets_up_after_waterfall" );
|
|
flag_init( "water_cliff_jump_splash_sequence" );
|
|
flag_init( "killed_pickup_heli" );
|
|
flag_init( "fog_out_stumble_shepherd" );
|
|
flag_init( "blinder_effect" );
|
|
flag_init( "goodtime_for_fog_blast" );
|
|
flag_init( "sandstorm_fully_masked" );
|
|
flag_init( "fight_objective_positioned" );
|
|
flag_init( "turn_buckle_start" );
|
|
flag_init( "af_chase_final_ending" );
|
|
flag_init( "af_chase_ending_credits" );
|
|
flag_init( "af_chase_final_fight" );
|
|
thread maps\_aftermath_player::main();
|
|
}
|
|
|
|
init_main_and_ending_common_stuff()
|
|
{
|
|
set_water_sheating_time( "bump_small_start", "bump_big_start" );
|
|
|
|
level.DODGE_DISTANCE = 2500;
|
|
level.POS_LOOKAHEAD_DIST = 1200;
|
|
|
|
maps\_compass::setupMiniMap( "compass_map_afghan_chase" );
|
|
|
|
maps\createart\af_chase_fog::main();
|
|
|
|
waittillframeend; // after _load
|
|
if ( isdefined( level.stop_load ) && level.stop_load )
|
|
return;
|
|
|
|
level thread maps\af_chase_amb::main();
|
|
}
|
|
|
|
empty()
|
|
{
|
|
}
|
|
|
|
|
|
Ending_common()
|
|
{
|
|
// thread end_credits();
|
|
battlechatter_off( "axis" );
|
|
battlechatter_off( "allies" );
|
|
set_ambient( "af_chase_ext" );
|
|
|
|
init_fight_physics();
|
|
|
|
trigger_multiple_visionset = getentarray( "trigger_multiple_visionset", "classname" );
|
|
array_call( trigger_multiple_visionset, ::delete );
|
|
|
|
|
|
level.player SetEqLerp( 1, level.eq_main_track );
|
|
level.player AllowJump( false );
|
|
|
|
thread ending_common_speed();
|
|
|
|
thread eq_blender();
|
|
thread maps\_ambient::use_eq_settings( "fadeout_noncritical", level.eq_mix_track );
|
|
|
|
anim.fire_notetrack_functions[ "empty_script" ] = ::empty;
|
|
|
|
ent = spawn_tag_origin();
|
|
level.fov_ent = ent;
|
|
|
|
fov = GetDvarInt( "cg_fov" );
|
|
ent.origin = ( fov, 0, 0 );
|
|
ent thread blend_fov();
|
|
|
|
delaythread( 0.05, ::slowmo_sound_adjustment );
|
|
|
|
thread maps\_aftermath_player::aftermath_style_walking();
|
|
cast_structs_to_origins();// easier than rotating a bunch of WIP locations
|
|
|
|
SetSavedDvar( "g_friendlyNameDist", 0 );
|
|
SetSavedDvar( "sm_sunSampleSizeNear", .25 );
|
|
spawn_shepherd();
|
|
spawn_price();
|
|
|
|
level.sandstorm_time = SpawnStruct();
|
|
level.sandstorm_time.min = 0.5;
|
|
level.sandstorm_time.max = 0.8;
|
|
|
|
fog_set_changes( "afch_fog_dunes_far", 0 );
|
|
//vision_set_changes( "af_chase_outdoors_2", 0 );
|
|
|
|
remove_extra_autosave_check( "boat_check_trailing" );
|
|
remove_extra_autosave_check( "boat_check_player_speeding_along" );
|
|
|
|
set_wind( 100, 0.7, 0.4 );
|
|
|
|
SetSavedDvar( "cg_fov", 65 );
|
|
SetSavedDvar( "ammoCounterHide", 1 );
|
|
SetSavedDvar( "compass", 0 );
|
|
SetSavedDvar( "compassHideSansObjectivePointer", 1 ); // for later when we update the objective.
|
|
SetSavedDvar( "actionSlotsHide", 1 );
|
|
level.player AllowSprint( false );
|
|
//level.player AllowJump( false );
|
|
|
|
|
|
// thread maps\af_chase_fx::sand_storm_effect();
|
|
thread maps\af_chase_fx::sandstorm_fog_management();
|
|
|
|
thread maps\af_chase_fx::sand_storm_rolls_in();
|
|
thread kill_all_the_ai_and_fx_from_boatride();
|
|
level.player TakeAllWeapons();
|
|
}
|
|
|
|
start_wakeup_after_crash()
|
|
{
|
|
}
|
|
|
|
wakeup_after_crash()
|
|
{
|
|
do_wakeup_anim = level.start_point != "wakefast";
|
|
|
|
flag_wait( "fell_off_waterfall" );
|
|
|
|
//set_vision_set( "aftermath", 0 );
|
|
|
|
shellshock_very_long( "af_chase_ending_wakeup" );
|
|
|
|
// ai = GetAIArray();
|
|
// array_call( ai, ::Delete );
|
|
|
|
// setup crash site seqeunces
|
|
thread shepherd_stumbles_out_of_helicopter();
|
|
//thread modulate_player_movement();
|
|
|
|
thread more_dust_as_shepherd_nears();
|
|
thread impaled_guy();
|
|
|
|
ending_common();
|
|
|
|
// no sound
|
|
level.eq_ent.origin = (1,0,0);
|
|
level.player SetEqLerp( 0, level.eq_main_track );
|
|
|
|
if ( do_wakeup_anim )
|
|
thread fade_in_from_crash();
|
|
|
|
SetBlur( 20, 0 );
|
|
SetBlur( 0, 8 );
|
|
|
|
|
|
scene = "wakeup";
|
|
// player wakes up
|
|
anim_node = get_anim_node();
|
|
//player_wakeup_struct = getstruct( "end_scene_org_wakeup", "targetname" );
|
|
player_rig = spawn_anim_model( "player_rig" );
|
|
|
|
anim_node anim_first_frame_solo( player_rig, scene );
|
|
level.player PlayerLinkToDelta( player_rig, "tag_player", 1, 0, 0, 0, 0, true );
|
|
SaveGame( scene, &"AUTOSAVE_LEVELSTART", "shot", true );
|
|
level.player FreezeControls( true );
|
|
|
|
array_spawn_function_targetname( "crawling_spawner", ::crawling_guy_crawls );
|
|
array_spawn_targetname( "crawling_spawner" );
|
|
|
|
time = 1;
|
|
level.eq_ent MoveTo( (0.0,0,0), time, time * 0.5, time * 0.5 );
|
|
|
|
damaged_pavelow = getent( "damaged_pavelow", "targetname" );
|
|
damaged_pavelow thread play_sound_on_entity( "scn_afchase_heli_cookoff" );
|
|
|
|
if ( do_wakeup_anim )
|
|
{
|
|
//level.g = gettime();
|
|
level.player delaythread( 5, ::play_sound_on_entity, "scn_afchase_wakeup_player" );
|
|
level.player delaythread( 12.5, ::play_sound_on_entity, "scn_afchase_wakeup_player_cough" );
|
|
|
|
anim_node anim_single_solo( player_rig, scene );
|
|
}
|
|
else
|
|
{
|
|
anim_node thread anim_single_solo( player_rig, scene );
|
|
animation = player_rig getanim( scene );
|
|
player_rig SetAnim( animation, 1, 0, 25 );
|
|
for ( ;; )
|
|
{
|
|
animtime = player_rig GetAnimTime( animation );
|
|
if ( animtime >= 0.95 )
|
|
break;
|
|
wait 0.05;
|
|
}
|
|
}
|
|
thread random_breathing_sounds();
|
|
level delaythread( 5, ::send_notify, "stop_random_breathing_sounds" );
|
|
|
|
player_rig Delete();
|
|
|
|
// shellshock_very_long( "af_chase_ending_wakeup" );
|
|
|
|
flag_set( "player_standing" );
|
|
flag_set( "start_doing_aftermath_walk" );
|
|
}
|
|
|
|
start_turnbuckle()
|
|
{
|
|
teleport_to_truck_area();
|
|
shellshock_very_long( "af_chase_ending_wakeup" );
|
|
|
|
}
|
|
|
|
fight_turnbuckle_idle_handle()
|
|
{
|
|
anim_node = get_anim_node();
|
|
|
|
level endon ( "no_more_shepherd_idle" );
|
|
|
|
while( 1 )
|
|
{
|
|
anim_node thread anim_loop_solo( level.shepherd, "turn_buckle_idle", "player_arrived" );
|
|
flag_wait( "shepherd_should_do_idle_b" );
|
|
anim_node notify ( "player_arrived" );
|
|
anim_node thread anim_loop_solo( level.shepherd, "turn_buckle_idleb", "player_arrived" );
|
|
flag_waitopen( "shepherd_should_do_idle_b" );
|
|
anim_node notify ( "player_arrived" );
|
|
}
|
|
|
|
}
|
|
|
|
fight_turnbuckle()
|
|
{
|
|
anim_node = get_anim_node();
|
|
player_rig = get_player_rig();
|
|
player_rig Hide();
|
|
|
|
// convert_shepherd_to_drone();
|
|
|
|
anim_node anim_first_frame_solo( player_rig, "turn_buckle" );
|
|
|
|
thread fight_turnbuckle_idle_handle();
|
|
|
|
// level.shepherd play_sound_on_tag( "afchase_shp_goodwarrior", "J_Jaw" );
|
|
// level.shepherd play_sound_on_tag( "afchase_shp_extrastep", "J_Jaw" );
|
|
// level.shepherd play_sound_on_tag( "afchase_shp_necessary", "J_Jaw" );
|
|
|
|
give_knife_fight_weapon();
|
|
|
|
lookat_ent = Spawn( "script_model", level.player.origin + ( 0, 0, 32 ) );
|
|
lookat_ent SetModel( "viewhands_player_tf141" );
|
|
lookat_ent Hide();
|
|
lookat_ent LinkTo( level.player );
|
|
|
|
wait_for_player_to_melee_shepherd();
|
|
level notify( "stop_drunk_walk" );
|
|
level notify( "kill_limp" );
|
|
SetSavedDvar( "compass", 0 );
|
|
|
|
level notify ( "do_staged_pain_pulse" ); // stop any more of these
|
|
level notify ( "kill_limp" );
|
|
flag_set( "stop_aftermath_player" );
|
|
fade_in( 1 ); // in case we were fading out
|
|
|
|
if ( IsDefined( level.shepherd.function_stack ) )
|
|
level.shepherd function_stack_clear();// stop the dialogue
|
|
|
|
level.shepherd StopSounds();
|
|
|
|
ending_common_wounded();
|
|
|
|
flag_set( "turn_buckle_start" );
|
|
|
|
level notify ( "no_more_shepherd_idle" );
|
|
anim_node notify( "player_arrived" );
|
|
|
|
thread blend_player_to_turn_buckle();
|
|
|
|
player_rig Attach( "weapon_commando_knife", "TAG_WEAPON_LEFT" );
|
|
|
|
knife = get_knife();
|
|
|
|
objects = [];
|
|
objects[ "shepherd" ] = level.shepherd;
|
|
objects[ "player" ] = player_rig;
|
|
objects[ "knife" ] = knife;
|
|
|
|
animation = player_rig getanim( "turn_buckle" );
|
|
fade_out_time = 1.15;
|
|
thread fade_turn_buckle( fade_out_time );
|
|
|
|
delayThread( 7.35, ::flag_set, "turn_buckle_fadeout" );
|
|
|
|
//FRAME 1055 "attach_knife" ( 0 seconds )
|
|
//FRAME 1067 "switch_model" ( 0.4 seconds )
|
|
//FRAME 1072 "rumble" ( 0.566 seconds )
|
|
//FRAME 1121 "rumble" ( 2.2 seconds )
|
|
//FRAME 1122 "vision_effect" ( 2.233 seconds )
|
|
//FRAME 1158 "bodyfall large" ( 3.433 seconds )
|
|
//FRAME 1159 "rumble" ( 3.466 seconds )
|
|
//FRAME 1247 "rumble" ( 6.4 seconds )
|
|
//FRAME 1352 "fadeout" ( 9.9 seconds )
|
|
|
|
// Knife
|
|
//NUMFRAMES 348 ( Time: 11.6 Seconds )
|
|
////// NOTETRACKS ////
|
|
//FRAME 1244 "blood" ( 6.3 seconds )
|
|
|
|
//alias: scn_afchase_tbuckle_start_front
|
|
//- Starts from the first frame of the animation sequence
|
|
player_rig thread play_sound_on_entity( "scn_afchase_tbuckle_start_front" );
|
|
|
|
//alias: scn_afchase_tbuckle_pullknife_mono
|
|
//- This is shepherd grabbing and pulling out the knife. Play on the grab
|
|
knife delayThread( 4.31, ::play_sound_on_entity, "scn_afchase_tbuckle_pullknife_mono" );
|
|
|
|
//alias: scn_afchase_tbuckle_car_front
|
|
//- This should play just a hair before player's head hits the car
|
|
level.player delayThread( 2.11, ::play_sound_on_entity, "scn_afchase_tbuckle_car_front" );
|
|
|
|
//alias: scn_afchase_tbuckle_bodyfall_front
|
|
//- This is the players bodyfall, play as you are falling back.
|
|
level.player delayThread( 3.31-0.5, ::play_sound_on_entity, "scn_afchase_tbuckle_bodyfall_front" );
|
|
|
|
//alias: scn_afchase_tbuckle_stab_front
|
|
//- This is the stab, it should play a frame or two before it starts to enter
|
|
//players chest
|
|
level.player delayThread( 6.1, ::knife_in_player );
|
|
|
|
//alias: scn_afchase_tbuckle_standup_mono
|
|
//- This should play on shepherd and starts as he begins to release the knife. So
|
|
level.shepherd delayThread( 9.9, ::play_sound_on_entity, "scn_afchase_tbuckle_standup_mono" );
|
|
|
|
anim_scene = "turn_buckle";
|
|
if( flag( "player_touched_shepherd" ) )
|
|
anim_scene = "turn_buckle_alt";
|
|
|
|
knife hide();
|
|
level.shepherd Attach( level.scr_model[ "knife" ], "tag_inhand" );
|
|
anim_node thread anim_single( objects, anim_scene );
|
|
|
|
flag_wait( "turn_buckle_fadeout" );
|
|
wait fade_out_time;
|
|
wait .5; // half second in black
|
|
level.shepherd detach( level.scr_model[ "knife" ], "tag_inhand" );
|
|
knife show();
|
|
}
|
|
|
|
start_shepherd_gloats()
|
|
{
|
|
fade_out( 0 );
|
|
}
|
|
|
|
bloody_player_rig( player_rig )
|
|
{
|
|
flag_set( "bloody_player_rig" );
|
|
player_rig setmodel( "viewhands_player_tf141_bloody" );
|
|
}
|
|
|
|
shepherd_gloats()
|
|
{
|
|
level notify ( "not_random_blur" );
|
|
// vision_set_changes( "af_chase_outdoors_2", 0 );
|
|
vision_set_changes( "af_chase_ending_noshock", 0 );
|
|
thread maps\_aftermath_player::player_heartbeat();
|
|
level.player stopshellshock();
|
|
|
|
//shellshock_very_long( "af_chase_ending_no_control_lowkick" );
|
|
|
|
anim_node = get_anim_node();
|
|
player_rig = get_player_rig();
|
|
bloody_player_rig( player_rig );
|
|
gun_model = get_gun_model();
|
|
knife = get_knife();
|
|
|
|
convert_shepherd_to_drone();
|
|
|
|
dof_target_ent = get_dof_targetEnt();
|
|
dof_target_ent.origin = level.player.origin;
|
|
dof_target_ent movetotag( level.shepherd, "tag_eye", 1 );
|
|
|
|
remove_fences();
|
|
|
|
dof_target_ent = get_dof_targetEnt();
|
|
dof_target_ent LinkTo( level.shepherd, "tag_eye", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
|
|
guys = [];
|
|
guys[ "shepherd" ] = level.shepherd;
|
|
guys[ "player_rig" ] = player_rig;
|
|
guys[ "gun" ] = gun_model;
|
|
guys[ "knife" ] = knife;
|
|
anim_node anim_first_frame( guys, "gun_monologue" );
|
|
level.player PlayerLinkToDelta( player_rig, "tag_player", 1, 5, 5, 5, 5, true );
|
|
|
|
SetBlur( 0, 1.75 );
|
|
delay_fadein = 6.5;
|
|
start_time_offset = 4;
|
|
delay_fadein -= start_time_offset;
|
|
thread scene_gun_monologue_dialogue( start_time_offset );
|
|
flag_wait( "gloat_fade_in" );
|
|
//wait delay_fadein;
|
|
fade_in( 3.5);
|
|
anim_node anim_first_frame_solo( level.price, "gun_drop" );
|
|
|
|
// gun_model delaythread( 7.450, ::play_sound_on_tag, "anaconda_revolver_flick", "tag_flash" );
|
|
// gun_model delaythread( 10.00, ::play_sound_on_tag, "anaconda_click", "tag_flash" );
|
|
|
|
|
|
level.shepherd thread play_sound_on_entity( "scn_afchase_shepherd_gloat_stereo" );
|
|
|
|
// we know
|
|
//level.price delaythread( 12.5, ::play_sound_on_entity, "afchase_pri_weknow" );
|
|
level.player delaythread( 13.45, maps\_gameskill::grenade_dirt_on_screen, "right" );
|
|
delaythread( 14.7, ::fight_music );
|
|
anim_node anim_single( guys, "gun_monologue" );
|
|
}
|
|
|
|
fight_music()
|
|
{
|
|
flag_set( "af_chase_final_fight" );
|
|
}
|
|
|
|
start_gun_drop()
|
|
{
|
|
set_vision_set( "af_chase_ending_noshock", 0 ); // still getting player flying lerping or something through some vision set triggers. harmless I think.
|
|
link_player_to_arms();
|
|
}
|
|
|
|
gun_drop()
|
|
{
|
|
// thread gun_drop_slowmo();
|
|
|
|
anim_node = get_anim_node();
|
|
anim_node_ent = Spawn( "script_origin", anim_node.origin );
|
|
anim_node_ent.angles = anim_node.angles;
|
|
|
|
|
|
player_rig = get_player_rig();
|
|
gun_model = get_gun_model();
|
|
|
|
guys = [];
|
|
guys[ "shepherd" ] = level.shepherd;
|
|
guys[ "price" ] = level.price;
|
|
|
|
dof_target_ent = get_dof_targetEnt();
|
|
dof_target_ent LinkTo( level.shepherd, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
|
|
animation = level.shepherd getanim( "gun_drop" );
|
|
animation_length = GetAnimLength( animation );
|
|
|
|
player_anim = player_rig getanim( "gun_drop_player" );
|
|
player_animation_lenght = GetAnimLength( player_anim );
|
|
|
|
player_length_after_gun_drop = player_animation_lenght - animation_length;
|
|
|
|
blendout_time = .7;
|
|
wait_to_blendout = animation_length - blendout_time;
|
|
|
|
anim_node_ent thread anim_single( guys, "gun_drop" );
|
|
|
|
dof_target_ent movetotag( gun_model, "J_Cylinder_Rot", .4 );
|
|
anim_node thread anim_single_solo( gun_model, "gun_drop" );
|
|
anim_node thread anim_single_solo( player_rig, "gun_drop_player" );
|
|
level.player thread play_sound_on_entity( "af_chase_scene_gun_drop" );
|
|
|
|
wait .05;
|
|
|
|
foreach ( guy in guys )
|
|
guy LinkTo( anim_node_ent );
|
|
|
|
wait wait_to_blendout - .05;
|
|
anim_node_ent MoveTo( anim_node_ent.origin + ( 200, 0, 0 ), blendout_time + 1, 0, 0 );
|
|
wait blendout_time - .05;
|
|
|
|
wait player_length_after_gun_drop - .05;
|
|
}
|
|
|
|
|
|
start_gun_crawl()
|
|
{
|
|
|
|
link_player_to_arms();
|
|
gun_model = get_gun_model();
|
|
anim_node = get_anim_node();
|
|
player_rig = get_player_rig();
|
|
dof_target_ent = get_dof_targetEnt();
|
|
dof_target_ent movetotag( gun_model, "tag_flash", .1 );
|
|
anim_node anim_first_frame_solo( gun_model, "gun_kick_gun" );
|
|
anim_node anim_first_frame_solo( player_rig, "gun_crawl_01" );
|
|
dof_target_ent delayCall( .1, ::linkto, player_rig, "J_Wrist_LE", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
|
|
set_vision_set( "af_chase_ending_noshock", 0 );
|
|
}
|
|
|
|
|
|
gun_crawl()
|
|
{
|
|
SaveGame( "crawl", &"AUTOSAVE_LEVELSTART", "shot", true );
|
|
beat_up_prices_head();
|
|
// SetSavedDvar( "cg_fov", 40 );
|
|
level.fov_ent.origin = ( 40, 0, 0 );
|
|
set_vision_set( "af_chase_ending_noshock", 3 );
|
|
|
|
anim_node = get_anim_node();
|
|
player_rig = get_player_rig();
|
|
gun_model = get_gun_model();
|
|
|
|
guys = [];
|
|
guys[ "player_rig" ] = player_rig;
|
|
|
|
|
|
// level.player ShellShock( "af_chase_ending_wakeup", 60 );
|
|
|
|
button_alt = [];
|
|
button_alt[ 0 ] = ::hint_crawl_right;
|
|
button_alt[ 1 ] = ::hint_crawl_left;
|
|
|
|
button_hints = [];
|
|
button_hints[ 0 ] = "hint_crawl_right";
|
|
button_hints[ 1 ] = "hint_crawl_left";
|
|
|
|
button_track = SpawnStruct();
|
|
thread track_buttons( button_track, button_alt, button_hints );
|
|
thread gun_crawl_fight_idle();
|
|
|
|
// anim_node anim_first_frame( guys , "gun_crawl_01" );
|
|
|
|
if ( !is_default_start() )
|
|
thread blend_player_to_crawl();
|
|
|
|
level notify ( "stop_heart" );
|
|
button_index = 0;
|
|
|
|
for ( i = 0; i < 7; i++ )
|
|
{
|
|
|
|
anim_node thread anim_loop( guys, "gun_crawl_0" + i + "_idle", "stop_crawl" );
|
|
if ( i == 1 )
|
|
thread dof_target_to_gun_crawl();
|
|
button_wait( button_alt, button_track, button_index );
|
|
|
|
player_rig thread play_sound_on_entity( "sand_crawl" );
|
|
if ( i == 2 )
|
|
{
|
|
thread dof_to_gun_kick_gun();
|
|
thread gun_crawl_move_fighters_away();
|
|
}
|
|
if ( i == 3 )
|
|
{
|
|
thread gun_crawl_price_falls();
|
|
}
|
|
|
|
anim_node notify( "stop_crawl" );
|
|
|
|
earthquake_time = randomfloatrange( 0.9, 1.1 );
|
|
Earthquake( 0.16, earthquake_time, level.player.origin, 5000 );
|
|
scene = "gun_crawl_0" + i;
|
|
animation = player_rig getanim( scene );
|
|
time = getanimlength( animation );
|
|
delaythread( time - 0.25, ::crawl_earthquake );
|
|
|
|
if ( i == 6 )
|
|
break;
|
|
|
|
button_index++;
|
|
button_index %= button_alt.size;
|
|
|
|
|
|
anim_node anim_single( guys, scene );
|
|
}
|
|
|
|
}
|
|
|
|
crawl_earthquake()
|
|
{
|
|
Earthquake( 0.12, 0.450, level.player.origin, 5000 );
|
|
}
|
|
|
|
|
|
start_gun_kick()
|
|
{
|
|
level.fov_ent.origin = ( 40, 0, 0 );
|
|
link_player_to_arms();
|
|
}
|
|
|
|
gun_kick()
|
|
{
|
|
shep_beatup();
|
|
|
|
anim_node = get_anim_node();
|
|
player_rig = get_player_rig();
|
|
gun_model = get_gun_model();
|
|
|
|
new_anim_node = create_new_anim_node_from_anim_node();
|
|
new_anim_node.origin += ( 288, -166, 0 ) * .155;
|
|
|
|
anim_node thread anim_single_solo( gun_model, "gun_kick_gun" );
|
|
|
|
dof_target_ent = get_dof_targetEnt();
|
|
dof_target_ent movetotag( level.shepherd, "J_Ankle_RI", 1 );
|
|
|
|
// dof_target_ent LinkTo( level.shepherd, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
|
|
scene = "gun_kick";
|
|
animation = player_rig getanim( scene );
|
|
anim_length = GetAnimLength( animation );
|
|
thread fight_physics( scene, anim_length );
|
|
|
|
anim_node thread anim_single_solo( level.shepherd, scene );
|
|
anim_node thread anim_single_solo( player_rig, scene );
|
|
|
|
blend_in_time = .7;
|
|
// new_anim_node thread anim_single_solo( level.shepherd, "gun_kick" );
|
|
// level.shepherd LinkTo( new_anim_node );
|
|
// wait blend_in_time;
|
|
// new_anim_node MoveTo( anim_node.origin, blend_in_time, 0, 0 );
|
|
|
|
wait anim_length - blend_in_time;
|
|
wait 2;
|
|
}
|
|
|
|
start_wounded_show()
|
|
{
|
|
fade_out( 0 );
|
|
set_vision_set( "af_chase_ending_noshock", 0 );
|
|
}
|
|
|
|
wounded_show()
|
|
{
|
|
|
|
//run_thread_on_targetname( "shep_blood", ::gen_rocks );
|
|
level.price thread scoot_rocks();
|
|
level.shepherd thread scoot_rocks();
|
|
|
|
|
|
flag_set( "player_heartbeat_sound" );
|
|
set_wounded_fov();
|
|
thread random_breathing_sounds();
|
|
|
|
sandstorm_wounded_settings();
|
|
|
|
|
|
//set_vision_set( "aftermath", 0 );
|
|
//thread maps\_aftermath_player::player_heartbeat();
|
|
|
|
level notify ( "stop_idle_crawl_fight" );// kill this if its running
|
|
|
|
fight_b_animnode = GetEnt( "end_scene_org_fight_B", "targetname" );
|
|
fight_c_animnode = GetEnt( "end_scene_org_fight_C", "targetname" );
|
|
wrestle_c_animnode = GetStruct( "end_scene_org_wrestle_C", "targetname" );
|
|
|
|
|
|
anim_node = get_anim_node_rotated();
|
|
player_body = get_player_body();
|
|
scene = "price_wakeup";
|
|
anim_node thread anim_first_frame_solo( player_body, scene );
|
|
|
|
player_rig = get_player_rig();
|
|
player_rig Delete();// start over on the player rig
|
|
player_rig = get_player_rig();
|
|
|
|
knife = get_knife();
|
|
|
|
thread wounded_show_player_view( player_rig );
|
|
|
|
// slowmo_start();
|
|
// slowmo_setspeed_slow( 0.70 );
|
|
// slowmo_setlerptime_in( 0 );
|
|
// slowmo_lerp_in();
|
|
|
|
|
|
guys = [];
|
|
guys[ "knife" ] = knife;
|
|
guys[ "player_rig" ] = player_rig;
|
|
|
|
anim_node anim_first_frame( guys, "knifepull_grab_02" );
|
|
level notify( "link_player", player_rig );
|
|
|
|
|
|
fighters = [];
|
|
fighters[ "shepherd" ] = level.shepherd;
|
|
fighters[ "price" ] = level.price;
|
|
|
|
dof_target_ent = get_dof_targetEnt();
|
|
dof_target_ent LinkTo( level.price, "tag_eye", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
|
|
level.player ShellShock( "af_chase_ending_no_control_lowkick", 6000 );
|
|
//wait( 0.3 );
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
/*
|
|
|
|
scene = "fight_C2";
|
|
wrestle_c_animnode thread anim_single( fighters, scene );
|
|
wait( 0.05 );
|
|
foreach ( guy in fighters )
|
|
{
|
|
animation = guy getanim( scene );
|
|
guy SetAnimTime( animation, 0.67 );
|
|
}
|
|
|
|
fade_in( 2.5 );
|
|
animation = level.price getanim( scene );
|
|
scene_time = GetAnimLength( animation );
|
|
// blah
|
|
|
|
for ( ;; )
|
|
{
|
|
if ( level.price GetAnimTime( animation ) >= 0.89 )
|
|
break;
|
|
|
|
wait( 0.05 );
|
|
}
|
|
|
|
// wait 37.7 * 0.22;
|
|
|
|
fade_out_time = scene_time * 0.11;
|
|
fade_out( fade_out_time );
|
|
wait( fade_out_time );
|
|
level.player ShellShock( "af_chase_ending_no_control", 60 );
|
|
|
|
wait( 1.5 );
|
|
*/
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
scene = "fight_B";
|
|
animation = level.price getanim( scene );
|
|
scene_time = GetAnimLength( animation );
|
|
thread fight_physics( scene, scene_time );
|
|
|
|
fight_b_animnode thread anim_single( fighters, scene );
|
|
wait 1.0;
|
|
|
|
//wait( 1.0 );
|
|
fade_in( 2.5 );
|
|
// blah
|
|
|
|
for ( ;; )
|
|
{
|
|
if ( level.price GetAnimTime( animation ) >= 0.39 )
|
|
break;
|
|
|
|
wait( 0.05 );
|
|
}
|
|
|
|
fade_out_time = scene_time * 0.11;
|
|
fade_out( fade_out_time );
|
|
wait( fade_out_time );
|
|
|
|
//level.player ShellShock( "af_chase_ending_no_control", 6000 );
|
|
wait( 1.05 );
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
scene = "fight_B2";
|
|
animation = level.price getanim( scene );
|
|
scene_time = GetAnimLength( animation );
|
|
thread fight_physics( scene, scene_time );
|
|
|
|
fight_b_animnode thread anim_single( fighters, scene );
|
|
start_time = gettime();
|
|
|
|
wait 0.45;
|
|
// wait( 0.05 );
|
|
//
|
|
// foreach ( guy in fighters )
|
|
// {
|
|
// animation = guy getanim( scene );
|
|
// guy SetAnimTime( animation, 0.60 );
|
|
// }
|
|
//
|
|
fade_in( 1 );
|
|
|
|
for ( ;; )
|
|
{
|
|
if ( level.price GetAnimTime( animation ) >= 0.50 ) //0.7
|
|
break;
|
|
|
|
wait( 0.05 );
|
|
}
|
|
|
|
// wait 19.23 * 0.1;
|
|
// wait 19.23 * 0.1;
|
|
|
|
fade_out_time = scene_time * 0.10;
|
|
|
|
|
|
//wait_for_buffer_time_to_pass( start_time , scene_time - fade_out_time );
|
|
|
|
fade_out( fade_out_time );
|
|
wait( fade_out_time );
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*
|
|
fade_time = 8.0;
|
|
wait( 15.5 - fade_time );
|
|
|
|
slowmo_start();
|
|
slowmo_setspeed_slow( 0.22 );
|
|
slowmo_setlerptime_in( fade_time );
|
|
slowmo_lerp_in();
|
|
*/
|
|
|
|
//fade_out( fade_time );
|
|
//wait( fade_time );
|
|
|
|
// slowmo_setlerptime_out( 0 );
|
|
// slowmo_lerp_out();
|
|
// slowmo_end();
|
|
wait( 1.5 );
|
|
}
|
|
|
|
start_knife_pullout()
|
|
{
|
|
fade_out( 0 );
|
|
}
|
|
|
|
knife_pullout()
|
|
{
|
|
flag_set( "player_heartbeat_sound" );
|
|
SaveGame( "pullout", &"AUTOSAVE_LEVELSTART", "shot", true );
|
|
|
|
thread spawn_fake_wrestlers(); // so we can jump to the midpoint of an anim more smoothly
|
|
|
|
fight_c_animnode = GetEnt( "end_scene_org_fight_C", "targetname" );
|
|
anim_node = get_anim_node_rotated();
|
|
player_rig = get_player_rig();
|
|
knife = get_knife();
|
|
player_body = get_player_body();
|
|
|
|
thread pullout_player_view( player_rig );
|
|
|
|
guys = [];
|
|
guys[ "knife" ] = knife;
|
|
guys[ "player_rig" ] = player_rig;
|
|
|
|
fighters = [];
|
|
fighters[ "shepherd" ] = level.shepherd;
|
|
fighters[ "price" ] = level.price;
|
|
|
|
anim_node thread anim_first_frame_solo( player_body, "price_wakeup" );
|
|
anim_node anim_first_frame( guys, "knifepull_grab_02" );
|
|
// playerlinktoblend
|
|
wait( 0.5 );
|
|
|
|
// anim_node anim_first_frame( guys, "knifepull_grab_01" );
|
|
// thread player_links_to_rig_and_looks_left( player_rig, 5 );
|
|
|
|
// slowmo_start();
|
|
// slowmo_setspeed_slow( 0.7 );
|
|
// slowmo_setlerptime_in( 0 );
|
|
// slowmo_lerp_in();
|
|
level.player ShellShock( "af_chase_ending_pulling_knife_later", 6000 );
|
|
|
|
level notify ( "player_has_min_arc" );
|
|
|
|
dof_target_ent = get_dof_targetEnt();
|
|
dof_target_ent LinkTo( level.price, "tag_eye", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
scene = "fight_C";
|
|
animation = level.price getanim( scene );
|
|
scene_time = GetAnimLength( animation );
|
|
thread fight_physics( scene, scene_time );
|
|
fight_c_animnode thread anim_single( fighters, scene );
|
|
|
|
thread hide_end_of_fight_C();
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
delaythread( 0.3, ::fade_in, 1 );
|
|
wait( 1.5 );
|
|
fade_out( 1 );
|
|
wait( 1 );
|
|
|
|
anim_node thread price_shepherd_fight_e( fighters );
|
|
level notify ( "waiting_for_player_to_look_at_knife" );
|
|
wait( 1 );
|
|
delaythread( 0.3, ::fade_in, 1 );
|
|
|
|
|
|
wait_for_player_to_start_pulling_knife();
|
|
flag_set( "player_looks_at_knife" );
|
|
|
|
fade_in( 0.5 );
|
|
|
|
flag_set( "focused_on_knife" );
|
|
flag_set( "player_uses_knife" );
|
|
|
|
|
|
|
|
//blend_to_knife_dof( 1 );
|
|
level notify ( "lerp_view_after_uses_knife" );
|
|
|
|
|
|
anim_node anim_single( guys, "knifepull_grab_02" );
|
|
anim_node anim_first_frame( guys, "knifepull_pull_02" );
|
|
|
|
delaythread( 3, ::flag_set, "price_shepherd_fight_e_flag" );
|
|
|
|
thread knife_hint_blinks();
|
|
|
|
level.additive_pull_weight = 0;
|
|
thread hands_do_pull_additive( player_rig );
|
|
|
|
// player pulls it out
|
|
knife_struct = SpawnStruct();
|
|
knife_struct.faded_out = false;
|
|
knife_struct.pull_scale = 6;
|
|
knife_struct.takes_pain = true;
|
|
knife_struct.sin_scale = 0.75;
|
|
// knife_struct.min_rate = 0.05; // 0.09;
|
|
// knife_struct.max_rate = 0.09; // 0.14;
|
|
knife_struct.rate = 0.065;
|
|
knife_struct.range = 0.03;
|
|
knife_struct.occumulator_base = 4;
|
|
knife_struct.auto_occumulator_base = true;
|
|
knife_struct.set_pull_weight = true;
|
|
knife_struct.hurt_player_fx = "player_knife_pull_1";
|
|
knife_struct.min_light = 70;
|
|
knife_struct.min_heavy = 90;
|
|
knife_struct.rumble_loop = "light_3s";
|
|
knife_struct player_pulls_out_knife( "knifepull_pull_02" );
|
|
// fade_out_knife_hint( 0.5 );
|
|
|
|
|
|
level.additive_pull_weight = 1;
|
|
|
|
Earthquake( 0.2, 0.3, level.player.origin, 5000 );
|
|
set_vision_set( "aftermath_hurt", 0.1 );
|
|
delaythread( 0.8, ::set_vision_set, "aftermath_walking", 0.9 );
|
|
|
|
|
|
level notify ( "second_knife_pull" );
|
|
anim_node anim_single( guys, "knifepull_grab_03" );
|
|
anim_node anim_first_frame( guys, "knifepull_pull_03" );
|
|
flag_set( "two_hand_pull_begins" );
|
|
|
|
|
|
|
|
|
|
// player pulls it out
|
|
knife_struct = SpawnStruct();
|
|
knife_struct.faded_out = false;
|
|
knife_struct.pull_scale = 6;
|
|
knife_struct.takes_pain = true;
|
|
knife_struct.sin_scale = 0.75;
|
|
knife_struct.rate = 0.7;
|
|
knife_struct.range = 0.2;
|
|
knife_struct.override_damage = 50;
|
|
knife_struct.override_anim_time = 0.9;
|
|
knife_struct.occumulator_base = 2;
|
|
knife_struct.hurt_player_fx = "player_knife_pull_2";
|
|
knife_struct.min_light = 20;
|
|
knife_struct.min_heavy = 50;
|
|
knife_struct.rumble_loop = "heavy_3s";
|
|
knife_struct player_pulls_out_knife( "knifepull_pull_03" );
|
|
fade_out_knife_hint( 0.5 );
|
|
|
|
level notify ( "fight_C_is_over" );
|
|
|
|
// level.player ShellShock( "af_chase_ending_pulling_knife_later", 3 );
|
|
// vision_set_changes( "af_chase_outdoors_2", 3 );
|
|
|
|
|
|
// slowmo_start();
|
|
// slowmo_setspeed_slow( 0.85 );
|
|
// slowmo_setlerptime_in( 0 );
|
|
// slowmo_lerp_in();
|
|
|
|
// appear while head looks right
|
|
level.shepherd delayCall( 3, ::Show );
|
|
level.price delayCall( 3, ::Show );
|
|
|
|
}
|
|
|
|
start_knife_kill()
|
|
{
|
|
player_rig = get_player_rig();
|
|
anim_node = get_anim_node_rotated();
|
|
|
|
level.player PlayerLinkToDelta( player_rig, "tag_player", 1, 0, 0, 0, 0, true );
|
|
level.player ShellShock( "af_chase_ending_pulling_knife_later", 6000 );
|
|
|
|
thread blend_to_knife_dof( 0.1 );
|
|
|
|
player_body = get_player_body();
|
|
anim_node thread anim_first_frame_solo( player_body, "price_wakeup" );
|
|
|
|
wait( 0.05 );
|
|
fighters = [];
|
|
fighters[ "shepherd" ] = level.shepherd;
|
|
fighters[ "price" ] = level.price;
|
|
anim_node thread price_shepherd_fight_e( fighters );
|
|
}
|
|
|
|
knife_kill()
|
|
{
|
|
|
|
if ( flag( "missionfailed" ) )
|
|
return;
|
|
level endon( "missionfailed" );
|
|
|
|
maps\af_chase_anim::add_fighte_animsounds();
|
|
flag_set( "player_heartbeat_sound" );
|
|
SaveGame( "kill", &"AUTOSAVE_LEVELSTART", "shot", true );
|
|
fight_c_animnode = GetEnt( "end_scene_org_fight_C", "targetname" );
|
|
anim_node = get_anim_node_rotated();
|
|
player_rig = get_player_rig();
|
|
knife = get_knife();
|
|
player_body = get_player_body();
|
|
|
|
thread kill_player_view( player_rig );
|
|
|
|
|
|
guys = [];
|
|
guys[ "knife" ] = knife;
|
|
guys[ "player_rig" ] = player_rig;
|
|
|
|
fighters = [];
|
|
fighters[ "shepherd" ] = level.shepherd;
|
|
fighters[ "price" ] = level.price;
|
|
|
|
level notify ( "knife_pulled_out" );
|
|
anim_node anim_single( guys, "knifepull_pullout_flip" );
|
|
|
|
level notify ( "aim_at_shepherd" );
|
|
|
|
thread flag_if_player_aims_at_shepherd( player_rig );
|
|
|
|
anim_node thread anim_loop( guys, "knifepull_pullout_flip_idle" );
|
|
|
|
thread player_fails_if_does_not_throw();
|
|
|
|
reticle = get_knife_reticle();
|
|
reticle.alpha = 1;
|
|
reticle fadeovertime( 1 );
|
|
|
|
player_throws_knife( reticle );
|
|
|
|
reticle destroy();
|
|
|
|
musicStop( 4 );
|
|
level.player thread play_sound_on_entity( "af_chase_shepherd_death_stinger" );
|
|
|
|
fade_in( 0.5 );
|
|
|
|
level notify ( "pull_back_knife_anim_starts" );
|
|
|
|
blend_out_time = 1.2;
|
|
level.fov_ent moveto( (52,0,0), blend_out_time, blend_out_time * 0.5, blend_out_time * 0.5 );
|
|
|
|
|
|
player_rig thread play_sound_on_entity( "scn_afchase_player_knife_breath" );
|
|
anim_node anim_single( guys, "knifepull_throw" );
|
|
blend_to_kill_dof( 0.15 );
|
|
|
|
//guys[ "shepherd" ] = level.shepherd;
|
|
//guys[ "price" ] = level.price;
|
|
anim_node notify ( "stop_loop" );
|
|
|
|
anim_node thread anim_single( fighters, "knifepull_throw_kill" );
|
|
flag_set( "shepherd_killed" );
|
|
|
|
level.shepherd StopSounds(); // in case of punches
|
|
level.price StopSounds();
|
|
|
|
anim_node anim_single( guys, "knifepull_throw_kill" );
|
|
|
|
|
|
run_thread_on_targetname( "shep_blood", ::shep_blood );
|
|
|
|
anim_node thread anim_first_frame_solo( player_rig, "price_wakeup" );
|
|
}
|
|
|
|
start_price_wakeup()
|
|
{
|
|
thread blend_to_ending_dof( 0.1 );
|
|
|
|
waittillframeend; // after catchup thread.
|
|
waittillframeend;
|
|
|
|
maps\af_chase_anim::player_pulls_knife_from_chest( 0 );
|
|
anim_node = get_anim_node_rotated();
|
|
|
|
level.player_rig = spawn_anim_model( "player_rig" );
|
|
player_rig = level.player_rig;
|
|
anim_node thread anim_first_frame_solo( player_rig, "price_wakeup" );
|
|
level.player PlayerLinkToDelta( player_rig, "tag_player", 1, 10, 15, 5, 10 );
|
|
|
|
|
|
}
|
|
|
|
price_wakeup()
|
|
{
|
|
|
|
level.player shellshock( "af_chase_ending_fakeout", 6000 );
|
|
anim_node = get_anim_node_rotated();
|
|
player_rig = get_player_rig();
|
|
player_body = get_player_body();
|
|
|
|
wait( 1.8 );
|
|
fovtime = 8.5;
|
|
blend_to_ending_dof( fovtime );
|
|
level.fov_ent moveto( (65,0,0), fovtime, fovtime * 0.5, fovtime * 0.5 );
|
|
|
|
set_vision_set( "aftermath_nodesat", 0 );
|
|
//set_vision_set( "af_chase_ending_final", fovtime );
|
|
|
|
|
|
guys = [];
|
|
guys[ "shepherd" ] = level.shepherd;
|
|
guys[ "price" ] = level.price;
|
|
//guys[ "player" ] = player_rig;
|
|
|
|
// dof_target_ent = get_dof_targetEnt();
|
|
// dof_target_ent movetotag( player_rig, "J_Wrist_LE", 2);
|
|
|
|
//anim_node2 = SpawnStruct();
|
|
//dif = ( 25887.2, 35597, -9959.6 ) - ( 25865.2, 35546, -9959.6 );
|
|
//anim_node2.origin = anim_node.origin - dif;
|
|
//anim_node2.angles = anim_node.angles;
|
|
|
|
if ( level.start_point == "price_wakeup" )
|
|
{
|
|
anim_node thread anim_first_frame_solo( player_body, "price_wakeup" );
|
|
anim_node thread anim_first_frame_solo( player_rig, "price_wakeup" );
|
|
anim_node anim_first_frame( guys, "price_wakeup" );
|
|
}
|
|
|
|
// if ( level.start_point == "price_wakeup" )
|
|
// wait( 3 );
|
|
|
|
start_time = gettime();
|
|
// AmbientStop( time );
|
|
|
|
wait_for_buffer_time_to_pass( start_time, 4 );
|
|
|
|
// stop ambient event system
|
|
//AmbientStop( 5 );
|
|
|
|
// delaythread( 3, ::ending_fade_out ); // 8, ::fade_out 27
|
|
|
|
level.override_eq = true;
|
|
time = 30;
|
|
//level.eq_ent MoveTo( (0.66,0,0), time, time * 0.5, time * 0.5 );
|
|
|
|
wait_for_buffer_time_to_pass( start_time, 13.5 );
|
|
|
|
fade_out( 19.5 );
|
|
|
|
// wait_for_buffer_time_to_pass( start_time, 25 );
|
|
// fade_in( 4 );
|
|
|
|
wait_for_buffer_time_to_pass( start_time, 24 );
|
|
|
|
scene = "price_wakeup";
|
|
animation = level.price getanim( scene );
|
|
scene_time = GetAnimLength( animation );
|
|
thread fight_physics( scene, scene_time );
|
|
|
|
anim_node thread anim_single_solo( player_body, scene );
|
|
anim_node thread anim_single_solo( player_rig, scene );
|
|
|
|
animation = level.price getanim( scene );
|
|
anim_length = GetAnimLength( animation );
|
|
waittime = anim_length * 0.75;
|
|
delayThread( waittime, ::fade_out, 1 );
|
|
// delaythread( 14.1, maps\af_chase_anim::blend_to_ending_dof_fov );
|
|
|
|
endMusicTiming = 2.7;
|
|
delaythread( endMusicTiming, ::flag_set, "af_chase_final_ending" );
|
|
delaythread( endMusicTiming + 55.70, ::end_credits );//timed to come in on the big swelling boom
|
|
delaythread( endMusicTiming + 195, ::flag_set, "af_chase_ending_credits" ); //timed to come in after the af_chase_final_ending music is done
|
|
|
|
delaythread( endMusicTiming + 0.25, ::fade_in, 1 );
|
|
level.eq_ent delaycall( endMusicTiming - 1, ::moveto, (0.55,0,0), 3 );
|
|
//level.eq_ent MoveTo( (0.66,0,0), time, time * 0.5, time * 0.5 );
|
|
|
|
anim_node thread anim_single( guys, scene );
|
|
wait( anim_length * 0.85 );
|
|
//wait 0.5;
|
|
}
|
|
|
|
start_walkoff()
|
|
{
|
|
}
|
|
|
|
walkoff()
|
|
{
|
|
guys = [];
|
|
guys[ "shepherd" ] = level.shepherd;
|
|
guys[ "price" ] = level.price;
|
|
|
|
anim_node = get_anim_node_rotated();
|
|
|
|
player_rig = get_player_rig();
|
|
level.player_rig delete();
|
|
player_rig = get_player_rig();
|
|
|
|
player_body = get_player_body();
|
|
|
|
arc = 0; // 10;
|
|
level.player PlayerLinkToDelta( player_rig, "tag_player", 1, arc, arc, arc, arc, true );
|
|
delaythread( 0.8, ::expand_player_view );
|
|
|
|
ground_ref = spawn_tag_origin();
|
|
ground_ref linkto( player_rig, "tag_player", (0,0,0), (0,0,0) );
|
|
level.player PlayerSetGroundReferenceEnt( ground_ref );
|
|
|
|
scene = "price_wakeup";
|
|
|
|
anim_node thread anim_first_frame_solo( player_body, scene );
|
|
anim_node thread anim_first_frame_solo( player_rig, scene );
|
|
anim_node anim_first_frame( guys, scene );
|
|
|
|
thread sandstorm_fades_away();
|
|
|
|
player_body Delete();
|
|
|
|
guys = [];
|
|
spawn_nikolai();
|
|
|
|
thread black_out_on_walk();
|
|
// dof_target_ent = get_dof_targetEnt();
|
|
|
|
level.nikolai animscripts\shared::DropAllAIWeapons();
|
|
|
|
// if ( IsDefined( level.shepherd ) )
|
|
// level.shepherd Delete();
|
|
|
|
thread blend_to_price_healing_dof( 3 );
|
|
//level.player ShellShock( "af_chase_ending_pulling_knife_later", 60 );
|
|
//set_vision_set( "aftermath_walking", 0 );
|
|
set_vision_set( "aftermath_nodesat", 0 );
|
|
//set_vision_set( "af_chase_ending_final", 0 );
|
|
|
|
|
|
thread maps\af_chase_anim::blend_to_ending_dof_fov( 0.1 );
|
|
|
|
delaythread( 0.5, ::fade_in, 1 );
|
|
|
|
ending_rescue_chopper = spawn_vehicle_from_targetname( "ending_rescue_chopper" );
|
|
ending_rescue_chopper setmodel( "vehicle_little_bird_bench_afghan" );
|
|
ending_rescue_chopper.animname = "littlebird";
|
|
ending_rescue_chopper notify( "suspend_drive_anims" );
|
|
ending_rescue_chopper thread helicopter_sound_blend();
|
|
// thread end_blind( ending_rescue_chopper );
|
|
|
|
guys[ "nikolai" ] = level.nikolai;
|
|
guys[ "price" ] = level.price;
|
|
guys[ "player_rig" ] = player_rig;
|
|
|
|
// dof_target_ent LinkTo( level.price, "tag_eye", ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
|
|
|
|
thread scene_walk_off_dialog();
|
|
anim_node = get_anim_node();
|
|
anim_node_chopper = getstruct( "anim_node_chopper", "targetname" );
|
|
|
|
scene = "walk_off";
|
|
animation = level.price getanim( scene );
|
|
scene_time = GetAnimLength( animation );
|
|
thread fight_physics( scene, scene_time );
|
|
|
|
anim_node_chopper thread anim_single_solo( ending_rescue_chopper, scene );
|
|
anim_node thread anim_single( guys, scene );
|
|
|
|
|
|
start_time = gettime();
|
|
|
|
animation = player_rig getanim( scene );
|
|
fade_out_time = 0.5;
|
|
timer = GetAnimLength( animation ) - fade_out_time;
|
|
|
|
wait_for_buffer_time_to_pass( start_time, timer - 10 );
|
|
|
|
time = 5;
|
|
level.eq_ent MoveTo( (0.85,0,0), time, time * 0.5, time * 0.5 );
|
|
}
|
|
|
|
end_credits()
|
|
{
|
|
fade_out_time = 0.5;
|
|
|
|
black_overlay = get_black_overlay();
|
|
black_overlay.alpha = 1;
|
|
|
|
level.eq_ent MoveTo( (1.0,0,0), fade_out_time, fade_out_time * 0.5, fade_out_time * 0.5 );
|
|
|
|
delaythread( 4, ::nextmission ); // next mission will wait for the flag "af_chase_nextmission" on af_chase before continuing.
|
|
|
|
flag_set( "do_museum_credits" );
|
|
|
|
wait .1;
|
|
ai = getaispeciesarray();
|
|
array_call( ai, ::delete );
|
|
level.fov_ent delete();
|
|
thread maps\af_chase_fx::stop_sandstorm_effect();
|
|
}
|
|
|
|
knife_fight_objectives()
|
|
{
|
|
// Kill Shepherd.
|
|
Objective_Add( obj( "get_shepherd" ), "current", &"AF_CHASE_KILL_SHEPHERD" );
|
|
|
|
flag_wait( "shepherd_killed" );
|
|
wait( 3.1 );
|
|
// objective_complete( obj( "get_shepherd" ) );
|
|
Objective_Delete( obj( "get_shepherd" ) );
|
|
}
|
|
|
|
|
|
startpoint_catchup()
|
|
{
|
|
waittillframeend;// let the actual start functions run before this one
|
|
start = level.start_point;
|
|
|
|
|
|
|
|
flag_set( "end_heli_crashed" );
|
|
flag_set( "water_cliff_jump_splash_sequence" );
|
|
flag_set( "killed_pickup_heli" );
|
|
flag_set( "fell_off_waterfall" );
|
|
|
|
if ( start == "wakeup" )
|
|
return;
|
|
|
|
if ( start == "wakefast" )
|
|
return;
|
|
|
|
flag_set( "start_doing_aftermath_walk" );
|
|
|
|
maps\af_chase_knife_fight::ending_common();
|
|
maps\af_chase_knife_fight_code::teleport_to_truck_area();
|
|
maps\af_chase_fx::sandstorm_fx_increase();
|
|
|
|
flag_set( "player_standing" );
|
|
|
|
if ( start == "turnbuckle" )
|
|
return;
|
|
|
|
level notify( "stop_drunk_walk" );
|
|
level notify( "kill_limp" );
|
|
maps\af_chase_knife_fight_code::swap_knife();
|
|
|
|
maps\af_chase_knife_fight_code::convert_shepherd_to_drone();
|
|
|
|
level.heartbeat_blood_func = maps\af_chase_fx::blood_pulse;
|
|
|
|
flag_set( "aftermath_dont_do_wakeup" );
|
|
level.player TakeAllWeapons();
|
|
flag_set( "stop_aftermath_player" );
|
|
|
|
maps\af_chase_knife_fight_code::ending_common_wounded();
|
|
|
|
flag_set( "player_near_shepherd" );
|
|
flag_set( "turn_buckle_fadeout" );
|
|
|
|
if ( start == "gloat" )
|
|
return;
|
|
|
|
flag_set( "bloody_player_rig" );
|
|
|
|
if ( start == "gun_drop" )
|
|
return;
|
|
if ( start == "crawl" )
|
|
return;
|
|
if ( start == "gun_kick" )
|
|
return;
|
|
maps\af_chase_knife_fight_code::shep_beatup();
|
|
|
|
player_rig = maps\af_chase_knife_fight_code::beat_up_prices_head();
|
|
|
|
set_vision_set( "af_chase_ending_noshock", 0 );
|
|
maps\af_chase_knife_fight_code::remove_fences();
|
|
if ( start == "wounded" )
|
|
return;
|
|
maps\af_chase_knife_fight_code::set_wounded_fov();
|
|
maps\af_chase_knife_fight_code::sandstorm_wounded_settings();
|
|
if ( start == "pullout" )
|
|
return;
|
|
if ( start == "kill" )
|
|
return;
|
|
|
|
level.fov_ent.origin = ( 65, 0, 0 );
|
|
|
|
if ( start == "price_wakeup" )
|
|
return;
|
|
if ( start == "walkoff" )
|
|
return;
|
|
|
|
|
|
assertex( "Start point " + start + " is not handled by the catchup thread." );
|
|
}
|
|
|
|
|
|
|