1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 21:59:49 -05:00
BO2-Reimagined/scripts/zm/replaced/_zm_weap_jetgun.gsc
2023-12-16 21:11:47 -08:00

252 lines
5.6 KiB
Plaintext

#include maps\mp\zombies\_zm_weap_jetgun;
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
watch_overheat()
{
self endon("death_or_disconnect");
self endon("weapon_change");
while (true)
{
if (self getcurrentweapon() == "jetgun_zm")
{
overheating = self isweaponoverheating(0);
heat = self isweaponoverheating(1);
self.jetgun_overheating = overheating;
self.jetgun_heatval = heat;
if (overheating)
self notify("jetgun_overheated");
if (heat > 75)
self thread play_overheat_fx();
}
wait 0.05;
}
}
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
}