diff --git a/README.md b/README.md index f9c9a684..39301947 100644 --- a/README.md +++ b/README.md @@ -53,6 +53,7 @@ * Decreased low health regeneration delay from 5 seconds to 4 seconds * Normal health regeneration rate is no longer instant * Changed health regeneration rate to 100 health per second (normally fully restored health in 0.5 seconds) +* Changed low health threshold from 20% of player's max health to 50 health * Fall damage no longer increases when max health is increased * Added blood fx when at or below 20% health * Removed blur after getting damaged @@ -77,9 +78,10 @@ ## Zombies * Health capped at 100,000 +* Decreased damage from 60 to 50 +* Changed height to 60 (normally either 48 or 72) * Amount of zombies scales linearly with the amount of players * Zombies that are deleted due to being too far away always respawn -* Changed height to 60 (normally either 48 or 72) * Attracted towards points of interest immediately * Removed walkers in high rounds * Removed headless zombies diff --git a/scripts/zm/replaced/_zm_playerhealth.gsc b/scripts/zm/replaced/_zm_playerhealth.gsc index 3b9e0d7d..c0f37989 100644 --- a/scripts/zm/replaced/_zm_playerhealth.gsc +++ b/scripts/zm/replaced/_zm_playerhealth.gsc @@ -67,7 +67,7 @@ playerhealthregen() longregendelay *= 0.75; } - if ( health_ratio > healthoverlaycutoff ) + if ( self.health > 50 ) { if ( self player_flag( "player_has_red_flashing_overlay" ) ) { @@ -90,7 +90,7 @@ playerhealthregen() wasveryhurt = veryhurt; - if ( health_ratio <= healthoverlaycutoff ) + if ( self.health <= 50 ) { veryhurt = 1; if ( !wasveryhurt ) diff --git a/scripts/zm/replaced/zm_tomb_capture_zones.gsc b/scripts/zm/replaced/zm_tomb_capture_zones.gsc index 1775490e..884ee255 100644 --- a/scripts/zm/replaced/zm_tomb_capture_zones.gsc +++ b/scripts/zm/replaced/zm_tomb_capture_zones.gsc @@ -23,7 +23,7 @@ setup_capture_zones() { spawner_capture_zombie = getent( "capture_zombie_spawner", "targetname" ); - spawner_capture_zombie add_spawn_function( ::capture_zombie_spawn_init ); + spawner_capture_zombie add_spawn_function( scripts\zm\replaced\zm_tomb_utility::capture_zombie_spawn_init ); a_s_generator = getstructarray( "s_generator", "targetname" ); registerclientfield( "world", "packapunch_anim", 14000, 3, "int" ); registerclientfield( "actor", "zone_capture_zombie", 14000, 1, "int" ); diff --git a/scripts/zm/replaced/zm_tomb_utility.gsc b/scripts/zm/replaced/zm_tomb_utility.gsc index ed96062d..2ccc13e8 100644 --- a/scripts/zm/replaced/zm_tomb_utility.gsc +++ b/scripts/zm/replaced/zm_tomb_utility.gsc @@ -18,6 +18,96 @@ #include maps\mp\zm_tomb_craftables; #include maps\mp\zm_tomb_utility; +capture_zombie_spawn_init( animname_set = 0 ) +{ + self.targetname = "capture_zombie_ai"; + + if ( !animname_set ) + self.animname = "zombie"; + + self.sndname = "capzomb"; + + if ( isdefined( get_gamemode_var( "pre_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "pre_init_zombie_spawn_func" ) ]](); + + self thread play_ambient_zombie_vocals(); + self.zmb_vocals_attack = "zmb_vocals_capzomb_attack"; + self.no_damage_points = 1; + self.deathpoints_already_given = 1; + self.ignore_enemy_count = 1; + self.ignoreall = 1; + self.ignoreme = 1; + self.allowdeath = 1; + self.force_gib = 1; + self.is_zombie = 1; + self.has_legs = 1; + self allowedstances( "stand" ); + self.zombie_damaged_by_bar_knockdown = 0; + self.gibbed = 0; + self.head_gibbed = 0; + self.disablearrivals = 1; + self.disableexits = 1; + self.grenadeawareness = 0; + self.badplaceawareness = 0; + self.ignoresuppression = 1; + self.suppressionthreshold = 1; + self.nododgemove = 1; + self.dontshootwhilemoving = 1; + self.pathenemylookahead = 0; + self.badplaceawareness = 0; + self.chatinitialized = 0; + self.a.disablepain = 1; + self disable_react(); + + if ( isdefined( level.zombie_health ) ) + { + self.maxhealth = level.zombie_health; + + if ( isdefined( level.zombie_respawned_health ) && level.zombie_respawned_health.size > 0 ) + { + self.health = level.zombie_respawned_health[0]; + arrayremovevalue( level.zombie_respawned_health, level.zombie_respawned_health[0] ); + } + else + self.health = level.zombie_health; + } + else + { + self.maxhealth = level.zombie_vars["zombie_health_start"]; + self.health = self.maxhealth; + } + + self.freezegun_damage = 0; + self.dropweapon = 0; + level thread zombie_death_event( self ); + self set_zombie_run_cycle(); + self thread dug_zombie_think(); + self thread zombie_gib_on_damage(); + self thread zombie_damage_failsafe(); + self thread enemy_death_detection(); + + if ( !isdefined( self.no_eye_glow ) || !self.no_eye_glow ) + { + if ( !( isdefined( self.is_inert ) && self.is_inert ) ) + self thread delayed_zombie_eye_glow(); + } + + self.deathfunction = ::zombie_death_animscript; + self.flame_damage_time = 0; + self.meleedamage = 50; + self.no_powerups = 1; + self zombie_history( "zombie_spawn_init -> Spawned = " + self.origin ); + self.thundergun_knockdown_func = level.basic_zombie_thundergun_knockdown; + self.tesla_head_gib_func = ::zombie_tesla_head_gib; + self.team = level.zombie_team; + + if ( isdefined( get_gamemode_var( "post_init_zombie_spawn_func" ) ) ) + self [[ get_gamemode_var( "post_init_zombie_spawn_func" ) ]](); + + self.zombie_init_done = 1; + self notify( "zombie_init_done" ); +} + update_staff_accessories( n_element_index ) { cur_weapon = self get_player_melee_weapon(); diff --git a/scripts/zm/zm_buried/zm_buried_reimagined.gsc b/scripts/zm/zm_buried/zm_buried_reimagined.gsc index 89deeda2..2f99eb29 100644 --- a/scripts/zm/zm_buried/zm_buried_reimagined.gsc +++ b/scripts/zm/zm_buried/zm_buried_reimagined.gsc @@ -102,6 +102,7 @@ init() zombie_init_done() { + self.meleedamage = 50; self.allowpain = 0; self.zombie_path_bad = 0; self thread maps\mp\zm_buried_distance_tracking::escaped_zombies_cleanup_init(); diff --git a/scripts/zm/zm_highrise/zm_highrise_reimagined.gsc b/scripts/zm/zm_highrise/zm_highrise_reimagined.gsc index 1a051f99..d63e117b 100644 --- a/scripts/zm/zm_highrise/zm_highrise_reimagined.gsc +++ b/scripts/zm/zm_highrise/zm_highrise_reimagined.gsc @@ -100,6 +100,7 @@ door_changes() zombie_init_done() { + self.meleedamage = 50; self.allowpain = 0; self.zombie_path_bad = 0; self thread maps\mp\zm_highrise_distance_tracking::escaped_zombies_cleanup_init(); diff --git a/scripts/zm/zm_nuked/zm_nuked_reimagined.gsc b/scripts/zm/zm_nuked/zm_nuked_reimagined.gsc index 7272a957..b4df5549 100644 --- a/scripts/zm/zm_nuked/zm_nuked_reimagined.gsc +++ b/scripts/zm/zm_nuked/zm_nuked_reimagined.gsc @@ -18,6 +18,7 @@ init() zombie_init_done() { + self.meleedamage = 50; self.allowpain = 0; if ( isDefined( self.script_parameters ) && self.script_parameters == "crater" ) { diff --git a/scripts/zm/zm_prison/zm_prison_reimagined.gsc b/scripts/zm/zm_prison/zm_prison_reimagined.gsc index 27fa6892..4daa86a1 100644 --- a/scripts/zm/zm_prison/zm_prison_reimagined.gsc +++ b/scripts/zm/zm_prison/zm_prison_reimagined.gsc @@ -122,6 +122,7 @@ door_changes() zombie_init_done() { + self.meleedamage = 50; self.allowpain = 0; self setphysparams( 15, 0, 48 ); } diff --git a/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc b/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc index c17254f4..8e0a6552 100644 --- a/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc +++ b/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc @@ -116,6 +116,7 @@ init() zombie_init_done() { + self.meleedamage = 50; self.allowpain = 0; self thread maps\mp\zm_tomb_distance_tracking::escaped_zombies_cleanup_init(); self setphysparams( 15, 0, 48 ); diff --git a/scripts/zm/zm_transit/zm_transit_reimagined.gsc b/scripts/zm/zm_transit/zm_transit_reimagined.gsc index 3cc9dac2..2c397917 100644 --- a/scripts/zm/zm_transit/zm_transit_reimagined.gsc +++ b/scripts/zm/zm_transit/zm_transit_reimagined.gsc @@ -127,6 +127,7 @@ grief_include_weapons() zombie_init_done() { + self.meleedamage = 50; self.allowpain = 0; self setphysparams( 15, 0, 48 ); }