mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-10 07:08:06 -05:00
195 lines
5.8 KiB
Plaintext
195 lines
5.8 KiB
Plaintext
#include maps\mp\zombies\_zm_ai_avogadro;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\_utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
#include maps\mp\animscripts\zm_utility;
|
|
#include maps\mp\_visionset_mgr;
|
|
#include maps\mp\zombies\_zm;
|
|
#include maps\mp\zombies\_zm_spawner;
|
|
#include maps\mp\zombies\_zm_ai_basic;
|
|
#include maps\mp\zm_transit_bus;
|
|
#include maps\mp\animscripts\zm_shared;
|
|
#include maps\mp\zombies\_zm_zonemgr;
|
|
#include maps\mp\zombies\_zm_laststand;
|
|
#include maps\mp\zombies\_zm_stats;
|
|
#include maps\mp\zombies\_zm_weap_riotshield;
|
|
|
|
check_range_attack()
|
|
{
|
|
enemy = self.favoriteenemy;
|
|
|
|
if ( isdefined( enemy ) )
|
|
{
|
|
vec_enemy = enemy.origin - self.origin;
|
|
dist_sq = lengthsquared( vec_enemy );
|
|
|
|
if ( dist_sq > 4096 && dist_sq < 360000 )
|
|
{
|
|
vec_facing = anglestoforward( self.angles );
|
|
norm_facing = vectornormalize( vec_facing );
|
|
norm_enemy = vectornormalize( vec_enemy );
|
|
dot = vectordot( norm_facing, norm_enemy );
|
|
|
|
if ( dot > 0.99 )
|
|
{
|
|
enemy_eye_pos = enemy geteye();
|
|
eye_pos = self geteye();
|
|
passed = bullettracepassed( eye_pos, enemy_eye_pos, 0, undefined );
|
|
|
|
if ( passed )
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
avogadro_exit( from )
|
|
{
|
|
powerup_origin = spawn( "script_origin", self.origin );
|
|
if ( self.state == "attacking_bus" || self.state == "stay_attached" )
|
|
{
|
|
powerup_origin linkto( level.the_bus );
|
|
}
|
|
|
|
self.state = "exiting";
|
|
self notify( "stop_find_flesh" );
|
|
self notify( "zombie_acquire_enemy" );
|
|
self setfreecameralockonallowed( 0 );
|
|
self.audio_loop_ent stoploopsound( 0.5 );
|
|
self notify( "stop_health" );
|
|
|
|
if ( isdefined( self.health_fx ) )
|
|
{
|
|
self.health_fx unlink();
|
|
self.health_fx delete();
|
|
}
|
|
|
|
if ( isdefined( from ) )
|
|
{
|
|
if ( from == "bus" )
|
|
{
|
|
self playsound( "zmb_avogadro_death_short" );
|
|
playfx( level._effect["avogadro_ascend_aerial"], self.origin );
|
|
self animscripted( self.origin, self.angles, "zm_bus_win" );
|
|
maps\mp\animscripts\zm_shared::donotetracks( "bus_win_anim" );
|
|
}
|
|
else if ( from == "chamber" )
|
|
{
|
|
self playsound( "zmb_avogadro_death_short" );
|
|
playfx( level._effect["avogadro_ascend"], self.origin );
|
|
self animscripted( self.origin, self.angles, "zm_chamber_out" );
|
|
wait 0.4;
|
|
self ghost();
|
|
stop_exploder( 500 );
|
|
}
|
|
else
|
|
{
|
|
self playsound( "zmb_avogadro_death" );
|
|
playfx( level._effect["avogadro_ascend"], self.origin );
|
|
self animscripted( self.origin, self.angles, "zm_exit" );
|
|
maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
self playsound( "zmb_avogadro_death" );
|
|
playfx( level._effect["avogadro_ascend"], self.origin );
|
|
self animscripted( self.origin, self.angles, "zm_exit" );
|
|
maps\mp\animscripts\zm_shared::donotetracks( "exit_anim" );
|
|
}
|
|
|
|
if ( !isdefined( from ) || from != "chamber" )
|
|
level thread do_avogadro_flee_vo( self );
|
|
|
|
self ghost();
|
|
self.hit_by_melee = 0;
|
|
self.anchor.origin = self.origin;
|
|
self.anchor.angles = self.angles;
|
|
self linkto( self.anchor );
|
|
|
|
if ( isdefined( from ) && from == "exit_idle" )
|
|
self.return_round = level.round_number;
|
|
else
|
|
self.return_round = level.round_number + randomintrange( 2, 5 );
|
|
|
|
level.next_avogadro_round = self.return_round;
|
|
self.state = "cloud";
|
|
self thread cloud_update_fx();
|
|
|
|
if ( !isdefined( from ) )
|
|
{
|
|
if ( level.powerup_drop_count >= level.zombie_vars["zombie_powerup_drop_max_per_round"] )
|
|
level.powerup_drop_count = level.zombie_vars["zombie_powerup_drop_max_per_round"] - 1;
|
|
|
|
level.zombie_vars["zombie_drop_item"] = 1;
|
|
level thread maps\mp\zombies\_zm_powerups::powerup_drop( powerup_origin.origin );
|
|
}
|
|
|
|
powerup_origin delete();
|
|
}
|
|
|
|
cloud_update_fx()
|
|
{
|
|
self endon( "cloud_fx_end" );
|
|
level endon( "end_game" );
|
|
region = [];
|
|
region[0] = "bus";
|
|
region[1] = "diner";
|
|
region[2] = "farm";
|
|
region[3] = "cornfield";
|
|
region[4] = "power";
|
|
region[5] = "town";
|
|
|
|
if ( !isdefined( self.sndent ) )
|
|
{
|
|
self.sndent = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
self.sndent playloopsound( "zmb_avogadro_thunder_overhead" );
|
|
}
|
|
|
|
cloud_time = gettime();
|
|
|
|
for ( vo_counter = 0; 1; vo_counter++ )
|
|
{
|
|
if ( gettime() >= cloud_time )
|
|
{
|
|
if ( isdefined( self.current_region ) )
|
|
{
|
|
exploder_num = level.transit_region[self.current_region].exploder;
|
|
stop_exploder( exploder_num );
|
|
}
|
|
|
|
rand_region = array_randomize( region );
|
|
region_str = rand_region[0];
|
|
|
|
if ( !isdefined( self.current_region ) )
|
|
region_str = region[4];
|
|
|
|
self.current_region = region_str;
|
|
exploder_num = level.transit_region[region_str].exploder;
|
|
exploder( exploder_num );
|
|
self.sndent moveto( level.transit_region[region_str].sndorigin, 3 );
|
|
cloud_time = gettime() + 30000;
|
|
}
|
|
|
|
if ( vo_counter > 50 )
|
|
{
|
|
player = self get_player_in_region();
|
|
|
|
if ( isdefined( player ) )
|
|
{
|
|
if ( isdefined( self._in_cloud ) && self._in_cloud )
|
|
player thread do_player_general_vox( "general", "avogadro_above", 90, 10 );
|
|
else
|
|
player thread do_player_general_vox( "general", "avogadro_arrive", 60, 40 );
|
|
}
|
|
else
|
|
level thread avogadro_storm_vox();
|
|
|
|
vo_counter = 0;
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
} |