Add sounds for mechz and brutus and fix scripts for the normal maps.

This commit is contained in:
JezuzLizard 2024-02-07 02:36:41 -08:00
parent c753fd3adf
commit baaea355b6
171 changed files with 6997 additions and 4620 deletions

View File

@ -22,7 +22,7 @@ main()
self._aitype = "zm_alcatraz_basic"; self._aitype = "zm_alcatraz_basic";
} }
#using_animtree("zm_prison_basic"); #using_animtree("zm_all_basic");
precache( ai_index ) precache( ai_index )
{ {
@ -30,6 +30,6 @@ precache( ai_index )
character\clientscripts\c_zom_inmate1::precache(); character\clientscripts\c_zom_inmate1::precache();
character\clientscripts\c_zom_inmate2::precache(); character\clientscripts\c_zom_inmate2::precache();
usefootsteptable( ai_index, "default_ai" ); usefootsteptable( ai_index, "default_ai" );
precacheanimstatedef( ai_index, #animtree, "zm_prison_basic" ); precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 ); setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 );
} }

View File

@ -22,7 +22,7 @@ main()
self._aitype = "zm_buried_basic_03"; self._aitype = "zm_buried_basic_03";
} }
#using_animtree("zm_buried_basic"); #using_animtree("zm_all_basic");
precache( ai_index ) precache( ai_index )
{ {
@ -30,6 +30,6 @@ precache( ai_index )
character\clientscripts\c_zom_zombie_buried_saloongirl2::precache(); character\clientscripts\c_zom_zombie_buried_saloongirl2::precache();
character\clientscripts\c_zom_zombie_buried_saloongirl3::precache(); character\clientscripts\c_zom_zombie_buried_saloongirl3::precache();
usefootsteptable( ai_index, "default_ai" ); usefootsteptable( ai_index, "default_ai" );
precacheanimstatedef( ai_index, #animtree, "zm_buried_basic" ); precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 ); setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 );
} }

View File

@ -34,7 +34,7 @@ main()
self._aitype = "zm_highrise_basic_01"; self._aitype = "zm_highrise_basic_01";
} }
#using_animtree("zm_highrise_basic"); #using_animtree("zm_all_basic");
precache( ai_index ) precache( ai_index )
{ {
@ -45,6 +45,6 @@ precache( ai_index )
character\clientscripts\c_zom_zombie_civ_shorts5::precache(); character\clientscripts\c_zom_zombie_civ_shorts5::precache();
character\clientscripts\c_zom_zombie_civ_shorts6::precache(); character\clientscripts\c_zom_zombie_civ_shorts6::precache();
usefootsteptable( ai_index, "default_ai" ); usefootsteptable( ai_index, "default_ai" );
precacheanimstatedef( ai_index, #animtree, "zm_highrise_basic" ); precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 ); setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 );
} }

View File

@ -33,7 +33,7 @@ main()
self._aitype = "zm_tomb_basic_german"; self._aitype = "zm_tomb_basic_german";
} }
#using_animtree("zm_tomb_basic"); #using_animtree("zm_all_basic");
precache( ai_index ) precache( ai_index )
{ {
@ -44,6 +44,6 @@ precache( ai_index )
character\clientscripts\c_zom_tomb_german_bare_nohat::precache(); character\clientscripts\c_zom_tomb_german_bare_nohat::precache();
character\clientscripts\c_zom_tomb_german_bare_nohat::precache(); character\clientscripts\c_zom_tomb_german_bare_nohat::precache();
usefootsteptable( ai_index, "default_ai" ); usefootsteptable( ai_index, "default_ai" );
precacheanimstatedef( ai_index, #animtree, "zm_tomb_basic" ); precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 ); setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 );
} }

View File

@ -18,13 +18,13 @@ main()
self._aitype = "zm_transit_basic_01"; self._aitype = "zm_transit_basic_01";
} }
#using_animtree("zm_transit_basic"); #using_animtree("zm_all_basic");
precache( ai_index ) precache( ai_index )
{ {
character\clientscripts\c_zom_zombie1_01::precache(); character\clientscripts\c_zom_zombie1_01::precache();
character\clientscripts\c_zom_zombie1_02::precache(); character\clientscripts\c_zom_zombie1_02::precache();
usefootsteptable( ai_index, "default_ai" ); usefootsteptable( ai_index, "default_ai" );
precacheanimstatedef( ai_index, #animtree, "zm_transit_basic" ); precacheanimstatedef( ai_index, #animtree, "zm_all_basic" );
setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 ); setdemolockonvalues( ai_index, 100, 60, -15, 60, 30, -5, 60 );
} }

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -489,7 +489,11 @@ bus_attack()
} }
else else
{ {
//level.the_bus thread maps\mp\zm_transit_bus::bus_disabled_by_emp( 30 ); func = getFunction( "maps/mp/zm_transit_bus", "bus_disabled_by_emp" );
if ( isDefined( func ) )
{
level.the_bus thread [[ func ]]( 30 );
}
self attach_to_bus(); self attach_to_bus();
} }
} }
@ -587,7 +591,11 @@ bus_disable( bus_attack_struct )
success = 0; success = 0;
self.mod_melee = 0; self.mod_melee = 0;
self.bus_shock_time = 0; self.bus_shock_time = 0;
//level thread maps\mp\zm_transit_bus::do_player_bus_zombie_vox( "avogadro_onbus", 45 ); func = getFunction( "maps/mp/zm_transit_bus", "do_player_bus_zombie_vox" );
if ( isDefined( func ) )
{
level thread [[ func ]]( "avogadro_onbus", 45 );
}
while ( true ) while ( true )
{ {
@ -597,7 +605,8 @@ bus_disable( bus_attack_struct )
if ( self.bus_attack_time >= 20 ) if ( self.bus_attack_time >= 20 )
{ {
self.bus_disabled = 1; self.bus_disabled = 1;
//level thread maps\mp\zm_transit_bus::do_player_bus_zombie_vox( "avogadro_stopbus", 45 ); func = getFunction( "maps/mp/zm_transit_bus", "do_player_bus_zombie_vox" );
level thread [[ func ]]( "avogadro_stopbus", 45 );
break; break;
} }
@ -1396,7 +1405,11 @@ avogadro_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
if ( sweapon == "riotshield_zm" ) if ( sweapon == "riotshield_zm" )
{ {
shield_damage = level.zombie_vars["riotshield_fling_damage_shield"]; shield_damage = level.zombie_vars["riotshield_fling_damage_shield"];
//einflictor maps\mp\zombies\_zm_weap_riotshield::player_damage_shield( shield_damage, 0 ); func = getFunction( "maps/mp/zombies/_zm_weap_riotshield", "player_damage_shield" );
if ( isDefined( func ) )
{
einflictor [[ func ]]( shield_damage, 0 );
}
} }
} }

View File

@ -151,50 +151,53 @@ setup_interaction_matrix()
level.interaction_types["perk_machine"].spawn_bias = 800; level.interaction_types["perk_machine"].spawn_bias = 800;
level.interaction_types["perk_machine"].num_times_to_scale = 3; level.interaction_types["perk_machine"].num_times_to_scale = 3;
level.interaction_types["perk_machine"].unlock_cost = 2000; level.interaction_types["perk_machine"].unlock_cost = 2000;
// level.interaction_types["craftable_table"] = spawnstruct(); if ( getDvar( "mapname" ) == "zm_prison" )
// level.interaction_types["craftable_table"].priority = 2; {
// level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table"; level.interaction_types["craftable_table"] = spawnstruct();
// level.interaction_types["craftable_table"].notify_name = "table_smash_anim"; level.interaction_types["craftable_table"].priority = 2;
// level.interaction_types["craftable_table"].action_notetrack = "fire"; level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table";
// level.interaction_types["craftable_table"].validity_func = ::is_craftable_table_valid; level.interaction_types["craftable_table"].notify_name = "table_smash_anim";
// level.interaction_types["craftable_table"].get_func = ::get_craftable_tables; level.interaction_types["craftable_table"].action_notetrack = "fire";
// level.interaction_types["craftable_table"].value_func = ::get_dist_score; level.interaction_types["craftable_table"].validity_func = ::is_craftable_table_valid;
// level.interaction_types["craftable_table"].interact_func = ::craftable_table_lock; level.interaction_types["craftable_table"].get_func = ::get_craftable_tables;
// level.interaction_types["craftable_table"].spawn_bias = 600; level.interaction_types["craftable_table"].value_func = ::get_dist_score;
// level.interaction_types["craftable_table"].num_times_to_scale = 1; level.interaction_types["craftable_table"].interact_func = ::craftable_table_lock;
// level.interaction_types["craftable_table"].unlock_cost = 2000; level.interaction_types["craftable_table"].spawn_bias = 600;
// level.interaction_types["craftable_table"].interaction_z_offset = -15; level.interaction_types["craftable_table"].num_times_to_scale = 1;
// level.interaction_types["craftable_table"].interaction_yaw_offset = 270; level.interaction_types["craftable_table"].unlock_cost = 2000;
// level.interaction_types["craftable_table"].fx_z_offset = -44; level.interaction_types["craftable_table"].interaction_z_offset = -15;
// level.interaction_types["craftable_table"].fx_yaw_offset = 270; level.interaction_types["craftable_table"].interaction_yaw_offset = 270;
// level.interaction_types["trap"] = spawnstruct(); level.interaction_types["craftable_table"].fx_z_offset = -44;
// level.interaction_types["trap"].priority = 3; level.interaction_types["craftable_table"].fx_yaw_offset = 270;
// level.interaction_types["trap"].animstate = "zm_smash_trap"; level.interaction_types["trap"] = spawnstruct();
// level.interaction_types["trap"].notify_name = "trap_smash_anim"; level.interaction_types["trap"].priority = 3;
// level.interaction_types["trap"].action_notetrack = "fire"; level.interaction_types["trap"].animstate = "zm_smash_trap";
// level.interaction_types["trap"].validity_func = ::is_trap_valid; level.interaction_types["trap"].notify_name = "trap_smash_anim";
// level.interaction_types["trap"].get_func = ::get_traps; level.interaction_types["trap"].action_notetrack = "fire";
// level.interaction_types["trap"].value_func = ::get_dist_score; level.interaction_types["trap"].validity_func = ::is_trap_valid;
// level.interaction_types["trap"].interact_func = ::trap_smash; level.interaction_types["trap"].get_func = ::get_traps;
// level.interaction_types["trap"].spawn_bias = 400; level.interaction_types["trap"].value_func = ::get_dist_score;
// level.interaction_types["trap"].interaction_z_offset = -15; level.interaction_types["trap"].interact_func = ::trap_smash;
// level.interaction_types["plane_ramp"] = spawnstruct(); level.interaction_types["trap"].spawn_bias = 400;
// level.interaction_types["plane_ramp"].priority = 4; level.interaction_types["trap"].interaction_z_offset = -15;
// level.interaction_types["plane_ramp"].animstate = "zm_lock_plane_ramp"; level.interaction_types["plane_ramp"] = spawnstruct();
// level.interaction_types["plane_ramp"].notify_name = "plane_lock_anim"; level.interaction_types["plane_ramp"].priority = 4;
// level.interaction_types["plane_ramp"].action_notetrack = "locked"; level.interaction_types["plane_ramp"].animstate = "zm_lock_plane_ramp";
// level.interaction_types["plane_ramp"].end_notetrack = "lock_done"; level.interaction_types["plane_ramp"].notify_name = "plane_lock_anim";
// level.interaction_types["plane_ramp"].validity_func = ::is_plane_ramp_valid; level.interaction_types["plane_ramp"].action_notetrack = "locked";
// level.interaction_types["plane_ramp"].get_func = ::get_plane_ramps; level.interaction_types["plane_ramp"].end_notetrack = "lock_done";
// level.interaction_types["plane_ramp"].value_func = ::get_dist_score; level.interaction_types["plane_ramp"].validity_func = ::is_plane_ramp_valid;
// level.interaction_types["plane_ramp"].interact_func = ::plane_ramp_lock; level.interaction_types["plane_ramp"].get_func = ::get_plane_ramps;
// level.interaction_types["plane_ramp"].spawn_bias = 500; level.interaction_types["plane_ramp"].value_func = ::get_dist_score;
// level.interaction_types["plane_ramp"].num_times_to_scale = 3; level.interaction_types["plane_ramp"].interact_func = ::plane_ramp_lock;
// level.interaction_types["plane_ramp"].unlock_cost = 2000; level.interaction_types["plane_ramp"].spawn_bias = 500;
// level.interaction_types["plane_ramp"].interaction_z_offset = -60; level.interaction_types["plane_ramp"].num_times_to_scale = 3;
// level.interaction_types["plane_ramp"].fx_z_offset = -60; level.interaction_types["plane_ramp"].unlock_cost = 2000;
// level.interaction_types["plane_ramp"].fx_x_offset = 70; level.interaction_types["plane_ramp"].interaction_z_offset = -60;
// level.interaction_types["plane_ramp"].fx_yaw_offset = 90; level.interaction_types["plane_ramp"].fx_z_offset = -60;
level.interaction_types["plane_ramp"].fx_x_offset = 70;
level.interaction_types["plane_ramp"].fx_yaw_offset = 90;
}
level.interaction_types["blocker"] = spawnstruct(); level.interaction_types["blocker"] = spawnstruct();
level.interaction_types["blocker"].priority = 5; level.interaction_types["blocker"].priority = 5;
level.interaction_types["blocker"].animstate = "zm_smash_blocker"; level.interaction_types["blocker"].animstate = "zm_smash_blocker";
@ -2360,12 +2363,19 @@ get_brutus_interest_points()
for ( i = 0; i < zone_names.size; i++ ) for ( i = 0; i < zone_names.size; i++ )
{ {
self thread get_zone_perk_machines( zone_names[i] ); self thread get_zone_perk_machines( zone_names[i] );
//self thread get_zone_craftable_tables( zone_names[i] ); if ( getDvar( "mapname" ) == "zm_prison" )
//self thread get_zone_traps( zone_names[i] ); {
//self thread get_zone_plane_ramp( zone_names[i] ); self thread get_zone_craftable_tables( zone_names[i] );
self thread get_zone_traps( zone_names[i] );
self thread get_zone_plane_ramp( zone_names[i] );
}
} }
//build_trap_array(); if ( getDvar( "mapname" ) == "zm_prison" )
{
build_trap_array();
}
flag_set( "brutus_setup_complete" ); flag_set( "brutus_setup_complete" );
} }
@ -2631,7 +2641,8 @@ check_plane_valid( player )
plane_struct.is_locked = 0; plane_struct.is_locked = 0;
plane_struct.locked_cost = undefined; plane_struct.locked_cost = undefined;
plane_struct.lock_fx delete(); plane_struct.lock_fx delete();
//plane_struct maps\mp\zm_alcatraz_sq::reset_plane_hint_string( player ); func = getFunction( "maps/mp/zm_alcatraz_sq", "reset_plane_hint_string" );
plane_struct [[ func ]]( player );
} }
return false; return false;

