772 lines
26 KiB
Plaintext
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;
|
|
}
|
|
|
|
} |