From 6a8fdc0e93b2919a8506f89b9181074411fef342 Mon Sep 17 00:00:00 2001 From: JezuzLizard Date: Thu, 8 Feb 2024 02:00:17 -0800 Subject: [PATCH] Fix panzer errors. --- .gitignore | 3 +- .../clientscripts/mp/zombies/_zm_ai_mechz.csc | 10 ++ zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc | 2 +- zm_ai_pack/maps/mp/zombies/_zm_ai_mechz.gsc | 23 +++- .../maps/mp/zombies/_zm_ai_mechz_ft.gsc | 68 +++++++++- zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.csc | 73 +++++++++-- zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc | 122 +++++++++++++----- zm_ai_pack/zone_source/mod.zone | 2 +- .../zone_source/tomb/zm_tomb_mech_zombie.zone | 3 +- 9 files changed, 248 insertions(+), 58 deletions(-) diff --git a/.gitignore b/.gitignore index cb01fab..e957b54 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ *.ff *.iwd *.sabl -*.sabs \ No newline at end of file +*.sabs +*.zip \ No newline at end of file diff --git a/zm_ai_pack/clientscripts/mp/zombies/_zm_ai_mechz.csc b/zm_ai_pack/clientscripts/mp/zombies/_zm_ai_mechz.csc index 1c66716..fba75d0 100644 --- a/zm_ai_pack/clientscripts/mp/zombies/_zm_ai_mechz.csc +++ b/zm_ai_pack/clientscripts/mp/zombies/_zm_ai_mechz.csc @@ -73,6 +73,16 @@ main() level._effect["mech_footstep_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_foot_step_steam" ); level._effect["mech_exhaust_smoke"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_exhaust_smoke" ); init_animtree(); + scripts\zm\zm_ai_pack_mod_main::add_visionset_callback( ::register_burn_overlay ); +} + +register_burn_overlay() +{ + if ( getDvar( "mapname" ) == "zm_transit" || getDvar( "mapname" ) == "zm_tomb" ) + { + return; + } + clientscripts\mp\_visionset_mgr::vsmgr_register_overlay_info_style_burn( "zm_transit_burn", 14000, 15, 2 ); } init() diff --git a/zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc b/zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc index 0541bec..5187e18 100644 --- a/zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc +++ b/zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc @@ -44,6 +44,7 @@ precache() main() { + precacherumble( "brutus_footsteps" ); level._effect["brutus_flashlight"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_light" ); level._effect["brutus_spawn"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_spawn" ); level._effect["brutus_death"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brut_spawn" ); @@ -899,7 +900,6 @@ wait_on_box_alarm() while ( true ) { self.zbarrier waittill( "randomization_done" ); - level notify( "spawn_brutus", 1 ); level.num_pulls_since_brutus_spawn++; if ( level.brutus_in_grief ) diff --git a/zm_ai_pack/maps/mp/zombies/_zm_ai_mechz.gsc b/zm_ai_pack/maps/mp/zombies/_zm_ai_mechz.gsc index 1f089f2..639303a 100644 --- a/zm_ai_pack/maps/mp/zombies/_zm_ai_mechz.gsc +++ b/zm_ai_pack/maps/mp/zombies/_zm_ai_mechz.gsc @@ -52,10 +52,31 @@ register_clientfields() registerclientfield( "actor", "anim_rate", 14000, 2, "float" ); } +register_burn_overlay() +{ + if ( getDvar( "mapname" ) == "zm_tomb" || getDvar( "mapname" ) == "zm_transit" ) + { + return; + } + level.zm_transit_burn_max_duration = 2; + + if ( !isdefined( level.vsmgr_prio_overlay_zm_transit_burn ) ) + level.vsmgr_prio_overlay_zm_transit_burn = 20; + + maps\mp\_visionset_mgr::vsmgr_register_info( "overlay", "zm_transit_burn", 14000, level.vsmgr_prio_overlay_zm_transit_burn, 15, 1, maps\mp\_visionset_mgr::vsmgr_duration_lerp_thread_per_player, 0 ); +} + main() { register_clientfields(); + level._effect["mechz_death"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_death" ); + level._effect["mechz_sparks"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_sparks" ); + level._effect["mechz_steam"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_dmg_steam" ); + level._effect["mechz_claw"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_claw" ); + level._effect["mechz_claw_arm"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_wpn_source" ); + level._effect["mech_booster_landing"] = loadfx( "maps/zombie_tomb/fx_tomb_mech_jump_landing" ); precache(); + scripts\zm\zm_ai_pack_mod_main::add_visionset_callback( ::register_burn_overlay ); } #using_animtree("mechz_claw"); @@ -335,7 +356,7 @@ mechz_round_tracker() while ( !isdefined( level.zombie_mechz_locations ) ) wait 0.05; - if ( getDvar( "mapname" == "zm_tomb" ) ) + if ( getDvar( "mapname" ) == "zm_tomb" ) { flag_wait( "activate_zone_nml" ); } diff --git a/zm_ai_pack/maps/mp/zombies/_zm_ai_mechz_ft.gsc b/zm_ai_pack/maps/mp/zombies/_zm_ai_mechz_ft.gsc index de5d24b..f275aca 100644 --- a/zm_ai_pack/maps/mp/zombies/_zm_ai_mechz_ft.gsc +++ b/zm_ai_pack/maps/mp/zombies/_zm_ai_mechz_ft.gsc @@ -31,7 +31,7 @@ mechz_flamethrower_initial_setup() self.flamethrower_trigger = get_flamethrower_trigger(); - if ( !isdefined( self.flamethrower_trigger ) ) + if ( !isdefined( self.flamethrower_trigger ) && getDvar( "mapname" ) == "zm_tomb" ) { /# println( "Error: No free flamethrower triggers! Make sure you haven't spawned more than 4 mech zombies" ); @@ -39,9 +39,13 @@ mechz_flamethrower_initial_setup() return; } - self.flamethrower_trigger.origin = self gettagorigin( "tag_flamethrower_FX" ); - self.flamethrower_trigger.angles = self gettagangles( "tag_flamethrower_FX" ); - self.flamethrower_trigger linkto( self, "tag_flamethrower_FX" ); + if ( getDvar( "mapname" ) == "zm_tomb" ) + { + self.flamethrower_trigger.origin = self gettagorigin( "tag_flamethrower_FX" ); + self.flamethrower_trigger.angles = self gettagangles( "tag_flamethrower_FX" ); + self.flamethrower_trigger linkto( self, "tag_flamethrower_FX" ); + } + self thread mechz_watch_for_flamethrower_damage(); } @@ -188,10 +192,56 @@ mechz_stop_firing_watcher() self.firing = 0; } +// credit to shippuden1592 for the original code +hit_by_flamethrower( mechz ) +{ + dist = distance(self.origin, mechz.origin); + dirTo = self.origin - mechz.flamethrower_fx.origin; + dirTo = vectornormalize(dirTo); + mechDir = anglestoforward(mechz.flamethrower_fx.angles + (180,0,0)); + dot = vectordot(dirTo, mechDir); + + if ( isDefined( self.is_zombie ) && self.is_zombie ) + { + if ( dot < -0.85 && dist < 300 ) + { + return true; + } + } + else if ( dot < -0.85 && is_player_valid( self ) && BulletTracePassed( mechz GetEye(), self GetEye(), false, undefined) && dist < 300 ) + { + return true; + } + + return false; +} + +mech_flamethrower_fx() +{ + self.flamethrower_fx = spawn("script_model", self GetTagOrigin("tag_flamethrower_FX")); + self.flamethrower_fx setmodel("tag_origin"); + self.flamethrower_fx.angles = self GetTagAngles("tag_flamethrower_FX"); + self.flamethrower_fx linkto(self, "tag_flamethrower_FX"); + ft = self.flamethrower_fx; + + self waittill( "death" ); + + if ( isDefined( ft ) ) + { + ft unlink(); + ft delete(); + } +} + mechz_watch_for_flamethrower_damage() { self endon( "death" ); + if ( level.script != "zm_tomb" ) + { + self thread mech_flamethrower_fx(); + } + entity_on_tank_func = getFunction( "maps/mp/zm_tomb_tank", "entity_on_tank" ); while ( true ) @@ -209,8 +259,11 @@ mechz_watch_for_flamethrower_damage() { if ( !( isdefined( players[i].is_burning ) && players[i].is_burning ) ) { - if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && players[i] [[ entity_on_tank_func ]]() || players[i] istouching( self.flamethrower_trigger ) ) + if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && players[i] [[ entity_on_tank_func ]]() + || isDefined( self.flamethrower_trigger ) && players[i] istouching( self.flamethrower_trigger ) || level.script != "zm_tomb" && players[ i ] hit_by_flamethrower( self ) ) + { players[i] thread player_flame_damage(); + } } } @@ -224,7 +277,8 @@ mechz_watch_for_flamethrower_damage() if ( isdefined( zombies[i].on_fire ) && zombies[i].on_fire ) continue; - if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && zombies[i] [[ entity_on_tank_func ]]() || zombies[i] istouching( self.flamethrower_trigger ) ) + if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && zombies[i] [[ entity_on_tank_func ]]() + || isDefined( self.flamethrower_trigger ) && zombies[i] istouching( self.flamethrower_trigger ) || level.script != "zm_tomb" && zombies[ i ] hit_by_flamethrower( self ) ) { zombies[i].on_fire = 1; zombies[i] promote_to_explosive(); @@ -492,7 +546,7 @@ mechz_do_flamethrower_attack( tank_sweep ) self.last_flamethrower_time = gettime(); self thread mechz_kill_flamethrower_watcher(); - if ( !isdefined( self.flamethrower_trigger ) ) + if ( !isdefined( self.flamethrower_trigger ) && !isDefined( self.flamethrower_fx ) ) self mechz_flamethrower_initial_setup(); n_nearby_enemies = 0; diff --git a/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.csc b/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.csc index ff7d280..3fd3eee 100644 --- a/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.csc +++ b/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.csc @@ -1,19 +1,25 @@ +#include clientscripts\mp\zombies\_zm_ai_avogadro; +#include clientscripts\mp\zombies\_zm_ai_screecher; +#include clientscripts\mp\zombies\_zm_ai_ghost; +#include clientscripts\mp\zombies\_zm_ai_brutus; +#include clientscripts\mp\zombies\_zm_ai_mechz; main() { + replaceFunc( clientscripts\mp\_visionset_mgr::init, ::visionset_mgr_init_override ); level.script = toLower( getDvar( "mapname" ) ); level.gametype = toLower( getDvar( "g_gametype" ) ); level.ai_data = []; - level.ai_data[ "avogadro" ] = spawnStruct(); - level.ai_data[ "avogadro" ].main = clientscripts\mp\zombies\_zm_ai_avogadro::main; - level.ai_data[ "avogadro" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); - level.ai_data[ "screecher" ] = spawnStruct(); - level.ai_data[ "screecher" ].main = clientscripts\mp\zombies\_zm_ai_screecher::main; - level.ai_data[ "screecher" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); - level.ai_data[ "ghost" ] = spawnStruct(); - level.ai_data[ "ghost" ].main = clientscripts\mp\zombies\_zm_ai_ghost::main; - level.ai_data[ "ghost" ].should_execute = !( level.script == "zm_buried" && level.gametype == "zclassic" ); + // level.ai_data[ "avogadro" ] = spawnStruct(); + // level.ai_data[ "avogadro" ].main = clientscripts\mp\zombies\_zm_ai_avogadro::main; + // level.ai_data[ "avogadro" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); + // level.ai_data[ "screecher" ] = spawnStruct(); + // level.ai_data[ "screecher" ].main = clientscripts\mp\zombies\_zm_ai_screecher::main; + // level.ai_data[ "screecher" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); + // level.ai_data[ "ghost" ] = spawnStruct(); + // level.ai_data[ "ghost" ].main = clientscripts\mp\zombies\_zm_ai_ghost::main; + // level.ai_data[ "ghost" ].should_execute = !( level.script == "zm_buried" && level.gametype == "zclassic" ); level.ai_data[ "brutus" ] = spawnStruct(); level.ai_data[ "brutus" ].main = clientscripts\mp\zombies\_zm_ai_brutus::main; level.ai_data[ "brutus" ].should_execute = level.script != "zm_prison"; @@ -22,12 +28,12 @@ main() level.ai_data[ "mechz" ].should_execute = level.script != "zm_tomb"; keys = getArrayKeys( level.ai_data ); - for ( j = 0; j < keys2.size; j++ ) + for ( i = 0; i < keys.size; i++ ) { - if ( isDefined( level.ai_data[ keys[ j ] ].main ) && isDefined( level.ai_data[ keys[ j ] ].should_execute ) - && level.ai_data[ keys[ j ] ].should_execute ) + if ( isDefined( level.ai_data[ keys[ i ] ].main ) && isDefined( level.ai_data[ keys[ i ] ].should_execute ) + && level.ai_data[ keys[ i ] ].should_execute ) { - level [[ level.ai_data[ keys[ j ] ].main ]](); + level [[ level.ai_data[ keys[ i ] ].main ]](); } } } @@ -35,4 +41,45 @@ main() init() { +} + +add_visionset_callback( func ) +{ + if ( !isDefined( level.visionset_mgr_callbacks ) ) + { + level.visionset_mgr_callbacks = []; + } + level.visionset_mgr_callbacks[ level.visionset_mgr_callbacks.size ] = func; +} + +run_visionset_callbacks() +{ + if ( !isDefined( level.visionset_mgr_callbacks ) ) + { + return; + } + for ( i = 0; i < level.visionset_mgr_callbacks.size; i++ ) + { + [[ level.visionset_mgr_callbacks[ i ] ]](); + } +} + +visionset_mgr_init_override() +{ + if ( isDefined( level.createfx_enabled ) && level.createfx_enabled ) + return; + + level.vsmgr_initializing = 1; + level.vsmgr_default_info_name = "none"; + level.vsmgr = []; + level.vsmgr_states_inited = []; + level.vsmgr_filter_custom_enable = []; + level thread register_type( "visionset", ::visionset_slot_cb, ::visionset_lerp_cb, ::visionset_update_cb ); + vsmgr_register_visionset_info( level.vsmgr_default_info_name, 1, 1, "undefined", "undefined" ); + level thread register_type( "overlay", ::overlay_slot_cb, ::overlay_lerp_cb, ::overlay_update_cb ); + vsmgr_register_overlay_info_style_none( level.vsmgr_default_info_name, 1, 1 ); + level.vsmgr_is_type_currently_default_func = ::vsmgr_is_type_currently_default; + [[ level.on_finalize_initialization_callback ]]( ::finalize_clientfields ); + level thread monitor(); + run_visionset_callbacks(); } \ No newline at end of file diff --git a/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc b/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc index e6ca491..e8dc673 100644 --- a/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc +++ b/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc @@ -1,43 +1,55 @@ +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\_utility; + +#include maps\mp\zombies\_zm_ai_avogadro; +#include maps\mp\zombies\_zm_ai_screecher; +#include maps\mp\zombies\_zm_ai_ghost; +#include maps\mp\zombies\_zm_ai_brutus; +#include maps\mp\zombies\_zm_ai_mechz; +#include maps\mp\zombies\_zm_ai_dogs; main() { + replaceFunc( maps\mp\_visionset_mgr::init, ::visionset_mgr_init_override ); level.script = toLower( getDvar( "mapname" ) ); level.gametype = toLower( getDvar( "g_gametype" ) ); - level.ai_home_maps = []; - level.ai_home_maps[ "avogadro" ] = spawnStruct(); - level.ai_home_maps[ "avogadro" ].main = maps\mp\zombies\_zm_ai_avogadro::main; - level.ai_home_maps[ "avogadro" ].init = maps\mp\zombies\_zm_ai_avogadro::init; - level.ai_home_maps[ "avogadro" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); - level.ai_home_maps[ "screecher" ] = spawnStruct(); - level.ai_home_maps[ "screecher" ].main = maps\mp\zombies\_zm_ai_screecher::main; - level.ai_home_maps[ "screecher" ].init = maps\mp\zombies\_zm_ai_screecher::init; - level.ai_home_maps[ "screecher" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); - level.ai_home_maps[ "ghost" ] = spawnStruct(); - level.ai_home_maps[ "ghost" ].main = maps\mp\zombies\_zm_ai_ghost::main; - level.ai_home_maps[ "ghost" ].should_execute = !( level.script == "zm_buried" && level.gametype == "zclassic" ); - level.ai_home_maps[ "brutus" ] = spawnStruct(); - level.ai_home_maps[ "brutus" ].main = maps\mp\zombies\_zm_ai_brutus::main; - level.ai_home_maps[ "brutus" ].should_execute = level.script != "zm_prison"; - level.ai_home_maps[ "mechz" ] = spawnStruct(); - level.ai_home_maps[ "mechz" ].main = maps\mp\zombies\_zm_ai_mechz::main; - level.ai_home_maps[ "mechz" ].init = maps\mp\zombies\_zm_ai_mechz::init; - level.ai_home_maps[ "mechz" ].should_execute = level.script != "zm_tomb"; - level.ai_home_maps[ "zombie_dog" ] = spawnStruct(); - level.ai_home_maps[ "zombie_dog" ].main = maps\mp\zombies\_zm_ai_dogs::init; - level.ai_home_maps[ "zombie_dog" ].init = maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds; - level.ai_home_maps[ "zombie_dog" ].should_execute = !( level.gametype == "zstandard" && getGametypeSetting( "allowDogs" ) == 1 ); + level.ai_data = []; + // level.ai_data[ "avogadro" ] = spawnStruct(); + // level.ai_data[ "avogadro" ].main = maps\mp\zombies\_zm_ai_avogadro::main; + // level.ai_data[ "avogadro" ].init = maps\mp\zombies\_zm_ai_avogadro::init; + // level.ai_data[ "avogadro" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); + // level.ai_data[ "screecher" ] = spawnStruct(); + // level.ai_data[ "screecher" ].main = maps\mp\zombies\_zm_ai_screecher::main; + // level.ai_data[ "screecher" ].init = maps\mp\zombies\_zm_ai_screecher::init; + // level.ai_data[ "screecher" ].should_execute = !( level.script == "zm_transit" && level.gametype == "zclassic" ); + // level.ai_data[ "ghost" ] = spawnStruct(); + // level.ai_data[ "ghost" ].main = maps\mp\zombies\_zm_ai_ghost::main; + // level.ai_data[ "ghost" ].should_execute = !( level.script == "zm_buried" && level.gametype == "zclassic" ); + level.ai_data[ "brutus" ] = spawnStruct(); + level.ai_data[ "brutus" ].main = maps\mp\zombies\_zm_ai_brutus::main; + level.ai_data[ "brutus" ].should_execute = level.script != "zm_prison"; + level.ai_data[ "mechz" ] = spawnStruct(); + level.ai_data[ "mechz" ].main = maps\mp\zombies\_zm_ai_mechz::main; + level.ai_data[ "mechz" ].init = maps\mp\zombies\_zm_ai_mechz::init; + level.ai_data[ "mechz" ].should_execute = level.script != "zm_tomb"; + // level.ai_data[ "zombie_dog" ] = spawnStruct(); + // level.ai_data[ "zombie_dog" ].main = maps\mp\zombies\_zm_ai_dogs::init; + // level.ai_data[ "zombie_dog" ].init = maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds; + // level.ai_data[ "zombie_dog" ].should_execute = !( level.gametype == "zstandard" && getGametypeSetting( "allowDogs" ) == 1 ); + + keys = getArrayKeys( level.ai_data ); - for ( j = 0; j < keys2.size; j++ ) + for ( i = 0; i < keys.size; i++ ) { - if ( isDefined( level.ai_data[ keys[ j ] ].main ) && isDefined( level.ai_data[ keys[ j ] ].should_execute ) - && level.ai_data[ keys[ j ] ].should_execute ) + if ( isDefined( level.ai_data[ keys[ i ] ].main ) && isDefined( level.ai_data[ keys[ i ] ].should_execute ) + && level.ai_data[ keys[ i ] ].should_execute ) { - level [[ level.ai_data[ keys[ j ] ].main ]](); + level [[ level.ai_data[ keys[ i ] ].main ]](); } } - level thread command_thread(); level thread on_player_connect(); } @@ -45,16 +57,53 @@ main() init() { keys = getArrayKeys( level.ai_data ); - for ( j = 0; j < keys2.size; j++ ) + for ( i = 0; i < keys.size; i++ ) { - if ( isDefined( level.ai_data[ keys[ j ] ].init ) && isDefined( level.ai_data[ keys[ j ] ].should_execute ) - && level.ai_data[ keys[ j ] ].should_execute ) + if ( isDefined( level.ai_data[ keys[ i ] ].init ) && isDefined( level.ai_data[ keys[ i ] ].should_execute ) + && level.ai_data[ keys[ i ] ].should_execute ) { - level [[ level.ai_data[ keys[ j ] ].init ]](); + level [[ level.ai_data[ keys[ i ] ].init ]](); } } } +add_visionset_callback( func ) +{ + if ( !isDefined( level.visionset_mgr_callbacks ) ) + { + level.visionset_mgr_callbacks = []; + } + level.visionset_mgr_callbacks[ level.visionset_mgr_callbacks.size ] = func; +} + +run_visionset_callbacks() +{ + if ( !isDefined( level.visionset_mgr_callbacks ) ) + { + return; + } + for ( i = 0; i < level.visionset_mgr_callbacks.size; i++ ) + { + [[ level.visionset_mgr_callbacks[ i ] ]](); + } +} + +visionset_mgr_init_override() +{ + if ( isDefined( level.createfx_enabled ) && level.createfx_enabled ) + return; + + level.vsmgr_initializing = 1; + level.vsmgr_default_info_name = "none"; + level.vsmgr = []; + level thread register_type( "visionset" ); + level thread register_type( "overlay" ); + onfinalizeinitialization_callback( ::finalize_clientfields ); + level thread monitor(); + level thread onplayerconnect(); + run_visionset_callbacks(); +} + command_thread() { for (;;) @@ -73,6 +122,15 @@ command_thread() { level.next_dog_round = level.round_number + 1; } + else if ( message == "spawnmechz" ) + { + level.mechz_left_to_spawn = 1; + level notify( "spawn_mechz" ); + } + else if ( message == "spawnbrutus" ) + { + level notify( "spawn_brutus", 1 ); + } } } diff --git a/zm_ai_pack/zone_source/mod.zone b/zm_ai_pack/zone_source/mod.zone index 47cdf79..8494868 100644 --- a/zm_ai_pack/zone_source/mod.zone +++ b/zm_ai_pack/zone_source/mod.zone @@ -31,7 +31,7 @@ include,transit/zm_transit_basic_no_anims include,transit/zm_transit_screecher include,transit/zombie_dog -soundbank,mod.all +//soundbank,mod.all script,maps/mp/zombies/_zm_ai_ghost.gsc script,maps/mp/zombies/_zm_ai_ghost_ffotd.gsc diff --git a/zm_ai_pack/zone_source/tomb/zm_tomb_mech_zombie.zone b/zm_ai_pack/zone_source/tomb/zm_tomb_mech_zombie.zone index 1d6b2ac..fd0ac40 100644 --- a/zm_ai_pack/zone_source/tomb/zm_tomb_mech_zombie.zone +++ b/zm_ai_pack/zone_source/tomb/zm_tomb_mech_zombie.zone @@ -157,5 +157,4 @@ xmodel,c_zom_mech_armor_shoulder_left xmodel,c_zom_mech_armor_shoulder_right rawfile,rumble/mechz_footsteps rawfile,animtrees/mechz_claw.atr -footsteptable,fly_step_mechz - +footsteptable,fly_step_mechz \ No newline at end of file