mirror of
https://github.com/JezuzLizard/t6-fastfile-mods.git
synced 2025-06-29 04:37:54 -05:00
Add sounds for mechz and brutus and fix scripts for the normal maps.
This commit is contained in:
@ -489,7 +489,11 @@ bus_attack()
|
||||
}
|
||||
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();
|
||||
}
|
||||
}
|
||||
@ -587,7 +591,11 @@ bus_disable( bus_attack_struct )
|
||||
success = 0;
|
||||
self.mod_melee = 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 )
|
||||
{
|
||||
@ -597,7 +605,8 @@ bus_disable( bus_attack_struct )
|
||||
if ( self.bus_attack_time >= 20 )
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
@ -1396,7 +1405,11 @@ avogadro_damage_func( einflictor, eattacker, idamage, idflags, smeansofdeath, sw
|
||||
if ( sweapon == "riotshield_zm" )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -151,50 +151,53 @@ setup_interaction_matrix()
|
||||
level.interaction_types["perk_machine"].spawn_bias = 800;
|
||||
level.interaction_types["perk_machine"].num_times_to_scale = 3;
|
||||
level.interaction_types["perk_machine"].unlock_cost = 2000;
|
||||
// level.interaction_types["craftable_table"] = spawnstruct();
|
||||
// level.interaction_types["craftable_table"].priority = 2;
|
||||
// level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table";
|
||||
// level.interaction_types["craftable_table"].notify_name = "table_smash_anim";
|
||||
// level.interaction_types["craftable_table"].action_notetrack = "fire";
|
||||
// level.interaction_types["craftable_table"].validity_func = ::is_craftable_table_valid;
|
||||
// level.interaction_types["craftable_table"].get_func = ::get_craftable_tables;
|
||||
// level.interaction_types["craftable_table"].value_func = ::get_dist_score;
|
||||
// level.interaction_types["craftable_table"].interact_func = ::craftable_table_lock;
|
||||
// level.interaction_types["craftable_table"].spawn_bias = 600;
|
||||
// level.interaction_types["craftable_table"].num_times_to_scale = 1;
|
||||
// level.interaction_types["craftable_table"].unlock_cost = 2000;
|
||||
// level.interaction_types["craftable_table"].interaction_z_offset = -15;
|
||||
// level.interaction_types["craftable_table"].interaction_yaw_offset = 270;
|
||||
// level.interaction_types["craftable_table"].fx_z_offset = -44;
|
||||
// level.interaction_types["craftable_table"].fx_yaw_offset = 270;
|
||||
// level.interaction_types["trap"] = spawnstruct();
|
||||
// level.interaction_types["trap"].priority = 3;
|
||||
// level.interaction_types["trap"].animstate = "zm_smash_trap";
|
||||
// level.interaction_types["trap"].notify_name = "trap_smash_anim";
|
||||
// level.interaction_types["trap"].action_notetrack = "fire";
|
||||
// level.interaction_types["trap"].validity_func = ::is_trap_valid;
|
||||
// level.interaction_types["trap"].get_func = ::get_traps;
|
||||
// level.interaction_types["trap"].value_func = ::get_dist_score;
|
||||
// level.interaction_types["trap"].interact_func = ::trap_smash;
|
||||
// level.interaction_types["trap"].spawn_bias = 400;
|
||||
// level.interaction_types["trap"].interaction_z_offset = -15;
|
||||
// level.interaction_types["plane_ramp"] = spawnstruct();
|
||||
// level.interaction_types["plane_ramp"].priority = 4;
|
||||
// level.interaction_types["plane_ramp"].animstate = "zm_lock_plane_ramp";
|
||||
// level.interaction_types["plane_ramp"].notify_name = "plane_lock_anim";
|
||||
// level.interaction_types["plane_ramp"].action_notetrack = "locked";
|
||||
// level.interaction_types["plane_ramp"].end_notetrack = "lock_done";
|
||||
// level.interaction_types["plane_ramp"].validity_func = ::is_plane_ramp_valid;
|
||||
// level.interaction_types["plane_ramp"].get_func = ::get_plane_ramps;
|
||||
// level.interaction_types["plane_ramp"].value_func = ::get_dist_score;
|
||||
// level.interaction_types["plane_ramp"].interact_func = ::plane_ramp_lock;
|
||||
// level.interaction_types["plane_ramp"].spawn_bias = 500;
|
||||
// level.interaction_types["plane_ramp"].num_times_to_scale = 3;
|
||||
// level.interaction_types["plane_ramp"].unlock_cost = 2000;
|
||||
// level.interaction_types["plane_ramp"].interaction_z_offset = -60;
|
||||
// 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;
|
||||
if ( getDvar( "mapname" ) == "zm_prison" )
|
||||
{
|
||||
level.interaction_types["craftable_table"] = spawnstruct();
|
||||
level.interaction_types["craftable_table"].priority = 2;
|
||||
level.interaction_types["craftable_table"].animstate = "zm_smash_craftable_table";
|
||||
level.interaction_types["craftable_table"].notify_name = "table_smash_anim";
|
||||
level.interaction_types["craftable_table"].action_notetrack = "fire";
|
||||
level.interaction_types["craftable_table"].validity_func = ::is_craftable_table_valid;
|
||||
level.interaction_types["craftable_table"].get_func = ::get_craftable_tables;
|
||||
level.interaction_types["craftable_table"].value_func = ::get_dist_score;
|
||||
level.interaction_types["craftable_table"].interact_func = ::craftable_table_lock;
|
||||
level.interaction_types["craftable_table"].spawn_bias = 600;
|
||||
level.interaction_types["craftable_table"].num_times_to_scale = 1;
|
||||
level.interaction_types["craftable_table"].unlock_cost = 2000;
|
||||
level.interaction_types["craftable_table"].interaction_z_offset = -15;
|
||||
level.interaction_types["craftable_table"].interaction_yaw_offset = 270;
|
||||
level.interaction_types["craftable_table"].fx_z_offset = -44;
|
||||
level.interaction_types["craftable_table"].fx_yaw_offset = 270;
|
||||
level.interaction_types["trap"] = spawnstruct();
|
||||
level.interaction_types["trap"].priority = 3;
|
||||
level.interaction_types["trap"].animstate = "zm_smash_trap";
|
||||
level.interaction_types["trap"].notify_name = "trap_smash_anim";
|
||||
level.interaction_types["trap"].action_notetrack = "fire";
|
||||
level.interaction_types["trap"].validity_func = ::is_trap_valid;
|
||||
level.interaction_types["trap"].get_func = ::get_traps;
|
||||
level.interaction_types["trap"].value_func = ::get_dist_score;
|
||||
level.interaction_types["trap"].interact_func = ::trap_smash;
|
||||
level.interaction_types["trap"].spawn_bias = 400;
|
||||
level.interaction_types["trap"].interaction_z_offset = -15;
|
||||
level.interaction_types["plane_ramp"] = spawnstruct();
|
||||
level.interaction_types["plane_ramp"].priority = 4;
|
||||
level.interaction_types["plane_ramp"].animstate = "zm_lock_plane_ramp";
|
||||
level.interaction_types["plane_ramp"].notify_name = "plane_lock_anim";
|
||||
level.interaction_types["plane_ramp"].action_notetrack = "locked";
|
||||
level.interaction_types["plane_ramp"].end_notetrack = "lock_done";
|
||||
level.interaction_types["plane_ramp"].validity_func = ::is_plane_ramp_valid;
|
||||
level.interaction_types["plane_ramp"].get_func = ::get_plane_ramps;
|
||||
level.interaction_types["plane_ramp"].value_func = ::get_dist_score;
|
||||
level.interaction_types["plane_ramp"].interact_func = ::plane_ramp_lock;
|
||||
level.interaction_types["plane_ramp"].spawn_bias = 500;
|
||||
level.interaction_types["plane_ramp"].num_times_to_scale = 3;
|
||||
level.interaction_types["plane_ramp"].unlock_cost = 2000;
|
||||
level.interaction_types["plane_ramp"].interaction_z_offset = -60;
|
||||
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"].priority = 5;
|
||||
level.interaction_types["blocker"].animstate = "zm_smash_blocker";
|
||||
@ -2360,12 +2363,19 @@ get_brutus_interest_points()
|
||||
for ( i = 0; i < zone_names.size; i++ )
|
||||
{
|
||||
self thread get_zone_perk_machines( 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] );
|
||||
if ( getDvar( "mapname" ) == "zm_prison" )
|
||||
{
|
||||
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" );
|
||||
}
|
||||
|
||||
@ -2631,7 +2641,8 @@ check_plane_valid( player )
|
||||
plane_struct.is_locked = 0;
|
||||
plane_struct.locked_cost = undefined;
|
||||
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;
|
||||
|
@ -809,7 +809,10 @@ ghost_think()
|
||||
{
|
||||
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 init_thinking();
|
||||
|
||||
@ -1592,11 +1595,13 @@ paralyzer_callback( player, upgraded )
|
||||
if ( isdefined( self.ignore_slowgun_anim_rates ) && self.ignore_slowgun_anim_rates )
|
||||
return;
|
||||
|
||||
// if ( upgraded )
|
||||
// self setclientfield( "slowgun_fx", 5 );
|
||||
// else
|
||||
// self setclientfield( "slowgun_fx", 1 );
|
||||
|
||||
if ( level.script == "zm_buried" )
|
||||
{
|
||||
if ( upgraded )
|
||||
self setclientfield( "slowgun_fx", 5 );
|
||||
else
|
||||
self setclientfield( "slowgun_fx", 1 );
|
||||
}
|
||||
self [[ level.slowgun_zombie_slow_for_time ]]( 0.3, 0 );
|
||||
}
|
||||
|
||||
|
@ -77,14 +77,12 @@ ghost_bad_path_init()
|
||||
level.bad_zones[0].adjacent = [];
|
||||
level.bad_zones[0].adjacent[0] = "zone_underground_courthouse2";
|
||||
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[1] = spawnstruct();
|
||||
level.bad_zones[1].name = "zone_underground_courthouse2";
|
||||
level.bad_zones[1].adjacent = [];
|
||||
level.bad_zones[1].adjacent[0] = "zone_underground_courthouse";
|
||||
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[2] = spawnstruct();
|
||||
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].flag = "tunnels2courthouse";
|
||||
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[3] = spawnstruct();
|
||||
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].flag = "tunnels2courthouse";
|
||||
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[4] = spawnstruct();
|
||||
level.bad_zones[4].name = "zone_tunnels_center";
|
||||
level.bad_zones[4].adjacent = [];
|
||||
level.bad_zones[4].adjacent[0] = "zone_tunnels_north";
|
||||
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[5] = spawnstruct();
|
||||
level.bad_zones[5].name = "zone_tunnels_south";
|
||||
level.bad_zones[5].adjacent = [];
|
||||
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" );
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -14,291 +14,291 @@
|
||||
|
||||
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;
|
||||
return false;
|
||||
}
|
||||
self.jump_requested = 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
dist = distancesquared( self.origin, self.jump_pos.origin );
|
||||
dist = distancesquared( self.origin, self.jump_pos.origin );
|
||||
|
||||
if ( dist <= 100 )
|
||||
return true;
|
||||
if ( dist <= 100 )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
mechz_jump_think( spawn_pos )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_jump_think" );
|
||||
self.closest_jump_point = spawn_pos;
|
||||
self.goal_pos = self.origin;
|
||||
self setgoalpos( self.goal_pos );
|
||||
self thread mechz_jump_stuck_watcher();
|
||||
self endon( "death" );
|
||||
self endon( "stop_jump_think" );
|
||||
self.closest_jump_point = spawn_pos;
|
||||
self.goal_pos = self.origin;
|
||||
self setgoalpos( self.goal_pos );
|
||||
self thread mechz_jump_stuck_watcher();
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( isdefined( self.jump_requested ) && self.jump_requested )
|
||||
{
|
||||
if ( !self mechz_should_jump() )
|
||||
{
|
||||
self.jump_requested = 0;
|
||||
self.jump_pos = undefined;
|
||||
}
|
||||
while ( true )
|
||||
{
|
||||
if ( isdefined( self.jump_requested ) && self.jump_requested )
|
||||
{
|
||||
if ( !self mechz_should_jump() )
|
||||
{
|
||||
self.jump_requested = 0;
|
||||
self.jump_pos = undefined;
|
||||
}
|
||||
|
||||
wait 1;
|
||||
continue;
|
||||
}
|
||||
wait 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
if ( !isdefined( self.ai_state ) || self.ai_state != "find_flesh" )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( isdefined( self.not_interruptable ) && self.not_interruptable )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
if ( isdefined( self.not_interruptable ) && self.not_interruptable )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
/#
|
||||
if ( isdefined( self.force_behavior ) && self.force_behavior )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
if ( isdefined( self.force_behavior ) && self.force_behavior )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
#/
|
||||
|
||||
if ( self mechz_should_jump() )
|
||||
{
|
||||
self.jump_requested = 1;
|
||||
self.jump_pos = get_closest_mechz_spawn_pos( self.origin );
|
||||
if ( self mechz_should_jump() )
|
||||
{
|
||||
self.jump_requested = 1;
|
||||
self.jump_pos = get_closest_mechz_spawn_pos( self.origin );
|
||||
|
||||
if ( !isdefined( self.jump_pos ) )
|
||||
self.jump_requested = 0;
|
||||
}
|
||||
if ( !isdefined( self.jump_pos ) )
|
||||
self.jump_requested = 0;
|
||||
}
|
||||
|
||||
wait 1;
|
||||
}
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
watch_for_riot_shield_melee()
|
||||
{
|
||||
self endon( "new_stuck_watcher" );
|
||||
self endon( "death" );
|
||||
self endon( "new_stuck_watcher" );
|
||||
self endon( "death" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "item_attack" );
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "item_attack" );
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\tMZ: Resetting fail count because of item attack\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\tMZ: Resetting fail count because of item attack\\n" );
|
||||
#/
|
||||
self.fail_count = 0;
|
||||
}
|
||||
self.fail_count = 0;
|
||||
}
|
||||
}
|
||||
|
||||
watch_for_valid_melee()
|
||||
{
|
||||
self endon( "new_stuck_watcher" );
|
||||
self endon( "death" );
|
||||
self endon( "new_stuck_watcher" );
|
||||
self endon( "death" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittillmatch( "melee_anim", "end" );
|
||||
while ( true )
|
||||
{
|
||||
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 )
|
||||
println( "\\n\\tMZ: Resetting fail count because of melee\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\tMZ: Resetting fail count because of melee\\n" );
|
||||
#/
|
||||
self.fail_count = 0;
|
||||
}
|
||||
}
|
||||
self.fail_count = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mechz_jump_stuck_watcher()
|
||||
{
|
||||
self notify( "new_stuck_watcher" );
|
||||
self endon( "death" );
|
||||
self endon( "new_stuck_watcher" );
|
||||
self.fail_count = 0;
|
||||
self thread watch_for_valid_melee();
|
||||
self thread watch_for_riot_shield_melee();
|
||||
self notify( "new_stuck_watcher" );
|
||||
self endon( "death" );
|
||||
self endon( "new_stuck_watcher" );
|
||||
self.fail_count = 0;
|
||||
self thread watch_for_valid_melee();
|
||||
self thread watch_for_riot_shield_melee();
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( !isdefined( self.goal_pos ) )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
while ( true )
|
||||
{
|
||||
if ( !isdefined( self.goal_pos ) )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( isdefined( self.not_interruptable ) && self.not_interruptable )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
if ( isdefined( self.not_interruptable ) && self.not_interruptable )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( isdefined( self.ai_state ) && self.ai_state != "find_flesh" )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
if ( isdefined( self.ai_state ) && self.ai_state != "find_flesh" )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
/#
|
||||
if ( isdefined( self.force_behavior ) && self.force_behavior )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
if ( isdefined( self.force_behavior ) && self.force_behavior )
|
||||
{
|
||||
wait 0.05;
|
||||
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 )
|
||||
println( "\\n\\tMZ: Incrementing fail count\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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++;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.fail_count++;
|
||||
}
|
||||
else
|
||||
{
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\tMZ: Resetting fail count because of good path\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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()
|
||||
{
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\tMZ: Checking should jump\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\tMZ: Checking should jump\\n" );
|
||||
#/
|
||||
|
||||
if ( !isdefined( self.favoriteenemy ) )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) )
|
||||
{
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\t\\tMZ: Not doing jump because has no enemy\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
println( "\\n\\t\\tMZ: Doing jump because target is too far\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
println( "\\n\\t\\tMZ: Doing jump because has failed too many pathfind checks\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "kill_jump" );
|
||||
self endon( "death" );
|
||||
self endon( "kill_jump" );
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 0 )
|
||||
println( "\\nMZ: Doing Jump-Teleport\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 0 )
|
||||
println( "\\nMZ: Doing Jump-Teleport\\n" );
|
||||
#/
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\nMZ: Jump setting not interruptable\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\nMZ: Jump setting not interruptable\\n" );
|
||||
#/
|
||||
self.not_interruptable = 1;
|
||||
self setfreecameralockonallowed( 0 );
|
||||
self thread mechz_jump_vo();
|
||||
self animscripted( self.origin, self.angles, "zm_fly_out" );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
|
||||
self ghost();
|
||||
self.mechz_hidden = 1;
|
||||
self.not_interruptable = 1;
|
||||
self setfreecameralockonallowed( 0 );
|
||||
self thread mechz_jump_vo();
|
||||
self animscripted( self.origin, self.angles, "zm_fly_out" );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
|
||||
self ghost();
|
||||
self.mechz_hidden = 1;
|
||||
|
||||
if ( isdefined( self.m_claw ) )
|
||||
self.m_claw ghost();
|
||||
if ( isdefined( self.m_claw ) )
|
||||
self.m_claw ghost();
|
||||
|
||||
if ( self.fx_field )
|
||||
self.fx_field_old = self.fx_field;
|
||||
if ( self.fx_field )
|
||||
self.fx_field_old = self.fx_field;
|
||||
|
||||
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop();
|
||||
self fx_cleanup();
|
||||
self animscripted( self.origin, self.angles, "zm_fly_hover" );
|
||||
wait( level.mechz_jump_delay );
|
||||
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow_stop();
|
||||
self fx_cleanup();
|
||||
self animscripted( self.origin, self.angles, "zm_fly_hover" );
|
||||
wait( level.mechz_jump_delay );
|
||||
|
||||
if ( isdefined( wait_for_stationary_tank ) && wait_for_stationary_tank )
|
||||
level.vh_tank ent_flag_waitopen( "tank_moving" );
|
||||
if ( isdefined( wait_for_stationary_tank ) && wait_for_stationary_tank )
|
||||
level.vh_tank ent_flag_waitopen( "tank_moving" );
|
||||
|
||||
self notsolid();
|
||||
closest_jump_point = get_best_mechz_spawn_pos( 1 );
|
||||
self notsolid();
|
||||
closest_jump_point = get_best_mechz_spawn_pos( 1 );
|
||||
|
||||
if ( isdefined( closest_jump_point ) )
|
||||
self.closest_jump_point = closest_jump_point;
|
||||
if ( isdefined( closest_jump_point ) )
|
||||
self.closest_jump_point = closest_jump_point;
|
||||
|
||||
if ( !isdefined( self.closest_jump_point.angles ) )
|
||||
self.closest_jump_point.angles = ( 0, 0, 0 );
|
||||
if ( !isdefined( self.closest_jump_point.angles ) )
|
||||
self.closest_jump_point.angles = ( 0, 0, 0 );
|
||||
|
||||
self animscripted( self.closest_jump_point.origin, self.closest_jump_point.angles, "zm_fly_in" );
|
||||
self solid();
|
||||
self.mechz_hidden = 0;
|
||||
self show();
|
||||
self.fx_field = self.fx_field_old;
|
||||
self.fx_field_old = undefined;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow();
|
||||
self animscripted( self.closest_jump_point.origin, self.closest_jump_point.angles, "zm_fly_in" );
|
||||
self solid();
|
||||
self.mechz_hidden = 0;
|
||||
self show();
|
||||
self.fx_field = self.fx_field_old;
|
||||
self.fx_field_old = undefined;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self thread maps\mp\zombies\_zm_spawner::zombie_eye_glow();
|
||||
|
||||
if ( isdefined( self.m_claw ) )
|
||||
self.m_claw show();
|
||||
if ( isdefined( self.m_claw ) )
|
||||
self.m_claw show();
|
||||
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
|
||||
self.not_interruptable = 0;
|
||||
self setfreecameralockonallowed( 1 );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "jump_anim" );
|
||||
self.not_interruptable = 0;
|
||||
self setfreecameralockonallowed( 1 );
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\nMZ: Jump clearing not interruptable\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\nMZ: Jump clearing not interruptable\\n" );
|
||||
#/
|
||||
mechz_jump_cleanup();
|
||||
mechz_jump_cleanup();
|
||||
}
|
||||
|
||||
mechz_kill_jump_watcher()
|
||||
{
|
||||
self endon( "jump_complete" );
|
||||
self waittill_either( "death", "kill_jump" );
|
||||
self mechz_jump_cleanup();
|
||||
self endon( "jump_complete" );
|
||||
self waittill_either( "death", "kill_jump" );
|
||||
self mechz_jump_cleanup();
|
||||
}
|
||||
|
||||
mechz_jump_cleanup()
|
||||
{
|
||||
self.fx_field = self.fx_field & ~128;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self stopanimscripted();
|
||||
self notify( "jump_complete" );
|
||||
self.fx_field = self.fx_field & ~128;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self stopanimscripted();
|
||||
self notify( "jump_complete" );
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -11,304 +11,304 @@
|
||||
mechz_debug()
|
||||
{
|
||||
/#
|
||||
while ( true )
|
||||
{
|
||||
debug_level = getdvarint( #"_id_E7121222" );
|
||||
while ( true )
|
||||
{
|
||||
debug_level = getdvarint( #"_id_E7121222" );
|
||||
|
||||
if ( isdefined( debug_level ) && debug_level )
|
||||
{
|
||||
if ( debug_level == 1 )
|
||||
{
|
||||
mechz_array = getentarray( "mechz_zombie_ai" );
|
||||
if ( isdefined( debug_level ) && debug_level )
|
||||
{
|
||||
if ( debug_level == 1 )
|
||||
{
|
||||
mechz_array = getentarray( "mechz_zombie_ai" );
|
||||
|
||||
for ( i = 0; i < mechz_array.size; i++ )
|
||||
{
|
||||
if ( isdefined( mechz_array[i].goal_pos ) )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for ( i = 0; i < mechz_array.size; i++ )
|
||||
{
|
||||
if ( isdefined( mechz_array[i].goal_pos ) )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
setup_devgui()
|
||||
{
|
||||
/#
|
||||
setdvar( "spawn_Mechz", "off" );
|
||||
setdvar( "force_mechz_jump", "off" );
|
||||
setdvar( "test_mechz_tank", "off" );
|
||||
setdvar( "test_mechz_robot", "off" );
|
||||
setdvar( "reset_mechz_thinking", "off" );
|
||||
setdvar( "test_mechz_sprint", "off" );
|
||||
setdvar( "mechz_force_behavior", "none" );
|
||||
setdvarint( "mechz_behavior_orient", 0 );
|
||||
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/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/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 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/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/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/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/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/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/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/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/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 Sprint:4\" \"test_mechz_sprint on\"\n" );
|
||||
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Reset Mech:5\" \"reset_mechz_thinking on\"\n" );
|
||||
level thread watch_devgui_mechz();
|
||||
setdvar( "spawn_Mechz", "off" );
|
||||
setdvar( "force_mechz_jump", "off" );
|
||||
setdvar( "test_mechz_tank", "off" );
|
||||
setdvar( "test_mechz_robot", "off" );
|
||||
setdvar( "reset_mechz_thinking", "off" );
|
||||
setdvar( "test_mechz_sprint", "off" );
|
||||
setdvar( "mechz_force_behavior", "none" );
|
||||
setdvarint( "mechz_behavior_orient", 0 );
|
||||
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/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/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 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/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/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/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/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/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/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/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/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 Sprint:4\" \"test_mechz_sprint on\"\n" );
|
||||
adddebugcommand( "devgui_cmd \"Zombies/MechZ:3/Reset Mech:5\" \"reset_mechz_thinking on\"\n" );
|
||||
level thread watch_devgui_mechz();
|
||||
#/
|
||||
}
|
||||
|
||||
watch_devgui_mechz()
|
||||
{
|
||||
/#
|
||||
while ( true )
|
||||
{
|
||||
if ( getdvar( #"_id_877D2B64" ) == "on" )
|
||||
{
|
||||
mechz_health_increases();
|
||||
level.mechz_left_to_spawn = 1;
|
||||
while ( true )
|
||||
{
|
||||
if ( getdvar( #"_id_877D2B64" ) == "on" )
|
||||
{
|
||||
mechz_health_increases();
|
||||
level.mechz_left_to_spawn = 1;
|
||||
|
||||
if ( getdvarint( #"_id_FA81816F" ) >= 2 )
|
||||
level.round_number++;
|
||||
if ( getdvarint( #"_id_FA81816F" ) >= 2 )
|
||||
level.round_number++;
|
||||
|
||||
level notify( "spawn_mechz" );
|
||||
setdvar( "spawn_Mechz", "off" );
|
||||
level.mechz_last_spawn_round = 0;
|
||||
}
|
||||
level notify( "spawn_mechz" );
|
||||
setdvar( "spawn_Mechz", "off" );
|
||||
level.mechz_last_spawn_round = 0;
|
||||
}
|
||||
|
||||
if ( getdvar( #"_id_7D9211F9" ) != "none" )
|
||||
{
|
||||
behavior = getdvar( #"_id_7D9211F9" );
|
||||
zombies = getaiarray( "axis" );
|
||||
if ( getdvar( #"_id_7D9211F9" ) != "none" )
|
||||
{
|
||||
behavior = getdvar( #"_id_7D9211F9" );
|
||||
zombies = getaiarray( "axis" );
|
||||
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
zombies[i] thread mechz_force_behavior( behavior );
|
||||
}
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
zombies[i] thread mechz_force_behavior( behavior );
|
||||
}
|
||||
|
||||
setdvar( "mechz_force_behavior", "none" );
|
||||
}
|
||||
setdvar( "mechz_force_behavior", "none" );
|
||||
}
|
||||
|
||||
if ( getdvar( #"_id_BD7CA008" ) == "on" )
|
||||
{
|
||||
setdvar( "test_mechz_tank", "off" );
|
||||
mechz = undefined;
|
||||
zombies = getaiarray( "axis" );
|
||||
if ( getdvar( #"_id_BD7CA008" ) == "on" )
|
||||
{
|
||||
setdvar( "test_mechz_tank", "off" );
|
||||
mechz = undefined;
|
||||
zombies = getaiarray( "axis" );
|
||||
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
mechz = zombies[i];
|
||||
}
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
mechz = zombies[i];
|
||||
}
|
||||
|
||||
if ( !isdefined( mechz ) )
|
||||
continue;
|
||||
if ( !isdefined( mechz ) )
|
||||
continue;
|
||||
|
||||
mechz.not_interruptable = 1;
|
||||
mechz mechz_stop_basic_find_flesh();
|
||||
mechz.ai_state = "devgui";
|
||||
mechz.goal_pos = ( 446, -4318, 200 );
|
||||
mechz setgoalpos( mechz.goal_pos );
|
||||
}
|
||||
mechz.not_interruptable = 1;
|
||||
mechz mechz_stop_basic_find_flesh();
|
||||
mechz.ai_state = "devgui";
|
||||
mechz.goal_pos = ( 446, -4318, 200 );
|
||||
mechz setgoalpos( mechz.goal_pos );
|
||||
}
|
||||
|
||||
if ( getdvar( #"_id_6CF3EB40" ) == "on" )
|
||||
{
|
||||
setdvar( "test_mechz_robot", "off" );
|
||||
mechz = undefined;
|
||||
zombies = getaiarray( "axis" );
|
||||
if ( getdvar( #"_id_6CF3EB40" ) == "on" )
|
||||
{
|
||||
setdvar( "test_mechz_robot", "off" );
|
||||
mechz = undefined;
|
||||
zombies = getaiarray( "axis" );
|
||||
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
mechz = zombies[i];
|
||||
}
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
mechz = zombies[i];
|
||||
}
|
||||
|
||||
if ( !isdefined( mechz ) )
|
||||
continue;
|
||||
if ( !isdefined( mechz ) )
|
||||
continue;
|
||||
|
||||
mechz.not_interruptable = 1;
|
||||
mechz mechz_stop_basic_find_flesh();
|
||||
mechz.ai_state = "devgui";
|
||||
mechz.goal_pos = ( 1657, -336, 92 );
|
||||
mechz setgoalpos( mechz.goal_pos );
|
||||
}
|
||||
mechz.not_interruptable = 1;
|
||||
mechz mechz_stop_basic_find_flesh();
|
||||
mechz.ai_state = "devgui";
|
||||
mechz.goal_pos = ( 1657, -336, 92 );
|
||||
mechz setgoalpos( mechz.goal_pos );
|
||||
}
|
||||
|
||||
if ( getdvar( #"_id_0DE1409A" ) == "on" )
|
||||
{
|
||||
setdvar( "test_mechz_sprint", "off" );
|
||||
zombies = getaiarray( "axis" );
|
||||
if ( getdvar( #"_id_0DE1409A" ) == "on" )
|
||||
{
|
||||
setdvar( "test_mechz_sprint", "off" );
|
||||
zombies = getaiarray( "axis" );
|
||||
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
zombies[i].force_sprint = 1;
|
||||
}
|
||||
}
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
zombies[i].force_sprint = 1;
|
||||
}
|
||||
}
|
||||
|
||||
if ( getdvar( #"_id_772BCD39" ) == "on" )
|
||||
{
|
||||
setdvar( "reset_mechz_thinking", "off" );
|
||||
zombies = getaiarray( "axis" );
|
||||
if ( getdvar( #"_id_772BCD39" ) == "on" )
|
||||
{
|
||||
setdvar( "reset_mechz_thinking", "off" );
|
||||
zombies = getaiarray( "axis" );
|
||||
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
{
|
||||
zombies[i].not_interruptable = 0;
|
||||
zombies[i].force_sprint = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
{
|
||||
zombies[i].not_interruptable = 0;
|
||||
zombies[i].force_sprint = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
wait 0.1;
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
mechz_force_behavior( behavior )
|
||||
{
|
||||
/#
|
||||
self notify( "kill_force_behavior" );
|
||||
self thread mechz_stop_basic_find_flesh();
|
||||
self.ignoreall = 1;
|
||||
self.force_behavior = 1;
|
||||
self notify( "kill_force_behavior" );
|
||||
self thread mechz_stop_basic_find_flesh();
|
||||
self.ignoreall = 1;
|
||||
self.force_behavior = 1;
|
||||
|
||||
if ( behavior == "jump_in" )
|
||||
self thread mechz_force_jump_in();
|
||||
if ( behavior == "jump_in" )
|
||||
self thread mechz_force_jump_in();
|
||||
|
||||
if ( behavior == "jump_out" )
|
||||
self thread mechz_force_jump_out();
|
||||
if ( behavior == "jump_out" )
|
||||
self thread mechz_force_jump_out();
|
||||
|
||||
if ( behavior == "flamethrower" )
|
||||
self thread mechz_force_flamethrower();
|
||||
if ( behavior == "flamethrower" )
|
||||
self thread mechz_force_flamethrower();
|
||||
|
||||
if ( behavior == "claw_attack" )
|
||||
self thread mechz_force_claw_attack();
|
||||
if ( behavior == "claw_attack" )
|
||||
self thread mechz_force_claw_attack();
|
||||
|
||||
if ( behavior == "damage_armor" )
|
||||
self thread mechz_force_damage_armor();
|
||||
if ( behavior == "damage_armor" )
|
||||
self thread mechz_force_damage_armor();
|
||||
|
||||
if ( behavior == "damage_faceplate" )
|
||||
self thread mechz_force_damage_faceplate();
|
||||
if ( behavior == "damage_faceplate" )
|
||||
self thread mechz_force_damage_faceplate();
|
||||
|
||||
if ( behavior == "melee" )
|
||||
self thread mechz_force_melee();
|
||||
if ( behavior == "melee" )
|
||||
self thread mechz_force_melee();
|
||||
|
||||
if ( behavior == "none" )
|
||||
{
|
||||
self.ignoreall = 0;
|
||||
self.force_behavior = 0;
|
||||
self notify( "kill_force_behavior" );
|
||||
}
|
||||
if ( behavior == "none" )
|
||||
{
|
||||
self.ignoreall = 0;
|
||||
self.force_behavior = 0;
|
||||
self notify( "kill_force_behavior" );
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
get_behavior_orient()
|
||||
{
|
||||
/#
|
||||
behavior_orient = getdvarint( #"_id_2F660A7B" );
|
||||
return level.players[0].angles + vectorscale( ( 0, 1, 0 ), 180.0 ) + ( 0, behavior_orient, 0 );
|
||||
behavior_orient = getdvarint( #"_id_2F660A7B" );
|
||||
return level.players[0].angles + vectorscale( ( 0, 1, 0 ), 180.0 ) + ( 0, behavior_orient, 0 );
|
||||
#/
|
||||
}
|
||||
|
||||
setup_force_behavior()
|
||||
{
|
||||
/#
|
||||
if ( !isdefined( level.test_align_struct ) )
|
||||
{
|
||||
player = get_players()[0];
|
||||
pos = player.origin;
|
||||
offset = anglestoforward( player.angles );
|
||||
offset = vectornormalize( offset );
|
||||
level.test_align_struct = spawn( "script_model", pos + 300 * offset );
|
||||
level.test_align_struct setmodel( "tag_origin" );
|
||||
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.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.0 );
|
||||
}
|
||||
if ( !isdefined( level.test_align_struct ) )
|
||||
{
|
||||
player = get_players()[0];
|
||||
pos = player.origin;
|
||||
offset = anglestoforward( player.angles );
|
||||
offset = vectornormalize( offset );
|
||||
level.test_align_struct = spawn( "script_model", pos + 300 * offset );
|
||||
level.test_align_struct setmodel( "tag_origin" );
|
||||
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.angles = player.angles + vectorscale( ( 0, 1, 0 ), 180.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 & ~128;
|
||||
self.fx_field = self.fx_field & ~256;
|
||||
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 & ~128;
|
||||
self.fx_field = self.fx_field & ~256;
|
||||
#/
|
||||
}
|
||||
|
||||
align_test_struct()
|
||||
{
|
||||
/#
|
||||
while ( true )
|
||||
{
|
||||
pos = level.players[0].origin;
|
||||
offset = anglestoforward( level.players[0].angles );
|
||||
offset = vectornormalize( offset );
|
||||
dist = getdvarint( #"_id_6DCD047E" );
|
||||
level.test_align_struct.origin = pos + dist * offset;
|
||||
level.test_align_struct.angles = get_behavior_orient();
|
||||
wait 0.05;
|
||||
}
|
||||
while ( true )
|
||||
{
|
||||
pos = level.players[0].origin;
|
||||
offset = anglestoforward( level.players[0].angles );
|
||||
offset = vectornormalize( offset );
|
||||
dist = getdvarint( #"_id_6DCD047E" );
|
||||
level.test_align_struct.origin = pos + dist * offset;
|
||||
level.test_align_struct.angles = get_behavior_orient();
|
||||
wait 0.05;
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
scripted_behavior( anim_scripted_name, notify_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 animscripted( level.test_align_struct.origin, level.test_align_struct.angles, anim_scripted_name );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( notify_name );
|
||||
#/
|
||||
}
|
||||
|
||||
mechz_force_jump_in()
|
||||
{
|
||||
/#
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_spawn", "jump_anim" );
|
||||
}
|
||||
while ( true )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_spawn", "jump_anim" );
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
mechz_force_jump_out()
|
||||
{
|
||||
/#
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_fly_out", "jump_anim" );
|
||||
self ghost();
|
||||
self animscripted( self.origin, self.angles, "zm_fly_hover" );
|
||||
wait( level.mechz_jump_delay );
|
||||
self show();
|
||||
self scripted_behavior( "zm_fly_in", "jump_anim" );
|
||||
}
|
||||
while ( true )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_fly_out", "jump_anim" );
|
||||
self ghost();
|
||||
self animscripted( self.origin, self.angles, "zm_fly_hover" );
|
||||
wait( level.mechz_jump_delay );
|
||||
self show();
|
||||
self scripted_behavior( "zm_fly_in", "jump_anim" );
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
@ -317,189 +317,189 @@ mechz_force_jump_out()
|
||||
mechz_force_flamethrower()
|
||||
{
|
||||
/#
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
curr_aim_anim = 1;
|
||||
curr_timer = 0;
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" );
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
curr_aim_anim = 1;
|
||||
curr_timer = 0;
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_flamethrower_aim_start", "flamethrower_anim" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( curr_timer > 3 )
|
||||
{
|
||||
curr_aim_anim++;
|
||||
curr_timer = 0;
|
||||
while ( true )
|
||||
{
|
||||
if ( curr_timer > 3 )
|
||||
{
|
||||
curr_aim_anim++;
|
||||
curr_timer = 0;
|
||||
|
||||
if ( curr_aim_anim < 10 )
|
||||
iprintln( "Testing aim_" + curr_aim_anim );
|
||||
}
|
||||
if ( curr_aim_anim < 10 )
|
||||
iprintln( "Testing aim_" + curr_aim_anim );
|
||||
}
|
||||
|
||||
if ( curr_aim_anim >= 10 )
|
||||
{
|
||||
iprintln( "Testing flamethrower sweep" );
|
||||
curr_aim_anim = 1;
|
||||
self scripted_behavior( "zm_flamethrower_sweep", "flamethrower_anim" );
|
||||
self.fx_field = self.fx_field | 64;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
}
|
||||
else
|
||||
{
|
||||
length = self getanimlengthfromasd( "zm_flamethrower_aim_" + curr_aim_anim, 0 );
|
||||
self clearanim( %root, 0 );
|
||||
self scripted_behavior( "zm_flamethrower_aim_" + curr_aim_anim, "flamethrower_anim" );
|
||||
curr_timer = curr_timer + length;
|
||||
}
|
||||
}
|
||||
if ( curr_aim_anim >= 10 )
|
||||
{
|
||||
iprintln( "Testing flamethrower sweep" );
|
||||
curr_aim_anim = 1;
|
||||
self scripted_behavior( "zm_flamethrower_sweep", "flamethrower_anim" );
|
||||
self.fx_field = self.fx_field | 64;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
}
|
||||
else
|
||||
{
|
||||
length = self getanimlengthfromasd( "zm_flamethrower_aim_" + curr_aim_anim, 0 );
|
||||
self clearanim( %root, 0 );
|
||||
self scripted_behavior( "zm_flamethrower_aim_" + curr_aim_anim, "flamethrower_anim" );
|
||||
curr_timer = curr_timer + length;
|
||||
}
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
fake_launch_claw()
|
||||
{
|
||||
/#
|
||||
self.launching_claw = 1;
|
||||
v_claw_origin = self gettagorigin( "tag_claw" );
|
||||
v_claw_angles = vectortoangles( self.origin - level.players[0].origin );
|
||||
self.fx_field = self.fx_field | 256;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 );
|
||||
self.m_claw unlink();
|
||||
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 setmodel( "tag_origin" );
|
||||
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" );
|
||||
self.m_claw clearanim( %root, 0.2 );
|
||||
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 );
|
||||
offset = anglestoforward( self.angles );
|
||||
offset = vectornormalize( offset );
|
||||
target_pos = self.origin + offset * 500 + vectorscale( ( 0, 0, 1 ), 36.0 );
|
||||
n_time = 0.0833333;
|
||||
self.m_claw moveto( target_pos, n_time );
|
||||
self.m_claw waittill( "movedone" );
|
||||
self.m_claw clearanim( %root, 0.2 );
|
||||
self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 );
|
||||
wait 0.5;
|
||||
self.m_claw moveto( v_claw_origin, 0.5 );
|
||||
self.m_claw waittill( "movedone" );
|
||||
self.m_claw.fx_ent delete();
|
||||
self.fx_field = self.fx_field & ~256;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
v_claw_origin = self gettagorigin( "tag_claw" );
|
||||
v_claw_angles = self gettagangles( "tag_claw" );
|
||||
self.m_claw.origin = v_claw_origin;
|
||||
self.m_claw.angles = v_claw_angles;
|
||||
self.m_claw linkto( self, "tag_claw" );
|
||||
self.launching_claw = 0;
|
||||
self.launching_claw = 1;
|
||||
v_claw_origin = self gettagorigin( "tag_claw" );
|
||||
v_claw_angles = vectortoangles( self.origin - level.players[0].origin );
|
||||
self.fx_field = self.fx_field | 256;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0, 1 );
|
||||
self.m_claw unlink();
|
||||
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 setmodel( "tag_origin" );
|
||||
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" );
|
||||
self.m_claw clearanim( %root, 0.2 );
|
||||
self.m_claw setanim( %ai_zombie_mech_grapple_arm_open_idle, 1, 0.2, 1 );
|
||||
offset = anglestoforward( self.angles );
|
||||
offset = vectornormalize( offset );
|
||||
target_pos = self.origin + offset * 500 + vectorscale( ( 0, 0, 1 ), 36.0 );
|
||||
n_time = 0.0833333;
|
||||
self.m_claw moveto( target_pos, n_time );
|
||||
self.m_claw waittill( "movedone" );
|
||||
self.m_claw clearanim( %root, 0.2 );
|
||||
self.m_claw setanim( %ai_zombie_mech_grapple_arm_closed_idle, 1, 0.2, 1 );
|
||||
wait 0.5;
|
||||
self.m_claw moveto( v_claw_origin, 0.5 );
|
||||
self.m_claw waittill( "movedone" );
|
||||
self.m_claw.fx_ent delete();
|
||||
self.fx_field = self.fx_field & ~256;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
v_claw_origin = self gettagorigin( "tag_claw" );
|
||||
v_claw_angles = self gettagangles( "tag_claw" );
|
||||
self.m_claw.origin = v_claw_origin;
|
||||
self.m_claw.angles = v_claw_angles;
|
||||
self.m_claw linkto( self, "tag_claw" );
|
||||
self.launching_claw = 0;
|
||||
#/
|
||||
}
|
||||
|
||||
mechz_force_claw_attack()
|
||||
{
|
||||
/#
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" );
|
||||
self thread fake_launch_claw();
|
||||
while ( true )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_grapple_aim_start", "grapple_anim" );
|
||||
self thread fake_launch_claw();
|
||||
|
||||
while ( isdefined( self.launching_claw ) && self.launching_claw )
|
||||
{
|
||||
self clearanim( %root, 0 );
|
||||
wait 0.05;
|
||||
self scripted_behavior( "zm_grapple_aim_5", "grapple_anim" );
|
||||
}
|
||||
while ( isdefined( self.launching_claw ) && self.launching_claw )
|
||||
{
|
||||
self clearanim( %root, 0 );
|
||||
wait 0.05;
|
||||
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()
|
||||
{
|
||||
/#
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
|
||||
if ( !isdefined( self.next_armor_piece ) )
|
||||
self.next_armor_piece = 0;
|
||||
if ( !isdefined( self.next_armor_piece ) )
|
||||
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 )
|
||||
{
|
||||
self.next_armor_piece = 0;
|
||||
if ( self.next_armor_piece == self.armor_state.size )
|
||||
{
|
||||
self.next_armor_piece = 0;
|
||||
|
||||
for ( i = 0; i < self.armor_state.size; i++ )
|
||||
{
|
||||
self.fx_field = self.fx_field & ~( 1 << self.armor_state[i].index );
|
||||
for ( i = 0; i < self.armor_state.size; i++ )
|
||||
{
|
||||
self.fx_field = self.fx_field & ~( 1 << self.armor_state[i].index );
|
||||
|
||||
if ( isdefined( self.armor_state[i].model ) )
|
||||
self attach( self.armor_state[i].model, self.armor_state[i].tag );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self.fx_field = self.fx_field | 1 << self.armor_state[self.next_armor_piece].index;
|
||||
if ( isdefined( self.armor_state[i].model ) )
|
||||
self attach( self.armor_state[i].model, self.armor_state[i].tag );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
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 ) )
|
||||
self detach( self.armor_state[self.next_armor_piece].model, self.armor_state[self.next_armor_piece].tag );
|
||||
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.next_armor_piece++;
|
||||
}
|
||||
self.next_armor_piece++;
|
||||
}
|
||||
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
|
||||
while ( true )
|
||||
self scripted_behavior( "zm_idle", "idle_anim" );
|
||||
while ( true )
|
||||
self scripted_behavior( "zm_idle", "idle_anim" );
|
||||
#/
|
||||
}
|
||||
|
||||
mechz_force_damage_faceplate()
|
||||
{
|
||||
/#
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
self thread scripted_behavior( "zm_idle", "idle_anim" );
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
self thread scripted_behavior( "zm_idle", "idle_anim" );
|
||||
|
||||
if ( isdefined( self.has_helmet ) && self.has_helmet )
|
||||
{
|
||||
self.has_helmet = 0;
|
||||
self detach( "c_zom_mech_faceplate", "J_Helmet" );
|
||||
self.fx_field = self.fx_field | 1024;
|
||||
self.fx_field = self.fx_field & ~2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.has_helmet = 1;
|
||||
self.fx_field = self.fx_field & ~1024;
|
||||
self.fx_field = self.fx_field | 2048;
|
||||
self attach( "c_zom_mech_faceplate", "J_Helmet" );
|
||||
}
|
||||
if ( isdefined( self.has_helmet ) && self.has_helmet )
|
||||
{
|
||||
self.has_helmet = 0;
|
||||
self detach( "c_zom_mech_faceplate", "J_Helmet" );
|
||||
self.fx_field = self.fx_field | 1024;
|
||||
self.fx_field = self.fx_field & ~2048;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.has_helmet = 1;
|
||||
self.fx_field = self.fx_field & ~1024;
|
||||
self.fx_field = self.fx_field | 2048;
|
||||
self attach( "c_zom_mech_faceplate", "J_Helmet" );
|
||||
}
|
||||
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
|
||||
while ( true )
|
||||
self scripted_behavior( "zm_idle", "idle_anim" );
|
||||
while ( true )
|
||||
self scripted_behavior( "zm_idle", "idle_anim" );
|
||||
#/
|
||||
}
|
||||
|
||||
mechz_force_melee()
|
||||
{
|
||||
/#
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
self endon( "kill_force_behavior" );
|
||||
self setup_force_behavior();
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_melee_stand", "melee_anim" );
|
||||
}
|
||||
while ( true )
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_idle" );
|
||||
wait 0.2;
|
||||
self scripted_behavior( "zm_melee_stand", "melee_anim" );
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
@ -16,12 +16,12 @@ mechz_init_end()
|
||||
|
||||
spawn_start()
|
||||
{
|
||||
self.not_interruptable = 1;
|
||||
self.not_interruptable = 1;
|
||||
}
|
||||
|
||||
spawn_end()
|
||||
{
|
||||
self.not_interruptable = 0;
|
||||
self.not_interruptable = 0;
|
||||
}
|
||||
|
||||
mechz_round_tracker_start()
|
||||
|
@ -14,535 +14,544 @@
|
||||
|
||||
init_flamethrower_triggers()
|
||||
{
|
||||
flag_wait( "initial_players_connected" );
|
||||
level.flamethrower_trigger_array = getentarray( "flamethrower_trigger", "script_noteworthy" );
|
||||
assert( isdefined( level.flamethrower_trigger_array ) && level.flamethrower_trigger_array.size >= 4 );
|
||||
flag_wait( "initial_players_connected" );
|
||||
level.flamethrower_trigger_array = getentarray( "flamethrower_trigger", "script_noteworthy" );
|
||||
assert( isdefined( level.flamethrower_trigger_array ) && level.flamethrower_trigger_array.size >= 4 );
|
||||
|
||||
for ( i = 0; i < level.flamethrower_trigger_array.size; i++ )
|
||||
level.flamethrower_trigger_array[i] enablelinkto();
|
||||
for ( i = 0; i < level.flamethrower_trigger_array.size; i++ )
|
||||
level.flamethrower_trigger_array[i] enablelinkto();
|
||||
}
|
||||
|
||||
mechz_flamethrower_initial_setup()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "death" );
|
||||
|
||||
if ( isdefined( self.flamethrower_trigger ) )
|
||||
self release_flamethrower_trigger();
|
||||
if ( isdefined( self.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.angles = self gettagangles( "tag_flamethrower_FX" );
|
||||
self.flamethrower_trigger linkto( self, "tag_flamethrower_FX" );
|
||||
self thread mechz_watch_for_flamethrower_damage();
|
||||
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();
|
||||
}
|
||||
|
||||
get_flamethrower_trigger()
|
||||
{
|
||||
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 ) )
|
||||
{
|
||||
level.flamethrower_trigger_array[i].in_use = 1;
|
||||
level.flamethrower_trigger_array[i].original_position = level.flamethrower_trigger_array[i].origin;
|
||||
return level.flamethrower_trigger_array[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 ) )
|
||||
{
|
||||
level.flamethrower_trigger_array[i].in_use = 1;
|
||||
level.flamethrower_trigger_array[i].original_position = level.flamethrower_trigger_array[i].origin;
|
||||
return level.flamethrower_trigger_array[i];
|
||||
}
|
||||
}
|
||||
|
||||
return undefined;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
release_flamethrower_trigger()
|
||||
{
|
||||
if ( !isdefined( self.flamethrower_trigger ) )
|
||||
return;
|
||||
if ( !isdefined( self.flamethrower_trigger ) )
|
||||
return;
|
||||
|
||||
self.flamethrower_trigger.in_use = 0;
|
||||
self.flamethrower_trigger unlink();
|
||||
self.flamethrower_trigger.origin = self.flamethrower_trigger.original_position;
|
||||
self.flamethrower_linked = 0;
|
||||
self.flamethrower_trigger = undefined;
|
||||
self.flamethrower_trigger.in_use = 0;
|
||||
self.flamethrower_trigger unlink();
|
||||
self.flamethrower_trigger.origin = self.flamethrower_trigger.original_position;
|
||||
self.flamethrower_linked = 0;
|
||||
self.flamethrower_trigger = undefined;
|
||||
}
|
||||
|
||||
mechz_flamethrower_dist_watcher()
|
||||
{
|
||||
self endon( "kill_ft" );
|
||||
wait 0.5;
|
||||
self endon( "kill_ft" );
|
||||
wait 0.5;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1, 1 ) || distancesquared( self.origin, self.favoriteenemy.origin ) > 50000 )
|
||||
{
|
||||
self notify( "stop_ft" );
|
||||
return;
|
||||
}
|
||||
while ( true )
|
||||
{
|
||||
if ( !isdefined( self.favoriteenemy ) || !is_player_valid( self.favoriteenemy, 1, 1 ) || distancesquared( self.origin, self.favoriteenemy.origin ) > 50000 )
|
||||
{
|
||||
self notify( "stop_ft" );
|
||||
return;
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
mechz_flamethrower_arc_watcher()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "stop_ft" );
|
||||
aim_anim = undefined;
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "stop_ft" );
|
||||
aim_anim = undefined;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
old_anim = aim_anim;
|
||||
aim_anim = mechz_get_aim_anim( "zm_flamethrower", self.favoriteenemy.origin, 26 );
|
||||
self.curr_aim_anim = aim_anim;
|
||||
while ( true )
|
||||
{
|
||||
old_anim = aim_anim;
|
||||
aim_anim = mechz_get_aim_anim( "zm_flamethrower", self.favoriteenemy.origin, 26 );
|
||||
self.curr_aim_anim = aim_anim;
|
||||
|
||||
if ( !isdefined( aim_anim ) )
|
||||
{
|
||||
self notify( "stop_ft" );
|
||||
return;
|
||||
}
|
||||
if ( !isdefined( aim_anim ) )
|
||||
{
|
||||
self notify( "stop_ft" );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( !isdefined( old_anim ) || old_anim != aim_anim )
|
||||
self notify( "arc_change" );
|
||||
if ( !isdefined( old_anim ) || old_anim != aim_anim )
|
||||
self notify( "arc_change" );
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
mechz_play_flamethrower_aim()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "stop_ft" );
|
||||
self endon( "arc_change" );
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "stop_ft" );
|
||||
self endon( "arc_change" );
|
||||
|
||||
if ( isdefined( self.curr_aim_anim ) )
|
||||
{
|
||||
self stopanimscripted();
|
||||
self animscripted( self.origin, self.angles, self.curr_aim_anim );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
|
||||
}
|
||||
else
|
||||
wait 0.05;
|
||||
if ( isdefined( self.curr_aim_anim ) )
|
||||
{
|
||||
self stopanimscripted();
|
||||
self animscripted( self.origin, self.angles, self.curr_aim_anim );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
|
||||
}
|
||||
else
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
mechz_flamethrower_aim()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "stop_ft" );
|
||||
self waittillmatch( "flamethrower_anim", "end" );
|
||||
self thread mechz_flamethrower_dist_watcher();
|
||||
self thread mechz_flamethrower_arc_watcher();
|
||||
aim_anim = undefined;
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "stop_ft" );
|
||||
self waittillmatch( "flamethrower_anim", "end" );
|
||||
self thread mechz_flamethrower_dist_watcher();
|
||||
self thread mechz_flamethrower_arc_watcher();
|
||||
aim_anim = undefined;
|
||||
|
||||
while ( true )
|
||||
self mechz_play_flamethrower_aim();
|
||||
while ( true )
|
||||
self mechz_play_flamethrower_aim();
|
||||
}
|
||||
|
||||
mechz_flamethrower_tank_sweep()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "stop_ft" );
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "stop_ft" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self stopanimscripted();
|
||||
self.angles = vectortoangles( level.vh_tank.origin - self.origin );
|
||||
self animscripted( self.origin, self.angles, "zm_flamethrower_sweep_up" );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
|
||||
while ( true )
|
||||
{
|
||||
self stopanimscripted();
|
||||
self.angles = vectortoangles( level.vh_tank.origin - self.origin );
|
||||
self animscripted( self.origin, self.angles, "zm_flamethrower_sweep_up" );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
|
||||
|
||||
if ( level.vh_tank ent_flag( "tank_moving" ) )
|
||||
break;
|
||||
if ( level.vh_tank ent_flag( "tank_moving" ) )
|
||||
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 );
|
||||
a_players_on_tank = 0;
|
||||
|
||||
if ( !a_players_on_tank.size )
|
||||
break;
|
||||
}
|
||||
|
||||
self notify( "stop_ft" );
|
||||
self notify( "stop_ft" );
|
||||
}
|
||||
|
||||
mechz_stop_firing_watcher()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "flamethrower_complete" );
|
||||
self waittillmatch( "flamethrower_anim", "stop_ft" );
|
||||
self.firing = 0;
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "flamethrower_complete" );
|
||||
self waittillmatch( "flamethrower_anim", "stop_ft" );
|
||||
self.firing = 0;
|
||||
}
|
||||
|
||||
mechz_watch_for_flamethrower_damage()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "death" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittillmatch( "flamethrower_anim", "start_ft" );
|
||||
self.firing = 1;
|
||||
self thread mechz_stop_firing_watcher();
|
||||
entity_on_tank_func = getFunction( "maps/mp/zm_tomb_tank", "entity_on_tank" );
|
||||
|
||||
while ( isdefined( self.firing ) && self.firing )
|
||||
{
|
||||
do_tank_sweep_auto_damage = isdefined( self.doing_tank_sweep ) && self.doing_tank_sweep && !level.vh_tank ent_flag( "tank_moving" );
|
||||
players = getplayers();
|
||||
while ( true )
|
||||
{
|
||||
self waittillmatch( "flamethrower_anim", "start_ft" );
|
||||
self.firing = 1;
|
||||
self thread mechz_stop_firing_watcher();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( !( isdefined( players[i].is_burning ) && players[i].is_burning ) )
|
||||
{
|
||||
// if ( do_tank_sweep_auto_damage && players[i] entity_on_tank() || players[i] istouching( self.flamethrower_trigger ) )
|
||||
// players[i] thread player_flame_damage();
|
||||
}
|
||||
}
|
||||
while ( isdefined( self.firing ) && self.firing )
|
||||
{
|
||||
do_tank_sweep_auto_damage = isdefined( self.doing_tank_sweep ) && self.doing_tank_sweep && !level.vh_tank ent_flag( "tank_moving" );
|
||||
players = getplayers();
|
||||
|
||||
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++ )
|
||||
{
|
||||
if ( isdefined( zombies[i].is_mechz ) && zombies[i].is_mechz )
|
||||
continue;
|
||||
zombies = getaispeciesarray( "axis", "all" );
|
||||
|
||||
if ( isdefined( zombies[i].on_fire ) && zombies[i].on_fire )
|
||||
continue;
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
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 ) )
|
||||
// {
|
||||
// zombies[i].on_fire = 1;
|
||||
// zombies[i] promote_to_explosive();
|
||||
// }
|
||||
}
|
||||
if ( isdefined( zombies[i].on_fire ) && zombies[i].on_fire )
|
||||
continue;
|
||||
|
||||
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()
|
||||
{
|
||||
self endon( "zombified" );
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
n_player_dmg = 30;
|
||||
n_jugga_dmg = 45;
|
||||
n_burn_time = 1.5;
|
||||
self endon( "zombified" );
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
n_player_dmg = 30;
|
||||
n_jugga_dmg = 45;
|
||||
n_burn_time = 1.5;
|
||||
|
||||
if ( isdefined( self.is_zombie ) && self.is_zombie )
|
||||
return;
|
||||
if ( isdefined( self.is_zombie ) && self.is_zombie )
|
||||
return;
|
||||
|
||||
self thread player_stop_burning();
|
||||
self thread player_stop_burning();
|
||||
|
||||
if ( !isdefined( self.is_burning ) && is_player_valid( self, 1, 0 ) )
|
||||
{
|
||||
self.is_burning = 1;
|
||||
maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, n_burn_time, level.zm_transit_burn_max_duration );
|
||||
self notify( "burned" );
|
||||
if ( !isdefined( self.is_burning ) && is_player_valid( self, 1, 0 ) )
|
||||
{
|
||||
self.is_burning = 1;
|
||||
maps\mp\_visionset_mgr::vsmgr_activate( "overlay", "zm_transit_burn", self, n_burn_time, level.zm_transit_burn_max_duration );
|
||||
self notify( "burned" );
|
||||
|
||||
if ( !self hasperk( "specialty_armorvest" ) )
|
||||
self dodamage( n_player_dmg, self.origin );
|
||||
else
|
||||
self dodamage( n_jugga_dmg, self.origin );
|
||||
if ( !self hasperk( "specialty_armorvest" ) )
|
||||
self dodamage( n_player_dmg, self.origin );
|
||||
else
|
||||
self dodamage( n_jugga_dmg, self.origin );
|
||||
|
||||
wait 0.5;
|
||||
self.is_burning = undefined;
|
||||
}
|
||||
wait 0.5;
|
||||
self.is_burning = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
player_stop_burning()
|
||||
{
|
||||
self notify( "player_stop_burning" );
|
||||
self endon( "player_stop_burning" );
|
||||
self endon( "death_or_disconnect" );
|
||||
self waittill( "zombified" );
|
||||
self notify( "stop_flame_damage" );
|
||||
maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self );
|
||||
self notify( "player_stop_burning" );
|
||||
self endon( "player_stop_burning" );
|
||||
self endon( "death_or_disconnect" );
|
||||
self waittill( "zombified" );
|
||||
self notify( "stop_flame_damage" );
|
||||
maps\mp\_visionset_mgr::vsmgr_deactivate( "overlay", "zm_transit_burn", self );
|
||||
}
|
||||
|
||||
zombie_burning_fx()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_flame_damage" );
|
||||
self endon( "death" );
|
||||
self endon( "stop_flame_damage" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) )
|
||||
{
|
||||
if ( !self.isdog )
|
||||
playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" );
|
||||
}
|
||||
while ( true )
|
||||
{
|
||||
if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_torso"] ) )
|
||||
{
|
||||
if ( !self.isdog )
|
||||
playfxontag( level._effect["character_fire_death_torso"], self, "J_SpineLower" );
|
||||
}
|
||||
|
||||
if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) )
|
||||
{
|
||||
wait 1;
|
||||
tagarray = [];
|
||||
if ( isdefined( level._effect ) && isdefined( level._effect["character_fire_death_sm"] ) )
|
||||
{
|
||||
wait 1;
|
||||
tagarray = [];
|
||||
|
||||
if ( randomint( 2 ) == 0 )
|
||||
{
|
||||
tagarray[0] = "J_Elbow_LE";
|
||||
tagarray[1] = "J_Elbow_RI";
|
||||
tagarray[2] = "J_HEAD";
|
||||
}
|
||||
else
|
||||
{
|
||||
tagarray[0] = "J_Wrist_RI";
|
||||
tagarray[1] = "J_Wrist_LE";
|
||||
tagarray[2] = "J_HEAD";
|
||||
}
|
||||
if ( randomint( 2 ) == 0 )
|
||||
{
|
||||
tagarray[0] = "J_Elbow_LE";
|
||||
tagarray[1] = "J_Elbow_RI";
|
||||
tagarray[2] = "J_HEAD";
|
||||
}
|
||||
else
|
||||
{
|
||||
tagarray[0] = "J_Wrist_RI";
|
||||
tagarray[1] = "J_Wrist_LE";
|
||||
tagarray[2] = "J_HEAD";
|
||||
}
|
||||
|
||||
tagarray = array_randomize( tagarray );
|
||||
self thread network_safe_play_fx_on_tag( "flamethrower", 2, level._effect["character_fire_death_sm"], self, tagarray[0] );
|
||||
}
|
||||
tagarray = array_randomize( tagarray );
|
||||
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()
|
||||
{
|
||||
self playloopsound( "zmb_fire_loop" );
|
||||
self waittill_any( "death", "stop_flame_damage" );
|
||||
self playloopsound( "zmb_fire_loop" );
|
||||
self waittill_any( "death", "stop_flame_damage" );
|
||||
|
||||
if ( isdefined( self ) && isalive( self ) )
|
||||
self stoploopsound( 0.25 );
|
||||
if ( isdefined( self ) && isalive( self ) )
|
||||
self stoploopsound( 0.25 );
|
||||
}
|
||||
|
||||
zombie_burning_dmg()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "stop_flame_damage" );
|
||||
damageradius = 25;
|
||||
damage = 2;
|
||||
self endon( "death" );
|
||||
self endon( "stop_flame_damage" );
|
||||
damageradius = 25;
|
||||
damage = 2;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
eyeorigin = self geteye();
|
||||
players = get_players();
|
||||
while ( true )
|
||||
{
|
||||
eyeorigin = self geteye();
|
||||
players = get_players();
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( is_player_valid( players[i], 1, 0 ) )
|
||||
{
|
||||
playereye = players[i] geteye();
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( is_player_valid( players[i], 1, 0 ) )
|
||||
{
|
||||
playereye = players[i] geteye();
|
||||
|
||||
if ( distancesquared( eyeorigin, playereye ) < damageradius * damageradius )
|
||||
{
|
||||
players[i] dodamage( damage, self.origin, self );
|
||||
players[i] notify( "burned" );
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( distancesquared( eyeorigin, playereye ) < damageradius * damageradius )
|
||||
{
|
||||
players[i] dodamage( damage, self.origin, self );
|
||||
players[i] notify( "burned" );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wait 1.0;
|
||||
}
|
||||
wait 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
promote_to_explosive()
|
||||
{
|
||||
self endon( "death" );
|
||||
self thread zombie_burning_audio();
|
||||
self thread zombie_burning_fx();
|
||||
self thread explode_on_death();
|
||||
self thread zombie_burning_dmg();
|
||||
self thread on_fire_timeout();
|
||||
self endon( "death" );
|
||||
self thread zombie_burning_audio();
|
||||
self thread zombie_burning_fx();
|
||||
self thread explode_on_death();
|
||||
self thread zombie_burning_dmg();
|
||||
self thread on_fire_timeout();
|
||||
}
|
||||
|
||||
explode_on_death()
|
||||
{
|
||||
self endon( "stop_flame_damage" );
|
||||
self waittill( "death" );
|
||||
self endon( "stop_flame_damage" );
|
||||
self waittill( "death" );
|
||||
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
|
||||
tag = "J_SpineLower";
|
||||
tag = "J_SpineLower";
|
||||
|
||||
if ( isdefined( self.animname ) && self.animname == "zombie_dog" )
|
||||
tag = "tag_origin";
|
||||
if ( isdefined( self.animname ) && self.animname == "zombie_dog" )
|
||||
tag = "tag_origin";
|
||||
|
||||
if ( is_mature() )
|
||||
{
|
||||
if ( isdefined( level._effect["zomb_gib"] ) )
|
||||
playfx( level._effect["zomb_gib"], self gettagorigin( tag ) );
|
||||
}
|
||||
else if ( isdefined( level._effect["spawn_cloud"] ) )
|
||||
playfx( level._effect["spawn_cloud"], self gettagorigin( tag ) );
|
||||
if ( is_mature() )
|
||||
{
|
||||
if ( isdefined( level._effect["zomb_gib"] ) )
|
||||
playfx( level._effect["zomb_gib"], self gettagorigin( tag ) );
|
||||
}
|
||||
else if ( isdefined( level._effect["spawn_cloud"] ) )
|
||||
playfx( level._effect["spawn_cloud"], self gettagorigin( tag ) );
|
||||
|
||||
self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" );
|
||||
self ghost();
|
||||
self radiusdamage( self.origin, 128, 30, 15, undefined, "MOD_EXPLOSIVE" );
|
||||
self ghost();
|
||||
|
||||
if ( isdefined( self.isdog ) && self.isdog )
|
||||
self hide();
|
||||
else
|
||||
self delay_thread( 1, ::self_delete );
|
||||
if ( isdefined( self.isdog ) && self.isdog )
|
||||
self hide();
|
||||
else
|
||||
self delay_thread( 1, ::self_delete );
|
||||
}
|
||||
|
||||
on_fire_timeout()
|
||||
{
|
||||
self endon( "death" );
|
||||
wait 12;
|
||||
self endon( "death" );
|
||||
wait 12;
|
||||
|
||||
if ( isdefined( self ) && isalive( self ) )
|
||||
{
|
||||
self.is_on_fire = 0;
|
||||
self notify( "stop_flame_damage" );
|
||||
}
|
||||
if ( isdefined( self ) && isalive( self ) )
|
||||
{
|
||||
self.is_on_fire = 0;
|
||||
self notify( "stop_flame_damage" );
|
||||
}
|
||||
}
|
||||
|
||||
should_do_flamethrower_attack()
|
||||
{
|
||||
assert( isdefined( self.favoriteenemy ) );
|
||||
assert( isdefined( self.favoriteenemy ) );
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\tMZ: Checking should flame\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
println( "\\n\\t\\tMZ: Not doing flamethrower because doing force aggro\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
println( "\\n\\t\\tMZ: Not doing flamethrower because another behavior has set not_interruptable\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
println( "\\n\\t\\tMZ: Not doing flamethrower because target is not in front arc\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
println( "\\n\\t\\tMZ: Not doing flamethrower because it is still on cooldown\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
println( "\\n\\t\\tMZ: Not doing flamethrower because target is not in range\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
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 )
|
||||
println( "\\n\\t\\tMZ: Not doing flamethrower because cannot see target\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 1 )
|
||||
println( "\\n\\t\\tMZ: Not doing flamethrower because cannot see target\\n" );
|
||||
#/
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
#using_animtree("mechz_claw");
|
||||
|
||||
mechz_do_flamethrower_attack( tank_sweep )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
self endon( "death" );
|
||||
self endon( "kill_ft" );
|
||||
/#
|
||||
if ( getdvarint( #"_id_E7121222" ) > 0 )
|
||||
println( "\\n\\tMZ: Doing Flamethrower Attack\\n" );
|
||||
if ( getdvarint( #"_id_E7121222" ) > 0 )
|
||||
println( "\\n\\tMZ: Doing Flamethrower Attack\\n" );
|
||||
#/
|
||||
self thread mechz_stop_basic_find_flesh();
|
||||
self.ai_state = "flamethrower_attack";
|
||||
self setgoalpos( self.origin );
|
||||
self clearanim( %root, 0.2 );
|
||||
self.last_flamethrower_time = gettime();
|
||||
self thread mechz_kill_flamethrower_watcher();
|
||||
self thread mechz_stop_basic_find_flesh();
|
||||
self.ai_state = "flamethrower_attack";
|
||||
self setgoalpos( self.origin );
|
||||
self clearanim( %root, 0.2 );
|
||||
self.last_flamethrower_time = gettime();
|
||||
self thread mechz_kill_flamethrower_watcher();
|
||||
|
||||
if ( !isdefined( self.flamethrower_trigger ) )
|
||||
self mechz_flamethrower_initial_setup();
|
||||
if ( !isdefined( self.flamethrower_trigger ) )
|
||||
self mechz_flamethrower_initial_setup();
|
||||
|
||||
n_nearby_enemies = 0;
|
||||
a_players = getplayers();
|
||||
n_nearby_enemies = 0;
|
||||
a_players = getplayers();
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
if ( distance2dsquared( player.origin, self.favoriteenemy.origin ) < 10000 )
|
||||
n_nearby_enemies++;
|
||||
}
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
if ( distance2dsquared( player.origin, self.favoriteenemy.origin ) < 10000 )
|
||||
n_nearby_enemies++;
|
||||
}
|
||||
|
||||
if ( isdefined( tank_sweep ) && tank_sweep )
|
||||
{
|
||||
self.doing_tank_sweep = 1;
|
||||
self thread mechz_flamethrower_tank_sweep();
|
||||
}
|
||||
else if ( randomint( 100 ) < level.mechz_ft_sweep_chance && n_nearby_enemies > 1 )
|
||||
{
|
||||
self.doing_ft_sweep = 1;
|
||||
self animscripted( self.origin, self.angles, "zm_flamethrower_sweep" );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
|
||||
}
|
||||
else
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_flamethrower_aim_start" );
|
||||
self thread mechz_flamethrower_aim();
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
|
||||
}
|
||||
if ( isdefined( tank_sweep ) && tank_sweep )
|
||||
{
|
||||
self.doing_tank_sweep = 1;
|
||||
self thread mechz_flamethrower_tank_sweep();
|
||||
}
|
||||
else if ( randomint( 100 ) < level.mechz_ft_sweep_chance && n_nearby_enemies > 1 )
|
||||
{
|
||||
self.doing_ft_sweep = 1;
|
||||
self animscripted( self.origin, self.angles, "zm_flamethrower_sweep" );
|
||||
self maps\mp\animscripts\zm_shared::donotetracks( "flamethrower_anim" );
|
||||
}
|
||||
else
|
||||
{
|
||||
self animscripted( self.origin, self.angles, "zm_flamethrower_aim_start" );
|
||||
self thread mechz_flamethrower_aim();
|
||||
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 )
|
||||
self.doing_ft_sweep = 0;
|
||||
else
|
||||
{
|
||||
self.cant_melee = 1;
|
||||
self waittill( "stop_ft" );
|
||||
self mechz_flamethrower_cleanup();
|
||||
wait 0.5;
|
||||
self stopanimscripted();
|
||||
return;
|
||||
}
|
||||
if ( isdefined( self.doing_ft_sweep ) && self.doing_ft_sweep )
|
||||
self.doing_ft_sweep = 0;
|
||||
else
|
||||
{
|
||||
self.cant_melee = 1;
|
||||
self waittill( "stop_ft" );
|
||||
self mechz_flamethrower_cleanup();
|
||||
wait 0.5;
|
||||
self stopanimscripted();
|
||||
return;
|
||||
}
|
||||
|
||||
self mechz_flamethrower_cleanup();
|
||||
self mechz_flamethrower_cleanup();
|
||||
}
|
||||
|
||||
mechz_kill_flamethrower_watcher()
|
||||
{
|
||||
self endon( "flamethrower_complete" );
|
||||
self waittill_either( "kill_ft", "death" );
|
||||
self mechz_flamethrower_cleanup();
|
||||
self endon( "flamethrower_complete" );
|
||||
self waittill_either( "kill_ft", "death" );
|
||||
self mechz_flamethrower_cleanup();
|
||||
}
|
||||
|
||||
mechz_flamethrower_cleanup()
|
||||
{
|
||||
self.fx_field = self.fx_field & ~64;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self.firing = 0;
|
||||
self.doing_tank_sweep = 0;
|
||||
self.cant_melee = 0;
|
||||
self notify( "flamethrower_complete" );
|
||||
self.fx_field = self.fx_field & ~64;
|
||||
self setclientfield( "mechz_fx", self.fx_field );
|
||||
self.firing = 0;
|
||||
self.doing_tank_sweep = 0;
|
||||
self.cant_melee = 0;
|
||||
self notify( "flamethrower_complete" );
|
||||
}
|
||||
|
Reference in New Issue
Block a user