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

1341 lines
41 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
section_main()
{
maps\_utility::add_hint_string( "up_hint", &"LOKI_HINT_UP", ::no_hint );
maps\_utility::add_hint_string( "down_hint", &"LOKI_HINT_DOWN", ::no_hint_down );
}
section_precache()
{
precacheshader( "green_block" );
}
section_flag_inits()
{
common_scripts\utility::flag_init( "cool_spawn_finished" );
common_scripts\utility::flag_init( "combat_one_wave2_started" );
common_scripts\utility::flag_init( "door_traversal_done" );
common_scripts\utility::flag_init( "stop_movement_hint" );
}
combat_one_start()
{
maps\loki_util::player_move_to_checkpoint_start( "combat_one" );
maps\loki_util::spawn_allies();
thread maps\loki_audio::sfx_set_combat_amb();
thread maps\loki_infil::setup_fuel_leak_lighting();
thread maps\loki_util::player_boundaries_on();
level.accuracy_ally = 0.6;
level.accuracy_enemy = 1.4;
level.allies[0].fixednode = 1;
level.allies[1].baseaccuracy = level.accuracy_ally;
level.allies[2].fixednode = 1;
level.allies[2].baseaccuracy = level.accuracy_ally;
var_0 = getnode( "cover_one_ally0_node1", "targetname" );
level.allies[0] setgoalnode( var_0 );
var_0 = getnode( "cover_one_ally1_node1", "targetname" );
level.allies[1] setgoalnode( var_0 );
var_0 = getnode( "cover_one_ally2_node1", "targetname" );
level.allies[2] setgoalnode( var_0 );
maps\loki_infil::create_redshirts();
foreach ( var_2 in level.redshirts )
{
var_0 = getnode( var_2.first_goal_node, "targetname" );
var_2 forceteleport( var_0.origin, var_0.angles );
}
level thread spawn_wave1_enemies( 1 );
level thread firstframe_combat_one_door();
}
combat_one()
{
thread maps\loki_audio::sfx_set_combat_amb();
maps\_utility::battlechatter_on( "allies" );
level.activebreaks = 0;
level.grenadesplashing = 0;
var_0 = getentarray( "breakTile", "targetname" );
var_1 = getentarray( "breakTileEdge", "targetname" );
common_scripts\utility::array_thread( var_0, ::do_tile_single, var_0, var_1 );
level thread track_ai();
level thread trigger_wave2();
level thread trigger_wave3();
level thread unlink_door_traversal_nodes();
level thread unlink_final_exposed_nodes();
level thread track_fuel_leak_hit();
level thread capsule_ninja();
level thread instant_explosion();
setsaveddvar( "actor_spaceLightingOffset", -6 );
thread maps\loki_audio::sfx_loki_breathing_logic( 1 );
var_2 = getent( "combat_one_traversal1", "targetname" );
level.combat_one_wave_node = var_2;
var_3 = getentarray( "sniper_sat_solarpanel", "targetname" );
common_scripts\utility::array_thread( var_3, ::solarpanels_damage_think );
common_scripts\utility::array_thread( var_3, ::solarpanels_damage_think_instant );
common_scripts\utility::flag_wait( "combat_one_done" );
}
start_fuel_leak_fx( var_0, var_1, var_2, var_3 )
{
var_4 = common_scripts\utility::spawn_tag_origin();
var_4.targetname = "fuel_leak_tag";
var_4.script_noteworthy = "combat_one_cleanup";
var_4 thread start_fuel_leak_fx_main( var_0, var_1, var_2, var_3 );
return var_4;
}
start_fuel_leak_lighting()
{
var_0 = getentarray( "combat_one_light", "script_noteworthy" );
foreach ( var_2 in var_0 )
{
wait 8.5;
var_2 setlightradius( 540 );
var_2 setlightintensity( 8.0 );
}
}
start_fuel_leak_fx_main( var_0, var_1, var_2, var_3 )
{
self endon( "death" );
level endon( "explosion" );
if ( isdefined( var_1 ) )
{
var_4 = var_2;
var_5 = var_3;
}
else
{
var_4 = common_scripts\utility::getstruct( var_0, "targetname" ).origin;
var_5 = common_scripts\utility::getstruct( var_0, "targetname" ).angles;
}
self.origin = var_4;
self.angles = var_5;
self.is_on_fire = 0;
thread stop_fuel_leak_fx();
level thread start_fuel_leak_lighting();
earthquake( 0.15, 0.5, var_4, 1000 );
playfxontag( common_scripts\utility::getfx( "vfx_fuel_leak_zerog" ), self, "tag_origin" );
thread maps\loki_audio::sfx_gas_line_fuel_burst( self );
var_6 = 1;
foreach ( var_8 in level.bullet_caused_fuel_leaks )
{
if ( distance( var_8.origin, var_4 ) < 36 && var_8.is_on_fire )
{
maps\loki_util::jkuprint( "close!!! skipping long fuel leak" );
var_6 = 0;
wait 1;
break;
}
else
var_6 = 1;
}
if ( var_6 )
{
thread maps\loki_audio::sfx_gas_line_fuel_leak( self );
wait 5;
}
thread maps\loki_audio::sfx_gas_line_ignite( self );
self.is_on_fire = 1;
playfxontag( common_scripts\utility::getfx( "spc_fire_puff_light" ), self, "tag_origin" );
playfxontag( common_scripts\utility::getfx( "loki_fuel_ignite_fast" ), self, "tag_origin" );
stopfxontag( common_scripts\utility::getfx( "vfx_fuel_leak_zerog" ), self, "tag_origin" );
wait 0.5;
if ( isdefined( var_1 ) || var_0 == "fuel_explosion_spark_point2" )
thread maps\loki_audio::sfx_gas_line_fire_lp( self, 0 );
else if ( level.bullet_caused_fuel_leaks.size < 2 && var_0 == "fuel_explosion_spark_point0" )
thread maps\loki_audio::sfx_gas_line_fire_lp( self, 0 );
else
thread maps\loki_audio::sfx_gas_line_fire_lp( self, 1 );
playfxontag( common_scripts\utility::getfx( "vfx_fuel_fire_zerog_cglight" ), self, "tag_origin" );
playfxontag( common_scripts\utility::getfx( "spc_fire_puff_big_single_runner" ), self, "tag_origin" );
stopfxontag( common_scripts\utility::getfx( "spc_fire_puff_light" ), self, "tag_origin" );
}
stop_fuel_leak_fx()
{
thread stop_fuel_leak_fx_explosion();
self waittill( "death" );
maps\loki_util::jkuprint( "deleting leak fx" );
thread maps\loki_audio::sfx_gas_line_stop_sfx( self );
stopfxontag( common_scripts\utility::getfx( "vfx_fuel_leak_zerog" ), self, "tag_origin" );
common_scripts\utility::waitframe();
stopfxontag( common_scripts\utility::getfx( "electrical_sparks_zerog_runner" ), self, "tag_origin" );
common_scripts\utility::waitframe();
stopfxontag( common_scripts\utility::getfx( "vfx_fuel_fire_zerog_cglight" ), self, "tag_origin" );
common_scripts\utility::waitframe();
stopfxontag( common_scripts\utility::getfx( "loki_fuel_ignite_fast_runner" ), self, "tag_origin" );
common_scripts\utility::waitframe();
stopfxontag( common_scripts\utility::getfx( "spc_fire_puff_big_single_runner" ), self, "tag_origin" );
self delete();
}
stop_fuel_leak_fx_explosion()
{
level waittill( "explosion" );
self notify( "death" );
}
start_fuel_explosion_fx( var_0, var_1, var_2, var_3, var_4 )
{
var_5 = common_scripts\utility::getstruct( var_0, "targetname" );
earthquake( var_3, 0.75, var_5.origin, 1200 );
var_6 = maps\loki_util::create_rumble_ent( var_4, "combat_one_cleanup", 3 );
var_6 playrumbleonentity( "light_1s" );
if ( !isdefined( var_2 ) )
playfx( common_scripts\utility::getfx( var_1 ), var_5.origin );
else
playfx( common_scripts\utility::getfx( var_1 ), var_5.origin, var_2 );
}
test_lights()
{
var_0 = getent( "combat_one", "targetname" );
var_1 = maps\_vignette_util::vignette_actor_spawn( "deadbody", "deadbody" );
var_1 forceteleport( var_0.origin, var_1.angles + ( 0, 180, 0 ) );
var_1 thread maps\_space_ai::space_actor_lights();
var_0 maps\_anim::anim_loop_solo( var_1, "test_loop" );
}
movement_hints()
{
level.player endon( "death" );
thread maps\_utility::display_hint_timeout( "up_hint", 2.75 );
thread maps\_utility::display_hint_timeout( "down_hint", 2 );
wait 2;
for (;;)
{
if ( level.player secondaryoffhandbuttonpressed() )
{
var_0 = gettime();
while ( level.player secondaryoffhandbuttonpressed() )
{
if ( gettime() - var_0 > 500 )
{
common_scripts\utility::flag_set( "stop_movement_hint" );
return;
}
common_scripts\utility::waitframe();
}
}
common_scripts\utility::waitframe();
}
}
no_hint()
{
if ( !isalive( level.player ) )
return 1;
return 0;
}
no_hint_down()
{
if ( !isalive( level.player ) || common_scripts\utility::flag( "stop_movement_hint" ) )
return 1;
return 0;
}
move_explosion_buildup_rumble()
{
var_0 = maps\loki_util::create_rumble_ent( 1000, "combat_one_cleanup" );
var_0 playrumblelooponentity( "steady_rumble" );
while ( !common_scripts\utility::flag( "explosion" ) )
{
var_1 = distance( var_0.origin, level.player.origin );
if ( var_1 > 666 )
var_0.origin = var_0.origin + ( 0, 0, -7 );
else if ( distance( var_0.origin, level.player.origin ) < 200 )
{
}
else
{
maps\loki_util::jkuprint( "fast move" );
var_0.origin = var_0.origin + ( 0, 0, -17 );
}
var_0 linkto( level.player );
common_scripts\utility::waitframe();
}
var_0 delete();
}
instant_explosion()
{
level.player endon( "death" );
level endon( "explosion_started" );
var_0 = getent( "combat_one_door_instant", "targetname" );
var_0 waittill( "trigger" );
level notify( "explosion" );
level.combat_one_wave_node notify( "explosion" );
maps\loki_util::jkuprint( "CHEATER!!!!" );
level thread moving_cover_pre_tele( 1 );
}
moving_cover_pre_tele( var_0 )
{
level.player endon( "death" );
if ( !isdefined( var_0 ) )
var_0 = 0;
common_scripts\utility::flag_wait( "start_fuel_explosion" );
level notify( "explosion_started" );
thread maps\loki_audio::sfx_gas_line_explo_logic();
level.allies[0] notify( "start_fuel_explosion" );
thread maps\loki_fx::fx_fuel_explosion_pre_fx();
level thread move_explosion_buildup_rumble();
if ( !var_0 )
{
level thread maps\loki_moving_cover::firstframe_moving_cover();
wait 1.5;
}
else
maps\loki_moving_cover::firstframe_moving_cover( 1 );
var_1 = getent( "combat_one_explosion", "targetname" );
var_2 = maps\_utility::spawn_anim_model( "moving_cover_obj0" );
var_1 maps\_anim::anim_first_frame_solo( var_2, "explosion_part1" );
var_2 maps\loki_util::spawn_and_link_models_to_tags( "combat_one_cleanup", undefined, 1 );
level maps\_utility::delaythread( 0, ::start_fuel_explosion_fx, "fuel_explosion_point0", "fuel_explosion_zerog", undefined, 0.15, 800 );
level maps\_utility::delaythread( 0.6, ::start_fuel_explosion_fx, "fuel_explosion_point1", "fuel_explosion_zerog", undefined, 0.25, 600 );
level maps\_utility::delaythread( 1.0, ::start_fuel_explosion_fx, "fuel_explosion_point2", "fuel_explosion_zerog", undefined, 0.35, 400 );
level maps\_utility::delaythread( 1.4, ::start_fuel_explosion_fx, "fuel_explosion_point3", "fuel_explosion_zerog", undefined, 0.45, 200 );
common_scripts\utility::flag_set( "turn_off_creaks" );
if ( !var_0 )
level maps\_utility::delaythread( 0.75, ::explosion_anim, var_1, var_2 );
if ( !var_0 )
wait 0.6;
maps\_utility::radio_dialogue_clear_stack();
level thread maps\_utility::smart_radio_dialogue_interrupt( "loki_kgn_shit" );
if ( !var_0 )
wait 0.9;
level.player.og_health = level.player.health;
level.player.demigod = 1;
level.player playrumbleonentity( "light_1s" );
var_3 = common_scripts\utility::spawn_tag_origin();
var_4 = common_scripts\utility::spawn_tag_origin();
var_5 = common_scripts\utility::spawn_tag_origin();
var_3.origin = level.player.origin + ( 0, 0, 40 );
var_5.origin = level.player.origin;
var_3.angles = ( 0, 90, 0 );
var_5.angles = ( 0, 90, 0 );
var_5 linkto( var_3 );
var_3.angles = ( 330, 90, 0 );
var_4.origin = var_3.origin;
var_3 linkto( var_4 );
level.player playerlinktoblend( var_5, "tag_origin", 0.3, 0, 0 );
level.player hideviewmodel();
var_4 rotatevelocity( ( 175, 0, 0 ), 999, 0, 0 );
var_6 = bullettrace( level.player.origin, level.player.origin + ( 0, 0, 200 ), 0 );
var_7 = distance( level.player.origin, var_6["position"] );
maps\loki_util::jkuprint( "Distance above we can rotate you: " + var_7 );
var_4 movez( var_7, 0.65, 0, 0 );
level thread maps\loki_moving_cover::hit_panel( level.player, 0.65, 0.5, 2 );
level.player playrumbleonentity( "heavy_3s" );
if ( !var_0 )
wait 0.6;
level.player.demigod = 0;
level thread maps\loki_util::player_boundaries_off();
level thread maps\loki_moving_cover::white_hide();
common_scripts\utility::waitframe();
common_scripts\utility::waitframe();
common_scripts\utility::flag_set( "explosion" );
level notify( "explosion" );
level.combat_one_wave_node notify( "explosion" );
common_scripts\utility::flag_set( "combat_one_music_end" );
level.player unlink();
var_3 delete();
var_4 delete();
var_5 delete();
level notify( "stop_explosions" );
common_scripts\utility::flag_set( "combat_one_done" );
}
explosion_anim( var_0, var_1 )
{
var_2 = getentarray( "explosion_hide", "targetname" );
foreach ( var_4 in var_2 )
var_4 hide();
var_0 maps\_anim::anim_single_solo( var_1, "explosion_part1" );
}
move_start_exposed_guy()
{
level.exposed_guy endon( "death" );
level endon( "combat_one_wave2_started" );
level.exposed_guy waittill( "goal" );
maps\loki_util::jkuprint( "exposed guy waiting" );
wait 8;
var_0 = getnode( "exposed_guy_start", "targetname" );
var_0 disconnectnode();
maps\loki_util::jkuprint( "exposed guy getting reassigned" );
var_0 = getnode( "exposed_guy_move", "targetname" );
level.exposed_guy setgoalnode( var_0 );
}
track_ai()
{
level endon( "explosion" );
level.player endon( "death" );
common_scripts\utility::flag_wait( "first_wave_spawned" );
level thread move_start_exposed_guy();
var_0 = get_all_wave_guys();
while ( var_0.size > 3 )
{
if ( common_scripts\utility::flag( "combat_one_wave2_spawned" ) )
break;
var_0 = get_all_wave_guys();
common_scripts\utility::waitframe();
}
maps\loki_util::jkuprint( "w2: via tracker" );
maps\_utility::battlechatter_off( "allies" );
common_scripts\utility::flag_set( "combat_one_wave2_started" );
maps\_utility::activate_trigger_with_targetname( "combat_one_trig_wave1_color" );
maps\_utility::activate_trigger_with_targetname( "combat_one_trig_wave2" );
common_scripts\utility::waitframe();
var_0 = get_all_wave_guys();
while ( var_0.size > 2 )
{
if ( common_scripts\utility::flag( "combat_one_wave2_spawned" ) )
break;
var_0 = get_all_wave_guys();
common_scripts\utility::waitframe();
}
level thread start_fuel_leak_fx( "fuel_explosion_spark_point0" );
level thread start_fuel_leak_fx( "fuel_explosion_spark_point1" );
level thread smart_radio_dialogue_enable_bc( 0.33, "loki_kgn_watchyourfiredont", "combat_one_wave3_spawned", 1 );
var_0 = get_all_wave_guys();
while ( var_0.size > 1 )
{
if ( common_scripts\utility::flag( "combat_one_wave3_spawned" ) )
break;
var_0 = get_all_wave_guys();
common_scripts\utility::waitframe();
}
maps\loki_util::jkuprint( "w3: via tracker" );
maps\_utility::battlechatter_off( "allies" );
level maps\_utility::delaythread( 1.5, ::start_fuel_leak_fx, "fuel_explosion_spark_point2" );
wait 2.666;
level thread force_traversal( "combat_one_traversal1", "cover_one_ally0_node2", "combat_one_ally0_traversal3", "combat_one_traversal3" );
level.allies[2] maps\_utility::set_force_color( "r" );
level.allies[2].fixednode = 0;
maps\_utility::activate_trigger_with_targetname( "combat_one_trig_wave2_color" );
maps\_utility::activate_trigger_with_targetname( "combat_one_trig_wave3" );
common_scripts\utility::flag_wait( "cool_spawn_finished" );
level thread smart_radio_dialogue_enable_bc( 4, "loki_kgn_thompsonwevegottangos", undefined, 1 );
var_1 = gettime() + 4000;
common_scripts\utility::waitframe();
var_0 = get_all_wave_guys( 1 );
while ( var_0.size > 2 )
{
var_0 = get_all_wave_guys( 1 );
common_scripts\utility::waitframe();
}
maps\loki_util::jkuprint( "end: final stand" );
if ( !common_scripts\utility::flag( "start_fuel_explosion" ) && gettime() - var_1 > 1000 )
{
maps\_utility::battlechatter_off( "allies" );
level thread smart_radio_dialogue_enable_bc( 0.66, "loki_kgn_clearthehatchthats", undefined, 1 );
}
level thread link_final_exposed_nodes();
var_0 = get_all_wave_guys( 1 );
foreach ( var_3 in var_0 )
{
level thread maps\loki_util::reassign_goal_volume( var_3, "combat_one_final" );
var_3.health = 150;
}
var_0 = get_all_wave_guys( 1 );
while ( var_0.size > 0 )
{
var_0 = get_all_wave_guys( 1 );
common_scripts\utility::waitframe();
}
maps\loki_util::jkuprint( "end: via tracker" );
level notify( "player_can_move_to_door" );
maps\_utility::battlechatter_off( "allies" );
level maps\_utility::delaythread( 1, ::start_fuel_leak_fx, "fuel_explosion_spark_point3" );
level maps\_utility::delaythread( 2, ::start_fuel_leak_fx, "fuel_explosion_spark_point4" );
var_5 = 0.8;
level thread ally0_move_to_end();
level maps\_utility::delaythread( var_5, ::moving_cover_pre_tele );
maps\_utility::activate_trigger_with_targetname( "combat_one_trig_wave3_color" );
var_6 = common_scripts\utility::getstruct( "ally1_at_door", "targetname" );
level.allies[1] maps\_utility::clear_force_color();
level.allies[1] setgoalpos( var_6.origin );
var_7 = common_scripts\utility::getstruct( "ally2_at_door", "targetname" );
level.allies[2] maps\_utility::clear_force_color();
level.allies[2] setgoalpos( var_7.origin );
wait( var_5 );
if ( !common_scripts\utility::flag( "start_fuel_explosion" ) )
level maps\_utility::smart_radio_dialogue( "loki_kgn_entrancesecuredmovein" );
}
smart_radio_dialogue_enable_bc( var_0, var_1, var_2, var_3 )
{
level endon( "explosion" );
level endon( "player_can_move_to_door" );
if ( isdefined( var_2 ) )
level endon( var_2 );
wait( var_0 );
level maps\_utility::smart_radio_dialogue( var_1 );
wait( randomfloatrange( 1, 2 ) );
if ( isdefined( var_3 ) && var_3 )
maps\_utility::battlechatter_on( "allies" );
}
ally0_move_to_end()
{
level endon( "explosion" );
level.player endon( "death" );
var_0 = force_traversal( "combat_one_traversal1", "combat_one_ally0_traversal3", undefined, "combat_one_traversal4" );
if ( !var_0 )
{
maps\loki_util::jkuprint( "ally unable to animate last traversal" );
level.allies[0] stopanimscripted();
level.combat_one_wave_node maps\_anim::anim_reach_solo( level.allies[0], "hatch_idle" );
}
level.combat_one_wave_node thread maps\_anim::anim_loop_solo( level.allies[0], "hatch_idle", "explosion" );
if ( !common_scripts\utility::flag( "start_fuel_explosion" ) )
{
thread maps\loki_audio::sfx_end_combat_amb();
level thread maps\_utility::smart_radio_dialogue( "loki_kgn_throughherekick" );
}
wait 6;
var_1 = [ "loki_kgn_hurryupkickwe", "loki_kgn_letsmoveitkick" ];
level.allies[0] thread maps\loki_util::play_nag( var_1, "start_fuel_explosion", 3, 8, 1, 8, "start_fuel_explosion" );
}
set_goalvolume_after_node_reached( var_0, var_1 )
{
self endon( "death" );
level endon( "combat_one_wave2_started" );
self.og_goalradius = self.goalradius;
self.goalradius = 8;
self waittill( "goal" );
self waittill( "goal" );
self.goalradius = self.og_goalradius;
wait 10;
if ( !common_scripts\utility::flag( var_1 ) )
self setgoalvolumeauto( getent( var_0, "targetname" ) );
}
spawn_wave1_enemies( var_0 )
{
var_1 = maps\loki_util::spawn_space_ai_from_targetname( "combat_one_wave1_upper" );
var_1 thread set_goalvolume_after_node_reached( "combat_one_wave1", "combat_one_wave2_started" );
var_1 thread combat_one_enemy();
var_1 = maps\loki_util::spawn_space_ai_from_targetname( "combat_one_wave1_lower" );
var_1 thread set_goalvolume_after_node_reached( "combat_one_wave1", "combat_one_wave2_started" );
var_1 thread combat_one_enemy();
var_2 = cool_spawn( "combat_one_wave1_top", 3, var_0 );
level.exposed_guy = var_2[1];
foreach ( var_1 in var_2 )
{
var_1 thread set_goalvolume_after_node_reached( "combat_one_wave1", "combat_one_wave2_started" );
var_1 thread combat_one_enemy();
}
common_scripts\utility::flag_set( "first_wave_spawned" );
}
trigger_wave2()
{
level endon( "explosion" );
var_0 = getent( "combat_one_trig_wave2", "targetname" );
var_0 waittill( "trigger" );
maps\loki_util::jkuprint( "w2" );
level thread force_traversal( "combat_one_traversal1", "cover_one_ally2_node1", "combat_one_traversal1_post", "combat_one_traversal1" );
level thread force_traversal( "combat_one_traversal1", "cover_one_ally0_node1", "cover_one_ally0_node2", "combat_one_traversal2" );
var_1 = get_all_wave_guys();
foreach ( var_3 in var_1 )
{
if ( isdefined( self.og_goalradius ) )
self.goalradius = self.og_goalradius;
level thread maps\loki_util::reassign_goal_volume( var_3, "combat_one_wave2" );
}
var_5 = maps\loki_util::spawn_space_ais_from_targetname( "combat_one_wave2_new" );
foreach ( var_7 in var_5 )
var_7 thread combat_one_enemy();
}
trigger_wave3()
{
level endon( "explosion" );
var_0 = getent( "combat_one_trig_wave3", "targetname" );
var_0 waittill( "trigger" );
maps\loki_util::jkuprint( "w3" );
common_scripts\utility::flag_set( "combat_one_wave3_spawned" );
var_1 = get_all_wave_guys();
foreach ( var_3 in var_1 )
level thread maps\loki_util::reassign_goal_volume( var_3, "combat_one_wave3" );
level thread maps\loki_util::loki_autosave_now();
var_5 = door_traversal();
}
capsule_ninja()
{
level endon( "explosion" );
level endon( "player_can_move_to_door" );
common_scripts\utility::flag_wait( "door_traversal_done" );
common_scripts\utility::flag_wait( "trigger_capsule_ninja" );
var_0 = maps\loki_util::spawn_space_ai_from_targetname( "combat_one_capsule_ninja" );
var_0 thread maps\loki_util::loki_drop_weapon();
var_0.health = 250;
var_0.baseaccuracy = 50;
var_0.favoriteenemy = level.player;
var_0.ignoreme = 1;
for ( var_0.fixednode = 1; isalive( self ); self.baseaccuracy = 50 )
{
common_scripts\utility::flag_waitopen( "trigger_capsule_ninja" );
maps\loki_util::jkuprint( "ninja n-ap" );
self.favoriteenemy = undefined;
self.baseaccuracy = level.accuracy_enemy;
common_scripts\utility::flag_wait( "trigger_capsule_ninja" );
maps\loki_util::jkuprint( "ninja ap" );
self.favoriteenemy = level.player;
}
}
combat_one_enemy()
{
self.baseaccuracy = level.accuracy_enemy;
self.maxfaceenemydist = 1024;
thread maps\loki_util::loki_drop_weapon();
thread enemy_attack_player_when_flashing();
}
enemy_attack_player_when_flashing()
{
self endon( "death" );
level.player endon( "death" );
level endon( "player_can_move_to_door" );
while ( isalive( self ) )
{
common_scripts\utility::flag_wait( "player_too_close_to_door" );
maps\loki_util::jkuprint( "ap" );
self.favoriteenemy = level.player;
self.baseaccuracy = 50;
common_scripts\utility::flag_waitopen( "player_too_close_to_door" );
maps\loki_util::jkuprint( "n-ap" );
self.favoriteenemy = undefined;
self.baseaccuracy = level.accuracy_enemy;
}
}
cool_spawn( var_0, var_1, var_2, var_3, var_4 )
{
if ( !isdefined( var_2 ) )
var_2 = 0;
if ( !isdefined( var_3 ) )
var_3 = undefined;
if ( !isdefined( var_4 ) )
var_4 = 1;
var_5 = [];
var_6 = getent( "combat_one_door_col", "targetname" );
var_6 notsolid();
var_6 connectpaths();
for ( var_7 = 0; var_7 < var_1; var_7++ )
{
var_8 = maps\loki_util::spawn_space_ai_from_targetname( var_0 + var_7, var_2 );
var_8 thread ignore_and_move_fast( var_3 );
var_5 = common_scripts\utility::add_to_array( var_5, var_8 );
if ( !var_2 )
wait 0.5;
}
if ( !var_2 && var_4 )
var_6 common_scripts\utility::delaycall( 8, ::rotateto, ( 0, 0, 0 ), 1, 0.5, 0.5 );
var_6 common_scripts\utility::delaycall( 8, ::solid );
var_6 common_scripts\utility::delaycall( 8.1, ::disconnectpaths );
common_scripts\utility::flag_set( "cool_spawn_finished" );
return var_5;
}
door_traversal()
{
var_0 = getnode( "combat_one_door_node1", "targetname" );
var_1 = getnode( "combat_one_door_node2", "targetname" );
var_2 = getnode( "combat_one_door_node3", "targetname" );
var_3 = getnode( "combat_one_door_node4", "targetname" );
var_4 = maps\loki_util::spawn_space_ai_from_targetname( "combat_one_wave3_0" );
var_4.animname = "opfor1";
var_4 thread door_traversal_move( var_0 );
var_5 = maps\loki_util::spawn_space_ai_from_targetname( "combat_one_wave3_1" );
var_5.animname = "opfor2";
var_5 thread door_traversal_move( var_1 );
var_6 = maps\loki_util::spawn_space_ai_from_targetname( "combat_one_wave3_2" );
var_6.animname = "opfor3";
var_6 thread door_traversal_move( var_2 );
var_7 = maps\loki_util::spawn_space_ai_from_targetname( "combat_one_wave3_3" );
var_7.animname = "opfor4";
var_7 thread door_traversal_move( var_3 );
common_scripts\utility::flag_set( "door_traversal_done" );
level.combat_one_door_node maps\_anim::anim_single_solo( level.combat_one_door, "combat_one_door" );
level.combat_one_door_col connectpaths();
}
door_traversal_move( var_0 )
{
self.health = 300;
self.fixednode = 1;
self.allowdeath = 1;
self.ignoreme = 1;
thread force_traversal_check_hit();
level.combat_one_door_node maps\_anim::anim_single_solo( self, "combat_one_door" );
var_0 connectnode();
if ( isalive( self ) )
{
self notify( "door_traversal_finished" );
self notify( "stop_traversal_hit_detection" );
thread combat_one_enemy();
maps\_utility::delaythread( 15, maps\_utility::set_fixednode_false );
maps\_utility::delaythread( 15, maps\loki_util::jkuprint, self.animname + " free!" );
self.health = 150;
self.ignoreme = 0;
}
self setgoalnode( var_0 );
}
check_for_death_during_traversal()
{
self endon( "death" );
self endon( "door_traversal_finished" );
while ( self.health > 1 )
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
self stopanimscripted();
}
ignore_and_move_fast( var_0 )
{
self endon( "death" );
var_1 = self.health;
self.health = 9999;
self.ignoreme = 1;
self.ignoreall = 1;
var_2 = self.moveplaybackrate;
self.moveplaybackrate = 1.5;
if ( isdefined( var_0 ) )
self setgoalvolumeauto( getent( var_0, "targetname" ) );
wait 1.5;
self.health = var_1;
self.ignoreme = 0;
self.ignoreall = 0;
self.moveplaybackrate = var_2;
}
die_from_explosion()
{
self endon( "death" );
if ( isalive( self ) )
{
maps\_anim::anim_generic( self, "explosion_part1" );
self kill();
}
}
get_all_wave_guys( var_0 )
{
var_1 = maps\_utility::get_ai_group_ai( "combat_one_wave1" );
var_2 = maps\_utility::get_ai_group_ai( "combat_one_wave2" );
var_1 = maps\_utility::array_merge( var_1, var_2 );
if ( isdefined( var_0 ) && var_0 )
{
var_3 = maps\_utility::get_ai_group_ai( "combat_one_wave3" );
var_1 = maps\_utility::array_merge( var_1, var_3 );
}
var_1 = maps\_utility::array_removedead_or_dying( var_1 );
return var_1;
}
get_all_allies()
{
var_0 = level.allies;
var_1 = level.redshirts;
var_0 = maps\_utility::array_merge( var_0, var_1 );
var_0 = maps\_utility::array_removedead_or_dying( var_0 );
return var_0;
}
unlink_final_exposed_nodes()
{
var_0 = getnodearray( "combat_one_final_exposed_node", "targetname" );
foreach ( var_2 in var_0 )
var_2 disconnectnode();
}
link_final_exposed_nodes()
{
var_0 = getnodearray( "combat_one_final_exposed_node", "targetname" );
foreach ( var_2 in var_0 )
var_2 connectnode();
}
unlink_door_traversal_nodes()
{
var_0 = getnode( "combat_one_door_node1", "targetname" );
var_1 = getnode( "combat_one_door_node2", "targetname" );
var_2 = getnode( "combat_one_door_node3", "targetname" );
var_3 = getnode( "combat_one_door_node4", "targetname" );
var_0 disconnectnode();
var_1 disconnectnode();
var_2 disconnectnode();
var_3 disconnectnode();
}
force_traversal( var_0, var_1, var_2, var_3 )
{
level endon( "explosion" );
var_4 = getnode( var_1, "targetname" );
var_5 = getent( var_0, "targetname" );
if ( !isdefined( var_2 ) )
var_6 = undefined;
else
var_6 = getnode( var_2, "targetname" );
var_7 = get_all_allies();
foreach ( var_9 in var_7 )
{
maps\loki_util::jkuprint( var_9.animname + ": " + distance( var_9.origin, var_4.origin ) );
if ( distance( var_9.origin, var_4.origin ) < 40 )
{
maps\loki_util::jkuprint( var_9.animname + ": near node" );
var_9 endon( "death" );
var_9.ignoreme = 1;
var_9 thread force_traversal_check_hit();
var_5 maps\_anim::anim_generic_reach( var_9, var_3 );
var_5 maps\_anim::anim_generic( var_9, var_3 );
var_9.ignoreme = 0;
var_9 notify( "stop_traversal_hit_detection" );
if ( isdefined( var_6 ) )
var_9 setgoalnode( var_6 );
return 1;
}
}
return 0;
}
#using_animtree("generic_human");
force_traversal_check_hit()
{
self endon( "death" );
self endon( "stop_traversal_hit_detection" );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
maps\loki_util::jkuprint( self.animname + " hit while in traversal" );
self setanimrestart( %loki_traversal_pain_1, 1, 0.2 );
wait 0.5;
}
}
player_in_combat_area()
{
for (;;)
{
if ( common_scripts\utility::flag( "in_combat_area" ) )
iprintln( "player safe" );
common_scripts\utility::waitframe();
}
}
solarpanels_damage_think()
{
level endon( "explosion" );
level.player endon( "death" );
self setcandamage( 1 );
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
if ( var_0 < 200 )
{
wait 0.1;
if ( randomint( 3 ) == 0 )
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
}
var_11 = getglass( self.target );
destroyglass( var_11, var_2 );
solarpanel_disconnect_nodes();
}
solarpanels_damage_think_instant()
{
level endon( "explosion" );
level.player endon( "death" );
for (;;)
{
var_0 = getglass( self.target );
if ( isglassdestroyed( var_0 ) )
break;
common_scripts\utility::waitframe();
}
solarpanel_disconnect_nodes();
}
solarpanel_disconnect_nodes()
{
var_0 = getnodesinradius( self.origin, 48, 0, 48, "cover" );
foreach ( var_2 in var_0 )
{
var_2 disconnectnode();
badplace_cylinder( "foo", 0, var_2.origin, 48, 48, "axis", "allies" );
var_3 = get_all_wave_guys();
foreach ( var_5 in var_3 )
{
if ( var_5 nearnode( var_2 ) )
maps\loki_util::jkuprint( "crap my node sucks now" );
}
}
self hide();
self notsolid();
}
random_explosions( var_0, var_1, var_2 )
{
level.player endon( "death" );
level endon( "stop_explosions" );
playfx( common_scripts\utility::getfx( "fuel_explosion_zerog" ), var_0 );
if ( !isdefined( var_1 ) )
earthquake( 0.6, 1, level.player.origin, 1600 );
for (;;)
{
wait( randomfloatrange( 1, 3 ) );
thread maps\loki_audio::sfx_gas_line_dist_explo( var_0 );
if ( isdefined( var_2 ) )
playfx( common_scripts\utility::getfx( "fuel_explosion_zerog" ), var_0 );
else
playfx( common_scripts\utility::getfx( "explosion_small" ), var_0 );
if ( !isdefined( var_1 ) )
earthquake( 0.3, 1, level.player.origin, 1600 );
}
}
track_player_hiding()
{
var_0 = getentarray( "combat_one_hide", "targetname" );
level.hiding_icon = maps\_hud_util::createicon( "green_block", 16, 16 );
level.hiding_icon.alignx = "right";
level.hiding_icon.aligny = "middle";
level.hiding_icon.vertalign = "top";
level.hiding_icon.alpha = 0;
level.hiding_icon.hidewhendead = 0;
level.hiding_icon.hidewheninmenu = 0;
level.hiding_icon.sort = -205;
level.hiding_icon.foreground = 1;
level thread set_player_hidden();
}
track_hiding_think()
{
self endon( "death" );
level.last_used_cover_vol = 0;
for (;;)
{
if ( level.player istouching( self ) && self != level.last_used_cover_vol )
{
common_scripts\utility::flag_set( "combat_one_player_hiding" );
level.hiding_icon.alpha = 0.8;
}
else if ( level.player istouching( self ) )
{
}
else if ( level.player_in_cover )
{
common_scripts\utility::flag_clear( "combat_one_player_hiding" );
level.player_in_cover = 0;
level.hiding_icon.alpha = 0.0;
}
common_scripts\utility::waitframe();
}
}
set_player_hidden()
{
level.player endon( "death" );
for (;;)
{
common_scripts\utility::flag_wait( "combat_one_player_hiding" );
level.hiding_icon.alpha = 0.8;
level.player.ignoreme = 1;
common_scripts\utility::flag_waitopen( "combat_one_player_hiding" );
level.hiding_icon.alpha = 0;
level.player.ignoreme = 0;
}
}
do_tile_single( var_0, var_1 )
{
get_touching_tiles( var_0 );
get_edge_tiles( var_1 );
self.tilealive = 1;
self setcandamage( 1 );
self endon( "tileDeath" );
var_2 = undefined;
for (;;)
{
self waittill( "damage", var_3, var_4, var_5, var_2, var_6, var_7, var_8, var_9, var_10, var_11 );
if ( var_6 == "MOD_GRENADE_SPLASH" || var_6 == "MOD_EXPLOSIVE" )
{
if ( var_6 == "MOD_EXPLOSIVE" && var_4.classname == "script_model" )
var_2 = var_4 getcentroid();
thread dogrenadesplash( var_2 );
continue;
}
if ( level.activebreaks < 10 )
break;
}
thread tile_death( var_2 );
}
dogrenadesplash( var_0 )
{
if ( level.grenadesplashing )
return;
level.grenadesplashing = 1;
var_1 = common_scripts\utility::get_array_of_closest( var_0, getentarray( "breakTile", "targetname" ), undefined, 75 );
var_1 = featherents( var_1 );
common_scripts\utility::array_thread( var_1, ::tile_death, var_0 );
thread removegrenadesplash();
}
featherents( var_0 )
{
var_1 = 1;
var_2 = [];
foreach ( var_4 in var_0 )
{
if ( var_1 )
var_2[var_2.size] = var_4;
var_1 = !var_1;
}
return var_2;
}
removegrenadesplash()
{
wait 0.05;
level.grenadesplashing = 0;
}
get_touching_tiles( var_0 )
{
self.touchingtiles = [];
foreach ( var_2 in var_0 )
{
if ( var_2 istouchinglinktos( self ) && var_2 != self )
self.touchingtiles[self.touchingtiles.size] = var_2;
}
}
get_edge_tiles( var_0 )
{
self.edgetiles = [];
foreach ( var_2 in var_0 )
{
if ( var_2 istouchinglinktos( self ) && var_2 != self )
self.edgetiles[self.edgetiles.size] = var_2;
}
}
istouchinglinktos( var_0 )
{
return var_0 islinkedto( self ) || islinkedto( var_0 );
}
islinkedto( var_0 )
{
var_1 = common_scripts\utility::get_linked_ents();
foreach ( var_3 in var_1 )
{
if ( var_3 == var_0 )
return 1;
}
return 0;
}
tile_spider( var_0 )
{
if ( !self.tilealive )
return;
var_1 = spawnstruct();
var_1.basetile = self;
var_1.testedarray = [];
var_1.totestarray = self.touchingtiles;
var_1.foundwall = 0;
var_1.livingedgeconnections = 0;
foreach ( var_3 in self.touchingtiles )
{
if ( var_3.tilealive && var_3.edgetiles.size )
var_1.livingedgeconnections++;
}
while ( !var_1.foundwall && var_1.totestarray.size > 0 )
{
var_5 = var_1.totestarray[0];
var_1.totestarray = common_scripts\utility::array_remove( var_1.totestarray, var_5 );
if ( !var_5.tilealive )
continue;
var_5 tile_attached_to_edge( var_1 );
}
if ( var_1.foundwall && nonedgemaintains( var_1 ) )
return;
thread tile_death( var_0 );
}
nonedgemaintains( var_0 )
{
if ( self.edgetiles.size > 0 )
return 1;
if ( var_0.livingedgeconnections > 1 )
return 1;
return 1;
}
tile_attached_to_edge( var_0 )
{
if ( common_scripts\utility::array_contains( var_0.testedarray, self ) )
return;
else
var_0.testedarray[var_0.testedarray.size] = self;
if ( self.edgetiles.size > 0 )
var_0.foundwall = 1;
foreach ( var_2 in self.touchingtiles )
{
if ( !var_2.tilealive )
continue;
if ( !common_scripts\utility::array_contains( var_0.testedarray, var_2 ) )
var_0.totestarray[var_0.totestarray.size] = var_2;
}
}
tile_death( var_0 )
{
if ( !self.tilealive )
return;
level.activebreaks = level.activebreaks + 1;
self notify( "tileDeath" );
self.tilealive = 0;
var_1 = var_0;
self rotatevelocity( var_1, 0.5 );
self movegravity( ( 0, 0, -3 ), 1 );
foreach ( var_3 in self.touchingtiles )
var_3 maps\_utility::delaythread( randomfloatrange( 0.05, 0.1 ), ::tile_spider, var_0 );
thread decrementlevelbreaks();
thread fallingtileeffect();
}
fallingtileeffect()
{
while ( self.origin[2] > -64 )
wait 0.05;
var_0 = maps\_utility::set_z( self.origin, -64 );
}
decrementlevelbreaks()
{
wait 0.05;
level.activebreaks--;
}
combat_one_cleanup()
{
var_0 = getentarray( "combat_one_cleanup", "script_noteworthy" );
maps\loki_util::jkuprint( var_0.size + ": combat one ents cleaned up" );
}
firstframe_combat_one_door()
{
level.combat_one_door_node = getent( "combat_one_door_traversal", "targetname" );
level.combat_one_door = maps\_utility::spawn_anim_model( "combat_one_door" );
level.combat_one_door_node thread maps\_anim::anim_first_frame_solo( level.combat_one_door, "combat_one_door" );
level.combat_one_door_col = getent( "combat_one_door_col", "targetname" );
level.combat_one_door_col linkto( level.combat_one_door );
level.combat_one_door_col disconnectpaths();
}
track_fuel_leak_hit()
{
level endon( "explosion" );
var_0 = getent( "fuel_leak_col", "targetname" );
var_0 setcandamage( 1 );
var_0 setcanradiusdamage( 0 );
level.bullet_caused_fuel_leaks = [];
for (;;)
{
var_0 waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10, var_11 );
var_12 = vectortoangles( var_3 * -1 );
level thread line_debug( var_4, var_4 + anglestoforward( var_12 ) * 12, ( 1, 1, 1 ) );
var_13 = bullettrace( var_4 + anglestoforward( var_12 ) * 1, var_4, 0 );
var_12 = vectortoangles( var_13["normal"] );
if ( distance( var_12, vectortoangles( var_3 ) ) < 1 )
{
maps\loki_util::jkuprint( "bad leak angles" );
level thread line_debug( var_4, var_4 + anglestoforward( var_12 ) * 12, ( 1, 0, 0 ) );
var_12 = vectortoangles( var_3 * -1 );
}
else
level thread line_debug( var_4, var_4 + anglestoforward( var_12 ) * 12, ( 0, 0, 1 ) );
var_14 = start_fuel_leak_fx( undefined, 1, var_4, var_12 );
level.bullet_caused_fuel_leaks[level.bullet_caused_fuel_leaks.size] = var_14;
if ( level.bullet_caused_fuel_leaks.size > 5 )
{
maps\loki_util::jkuprint( "deleting leak" );
level.bullet_caused_fuel_leaks[0] notify( "death" );
level.bullet_caused_fuel_leaks = maps\_utility::array_remove_index( level.bullet_caused_fuel_leaks, 0 );
}
maps\loki_util::jkuprint( "hits: " + level.bullet_caused_fuel_leaks.size );
wait 0.3;
}
}
line_debug( var_0, var_1, var_2 )
{
for ( var_3 = 0; var_3 < 1000; var_3++ )
{
maps\loki_util::jkuline( var_0, var_1, var_2 );
common_scripts\utility::waitframe();
}
}