diff --git a/README.md b/README.md index c5ca51f0..fcb6406e 100644 --- a/README.md +++ b/README.md @@ -185,6 +185,9 @@ * Kills on any round (normally stops killing after round 100) * Removed additional goo created by chain kills +### Paralyzer +* Kills on any round + ### Blundergat * Kills on any round diff --git a/scripts/zm/replaced/_zm_weap_slowgun.gsc b/scripts/zm/replaced/_zm_weap_slowgun.gsc index c7fce1c1..5f1c7ca4 100644 --- a/scripts/zm/replaced/_zm_weap_slowgun.gsc +++ b/scripts/zm/replaced/_zm_weap_slowgun.gsc @@ -2,6 +2,94 @@ #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; #include maps\mp\zombies\_zm_weap_slowgun; +#include maps\mp\zombies\_zm_weapons; +#include maps\mp\zombies\_zm_spawner; +#include maps\mp\zombies\_zm_powerups; +#include maps\mp\zombies\_zm_score; +#include maps\mp\zombies\_zm_audio; + +init() +{ + if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "slowgun_zm" ) ) + return; + + registerclientfield( "actor", "slowgun_fx", 12000, 3, "int" ); + registerclientfield( "actor", "anim_rate", 7000, 5, "float" ); + registerclientfield( "allplayers", "anim_rate", 7000, 5, "float" ); + registerclientfield( "toplayer", "sndParalyzerLoop", 12000, 1, "int" ); + registerclientfield( "toplayer", "slowgun_fx", 12000, 1, "int" ); + level.sliquifier_distance_checks = 0; + maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::slowgun_on_zombie_spawned ); + maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::slowgun_zombie_damage_response ); + maps\mp\zombies\_zm_spawner::register_zombie_death_animscript_callback( ::slowgun_zombie_death_response ); + level._effect["zombie_slowgun_explosion"] = loadfx( "weapon/paralyzer/fx_paralyzer_body_disintegrate" ); + level._effect["zombie_slowgun_explosion_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_body_disintegrate_ug" ); + level._effect["zombie_slowgun_sizzle"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_dmg" ); + level._effect["zombie_slowgun_sizzle_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_dmg_ug" ); + level._effect["player_slowgun_sizzle"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm" ); + level._effect["player_slowgun_sizzle_ug"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm" ); + level._effect["player_slowgun_sizzle_1st"] = loadfx( "weapon/paralyzer/fx_paralyzer_hit_noharm_view" ); + onplayerconnect_callback( ::slowgun_player_connect ); + level.slowgun_damage = 40; + level.slowgun_damage_ug = 60; + level.slowgun_damage_mod = "MOD_PROJECTILE_SPLASH"; + precacherumble( "damage_heavy" ); +} + +slowgun_on_zombie_spawned() +{ + self set_anim_rate( 1.0 ); + self.paralyzer_hit_callback = ::zombie_paralyzed; + self.paralyzer_damaged_multiplier = 1; + self.paralyzer_score_time_ms = gettime(); + self.paralyzer_slowtime = 0; + self setclientfield( "slowgun_fx", 0 ); +} + +zombie_paralyzed( player, upgraded ) +{ + if ( !can_be_paralyzed( self ) ) + return; + + insta = player maps\mp\zombies\_zm_powerups::is_insta_kill_active(); + + if ( upgraded ) + self setclientfield( "slowgun_fx", 5 ); + else + self setclientfield( "slowgun_fx", 1 ); + + if ( self.slowgun_anim_rate <= 0.1 || insta && self.slowgun_anim_rate <= 0.5 ) + { + if ( upgraded ) + damage = level.slowgun_damage_ug; + else + damage = level.slowgun_damage; + + damage *= randomfloatrange( 0.667, 1.5 ); + damage *= self.paralyzer_damaged_multiplier; + + if ( !isdefined( self.paralyzer_damage ) ) + self.paralyzer_damage = 0; + + // if ( self.paralyzer_damage > 47073 ) + // damage *= 47073 / self.paralyzer_damage; + + self.paralyzer_damage += damage; + + if ( insta ) + damage = self.health + 666; + + if ( isalive( self ) ) + self dodamage( damage, player.origin, player, player, "none", level.slowgun_damage_mod, 0, "slowgun_zm" ); + + self.paralyzer_damaged_multiplier *= 1.15; + self.paralyzer_damaged_multiplier = min( self.paralyzer_damaged_multiplier, 50 ); + } + else + self.paralyzer_damaged_multiplier = 1; + + self zombie_slow_for_time( 0.2 ); +} watch_reset_anim_rate() { diff --git a/scripts/zm/zm_buried/zm_buried_reimagined.gsc b/scripts/zm/zm_buried/zm_buried_reimagined.gsc index a24b811e..acd9e651 100644 --- a/scripts/zm/zm_buried/zm_buried_reimagined.gsc +++ b/scripts/zm/zm_buried/zm_buried_reimagined.gsc @@ -16,6 +16,8 @@ main() replaceFunc(maps\mp\zombies\_zm_buildables_pooled::add_buildable_to_pool, scripts\zm\replaced\_zm_buildables_pooled::add_buildable_to_pool); replaceFunc(maps\mp\zombies\_zm_equip_subwoofer::startsubwooferdecay, scripts\zm\replaced\_zm_equip_subwoofer::startsubwooferdecay); replaceFunc(maps\mp\zombies\_zm_equip_subwoofer::subwoofer_network_choke, scripts\zm\replaced\_zm_equip_subwoofer::subwoofer_network_choke); + replaceFunc(maps\mp\zombies\_zm_weap_slowgun::init, scripts\zm\replaced\_zm_weap_slowgun::init); + replaceFunc(maps\mp\zombies\_zm_weap_slowgun::zombie_paralyzed, scripts\zm\replaced\_zm_weap_slowgun::zombie_paralyzed); replaceFunc(maps\mp\zombies\_zm_weap_slowgun::watch_reset_anim_rate, scripts\zm\replaced\_zm_weap_slowgun::watch_reset_anim_rate); replaceFunc(maps\mp\zombies\_zm_banking::init, scripts\zm\replaced\_zm_banking::init); replaceFunc(maps\mp\zombies\_zm_banking::bank_deposit_box, scripts\zm\replaced\_zm_banking::bank_deposit_box);