From 2f7dd1a1ec1d1f0172cf2f8b35dfdb6a61cbdc11 Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Tue, 28 Mar 2023 13:36:22 -0700 Subject: [PATCH] Denizens: spawn 1 per player in fog --- README.md | 2 +- scripts/zm/_zm_reimagined.gsc | 1 - scripts/zm/replaced/_zm_ai_screecher.gsc | 106 ++++++++++++++++++ .../zm/zm_transit/zm_transit_reimagined.gsc | 1 + 4 files changed, 108 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 265b1f15..e7c2248a 100644 --- a/README.md +++ b/README.md @@ -77,7 +77,7 @@ * All body shot kills award 50 points ### Denizens -* Decreased maximum amount that can be spawned at once from 2 to 1 +* Changed maximum amount that can be spawned at once from 2 total to 1 per player in the fog * Decreased number of melees to kill from 5 to 3 * Decreased number of melees to kill with Bowie Knife from 3 to 2 * Decreased number of melees to kill with Galvaknuckles from 2 to 1 diff --git a/scripts/zm/_zm_reimagined.gsc b/scripts/zm/_zm_reimagined.gsc index 20b7a6ee..4bf953fb 100644 --- a/scripts/zm/_zm_reimagined.gsc +++ b/scripts/zm/_zm_reimagined.gsc @@ -251,7 +251,6 @@ post_all_players_spawned() level.zombie_vars["riotshield_hit_points"] = 1500; level.zombie_vars["emp_stun_range"] = 420; level.zombie_vars["slipgun_reslip_rate"] = 0; - level.zombie_ai_limit_screecher = 1; level.explode_overheated_jetgun = 0; level.unbuild_overheated_jetgun = 0; level.take_overheated_jetgun = 1; diff --git a/scripts/zm/replaced/_zm_ai_screecher.gsc b/scripts/zm/replaced/_zm_ai_screecher.gsc index 9d5dfb3b..415d14c2 100644 --- a/scripts/zm/replaced/_zm_ai_screecher.gsc +++ b/scripts/zm/replaced/_zm_ai_screecher.gsc @@ -10,6 +10,112 @@ #include maps\mp\zombies\_zm_audio; #include maps\mp\zombies\_zm_stats; +screecher_spawning_logic() +{ + level endon( "intermission" ); + + if ( level.intermission ) + return; + + if ( level.screecher_spawners.size < 1 ) + { + return; + } + + while ( true ) + { + while ( !isdefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 ) + wait 0.1; + + while ( getdvarint( _hash_B0C0D38F ) ) + wait 0.1; + + if ( !flag( "spawn_zombies" ) ) + flag_wait( "spawn_zombies" ); + + valid_players_in_screecher_zone = 0; + valid_players = []; + + while ( valid_players_in_screecher_zone <= level.zombie_screecher_count ) + { + players = getplayers(); + valid_players_in_screecher_zone = 0; + + for ( p = 0; p < players.size; p++ ) + { + if ( is_player_valid( players[p] ) && player_in_screecher_zone( players[p] ) && !isdefined( players[p].screecher ) ) + { + valid_players_in_screecher_zone++; + valid_players[valid_players.size] = players[p]; + } + } + + wait 0.1; + } + + if ( !isdefined( level.zombie_screecher_locations ) || level.zombie_screecher_locations.size <= 0 ) + continue; + + valid_players = array_randomize( valid_players ); + + spawn_points = get_array_of_closest( valid_players[0].origin, level.zombie_screecher_locations ); + spawn_point = undefined; + + if ( !isdefined( spawn_points ) || spawn_points.size == 0 ) + { + wait 0.1; + continue; + } + + if ( !isdefined( level.last_spawn ) ) + { + level.last_spawn_index = 0; + level.last_spawn = []; + level.last_spawn[level.last_spawn_index] = spawn_points[0]; + level.last_spawn_index = 1; + spawn_point = spawn_points[0]; + } + else + { + foreach ( point in spawn_points ) + { + if ( point == level.last_spawn[0] ) + continue; + + if ( isdefined( level.last_spawn[1] ) && point == level.last_spawn[1] ) + continue; + + spawn_point = point; + level.last_spawn[level.last_spawn_index] = spawn_point; + level.last_spawn_index++; + + if ( level.last_spawn_index > 1 ) + level.last_spawn_index = 0; + + break; + } + } + + if ( !isdefined( spawn_point ) ) + spawn_point = spawn_points[0]; + + if ( isdefined( level.screecher_spawners ) ) + { + spawner = random( level.screecher_spawners ); + ai = spawn_zombie( spawner, spawner.targetname, spawn_point ); + } + + if ( isdefined( ai ) ) + { + ai.spawn_point = spawn_point; + level.zombie_screecher_count++; + } + + wait( level.zombie_vars["zombie_spawn_delay"] ); + wait 0.1; + } +} + screecher_melee_damage( player ) { melee_score = 0; diff --git a/scripts/zm/zm_transit/zm_transit_reimagined.gsc b/scripts/zm/zm_transit/zm_transit_reimagined.gsc index 0c908d70..34a3d4a7 100644 --- a/scripts/zm/zm_transit/zm_transit_reimagined.gsc +++ b/scripts/zm/zm_transit/zm_transit_reimagined.gsc @@ -23,6 +23,7 @@ main() replaceFunc(maps\mp\zm_transit_utility::solo_tombstone_removal, scripts\zm\replaced\zm_transit_utility::solo_tombstone_removal); replaceFunc(maps\mp\zm_transit_bus::bussetup, scripts\zm\replaced\zm_transit_bus::bussetup); replaceFunc(maps\mp\zm_transit_bus::busscheduleadd, scripts\zm\replaced\zm_transit_bus::busscheduleadd); + replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_spawning_logic, scripts\zm\replaced\_zm_ai_screecher::screecher_spawning_logic); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_melee_damage, scripts\zm\replaced\_zm_ai_screecher::screecher_melee_damage); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_detach, scripts\zm\replaced\_zm_ai_screecher::screecher_detach); replaceFunc(maps\mp\zombies\_zm_ai_screecher::screecher_cleanup, scripts\zm\replaced\_zm_ai_screecher::screecher_cleanup);