View File

@ -809,7 +809,10 @@ ghost_think()
{ {
self [[ level.slowgun_set_anim_rate_func ]]( 1.0 ); self [[ level.slowgun_set_anim_rate_func ]]( 1.0 );
} }
//self setclientfield( "slowgun_fx", 0 ); if ( level.script == "zm_buried" )
{
self setclientfield( "slowgun_fx", 0 );
}
self setclientfield( "sndGhostAudio", 1 ); self setclientfield( "sndGhostAudio", 1 );
self init_thinking(); self init_thinking();
@ -1592,11 +1595,13 @@ paralyzer_callback( player, upgraded )
if ( isdefined( self.ignore_slowgun_anim_rates ) && self.ignore_slowgun_anim_rates ) if ( isdefined( self.ignore_slowgun_anim_rates ) && self.ignore_slowgun_anim_rates )
return; return;
// if ( upgraded ) if ( level.script == "zm_buried" )
// self setclientfield( "slowgun_fx", 5 ); {
// else if ( upgraded )
// self setclientfield( "slowgun_fx", 1 ); self setclientfield( "slowgun_fx", 5 );
else
self setclientfield( "slowgun_fx", 1 );
}
self [[ level.slowgun_zombie_slow_for_time ]]( 0.3, 0 ); self [[ level.slowgun_zombie_slow_for_time ]]( 0.3, 0 );
} }

View File

@ -77,14 +77,12 @@ ghost_bad_path_init()
level.bad_zones[0].adjacent = []; level.bad_zones[0].adjacent = [];
level.bad_zones[0].adjacent[0] = "zone_underground_courthouse2"; level.bad_zones[0].adjacent[0] = "zone_underground_courthouse2";
level.bad_zones[0].adjacent[1] = "zone_tunnels_north2"; level.bad_zones[0].adjacent[1] = "zone_tunnels_north2";
//level.bad_zones[0].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[0].ignore_func = getFunction( "maps/mp/zm_buried", "is_courthouse_open" ); level.bad_zones[0].ignore_func = getFunction( "maps/mp/zm_buried", "is_courthouse_open" );
level.bad_zones[1] = spawnstruct(); level.bad_zones[1] = spawnstruct();
level.bad_zones[1].name = "zone_underground_courthouse2"; level.bad_zones[1].name = "zone_underground_courthouse2";
level.bad_zones[1].adjacent = []; level.bad_zones[1].adjacent = [];
level.bad_zones[1].adjacent[0] = "zone_underground_courthouse"; level.bad_zones[1].adjacent[0] = "zone_underground_courthouse";
level.bad_zones[1].adjacent[1] = "zone_tunnels_north2"; level.bad_zones[1].adjacent[1] = "zone_tunnels_north2";
//level.bad_zones[1].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[1].ignore_func = getFunction( "maps/mp/zm_buried", "is_courthouse_open" ); level.bad_zones[1].ignore_func = getFunction( "maps/mp/zm_buried", "is_courthouse_open" );
level.bad_zones[2] = spawnstruct(); level.bad_zones[2] = spawnstruct();
level.bad_zones[2].name = "zone_tunnels_north2"; level.bad_zones[2].name = "zone_tunnels_north2";
@ -93,7 +91,6 @@ ghost_bad_path_init()
level.bad_zones[2].adjacent[1] = "zone_underground_courthouse"; level.bad_zones[2].adjacent[1] = "zone_underground_courthouse";
level.bad_zones[2].flag = "tunnels2courthouse"; level.bad_zones[2].flag = "tunnels2courthouse";
level.bad_zones[2].flag_adjacent = "zone_tunnels_north"; level.bad_zones[2].flag_adjacent = "zone_tunnels_north";
//level.bad_zones[2].ignore_func = maps\mp\zm_buried::is_courthouse_open;
level.bad_zones[2].ignore_func = getFunction( "maps/mp/zm_buried", "is_courthouse_open" ); level.bad_zones[2].ignore_func = getFunction( "maps/mp/zm_buried", "is_courthouse_open" );
level.bad_zones[3] = spawnstruct(); level.bad_zones[3] = spawnstruct();
level.bad_zones[3].name = "zone_tunnels_north"; level.bad_zones[3].name = "zone_tunnels_north";
@ -101,20 +98,17 @@ ghost_bad_path_init()
level.bad_zones[3].adjacent[0] = "zone_tunnels_center"; level.bad_zones[3].adjacent[0] = "zone_tunnels_center";
level.bad_zones[3].flag = "tunnels2courthouse"; level.bad_zones[3].flag = "tunnels2courthouse";
level.bad_zones[3].flag_adjacent = "zone_tunnels_north2"; level.bad_zones[3].flag_adjacent = "zone_tunnels_north2";
//level.bad_zones[3].ignore_func = maps\mp\zm_buried::is_tunnel_open;
level.bad_zones[3].ignore_func = getFunction( "maps/mp/zm_buried", "is_tunnel_open" ); level.bad_zones[3].ignore_func = getFunction( "maps/mp/zm_buried", "is_tunnel_open" );
level.bad_zones[4] = spawnstruct(); level.bad_zones[4] = spawnstruct();
level.bad_zones[4].name = "zone_tunnels_center"; level.bad_zones[4].name = "zone_tunnels_center";
level.bad_zones[4].adjacent = []; level.bad_zones[4].adjacent = [];
level.bad_zones[4].adjacent[0] = "zone_tunnels_north"; level.bad_zones[4].adjacent[0] = "zone_tunnels_north";
level.bad_zones[4].adjacent[1] = "zone_tunnels_south"; level.bad_zones[4].adjacent[1] = "zone_tunnels_south";
//level.bad_zones[4].ignore_func = maps\mp\zm_buried::is_tunnel_open;
level.bad_zones[4].ignore_func = getFunction( "maps/mp/zm_buried", "is_tunnel_open" ); level.bad_zones[4].ignore_func = getFunction( "maps/mp/zm_buried", "is_tunnel_open" );
level.bad_zones[5] = spawnstruct(); level.bad_zones[5] = spawnstruct();
level.bad_zones[5].name = "zone_tunnels_south"; level.bad_zones[5].name = "zone_tunnels_south";
level.bad_zones[5].adjacent = []; level.bad_zones[5].adjacent = [];
level.bad_zones[5].adjacent[0] = "zone_tunnels_center"; level.bad_zones[5].adjacent[0] = "zone_tunnels_center";
//level.bad_zones[5].ignore_func = maps\mp\zm_buried::is_tunnel_open;
level.bad_zones[5].ignore_func = getFunction( "maps/mp/zm_buried", "is_tunnel_open" ); level.bad_zones[5].ignore_func = getFunction( "maps/mp/zm_buried", "is_tunnel_open" );
} }

File diff suppressed because it is too large Load Diff

View File

