From 5b9e8634a3162be1579db198aa64a66484a80c5e Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Fri, 21 Apr 2023 02:35:51 -0700 Subject: [PATCH] Check round spawn failsafe every frame --- scripts/zm/_zm_reimagined.gsc | 1 + scripts/zm/replaced/_zm.gsc | 89 +++++++++++++++++++ scripts/zm/zm_prison/zm_prison_reimagined.gsc | 1 + scripts/zm/zm_tomb/zm_tomb_reimagined.gsc | 2 + 4 files changed, 93 insertions(+) diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index 575612c6..16e8ca8a 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -380,6 +380,7 @@ post_all_players_spawned() level.overrideplayerdamage = scripts\zm\replaced\_zm::player_damage_override; level.playerlaststand_func = scripts\zm\replaced\_zm::player_laststand; level.callbackplayerlaststand = scripts\zm\replaced\_zm::callback_playerlaststand; + level._zombies_round_spawn_failsafe = scripts\zm\replaced\_zm::round_spawn_failsafe; level.etrap_damage = maps\mp\zombies\_zm::ai_zombie_health( 255 ); level.slipgun_damage = maps\mp\zombies\_zm::ai_zombie_health( 255 ); level.tombstone_spawn_func = ::tombstone_spawn; diff --git a/scripts/zm/replaced/_zm.gsc b/scripts/zm/replaced/_zm.gsc index 58c63130..3b66c107 100644 --- a/scripts/zm/replaced/_zm.gsc +++ b/scripts/zm/replaced/_zm.gsc @@ -205,6 +205,95 @@ round_spawning() } } +round_spawn_failsafe() +{ + self endon( "death" ); + prevorigin = self.origin; + prevorigin_time = gettime(); + + while ( true ) + { + if ( isdefined( self.ignore_round_spawn_failsafe ) && self.ignore_round_spawn_failsafe ) + return; + + wait 0.05; + + if ( isdefined( self.is_inert ) && self.is_inert ) + { + prevorigin = self.origin; + prevorigin_time = gettime(); + continue; + } + + if ( isdefined( self.in_the_ground ) && self.in_the_ground ) + { + prevorigin = self.origin; + prevorigin_time = gettime(); + continue; + } + + if ( isdefined( self.in_the_ceiling ) && self.in_the_ceiling ) + { + prevorigin = self.origin; + prevorigin_time = gettime(); + continue; + } + + if ( isdefined( self.lastchunk_destroy_time ) ) + { + if ( gettime() - self.lastchunk_destroy_time < 4000 ) + { + prevorigin = self.origin; + prevorigin_time = gettime(); + continue; + } + } + + if ( self.origin[2] < level.zombie_vars["below_world_check"] ) + { + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) && !( isdefined( self.isscreecher ) && self.isscreecher ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + + if ( distancesquared( self.origin, prevorigin ) < 576 ) + { + if ( gettime() - prevorigin_time < 15000 ) + continue; + + if ( isdefined( level.put_timed_out_zombies_back_in_queue ) && level.put_timed_out_zombies_back_in_queue && !flag( "dog_round" ) ) + { + if ( !self.ignoreall && !( isdefined( self.nuked ) && self.nuked ) && !( isdefined( self.marked_for_death ) && self.marked_for_death ) && !( isdefined( self.isscreecher ) && self.isscreecher ) && ( isdefined( self.has_legs ) && self.has_legs ) && !( isdefined( self.is_brutus ) && self.is_brutus ) ) + { + level.zombie_total++; + level.zombie_total_subtract++; + } + } + + level.zombies_timeout_playspace++; + + if ( isdefined( self.is_brutus ) && self.is_brutus ) + { + self.suppress_brutus_powerup_drop = 1; + self.brutus_round_spawn_failsafe = 1; + } + + self dodamage( self.health + 100, ( 0, 0, 0 ) ); + break; + } + else + { + prevorigin = self.origin; + prevorigin_time = gettime(); + } + } +} + round_think( restart = 0 ) { level endon( "end_round_think" ); diff --git a/scripts/zm/zm_prison/zm_prison_reimagined.gsc b/scripts/zm/zm_prison/zm_prison_reimagined.gsc index 1c29bee4..9f60550e 100644 --- a/scripts/zm/zm_prison/zm_prison_reimagined.gsc +++ b/scripts/zm/zm_prison/zm_prison_reimagined.gsc @@ -84,6 +84,7 @@ init() level.special_weapon_magicbox_check = ::check_for_special_weapon_limit_exist; level.brutus_failed_paths_to_teleport = 10; + level.zombie_vars["below_world_check"] = -15000; level.zombie_powerups["meat_stink"].model_name = "t6_wpn_zmb_severedhead_world"; maps\mp\zombies\_zm::spawn_life_brush( (94, 6063, 240), 256, 256 ); diff --git a/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc b/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc index feedd5c2..de6367d2 100644 --- a/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc +++ b/scripts/zm/zm_tomb/zm_tomb_reimagined.gsc @@ -90,6 +90,8 @@ init() level.special_weapon_magicbox_check = ::tomb_special_weapon_magicbox_check; level.custom_magic_box_timer_til_despawn = ::custom_magic_box_timer_til_despawn; + level.zombie_vars["below_world_check"] = -3000; + change_stargate_teleport_return_player_angles(); level thread zombie_blood_dig_changes();