iw6-scripts/maps/skyway_rooftop_combat.gsc
2024-02-13 13:20:49 +01:00

460 lines
15 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
section_flag_inits()
{
common_scripts\utility::flag_init( "flag_rt2_combat_start" );
common_scripts\utility::flag_init( "flag_rt2_combat_fin" );
common_scripts\utility::flag_init( "flag_rt2_combat_retreat" );
common_scripts\utility::flag_init( "flag_rt3_combat_mid" );
common_scripts\utility::flag_init( "flag_rt3_combat_end" );
common_scripts\utility::flag_init( "flag_rt3_combat_fin" );
common_scripts\utility::flag_init( "flag_rooftops_fight_end" );
common_scripts\utility::flag_init( "flag_rooftops_combat_done" );
common_scripts\utility::flag_init( "flag_rooftops_end" );
common_scripts\utility::flag_init( "flag_loco_ready" );
common_scripts\utility::flag_init( "flag_rt3_ally_at_end" );
}
section_precache()
{
}
section_post_inits()
{
thread setup_spawners();
}
start()
{
iprintln( "rooftop combat" );
var_0 = getent( "rt_combat_start_player", "targetname" );
level.player setorigin( var_0.origin );
level.player setplayerangles( var_0.angles );
var_1 = getent( "rt_helo_crash_ally", "targetname" );
level._ally forceteleport( var_1.origin, var_1.angles );
level._ally thread maps\_utility::enable_careful();
level._ally thread maps\_utility::set_grenadeammo( 0 );
level._ally thread maps\_utility::set_force_color( "r" );
getent( "rt2_color_start", "targetname" ) notify( "trigger" );
thread maps\skyway_fx::fx_turnon_loco_exterior_lights();
common_scripts\utility::flag_set( "flag_helo_end" );
var_2 = [ "train_rt0", "train_rt1", "train_rt2" ];
foreach ( var_4 in var_2 )
common_scripts\utility::array_call( level._train.cars[var_4].trigs, ::setmovingplatformtrigger );
}
main()
{
var_0 = [ "train_rt3" ];
foreach ( var_2 in var_0 )
common_scripts\utility::array_call( level._train.cars[var_2].trigs, ::setmovingplatformtrigger );
thread hesh_killer_tracker_enabler();
rt_combat();
rt_run();
maps\_utility::clearthreatbias( "player", "axis" );
if ( isdefined( level.old_goalradius ) )
level.default_goalradius = level.old_goalradius;
}
hesh_killer_tracker_enabler()
{
level._ally flag_set_near_ent( "flag_killer_tracker", level._train.cars["train_rt2"].sus_b, 1024 );
level.killer_tracker = 0;
}
rt_combat()
{
common_scripts\utility::flag_wait( "flag_rt1_combat_start" );
thread rt_achievement_grapple_kill( 2, "rt_grapple_kill" );
maps\_utility::array_spawn_targetname( "rt2_opfor_start" );
thread rt_combat_fic();
common_scripts\utility::flag_wait( "flag_rt2_combat_start" );
setthreatbias( "axis", "player", 250 );
wait 0.05;
maps\_utility::array_spawn_targetname( "rt2_opfor_rope" );
maps\_utility::flood_spawn( getentarray( "rt2_opfor", "targetname" ) );
maps\skyway_util::delay_retreat( "rt_opfor", maps\skyway_util::kt_time( 60 ), -4, "flag_rt2_combat_retreat", [ "rt2_color_fin", "rt2_color_end" ], 1 );
getent( "rt3_color_rt2", "targetname" ) notify( "trigger" );
maps\_spawner::killspawner( 320 );
maps\_utility::flood_spawn( getentarray( "rt3_opfor", "targetname" ) );
wait 1;
maps\skyway_util::delay_retreat( "rt_opfor", maps\skyway_util::kt_time( 90 ), 2, "flag_rt3_combat_fin", [ "rt3_color_mid", "rt3_color_start" ], 1 );
level._ally thread flag_set_near_ent( "flag_rt3_ally_at_end", level._train.cars["train_rt3"].sus_f, 420 );
maps\_utility::flagwaitthread( "flag_rooftops_combat_done", common_scripts\utility::flag_set, "flag_rooftops_fight_end" );
maps\skyway_util::delay_retreat( "rt_opfor", maps\skyway_util::kt_time( 75 ), 0, "flag_rooftops_fight_end" );
var_0 = getent( "rt3_color_end", "targetname" );
if ( isdefined( var_0 ) )
var_0 delete();
}
rt_follow_path_and_die( var_0 )
{
self endon( "death" );
if ( distance( self.origin, level._train.cars["train_rt3"].sus_f.origin ) > 800 )
self kill();
maps\_utility::follow_path( var_0 );
self kill();
}
rt_achievement_grapple_kill( var_0, var_1 )
{
level endon( "stop_achievement_grapple_kill" );
if ( !isdefined( level.kill_count[var_1] ) )
level.kill_count[var_1] = 0;
while ( level.kill_count[var_1] < var_0 )
level waittill( var_1 );
level.player maps\_utility::player_giveachievement_wrapper( "LEVEL_18A" );
}
rt_run()
{
thread rt_run_fic();
level notify( "notify_stop_ambient_rogs" );
level._ally thread maps\_utility::disable_careful();
level._ally thread maps\_utility::disable_ai_color();
if ( !common_scripts\utility::flag( "flag_rt3_ally_at_end" ) )
level._ally thread maps\_utility::follow_path( getnode( "rt3_node_run_center", "targetname" ) );
else
level._ally thread maps\_utility::follow_path( getnode( "rt3_node_run_sides", "targetname" ) );
if ( !issubstr( level._ally.weapon, "k7" ) )
level._ally maps\_utility::place_weapon_on( "k7+eotechsmg_sp", "right" );
common_scripts\utility::flag_wait( "flag_rooftops_end" );
}
rt_run_cleanup_proc()
{
common_scripts\utility::flag_wait( "flag_rooftops_combat_done" );
while ( level.player.car != "train_loco" )
wait 0.05;
level notify( "stop_achievement_grapple_kill" );
maps\_utility::clearthreatbias( "axis", "player" );
var_0 = getnode( "rt3_node_hide", "targetname" );
var_1 = getaiarray( "axis" );
var_1 = common_scripts\utility::array_remove_array( var_1, common_scripts\utility::array_add( maps\_utility::get_ai_group_ai( "rt_helo_opfor" ), level._boss ) );
if ( isdefined( var_1 ) && isarray( var_1 ) && var_1.size > 0 )
{
common_scripts\utility::array_thread( var_1, maps\_utility::set_ignoreall, 1 );
common_scripts\utility::array_thread( var_1, ::rt_follow_path_and_die, var_0 );
}
if ( distance2d( level._ally.origin, level._train.cars["train_rt3"].sus_f.origin ) < 1500 )
return;
level._ally unlink();
level._ally teleportentityrelative( level._ally, getent( "rt_tele_end_run_ally", "targetname" ) );
level._ally dontinterpolate();
if ( !common_scripts\utility::flag( "flag_loco_started" ) )
level._ally thread maps\_utility::follow_path( getnode( "loco_breach_ally_cover_node", "targetname" ) );
}
rt_combat_fic()
{
if ( !common_scripts\utility::flag( "flag_helo_end" ) )
level._ally maps\_utility::smart_dialogue( "skyway_hsh_whereareyougoing" );
else
{
wait 3;
level._ally maps\_utility::smart_dialogue( "skyway_hsh_theyreropingupthe" );
}
common_scripts\utility::flag_wait( "flag_rt2_combat_retreat" );
wait 1;
level._ally maps\_utility::smart_dialogue( "skyway_hsh_wegottakeepmoving" );
}
rt_run_fic()
{
wait 0.25;
var_0 = [ "skyway_hsh_cleargettothe", "skyway_hsh_clearletsgetthis" ];
level._ally maps\_utility::smart_dialogue( var_0[randomint( var_0.size )] );
common_scripts\utility::flag_wait( "flag_rooftops_end" );
if ( !common_scripts\utility::flag( "flag_rt3_ally_at_end" ) )
level._ally maps\_utility::smart_dialogue( "skyway_hsh_wereatthelast" );
level._ally maps\_utility::smart_dialogue( "skyway_hsh_rorkespinnedheknows" );
common_scripts\utility::flag_set( "flag_loco_ready" );
}
setup_spawners()
{
maps\_utility::array_spawn_function_targetname( "rt2_opfor", maps\skyway_util::spawnfunc_death_override );
maps\_utility::array_spawn_function_targetname( "rt2_opfor_start", maps\skyway_util::spawnfunc_death_override );
maps\_utility::array_spawn_function_targetname( "rt2_opfor_rope", maps\skyway_util::spawnfunc_death_override );
maps\_utility::array_spawn_function_targetname( "rt3_opfor", maps\skyway_util::spawnfunc_death_override );
maps\_utility::array_spawn_function_targetname( "rt3_opfor_rope_l", maps\skyway_util::spawnfunc_death_override );
maps\_utility::array_spawn_function_targetname( "rt3_opfor_rope_r", maps\skyway_util::spawnfunc_death_override );
maps\_utility::array_spawn_function_targetname( "rt2_opfor", ::opfor_infil );
maps\_utility::array_spawn_function_targetname( "rt2_opfor", ::rt_spawn_node_check, "flag_rt2_combat_retreat", "rt3_node_mid" );
maps\_utility::array_spawn_function_targetname( "rt2_opfor_start", ::opfor_rope, level._train.cars["train_rt2"].body, undefined, "rt_grapple_kill" );
maps\_utility::array_spawn_function_targetname( "rt2_opfor_rope", ::opfor_rope, level._train.cars["train_rt2"].body, undefined, "rt_grapple_kill" );
maps\_utility::array_spawn_function_targetname( "rt3_opfor", ::opfor_infil );
maps\_utility::array_spawn_function_targetname( "rt3_opfor", ::rt_spawn_node_check, [ "flag_rt3_combat_fin", "flag_rt3_combat_end", "flag_rt3_combat_mid" ], [ "rt3_node_fin", "rt3_node_end", "rt3_node_mid" ] );
maps\_utility::array_spawn_function_targetname( "rt3_opfor_rope_l", ::opfor_rope, getent( "rt3_anim_grapple", "targetname" ), "tag_origin" );
maps\_utility::array_spawn_function_targetname( "rt3_opfor_rope_r", ::opfor_rope, getent( "rt3_anim_grapple", "targetname" ), "tag_origin" );
}
rt_spawn_node_check( var_0, var_1 )
{
self endon( "death" );
if ( isdefined( self.script_wtf ) )
self waittill( "infil_done" );
if ( !isarray( var_0 ) )
var_0 = [ var_0 ];
if ( !isarray( var_1 ) )
var_1 = [ var_1 ];
var_2 = int( max( 0, min( var_0.size, var_1.size ) - 1 ) );
for ( var_3 = var_2; var_3 >= 0; var_3-- )
{
if ( isdefined( var_0[var_3] ) && common_scripts\utility::flag( var_0[var_3] ) )
{
thread maps\_utility::follow_path( getnode( var_1[var_3], "targetname" ) );
break;
}
}
}
opfor_rope( var_0, var_1, var_2 )
{
self endon( "death" );
self endon( "rope_death" );
if ( !isdefined( self.script_index ) )
return;
if ( !isdefined( var_1 ) )
var_1 = "j_spineupper";
thread rt_inc_kill_count( var_2 );
maps\_utility::set_ignoreall( 1 );
var_3 = self.newenemyreactiondistsq;
self.newenemyreactiondistsq = 0;
wait 0.1;
self.animname = "sw_opfor_grapple_" + maps\_utility::string( self.script_index );
self linkto( var_0, var_1, ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_4 = maps\_utility::spawn_anim_model( "sw_rope_grapple_" + maps\_utility::string( self.script_index ) );
var_4 linkto( var_0, var_1, ( 0, 0, 0 ), ( 0, 0, 0 ) );
maps\_utility::set_deathanim( "sw_grapple_up_death" );
thread rt_falling_death();
var_0 thread maps\_anim::anim_single_solo( var_4, "sw_grapple_up", var_1 );
var_0 maps\_anim::anim_single_solo( self, "sw_grapple_up", var_1, 0.1 );
if ( isdefined( var_2 ) )
{
self notify( var_2 );
level notify( var_2 );
}
maps\_utility::clear_deathanim();
self notify( "no_falling_death" );
self unlink();
wait 1;
maps\_utility::set_ignoreall( 0 );
self.newenemyreactiondistsq = var_3;
}
opfor_infil()
{
self endon( "death" );
if ( !isdefined( self.script_wtf ) )
return;
maps\_utility::set_ignoreall( 1 );
var_0 = self.newenemyreactiondistsq;
self.newenemyreactiondistsq = 0;
var_1 = get_entry( getentarray( self.script_wtf, "targetname" ) );
var_1 maps\_utility::assign_animtree( var_1.script_namenumber );
thread infil_entry_lock( var_1 );
wait 0.1;
var_2 = var_1.script_namenumber + "_opfor";
self.allowdeath = 1;
self linkto( var_1 );
var_1 thread maps\_anim::anim_single_solo( var_1, "sw_entry_u" );
var_1 maps\_anim::anim_single_solo( self, "sw_entry_u", undefined, 0.1, var_2 );
self unlink();
self notify( "infil_done" );
wait 1;
maps\_utility::set_ignoreall( 0 );
self.newenemyreactiondistsq = var_0;
}
rt_falling_death()
{
self endon( "no_falling_death" );
self.allowdeath = 1;
self waittill( "death" );
self unlink();
}
rt_inc_kill_count( var_0 )
{
if ( !isdefined( var_0 ) )
return;
self endon( var_0 );
self waittill( "death" );
level.kill_count[var_0] = level.kill_count[var_0] + 1;
level notify( var_0 );
}
get_entry( var_0 )
{
self endon( "death" );
for (;;)
{
var_1 = var_0[randomint( var_0.size )];
if ( randomint( 100 ) < var_1.script_index && !maps\skyway_util::istrue( var_1.in_use ) )
return var_1;
wait 0.05;
}
}
infil_entry_lock( var_0 )
{
var_0.in_use = 1;
common_scripts\utility::waittill_any( "death", "infil_done" );
wait 0.5;
var_0.in_use = undefined;
}
flag_set_near_ent( var_0, var_1, var_2 )
{
level endon( var_0 );
self endon( "stop_dist_flag" );
if ( !isdefined( var_2 ) )
var_2 = 300;
while ( distance( var_1.origin, self.origin ) > var_2 )
wait 0.05;
common_scripts\utility::flag_set( var_0 );
}
rt_brief_reprieve( var_0, var_1, var_2 )
{
if ( !isdefined( var_0 ) )
var_0 = [ 0, 36000 ];
if ( !isarray( var_0 ) )
var_0 = [ 0, var_0 ];
if ( !isdefined( var_1 ) )
var_1 = 0;
if ( !isdefined( var_2 ) )
{
common_scripts\utility::flag_init( "flag_rt_brief_reprieve" );
var_2 = "flag_rt_brief_reprieve";
}
var_0 = var_0[0] + randomfloat( var_0[1] - var_0[0] );
while ( var_0[1] > 0 && !common_scripts\utility::flag( var_2 ) && !maps\_utility::players_within_distance( var_1, self.origin ) )
{
var_0 = var_0 - 0.05;
wait 0.05;
}
}
ignore_run( var_0, var_1 )
{
self endon( "death" );
self notify( "stop_ignore_run" );
self endon( "stop_ignore_run" );
if ( !isdefined( var_0 ) )
var_0 = 1.0;
self.old = [];
self.old["react_dist"] = self.newenemyreactiondistsq;
self.old["color"] = maps\_utility::get_force_color();
self.old["moveplaybackrate"] = self.moveplaybackrate;
self.old["grenade_aware"] = self.grenadeawareness;
thread maps\_utility::set_moveplaybackrate( var_0, 0.25 );
maps\_utility::set_ignoreall( 1 );
self pushplayer( 1 );
self.a.disablepain = 1;
self.allowpain = 0;
self.disablebulletwhizbyreaction = 1;
self.disablefriendlyfirereaction = 1;
self.disableplayeradsloscheck = 1;
self.dodangerreact = 0;
self.dontavoidplayer = 1;
self.dontmelee = 1;
self.flashbangimmunity = 1;
self.grenadeawareness = 0;
self.ignoreexplosionevents = 1;
self.ignorerandombulletdamage = 1;
self.ignoresuppression = 1;
self.newenemyreactiondistsq = 0;
if ( isdefined( var_1 ) )
{
self waittill( var_1 );
stop_ignore_run();
}
}
stop_ignore_run()
{
self endon( "death" );
self notify( "stop_ignore_run" );
if ( !isdefined( self.old ) )
{
self.old = [];
self.old["react_dist"] = 262144;
self.old["color"] = "r";
self.old["moveplaybackrate"] = 1;
self.old["grenade_aware"] = 0.9;
}
maps\_utility::set_ignoreall( 0 );
self pushplayer( 0 );
self.a.disablepain = 0;
self.allowpain = 1;
self.disablebulletwhizbyreaction = undefined;
self.disablefriendlyfirereaction = undefined;
self.disableplayeradsloscheck = 0;
self.dodangerreact = 1;
self.dontavoidplayer = 0;
self.dontmelee = undefined;
self.flashbangimmunity = undefined;
self.grenadeawareness = self.old["grenade_aware"];
self.ignoreexplosionevents = 0;
self.ignorerandombulletdamage = 0;
self.ignoresuppression = 0;
self.newenemyreactiondistsq = self.old["react_dist"];
maps\_utility::set_moveplaybackrate( self.old["moveplaybackrate"] );
maps\_utility::set_force_color( self.old["color"] );
}