@ -14,291 +14,291 @@
mechz_in_range_for_jump() mechz_in_range_for_jump()
{ {
if ( !isdefined( self.jump_pos ) ) if ( !isdefined( self.jump_pos ) )
{ {
/# /#
iprintln( "\\nMZ Error: Trying to jump without valid jump_pos\\n" ); iprintln( "\\nMZ Error: Trying to jump without valid jump_pos\\n" );
#/ #/
self.jump_requested = 0; self.jump_requested = 0;
return false; return false;
} }
dist = distancesquared( self.origin, self.jump_pos.origin ); dist = distancesquared( self.origin, self.jump_pos.origin );
if ( dist <= 100 ) if ( dist <= 100 )
return true; return true;
return false; return false;
} }
mechz_jump_think( spawn_pos ) mechz_jump_think( spawn_pos )
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_jump_think" ); self endon( "stop_jump_think" );
self.closest_jump_point = spawn_pos; self.closest_jump_point = spawn_pos;
self.goal_pos = self.origin; self.goal_pos = self.origin;
self setgoalpos( self.goal_pos ); self setgoalpos( self.goal_pos );
self thread mechz_jump_stuck_watcher(); self thread mechz_jump_stuck_watcher();
while ( true ) while ( true )
{ {
if ( isdefined( self.jump_requested ) && self.jump_requested ) if ( isdefined( self.jump_requested ) && self.jump_requested )
{ {
if ( !self mechz_should_jump() ) if ( !self mechz_should_jump() )
{ {
self.jump_requested = 0; self.jump_requested = 0;
self.jump_pos = undefined; self.jump_pos = undefined;
} }
wait 1; wait 1;
continue; continue;
} }
if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" ) if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
if ( isdefined( self.not_interruptable ) && self.not_interruptable ) if ( isdefined( self.not_interruptable ) && self.not_interruptable )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
/# /#
if ( isdefined( self.force_behavior ) && self.force_behavior ) if ( isdefined( self.force_behavior ) && self.force_behavior )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
#/ #/
if ( self mechz_should_jump() ) if ( self mechz_should_jump() )
{ {
self.jump_requested = 1; self.jump_requested = 1;
self.jump_pos = get_closest_mechz_spawn_pos( self.origin ); self.jump_pos = get_closest_mechz_spawn_pos( self.origin );
if ( !isdefined( self.jump_pos ) ) if ( !isdefined( self.jump_pos ) )
self.jump_requested = 0; self.jump_requested = 0;
} }
wait 1; wait 1;
} }
} }
watch_for_riot_shield_melee() watch_for_riot_shield_melee()
{ {
self endon( "new_stuck_watcher" ); self endon( "new_stuck_watcher" );
self endon( "death" ); self endon( "death" );
while ( true ) while ( true )
{ {
self waittill( "item_attack" ); self waittill( "item_attack" );
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\tMZ: Resetting fail count because of item attack\\n" ); println( "\\n\\tMZ: Resetting fail count because of item attack\\n" );
#/ #/
self.fail_count = 0; self.fail_count = 0;
} }
} }
watch_for_valid_melee() watch_for_valid_melee()
{ {
self endon( "new_stuck_watcher" ); self endon( "new_stuck_watcher" );
self endon( "death" ); self endon( "death" );
while ( true ) while ( true )
{ {
self waittillmatch( "melee_anim", "end" ); self waittillmatch( "melee_anim", "end" );
if ( isdefined( self.favoriteenemy ) && distancesquared( self.origin, self.favoriteenemy.origin ) < 16384 ) if ( isdefined( self.favoriteenemy ) && distancesquared( self.origin, self.favoriteenemy.origin ) < 16384 )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\tMZ: Resetting fail count because of melee\\n" ); println( "\\n\\tMZ: Resetting fail count because of melee\\n" );
#/ #/
self.fail_count = 0; self.fail_count = 0;
} }
} }
} }
mechz_jump_stuck_watcher() mechz_jump_stuck_watcher()
{ {
self notify( "new_stuck_watcher" ); self notify( "new_stuck_watcher" );
self endon( "death" ); self endon( "death" );
self endon( "new_stuck_watcher" ); self endon( "new_stuck_watcher" );
self.fail_count = 0; self.fail_count = 0;
self thread watch_for_valid_melee(); self thread watch_for_valid_melee();
self thread watch_for_riot_shield_melee(); self thread watch_for_riot_shield_melee();
while ( true ) while ( true )
{ {
if ( !isdefined( self.goal_pos ) ) if ( !isdefined( self.goal_pos ) )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
if ( isdefined( self.not_interruptable ) && self.not_interruptable ) if ( isdefined( self.not_interruptable ) && self.not_interruptable )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
if ( isdefined( self.ai_state ) && self.ai_state != "find_flesh" ) if ( isdefined( self.ai_state ) && self.ai_state != "find_flesh" )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
/# /#
if ( isdefined( self.force_behavior ) && self.force_behavior ) if ( isdefined( self.force_behavior ) && self.force_behavior )
{ {
wait 0.05; wait 0.05;
continue; continue;
} }
#/ #/
if ( !findpath( self.origin, self.goal_pos, self, 0, 0 ) ) if ( !findpath( self.origin, self.goal_pos, self, 0, 0 ) )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\tMZ: Incrementing fail count\\n" ); println( "\\n\\tMZ: Incrementing fail count\\n" );
#/ #/
/# /#
println( "Mechz could not path to goal_pos " + self.goal_pos ); println( "Mechz could not path to goal_pos " + self.goal_pos );
#/ #/
self.fail_count++; self.fail_count++;
} }
else else
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\tMZ: Resetting fail count because of good path\\n" ); println( "\\n\\tMZ: Resetting fail count because of good path\\n" );
#/ #/
self.fail_count = 0; self.fail_count = 0;
} }
wait 1; wait 1;
} }
} }
mechz_should_jump() mechz_should_jump()
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\tMZ: Checking should jump\\n" ); println( "\\n\\tMZ: Checking should jump\\n" );
#/ #/
if ( !isdefined( self.favoriteenemy ) ) if ( !isdefined( self.favoriteenemy ) )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Not doing jump because has no enemy\\n" ); println( "\\n\\t\\tMZ: Not doing jump because has no enemy\\n" );
#/ #/
return false; return false;
} }
dist = distancesquared( self.origin, self.favoriteenemy.origin ); dist = distancesquared( self.origin, self.favoriteenemy.origin );
if ( dist >= level.mechz_jump_dist_threshold ) if ( dist >= level.mechz_jump_dist_threshold )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Doing jump because target is too far\\n" ); println( "\\n\\t\\tMZ: Doing jump because target is too far\\n" );
#/ #/
return true; return true;
} }
if ( self.fail_count >= level.mechz_failed_paths_to_jump ) if ( self.fail_count >= level.mechz_failed_paths_to_jump )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Doing jump because has failed too many pathfind checks\\n" ); println( "\\n\\t\\tMZ: Doing jump because has failed too many pathfind checks\\n" );
#/ #/
return true; return true;
} }
return false; return false;
} }
mechz_do_jump( wait_for_stationary_tank ) mechz_do_jump( wait_for_stationary_tank )
{ {
self endon( "death" ); self endon( "death" );
self endon( "kill_jump" ); self endon( "kill_jump" );
/# /#
if ( getdvarint( #"_id_E7121222" ) > 0 ) if ( getdvarint( #"_id_E7121222" ) > 0 )
println( "\\nMZ: Doing Jump-Teleport\\n" ); println( "\\nMZ: Doing Jump-Teleport\\n" );
#/ #/
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\nMZ: Jump setting not interruptable\\n" ); println( "\\nMZ: Jump setting not interruptable\\n" );
#/ #/
self.not_interruptable = 1; self.not_interruptable = 1;
self setfreecameralockonallowed( 0 ); self setfreecameralockonallowed( 0 );
self thread mechz_jump_vo(); self thread mechz_jump_vo();
self animscripted( self.origin, self.angles, "zm_fly_out" ); self animscripted( self.origin, self.angles, "zm_fly_out" );
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
self ghost(); self ghost();
self.mechz_hidden = 1; self.mechz_hidden = 1;
if ( isdefined( self.m_claw ) ) if ( isdefined( self.m_claw ) )
self.m_claw ghost(); self.m_claw ghost();
if ( self.fx_field ) if ( self.fx_field )
self.fx_field_old = self.fx_field; self.fx_field_old = self.fx_field;
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop(); self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop();
self fx_cleanup(); self fx_cleanup();
self animscripted( self.origin, self.angles, "zm_fly_hover" ); self animscripted( self.origin, self.angles, "zm_fly_hover" );
wait( level.mechz_jump_delay ); wait( level.mechz_jump_delay );
if ( isdefined( wait_for_stationary_tank ) && wait_for_stationary_tank ) if ( isdefined( wait_for_stationary_tank ) && wait_for_stationary_tank )
level.vh_tank ent_flag_waitopen( "tank_moving" ); level.vh_tank ent_flag_waitopen( "tank_moving" );
self notsolid(); self notsolid();
closest_jump_point = get_best_mechz_spawn_pos( 1 ); closest_jump_point = get_best_mechz_spawn_pos( 1 );
if ( isdefined( closest_jump_point ) ) if ( isdefined( closest_jump_point ) )
self.closest_jump_point = closest_jump_point; self.closest_jump_point = closest_jump_point;
if ( !isdefined( self.closest_jump_point.angles ) ) if ( !isdefined( self.closest_jump_point.angles ) )
self.closest_jump_point.angles = ( 0, 0, 0 ); self.closest_jump_point.angles = ( 0, 0, 0 );
self animscripted( self.closest_jump_point.origin, self.closest_jump_point.angles, "zm_fly_in" ); self animscripted( self.closest_jump_point.origin, self.closest_jump_point.angles, "zm_fly_in" );
self solid(); self solid();
self.mechz_hidden = 0; self.mechz_hidden = 0;
self show(); self show();
self.fx_field = self.fx_field_old; self.fx_field = self.fx_field_old;
self.fx_field_old = undefined; self.fx_field_old = undefined;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow(); self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow();
if ( isdefined( self.m_claw ) ) if ( isdefined( self.m_claw ) )
self.m_claw show(); self.m_claw show();
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
self.not_interruptable = 0; self.not_interruptable = 0;
self setfreecameralockonallowed( 1 ); self setfreecameralockonallowed( 1 );
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\nMZ: Jump clearing not interruptable\\n" ); println( "\\nMZ: Jump clearing not interruptable\\n" );
#/ #/
mechz_jump_cleanup(); mechz_jump_cleanup();
} }
mechz_kill_jump_watcher() mechz_kill_jump_watcher()
{ {
self endon( "jump_complete" ); self endon( "jump_complete" );
self waittill_either( "death", "kill_jump" ); self waittill_either( "death", "kill_jump" );
self mechz_jump_cleanup(); self mechz_jump_cleanup();
} }
mechz_jump_cleanup() mechz_jump_cleanup()
{ {
self.fx_field = self.fx_field & ~128; self.fx_field = self.fx_field & ~128;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
self stopanimscripted(); self stopanimscripted();
self notify( "jump_complete" ); self notify( "jump_complete" );
} }

File diff suppressed because it is too large Load Diff

View File

@ -11,304 +11,304 @@
mechz_debug() mechz_debug()
{ {
/# /#
while ( true ) while ( true )
{ {
debug_level = getdvarint( #"_id_E7121222" ); debug_level = getdvarint( #"_id_E7121222" );
if ( isdefined( debug_level ) && debug_level ) if ( isdefined( debug_level ) && debug_level )
{ {
if ( debug_level == 1 ) if ( debug_level == 1 )
{ {
mechz_array = getentarray( "mechz_zombie_ai" ); mechz_array = getentarray( "mechz_zombie_ai" );
for ( i = 0; i < mechz_array.size; i++ ) for ( i = 0; i < mechz_array.size; i++ )
{ {
if ( isdefined( mechz_array[i].goal_pos ) ) if ( isdefined( mechz_array[i].goal_pos ) )
{ {
debugstar( mechz_array[i].goal_pos, ( 1, 0, 0 ), 1 ); debugstar( mechz_array[i].goal_pos, ( 1, 0, 0 ), 1 );
line( mechz_array[i].goal_pos, mechz_array[i].origin, ( 1, 0, 0 ), 0, 1 ); line( mechz_array[i].goal_pos, mechz_array[i].origin, ( 1, 0, 0 ), 0, 1 );
} }
} }
} }
} }
} }
#/ #/
} }
setup_devgui() setup_devgui()
{ {
/# /#
setdvar( "spawn_Mechz", "off" ); setdvar( "spawn_Mechz", "off" );
setdvar( "force_mechz_jump", "off" ); setdvar( "force_mechz_jump", "off" );
setdvar( "test_mechz_tank", "off" ); setdvar( "test_mechz_tank", "off" );
setdvar( "test_mechz_robot", "off" ); setdvar( "test_mechz_robot", "off" );
setdvar( "reset_mechz_thinking", "off" ); setdvar( "reset_mechz_thinking", "off" );
setdvar( "test_mechz_sprint", "off" ); setdvar( "test_mechz_sprint", "off" );
setdvar( "mechz_force_behavior", "none" ); setdvar( "mechz_force_behavior", "none" );
setdvarint( "mechz_behavior_orient", 0 ); setdvarint( "mechz_behavior_orient", 0 );
setdvarint( "mechz_behavior_dist", 300 ); setdvarint( "mechz_behavior_dist", 300 );
adddebugcommand( "devgui_cmd \"Zombies/Zombie Spawning:2/Spawn Zombie:1/Mech Zombie:1\" \"spawn_Mechz on\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/Zombie Spawning:2/Spawn Zombie:1/Mech Zombie:1\" \"spawn_Mechz on\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Jump In:1\" \"mechz_force_behavior jump_in\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Jump In:1\" \"mechz_force_behavior jump_in\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Jump Out:2\" \"mechz_force_behavior jump_out\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Jump Out:2\" \"mechz_force_behavior jump_out\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Flamethrower:3\" \"mechz_force_behavior flamethrower\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Flamethrower:3\" \"mechz_force_behavior flamethrower\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Damage Armor:4\" \"mechz_force_behavior damage_armor\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Damage Armor:4\" \"mechz_force_behavior damage_armor\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Damage Faceplate:5\" \"mechz_force_behavior damage_faceplate\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Damage Faceplate:5\" \"mechz_force_behavior damage_faceplate\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Claw Attack:5\" \"mechz_force_behavior claw_attack\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Claw Attack:5\" \"mechz_force_behavior claw_attack\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Melee:6\" \"mechz_force_behavior melee\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Melee:6\" \"mechz_force_behavior melee\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/zero degrees:1\" \"mechz_behavior_orient 0\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/zero degrees:1\" \"mechz_behavior_orient 0\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/forty-five degrees:2\" \"mechz_behavior_orient 45\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/forty-five degrees:2\" \"mechz_behavior_orient 45\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/ninety degrees:3\" \"mechz_behavior_orient 90\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/ninety degrees:3\" \"mechz_behavior_orient 90\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/one thirty five degrees:4\" \"mechz_behavior_orient 135\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/one thirty five degrees:4\" \"mechz_behavior_orient 135\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/one eighty degrees:5\" \"mechz_behavior_orient 180\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/one eighty degrees:5\" \"mechz_behavior_orient 180\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/two twenty five degrees:6\" \"mechz_behavior_orient 225\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/two twenty five degrees:6\" \"mechz_behavior_orient 225\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/two seventy degrees:7\" \"mechz_behavior_orient 270\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/two seventy degrees:7\" \"mechz_behavior_orient 270\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/three fifteen degrees:8\" \"mechz_behavior_orient 315\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Angles:7/three fifteen degrees:8\" \"mechz_behavior_orient 315\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/one hundred:1\" \"mechz_behavior_dist 100\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/one hundred:1\" \"mechz_behavior_dist 100\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/two hundred:2\" \"mechz_behavior_dist 200\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/two hundred:2\" \"mechz_behavior_dist 200\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/three hundred:3\" \"mechz_behavior_dist 300\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/three hundred:3\" \"mechz_behavior_dist 300\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/four hundred:4\" \"mechz_behavior_dist 400\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/four hundred:4\" \"mechz_behavior_dist 400\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/five hundred:5\" \"mechz_behavior_dist 500\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Force Behavior:1/Distance:8/five hundred:5\" \"mechz_behavior_dist 500\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Tank Knockdown:2\" \"test_mechz_tank on\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Tank Knockdown:2\" \"test_mechz_tank on\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Robot Knockdown:3\" \"test_mechz_robot on\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Robot Knockdown:3\" \"test_mechz_robot on\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Sprint:4\" \"test_mechz_sprint on\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Test Sprint:4\" \"test_mechz_sprint on\"\n" );
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Reset Mech:5\" \"reset_mechz_thinking on\"\n" ); adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Reset Mech:5\" \"reset_mechz_thinking on\"\n" );
level thread watch_devgui_mechz(); level thread watch_devgui_mechz();
#/ #/
} }
watch_devgui_mechz() watch_devgui_mechz()
{ {
/# /#
while ( true ) while ( true )
{ {
if ( getdvar( #"_id_877D2B64" ) == "on" ) if ( getdvar( #"_id_877D2B64" ) == "on" )
{ {
mechz_health_increases(); mechz_health_increases();
level.mechz_left_to_spawn = 1; level.mechz_left_to_spawn = 1;
if ( getdvarint( #"_id_FA81816F" ) >= 2 ) if ( getdvarint( #"_id_FA81816F" ) >= 2 )
level.round_number++; level.round_number++;
level notify( "spawn_mechz" ); level notify( "spawn_mechz" );
setdvar( "spawn_Mechz", "off" ); setdvar( "spawn_Mechz", "off" );
level.mechz_last_spawn_round = 0; level.mechz_last_spawn_round = 0;
} }
if ( getdvar( #"_id_7D9211F9" ) != "none" ) if ( getdvar( #"_id_7D9211F9" ) != "none" )
{ {
behavior = getdvar( #"_id_7D9211F9" ); behavior = getdvar( #"_id_7D9211F9" );
zombies = getaiarray( "axis" ); zombies = getaiarray( "axis" );
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
zombies[i] thread mechz_force_behavior( behavior ); zombies[i] thread mechz_force_behavior( behavior );
} }
setdvar( "mechz_force_behavior", "none" ); setdvar( "mechz_force_behavior", "none" );
} }
if ( getdvar( #"_id_BD7CA008" ) == "on" ) if ( getdvar( #"_id_BD7CA008" ) == "on" )
{ {
setdvar( "test_mechz_tank", "off" ); setdvar( "test_mechz_tank", "off" );
mechz = undefined; mechz = undefined;
zombies = getaiarray( "axis" ); zombies = getaiarray( "axis" );
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
mechz = zombies[i]; mechz = zombies[i];
} }
if ( !isdefined( mechz ) ) if ( !isdefined( mechz ) )
continue; continue;
mechz.not_interruptable = 1; mechz.not_interruptable = 1;
mechz mechz_stop_basic_find_flesh(); mechz mechz_stop_basic_find_flesh();
mechz.ai_state = "devgui"; mechz.ai_state = "devgui";
mechz.goal_pos = ( 446, -4318, 200 ); mechz.goal_pos = ( 446, -4318, 200 );
mechz setgoalpos( mechz.goal_pos ); mechz setgoalpos( mechz.goal_pos );
} }
if ( getdvar( #"_id_6CF3EB40" ) == "on" ) if ( getdvar( #"_id_6CF3EB40" ) == "on" )
{ {
setdvar( "test_mechz_robot", "off" ); setdvar( "test_mechz_robot", "off" );
mechz = undefined; mechz = undefined;
zombies = getaiarray( "axis" ); zombies = getaiarray( "axis" );
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
mechz = zombies[i]; mechz = zombies[i];
} }
if ( !isdefined( mechz ) ) if ( !isdefined( mechz ) )
continue; continue;
mechz.not_interruptable = 1; mechz.not_interruptable = 1;
mechz mechz_stop_basic_find_flesh(); mechz mechz_stop_basic_find_flesh();
mechz.ai_state = "devgui"; mechz.ai_state = "devgui";
mechz.goal_pos = ( 1657, -336, 92 ); mechz.goal_pos = ( 1657, -336, 92 );
mechz setgoalpos( mechz.goal_pos ); mechz setgoalpos( mechz.goal_pos );
} }
if ( getdvar( #"_id_0DE1409A" ) == "on" ) if ( getdvar( #"_id_0DE1409A" ) == "on" )
{ {
setdvar( "test_mechz_sprint", "off" ); setdvar( "test_mechz_sprint", "off" );
zombies = getaiarray( "axis" ); zombies = getaiarray( "axis" );
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
zombies[i].force_sprint = 1; zombies[i].force_sprint = 1;
} }
} }
if ( getdvar( #"_id_772BCD39" ) == "on" ) if ( getdvar( #"_id_772BCD39" ) == "on" )
{ {
setdvar( "reset_mechz_thinking", "off" ); setdvar( "reset_mechz_thinking", "off" );
zombies = getaiarray( "axis" ); zombies = getaiarray( "axis" );
for ( i = 0; i < zombies.size; i++ ) for ( i = 0; i < zombies.size; i++ )
{ {
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz ) if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
{ {
zombies[i].not_interruptable = 0; zombies[i].not_interruptable = 0;
zombies[i].force_sprint = 0; zombies[i].force_sprint = 0;
} }
} }
} }
wait 0.1; wait 0.1;
} }
#/ #/
} }
mechz_force_behavior( behavior ) mechz_force_behavior( behavior )
{ {
/# /#
self notify( "kill_force_behavior" ); self notify( "kill_force_behavior" );
self thread mechz_stop_basic_find_flesh(); self thread mechz_stop_basic_find_flesh();
self.ignoreall = 1; self.ignoreall = 1;
self.force_behavior = 1; self.force_behavior = 1;
if ( behavior == "jump_in" ) if ( behavior == "jump_in" )
self thread mechz_force_jump_in(); self thread mechz_force_jump_in();
if ( behavior == "jump_out" ) if ( behavior == "jump_out" )
self thread mechz_force_jump_out(); self thread mechz_force_jump_out();
if ( behavior == "flamethrower" ) if ( behavior == "flamethrower" )
self thread mechz_force_flamethrower(); self thread mechz_force_flamethrower();
if ( behavior == "claw_attack" ) if ( behavior == "claw_attack" )
self thread mechz_force_claw_attack(); self thread mechz_force_claw_attack();
if ( behavior == "damage_armor" ) if ( behavior == "damage_armor" )
self thread mechz_force_damage_armor(); self thread mechz_force_damage_armor();
if ( behavior == "damage_faceplate" ) if ( behavior == "damage_faceplate" )
self thread mechz_force_damage_faceplate(); self thread mechz_force_damage_faceplate();
if ( behavior == "melee" ) if ( behavior == "melee" )
self thread mechz_force_melee(); self thread mechz_force_melee();
if ( behavior == "none" ) if ( behavior == "none" )
{ {
self.ignoreall = 0; self.ignoreall = 0;
self.force_behavior = 0; self.force_behavior = 0;
self notify( "kill_force_behavior" ); self notify( "kill_force_behavior" );
} }
#/ #/
} }
get_behavior_orient() get_behavior_orient()
{ {
/# /#
behavior_orient = getdvarint( #"_id_2F660A7B" ); behavior_orient = getdvarint( #"_id_2F660A7B" );
return level.players[0].angles + vectorscale( ( 0, 1, 0 ), 180.0 ) + ( 0, behavior_orient, 0 ); return level.players[0].angles + vectorscale( ( 0, 1, 0 ), 180.0 ) + ( 0, behavior_orient, 0 );
#/ #/
} }
setup_force_behavior() setup_force_behavior()
{ {
/# /#
if ( !isdefined( level.test_align_struct ) ) if ( !isdefined( level.test_align_struct ) )
{ {
player = get_players()[0]; player = get_players()[0];
pos = player.origin; pos = player.origin;
offset = anglestoforward( player.angles ); offset = anglestoforward( player.angles );
offset = vectornormalize( offset ); offset = vectornormalize( offset );
level.test_align_struct = spawn( "script_model", pos + 300 * offset ); level.test_align_struct = spawn( "script_model", pos + 300 * offset );
level.test_align_struct setmodel( "tag_origin" ); level.test_align_struct setmodel( "tag_origin" );
level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 );
level.test_align_struct thread align_test_struct(); level.test_align_struct thread align_test_struct();
level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 ); level.test_align_struct.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 );
} }
self linkto( level.test_align_struct, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) ); self linkto( level.test_align_struct, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
self.fx_field = self.fx_field & ~64; self.fx_field = self.fx_field & ~64;
self.fx_field = self.fx_field & ~128; self.fx_field = self.fx_field & ~128;
self.fx_field = self.fx_field & ~256; self.fx_field = self.fx_field & ~256;
#/ #/
} }
align_test_struct() align_test_struct()
{ {
/# /#
while ( true ) while ( true )
{ {
pos = level.players[0].origin; pos = level.players[0].origin;
offset = anglestoforward( level.players[0].angles ); offset = anglestoforward( level.players[0].angles );
offset = vectornormalize( offset ); offset = vectornormalize( offset );
dist = getdvarint( #"_id_6DCD047E" ); dist = getdvarint( #"_id_6DCD047E" );
level.test_align_struct.origin = pos + dist * offset; level.test_align_struct.origin = pos + dist * offset;
level.test_align_struct.angles = get_behavior_orient(); level.test_align_struct.angles = get_behavior_orient();
wait 0.05; wait 0.05;
} }
#/ #/
} }
scripted_behavior( anim_scripted_name, notify_name ) scripted_behavior( anim_scripted_name, notify_name )
{ {
/# /#
self animscripted( level.test_align_struct.origin, level.test_align_struct.angles, anim_scripted_name ); self animscripted( level.test_align_struct.origin, level.test_align_struct.angles, anim_scripted_name );
self maps\mp\animscripts\zm_shared::donotetracks( notify_name ); self maps\mp\animscripts\zm_shared::donotetracks( notify_name );
#/ #/
} }
mechz_force_jump_in() mechz_force_jump_in()
{ {
/# /#
self endon( "kill_force_behavior" ); self endon( "kill_force_behavior" );
self setup_force_behavior(); self setup_force_behavior();
while ( true ) while ( true )
{ {
self animscripted( self.origin, self.angles, "zm_idle" ); self animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_spawn", "jump_anim" ); self scripted_behavior( "zm_spawn", "jump_anim" );
} }
#/ #/
} }
mechz_force_jump_out() mechz_force_jump_out()
{ {
/# /#
self endon( "kill_force_behavior" ); self endon( "kill_force_behavior" );
self setup_force_behavior(); self setup_force_behavior();
while ( true ) while ( true )
{ {
self animscripted( self.origin, self.angles, "zm_idle" ); self animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_fly_out", "jump_anim" ); self scripted_behavior( "zm_fly_out", "jump_anim" );
self ghost(); self ghost();
self animscripted( self.origin, self.angles, "zm_fly_hover" ); self animscripted( self.origin, self.angles, "zm_fly_hover" );
wait( level.mechz_jump_delay ); wait( level.mechz_jump_delay );
self show(); self show();
self scripted_behavior( "zm_fly_in", "jump_anim" ); self scripted_behavior( "zm_fly_in", "jump_anim" );
} }
#/ #/
} }
@ -317,189 +317,189 @@ mechz_force_jump_out()
mechz_force_flamethrower() mechz_force_flamethrower()
{ {
/# /#
self endon( "kill_force_behavior" ); self endon( "kill_force_behavior" );
self setup_force_behavior(); self setup_force_behavior();
curr_aim_anim = 1; curr_aim_anim = 1;
curr_timer = 0; curr_timer = 0;
self animscripted( self.origin, self.angles, "zm_idle" ); self animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" ); self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" );
while ( true ) while ( true )
{ {
if ( curr_timer > 3 ) if ( curr_timer > 3 )
{ {
curr_aim_anim++; curr_aim_anim++;
curr_timer = 0; curr_timer = 0;
if ( curr_aim_anim < 10 ) if ( curr_aim_anim < 10 )
iprintln( "Testing aim_" + curr_aim_anim ); iprintln( "Testing aim_" + curr_aim_anim );
} }
if ( curr_aim_anim >= 10 ) if ( curr_aim_anim >= 10 )
{ {
iprintln( "Testing flamethrower sweep" ); iprintln( "Testing flamethrower sweep" );
curr_aim_anim = 1; curr_aim_anim = 1;
self scripted_behavior( "zm_flamethrower_sweep", "flamethrower_anim" ); self scripted_behavior( "zm_flamethrower_sweep", "flamethrower_anim" );
self.fx_field = self.fx_field | 64; self.fx_field = self.fx_field | 64;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
} }
else else
{ {
length = self getanimlengthfromasd( "zm_flamethrower_aim_" + curr_aim_anim, 0 ); length = self getanimlengthfromasd( "zm_flamethrower_aim_" + curr_aim_anim, 0 );
self clearanim( %root, 0 ); self clearanim( %root, 0 );
self scripted_behavior( "zm_flamethrower_aim_" + curr_aim_anim, "flamethrower_anim" ); self scripted_behavior( "zm_flamethrower_aim_" + curr_aim_anim, "flamethrower_anim" );
curr_timer = curr_timer + length; curr_timer = curr_timer + length;
} }
} }
#/ #/
} }
fake_launch_claw() fake_launch_claw()
{ {
/# /#
self.launching_claw = 1; self.launching_claw = 1;
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self gettagorigin( "tag_claw" );
v_claw_angles = vectortoangles( self.origin - level.players[0].origin ); v_claw_angles = vectortoangles( self.origin - level.players[0].origin );
self.fx_field = self.fx_field | 256; self.fx_field = self.fx_field | 256;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 ); self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 );
self.m_claw unlink(); self.m_claw unlink();
self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) ); self.m_claw.fx_ent = spawn( "script_model", self.m_claw gettagorigin( "tag_claw" ) );
self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" ); self.m_claw.fx_ent.angles = self.m_claw gettagangles( "tag_claw" );
self.m_claw.fx_ent setmodel( "tag_origin" ); self.m_claw.fx_ent setmodel( "tag_origin" );
self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" ); self.m_claw.fx_ent linkto( self.m_claw, "tag_claw" );
network_safe_play_fx_on_tag( "mech_claw", 1, level._effect["mechz_claw"], self.m_claw.fx_ent, "tag_origin" ); network_safe_play_fx_on_tag( "mech_claw", 1, level._effect["mechz_claw"], self.m_claw.fx_ent, "tag_origin" );
self.m_claw clearanim( %root, 0.2 ); self.m_claw clearanim( %root, 0.2 );
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 ); self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 );
offset = anglestoforward( self.angles ); offset = anglestoforward( self.angles );
offset = vectornormalize( offset ); offset = vectornormalize( offset );
target_pos = self.origin + offset * 500 + vectorscale( ( 0, 0, 1 ), 36.0 ); target_pos = self.origin + offset * 500 + vectorscale( ( 0, 0, 1 ), 36.0 );
n_time = 0.0833333; n_time = 0.0833333;
self.m_claw moveto( target_pos, n_time ); self.m_claw moveto( target_pos, n_time );
self.m_claw waittill( "movedone" ); self.m_claw waittill( "movedone" );
self.m_claw clearanim( %root, 0.2 ); self.m_claw clearanim( %root, 0.2 );
self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 ); self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 );
wait 0.5; wait 0.5;
self.m_claw moveto( v_claw_origin, 0.5 ); self.m_claw moveto( v_claw_origin, 0.5 );
self.m_claw waittill( "movedone" ); self.m_claw waittill( "movedone" );
self.m_claw.fx_ent delete(); self.m_claw.fx_ent delete();
self.fx_field = self.fx_field & ~256; self.fx_field = self.fx_field & ~256;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
v_claw_origin = self gettagorigin( "tag_claw" ); v_claw_origin = self gettagorigin( "tag_claw" );
v_claw_angles = self gettagangles( "tag_claw" ); v_claw_angles = self gettagangles( "tag_claw" );
self.m_claw.origin = v_claw_origin; self.m_claw.origin = v_claw_origin;
self.m_claw.angles = v_claw_angles; self.m_claw.angles = v_claw_angles;
self.m_claw linkto( self, "tag_claw" ); self.m_claw linkto( self, "tag_claw" );
self.launching_claw = 0; self.launching_claw = 0;
#/ #/
} }
mechz_force_claw_attack() mechz_force_claw_attack()
{ {
/# /#
self endon( "kill_force_behavior" ); self endon( "kill_force_behavior" );
self setup_force_behavior(); self setup_force_behavior();
while ( true ) while ( true )
{ {
self animscripted( self.origin, self.angles, "zm_idle" ); self animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" ); self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" );
self thread fake_launch_claw(); self thread fake_launch_claw();
while ( isdefined( self.launching_claw ) && self.launching_claw ) while ( isdefined( self.launching_claw ) && self.launching_claw )
{ {
self clearanim( %root, 0 ); self clearanim( %root, 0 );
wait 0.05; wait 0.05;
self scripted_behavior( "zm_grapple_aim_5", "grapple_anim" ); self scripted_behavior( "zm_grapple_aim_5", "grapple_anim" );
} }
self scripted_behavior( "zm_flamethrower_claw_victim", "flamethrower_anim" ); self scripted_behavior( "zm_flamethrower_claw_victim", "flamethrower_anim" );
} }
#/ #/
} }
mechz_force_damage_armor() mechz_force_damage_armor()
{ {
/# /#
self endon( "kill_force_behavior" ); self endon( "kill_force_behavior" );
self setup_force_behavior(); self setup_force_behavior();
if ( !isdefined( self.next_armor_piece ) ) if ( !isdefined( self.next_armor_piece ) )
self.next_armor_piece = 0; self.next_armor_piece = 0;
self thread scripted_behavior( "zm_idle", "idle_anim" ); self thread scripted_behavior( "zm_idle", "idle_anim" );
if ( self.next_armor_piece == self.armor_state.size ) if ( self.next_armor_piece == self.armor_state.size )
{ {
self.next_armor_piece = 0; self.next_armor_piece = 0;
for ( i = 0; i < self.armor_state.size; i++ ) for ( i = 0; i < self.armor_state.size; i++ )
{ {
self.fx_field = self.fx_field & ~( 1 << self.armor_state[i].index ); self.fx_field = self.fx_field & ~( 1 << self.armor_state[i].index );
if ( isdefined( self.armor_state[i].model ) ) if ( isdefined( self.armor_state[i].model ) )
self attach( self.armor_state[i].model, self.armor_state[i].tag ); self attach( self.armor_state[i].model, self.armor_state[i].tag );
} }
} }
else else
{ {
self.fx_field = self.fx_field | 1 << self.armor_state[self.next_armor_piece].index; self.fx_field = self.fx_field | 1 << self.armor_state[self.next_armor_piece].index;
if ( isdefined( self.armor_state[self.next_armor_piece].model ) ) if ( isdefined( self.armor_state[self.next_armor_piece].model ) )
self detach( self.armor_state[self.next_armor_piece].model, self.armor_state[self.next_armor_piece].tag ); self detach( self.armor_state[self.next_armor_piece].model, self.armor_state[self.next_armor_piece].tag );
self.next_armor_piece++; self.next_armor_piece++;
} }
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
while ( true ) while ( true )
self scripted_behavior( "zm_idle", "idle_anim" ); self scripted_behavior( "zm_idle", "idle_anim" );
#/ #/
} }
mechz_force_damage_faceplate() mechz_force_damage_faceplate()
{ {
/# /#
self endon( "kill_force_behavior" ); self endon( "kill_force_behavior" );
self setup_force_behavior(); self setup_force_behavior();
self thread scripted_behavior( "zm_idle", "idle_anim" ); self thread scripted_behavior( "zm_idle", "idle_anim" );
if ( isdefined( self.has_helmet ) && self.has_helmet ) if ( isdefined( self.has_helmet ) && self.has_helmet )
{ {
self.has_helmet = 0; self.has_helmet = 0;
self detach( "c_zom_mech_faceplate", "J_Helmet" ); self detach( "c_zom_mech_faceplate", "J_Helmet" );
self.fx_field = self.fx_field | 1024; self.fx_field = self.fx_field | 1024;
self.fx_field = self.fx_field & ~2048; self.fx_field = self.fx_field & ~2048;
} }
else else
{ {
self.has_helmet = 1; self.has_helmet = 1;
self.fx_field = self.fx_field & ~1024; self.fx_field = self.fx_field & ~1024;
self.fx_field = self.fx_field | 2048; self.fx_field = self.fx_field | 2048;
self attach( "c_zom_mech_faceplate", "J_Helmet" ); self attach( "c_zom_mech_faceplate", "J_Helmet" );
} }
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
while ( true ) while ( true )
self scripted_behavior( "zm_idle", "idle_anim" ); self scripted_behavior( "zm_idle", "idle_anim" );
#/ #/
} }
mechz_force_melee() mechz_force_melee()
{ {
/# /#
self endon( "kill_force_behavior" ); self endon( "kill_force_behavior" );
self setup_force_behavior(); self setup_force_behavior();
while ( true ) while ( true )
{ {
self animscripted( self.origin, self.angles, "zm_idle" ); self animscripted( self.origin, self.angles, "zm_idle" );
wait 0.2; wait 0.2;
self scripted_behavior( "zm_melee_stand", "melee_anim" ); self scripted_behavior( "zm_melee_stand", "melee_anim" );
} }
#/ #/
} }

