From d62c4d7967ba5d43a362d13d59c11c07fd7a641d Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Thu, 27 Jan 2022 11:17:53 -0800 Subject: [PATCH] More Jet Gun changes Kills enemies that are in the ground, traversing, or behind barriers Awards points for kills Add back no longer kills when not firing correctly Add back overheating resets the heat value to 0 --- README.md | 5 +- scripts/zm/_zm_reimagined.gsc | 26 ---- scripts/zm/replaced/_zm_weap_jetgun.gsc | 126 ++++++++++++++++++ .../zm/zm_transit/zm_transit_reimagined.gsc | 3 + 4 files changed, 133 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 907ffd0f..30df85d6 100644 --- a/README.md +++ b/README.md @@ -157,9 +157,12 @@ ### Jet Gun * Kills multiple enemies significantly faster +* Kills enemies that are in the ground, traversing, or behind barriers +* Awards points for kills * Cools down twice as fast * Cools down while not holding weapon -* Overheats while attempting to fire while meleeing +* Heats up when firing while meleeing +* No longer kills when not firing * No longer automatically switched to weapon when picked up * No longer disassembles when overheated * Weapon is taken when overheated diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index f5ac313d..349f3616 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -145,7 +145,6 @@ onplayerspawned() self thread war_machine_explode_on_impact(); self thread jetgun_heatval_changes(); - self thread jetgun_overheated_fix(); self thread additionalprimaryweapon_save_weapons(); self thread additionalprimaryweapon_restore_weapons(); @@ -208,7 +207,6 @@ post_all_players_spawned() level.limited_weapons["ray_gun_zm"] = undefined; level.limited_weapons["raygun_mark2_zm"] = 1; level.zombie_vars["emp_stun_range"] = 420; - //level.zombies_vars["jetgun_grind_range"] = 256; // TODO: get this to work level.zombie_vars["slipgun_reslip_rate"] = 0; level.zombie_ai_limit_screecher = 1; level.explode_overheated_jetgun = 0; @@ -3637,30 +3635,6 @@ jetgun_heatval_changes() } } -jetgun_overheated_fix() -{ - self endon( "disconnect" ); - - if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "jetgun_zm" ) ) - { - return; - } - - while ( 1 ) - { - self waittill( "jetgun_overheated" ); - - weapon_org = self gettagorigin( "tag_weapon" ); - self dodamage( 50, weapon_org ); - self playsound( "wpn_jetgun_explo" ); - - wait 0.05; - - self.jetgun_heatval = 100; - self.jetgun_overheating = 0; - } -} - jetgun_remove_forced_weapon_switch() { foreach (buildable in level.zombie_include_buildables) diff --git a/scripts/zm/replaced/_zm_weap_jetgun.gsc b/scripts/zm/replaced/_zm_weap_jetgun.gsc index 4ca0af57..7f28745f 100644 --- a/scripts/zm/replaced/_zm_weap_jetgun.gsc +++ b/scripts/zm/replaced/_zm_weap_jetgun.gsc @@ -3,6 +3,90 @@ #include maps\mp\zombies\_zm_utility; #include maps/mp/zombies/_zm_weap_jetgun; +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" ); @@ -21,10 +105,52 @@ jetgun_grind_zombie( player ) } 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 diff --git a/scripts/zm/zm_transit/zm_transit_reimagined.gsc b/scripts/zm/zm_transit/zm_transit_reimagined.gsc index 33e468fa..0838e463 100644 --- a/scripts/zm/zm_transit/zm_transit_reimagined.gsc +++ b/scripts/zm/zm_transit/zm_transit_reimagined.gsc @@ -16,7 +16,10 @@ main() replaceFunc(maps/mp/zm_transit::lava_damage_depot, scripts/zm/replaced/zm_transit::lava_damage_depot); replaceFunc(maps/mp/zm_transit_gamemodes::init, scripts/zm/replaced/zm_transit_gamemodes::init); replaceFunc(maps/mp/zm_transit_utility::solo_tombstone_removal, scripts/zm/replaced/zm_transit_utility::solo_tombstone_removal); + replaceFunc(maps/mp/zombies/_zm_weap_jetgun::is_jetgun_firing, scripts/zm/replaced/_zm_weap_jetgun::is_jetgun_firing); + replaceFunc(maps/mp/zombies/_zm_weap_jetgun::jetgun_check_enemies_in_range, scripts/zm/replaced/_zm_weap_jetgun::jetgun_check_enemies_in_range); replaceFunc(maps/mp/zombies/_zm_weap_jetgun::jetgun_grind_zombie, scripts/zm/replaced/_zm_weap_jetgun::jetgun_grind_zombie); + replaceFunc(maps/mp/zombies/_zm_weap_jetgun::handle_overheated_jetgun, scripts/zm/replaced/_zm_weap_jetgun::handle_overheated_jetgun); replaceFunc(maps/mp/zombies/_zm_weap_jetgun::jetgun_network_choke, scripts/zm/replaced/_zm_weap_jetgun::jetgun_network_choke); replaceFunc(maps/mp/zombies/_zm_weap_emp_bomb::emp_detonate, scripts/zm/replaced/_zm_weap_emp_bomb::emp_detonate); replaceFunc(maps/mp/zombies/_zm_equip_electrictrap::startelectrictrapdeploy, scripts/zm/replaced/_zm_equip_electrictrap::startelectrictrapdeploy);