IW4-Dump-Files/maps/so_killspree_favela_code.gsc

328 lines
7.5 KiB
Plaintext

#include common_scripts\utility;
#include maps\_utility;
#include maps\_vehicle;
#include maps\_anim;
#include maps\_specialops;
#include maps\_hud_util;
#using_animtree( "generic_human" );
/*dog_goto_player()
{
self endon( "death" );
if ( isdefined( self.target ) )
self waittill( "goal" );
if ( level.player.size == 2 )
{
if ( randomint( 100 ) > 50 )
self setgoalentity( level.player[ 0 ] );
else
self setgoalentity( level.player[ 1 ] );
}
else
self setgoalentity( level.player );
self.goalradius = 300;
}*/
ambush_to_seek()
{
level endon( "special_op_terminated" );
self endon( "death" );
if ( !isdefined( self.script_combatmode ) )
return;
if ( self.script_combatmode == "ambush" )
{
while( 1 )
{
wait level.ambush_to_seeker_delay + randomint( level.ambush_to_seeker_delay );
flag_wait( "detailed_enemy_population_info_available" );
if( ( level.ambush_to_seeker + level.enemy_seekers ) > level.current_enemy_population/3 )
continue;
else
break;
}
self.combatmode = "cover";
self.ambush_to_seeker = true;
self enemy_seek_player( 1024 );
wait level.ambush_to_seeker_delay;
self enemy_seek_player( 256 );
}
}
enemy_seek_player( goalradius )
{
level endon( "special_op_terminated" );
self endon( "death" );
if ( isdefined( self.target ) )
self waittill( "goal" );
self.goalheight = 80;
self.goalradius = goalradius;
while ( 1 )
{
closest_player = get_closest_player_healthy( self.origin );
if ( isdefined( closest_player ) )
self setgoalpos( closest_player.origin );
wait 2;
}
}
release_doggy()
{
level endon( "special_op_terminated" );
dog_spawner = getentarray( "fence_dog_spawner", "targetname" );
array_spawn_function( dog_spawner, ::dog_register_death );
array_spawn_function( dog_spawner, ::enemy_seek_player, 300 );
if( !isdefined( level.gameskill ) )
num_of_dogs = max( int( getdvar( "g_gameskill" ) ), 1 );
else
num_of_dogs = max( level.gameskill, 1 );
// difficulty modifier
if( is_Coop() )
num_of_dogs += 1;
while( 1 )
{
level waittill( "who_let_the_dogs_out" );
for( i = 0; i < num_of_dogs; i++ )
{
doggy = random( dog_spawner );
if ( getaiSpeciesArray( "axis", "dog" ).size < level.max_dogs_at_once )
{
doggy.count = 1;
doggy stalingradSpawn();
}
wait 1 + randomint( 5 );
}
}
}
hud_create_kill_counter()
{
level endon( "special_op_terminated" );
self endon( "hud_cleaned_up" );
self.kill_hudelem = so_create_hud_item( 3, so_hud_ypos(), &"SPECIAL_OPS_HOSTILES", self );
self.kill_hudelem_score = so_create_hud_item( 3, so_hud_ypos(), undefined, self );
self.kill_hudelem_score.alignx = "left";
self.kill_hudelem_score SetValue( level.points_counter );
thread hud_clean_up();
flag_wait( "favela_enemies_spawned" );
while ( level.points_counter > 0 )
{
level waittill( "enemy_killed_by_player" );
thread hud_update_kill_counter();
}
// Give both players a chance to update their huds.
if ( self == level.player )
{
wait 0.05;
flag_set( "challenge_success" );
}
}
hud_update_kill_counter()
{
if ( self == level.player )
thread so_dialog_counter_update( level.points_counter, level.points_target );
// Above 5 kills, just update data.
if ( level.points_counter > 5 )
{
self.kill_hudelem_score SetValue( level.points_counter );
return;
}
// Success!
if ( level.points_counter <= 0 )
{
self.kill_hudelem_score so_remove_hud_item( true );
self.kill_hudelem_score = so_create_hud_item( 3, so_hud_ypos(), &"SPECIAL_OPS_DASHDASH", self );
self.kill_hudelem_score.alignx = "left";
self.kill_hudelem thread so_hud_pulse_success();
self.kill_hudelem_score thread so_hud_pulse_success();
return;
}
// Crossed the barrier, let the player know they are close.
self.kill_hudelem thread so_hud_pulse_close();
self.kill_hudelem_score thread so_hud_pulse_close();
self.kill_hudelem_score SetValue( level.points_counter );
}
hud_create_civ_counter()
{
self endon( "hud_cleaned_up" );
self.civ_hudelem = so_create_hud_item( 4, so_hud_ypos(), &"SO_KILLSPREE_FAVELA_CIVILIANS", self );
self.civ_hudelem_score = so_create_hud_item( 4, so_hud_ypos(), undefined, self );
self.civ_hudelem_score.alignx = "left";
self.civ_hudelem_score SetValue( 0 );
switch ( level.gameskill )
{
case 0:
case 1: self.civ_hudelem_score.label = &"SO_KILLSPREE_FAVELA_CIV_COUNT_REGULAR"; break;
case 2: self.civ_hudelem_score.label = &"SO_KILLSPREE_FAVELA_CIV_COUNT_HARDENED"; break;
case 3: self.civ_hudelem_score.label = &"SO_KILLSPREE_FAVELA_CIV_COUNT_VETERAN"; break;
}
flag_wait( "favela_enemies_spawned" );
while ( level.civilian_killed < level.civilian_kill_fail )
{
level waittill( "civilian_died" );
kills_remaining = level.civilian_kill_fail - level.civilian_killed;
if ( kills_remaining >= 1 )
thread so_dialog_killing_civilians();
self.civ_hudelem_score SetValue( level.civilian_killed );
switch ( kills_remaining )
{
case 0:
self.civ_hudelem thread so_hud_pulse_failure();
self.civ_hudelem_score thread so_hud_pulse_failure();
break;
case 1:
self.civ_hudelem thread so_hud_pulse_alarm();
self.civ_hudelem_score thread so_hud_pulse_alarm();
break;
case 2:
self.civ_hudelem thread so_hud_pulse_warning();
self.civ_hudelem_score thread so_hud_pulse_warning();
break;
default:
self.civ_hudelem thread so_hud_pulse_default();
self.civ_hudelem_score thread so_hud_pulse_default();
break;
}
}
so_force_deadquote( "@SO_KILLSPREE_FAVELA_MISSION_FAILED_CIVILIAN" );
thread missionfailedwrapper();
}
hud_clean_up()
{
level waittill( "special_op_terminated" );
if ( isdefined( self.kill_hudelem ) )
{
self.kill_hudelem thread so_remove_hud_item();
self.kill_hudelem_score thread so_remove_hud_item();
self.civ_hudelem thread so_remove_hud_item();
self.civ_hudelem_score thread so_remove_hud_item();
}
self notify( "hud_cleaned_up" );
}
// ---------------------------------------------------------------------------------
enemy_type_monitor()
{
level endon( "special_op_terminated" );
flag_wait( "enemy_population_info_available" );
while ( 1 )
{
enemies = getaiarray( "axis" );
level.ambush_to_seeker = 0;
level.enemy_seekers = 0;
level.enemy_ambushers = 0;
foreach ( ai in enemies )
{
if( isdefined( ai.ambush_to_seeker ) )
level.ambush_to_seeker++;
if( isdefined( ai.script_noteworthy ) && ai.script_noteworthy == "seek_player" )
level.enemy_seekers++;
if( isdefined( ai.combatmode ) && ai.combatmode == "ambush" )
level.enemy_ambushers++;
}
flag_set( "detailed_enemy_population_info_available" );
wait 1;
}
}
hunter_enemies_level_init()
{
if ( !isdefined( level.hunter_kill_value ) )
{
level.hunter_kill_value = 1;
}
}
hunter_init()
{
if( !isdefined( level.current_enemy_population ) )
{
level.current_enemy_population = 1;
}
level.current_enemy_population++;
level notify( "enemy_number_changed" );
flag_set( "enemy_population_info_available" );
}
hunter_register_death()
{
while( 1 )
{
level waittill( "specops_player_kill", attacker );
level.current_enemy_population--;
level notify( "enemy_number_changed" );
level notify( "enemy_downed" );
level.points_counter--;
level notify( "enemy_killed_by_player" );
}
}
dog_register_death()
{
self waittill( "death", attacker );
if ( isplayer( attacker ) )
{
attacker.dogs_killed++;
}
}
civilian_register_death()
{
self waittill( "death", attacker );
assert( isdefined( level.gameskill ) );
if ( isplayer( attacker ) )
{
attacker.civilians_killed++;
level.civilian_killed++;
level notify( "civilian_died" );
}
}