View File

@ -16,12 +16,12 @@ mechz_init_end()
spawn_start() spawn_start()
{ {
self.not_interruptable = 1; self.not_interruptable = 1;
} }
spawn_end() spawn_end()
{ {
self.not_interruptable = 0; self.not_interruptable = 0;
} }
mechz_round_tracker_start() mechz_round_tracker_start()

View File

@ -14,535 +14,544 @@
init_flamethrower_triggers() init_flamethrower_triggers()
{ {
flag_wait( "initial_players_connected" ); flag_wait( "initial_players_connected" );
level.flamethrower_trigger_array = getentarray( "flamethrower_trigger", "script_noteworthy" ); level.flamethrower_trigger_array = getentarray( "flamethrower_trigger", "script_noteworthy" );
assert( isdefined( level.flamethrower_trigger_array ) && level.flamethrower_trigger_array.size >= 4 ); assert( isdefined( level.flamethrower_trigger_array ) && level.flamethrower_trigger_array.size >= 4 );
for ( i = 0; i < level.flamethrower_trigger_array.size; i++ ) for ( i = 0; i < level.flamethrower_trigger_array.size; i++ )
level.flamethrower_trigger_array[i] enablelinkto(); level.flamethrower_trigger_array[i] enablelinkto();
} }
mechz_flamethrower_initial_setup() mechz_flamethrower_initial_setup()
{ {
self endon( "death" ); self endon( "death" );
if ( isdefined( self.flamethrower_trigger ) ) if ( isdefined( self.flamethrower_trigger ) )
self release_flamethrower_trigger(); self release_flamethrower_trigger();
self.flamethrower_trigger = get_flamethrower_trigger(); self.flamethrower_trigger = get_flamethrower_trigger();
if ( !isdefined( self.flamethrower_trigger ) ) if ( !isdefined( self.flamethrower_trigger ) )
{ {
/# /#
println( "Error: No free flamethrower triggers! Make sure you haven't spawned more than 4 mech zombies" ); println( "Error: No free flamethrower triggers! Make sure you haven't spawned more than 4 mech zombies" );
#/ #/
return; return;
} }
self.flamethrower_trigger.origin = self gettagorigin( "tag_flamethrower_FX" ); self.flamethrower_trigger.origin = self gettagorigin( "tag_flamethrower_FX" );
self.flamethrower_trigger.angles = self gettagangles( "tag_flamethrower_FX" ); self.flamethrower_trigger.angles = self gettagangles( "tag_flamethrower_FX" );
self.flamethrower_trigger linkto( self, "tag_flamethrower_FX" ); self.flamethrower_trigger linkto( self, "tag_flamethrower_FX" );
self thread mechz_watch_for_flamethrower_damage(); self thread mechz_watch_for_flamethrower_damage();
} }
get_flamethrower_trigger() get_flamethrower_trigger()
{ {
for ( i = 0; i < level.flamethrower_trigger_array.size; i++ ) for ( i = 0; i < level.flamethrower_trigger_array.size; i++ )
{ {
if ( !( isdefined( level.flamethrower_trigger_array[i].in_use ) && level.flamethrower_trigger_array[i].in_use ) ) if ( !( isdefined( level.flamethrower_trigger_array[i].in_use ) && level.flamethrower_trigger_array[i].in_use ) )
{ {
level.flamethrower_trigger_array[i].in_use = 1; level.flamethrower_trigger_array[i].in_use = 1;
level.flamethrower_trigger_array[i].original_position = level.flamethrower_trigger_array[i].origin; level.flamethrower_trigger_array[i].original_position = level.flamethrower_trigger_array[i].origin;
return level.flamethrower_trigger_array[i]; return level.flamethrower_trigger_array[i];
} }
} }
return undefined; return undefined;
} }
release_flamethrower_trigger() release_flamethrower_trigger()
{ {
if ( !isdefined( self.flamethrower_trigger ) ) if ( !isdefined( self.flamethrower_trigger ) )
return; return;
self.flamethrower_trigger.in_use = 0; self.flamethrower_trigger.in_use = 0;
self.flamethrower_trigger unlink(); self.flamethrower_trigger unlink();
self.flamethrower_trigger.origin = self.flamethrower_trigger.original_position; self.flamethrower_trigger.origin = self.flamethrower_trigger.original_position;
self.flamethrower_linked = 0; self.flamethrower_linked = 0;
self.flamethrower_trigger = undefined; self.flamethrower_trigger = undefined;
} }
mechz_flamethrower_dist_watcher() mechz_flamethrower_dist_watcher()
{ {
self endon( "kill_ft" ); self endon( "kill_ft" );
wait 0.5; wait 0.5;
while ( true ) while ( true )
{ {
if ( !isdefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1, 1 ) || distancesquared( self.origin, self.favoriteenemy.origin ) > 50000 ) if ( !isdefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1, 1 ) || distancesquared( self.origin, self.favoriteenemy.origin ) > 50000 )
{ {
self notify( "stop_ft" ); self notify( "stop_ft" );
return; return;
} }
wait 0.05; wait 0.05;
} }
} }
mechz_flamethrower_arc_watcher() mechz_flamethrower_arc_watcher()
{ {
self endon( "death" ); self endon( "death" );
self endon( "kill_ft" ); self endon( "kill_ft" );
self endon( "stop_ft" ); self endon( "stop_ft" );
aim_anim = undefined; aim_anim = undefined;
while ( true ) while ( true )
{ {
old_anim = aim_anim; old_anim = aim_anim;
aim_anim = mechz_get_aim_anim( "zm_flamethrower", self.favoriteenemy.origin, 26 ); aim_anim = mechz_get_aim_anim( "zm_flamethrower", self.favoriteenemy.origin, 26 );
self.curr_aim_anim = aim_anim; self.curr_aim_anim = aim_anim;
if ( !isdefined( aim_anim ) ) if ( !isdefined( aim_anim ) )
{ {
self notify( "stop_ft" ); self notify( "stop_ft" );
return; return;
} }
if ( !isdefined( old_anim ) || old_anim != aim_anim ) if ( !isdefined( old_anim ) || old_anim != aim_anim )
self notify( "arc_change" ); self notify( "arc_change" );
wait 0.05; wait 0.05;
} }
} }
mechz_play_flamethrower_aim() mechz_play_flamethrower_aim()
{ {
self endon( "death" ); self endon( "death" );
self endon( "kill_ft" ); self endon( "kill_ft" );
self endon( "stop_ft" ); self endon( "stop_ft" );
self endon( "arc_change" ); self endon( "arc_change" );
if ( isdefined( self.curr_aim_anim ) ) if ( isdefined( self.curr_aim_anim ) )
{ {
self stopanimscripted(); self stopanimscripted();
self animscripted( self.origin, self.angles, self.curr_aim_anim ); self animscripted( self.origin, self.angles, self.curr_aim_anim );
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
} }
else else
wait 0.05; wait 0.05;
} }
mechz_flamethrower_aim() mechz_flamethrower_aim()
{ {
self endon( "death" ); self endon( "death" );
self endon( "kill_ft" ); self endon( "kill_ft" );
self endon( "stop_ft" ); self endon( "stop_ft" );
self waittillmatch( "flamethrower_anim", "end" ); self waittillmatch( "flamethrower_anim", "end" );
self thread mechz_flamethrower_dist_watcher(); self thread mechz_flamethrower_dist_watcher();
self thread mechz_flamethrower_arc_watcher(); self thread mechz_flamethrower_arc_watcher();
aim_anim = undefined; aim_anim = undefined;
while ( true ) while ( true )
self mechz_play_flamethrower_aim(); self mechz_play_flamethrower_aim();
} }
mechz_flamethrower_tank_sweep() mechz_flamethrower_tank_sweep()
{ {
self endon( "death" ); self endon( "death" );
self endon( "kill_ft" ); self endon( "kill_ft" );
self endon( "stop_ft" ); self endon( "stop_ft" );
while ( true ) while ( true )
{ {
self stopanimscripted(); self stopanimscripted();
self.angles = vectortoangles( level.vh_tank.origin - self.origin ); self.angles = vectortoangles( level.vh_tank.origin - self.origin );
self animscripted( self.origin, self.angles, "zm_flamethrower_sweep_up" ); self animscripted( self.origin, self.angles, "zm_flamethrower_sweep_up" );
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
if ( level.vh_tank ent_flag( "tank_moving" ) ) if ( level.vh_tank ent_flag( "tank_moving" ) )
break; break;
func = getFunction( "maps/mp/zm_tomb_tank", "get_players_on_tank" );
if ( isDefined( func ) )
{
a_players_on_tank = [[ func ]]( 1 );
}
else
{
a_players_on_tank = 0;
}
if ( !a_players_on_tank.size )
break;
}
//a_players_on_tank = get_players_on_tank( 1 ); self notify( "stop_ft" );
a_players_on_tank = 0;
if ( !a_players_on_tank.size )
break;
}
self notify( "stop_ft" );
} }
mechz_stop_firing_watcher() mechz_stop_firing_watcher()
{ {
self endon( "death" ); self endon( "death" );
self endon( "kill_ft" ); self endon( "kill_ft" );
self endon( "flamethrower_complete" ); self endon( "flamethrower_complete" );
self waittillmatch( "flamethrower_anim", "stop_ft" ); self waittillmatch( "flamethrower_anim", "stop_ft" );
self.firing = 0; self.firing = 0;
} }
mechz_watch_for_flamethrower_damage() mechz_watch_for_flamethrower_damage()
{ {
self endon( "death" ); self endon( "death" );
while ( true ) entity_on_tank_func = getFunction( "maps/mp/zm_tomb_tank", "entity_on_tank" );
{
self waittillmatch( "flamethrower_anim", "start_ft" );
self.firing = 1;
self thread mechz_stop_firing_watcher();
while ( isdefined( self.firing ) && self.firing ) while ( true )
{ {
do_tank_sweep_auto_damage = isdefined( self.doing_tank_sweep ) && self.doing_tank_sweep && !level.vh_tank ent_flag( "tank_moving" ); self waittillmatch( "flamethrower_anim", "start_ft" );
players = getplayers(); self.firing = 1;
self thread mechz_stop_firing_watcher();
for ( i = 0; i < players.size; i++ ) while ( isdefined( self.firing ) && self.firing )
{ {
if ( !( isdefined( players[i].is_burning ) && players[i].is_burning ) ) do_tank_sweep_auto_damage = isdefined( self.doing_tank_sweep ) && self.doing_tank_sweep && !level.vh_tank ent_flag( "tank_moving" );
{ players = getplayers();
// if ( do_tank_sweep_auto_damage && players[i] entity_on_tank() || players[i] istouching( self.flamethrower_trigger ) )
// players[i] thread player_flame_damage();
}
}
zombies = getaispeciesarray( "axis", "all" ); for ( i = 0; i < players.size; i++ )
{
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 ) )
players[i] thread player_flame_damage();
}
}
for ( i = 0; i < zombies.size; i++ ) zombies = getaispeciesarray( "axis", "all" );
{
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
continue;
if ( isdefined( zombies[i].on_fire ) && zombies[i].on_fire ) for ( i = 0; i < zombies.size; i++ )
continue; {
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
continue;
// if ( do_tank_sweep_auto_damage && zombies[i] entity_on_tank() || zombies[i] istouching( self.flamethrower_trigger ) ) if ( isdefined( zombies[i].on_fire ) && zombies[i].on_fire )
// { continue;
// zombies[i].on_fire = 1;
// zombies[i] promote_to_explosive();
// }
}
wait 0.1; if ( isDefined( entity_on_tank_func ) && do_tank_sweep_auto_damage && zombies[i] [[ entity_on_tank_func ]]() || zombies[i] istouching( self.flamethrower_trigger ) )
} {
} zombies[i].on_fire = 1;
zombies[i] promote_to_explosive();
}
}
wait 0.1;
}
}
} }
player_flame_damage() player_flame_damage()
{ {
self endon( "zombified" ); self endon( "zombified" );
self endon( "death" ); self endon( "death" );
self endon( "disconnect" ); self endon( "disconnect" );
n_player_dmg = 30; n_player_dmg = 30;
n_jugga_dmg = 45; n_jugga_dmg = 45;
n_burn_time = 1.5; n_burn_time = 1.5;
if ( isdefined( self.is_zombie ) && self.is_zombie ) if ( isdefined( self.is_zombie ) && self.is_zombie )
return; return;
self thread player_stop_burning(); self thread player_stop_burning();
if ( !isdefined( self.is_burning ) && is_player_valid( self, 1, 0 ) ) if ( !isdefined( self.is_burning ) && is_player_valid( self, 1, 0 ) )
{ {
self.is_burning = 1; self.is_burning = 1;
maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, n_burn_time, level.zm_transit_burn_max_duration ); maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, n_burn_time, level.zm_transit_burn_max_duration );
self notify( "burned" ); self notify( "burned" );
if ( !self hasperk( "specialty_armorvest" ) ) if ( !self hasperk( "specialty_armorvest" ) )
self dodamage( n_player_dmg, self.origin ); self dodamage( n_player_dmg, self.origin );
else else
self dodamage( n_jugga_dmg, self.origin ); self dodamage( n_jugga_dmg, self.origin );
wait 0.5; wait 0.5;
self.is_burning = undefined; self.is_burning = undefined;
} }
} }
player_stop_burning() player_stop_burning()
{ {
self notify( "player_stop_burning" ); self notify( "player_stop_burning" );
self endon( "player_stop_burning" ); self endon( "player_stop_burning" );
self endon( "death_or_disconnect" ); self endon( "death_or_disconnect" );
self waittill( "zombified" ); self waittill( "zombified" );
self notify( "stop_flame_damage" ); self notify( "stop_flame_damage" );
maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self ); maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self );
} }
zombie_burning_fx() zombie_burning_fx()
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_flame_damage" ); self endon( "stop_flame_damage" );
while ( true ) while ( true )
{ {
if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) ) if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) )
{ {
if ( !self.isdog ) if ( !self.isdog )
playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" ); playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" );
} }
if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) ) if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) )
{ {
wait 1; wait 1;
tagarray = []; tagarray = [];
if ( randomint( 2 ) == 0 ) if ( randomint( 2 ) == 0 )
{ {
tagarray[0] = "J_Elbow_LE"; tagarray[0] = "J_Elbow_LE";
tagarray[1] = "J_Elbow_RI"; tagarray[1] = "J_Elbow_RI";
tagarray[2] = "J_HEAD"; tagarray[2] = "J_HEAD";
} }
else else
{ {
tagarray[0] = "J_Wrist_RI"; tagarray[0] = "J_Wrist_RI";
tagarray[1] = "J_Wrist_LE"; tagarray[1] = "J_Wrist_LE";
tagarray[2] = "J_HEAD"; tagarray[2] = "J_HEAD";
} }
tagarray = array_randomize( tagarray ); tagarray = array_randomize( tagarray );
self thread network_safe_play_fx_on_tag( "flamethrower", 2, level._effect["character_fire_death_sm"], self, tagarray[0] ); self thread network_safe_play_fx_on_tag( "flamethrower", 2, level._effect["character_fire_death_sm"], self, tagarray[0] );
} }
wait 12; wait 12;
} }
} }
zombie_burning_audio() zombie_burning_audio()
{ {
self playloopsound( "zmb_fire_loop" ); self playloopsound( "zmb_fire_loop" );
self waittill_any( "death", "stop_flame_damage" ); self waittill_any( "death", "stop_flame_damage" );
if ( isdefined( self ) && isalive( self ) ) if ( isdefined( self ) && isalive( self ) )
self stoploopsound( 0.25 ); self stoploopsound( 0.25 );
} }
zombie_burning_dmg() zombie_burning_dmg()
{ {
self endon( "death" ); self endon( "death" );
self endon( "stop_flame_damage" ); self endon( "stop_flame_damage" );
damageradius = 25; damageradius = 25;
damage = 2; damage = 2;
while ( true ) while ( true )
{ {
eyeorigin = self geteye(); eyeorigin = self geteye();
players = get_players(); players = get_players();
for ( i = 0; i < players.size; i++ ) for ( i = 0; i < players.size; i++ )
{ {
if ( is_player_valid( players[i], 1, 0 ) ) if ( is_player_valid( players[i], 1, 0 ) )
{ {
playereye = players[i] geteye(); playereye = players[i] geteye();
if ( distancesquared( eyeorigin, playereye ) < damageradius * damageradius ) if ( distancesquared( eyeorigin, playereye ) < damageradius * damageradius )
{ {
players[i] dodamage( damage, self.origin, self ); players[i] dodamage( damage, self.origin, self );
players[i] notify( "burned" ); players[i] notify( "burned" );
} }
} }
} }
wait 1.0; wait 1.0;
} }
} }
promote_to_explosive() promote_to_explosive()
{ {
self endon( "death" ); self endon( "death" );
self thread zombie_burning_audio(); self thread zombie_burning_audio();
self thread zombie_burning_fx(); self thread zombie_burning_fx();
self thread explode_on_death(); self thread explode_on_death();
self thread zombie_burning_dmg(); self thread zombie_burning_dmg();
self thread on_fire_timeout(); self thread on_fire_timeout();
} }
explode_on_death() explode_on_death()
{ {
self endon( "stop_flame_damage" ); self endon( "stop_flame_damage" );
self waittill( "death" ); self waittill( "death" );
if ( !isdefined( self ) ) if ( !isdefined( self ) )
return; return;
tag = "J_SpineLower"; tag = "J_SpineLower";
if ( isdefined( self.animname ) && self.animname == "zombie_dog" ) if ( isdefined( self.animname ) && self.animname == "zombie_dog" )
tag = "tag_origin"; tag = "tag_origin";
if ( is_mature() ) if ( is_mature() )
{ {
if ( isdefined( level._effect["zomb_gib"] ) ) if ( isdefined( level._effect["zomb_gib"] ) )
playfx( level._effect["zomb_gib"], self gettagorigin( tag ) ); playfx( level._effect["zomb_gib"], self gettagorigin( tag ) );
} }
else if ( isdefined( level._effect["spawn_cloud"] ) ) else if ( isdefined( level._effect["spawn_cloud"] ) )
playfx( level._effect["spawn_cloud"], self gettagorigin( tag ) ); playfx( level._effect["spawn_cloud"], self gettagorigin( tag ) );
self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" ); self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" );
self ghost(); self ghost();
if ( isdefined( self.isdog ) && self.isdog ) if ( isdefined( self.isdog ) && self.isdog )
self hide(); self hide();
else else
self delay_thread( 1, ::self_delete ); self delay_thread( 1, ::self_delete );
} }
on_fire_timeout() on_fire_timeout()
{ {
self endon( "death" ); self endon( "death" );
wait 12; wait 12;
if ( isdefined( self ) && isalive( self ) ) if ( isdefined( self ) && isalive( self ) )
{ {
self.is_on_fire = 0; self.is_on_fire = 0;
self notify( "stop_flame_damage" ); self notify( "stop_flame_damage" );
} }
} }
should_do_flamethrower_attack() should_do_flamethrower_attack()
{ {
assert( isdefined( self.favoriteenemy ) ); assert( isdefined( self.favoriteenemy ) );
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\tMZ: Checking should flame\\n" ); println( "\\n\\tMZ: Checking should flame\\n" );
#/ #/
if ( isdefined( self.disable_complex_behaviors ) && self.disable_complex_behaviors ) if ( isdefined( self.disable_complex_behaviors ) && self.disable_complex_behaviors )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Not doing flamethrower because doing force aggro\\n" ); println( "\\n\\t\\tMZ: Not doing flamethrower because doing force aggro\\n" );
#/ #/
return false; return false;
} }
if ( isdefined( self.not_interruptable ) && self.not_interruptable ) if ( isdefined( self.not_interruptable ) && self.not_interruptable )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Not doing flamethrower because another behavior has set not_interruptable\\n" ); println( "\\n\\t\\tMZ: Not doing flamethrower because another behavior has set not_interruptable\\n" );
#/ #/
return false; return false;
} }
if ( !self mechz_check_in_arc( 26 ) ) if ( !self mechz_check_in_arc( 26 ) )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Not doing flamethrower because target is not in front arc\\n" ); println( "\\n\\t\\tMZ: Not doing flamethrower because target is not in front arc\\n" );
#/ #/
return false; return false;
} }
if ( isdefined( self.last_flamethrower_time ) && gettime() - self.last_flamethrower_time < level.mechz_flamethrower_cooldown_time ) if ( isdefined( self.last_flamethrower_time ) && gettime() - self.last_flamethrower_time < level.mechz_flamethrower_cooldown_time )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Not doing flamethrower because it is still on cooldown\\n" ); println( "\\n\\t\\tMZ: Not doing flamethrower because it is still on cooldown\\n" );
#/ #/
return false; return false;
} }
n_dist_sq = distancesquared( self.origin, self.favoriteenemy.origin ); n_dist_sq = distancesquared( self.origin, self.favoriteenemy.origin );
if ( n_dist_sq < 10000 || n_dist_sq > 50000 ) if ( n_dist_sq < 10000 || n_dist_sq > 50000 )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Not doing flamethrower because target is not in range\\n" ); println( "\\n\\t\\tMZ: Not doing flamethrower because target is not in range\\n" );
#/ #/
return false; return false;
} }
b_cansee = bullettracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), 0, undefined ); b_cansee = bullettracepassed( self.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), self.favoriteenemy.origin + vectorscale( ( 0, 0, 1 ), 36.0 ), 0, undefined );
if ( !b_cansee ) if ( !b_cansee )
{ {
/# /#
if ( getdvarint( #"_id_E7121222" ) > 1 ) if ( getdvarint( #"_id_E7121222" ) > 1 )
println( "\\n\\t\\tMZ: Not doing flamethrower because cannot see target\\n" ); println( "\\n\\t\\tMZ: Not doing flamethrower because cannot see target\\n" );
#/ #/
return false; return false;
} }
return true; return true;
} }
#using_animtree("mechz_claw"); #using_animtree("mechz_claw");
mechz_do_flamethrower_attack( tank_sweep ) mechz_do_flamethrower_attack( tank_sweep )
{ {
self endon( "death" ); self endon( "death" );
self endon( "kill_ft" ); self endon( "kill_ft" );
/# /#
if ( getdvarint( #"_id_E7121222" ) > 0 ) if ( getdvarint( #"_id_E7121222" ) > 0 )
println( "\\n\\tMZ: Doing Flamethrower Attack\\n" ); println( "\\n\\tMZ: Doing Flamethrower Attack\\n" );
#/ #/
self thread mechz_stop_basic_find_flesh(); self thread mechz_stop_basic_find_flesh();
self.ai_state = "flamethrower_attack"; self.ai_state = "flamethrower_attack";
self setgoalpos( self.origin ); self setgoalpos( self.origin );
self clearanim( %root, 0.2 ); self clearanim( %root, 0.2 );
self.last_flamethrower_time = gettime(); self.last_flamethrower_time = gettime();
self thread mechz_kill_flamethrower_watcher(); self thread mechz_kill_flamethrower_watcher();
if ( !isdefined( self.flamethrower_trigger ) ) if ( !isdefined( self.flamethrower_trigger ) )
self mechz_flamethrower_initial_setup(); self mechz_flamethrower_initial_setup();
n_nearby_enemies = 0; n_nearby_enemies = 0;
a_players = getplayers(); a_players = getplayers();
foreach ( player in a_players ) foreach ( player in a_players )
{ {
if ( distance2dsquared( player.origin, self.favoriteenemy.origin ) < 10000 ) if ( distance2dsquared( player.origin, self.favoriteenemy.origin ) < 10000 )
n_nearby_enemies++; n_nearby_enemies++;
} }
if ( isdefined( tank_sweep ) && tank_sweep ) if ( isdefined( tank_sweep ) && tank_sweep )
{ {
self.doing_tank_sweep = 1; self.doing_tank_sweep = 1;
self thread mechz_flamethrower_tank_sweep(); self thread mechz_flamethrower_tank_sweep();
} }
else if ( randomint( 100 ) < level.mechz_ft_sweep_chance && n_nearby_enemies > 1 ) else if ( randomint( 100 ) < level.mechz_ft_sweep_chance && n_nearby_enemies > 1 )
{ {
self.doing_ft_sweep = 1; self.doing_ft_sweep = 1;
self animscripted( self.origin, self.angles, "zm_flamethrower_sweep" ); self animscripted( self.origin, self.angles, "zm_flamethrower_sweep" );
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
} }
else else
{ {
self animscripted( self.origin, self.angles, "zm_flamethrower_aim_start" ); self animscripted( self.origin, self.angles, "zm_flamethrower_aim_start" );
self thread mechz_flamethrower_aim(); self thread mechz_flamethrower_aim();
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" ); self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
} }
self orientmode( "face default" ); self orientmode( "face default" );
if ( isdefined( self.doing_ft_sweep ) && self.doing_ft_sweep ) if ( isdefined( self.doing_ft_sweep ) && self.doing_ft_sweep )
self.doing_ft_sweep = 0; self.doing_ft_sweep = 0;
else else
{ {
self.cant_melee = 1; self.cant_melee = 1;
self waittill( "stop_ft" ); self waittill( "stop_ft" );
self mechz_flamethrower_cleanup(); self mechz_flamethrower_cleanup();
wait 0.5; wait 0.5;
self stopanimscripted(); self stopanimscripted();
return; return;
} }
self mechz_flamethrower_cleanup(); self mechz_flamethrower_cleanup();
} }
mechz_kill_flamethrower_watcher() mechz_kill_flamethrower_watcher()
{ {
self endon( "flamethrower_complete" ); self endon( "flamethrower_complete" );
self waittill_either( "kill_ft", "death" ); self waittill_either( "kill_ft", "death" );
self mechz_flamethrower_cleanup(); self mechz_flamethrower_cleanup();
} }
mechz_flamethrower_cleanup() mechz_flamethrower_cleanup()
{ {
self.fx_field = self.fx_field & ~64; self.fx_field = self.fx_field & ~64;
self setclientfield( "mechz_fx", self.fx_field ); self setclientfield( "mechz_fx", self.fx_field );
self.firing = 0; self.firing = 0;
self.doing_tank_sweep = 0; self.doing_tank_sweep = 0;
self.cant_melee = 0; self.cant_melee = 0;
self notify( "flamethrower_complete" ); self notify( "flamethrower_complete" );
} }

View File

@ -31,6 +31,10 @@ precache_fx()
main() main()
{ {
if ( getDvar( "mapname" ) == "zm_buried" && getDvar( "g_gametype" ) == "zclassic" )
{
return;
}
precache_fx(); precache_fx();
register_client_fields(); register_client_fields();
} }

View File

@ -179,7 +179,7 @@ mechz_do_manual_looping_fx( localclientnum, script_id, tag_name, fx_element, min
return; return;
playfxontag( localclientnum, fx_element, self, tag_name ); playfxontag( localclientnum, fx_element, self, tag_name );
//waitrealtime( randomfloatrange( min_wait, max_wait ) ); waitrealtime( randomfloatrange( min_wait, max_wait ) );
wait randomfloatrange( min_wait, max_wait ); wait randomfloatrange( min_wait, max_wait );
} }
} }
@ -199,7 +199,7 @@ mechz_screen_shake_loop( localclientnum )
while ( true ) while ( true )
{ {
self playrumbleonentity( localclientnum, "mechz_footsteps" ); self playrumbleonentity( localclientnum, "mechz_footsteps" );
//waitrealtime( 0.1 ); waitrealtime( 0.1 );
wait 0.1; wait 0.1;
} }
} }

