IW4-Dump-Files/maps/char_museum.gsc

1931 lines
52 KiB
Plaintext

#include common_scripts\utility;
#include maps\_hud_util;
#include maps\_utility;
#include maps\_anim;
#include maps\_vehicle;
#include maps\char_museum_code;
#using_animtree( "generic_human" );
main()
{
level.GLOBAL_ANIM_SPEED = .65;
level.guys = [];
level.activeRoom = "none";
level.anim_ai = [];
level.panic_guys = 0;
level.pmc_alljuggernauts = true;
flag_init( "do_museum_credits" );
flag_init( "panic_button" );
flag_init( "fade_from_black" );
flag_init( "looked_at_big_board" );
flag_init( "museum_ready" );
flag_init( "spawn_room1_civs" );
flag_init( "af_caves_done" );
flag_init( "dc_burning_done" );
flag_init( "airport_done" );
flag_init( "cliffhanger_done" );
flag_init( "favela_done" );
flag_init( "oilrig_done" );
flag_init( "estate_done" );
flag_init( "hostage_done" );
flag_init( "arcadia_done" );
flag_init( "trainer_done" );
switch( level.level_mode )
{
case "free": //-> free roam
default_start( ::start_free );
add_start( "free", ::start_free, "[free_roam]", ::museum_main );
setdvar( "start", "" );
break;
case "credits_black": //-> coming from menu after never beating game
maps\_credits::initcredits( "all" );
level.credits_speed = level.credits_speed * .75;
default_start( ::start_black );
add_start( "black", ::start_black, "[black_credits]", ::black_main );
break;
case "credits_1": //-> coming from af_chase
maps\_credits::initcredits( "all" );
break;
case "credits_2": //-> coming from menu after beating game
maps\_credits::initcredits( "all" );
default_start( ::start_afcaves );
break;
}
add_start( "af_caves", ::start_afcaves, "[af_caves]", ::afcaves_main );
add_start( "dc_burning", ::start_dcburning, "[dc_burning]", ::dcburning_main );
add_start( "airport", ::start_airport, "[airport]", ::airport_main );
add_start( "cliffhanger", ::start_cliffhanger,"[cliffhanger]", ::cliffhanger_main );
add_start( "favela", ::start_favela, "[favela]", ::favela_main );
add_start( "hallway1", ::start_hallway1, "[hallway1]", ::hallway1_main );
add_start( "vehicles", ::start_vehicles, "[vehicles]", ::vehicles_main );
add_start( "hallway2", ::start_hallway2, "[hallway2]", ::hallway2_main );
add_start( "oilrig", ::start_oilrig, "[oilrig]", ::oilrig_main );
add_start( "estate", ::start_estate, "[estate]", ::estate_main );
add_start( "hostage", ::start_hostage, "[hostage]", ::hostage_main );
add_start( "trainer", ::start_trainer, "[trainer]", ::trainer_main );
add_start( "arcadia", ::start_arcadia, "[arcadia]", ::arcadia_main );
animscripts\dog\dog_init::initDogAnimations();
maps\char_museum_precache::main();
maps\char_museum_fx::main();
if( level.level_mode != "credits_1" )
{
maps\_load::main();
//HAS TO COME AFTER _LOAD::MAIN()
setSavedDvar( "sv_saveOnStartMap", false );
imagename = "levelshots / autosave / autosave_" + level.script + "start";
// string not found for AUTOSAVE_LEVELSTART
SaveGame( "levelstart", &"AUTOSAVE_LEVELSTART", imagename, true );
maps\_load::set_player_viewhand_model( "viewhands_player_us_army" );
}
maps\_drone_civilian::init();
maps\_drone_ai::init();
thread post_init();
}
post_init()
{
if( level.level_mode == "credits_1" )
{
flag_wait( "do_museum_credits" );
thread start_afcaves();
}
maps\char_museum_anim::main();
thread sign_departure_status();
array_thread( getentarray( "c4barrelPacks", "script_noteworthy" ), ::c4_packs_think );
SetSavedDvar( "player_sprintUnlimited", "1" );
SetSavedDvar( "ui_hidemap", "1" );
level.friendlyFireDisabled = true;
thread battlechatter_off();
}
/************************************************************************************************************/
/* AF_CAVES */
/************************************************************************************************************/
afcaves_setup()
{
level.anim_ai[ "af_caves" ] = [];
array_thread( getentarray( "ai_af_caves", "script_noteworthy" ), ::add_spawn_function, ::afcaves_ai_setup );
array_thread( getentarray( "ai_af_caves", "script_noteworthy" ), ::add_spawn_function, ::afcaves_ai_think );
}
afcaves_main()
{
if( level.level_mode == "credits_1" )
{
flag_wait( "do_museum_credits" );
flag_wait( "museum_ready" );
}
array_thread( getentarray( "civ_af_caves_1", "script_noteworthy" ), ::add_spawn_function, ::afcaves_civ1_think );
thread afcaves_camera_think();
flag_wait( "af_caves_spawn_civs" );
array_thread( getentarray( "civ_af_caves_1", "script_noteworthy" ), ::spawn_ai, true );
flag_wait( "spawn_room1_civs" );
array_thread( getentarray( "civ_af_caves_2", "script_noteworthy" ), ::spawn_ai, true );
flag_wait( "af_caves_done" );
wait 1.25;
array_thread( getentarray( "civ_af_caves_3", "script_noteworthy" ), ::delaythread, 1.25, ::spawn_ai, true );
camera_move( "camara_path_dc_burning", 25 );
}
afcaves_camera_think()
{
flag_wait( "fade_from_black" );
node = getvehiclenode( "camara_path_af_caves", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
wait .5;
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
camera_move( "camara_path_af_caves2", 6.5 );
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
afcaves_civ1_think()
{
guys = [];
foreach( ai in level.anim_ai[ "af_caves" ] )
{
switch( ai.animation )
{
case "training_intro_foley_idle_talk_1":
guys[ 0 ] = ai;
break;
case "afgan_caves_Price_rappel_idle":
guys[ 1 ] = ai;
break;
case "casual_stand_v2_twitch_shift":
guys[ 2 ] = ai;
break;
case "afchase_ending_shepherd_gun_monologue":
guys[ 3 ] = ai;
break;
case "zodiac_trans_L2R":
guys[ 4 ] = ai;
break;
case "casual_stand_v2_idle":
guys[ 5 ] = ai;
break;
}
}
num = 0;
while( num < 6 )
{
wait .05;
p1 = level.player.origin;
p1 = ( p1[0], p1[1], 0 );
p2 = self.origin;
p2 = ( p2[0], p2[1], 0 );
p3 = guys[ num ].origin;
p3 = ( p3[0], p3[1], 0 );
dot = vectordot( vectornormalize( p3 - p1 ), vectornormalize( p2 - p1 ) );
if( dot < .999 )
continue;
guys[ num ] ent_flag_set( "do_anim" );
num++;
}
flag_set( "spawn_room1_civs" );
}
afcaves_ai_setup()
{
self ai_default_setup( "af_caves" );
node = self.anim_node;
wait .05;
switch( node.animation )
{
case "afchase_ending_shepherd_gun_monologue":
self.anim_speed = level.GLOBAL_ANIM_SPEED * 1.23;
break;
case "zodiac_trans_L2R":
self.animtime = .28;
self SetAnimTime( getanim_generic( node.animation ), self.animtime );
break;
}
}
afcaves_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "zodiac_trans_L2R":
self thread ai_zodiac_anims( node.animation );
break;
case "afgan_caves_Price_rappel_idle":
self thread ai_idle( node.animation );
break;
case "training_intro_foley_idle_talk_1":
self thread ai_loop_random( node.animation, "foley_talk" );
break;
case "afchase_ending_shepherd_gun_monologue":
if( isai( self ) )
ai_wait_current_anim();
else
ai_wait_current_anim( .40 );
foreach( ent in level.anim_ai[ "af_caves" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "af_caves_done" );
break;
default:
self thread ai_loop_random( node.animation, "casual_stand" );
break;
}
}
ai_zodiac_anims( animation )
{
self endon( "panic_button" );
self endon( "death" );
self endon( "do_anim" );
self.current_anim = getanim_generic( animation );
self thread ai_current_anim_stop();
self ai_next_anim( %zodiac_rightside_wave );
self ai_next_anim( %zodiac_trans_R2L );
self ai_next_anim( %zodiac_leftside_wave );
self ai_next_anim( %zodiac_trans_L2R );
}
/************************************************************************************************************/
/* DC_BURNING */
/************************************************************************************************************/
dcburning_setup()
{
level.anim_ai[ "dc_burning" ] = [];
array_thread( getentarray( "ai_dc_burning", "script_noteworthy" ), ::add_spawn_function, ::dcburning_ai_setup );
array_thread( getentarray( "ai_dc_burning", "script_noteworthy" ), ::add_spawn_function, ::dcburning_ai_think );
}
dcburning_main()
{
thread dcburning_camera_think();
flag_wait( "dc_burning_go" );
wait 2;
foreach( ent in level.anim_ai[ "dc_burning" ] )
ent ent_flag_set( "do_anim" );
array_thread( getentarray( "civ_dc_burning_1", "script_noteworthy" ), ::delaythread, 11, ::spawn_ai, true );
flag_wait( "dc_burning_done" );
array_thread( getentarray( "civ_dc_burning_2", "script_noteworthy" ), ::spawn_ai, true );
array_thread( getentarray( "room1_civ_talkers", "targetname" ), ::spawn_ai, true );
wait 2;
array_thread( getentarray( "civ_dc_burning_3", "script_noteworthy" ), ::spawn_ai, true );
array_thread( getentarray( "civ_dc_burning_4", "script_noteworthy" ), ::delaythread, 1.25, ::spawn_ai, true );
camera_move( "camara_path_airport_mid", 35 );
level.camera ResumeSpeed( 5 );
wait 2;
camera_move( "camara_path_airport", 45, 0 );
}
dcburning_camera_think()
{
node = getvehiclenode( "camara_path_dc_burning", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
if( level.start_point == "dc_burning" )
{
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
}
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
dcburning_ai_setup()
{
self ai_default_setup( "dc_burning" );
node = self.anim_node;
wait .05;
switch( node.animation )
{
case "training_pit_sitting_welcome":
self.gun_remove = true;
self gun_remove();
self.animtime = .6;
self SetAnimTime( getanim_generic( node.animation ), self.animtime );
self.anim_speed = level.GLOBAL_ANIM_SPEED * 1.23;
self.animplaybackrate = self.anim_speed;
self.moveplaybackrate = self.anim_speed;
//self SetAnimTime( getanim_generic( node.animation ), .25 );
//self dcburning_dunn_gun_setup( node );
break;
case "training_intro_foley_begining":
self.animtime = .64;
self SetAnimTime( getanim_generic( node.animation ), self.animtime );
self.anim_speed = level.GLOBAL_ANIM_SPEED * 1.23;
self.animplaybackrate = self.anim_speed;
self.moveplaybackrate = self.anim_speed;
break;
case "civilian_sitting_talking_A_1":
self.gun_remove = true;
self gun_remove();
break;
case "riotshield_idle":
if( !isai( self ) )
self attach( "weapon_riot_shield", "TAG_WEAPON_LEFT" );
break;
}
}
dcburning_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "training_pit_sitting_welcome":
self thread dcburning_dunn( node.animation );
break;
case "training_intro_foley_begining":
self thread dcburning_foley( node.animation );
break;
case "civilian_sitting_talking_A_1":
self thread ai_idle( node.animation );
break;
case "stinger_fire":
self thread ai_loop_random( node.animation, "rpg" );
case "casual_crouch_idle":
self thread ai_loop_random( node.animation, "casual_crouch" );
break;
case "riotshield_idle":
self thread ai_idle( node.animation );
break;
default:
self thread ai_loop_random( node.animation, "casual_stand" );
break;
}
}
dcburning_dunn( animation )
{
self endon( "panic_button" );
self endon( "death" );
self endon( "do_anim" );
self.current_anim = getanim_generic( animation );
self thread ai_current_anim_stop();
//self thread dcburning_dunn_gun( animation );
self ai_next_anim( %training_pit_open_case );
//this is important - dont take this out...its to make up for
//a sleight frame diference between drone and AI logic where in
//on the current_anim gets set one frame too late.
percent = .41;
delay = .1;
wait delay;
self ai_wait_current_anim( percent, delay * -1 );
thread dcburning_dunn_stop();
}
dcburning_dunn_stop()
{
foreach( ent in level.anim_ai[ "dc_burning" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "dc_burning_done" );
}
#using_animtree( "script_model" );
dcburning_dunn_gun_setup( node )
{
self.anim_gun = spawn( "script_model", ( 0, 0, 0 ) );
self.anim_gun setmodel( "viewmodel_desert_eagle" );
self.anim_gun.origin = node.origin;
self.anim_gun.animname = "pit_gun";
self.anim_gun assign_animtree();
self.anim_gun set_start_pos( node.animation + "_gun", node.origin, node.angles );
self.anim_gun _setanim( self.anim_gun getanim( node.animation + "_gun" ), 1, 0, 0 );
}
dcburning_dunn_gun( animation )
{
self.anim_gun ent_flag_init( "do_anim" );
self.anim_gun ent_flag_set( "do_anim" );
self.anim_gun thread ai_current_anim_stop();
self.anim_gun _setanim( self.anim_gun getanim( animation + "_gun" ), 1, 0, self.anim_speed );
self.anim_gun.current_anim = self.anim_gun getanim( animation + "_gun" );
self.anim_gun ai_next_anim( %training_pit_open_case_gun );
}
#using_animtree( "generic_human" );
dcburning_foley( animation )
{
self endon( "panic_button" );
self endon( "death" );
self endon( "do_anim" );
self.current_anim = getanim_generic( animation );
self thread ai_current_anim_stop();
// self ai_next_anim( %training_intro_foley_turnaround_2 );
// self ai_next_anim( %training_intro_foley_idle_talk_1 );
self ai_next_anim( %training_intro_foley_end );
}
/************************************************************************************************************/
/* AIRPORT */
/************************************************************************************************************/
airport_setup()
{
level.anim_ai[ "airport" ] = [];
array_thread( getentarray( "ai_airport", "script_noteworthy" ), ::add_spawn_function, ::airport_ai_setup );
array_thread( getentarray( "ai_airport", "script_noteworthy" ), ::add_spawn_function, ::airport_ai_think );
}
airport_main()
{
thread airport_camera_think();
flag_wait( "airport_go" );
thread flag_set_delayed( "looked_at_big_board", 3 );
wait 1.5;
foreach( ent in level.anim_ai[ "airport" ] )
ent ent_flag_set( "do_anim" );
array_thread( getentarray( "civ_airport_1", "script_noteworthy" ), ::delaythread, 6.5, ::spawn_ai, true );
flag_wait( "airport_done" );
wait 1.5;
array_thread( getentarray( "civ_airport_2", "script_noteworthy" ), ::delaythread, .5, ::spawn_ai, true );
array_thread( getentarray( "civ_airport_3", "script_noteworthy" ), ::delaythread, 2.5, ::spawn_ai, true );
camera_move( "camara_path_cliffhanger", 70 );
}
airport_camera_think()
{
node = getvehiclenode( "camara_path_airport", "targetname" );
level.camera thread vehicle_paths( node );
if( level.start_point == "airport" )
{
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
}
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
airport_ai_setup()
{
self ai_default_setup( "airport" );
node = self.anim_node;
wait .05;
switch( node.animation )
{
case "airport_elevator_sequence_guy1":
case "airport_elevator_sequence_guy2":
self.animtime = .25;
self SetAnimTime( getanim_generic( node.animation ), self.animtime );
break;
case "airport_security_guard_pillar_react_R":
case "airport_security_civ_rush_guard":
self thread give_beretta();
break;
case "riotshield_bashB_attack":
if( !isai( self ) )
{
self attach( "weapon_riot_shield", "TAG_WEAPON_LEFT" );
}
break;
}
}
airport_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "airport_elevator_sequence_guy2":
self ai_wait_current_anim( .42 );
foreach( ent in level.anim_ai[ "airport" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "airport_done" );
break;
case "airport_security_guard_pillar_react_R":
case "airport_security_civ_rush_guard":
self thread airport_security_guard();
break;
case "casual_stand_v2_idle":
self thread ai_loop_random( node.animation, "casual_stand" );
break;
}
}
airport_security_guard()
{
self endon( "panic_button" );
self endon( "death" );
self endon( "do_anim" );
self ai_next_anim( %airport_security_guard_pillar_death_R );
}
/************************************************************************************************************/
/* CLIFFHANGER */
/************************************************************************************************************/
cliffhanger_setup()
{
level.anim_ai[ "cliffhanger" ] = [];
array_thread( getentarray( "ai_cliffhanger", "script_noteworthy" ), ::add_spawn_function, ::cliffhanger_ai_setup );
array_thread( getentarray( "ai_cliffhanger", "script_noteworthy" ), ::add_spawn_function, ::cliffhanger_ai_think );
}
cliffhanger_main()
{
thread cliffhanger_camera_think();
flag_wait( "cliffhanger_go" );
wait 2;
foreach( ent in level.anim_ai[ "cliffhanger" ] )
ent ent_flag_set( "do_anim" );
flag_wait( "cliffhanger_done" );
wait 1.5;
array_thread( getentarray( "civ_favela_0", "script_noteworthy" ), ::delaythread, 0, ::spawn_ai, true );
array_thread( getentarray( "civ_favela_1", "script_noteworthy" ), ::delaythread, 1.5, ::spawn_ai, true );
camera_move( "camara_path_favela" );
}
cliffhanger_camera_think()
{
node = getvehiclenode( "camara_path_cliffhanger", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
if( level.start_point == "cliffhanger" )
{
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
}
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
cliffhanger_ai_setup()
{
self ai_default_setup( "cliffhanger" );
node = self.anim_node;
wait .05;
switch( node.animation )
{
case "killhouse_sas_price":
self.gun_remove = true;
self gun_remove();
self.animtime = .2;
self SetAnimTime( getanim_generic( node.animation ), self.animtime );
break;
case "killhouse_sas_1":
case "killhouse_sas_2":
case "killhouse_sas_3":
self.animtime = .15;
self SetAnimTime( getanim_generic( node.animation ), self.animtime );
break;
default:
self.animtime = .01;
self SetAnimTime( getanim_generic( node.animation ), self.animtime );
break;
}
}
cliffhanger_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
/* case "killhouse_sas_1":
case "killhouse_sas_2":
case "killhouse_sas_3":*/
case "killhouse_sas_price":
self ai_wait_current_anim( .5 );
foreach( ent in level.anim_ai[ "cliffhanger" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "cliffhanger_done" );
break;
case "guardA_standing_cold_idle":
case "guardB_standing_cold_idle":
self thread ai_idle( node.animation );
break;
case "casual_crouch_idle":
self thread ai_loop_random( node.animation, "casual_crouch" );
break;
case "casual_stand_v2_idle":
self thread ai_loop_random( node.animation, "casual_stand" );
break;
}
}
/************************************************************************************************************/
/* FAVELA */
/************************************************************************************************************/
favela_setup()
{
level.anim_ai[ "favela" ] = [];
array_thread( getentarray( "ai_favela", "script_noteworthy" ), ::add_spawn_function, ::favela_ai_setup );
array_thread( getentarray( "ai_favela", "script_noteworthy" ), ::add_spawn_function, ::favela_ai_think );
}
favela_main()
{
thread favela_camera_think();
flag_wait( "favela_go" );
wait 3;
foreach( ent in level.anim_ai[ "favela" ] )
ent ent_flag_set( "do_anim" );
array_thread( getentarray( "civ_favela_3", "script_noteworthy" ), ::delaythread, 6, ::spawn_ai, true );
flag_wait( "favela_done" );
wait 1;
array_thread( getentarray( "civ_hallway1_1", "script_noteworthy" ), ::delaythread, 0, ::spawn_ai, true );
camera_move( "camara_path_hallway1", 70 );
}
favela_camera_think()
{
node = getvehiclenode( "camara_path_favela", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
if( level.start_point == "favela" )
{
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
}
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
favela_ai_setup()
{
self ai_default_setup( "favela" );
node = self.anim_node;
switch( node.animation )
{
case "airport_civ_in_line_15_B":
self setanimtime( getanim_generic( node.animation ), .05 );
break;
case "estate_ghost_radio":
self set_anim_time( node, .09 );
break;
case "invasion_vehicle_cover_dialogue_guy1":
case "invasion_vehicle_cover_dialogue_guy2":
self set_anim_time( node, .03 );
break;
case "gulag_end_evac_soap":
self.anim_speed = level.GLOBAL_ANIM_SPEED * .65;
break;
}
}
favela_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "gulag_end_evac_soap":
link = spawn( "script_origin", self.origin );
self linkto( link );
self ai_wait_current_anim( .20 );
foreach( ent in level.anim_ai[ "favela" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "favela_done" );
break;
case "favela_chaotic_standcover_gunjamB":
self thread ai_loop_random( node.animation, "favela_stand" );
break;
case "favela_chaotic_crouchcover_grenadefireA":
self thread ai_loop_random( node.animation, "favela_crouch" );
break;
case "german_shepherd_attackidle":
self thread ai_loop_dog( node.animation, "dog" );
break;
}
}
/************************************************************************************************************/
/* HALLWAY 1 */
/************************************************************************************************************/
hallway1_main()
{
thread hallway1_camera_think();
array_thread( getentarray( "civ_hallway1_2", "script_noteworthy" ), ::delaythread, 0, ::spawn_ai, true );
flag_wait( "skip_vehicles" );
ai = get_living_ai_array( "civ_talkers", "script_noteworthy" );
array_call( ai, ::delete );
array_thread( getentarray( "room3_civ_talkers", "targetname" ), ::delaythread, .5, ::spawn_ai, true );
array_thread( getentarray( "civ_hallway1_3", "script_noteworthy" ), ::delaythread, 0, ::spawn_ai, true );
flag_wait( "hallway1_go" );
}
hallway1_camera_think()
{
node = getvehiclenode( "camara_path_hallway1", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
if( level.start_point == "hallway1" )
{
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
}
level.camera ResumeSpeed( 5 );
level.camera waittill( "reached_end_node" );
}
/************************************************************************************************************/
/* VEHICLES */
/************************************************************************************************************/
vehicles_main()
{
array_thread( getentarray( "civ_vehicles_1", "script_noteworthy" ), ::delaythread, 10, ::spawn_ai, true );
thread vehicles_camera_think();
flag_wait( "vehicles_go" );
}
vehicles_camera_think()
{
if( level.start_point == "vehicles" )
{
node = getvehiclenode( "camara_path_vehicles", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
level.camera ResumeSpeed( 2 );
}
level.camera waittill( "reached_end_node" );
array_thread( getentarray( "civ_vehicles_2", "script_noteworthy" ), ::delaythread, 2, ::spawn_ai, true );
camera_move( "camara_path_vehicles2", 20, .25, .75 );
wait 1.5;
array_thread( getentarray( "civ_vehicles_3", "script_noteworthy" ), ::delaythread, 3.5, ::spawn_ai, true );
array_thread( getentarray( "civ_vehicles_4", "script_noteworthy" ), ::delaythread, 10, ::spawn_ai, true );
camera_move( "camara_path_vehicles3", 20, .75, .25 );
level.camera ResumeSpeed( 2 );
level.camera waittill( "reached_end_node" );
}
/************************************************************************************************************/
/* HALLWAY 2 */
/************************************************************************************************************/
hallway2_main()
{
thread hallway2_camera_think();
flag_wait( "skip_vehicles_to" );
ai = get_living_ai_array( "civ_talkers", "script_noteworthy" );
array_call( ai, ::delete );
array_thread( getentarray( "room2_civ_talkers", "targetname" ), ::delaythread, .5, ::spawn_ai, true );
array_thread( getentarray( "civ_hallway2_1", "script_noteworthy" ), ::delaythread, 0, ::spawn_ai, true );
flag_wait( "hallway2_go" );
}
hallway2_camera_think()
{
if( level.start_point == "hallway2" )
{
node = getvehiclenode( "camara_path_hallway2", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
level.camera ResumeSpeed( 5 );
}
level.camera waittill( "reached_end_node" );
}
/************************************************************************************************************/
/* OILRIG */
/************************************************************************************************************/
oilrig_setup()
{
level.anim_ai[ "oilrig" ] = [];
array_thread( getentarray( "ai_oilrig", "script_noteworthy" ), ::add_spawn_function, ::oilrig_ai_setup );
array_thread( getentarray( "ai_oilrig", "script_noteworthy" ), ::add_spawn_function, ::oilrig_ai_think );
}
oilrig_main()
{
thread oilrig_camera_think();
flag_wait( "oilrig_go" );
wait 2;
foreach( ent in level.anim_ai[ "oilrig" ] )
ent ent_flag_set( "do_anim" );
array_thread( getentarray( "civ_oilrig_1", "script_noteworthy" ), ::delaythread, 12, ::spawn_ai, true );
flag_wait( "oilrig_done" );
array_thread( getentarray( "civ_oilrig_2", "script_noteworthy" ), ::delaythread, 1.5, ::spawn_ai, true );
wait 1.75;
camera_move( "camara_path_estate" );
}
oilrig_camera_think()
{
if( level.start_point == "oilrig" )
{
node = getvehiclenode( "camara_path_oilrig", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
level.camera ResumeSpeed( .5 );
}
level.camera waittill( "reached_end_node" );
}
oilrig_ai_setup()
{
wait .1;
self ai_default_setup( "oilrig" );
node = self.anim_node;
}
oilrig_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "roadkill_opening_foley":
self ai_wait_current_anim( .73 );
foreach( ent in level.anim_ai[ "oilrig" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "oilrig_done" );
break;
case "roadkill_opening_shepherd":
self ai_wait_current_anim( .83 );
foreach( ent in level.anim_ai[ "oilrig" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "oilrig_done" );
break;
case "oilrig_sub_B_idle_3":
case "oilrig_sub_B_idle_4":
self thread bubbles();
default:
self thread ai_idle( node.animation );
break;
}
}
/************************************************************************************************************/
/* ESTATE */
/************************************************************************************************************/
estate_setup()
{
level.anim_ai[ "estate" ] = [];
array_thread( getentarray( "ai_estate", "script_noteworthy" ), ::add_spawn_function, ::estate_ai_setup );
array_thread( getentarray( "ai_estate", "script_noteworthy" ), ::add_spawn_function, ::estate_ai_think );
getent( "bh_node", "target" ) estate_struct_setup();
}
estate_main()
{
thread estate_camera_think();
flag_wait( "estate_go" );
wait 2;
foreach( ent in level.anim_ai[ "estate" ] )
ent ent_flag_set( "do_anim" );
array_thread( getentarray( "civ_estate_1", "script_noteworthy" ), ::delaythread, 6, ::spawn_ai, true );
flag_wait( "estate_done" );
wait 2;
array_thread( getentarray( "civ_estate_2", "script_noteworthy" ), ::delaythread, 0, ::spawn_ai, true );
camera_move( "camara_path_hostage_mid", 55 );
level.camera ResumeSpeed( 5 );
wait 3.5;
camera_move( "camara_path_hostage", 75, 0 );
}
estate_camera_think()
{
node = getvehiclenode( "camara_path_estate", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
if( level.start_point == "estate" )
{
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
}
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
estate_ai_setup()
{
if( isdefined( self.target ) && self.target == "bh_ai_node" )
self estate_bh_setup();
self ai_default_setup( "estate" );
node = self.anim_node;
switch( node.animation )
{
case "bh_rope_drop_le":
case "bh_6_drop":
self.ragdoll_immediate = true;
self.anim_speed = level.GLOBAL_ANIM_SPEED * .3;
self set_anim_time( node, .765 );
break;
case "roadkill_cover_spotter":
case "roadkill_cover_soldier":
case "roadkill_cover_active_soldier2":
if( isai( self ) )
self.a.pose = "crouch";
break;
}
}
estate_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "bh_rope_drop_le":
case "bh_6_drop":
self ai_wait_current_anim( .936 );
foreach( ent in level.anim_ai[ "estate" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "estate_done" );
break;
default:
self thread ai_idle( node.animation );
break;
}
}
estate_struct_setup()
{
helo = getent( self.target, "targetname" );
node = spawnstruct();
if( level.level_mode == "free" )
node.origin = helo GetTagOrigin( "TAG_DETACH" ) + (0,0,-10);
else
node.origin = helo GetTagOrigin( "TAG_DETACH" );
node.angles = helo GetTagangles( "TAG_DETACH" );
node.animation = "bh_6_drop";
node.targetname = "bh_ai_node";
if ( !isdefined( level.struct_class_names[ "targetname" ][ node.targetname ] ) )
level.struct_class_names[ "targetname" ][ node.targetname ] = [];
size = level.struct_class_names[ "targetname" ][ node.targetname ].size;
level.struct_class_names[ "targetname" ][ node.targetname ][ size ] = node;
node = spawnstruct();
node.origin = helo GetTagOrigin( "TAG_FASTROPE_LE" ) + (0,0,.5);;
node.angles = helo GetTagangles( "TAG_FASTROPE_LE" );
node.animation = "bh_rope_drop_le";
node.targetname = "bh_rope_node";
if ( !isdefined( level.struct_class_names[ "targetname" ][ node.targetname ] ) )
level.struct_class_names[ "targetname" ][ node.targetname ] = [];
size = level.struct_class_names[ "targetname" ][ node.targetname ].size;
level.struct_class_names[ "targetname" ][ node.targetname ][ size ] = node;
self.target = "bh_ai_node";
}
estate_bh_setup()
{
rope = spawn( "script_model", self.origin );
rope setmodel( "rope_test" );
rope.target = "bh_rope_node";
rope UseAnimTree( #animtree );
rope ent_flag_init( "do_anim" );
level.guys[ level.guys.size ] = rope;
level.rope = rope;
rope thread estate_ai_setup();
rope thread estate_ai_think();
}
/************************************************************************************************************/
/* HOSTAGE */
/************************************************************************************************************/
hostage_setup()
{
level.anim_ai[ "hostage" ] = [];
array_thread( getentarray( "ai_hostage", "script_noteworthy" ), ::add_spawn_function, ::hostage_ai_setup );
array_thread( getentarray( "ai_hostage", "script_noteworthy" ), ::add_spawn_function, ::hostage_ai_think );
}
hostage_main()
{
if( level.start_point == "hostage" )
level waittill( "cam_hostage" );
thread hostage_camera_think();
flag_wait( "hostage_go" );
foreach( ent in level.anim_ai[ "hostage" ] )
ent ent_flag_set( "do_anim" );
array_thread( getentarray( "civ_hostage_1", "script_noteworthy" ), ::delaythread, 5, ::spawn_ai, true );
flag_wait( "hostage_done" );
wait 1;
camera_move( "camara_path_trainer", 35 );
}
hostage_camera_think()
{
node = getvehiclenode( "camara_path_hostage", "targetname" );
level.camera thread vehicle_paths( node );
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
hostage_ai_setup()
{
self ai_default_setup( "hostage" );
node = self.anim_node;
switch( node.animation )
{
case "takedown_room1B_hostage":
self.anim_mode = "gravity";
if( isai( self ) )
self.a.pose = "crouch";
case "takedown_room1B_soldier":
self set_anim_time( node, .19 );
break;
case "hostage_chair_dive":
self.anim_mode = "gravity";//zonly_physics, nophysics, none gravity
break;
}
}
hostage_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "takedown_room1B_hostage":
case "takedown_room1B_soldier":
self thread hostage_pose( node.animation );
self ai_wait_current_anim( .74 );
foreach( ent in level.anim_ai[ "hostage" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "hostage_done" );
break;
case "hostage_chair_dive":
self thread hostage_dive( node.animation );
break;
default:
self thread hostage_chair( node.animation );
break;
}
}
hostage_pose( animation )
{
self endon( "death" );
if( !isai( self ) )
return;
self ai_wait_current_anim( .39 );
switch ( animation )
{
case "takedown_room1B_hostage":
self.a.pose = "prone";
break;
case "takedown_room1B_soldier":
self.a.pose = "crouch";
break;
}
}
hostage_chair( animation )
{
self endon( "death" );
self endon( "do_anim" );
self.current_anim = getanim_generic( animation );
self thread ai_current_anim_stop();
self ai_next_anim( %hostage_chair_twitch2 );
self ai_next_anim( %hostage_chair_twitch );
self ai_next_anim( %hostage_chair_idle );
}
hostage_dive( animation )
{
self endon( "death" );
self endon( "do_anim" );
self.current_anim = getanim_generic( animation );
self thread ai_current_anim_stop();
self ai_next_anim( %hostage_chair_ground_idle );
if( isai( self ) )
self.a.pose = "prone";
self ai_next_anim( %hostage_chair_ground_idle );
self ai_next_anim( %hostage_chair_ground_idle );
self ai_next_anim( %hostage_chair_ground_idle );
}
/************************************************************************************************************/
/* TRAINER */
/************************************************************************************************************/
trainer_setup()
{
level.anim_ai[ "trainer" ] = [];
array_thread( getentarray( "ai_trainer", "script_noteworthy" ), ::add_spawn_function, ::trainer_ai_setup );
array_thread( getentarray( "ai_trainer", "script_noteworthy" ), ::add_spawn_function, ::trainer_ai_think );
}
trainer_main()
{
thread trainer_camera_think();
flag_wait( "trainer_go" );
wait 2.5;
foreach( ent in level.anim_ai[ "trainer" ] )
ent ent_flag_set( "do_anim" );
flag_wait( "trainer_done" );
array_thread( getentarray( "civ_trainer_1", "script_noteworthy" ), ::delaythread, 0, ::spawn_ai, true );
wait 2;
camera_move( "camara_path_arcadia" );
}
trainer_camera_think()
{
node = getvehiclenode( "camara_path_trainer", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
if( level.start_point == "trainer" )
{
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
}
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
trainer_ai_setup()
{
self ai_default_setup( "trainer" );
node = self.anim_node;
switch( node.animation )
{
case "training_pushups_guy1":
self.gun_remove = true;
self gun_remove();
self.grenadeweapon = "fraggrenade";
self.grenadeammo = 0;
self set_anim_time( node, .93 );
break;
case "parabolic_leaning_guy_idle_training":
self.grenadeweapon = "fraggrenade";
self.grenadeammo = 0;
break;
case "training_intro_translator_end":
self.gun_remove = true;
self gun_remove();
case "training_intro_trainee_1_end":
case "training_intro_foley_end":
self set_anim_time( node, .25 );
break;
}
}
trainer_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "training_intro_trainee_1_end":
case "training_intro_translator_end":
case "training_intro_foley_end":
self ai_wait_current_anim( .50 );
foreach( ent in level.anim_ai[ "trainer" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "trainer_done" );
break;
default:
self thread ai_idle( node.animation );
break;
}
}
/************************************************************************************************************/
/* ARCADIA */
/************************************************************************************************************/
arcadia_setup()
{
level.anim_ai[ "arcadia" ] = [];
array_thread( getentarray( "ai_arcadia", "script_noteworthy" ), ::add_spawn_function, ::arcadia_ai_setup );
array_thread( getentarray( "ai_arcadia", "script_noteworthy" ), ::add_spawn_function, ::arcadia_ai_think );
}
arcadia_main()
{
thread arcadia_camera_think();
flag_wait( "arcadia_go" );
wait 2;
foreach( ent in level.anim_ai[ "arcadia" ] )
ent ent_flag_set( "do_anim" );
array_thread( getentarray( "civ_arcadia_1", "script_noteworthy" ), ::delaythread, 2.5, ::spawn_ai, true );
flag_wait( "arcadia_done" );
wait 1;
level.black FadeOverTime( 3 );
level.black.alpha = 1;
}
arcadia_camera_think()
{
node = getvehiclenode( "camara_path_arcadia", "targetname" );
level.camera vehicle_teleport( node.origin, node.angles );
level.camera thread vehicle_paths( node );
if( level.start_point == "arcadia" )
{
level.camera vehicle_teleport( node.origin, node.angles );
level.camera attachpath( node );
level.camera vehicle_setspeedimmediate( 0, 1000, 1000 );
}
level.camera ResumeSpeed( .5 );
level.camera waittill( "reached_end_node" );
}
arcadia_ai_setup()
{
switch( self.animation )
{
case "coup_guard2_jeera":
self.animtime = .35;
self.animation = "coup_guard2_jeera";
break;
case "coup_guard2_jeerb":
self.animtime = .05;
self.animation = "coup_guard2_jeera";
break;
case "coup_guard2_jeerc":
self.animtime = .85;
self.animation = "coup_guard2_jeera";
break;
case "coup_guard1_jeer":
self.animtime = .6;
self.animation = "coup_guard2_jeera";
break;
}
self ai_default_setup( "arcadia" );
node = self.anim_node;
switch( self.animation )
{
case "village_interrogationA_Price":
case "village_interrogationA_Zak":
self.gun_remove = true;
self gun_remove();
self set_anim_time( node, .677 );
self.anim_speed = level.GLOBAL_ANIM_SPEED * .5;
break;
default:
self set_anim_time( node, self.animtime );
break;
}
}
arcadia_ai_think()
{
self endon( "panic_button" );
self endon( "death" );
while( !self ent_flag_exist( "do_anim" ) )
wait .05;
self ent_flag_wait( "do_anim" );
node = self.anim_node;
self _setanim( getanim_generic( node.animation ), 1, 0, self.anim_speed );
switch( node.animation )
{
case "village_interrogationA_Zak":
case "village_interrogationA_Price":
self thread arcadia_pose( node.animation );
self ai_wait_current_anim( .97 );
foreach( ent in level.anim_ai[ "arcadia" ] )
ent ent_flag_clear( "do_anim" );
flag_set( "arcadia_done" );
break;
default:
self thread ai_idle( node.animation );
break;
}
}
arcadia_pose( animation )
{
self endon( "panic_button" );
self endon( "death" );
if( !isai( self ) )
return;
switch( animation )
{
case "village_interrogationA_Zak":
self ai_wait_current_anim( .75 );
self.ragdoll_immediate = true;
break;
case "village_interrogationA_Price":
self ai_wait_current_anim( .78 );
self.a.pose = "crouch";
break;
}
}
/************************************************************************************************************/
/* BLACK CREDITS */
/************************************************************************************************************/
black_main()
{
thread maps\_credits::playCredits();
wait 263 - 6;
thread music_stop( 4 );
wait 6;
nextmission();
level waittill( "never" );
}
/************************************************************************************************************/
/* MUSEUM FREE ROAM */
/************************************************************************************************************/
museum_main()
{
// black screen while we do things in the background
blackscreen_start();
flag_wait( "museum_ready" );
// room 1 guys spawn initially
room1trig = GetEnt( "room1", "script_noteworthy" );
room1trig spawn_museum_dudes();
thread maps\_introscreen::char_museum_intro();
set_console_status();
if( level.Console )
{
if( level.ps3 )
wait 9.0;
if( level.xenon )
wait 6.0;
}
else
{
wait 2;
}
array_call( level.players, ::freezecontrols, false );
blackscreen_fadeout( 1.5 );
level waittill( "never" );
}
museum_room1_anim_go()
{
level notify( "new_room_anim_go" );
add_wait( ::flag_wait, "af_caves_go" );
add_func( ::do_anim, "af_caves" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
add_wait( ::flag_wait, "dc_burning_go" );
add_func( ::do_anim, "dc_burning" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
add_wait( ::flag_wait, "airport_go" );
add_func( ::do_anim, "airport" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
add_wait( ::flag_wait, "cliffhanger_go" );
add_func( ::do_anim, "cliffhanger" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
add_wait( ::flag_wait, "favela_go" );
add_func( ::do_anim, "favela" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
}
museum_room2_anim_go()
{
level notify( "new_room_anim_go" );
add_wait( ::flag_wait, "oilrig_go" );
add_func( ::do_anim, "oilrig" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
add_wait( ::flag_wait, "estate_go" );
add_func( ::do_anim, "estate" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
add_wait( ::flag_wait, "hostage_go" );
add_func( ::do_anim, "hostage" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
add_wait( ::flag_wait, "arcadia_go" );
add_func( ::do_anim, "arcadia" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
add_wait( ::flag_wait, "trainer_go" );
add_func( ::do_anim, "trainer" );
level add_abort( ::waittill_msg, "new_room_anim_go" );
thread do_wait();
}
/************************************************************************************************************/
/* START POINTS */
/************************************************************************************************************/
start_common()
{
SetSavedDvar( "hud_drawHUD", "0" );
SetSavedDvar( "ammoCounterHide", "1" );
SetSavedDvar( "actionSlotsHide", "1" );
SetSavedDvar( "compass", "0" );
setsaveddvar( "g_friendlyNameDist", "0" );
setsaveddvar( "g_enteqDist", "0" );
trigger_off( "free_roam_look_ats", "targetname" );
sidebar = create_client_overlay_custom_size( "credits_side_bar", .45, 600, 480 );
sidebar.alignX = "left";
sidebar.horzAlign = "left";
sidebar.x = -280;
level.black = create_client_overlay( "black", 1 );
if( level.level_mode != "credits_1" )
{
player_lerp_eq();
thread music_loop( "af_chase_ending_credits" , 122, 1 );
}
else
level.black_overlay delaycall( .5, ::destroy );
level.player allowcrouch( false );
level.player allowprone( false );
level.player TakeAllWeapons();
add_global_spawn_function( "axis", ::museum_ai_think );
add_global_spawn_function( "allies", ::museum_ai_think );
add_global_spawn_function( "neutral", ::museum_ai_think );
level.camera = spawn_vehicle_from_targetname_and_drive( "credits_camera" );
level.player playerlinkto( level.camera, undefined, 1, 0,0,0,0,0 );
level.player delaycall( .1, ::freezecontrols, true );
noself_delaycall( 1, ::SetSavedDvar, "cg_fov", 45 );
spawntrigs = GetEntArray( "spawntrig", "targetname" );
array_thread( spawntrigs, ::spawner_trig_think );
ai_anim_setups();
thread end_credits();
}
player_lerp_eq()
{
level.player SetEqLerp( .05, level.eq_main_track );
AmbientStop( .05 );
thread maps\_ambient::use_eq_settings( "fadeall_but_music", level.eq_mix_track );
thread maps\_ambient::blend_to_eq_track( level.eq_mix_track , .05 );
}
ai_anim_setups()
{
array_thread( getentarray( "civ_talkers", "script_noteworthy" ), ::add_spawn_function, ::civ_talkers );
array_thread( getentarray( "room1", "targetname" ), ::set_diarama_ai );
array_thread( getentarray( "room2", "targetname" ), ::set_diarama_ai );
array_thread( getentarray( "civilians", "targetname" ), ::set_civilian_ai );
array_thread( getentarray( "civilians", "targetname" ), ::add_spawn_function, ::delete_civ_on_goal );
array_thread( getentarray( "civ_talkers", "script_noteworthy" ), ::set_civilian_ai );
afcaves_setup();
dcburning_setup();
airport_setup();
cliffhanger_setup();
favela_setup();
oilrig_setup();
estate_setup();
hostage_setup();
trainer_setup();
arcadia_setup();
thread flag_set_delayed( "museum_ready", .05 );
}
start_free()
{
precachestring( &"CHAR_MUSEUM_LINE1" );
precachestring( &"CHAR_MUSEUM_LINE3" );
precachestring( &"CHAR_MUSEUM_LINE4" );
add_global_spawn_function( "axis", ::museum_ai_think );
add_global_spawn_function( "allies", ::museum_ai_think );
add_global_spawn_function( "neutral", ::museum_ai_think );
array_thread( level.players, ::museum_player_setup );
spawntrigs = GetEntArray( "spawntrig", "targetname" );
array_thread( spawntrigs, ::spawner_trig_think );
ai_anim_setups();
array_thread( getentarray( "panic_button", "targetname" ), ::panic_button );
}
start_afcaves()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room1trig = GetEnt( "room1", "script_noteworthy" );
room1trig spawn_museum_dudes();
}
start_dcburning()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room1trig = GetEnt( "room1", "script_noteworthy" );
room1trig spawn_museum_dudes();
}
start_airport()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room1trig = GetEnt( "room1", "script_noteworthy" );
room1trig spawn_museum_dudes();
array_thread( getentarray( "room1_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_cliffhanger()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room1trig = GetEnt( "room1", "script_noteworthy" );
room1trig spawn_museum_dudes();
array_thread( getentarray( "room1_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_favela()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room1trig = GetEnt( "room1", "script_noteworthy" );
room1trig spawn_museum_dudes();
array_thread( getentarray( "room1_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_hallway1()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room1trig = GetEnt( "room1", "script_noteworthy" );
room1trig spawn_museum_dudes();
array_thread( getentarray( "room1_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_vehicles()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
array_thread( getentarray( "room3_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_hallway2()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
}
start_oilrig()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room2trig = GetEnt( "room2", "script_noteworthy" );
room2trig spawn_museum_dudes();
array_thread( getentarray( "room2_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_estate()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room2trig = GetEnt( "room2", "script_noteworthy" );
room2trig spawn_museum_dudes();
array_thread( getentarray( "room2_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_hostage()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room2trig = GetEnt( "room2", "script_noteworthy" );
room2trig spawn_museum_dudes();
array_thread( getentarray( "room2_civ_talkers", "targetname" ), ::spawn_ai, true );
camera_move( "camara_path_hostage_mid", 500, 0, .05 );
level.camera ResumeSpeed( 5 );
wait 3.5;
camera_move( "camara_path_hostage", 75, 0 );
level notify( "cam_hostage" );
}
start_trainer()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room2trig = GetEnt( "room2", "script_noteworthy" );
room2trig spawn_museum_dudes();
array_thread( getentarray( "room2_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_arcadia()
{
start_common();
flag_wait( "museum_ready" );
wait .05;
room2trig = GetEnt( "room2", "script_noteworthy" );
room2trig spawn_museum_dudes();
array_thread( getentarray( "room2_civ_talkers", "targetname" ), ::spawn_ai, true );
}
start_black()
{
level.black = create_client_overlay( "black", 1 );
thread music_loop( "af_chase_ending_credits" , 122, 1 );
level.player SetEqLerp( .05, level.eq_main_track );
AmbientStop( .05 );
thread maps\_ambient::use_eq_settings( "fadeall_but_music", level.eq_mix_track );
thread maps\_ambient::blend_to_eq_track( level.eq_mix_track , .05 );
level.player allowcrouch( false );
level.player allowprone( false );
level.player TakeAllWeapons();
level.player DisableWeapons();
level.player FreezeControls( true );
}
end_credits()
{
level.credits_speed = 25.5;
thread maps\_credits::playCredits();
if( level.level_mode == "credits_1" )
wait 3.5;
thread fade_from_black();
wait 290; //-> magic timing - do not change...change credit speed instead
wait 28; //additional time after credits changes
level.credits_speed = 4;
flag_set( "atvi_credits_go" );
wait 20;
thread music_stop( 4 );
wait 5;
if( level.level_mode == "credits_1" )
flag_set( "af_chase_nextmission" );
else
nextmission();
}
fade_from_black()
{
wait 9;
flag_set( "fade_from_black" );
wait 1;
level.black FadeOverTime( 2 );
level.black.alpha = 0;
}