IW4-Dump-Files/maps/af_chase.gsc

772 lines
26 KiB
Plaintext

#include maps\_utility;
#include common_scripts\utility;
#include maps\_anim;
#include maps\_vehicle_spline_zodiac;
#include maps\_vehicle;
#include maps\af_chase_code;
#include maps\af_chase_zodiac;
#include maps\_hud_util;
main()
{
maps\af_chase_knife_fight_code::timescale_does_not_effect_sound();
level.ambience_timescale = 0;
precachestring( &"AF_CHASE_PURSUE" );
precachestring( &"AF_CHASE_MISSION_FAILED_IN_THE_OPEN" );
precachestring( &"AF_CHASE_MISSION_FAILED_KEEP_UP" );
precachestring( &"AF_CHASE_FAILED_TO_SHOOT_DOWN" );
precachestring( &"AF_CHASE_PRESS_USE" );
precachestring( &"AF_CHASE_HINT_CRAWL_RIGHT" );
precachestring( &"AF_CHASE_HINT_CRAWL_LEFT" );
precachestring( &"AF_CHASE_KILL_SHEPHERD" );
precachestring( &"SCRIPT_WAYPOINT_SHEPHERD" );
precachestring( &"AF_CHASE_FAILED_TO_CRAWL" );
precachestring( &"AF_CHASE_FAILED_TO_PULL_KNIFE" );
// PreCacheItem( "cheytac" );
PreCacheItem( "m203" );
PreCacheRumble( "steady_rumble" );
PreCacheRumble( "smg_fire" );
PreCacheItem( "m16_grenadier" );
PreCacheItem( "rpg_straight_af_chase" );
PreCacheItem( "rpg_af_chase" );
PreCacheItem( "rpd" );
PreCacheItem( "uzi" );
PreCacheItem( "littlebird_FFAR" );
PreCacheModel( "weapon_commando_knife" );
PreCacheModel( "weapon_commando_knife_bloody" );
PreCacheModel( "viewmodel_commando_knife" );
PreCacheModel( "viewmodel_commando_knife_bloody" );
PreCacheModel( "zodiac_head_roller" );
PreCacheModel( "weapon_colt_anaconda" );
PreCacheModel( "vehicle_pickup_destroyed" );
PreCacheModel( "weapon_colt_anaconda_animated" );
PreCacheModel( "fx_rifle_shell" );
PreCacheModel( "body_desert_tf141_zodiac" );
PreCacheModel( "viewhands_player_tf141_bloody" );
precachemodel( "head_hero_price_desert_beaten" );
precachemodel( "head_vil_shepherd_damaged" );
precachemodel( "vehicle_little_bird_bench_afghan" );
PreCacheRumble( "heavy_1s" );
PreCacheRumble( "heavy_2s" );
PreCacheRumble( "heavy_3s" );
PreCacheRumble( "light_1s" );
PreCacheRumble( "light_2s" );
PreCacheRumble( "light_3s" );
precachemodel( "body_vil_shepherd_no_gun" );
PreCacheModel( "prop_misc_literock_small_01" );
PreCacheModel( "prop_misc_literock_small_02" );
PreCacheModel( "prop_misc_literock_small_03" );
PreCacheModel( "prop_misc_literock_small_04" );
PreCacheModel( "prop_misc_literock_small_05" );
PreCacheModel( "prop_misc_literock_small_06" );
PreCacheModel( "prop_misc_literock_small_07" );
PreCacheModel( "prop_misc_literock_small_08" );
PreCacheShellShock( "af_chase_under_water" );
PreCacheShellShock( "af_chase_turn_buckle_slam" );
PreCacheShellShock( "af_chase_ending_wounded" );
PreCacheShellShock( "af_chase_ending_pulling_knife_later" );
PreCacheShellShock( "af_chase_ending_no_control" );
PreCacheShellShock( "af_chase_ending_no_control_lowkick" );
PreCacheShellShock( "af_chase_ending_wakeup" );
PreCacheShellShock( "af_chase_ending_wakeup_nomove" );
PreCacheShellShock( "af_chase_boatdrive_end" );
PreCacheShader( "overlay_hunted_black" );
precacheItem( "ending_knife" );
// precacheItem( "ending_knife_silent" );
precacheShader( "hud_icon_commando_knife" );
precacheShader( "reticle_center_throwingknife" );
precacherumble( "tank_rumble" );
precacherumble( "damage_light" );
precacherumble( "damage_heavy" );
level.next_rpg_firetime = GetTime();
maps\af_chase_precache::main();
// maps\_patrol_anims::main();
maps\af_chase_fx::main();
//original worldspawn values;
// sunlight 1.5;
// 0.960784 0.827451 0.647059
SetSunLight( 1.441176, 1.2411765, 0.9705885 );
SetSavedDvar( "r_specularcolorscale", "3" );
add_start( "boatdrive_nofail", ::start_boatdrive_nofail, "", ::empty );
add_start( "boatdrive_begin", ::start_boatdrive_begin, "", ::empty );
add_start( "boatdrive_lake", ::start_boatdrive_lake, "", ::empty );
add_start( "boatdrive_lake_mid", ::start_boatdrive_lake_mid, "", ::empty );
add_start( "boatdrive_rapids", ::start_boatdrive_rapids, "", ::empty );
add_start( "boatdrive_below_rapids",::start_boatdrive_river_below_rapids, "", ::empty );
add_start( "boatdrive_end", ::start_boatdrive_end, "", maps\af_chase_knife_fight::wakeup_after_crash );
maps\af_chase_knife_fight::add_knife_fight_starts();
add_start( "debug_boatdrive", ::start_debug_boatdrive, "", ::empty );
/*
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_pullout, "", ::knife_pullout );
add_start( "price_wakeup", ::start_price_wakeup, "", ::price_wakeup );
add_start( "walkoff", ::start_walkoff, "", ::walkoff );
*/
default_start( ::start_default );
maps\af_chase_knife_fight::init_ending();
init_flags_here();
maps\_load::main();
thread start_point_catchup_thread();
maps\af_chase_anim::main_anim();
thread maps\af_chase_knife_fight::init_main_and_ending_common_stuff();
maps\_zodiac_drive::zodiac_preLoad( "viewhands_player_tf141" );
maps\_zodiac_ai::main();
//add_hint_string( "btobackup" , &"SCRIPT_PLATFORM_ZODIAC_STEADY", ::hint_test );
/#
SetDevDvarIfUninitialized( "scr_zodiac_test", 0 );
#/
// SetExpFog( 1000, 8000, 0.60, 0.50, 0.40, 0.8, 0 );
/* - Some temp stuff for messing with level fog and vision sets.
maps\_utility::set_vision_set( "af_chase_outdoors_2", 0 );
Start Fog - 1000, 8000, 0.60, 0.50, 0.40, 0.8, 0
Caves fog - 1000, 8000, 0.60, 0.50, 0.40, 0.45, 0
resevoir fog 1 - 8000, 45000, 0.60, 0.50, 0.40, 0.3, 0
reveoir 2 - 2000, 20000, 0.60, 0.50, 0.40, 0.2, 0
rapids - 1000, 11000, 0.60, 0.50, 0.40, 0.55, 0
gorge - 1500, 15000, 0.60, 0.50, 0.40, 0.45, 0
waterfall - 10000, 50000, 0.60, 0.50, 0.40, 0.75, 0 */
script_vehicle_zodiac_players = GetEntArray( "script_vehicle_zodiac_player", "classname" );
array_thread( script_vehicle_zodiac_players, ::add_spawn_function, maps\_zodiac_drive::drive_vehicle );
array_thread( script_vehicle_zodiac_players, ::add_spawn_function, ::setup_boat_for_drive );
array_thread( script_vehicle_zodiac_players, ::add_spawn_function, ::zodiac_physics );
rpg_bridge_guy = GetEntArray( "rpg_bridge_guy", "script_noteworthy" );
array_thread( rpg_bridge_guy, ::add_spawn_function, ::rpg_bridge_guy );
actor_enemy_afghan_RPG = GetEntArray( "actor_enemy_afghan_RPG", "classname" );
array_thread( actor_enemy_afghan_RPG, ::add_spawn_function, ::rpg_bridge_guy_target );
sight_range = 3000 * 3000;
foreach ( object in actor_enemy_afghan_RPG )
{
object.script_sightrange = sight_range;
}
// thread_the_needle = GetEntArray( "thread_the_needle", "targetname" );
// array_thread( thread_the_needle, ::trigger_thread_the_needle );
rope_splashers = GetEntArray( "rope_splashers", "script_noteworthy" );
array_thread( rope_splashers, ::add_spawn_function, ::rope_splashers );
GetEnt( "enemy_chase_boat", "targetname" ) add_spawn_function( ::enemy_chase_boat );
rapids_trigger = GetEnt( "rapids_trigger", "targetname" );
rapids_trigger thread autosave_boat_chase();
rapids_trigger thread trigger_set_water_sheating_time( "bump_small_after_rapids", "bump_big_after_rapids" );
rapids_trigger thread trigger_rapids();
on_river_trigger = GetEnt( "on_river_trigger", "targetname" );
on_river_trigger thread trigger_on_river();
boat_mount = GetEnt( "boat_mount", "targetname" );
boat_mount thread trigger_boat_mount();
increase_enemy_boats_mid_lake = GetEnt( "increase_enemy_boats_mid_lake", "script_noteworthy" );
increase_enemy_boats_mid_lake thread trigger_set_max_zodiacs( 2 );
trigger_multiple_speeds = GetEntArray( "trigger_multiple_speed", "classname" );
array_thread( trigger_multiple_speeds, ::trigger_multiple_speed_think );
script_vehicle_littlebird_armed = GetEntArray( "script_vehicle_littlebird_armed", "classname" );
array_thread( script_vehicle_littlebird_armed, ::add_spawn_function, ::godon );
script_vehicle_zodiacs = GetEntArray( "script_vehicle_zodiac", "classname" );
script_vehicle_zodiac_physics = GetEntArray( "script_vehicle_zodiac_physics", "classname" ) ;
array_thread( script_vehicle_zodiac_physics, ::add_spawn_function, ::zodiac_physics );
all_zodicas = array_combine( script_vehicle_zodiacs, script_vehicle_zodiac_physics );
array_thread( all_zodicas, ::add_spawn_function, ::zodiac_treadfx );
array_thread( all_zodicas, ::add_spawn_function, ::zodiac_enemy_setup );
// foreach ( zodiac in script_vehicle_zodiac_physics )
// zodiac.origin += ( 0, 0, 64 );// bump them up because they were previously not physics and placed below the surface
script_vehicle_pavelow = GetEntArray( "script_vehicle_pavelow", "classname" );
array_thread( script_vehicle_pavelow, ::add_spawn_function, ::disable_origin_offset );
add_global_spawn_function( "axis", ::set_fixed_node_after_seeing_player_spawn_func );
add_global_spawn_function( "axis", ::lower_accuracy_behind_player );
add_global_spawn_function( "axis", ::boatsquish );
thread remove_global_spawn_funcs();
destructible_fake = GetEntArray( "destructible_fake", "script_noteworthy" );
array_thread( destructible_fake, ::destructible_fake );
thread afchase_objectives();
end_caves_trigger = GetEnt( "end_caves_trigger", "targetname" );
end_caves_trigger thread trigger_end_caves();
end_caves_trigger thread autosave_boat_chase();
// price_tells_player_go_right = GetEnt( "price_tells_player_go_right", "targetname" );
// price_tells_player_go_right thread trigger_price_tells_player_go_right();
heli_attack_player_idle = getstructarray( "heli_attack_player_idle", "script_noteworthy" );
array_thread( heli_attack_player_idle, ::heli_attack_player_idle );
heli_attack_player_idle = GetEntArray( "heli_attack_player_idle", "script_noteworthy" );
array_thread( heli_attack_player_idle, ::heli_attack_player_idle );
kill_destructibles_and_barrels_in_volume = GetEntArray( "kill_destructibles_and_barrels_in_volume", "targetname" );
array_thread( kill_destructibles_and_barrels_in_volume, ::kill_destructibles_and_barrels_in_volume );
add_extra_autosave_check( "boat_check_trailing", ::autosave_boat_check_trailing, "trailing too far behind the enemy boat." );
thread river_current( "river_flow" );
thread maps\af_chase_zodiac::zodiac_main();
SetSavedDvar( "ai_friendlyFireBlockDuration", "0" );// this might bite me later.
price_position_switch = GetEntArray( "price_position_switch", "targetname" );
array_thread( price_position_switch, ::price_position_switch );
bobbing_boat = GetEntArray( "bobbing_boat", "script_noteworthy" );
array_thread( bobbing_boat, ::add_spawn_function, ::bobbing_boat_spawn );
crashable_whizby_boats = GetEntArray( "crashable_whizby_boats", "script_noteworthy" );
array_thread( crashable_whizby_boats, ::add_spawn_function, ::crashable_whizby_boats );
enemy_zodiacs_wipe_out = GetEnt( "enemy_zodiacs_wipe_out", "targetname" );
enemy_zodiacs_wipe_out thread trigger_enemy_zodiacs_wipe_out();
neutral_enemies = GetEntArray( "neutral_enemies", "targetname" );
array_thread( neutral_enemies, ::trigger_neutral_enemies );
dialog_cave = GetEnt( "dialog_cave", "targetname" );
// dialog_cave = Spawn( "trigger_radius", (-18968, -18324, 0), 0, 730.399, 1000 );
dialog_cave thread dialog_cave();
thread dialog_boat_battlechatter();
thread sunsample_after_caves();
thread dvar_warn();
thread set_price_autoswitch_after_caves();
thread search_the_scrash_site();
if ( is_default_start() || issubstr( level.start_point, "boat" ) )
thread maps\af_chase_waterfall::main();
trigger_out_of_caves = GetEnt( "trigger_out_of_caves", "targetname" );
if ( IsDefined( trigger_out_of_caves ) )
trigger_out_of_caves thread trigger_out_of_caves();
open_area = getentarray( "open_area", "targetname" );
array_thread( open_area, ::trigger_open_area );
battlechatter_off( "allies" );
// thread dump_on_command();
sentry_technicals = getentarray( "sentry_technical", "script_noteworthy" );
array_thread( sentry_technicals, ::add_spawn_function, ::sentry_technical_think );
// thread dialog_radio();
explode_barrels_in_radiuss = getentarray( "explode_barrels_in_radius", "targetname" );
array_thread( explode_barrels_in_radiuss, ::explode_barrels_in_radius_think );
thread af_chase_music();
}
init_flags_here()
{
flag_init( "no_more_physics_effects" );
flag_init( "player_in_open" );
flag_init( "zodiac_catchup" );
flag_init( "player_in_sight_of_boarding" );
flag_init( "player_on_boat" );
flag_init( "exit_caves" );
flag_init( "enemy_zodiacs_wipe_out" );
flag_init( "on_river" );
flag_init( "zodiac_boarding" );
flag_init( "enemy_heli_takes_off" );
flag_init( "price_anim_on_boat" );
flag_init( "rapids_head_bobbing" );
flag_init( "heli_firing" );
/#
flag_init( "debug_crumbs" );
#/
}
empty()
{
}
music_start()
{
level endon ( "stop_music_at_splash" );
MusicStop( .4 );
wait 1.5;
org = Spawn( "script_origin", ( 0, 0, 0 ) );
org endon( "death" );
level.music_emitter = org;
while( 1 )
{
org playsound( "af_chase_startinboat", "sounddone" );
org waittill ( "sounddone" );
}
}
start_default()
{
boat_common();
level.price thread animate_price_into_boat();
friendly_boat = spawn_vehicle_from_targetname( "players_boat" );
enemy_boat = spawn_vehicle_from_targetname_and_drive( "enemy_chase_boat" );
thread enable_bread_crumb_chase();
thread set_breadcrumb_fail_time( 15 );
objective_onentity( obj( "pursue" ), enemy_boat );
thread dialog_start();
thread maps\_introscreen::af_chase_intro();
wait 3;
// vehicle_dump();
flag_wait( "player_on_boat" );
maps\_friendlyfire::TurnOff();
thread set_breadcrumb_fail_time( 10, 30 );
}
start_boatdrive_begin()
{
change_target_on_vehicle_spawner( "enemy_chase_boat", "enemy_boat_pos_boatdrive_begin" );
boat_common();
vision_set_fog_changes( "afch_fog_caves", 0 );
friendly_boat = spawn_vehicle_from_targetname( "players_boat" );
enemy_boat = spawn_vehicle_from_targetname_and_drive( "enemy_chase_boat" );
waittillframeend;// let the spawned vehicle run its spawn_func to catch this useby notify.
friendly_boat UseBy( level.player );
level.player.drivingVehicle = friendly_boat;
// friendly_boat Vehicle_SetSpeedImmediate( 33,90,90 );
thread enable_bread_crumb_chase();
}
start_debug_boatdrive()
{
boat_common();
friendly_boat = spawn_vehicle_from_targetname( "players_boat" );
friendly_boat UseBy( level.player );
level.player.drivingVehicle = friendly_boat;
array_thread( GetEntArray( "trigger_multiple", "code_classname" ), ::trigger_off );
}
start_boatdrive_lake_mid()
{
//fast forward to new location. speed is approximated based on pretend playthrough.
change_target_on_vehicle_spawner( "enemy_chase_boat", "enemy_boat_pos_mid_lake" );
boat_common();
flag_set( "exit_caves" );
vision_set_fog_changes( "af_chase_outdoors_2", 0 );
// move player boat to new position
player_boat_spawner = GetEnt( "players_boat", "targetname" );
player_boat_spawner_position = getstruct( "lake_mid_start_pose", "targetname" );
player_boat_spawner.origin = player_boat_spawner_position.origin;
player_boat_spawner.angles = player_boat_spawner_position.angles;
friendly_boat = spawn_vehicle_from_targetname( "players_boat" );
enemy_boat = spawn_vehicle_from_targetname_and_drive( "enemy_chase_boat" );
waittillframeend;// let the spawned vehicle run its spawn_func to catch this useby notify.
friendly_boat UseBy( level.player );
level.player.drivingVehicle = friendly_boat;
friendly_boat Vehicle_SetSpeedImmediate( 60, 90, 90 );// last two params don't do anything but are required for the boat.
thread enable_bread_crumb_chase();
thread river_current( "river_current_start_boatdrive_lake" );
}
start_boatdrive_lake()
{
//fast forward to new location. speed is approximated based on pretend playthrough.
change_target_on_vehicle_spawner( "enemy_chase_boat", "enemy_boat_pos_lake" );
boat_common();
vision_set_fog_changes( "af_chase_outdoors_2", 0 );
// move player boat to new position
player_boat_spawner = GetEnt( "players_boat", "targetname" );
player_boat_spawner_position = getstruct( "lake_start_pose", "targetname" );
player_boat_spawner.origin = player_boat_spawner_position.origin;
player_boat_spawner.angles = player_boat_spawner_position.angles;
friendly_boat = spawn_vehicle_from_targetname( "players_boat" );
enemy_boat = spawn_vehicle_from_targetname_and_drive( "enemy_chase_boat" );
waittillframeend;// let the spawned vehicle run its spawn_func to catch this useby notify.
friendly_boat UseBy( level.player );
level.player.drivingVehicle = friendly_boat;
friendly_boat Vehicle_SetSpeedImmediate( 48, 90, 90 );// last two params don't do anything but are required for the boat.
thread enable_bread_crumb_chase();
thread river_current( "river_current_start_boatdrive_lake" );
}
start_boatdrive_rapids()
{
//fast forward to new location. speed is approximated based on pretend playthrough.
change_target_on_vehicle_spawner( "enemy_chase_boat", "enemy_boat_pos_rapids" );
change_target_ent_on_vehicle_spawner( "seaknight_fly_over", "enemy_heli_pos_rapids" );
boat_common();
flag_set( "exit_caves" );
//af_chase_outdoors_2
//set vision set so the water thing can work
vision_set_fog_changes( "af_chase_outdoors_2", 0 );
// move player boat to new position
player_boat_spawner = GetEnt( "players_boat", "targetname" );
player_boat_spawner_position = getstruct( "rapids_start_position", "targetname" );
player_boat_spawner.origin = player_boat_spawner_position.origin;
player_boat_spawner.angles = player_boat_spawner_position.angles;
friendly_boat = spawn_vehicle_from_targetname( "players_boat" );
enemy_boat = spawn_vehicle_from_targetname_and_drive( "enemy_chase_boat" );
enemy_pickup_heli = spawn_vehicle_from_targetname_and_drive( "seaknight_fly_over" );
waittillframeend;// let the spawned vehicle run its spawn_func to catch this useby notify.
friendly_boat UseBy( level.player );
level.player.drivingVehicle = friendly_boat;
friendly_boat Vehicle_SetSpeedImmediate( 78, 90, 90 );// last two params don't do anything but are required. not optional for boats I guess.
thread enable_bread_crumb_chase();
//catch up the current
thread river_current( "river_current_start_rapids" );
}
start_boatdrive_river_below_rapids()
{
//fast forward to new location. speed is approximated based on pretend playthrough.
change_target_on_vehicle_spawner( "enemy_chase_boat", "enemy_boat_pos_below_rapids" );
change_target_ent_on_vehicle_spawner( "seaknight_fly_over", "enemy_heli_pos_rapids" );
boat_common();
flag_set( "exit_caves" );
flag_set( "on_river" );
//af_chase_outdoors_2
//set vision set so the water thing can work
vision_set_fog_changes( "af_chase_outdoors_2", 0 );
// move player boat to new position
player_boat_spawner = GetEnt( "players_boat", "targetname" );
player_boat_spawner_position = getstruct( "below_rapids_start_position", "targetname" );
player_boat_spawner.origin = player_boat_spawner_position.origin;
player_boat_spawner.angles = player_boat_spawner_position.angles;
friendly_boat = spawn_vehicle_from_targetname( "players_boat" );
enemy_boat = spawn_vehicle_from_targetname_and_drive( "enemy_chase_boat" );
waittillframeend;// let the spawned vehicle run its spawn_func to catch this useby notify.
friendly_boat UseBy( level.player );
level.player.drivingVehicle = friendly_boat;
friendly_boat Vehicle_SetSpeedImmediate( 78, 90, 90 );// last two params don't do anything but are required. not optional for boats I guess.
thread enable_bread_crumb_chase();
//catch up the current
thread river_current( "river_current_start_rapids" );
}
start_boatdrive_end()
{
//fast forward to new location. speed is approximated based on pretend playthrough.
// thread music_start();
change_target_on_vehicle_spawner( "enemy_chase_boat", "enemy_boat_pos_end" );
seaknight_pickup_boat_spot = GetEnt( "seaknight_pickup_boat_spot", "script_noteworthy" );
thread kill_all_the_ai_and_fx_from_boatride();
boat_common();
flag_set( "exit_caves" );
flag_set( "enemy_zodiacs_wipe_out" );
//af_chase_outdoors_2
//set vision set so the water thing can work
vision_set_fog_changes( "af_chase_outdoors_2", 0 );
// move player boat to new position
player_boat_spawner = GetEnt( "players_boat", "targetname" );
player_boat_spawner_position = getstruct( "end_start_position", "targetname" );
player_boat_spawner.origin = player_boat_spawner_position.origin;
player_boat_spawner.angles = player_boat_spawner_position.angles;
friendly_boat = spawn_vehicle_from_targetname( "players_boat" );
enemy_boat = spawn_vehicle_from_targetname_and_drive( "enemy_chase_boat" );
enemy_pickup_heli = spawn_vehicle_from_targetname( "enemy_pickup_heli" );
waittillframeend;// let the spawned vehicle run its spawn_func to catch this useby notify.
level.player PlayerLinkToBlend( friendly_boat, "tag_player", .2, .1, .1);
friendly_boat UseBy( level.player );
level.player.drivingVehicle = friendly_boat;
friendly_boat Vehicle_SetSpeedImmediate( 57, 90, 90 );// last two params don't do anything but are required. not optional for boats I guess.
thread enable_bread_crumb_chase();
thread river_current( "river_current_start_boatdrive_end" );
}
start_boatdrive_nofail()
{
SetDvar( "scr_zodiac_test", 1 );
level.player EnableInvulnerability();
thread start_default();
}
afchase_objectives()
{
waittillframeend; // let the start points initiate stuff first
switch ( level.start_point )
{
case "default":
case "boatdrive_nofail":
case "boatdrive_begin":
case "boatdrive_lake":
case "boatdrive_lake_mid":
case "boatdrive_rapids":
case "boatdrive_below_rapids":
case "boatdrive_end":
case "boatdrive_end_test":
// Don't let Shepherd get away.
Objective_Add( obj( "pursue" ), "current", &"AF_CHASE_PURSUE" );
objective_onentity( obj( "pursue" ), level.enemy_boat, (0,0,160) );
flag_wait( "player_in_sight_of_boarding" );
Objective_State( obj( "pursue" ), "done" );
case "wakeup":
case "wakefast":
case "turnbuckle":
case "gloat":
case "wounded":
case "pullout":
case "kill":
case "gun_drop":
case "crawl":
case "gun_kick":
case "knife_fight":
case "price_wakeup":
case "knife_moment":
case "walkoff":
case "end":
case "scene_fight_loop_B":
case "scene_fight_loop_C":
case "scene_fight_loop_D2":
case "scene_fight_loop_D3":
case "scene_fight_loop_E":
case "on_foot_art_tweak":
case "debug_boatdrive":
thread maps\af_chase_knife_fight::knife_fight_objectives();
break;
default:
assertmsg( "Start point " + level.start_point + " isn't handled by afchase_objectives" );
}
}
dialog_radio()
{
level.scr_radio[ "afchase_shp_stillincaves" ] = "afchase_shp_stillincaves";
level.scr_radio[ "afchase_shp_observe" ] = "afchase_shp_observe";
level.scr_radio[ "afchase_shp_uavsupport" ] = "afchase_shp_uavsupport";
wait 1;
flag_wait( "player_on_boat" );
wait 10;
level.player radio_dialogue( "afchase_shp_stillincaves" );
wait 10;
level.player radio_dialogue( "afchase_shp_observe" );
//"afchase_shp_uavsupport"
//"afchase_shp_dangerclose"
//"afchase_shp_clearedhot"
//"afchase_shp_takeem"
//"afchase_shp_tryagain"
flag_wait ( "exit_caves" );
wait 4;
level.player radio_dialogue( "afchase_shp_uavsupport" );
}
start_point_catchup_thread()
{
waittillframeend;// let the actual start functions run before this one
start = level.start_point;
if ( is_default_start() )
return;
if ( start == "boatdrive_nofail" )
return;
if ( start == "boatdrive_begin" )
return;
if ( start == "boatdrive_lake" )
return;
if ( start == "boatdrive_lake_mid" )
return;
if ( start == "boatdrive_rapids" )
return;
if ( start == "boatdrive_below_rapids" )
return;
remove_global_spawn_function( "axis", ::set_fixed_node_after_seeing_player_spawn_func );
remove_global_spawn_function( "axis", ::lower_accuracy_behind_player );
flag_set( "stop_boat_dialogue" );
if ( start == "boatdrive_end" )
return;
if ( start == "boatdrive_end_test" )
return;
thread maps\af_chase_knife_fight::startpoint_catchup();
}
af_chase_music()
{
switch ( level.start_point )
{
case "default":
case "debug_boatdrive":
case "boatdrive_begin":
case "boatdrive_nofail":
thread maps\_utility::set_ambient( "af_chase_caves" );
case "boatdrive_lake":
case "boatdrive_lake_mid":
case "boatdrive_rapids":
case "boatdrive_below_rapids":
case "boatdrive_end":
thread MusicLoop( "af_chase_startinboat" ); // 3 minutes 21 seconds
flag_wait( "test_boat_is_on_spline" );
level notify( "stop_music" );
MusicStop( 4 );
level.player thread play_sound_on_entity( "af_chase_waterfall" );
case "wakeup":
case "wakefast":
case "turnbuckle":
case "gloat":
flag_wait( "af_chase_final_fight" );
case "gun_drop":
musicplaywrapper( "af_chase_final_fight" ); // becomes ~1 second desynced but I don't care.
case "crawl":
case "gun_kick":
case "wounded":
case "pullout":
case "kill":
case "price_wakeup":
case "walkoff":
flag_wait( "af_chase_final_ending" );
musicplaywrapper( "af_chase_final_ending" );
flag_wait( "af_chase_ending_credits" );
music_loop( "af_chase_ending_credits" , 90, 1 );
break;
default:
AssertMsg( "Unhandled start point " + level.start_point );
break;
}
}