View File

@ -1,5 +1,9 @@
main() main()
{ {
if ( getDvar( "mapname" ) == "zm_prison" )
{
return;
}
maps\mp\zombies\_zm_ai_brutus::main(); maps\mp\zombies\_zm_ai_brutus::main();
} }

View File

@ -5,17 +5,21 @@
main() main()
{ {
if ( getDvar( "mapname" ) == "zm_buried" ) if ( getDvar( "mapname" ) == "zm_buried" && getDvar( "g_gametype" ) == "zclassic" )
{ {
return; return;
} }
maps\mp\zombies\_zm_ai_ghost::precache_fx(); //maps\mp\zombies\_zm_ai_ghost::precache_fx();
maps\mp\zombies\_zm_ai_ghost::init(); //maps\mp\zombies\_zm_ai_ghost::init();
} }
init() init()
{ {
level thread ghost_zone_spawning_think(); if ( getDvar( "mapname" ) == "zm_buried" && getDvar( "g_gametype" ) == "zclassic" )
{
return;
}
//level thread ghost_zone_spawning_think();
} }
ghost_zone_spawning_think() ghost_zone_spawning_think()

View File

@ -6,12 +6,20 @@ main()
{ {
level thread on_player_connect(); level thread on_player_connect();
level thread command_thread(); level thread command_thread();
if ( getDvar( "mapname" ) == "zm_tomb" )
{
return;
}
maps\mp\zombies\_zm_ai_mechz::precache(); maps\mp\zombies\_zm_ai_mechz::precache();
maps\mp\_utility::onfinalizeinitialization_callback( ::register_clientfields ); maps\mp\_utility::onfinalizeinitialization_callback( ::register_clientfields );
} }
init() init()
{ {
if ( getDvar( "mapname" ) == "zm_tomb" )
{
return;
}
maps\mp\zombies\_zm_ai_mechz::init(); maps\mp\zombies\_zm_ai_mechz::init();
} }

View File

@ -1,12 +1,20 @@
main() main()
{ {
if ( getDvar( "mapname" ) == "zm_transit" && getDvar( "g_gametype" ) == "zclassic" )
{
return;
}
maps\mp\zombies\_zm_ai_screecher::precache(); maps\mp\zombies\_zm_ai_screecher::precache();
maps\mp\_utility::onfinalizeinitialization_callback( ::register_clientfields ); maps\mp\_utility::onfinalizeinitialization_callback( ::register_clientfields );
} }
init() init()
{ {
if ( getDvar( "mapname" ) == "zm_transit" && getDvar( "g_gametype" ) == "zclassic" )
{
return;
}
maps\mp\zombies\_zm_ai_screecher::init(); maps\mp\zombies\_zm_ai_screecher::init();
} }

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More