mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-09 23:02:53 -05:00
209 lines
5.8 KiB
Plaintext
209 lines
5.8 KiB
Plaintext
#include maps\mp\zombies\_zm_weap_jetgun;
|
|
#include maps\mp\_utility;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\zombies\_zm_utility;
|
|
|
|
jetgun_firing()
|
|
{
|
|
if ( !isdefined( self.jetsound_ent ) )
|
|
{
|
|
self.jetsound_ent = spawn( "script_origin", self.origin );
|
|
self.jetsound_ent linkto( self, "tag_origin" );
|
|
}
|
|
|
|
jetgun_fired = 0;
|
|
|
|
if ( self is_jetgun_firing() && jetgun_fired == 0 )
|
|
{
|
|
self.jetsound_ent playloopsound( "wpn_jetgun_effect_plr_loop", 0.8 );
|
|
self.jetsound_ent playsound( "wpn_jetgun_effect_plr_start" );
|
|
self notify( "jgun_snd" );
|
|
}
|
|
|
|
while ( self is_jetgun_firing() )
|
|
{
|
|
jetgun_fired = 1;
|
|
self thread jetgun_fired();
|
|
view_pos = self gettagorigin( "tag_flash" );
|
|
view_angles = self gettagangles( "tag_flash" );
|
|
|
|
if ( self get_jetgun_engine_direction() < 0 )
|
|
playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ), anglestoup( view_angles ) );
|
|
else
|
|
playfx( level._effect["jetgun_smoke_cloud"], view_pos - self getplayerviewheight(), anglestoforward( view_angles ) * -1, anglestoup( view_angles ) );
|
|
|
|
wait 0.25;
|
|
}
|
|
|
|
if ( jetgun_fired == 1 )
|
|
{
|
|
self.jetsound_ent stoploopsound( 0.5 );
|
|
self.jetsound_ent playsound( "wpn_jetgun_effect_plr_end" );
|
|
self thread sound_ent_cleanup();
|
|
jetgun_fired = 0;
|
|
}
|
|
}
|
|
|
|
sound_ent_cleanup()
|
|
{
|
|
self endon( "jgun_snd" );
|
|
wait 4;
|
|
|
|
if ( isdefined( self.jetsound_ent ) )
|
|
{
|
|
self.jetsound_ent delete();
|
|
}
|
|
}
|
|
|
|
is_jetgun_firing()
|
|
{
|
|
if(!self attackButtonPressed())
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
return abs( self get_jetgun_engine_direction() ) > 0.2;
|
|
}
|
|
|
|
jetgun_check_enemies_in_range( zombie, view_pos, drag_range_squared, gib_range_squared, grind_range_squared, cylinder_radius_squared, forward_view_angles, end_pos, invert )
|
|
{
|
|
if ( !isDefined( zombie ) )
|
|
{
|
|
return;
|
|
}
|
|
if ( zombie enemy_killed_by_jetgun() )
|
|
{
|
|
return;
|
|
}
|
|
if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro )
|
|
{
|
|
return;
|
|
}
|
|
if ( isDefined( zombie.isdog ) && zombie.isdog )
|
|
{
|
|
return;
|
|
}
|
|
if ( isDefined( zombie.isscreecher ) && zombie.isscreecher )
|
|
{
|
|
return;
|
|
}
|
|
if ( isDefined( self.animname ) && self.animname == "quad_zombie" )
|
|
{
|
|
return;
|
|
}
|
|
test_origin = zombie getcentroid();
|
|
test_range_squared = distancesquared( view_pos, test_origin );
|
|
if ( test_range_squared > drag_range_squared )
|
|
{
|
|
zombie jetgun_debug_print( "range", ( 1, 0, 1 ) );
|
|
return;
|
|
}
|
|
normal = vectornormalize( test_origin - view_pos );
|
|
dot = vectordot( forward_view_angles, normal );
|
|
if ( abs( dot ) < 0.7 )
|
|
{
|
|
zombie jetgun_debug_print( "dot", ( 1, 0, 1 ) );
|
|
return;
|
|
}
|
|
radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
|
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
|
|
{
|
|
zombie jetgun_debug_print( "cylinder", ( 1, 0, 1 ) );
|
|
return;
|
|
}
|
|
if ( zombie damageconetrace( view_pos, self ) == 0 )
|
|
{
|
|
zombie jetgun_debug_print( "cone", ( 1, 0, 1 ) );
|
|
return;
|
|
}
|
|
if ( test_range_squared < grind_range_squared )
|
|
{
|
|
level.jetgun_fling_enemies[ level.jetgun_fling_enemies.size ] = zombie;
|
|
level.jetgun_grind_enemies[ level.jetgun_grind_enemies.size ] = dot < 0;
|
|
}
|
|
else
|
|
{
|
|
if ( !isDefined( zombie.ai_state ) || zombie.ai_state != "find_flesh" && zombie.ai_state != "zombieMoveOnBus" )
|
|
{
|
|
return;
|
|
}
|
|
if ( isDefined( zombie.in_the_ground ) && zombie.in_the_ground )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( test_range_squared < drag_range_squared && dot > 0 )
|
|
{
|
|
level.jetgun_drag_enemies[ level.jetgun_drag_enemies.size ] = zombie;
|
|
}
|
|
}
|
|
}
|
|
|
|
jetgun_grind_zombie( player )
|
|
{
|
|
player endon( "death" );
|
|
player endon( "disconnect" );
|
|
self endon( "death" );
|
|
if ( !isDefined( self.jetgun_grind ) )
|
|
{
|
|
self.jetgun_grind = 1;
|
|
self notify( "grinding" );
|
|
if ( is_mature() )
|
|
{
|
|
if ( isDefined( level._effect[ "zombie_guts_explosion" ] ) )
|
|
{
|
|
playfx( level._effect[ "zombie_guts_explosion" ], self gettagorigin( "J_SpineLower" ) );
|
|
}
|
|
}
|
|
self.nodeathragdoll = 1;
|
|
self.handle_death_notetracks = ::jetgun_handle_death_notetracks;
|
|
player maps\mp\zombies\_zm_score::add_to_player_score(50 * maps\mp\zombies\_zm_score::get_points_multiplier(player));
|
|
self dodamage( self.health + 666, player.origin, player );
|
|
}
|
|
}
|
|
|
|
handle_overheated_jetgun()
|
|
{
|
|
self endon( "disconnect" );
|
|
while ( 1 )
|
|
{
|
|
self waittill( "jetgun_overheated" );
|
|
|
|
if ( self getcurrentweapon() == "jetgun_zm" )
|
|
{
|
|
weapon_org = self gettagorigin( "tag_weapon" );
|
|
|
|
if ( isDefined( level.explode_overheated_jetgun ) && level.explode_overheated_jetgun )
|
|
{
|
|
self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" );
|
|
pcount = get_players().size;
|
|
pickup_time = 360 / pcount;
|
|
maps\mp\zombies\_zm_buildables::player_explode_buildable( "jetgun_zm", weapon_org, 250, 1, pickup_time );
|
|
}
|
|
else if ( isDefined( level.unbuild_overheated_jetgun ) && level.unbuild_overheated_jetgun )
|
|
{
|
|
self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" );
|
|
maps\mp\zombies\_zm_buildables::unbuild_buildable( "jetgun_zm", 1 );
|
|
self dodamage( 50, weapon_org );
|
|
}
|
|
else if ( isDefined( level.take_overheated_jetgun ) && level.take_overheated_jetgun )
|
|
{
|
|
self thread maps\mp\zombies\_zm_equipment::equipment_release( "jetgun_zm" );
|
|
self dodamage( 50, weapon_org );
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
|
|
self.jetgun_overheating = undefined;
|
|
self.jetgun_heatval = undefined;
|
|
self playsound( "wpn_jetgun_explo" );
|
|
}
|
|
}
|
|
}
|
|
|
|
jetgun_network_choke()
|
|
{
|
|
// no choke
|
|
} |