diff --git a/zm_ai_pack/maps/mp/zm_nuked.d3dbsp b/zm_ai_pack/maps/mp/zm_nuked.d3dbsp index 430e348..0e06ac0 100644 --- a/zm_ai_pack/maps/mp/zm_nuked.d3dbsp +++ b/zm_ai_pack/maps/mp/zm_nuked.d3dbsp @@ -11716,7 +11716,6 @@ "classname" "script_struct" "angles" "0 0 0" } - { "classname" "actor_zm_transit_avogadro" "model" "c_zom_electrician_fb" @@ -11727,4 +11726,351 @@ "script_disable_bleeder" "1" "script_forcespawn" "1" "script_noteworthy" "avogadro_zombie_spawner" -} \ No newline at end of file +} +{ +"classname" "actor_zm_highrise_leaper" +"model" "c_zom_quad_body" +"export" "5" +"spawnflags" "3" +"script_disable_bleeder" "1" +"script_forcespawn" "1" +"script_noteworthy" "leaper_zombie_spawner" +"count" "9999" +"origin" "300 300 -500" +} +{ +"targetname" "culdesac_yellow_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "644.344 -195.408 -54.0494" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "culdesac_yellow_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "607.271 574.651 -25.2992" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "culdesac_yellow_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "658.757 744.09 -56.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "culdesac_yellow_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "530.834 982.701 -110.664" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "culdesac_green_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-534.819 890.948 -63.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "culdesac_green_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-214.867 1006.2 -64.2311" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-591.961 208.25 -53.9462" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "culdesac_green_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-901.97 -176.411 -52.6934" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-749.882 657.561 -55.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-749.179 534.557 -55.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-559.186 270.197 -55.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-956.8 707.433 84.1905" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1004.03 475.338 80.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-699.765 549.56 80.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-578.577 593.123 89.4624" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-471.058 364.162 78.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-989.973 232.788 -33.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1146.37 -106.846 -51.7906" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1419.68 -14.7816 -53.6361" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1604.74 45.6894 -59.8485" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1889.91 161.662 -63.5868" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1934.82 700.073 -49.6279" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1756.82 646.032 -44.6858" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1765.67 864.611 -47.7206" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1043.12 972.124 -63.4436" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse1_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "-1056.98 545.855 78.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "truck_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "90.8365 445.947 -37.1746" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "670.438 10.1023 -56.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "887.301 166.258 -56.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1024.89 495.072 -56.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "668.605 674.313 -56.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1070.68 153.278 -56.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f1_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1153.35 154.714 79.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "884.645 165.546 79.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "749.149 365.024 92.324" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "634.201 -0.94128 79.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "530.355 122.503 78.7874" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1021.08 433.729 79.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_f2_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1135.18 370.315 77.125" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1494.78 -1.51334 -63.8846" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1276.36 -59.9626 -63.8849" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1919.93 697.361 -63.7589" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1941.39 136.182 -61.875" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1749.37 714.472 -63.1245" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1369.05 942.949 -73.375" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1062.52 1012.42 -150.074" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "839.556 760.136 -56.5911" +"classname" "script_struct" +"angles" "0 0 0" +} +{ +"targetname" "openhouse2_backyard_zone_spawners" +"script_noteworthy" "leaper_location" +"origin" "1063.25 507.422 -57.875" +"classname" "script_struct" +"angles" "0 0 0" +} diff --git a/zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc b/zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc index 1e64df8..3650402 100644 --- a/zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc +++ b/zm_ai_pack/maps/mp/zombies/_zm_ai_brutus.gsc @@ -96,6 +96,11 @@ main() setup_interaction_matrix(); + while ( !isdefined( level.struct_class_names ) ) + { + wait 0.05; + } + level.brutus_spawn_positions = getstructarray( "brutus_location", "script_noteworthy" ); level.sndbrutusistalking = 0; level.brutus_health = 500; @@ -320,13 +325,13 @@ setup_interaction_matrix() { int_type = interaction_types[i]; interaction = level.interaction_types[int_type]; - assert( !isdefined( level.interaction_priority[interaction.priority] ) ); - level.interaction_priority[interaction.priority] = int_type; + assert( !isdefined( level.interaction_priority[interaction.priority + ""] ) ); + level.interaction_priority[interaction.priority + ""] = int_type; } /# for ( i = 0; i < interaction_types.size; i++ ) - assert( isdefined( level.interaction_priority[i] ) ); + assert( isdefined( level.interaction_priority[i + ""] ) ); #/ } @@ -1376,7 +1381,7 @@ get_priority_item_for_brutus( zone_name, do_secondary_zone_checks ) { best_score = -1; best_object = undefined; - int_type = interact_prio[i]; + int_type = interact_prio[i + ""]; int_struct = interact_types[int_type]; int_objects = self [[ int_struct.get_func ]]( zone_name ); diff --git a/zm_ai_pack/maps/mp/zombies/_zm_ai_leaper.gsc b/zm_ai_pack/maps/mp/zombies/_zm_ai_leaper.gsc index 2309b6b..03e3de6 100644 --- a/zm_ai_pack/maps/mp/zombies/_zm_ai_leaper.gsc +++ b/zm_ai_pack/maps/mp/zombies/_zm_ai_leaper.gsc @@ -40,13 +40,14 @@ init() level thread leaper_calc_anim_offsets(); if ( !isdefined( level.leapers_per_player ) ) - level.leapers_per_player = 2; + level.leapers_per_player = 6; level.no_jump_triggers = sys::getentarray( "leaper_no_jump_trigger", "targetname" ); } leaper_calc_anim_offsets() { + flag_wait( "initial_blackscreen_passed" ); leaper = spawn_zombie( level.leaper_spawners[0] ); if ( isdefined( leaper ) ) @@ -121,7 +122,10 @@ leaper_spawner_zone_check() str_spawn_count_list = str_spawn_count_list + a_zones[i] + ": " + level.zones[a_zones[i]].leaper_locations.size + "\\n"; } - assert( n_zones_missing_spawners == 0, "All zones require at least one leaper spawn point." + n_zones_missing_spawners + " zones are missing leaper spawners. They are: " + str_zone_list ); + if ( n_zones_missing_spawners != 0 ) + { + assertmsg( "All zones require at least one leaper spawn point." + n_zones_missing_spawners + " zones are missing leaper spawners. They are: " + str_zone_list ); + } /# println( "========== LEAPER SPAWN COUNT PER ZONE ===========" ); println( str_spawn_count_list ); @@ -135,6 +139,7 @@ leaper_init() level endon( "intermission" ); self.animname = "leaper_zombie"; self.audio_type = "leaper"; + self.no_gib = true; self.has_legs = 1; self.ignore_all_poi = 1; self.is_leaper = 1; @@ -160,8 +165,15 @@ leaper_init() self thread leaper_think(); self thread leaper_spawn_failsafe(); self thread leaper_traverse_watcher(); - self.maxhealth = level.leaper_health; - self.health = level.leaper_health; + if ( isdefined( self.custom_starting_health ) ) + { + self.maxhealth = self.custom_starting_health; + } + else + { + self.maxhealth = level.leaper_health; + } + self.health = self.maxhealth; self setphysparams( 15, 0, 24 ); self.zombie_init_done = 1; self notify( "zombie_init_done" ); @@ -538,200 +550,17 @@ leaper_notetracks( animname ) enable_leaper_rounds() { - level.leaper_rounds_enabled = 1; - flag_init( "leaper_round" ); - level thread leaper_round_tracker(); -} - -leaper_round_tracker() -{ - level.leaper_round_count = 1; - level.next_leaper_round = level.round_number + randomintrange( 4, 7 ); - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - - while ( true ) - { - level waittill( "between_round_over" ); - - if ( level.round_number == level.next_leaper_round ) - { - level.music_round_override = 1; - old_spawn_func = level.round_spawn_func; - old_wait_func = level.round_wait_func; - leaper_round_start(); - level.round_spawn_func = ::leaper_round_spawning; - level.round_wait_func = ::leaper_round_wait; - level.next_leaper_round = level.round_number + randomintrange( 4, 6 ); - } - else if ( flag( "leaper_round" ) ) - { - leaper_round_stop(); - level.round_spawn_func = old_spawn_func; - level.round_wait_func = old_wait_func; - level.music_round_override = 0; - level.leaper_round_count = level.leaper_round_count + 1; - } - } -} - -leaper_round_spawning() -{ - level endon( "intermission" ); - level endon( "leaper_round_ending" ); - level.leaper_targets = sys::getplayers(); - - for ( i = 0; i < level.leaper_targets.size; i++ ) - level.leaper_targets[i].hunted_by = 0; - -/# - level endon( "kill_round" ); - - if ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 ) - return; -#/ - - if ( level.intermission ) - return; - - level.leaper_intermission = 1; - level thread leaper_round_accuracy_tracking(); - level thread leaper_round_aftermath(); - players = sys::getplayers(); - wait 1; - playsoundatposition( "vox_zmba_event_dogstart_0", ( 0, 0, 0 ) ); - wait 1; - - if ( level.leaper_round_count < 3 ) - max = players.size * level.leapers_per_player; - else - max = players.size * level.leapers_per_player; - - level.zombie_total = max; - leaper_health_increase(); - level.leaper_count = 0; - - while ( true ) - { - b_hold_spawning_when_leapers_are_all_dead = 1; -/# - n_test_mode_active = getdvarint( #"_id_298DD9A4" ); - - if ( isdefined( n_test_mode_active ) && n_test_mode_active == 1 ) - { - level.zombie_total = 9999; - b_hold_spawning_when_leapers_are_all_dead = 0; - } - else - { - n_remaining_leapers_this_round = max - level.leaper_count; - level.zombie_total = clamp( n_remaining_leapers_this_round, 0, max ); - } -#/ - - if ( level.leaper_count >= max && b_hold_spawning_when_leapers_are_all_dead ) - { - wait 0.5; - continue; - } - - num_player_valid = get_number_of_valid_players(); - per_player = 2; -/# - if ( getdvarint( #"_id_5A273E4B" ) == 2 ) - per_player = 1; -#/ - - while ( get_current_zombie_count() >= num_player_valid * per_player ) - { - wait 2; - num_player_valid = get_number_of_valid_players(); - } - - players = sys::getplayers(); - favorite_enemy = get_favorite_enemy(); - spawn_point = leaper_spawn_logic( level.enemy_dog_spawns, favorite_enemy ); - ai = spawn_zombie( level.leaper_spawners[0] ); - - if ( isdefined( ai ) ) - { - ai.favoriteenemy = favorite_enemy; - ai.spawn_point = spawn_point; - spawn_point thread leaper_spawn_fx( ai, spawn_point ); - level.zombie_total--; - level.leaper_count++; - } - - waiting_for_next_leaper_spawn( level.leaper_count, max ); - } -} - -leaper_round_accuracy_tracking() -{ - players = sys::getplayers(); - level.leaper_round_accurate_players = 0; - - for ( i = 0; i < players.size; i++ ) - { - players[i].total_shots_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ); - players[i].total_hits_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ); - } - - level waittill( "last_leaper_down" ); - players = sys::getplayers(); - - for ( i = 0; i < players.size; i++ ) - { - total_shots_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ) - players[i].total_shots_start_leaper_round; - total_hits_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ) - players[i].total_hits_start_leaper_round; - - if ( total_shots_end_leaper_round == total_hits_end_leaper_round ) - level.leaper_round_accurate_players++; - } - - if ( level.leaper_round_accurate_players == players.size ) - { - for ( i = 0; i < players.size; i++ ) - players[i] maps\mp\zombies\_zm_score::add_to_player_score( 2000 ); - - if ( isdefined( level.last_leaper_origin ) ) - { - trace = groundtrace( level.last_leaper_origin + vectorscale( ( 0, 0, 1 ), 10.0 ), level.last_leaper_origin + vectorscale( ( 0, 0, -1 ), 150.0 ), 0, undefined, 1 ); - power_up_origin = trace["position"]; - level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "free_perk", power_up_origin + vectorscale( ( 1, 1, 0 ), 30.0 ) ); - } - } -} - -leaper_round_wait() -{ - level endon( "restart_round" ); -/# - if ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 ) - level waittill( "forever" ); -#/ - wait 1; - - if ( flag( "leaper_round" ) ) - { - wait 7; - - while ( level.leaper_intermission ) - wait 0.5; - } } leaper_health_increase() { - players = sys::getplayers(); - - if ( level.leaper_round_count == 1 ) + if ( level.special_round_count == 1 ) level.leaper_health = 400; - else if ( level.leaper_round_count == 2 ) + else if ( level.special_round_count == 2 ) level.leaper_health = 900; - else if ( level.leaper_round_count == 3 ) + else if ( level.special_round_count == 3 ) level.leaper_health = 1300; - else if ( level.leaper_round_count == 4 ) + else if ( level.special_round_count == 4 ) level.leaper_health = 1600; if ( level.leaper_health > 1600 ) @@ -780,155 +609,6 @@ leaper_combat_animmode() self sys::animmode( "gravity", 0 ); } -leaper_spawn_logic_old( leaper_array, favorite_enemy ) -{ - all_locs = getstructarray( "leaper_location", "script_noteworthy" ); - leaper_locs = array_randomize( all_locs ); - - for ( i = 0; i < leaper_locs.size; i++ ) - { - if ( leaper_locs.size > 1 ) - { - if ( isdefined( level.old_leaper_spawn ) && level.old_leaper_spawn == leaper_locs[i] ) - continue; - } - - dist_squared = sys::distancesquared( leaper_locs[i].origin, favorite_enemy.origin ); - - if ( dist_squared > 160000 && dist_squared < 1000000 ) - { - level.old_leaper_spawn = leaper_locs[i]; - return leaper_locs[i]; - } - } - - return leaper_locs[0]; -} - -leaper_spawn_logic( leaper_array, favorite_enemy ) -{ - a_zones_active = level.active_zone_names; - a_zones_occupied = []; - - foreach ( zone in a_zones_active ) - { - if ( level.zones[zone].is_occupied ) - a_zones_occupied[a_zones_occupied.size] = zone; - } - - a_leaper_spawn_points = []; - - foreach ( zone in a_zones_occupied ) - a_leaper_spawn_points = arraycombine( a_leaper_spawn_points, level.zones[zone].leaper_locations, 0, 0 ); - - if ( a_leaper_spawn_points.size == 0 ) - { - foreach ( zone in a_zones_active ) - a_leaper_spawn_points = arraycombine( a_leaper_spawn_points, level.zones[zone].leaper_locations, 0, 0 ); - } - - if ( a_leaper_spawn_points.size == 0 ) - { - str_zone_list_occupied = ""; - a_keys_error = getarraykeys( a_zones_occupied ); - - foreach ( key in a_zones_occupied ) - str_zone_list_occupied = str_zone_list_occupied + " " + key; - - str_zone_list_active = ""; - a_keys_error = getarraykeys( a_zones_active ); - - foreach ( key in a_zones_active ) - str_zone_list_active = str_zone_list_active + " " + key; - -/# - assertmsg( "No leaper spawn locations were found in any of the occupied or active zones. Occupied zones: " + str_zone_list_occupied + ". Active zones: " + str_zone_list_active ); -#/ - } - -/# - if ( getdvarint( #"scr_zombie_spawn_in_view" ) ) - { - player = sys::getplayers()[0]; - a_spawn_points_in_view = []; - - for ( i = 0; i < a_leaper_spawn_points.size; i++ ) - { - player_vec = sys::vectornormalize( anglestoforward( player.angles ) ); - player_spawn = sys::vectornormalize( a_leaper_spawn_points[i].origin - player.origin ); - dot = sys::vectordot( player_vec, player_spawn ); - - if ( dot > 0.707 ) - { - a_spawn_points_in_view[a_spawn_points_in_view.size] = a_leaper_spawn_points[i]; - debugstar( a_leaper_spawn_points[i].origin, 1000, ( 1, 1, 1 ) ); - } - } - - if ( a_spawn_points_in_view.size <= 0 ) - { - a_spawn_points_in_view[a_spawn_points_in_view.size] = a_leaper_spawn_points[0]; - iprintln( "no spawner in view" ); - } - - a_leaper_spawn_points = a_spawn_points_in_view; - } -#/ - s_leaper_spawn_point = select_leaper_spawn_point( a_leaper_spawn_points ); - return s_leaper_spawn_point; -} - -select_leaper_spawn_point( a_spawn_points ) -{ - a_valid_nodes = get_valid_spawner_array( a_spawn_points ); - - if ( a_valid_nodes.size == 0 ) - { -/# - iprintln( "All leaper spawns used...resetting" ); -#/ - - for ( i = 0; i < a_spawn_points.size; i++ ) - a_spawn_points[i].has_spawned_leaper_this_round = 0; - - a_valid_nodes = get_valid_spawner_array( a_spawn_points ); - } - - if ( a_valid_nodes.size > 0 ) - { - s_spawn_point = random( a_valid_nodes ); - s_spawn_point.has_spawned_leaper_this_round = 1; - } - else - { -/# - iprintln( "DEBUG: no valid leaper spawns available" ); -#/ - s_spawn_point = a_spawn_points[0]; - } - - return s_spawn_point; -} - -get_valid_spawner_array( a_spawn_points ) -{ - a_valid_nodes = []; - - for ( i = 0; i < a_spawn_points.size; i++ ) - { - if ( isdefined( a_spawn_points[i].is_blocked ) && a_spawn_points[i].is_blocked || !( isdefined( a_spawn_points[i].is_enabled ) && a_spawn_points[i].is_enabled ) || isdefined( a_spawn_points[i].is_spawning ) && a_spawn_points[i].is_spawning ) - continue; - - if ( !isdefined( a_spawn_points[i].has_spawned_leaper_this_round ) ) - a_spawn_points[i].has_spawned_leaper_this_round = 0; - - if ( !a_spawn_points[i].has_spawned_leaper_this_round ) - a_valid_nodes[a_valid_nodes.size] = a_spawn_points[i]; - } - - return a_valid_nodes; -} - leaper_spawn_fx( ai, ent ) { ai sys::setfreecameralockonallowed( 0 ); @@ -946,22 +626,41 @@ leaper_spawn_fx( ai, ent ) playsoundatposition( "zmb_leaper_spawn_fx", v_fx_origin ); } -waiting_for_next_leaper_spawn( count, max ) +leaper_round_accuracy_tracking() { - default_wait = 1.5; + players = sys::getplayers(); + level.leaper_round_accurate_players = 0; - if ( level.leaper_round_count == 1 ) - default_wait = 3; - else if ( level.leaper_round_count == 2 ) - default_wait = 2.5; - else if ( level.leaper_round_count == 3 ) - default_wait = 2; - else - default_wait = 1.5; + for ( i = 0; i < players.size; i++ ) + { + players[i].total_shots_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ); + players[i].total_hits_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ); + } - default_wait = default_wait - count / max; - default_wait = clamp( default_wait, 0, 3 ); - wait( default_wait ); + level waittill( "last_leaper_down" ); + players = sys::getplayers(); + + for ( i = 0; i < players.size; i++ ) + { + total_shots_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "total_shots" ) - players[i].total_shots_start_leaper_round; + total_hits_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat( "hits" ) - players[i].total_hits_start_leaper_round; + + if ( total_shots_end_leaper_round == total_hits_end_leaper_round ) + level.leaper_round_accurate_players++; + } + + if ( level.leaper_round_accurate_players == players.size ) + { + for ( i = 0; i < players.size; i++ ) + players[i] maps\mp\zombies\_zm_score::add_to_player_score( 2000 ); + + if ( isdefined( level.last_leaper_origin ) ) + { + trace = groundtrace( level.last_leaper_origin + vectorscale( ( 0, 0, 1 ), 10.0 ), level.last_leaper_origin + vectorscale( ( 0, 0, -1 ), 150.0 ), 0, undefined, 1 ); + power_up_origin = trace["position"]; + //level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop( "free_perk", power_up_origin + vectorscale( ( 1, 1, 0 ), 30.0 ) ); + } + } } leaper_round_aftermath() @@ -982,12 +681,10 @@ leaper_round_aftermath() wait 2; clientnotify( "leaper_stop" ); wait 6; - level.leaper_intermission = 0; } leaper_round_start() { - flag_set( "leaper_round" ); level thread maps\mp\zombies\_zm_audio::change_zombie_music( "dog_start" ); level thread leaper_round_start_audio(); level notify( "leaper_round_starting" ); @@ -996,7 +693,6 @@ leaper_round_start() leaper_round_stop() { - flag_clear( "leaper_round" ); level notify( "leaper_round_ending" ); clientnotify( "leaper_stop" ); } @@ -1082,7 +778,10 @@ is_leaper_outside_playable_space( playable_area ) foreach ( area in playable_area ) { if ( self sys::istouching( area ) ) + { b_outside_play_space = 0; + break; + } } return b_outside_play_space; @@ -1093,7 +792,6 @@ leaper_cleanup() self leaper_stop_trail_fx(); self notify( "leaper_cleanup" ); wait 0.05; - level.leaper_count--; level.zombie_total++; } diff --git a/zm_ai_pack/scripts/zm/zm_ai_pack/_round_manager.gsc b/zm_ai_pack/scripts/zm/zm_ai_pack/_round_manager.gsc index 2d56688..93923bc 100644 --- a/zm_ai_pack/scripts/zm/zm_ai_pack/_round_manager.gsc +++ b/zm_ai_pack/scripts/zm/zm_ai_pack/_round_manager.gsc @@ -13,7 +13,7 @@ main() set_dvar_if_unset( "rm_special_round_chance", 33 ); set_dvar_if_unset( "rm_allow_same_round_as_last_round", 1 ); - set_dvar_if_unset( "rm_allowed_special_rounds", "normal zombie_dog" ); + set_dvar_if_unset( "rm_allowed_special_rounds", "normal zombie_dog leaper" ); set_dvar_if_unset( "rm_allowed_special_round_variants", "default rush" ); set_dvar_if_unset( "rm_forced_special_round", "" ); set_dvar_if_unset( "rm_forced_special_variant", "" ); @@ -48,9 +48,12 @@ main() register_ai_spawning_func( "zombie_dog", scripts\zm\zm_ai_pack\rounds\_zombie_dog::spawn_single_zombie_dog ); register_ai_spawning_func( "mechz", scripts\zm\zm_ai_pack\rounds\_mechz::spawn_single_mechz ); register_ai_spawning_func( "brutus", scripts\zm\zm_ai_pack\rounds\_brutus::spawn_single_brutus ); + register_ai_spawning_func( "leaper", scripts\zm\zm_ai_pack\rounds\_leaper::spawn_single_leaper ); scripts\zm\zm_ai_pack\rounds\_zombie_dog::main(); scripts\zm\zm_ai_pack\rounds\_mechz::main(); + scripts\zm\zm_ai_pack\rounds\_brutus::main(); + scripts\zm\zm_ai_pack\rounds\_leaper::main(); register_special_round( "zombie_dog", "default", scripts\zm\zm_ai_pack\rounds\_zombie_dog::round_spawning, @@ -106,6 +109,24 @@ main() scripts\zm\zm_ai_pack\rounds\_brutus::round_chance_rush, scripts\zm\zm_ai_pack\rounds\_brutus::round_next_rush ); + register_special_round( "leaper", "default", + scripts\zm\zm_ai_pack\rounds\_leaper::round_spawning, + scripts\zm\zm_ai_pack\rounds\_leaper::round_wait, + scripts\zm\zm_ai_pack\rounds\_leaper::round_max, + scripts\zm\zm_ai_pack\rounds\_leaper::round_start, + scripts\zm\zm_ai_pack\rounds\_leaper::round_over, + scripts\zm\zm_ai_pack\rounds\_leaper::round_chance, + scripts\zm\zm_ai_pack\rounds\_leaper::round_next ); + + register_special_round( "leaper", "rush", + scripts\zm\zm_ai_pack\rounds\_leaper::round_spawning_rush, + scripts\zm\zm_ai_pack\rounds\_leaper::round_wait, + scripts\zm\zm_ai_pack\rounds\_leaper::round_max_rush, + scripts\zm\zm_ai_pack\rounds\_leaper::round_start, + scripts\zm\zm_ai_pack\rounds\_leaper::round_over, + scripts\zm\zm_ai_pack\rounds\_leaper::round_chance_rush, + scripts\zm\zm_ai_pack\rounds\_leaper::round_next_rush ); + register_special_round( "normal", "default", scripts\zm\zm_ai_pack\rounds\_normal::round_spawning, scripts\zm\zm_ai_pack\rounds\_normal::round_wait, @@ -451,6 +472,7 @@ round_think_override( restart ) maps\mp\zombies\_zm_ai_dogs::dog_health_increase(); maps\mp\zombies\_zm_ai_mechz::mechz_health_increases(); maps\mp\zombies\_zm_ai_brutus::brutus_health_increases(); + maps\mp\zombies\_zm_ai_leaper::leaper_health_increase(); if ( current_round_data.round_type != "mixed" ) { diff --git a/zm_ai_pack/scripts/zm/zm_ai_pack/_utility.gsc b/zm_ai_pack/scripts/zm/zm_ai_pack/_utility.gsc index f072190..3223cf9 100644 --- a/zm_ai_pack/scripts/zm/zm_ai_pack/_utility.gsc +++ b/zm_ai_pack/scripts/zm/zm_ai_pack/_utility.gsc @@ -80,19 +80,24 @@ get_zombie_dog_count() return get_zombie_dog_array().size; } -get_mechz_array() +get_zombies_by_animname( animname ) { zombies = getaiarray( level.zombie_team ); - mechz = []; + matching_zombies = []; for ( i = 0; i < zombies.size; i++ ) { - if ( isdefined( zombies[ i ].animname ) && zombies[ i ].animname == "mechz_zombie" ) + if ( isdefined( zombies[ i ].animname ) && zombies[ i ].animname == animname ) { - mechz[ mechz.size ] = zombies[ i ]; + matching_zombies[ matching_zombies.size ] = zombies[ i ]; } } - return mechz; + return matching_zombies; +} + +get_mechz_array() +{ + return get_zombies_by_animname( "mechz_zombie" ); } get_mechz_count() @@ -102,17 +107,7 @@ get_mechz_count() get_brutus_array() { - zombies = getaiarray( level.zombie_team ); - brutus = []; - for ( i = 0; i < zombies.size; i++ ) - { - if ( isdefined( zombies[ i ].animname ) && zombies[ i ].animname == "brutus_zombie" ) - { - brutus[ brutus.size ] = zombies[ i ]; - } - } - - return brutus; + return get_zombies_by_animname( "brutus_zombie" ); } get_brutus_count() @@ -120,6 +115,16 @@ get_brutus_count() return get_brutus_array().size; } +get_leaper_array() +{ + return get_zombies_by_animname( "leaper_zombie" ); +} + +get_leaper_count() +{ + return get_leaper_array().size; +} + get_all_ai_array() { return getaispeciesarray( level.zombie_team, "all" ); @@ -132,6 +137,10 @@ get_all_ai_count() wait_for_free_ai_slot( func ) { + if ( !isdefined( func ) ) + { + func = ::get_all_ai_count; + } while ( level.zombie_total <= 0 || isdefined( func ) && [[ func ]]() >= level.zombie_ai_limit ) wait 0.1; diff --git a/zm_ai_pack/scripts/zm/zm_ai_pack/rounds/_leaper.gsc b/zm_ai_pack/scripts/zm/zm_ai_pack/rounds/_leaper.gsc index e69de29..165bd73 100644 --- a/zm_ai_pack/scripts/zm/zm_ai_pack/rounds/_leaper.gsc +++ b/zm_ai_pack/scripts/zm/zm_ai_pack/rounds/_leaper.gsc @@ -0,0 +1,363 @@ +#include maps\mp\zombies\_zm_utility; +#include common_scripts\utility; +#include maps\mp\_utility; + +#include maps\mp\zombies\_zm_ai_leaper; + +#include scripts\zm\zm_ai_pack\_round_manager; +#include scripts\zm\zm_ai_pack\_utility; + +main() +{ + set_dvar_if_unset( "rm_leaper_round_chance", 40 ); + + set_dvar_if_unset( "rm_leaper_rush_min_round", 20 ); + set_dvar_if_unset( "rm_leaper_rush_round_chance", 10 ); + set_dvar_if_unset( "rm_leaper_rush_max_leapers_alive_per_player", 6 ); + set_dvar_if_unset( "rm_leaper_rush_max_leapers_round", 64 ); + set_dvar_if_unset( "rm_leaper_rush_max_leapers_round_per_player", 4 ); + set_dvar_if_unset( "rm_leaper_rush_max_leapers_round_base", 24 ); + set_dvar_if_unset( "rm_leaper_rush_max_leapers_round_number_multiplier", 0.1 ); + set_dvar_if_unset( "rm_leaper_rush_max_spawn_wait", 0.5 ); + set_dvar_if_unset( "rm_leaper_rush_min_spawn_wait", 0.1 ); +} + +round_spawning() +{ + level endon( "intermission" ); + level endon( "end_of_round" ); + level endon( "restart_round" ); +/# + level endon( "kill_round" ); + + while ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 ) + wait 1; +#/ + + count = 0; + max = level.zombie_total; + while ( true ) + { + while ( get_leaper_count() >= level.zombie_ai_limit || level.zombie_total <= 0 || level.intermission ) + wait 0.1; + + for ( num_player_valid = get_number_of_valid_players(); get_leaper_count() >= num_player_valid * 2; num_player_valid = get_number_of_valid_players() ) + wait 2; + + count = spawn_leaper( count ); + + waiting_for_next_leaper_spawn( count, max ); + } +} + +round_wait() +{ + level endon( "restart_round" ); +/# + level endon( "kill_round" ); + + while ( getdvarint( #"zombie_cheat" ) == 2 || getdvarint( #"zombie_cheat" ) >= 4 ) + wait 1; +#/ + wait 7; + + while ( get_leaper_count() > 0 || level.zombie_total > 0 || level.intermission ) + { + wait 0.5; + } +} + +round_max() +{ + players = sys::getplayers(); + if ( level.special_round_count < 3 ) + max = players.size * level.leapers_per_player; + else + max = players.size * level.leapers_per_player; + + level.zombie_total = max; +} + +round_start() +{ + level.leaper_targets = sys::getplayers(); + + for ( i = 0; i < level.leaper_targets.size; i++ ) + level.leaper_targets[i].hunted_by = 0; + level.music_round_override = 1; + level thread maps\mp\zombies\_zm_ai_leaper::leaper_round_start(); + level thread maps\mp\zombies\_zm_ai_leaper::leaper_round_accuracy_tracking(); + level thread leaper_round_aftermath(); + wait 1; + prefix = "vox_zmba"; + if ( !level.sndannouncerisrich || level.script == "zm_prison" || level.script == "zm_tomb" ) + { + prefix = "vox_zmba_sam"; + } + playsoundatposition( prefix + "_event_dogstart_0", ( 0, 0, 0 ) ); + wait 1; +} + +round_over() +{ + maps\mp\zombies\_zm_ai_leaper::leaper_round_stop(); + level.music_round_override = 0; +} + +round_chance() +{ + chance = getDvarInt( "rm_leaper_round_chance" ); + + return randomInt( 100 ) <= chance; +} + +round_next() +{ + min = getDvarInt( "rm_min_rounds_before_special_round" ); + max = getDvarInt( "rm_max_rounds_before_special_round" ); + if ( min >= max ) + { + return level.special_round.last_data.round_number + 1; + } + else + { + return level.special_round.last_data.round_number + randomintrange( min, max ); + } +} + +round_spawning_rush() +{ + level endon( "end_of_round" ); + level endon( "intermission" ); +/# + level endon( "kill_round" ); +#/ + + count = 0; + max = level.zombie_total; + while ( true ) + { + while ( get_leaper_count() >= level.zombie_ai_limit || get_leaper_count() >= ( getdvarint( "rm_leaper_rush_max_leapers_alive_per_player" ) * level.players.size ) + || level.zombie_total <= 0 || level.intermission ) + wait 0.1; + + count = spawn_leaper( count ); + + waiting_for_next_leaper_spawn_rush( count, max ); + } +} + +round_max_rush() +{ + players = sys::getplayers(); + + leaper_max = getdvarint( "rm_leaper_rush_max_leapers_round_base" ); + + leaper_max += players.size * getdvarint( "rm_leaper_rush_max_leapers_round_per_player" ); + + leaper_max *= int( level.round_number * getdvarfloat( "rm_leaper_rush_max_leapers_round_number_multiplier" ) ); + + max = getdvarint( "rm_leaper_rush_max_leapers_round" ); + if ( leaper_max > max ) + { + leaper_max = max; + } + if ( leaper_max <= 0 ) + { + leaper_max = 6; + } + + leaper_max = int( leaper_max ); + level.zombie_total = leaper_max; +} + +round_chance_rush() +{ + if ( level.round_number < getdvarint( "rm_leaper_rush_min_round" ) ) + { + return false; + } + + return randomint( 100 ) <= getdvarint( "rm_leaper_rush_round_chance" ); +} + +round_next_rush() +{ + min = getDvarInt( "rm_min_rounds_before_special_round" ); + max = getDvarInt( "rm_max_rounds_before_special_round" ); + if ( min >= max ) + { + return level.special_round.last_data.round_number + 1; + } + else + { + return level.special_round.last_data.round_number + randomintrange( min, max ); + } +} + +waiting_for_next_leaper_spawn_rush( count, max ) +{ + default_wait = getdvarfloat( "rm_leaper_rush_max_spawn_wait" ); + + default_wait = default_wait - ( ( count / max ) * 2 ); + min_wait = getdvarfloat( "rm_leaper_rush_min_spawn_wait" ); + if ( default_wait <= min_wait ) + { + default_wait = min_wait; + } + if ( default_wait < 0.05 ) + { + default_wait = 0.05; + } + wait( default_wait ); +} + +spawn_leaper( count ) +{ + ai = spawn_single_leaper(); + + if ( isdefined( ai ) ) + { + count++; + } + + return count; +} + +spawn_single_leaper( starting_properties_struct ) +{ + players = sys::getplayers(); + favorite_enemy = get_favorite_enemy(); + spawn_point = leaper_spawn_logic( level.enemy_dog_spawns, favorite_enemy ); + ai = spawn_zombie( level.leaper_spawners[0] ); + + if ( isdefined( ai ) ) + { + ai set_starting_properties_for_ai( starting_properties_struct ); + ai.favoriteenemy = favorite_enemy; + ai.spawn_point = spawn_point; + spawn_point thread leaper_spawn_fx( ai, spawn_point ); + level.zombie_total--; + } + + return ai; +} + +leaper_round_spawning() +{ + +} + +leaper_spawn_logic( leaper_array, favorite_enemy ) +{ + a_zones_active = level.active_zone_names; + a_zones_occupied = []; + + foreach ( zone in a_zones_active ) + { + if ( level.zones[zone].is_occupied ) + a_zones_occupied[a_zones_occupied.size] = zone; + } + + a_leaper_spawn_points = []; + + foreach ( zone in a_zones_occupied ) + a_leaper_spawn_points = arraycombine( a_leaper_spawn_points, level.zones[zone].leaper_locations, 0, 0 ); + + if ( a_leaper_spawn_points.size == 0 ) + { + foreach ( zone in a_zones_active ) + a_leaper_spawn_points = arraycombine( a_leaper_spawn_points, level.zones[zone].leaper_locations, 0, 0 ); + } + + if ( a_leaper_spawn_points.size == 0 ) + { + str_zone_list_occupied = ""; + a_keys_error = getarraykeys( a_zones_occupied ); + + foreach ( key in a_zones_occupied ) + str_zone_list_occupied = str_zone_list_occupied + " " + key; + + str_zone_list_active = ""; + a_keys_error = getarraykeys( a_zones_active ); + + foreach ( key in a_zones_active ) + str_zone_list_active = str_zone_list_active + " " + key; + +/# + assertmsg( "No leaper spawn locations were found in any of the occupied or active zones. Occupied zones: " + str_zone_list_occupied + ". Active zones: " + str_zone_list_active ); +#/ + } + + s_leaper_spawn_point = select_leaper_spawn_point( a_leaper_spawn_points ); + return s_leaper_spawn_point; +} + +select_leaper_spawn_point( a_spawn_points ) +{ + a_valid_nodes = get_valid_spawner_array( a_spawn_points ); + + if ( a_valid_nodes.size == 0 ) + { +/# + iprintln( "All leaper spawns used...resetting" ); +#/ + + for ( i = 0; i < a_spawn_points.size; i++ ) + a_spawn_points[i].has_spawned_leaper_this_round = 0; + + a_valid_nodes = get_valid_spawner_array( a_spawn_points ); + } + + if ( a_valid_nodes.size > 0 ) + { + s_spawn_point = random( a_valid_nodes ); + s_spawn_point.has_spawned_leaper_this_round = 1; + } + else + { +/# + iprintln( "DEBUG: no valid leaper spawns available" ); +#/ + s_spawn_point = a_spawn_points[0]; + } + + return s_spawn_point; +} + +get_valid_spawner_array( a_spawn_points ) +{ + a_valid_nodes = []; + + for ( i = 0; i < a_spawn_points.size; i++ ) + { + if ( isdefined( a_spawn_points[i].is_blocked ) && a_spawn_points[i].is_blocked || !( isdefined( a_spawn_points[i].is_enabled ) && a_spawn_points[i].is_enabled ) || isdefined( a_spawn_points[i].is_spawning ) && a_spawn_points[i].is_spawning ) + continue; + + if ( !isdefined( a_spawn_points[i].has_spawned_leaper_this_round ) ) + a_spawn_points[i].has_spawned_leaper_this_round = 0; + + if ( !a_spawn_points[i].has_spawned_leaper_this_round ) + a_valid_nodes[a_valid_nodes.size] = a_spawn_points[i]; + } + + return a_valid_nodes; +} + +waiting_for_next_leaper_spawn( count, max ) +{ + default_wait = 1.5; + + if ( level.special_round_count == 1 ) + default_wait = 3; + else if ( level.special_round_count == 2 ) + default_wait = 2.5; + else if ( level.special_round_count == 3 ) + default_wait = 2; + else + default_wait = 1.5; + + default_wait = default_wait - count / max; + default_wait = clamp( default_wait, 0, 3 ); + wait( default_wait ); +} \ No newline at end of file diff --git a/zm_ai_pack/scripts/zm/zm_ai_pack/rounds/_zombie_dog.gsc b/zm_ai_pack/scripts/zm/zm_ai_pack/rounds/_zombie_dog.gsc index cc401f4..bc92824 100644 --- a/zm_ai_pack/scripts/zm/zm_ai_pack/rounds/_zombie_dog.gsc +++ b/zm_ai_pack/scripts/zm/zm_ai_pack/rounds/_zombie_dog.gsc @@ -20,8 +20,6 @@ main() set_dvar_if_unset( "rm_dog_rush_max_dogs_round_number_multiplier", 0.1 ); set_dvar_if_unset( "rm_dog_rush_max_spawn_wait", 0.5 ); set_dvar_if_unset( "rm_dog_rush_min_spawn_wait", 0.1 ); - - level.round_manager_mixed_round_dog_spawn_count = 0; } round_spawning() diff --git a/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc b/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc index 8cb48ac..1a78dc5 100644 --- a/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc +++ b/zm_ai_pack/scripts/zm/zm_ai_pack_mod_main.gsc @@ -43,9 +43,9 @@ main() // level.ai_data[ "ghost" ] = sys::spawnstruct(); // level.ai_data[ "ghost" ].main = maps\mp\zombies\_zm_ai_ghost::main; // level.ai_data[ "ghost" ].should_execute = !( level.script == "zm_buried" && level.gametype == "zclassic" ); - // level.ai_data[ "leaper" ] = sys::spawnstruct(); - // level.ai_data[ "leaper" ].main = maps\mp\zombies\_zm_ai_leaper::main; - // level.ai_data[ "leaper" ].should_execute = level.script != "zm_highrise"; + level.ai_data[ "leaper" ] = sys::spawnstruct(); + level.ai_data[ "leaper" ].main = maps\mp\zombies\_zm_ai_leaper::main; + level.ai_data[ "leaper" ].should_execute = level.script != "zm_highrise"; level.ai_data[ "brutus" ] = sys::spawnstruct(); level.ai_data[ "brutus" ].main = maps\mp\zombies\_zm_ai_brutus::main; level.ai_data[ "brutus" ].should_execute = level.script != "zm_prison"; @@ -86,6 +86,8 @@ init() } } + level.melee_anim_state = ::melee_anim_state; + level thread add_spawn_functions_to_spawners(); } @@ -511,4 +513,25 @@ handlemeleebiteattacknotetracks_override( note, player ) self thread maps\mp\animscripts\zm_dog_combat::orienttoplayerdeadreckoning( player, melee_time ); break; } +} + +melee_anim_state() +{ + if ( self.zombie_move_speed == "bus_walk" ) + return maps\mp\animscripts\zm_utility::append_missing_legs_suffix( "zm_walk_melee" ); + + if ( isdefined( self.animname ) && self.animname == "leaper_zombie" ) + { + mas = "zm_run_melee"; + melee_dist = distancesquared( self.origin, self.enemy.origin ); + kick_dist = 1024; + + if ( melee_dist < kick_dist ) + mas = "zm_jump_melee"; + + self.melee_attack = 1; + return mas; + } + + return undefined; } \ No newline at end of file diff --git a/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_00.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_00.LN55.pc.snd.wav new file mode 100644 index 0000000..3b93e99 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_00.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_01.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_01.LN55.pc.snd.wav new file mode 100644 index 0000000..9b0feac Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_01.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_02.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_02.LN55.pc.snd.wav new file mode 100644 index 0000000..35fb397 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_02.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_03.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_03.LN55.pc.snd.wav new file mode 100644 index 0000000..84646d4 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_03.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_04.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_04.LN55.pc.snd.wav new file mode 100644 index 0000000..4b9d9c6 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_04.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_05.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_05.LN55.pc.snd.wav new file mode 100644 index 0000000..fcbe158 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/ambient/ambient_05.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_00.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_00.LN55.pc.snd.wav new file mode 100644 index 0000000..f40972b Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_00.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_01.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_01.LN55.pc.snd.wav new file mode 100644 index 0000000..670490d Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_01.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_02.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_02.LN55.pc.snd.wav new file mode 100644 index 0000000..f5e9b2e Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_02.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_03.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_03.LN55.pc.snd.wav new file mode 100644 index 0000000..12f3ccb Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/attack/attack_03.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/close/close_00.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/close/close_00.LN55.pc.snd.wav new file mode 100644 index 0000000..e4edabc Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/close/close_00.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/close/close_01.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/close/close_01.LN55.pc.snd.wav new file mode 100644 index 0000000..5a9b9f8 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/close/close_01.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/close/close_02.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/close/close_02.LN55.pc.snd.wav new file mode 100644 index 0000000..3261cb7 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/close/close_02.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/death/death_00.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/death/death_00.LN55.pc.snd.wav new file mode 100644 index 0000000..dbaeea9 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/death/death_00.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/death/death_01.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/death/death_01.LN55.pc.snd.wav new file mode 100644 index 0000000..997afb2 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/death/death_01.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/death/death_02.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/death/death_02.LN55.pc.snd.wav new file mode 100644 index 0000000..40be007 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/death/death_02.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/death/death_03.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/death/death_03.LN55.pc.snd.wav new file mode 100644 index 0000000..87066e0 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/death/death_03.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/death/death_04.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/death/death_04.LN55.pc.snd.wav new file mode 100644 index 0000000..8d63f16 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/death/death_04.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/land/land_00.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/land/land_00.LN65.pc.snd.wav new file mode 100644 index 0000000..9a54e05 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/land/land_00.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/land/land_01.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/land/land_01.LN65.pc.snd.wav new file mode 100644 index 0000000..cec5455 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/land/land_01.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/land/land_02.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/land/land_02.LN65.pc.snd.wav new file mode 100644 index 0000000..a079634 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/land/land_02.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/land/land_03.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/land/land_03.LN65.pc.snd.wav new file mode 100644 index 0000000..093ed6e Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/land/land_03.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/land/land_04.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/land/land_04.LN65.pc.snd.wav new file mode 100644 index 0000000..739ae70 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/land/land_04.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/land/land_05.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/land/land_05.LN65.pc.snd.wav new file mode 100644 index 0000000..666c844 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/land/land_05.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_00.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_00.LN55.pc.snd.wav new file mode 100644 index 0000000..9326ad0 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_00.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_01.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_01.LN55.pc.snd.wav new file mode 100644 index 0000000..682b076 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_01.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_02.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_02.LN55.pc.snd.wav new file mode 100644 index 0000000..2889481 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_02.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_03.LN55.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_03.LN55.pc.snd.wav new file mode 100644 index 0000000..00dfaf2 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/spawn/spawn_03.LN55.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/step/step_00.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/step/step_00.LN65.pc.snd.wav new file mode 100644 index 0000000..3ad1c37 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/step/step_00.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/step/step_01.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/step/step_01.LN65.pc.snd.wav new file mode 100644 index 0000000..a24d856 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/step/step_01.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/step/step_02.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/step/step_02.LN65.pc.snd.wav new file mode 100644 index 0000000..4818393 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/step/step_02.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/step/step_03.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/step/step_03.LN65.pc.snd.wav new file mode 100644 index 0000000..5210098 Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/step/step_03.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_00.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_00.LN65.pc.snd.wav new file mode 100644 index 0000000..71aee3d Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_00.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_01.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_01.LN65.pc.snd.wav new file mode 100644 index 0000000..af2598e Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_01.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_02.LN65.pc.snd.wav b/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_02.LN65.pc.snd.wav new file mode 100644 index 0000000..50efb5d Binary files /dev/null and b/zm_ai_pack/sound/zmb/ai/leaper/swipe/swipe_02.LN65.pc.snd.wav differ diff --git a/zm_ai_pack/soundbank/mod.all.aliases.csv b/zm_ai_pack/soundbank/mod.all.aliases.csv index 99e342d..ffb55bc 100644 --- a/zm_ai_pack/soundbank/mod.all.aliases.csv +++ b/zm_ai_pack/soundbank/mod.all.aliases.csv @@ -1064,4 +1064,46 @@ zmb_hellhound_vocals_death,raw\sound\zmb\ai\hellhounds\vox\death\death_04.LN55.p zmb_hellhound_vocals_death,raw\sound\zmb\ai\hellhounds\vox\death\death_05.LN55.pc.snd,,,,grp_ambience,16461,16461,,75,550,550,default,default,allon,allon,6,priority,1,oldest,31834,33727,,10,50,0,-1,,loaded,nonlooping,volume,-1,0,655,,snp_ambience,3d,0,0,0,0,25,,no,yes,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,no,bus_fx, zmb_hellhound_vocals_death,raw\sound\zmb\ai\hellhounds\vox\death\death_06.LN55.pc.snd,,,,grp_ambience,16461,16461,,75,550,550,default,default,allon,allon,6,priority,1,oldest,31834,33727,,10,50,0,-1,,loaded,nonlooping,volume,-1,0,655,,snp_ambience,3d,0,0,0,0,25,,no,yes,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,no,bus_fx, vox_zmba_event_dogstart_0,devraw\english\sound\vox\scripted\zmc\vox_zmba_event_dogstart_0.SN55.pc.snd,,,,grp_voice,10386,10386,,0,5000,5000,default,default,allon,allon,8,priority,8,oldest,32767,32767,,100,100,0,-1,,streamed,nonlooping,volume,-1,0,0,,snp_never_duck,2d,0,0,0,0,0,,no,yes,none,0,,,,no,0,822242733,0,,yes,no,0,0,,yes,yes,bus_voice, -vox_zmba_sam_event_dogstart_0,raw\english\sound\vox\scripted\zmc\vox_zmba_sam_event_dogstart_0.SN55.pc.snd,,,,grp_voice,10386,10386,,0,5000,5000,default,default,allon,allon,8,priority,8,oldest,36779,36779,,100,100,0,-1,,streamed,nonlooping,volume,-1,0,0,,snp_never_duck,2d,0,0,0,0,0,,no,yes,none,0,,,,no,0,822242733,0,,yes,no,0,0,,yes,yes,bus_voice, \ No newline at end of file +vox_zmba_sam_event_dogstart_0,raw\english\sound\vox\scripted\zmc\vox_zmba_sam_event_dogstart_0.SN55.pc.snd,,,,grp_voice,10386,10386,,0,5000,5000,default,default,allon,allon,8,priority,8,oldest,36779,36779,,100,100,0,-1,,streamed,nonlooping,volume,-1,0,0,,snp_never_duck,2d,0,0,0,0,0,,no,yes,none,0,,,,no,0,822242733,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_leaper_disapparate,raw\sound\zmb\ai\avogadro\avo_warp_out.LN65.pc.snd,,,,grp_hdrfx,18470,18470,,375,1250,1500,default,default,allon,allon,8,priority,8,oldest,32767,32767,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_land,raw\sound\zmb\ai\leaper\land\land_00.LN65.pc.snd,,,,grp_hdrfx,18470,18470,,125,500,625,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_land,raw\sound\zmb\ai\leaper\land\land_01.LN65.pc.snd,,,,grp_hdrfx,18470,18470,,125,500,625,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_land,raw\sound\zmb\ai\leaper\land\land_02.LN65.pc.snd,,,,grp_hdrfx,18470,18470,,125,500,625,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_land,raw\sound\zmb\ai\leaper\land\land_03.LN65.pc.snd,,,,grp_hdrfx,18470,18470,,125,500,625,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_land,raw\sound\zmb\ai\leaper\land\land_04.LN65.pc.snd,,,,grp_hdrfx,18470,18470,,125,500,625,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_land,raw\sound\zmb\ai\leaper\land\land_05.LN65.pc.snd,,,,grp_hdrfx,18470,18470,,125,500,625,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_run,raw\sound\zmb\ai\leaper\step\step_00.LN65.pc.snd,,,,grp_hdrfx,13075,13075,,125,375,425,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_run,raw\sound\zmb\ai\leaper\step\step_01.LN65.pc.snd,,,,grp_hdrfx,13075,13075,,125,375,425,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_run,raw\sound\zmb\ai\leaper\step\step_02.LN65.pc.snd,,,,grp_hdrfx,13075,13075,,125,375,425,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_run,raw\sound\zmb\ai\leaper\step\step_03.LN65.pc.snd,,,,grp_hdrfx,13075,13075,,125,375,425,default,default,allon,allon,8,priority,8,oldest,27553,38966,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_spawn_fx,raw\sound\zmb\ai\avogadro\avo_warp_in.LN65.pc.snd,,,,grp_hdrfx,18470,18470,,375,1250,1500,default,default,allon,allon,8,priority,8,oldest,32767,32767,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_swipe,raw\sound\zmb\ai\leaper\swipe\swipe_00.LN65.pc.snd,,,,grp_hdrfx,16461,16461,,75,375,425,default,default,allon,allon,8,priority,8,oldest,32767,32767,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_swipe,raw\sound\zmb\ai\leaper\swipe\swipe_01.LN65.pc.snd,,,,grp_hdrfx,16461,16461,,75,375,425,default,default,allon,allon,8,priority,8,oldest,32767,32767,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_leaper_swipe,raw\sound\zmb\ai\leaper\swipe\swipe_02.LN65.pc.snd,,,,grp_hdrfx,16461,16461,,75,375,425,default,default,allon,allon,8,priority,8,oldest,32767,32767,,95,100,63,-1,,loaded,nonlooping,volume,-1,0,655,,snp_hdrfx,3d,0,0,0,0,0,,no,no,none,0,,,,no,0,0,0,,no,no,0,0,,yes,no,bus_hdrfx, +zmb_vocals_leaper_ambience,raw\sound\zmb\ai\leaper\ambient\ambient_00.LN55.pc.snd,,,,grp_voice,10386,14671,,50,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,0,0,0,-65,,no,yes,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_ambience,raw\sound\zmb\ai\leaper\ambient\ambient_01.LN55.pc.snd,,,,grp_voice,10386,14671,,50,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,0,0,0,-65,,no,yes,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_ambience,raw\sound\zmb\ai\leaper\ambient\ambient_02.LN55.pc.snd,,,,grp_voice,10386,14671,,50,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,0,0,0,-65,,no,yes,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_ambience,raw\sound\zmb\ai\leaper\ambient\ambient_03.LN55.pc.snd,,,,grp_voice,10386,14671,,50,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,0,0,0,-65,,no,yes,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_ambience,raw\sound\zmb\ai\leaper\ambient\ambient_04.LN55.pc.snd,,,,grp_voice,10386,14671,,50,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,0,0,0,-65,,no,yes,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_ambience,raw\sound\zmb\ai\leaper\ambient\ambient_05.LN55.pc.snd,,,,grp_voice,10386,14671,,50,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,0,0,0,-65,,no,yes,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_attack,raw\sound\zmb\ai\leaper\attack\attack_00.LN55.pc.snd,,,,grp_voice,14671,18470,,75,500,750,default,default,allon,allon,5,priority,1,reject,27553,38966,,70,90,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,25,75,32845,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_attack,raw\sound\zmb\ai\leaper\attack\attack_01.LN55.pc.snd,,,,grp_voice,14671,18470,,75,500,750,default,default,allon,allon,5,priority,1,reject,27553,38966,,70,90,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,25,75,32845,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_attack,raw\sound\zmb\ai\leaper\attack\attack_02.LN55.pc.snd,,,,grp_voice,14671,18470,,75,500,750,default,default,allon,allon,5,priority,1,reject,27553,38966,,70,90,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,25,75,32845,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_attack,raw\sound\zmb\ai\leaper\attack\attack_03.LN55.pc.snd,,,,grp_voice,14671,18470,,75,500,750,default,default,allon,allon,5,priority,1,reject,27553,38966,,70,90,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,25,75,32845,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_close,raw\sound\zmb\ai\leaper\close\close_00.LN55.pc.snd,,,,grp_voice,14671,14671,,50,250,275,default,default,allon,allon,2,priority,1,reject,27553,38966,,70,90,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_ambience,3d,0,25,75,20723,0,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_fx, +zmb_vocals_leaper_close,raw\sound\zmb\ai\leaper\close\close_01.LN55.pc.snd,,,,grp_voice,14671,14671,,50,250,275,default,default,allon,allon,2,priority,1,reject,27553,38966,,70,90,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_ambience,3d,0,25,75,20723,0,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_fx, +zmb_vocals_leaper_close,raw\sound\zmb\ai\leaper\close\close_02.LN55.pc.snd,,,,grp_voice,14671,14671,,50,250,275,default,default,allon,allon,2,priority,1,reject,27553,38966,,70,90,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_ambience,3d,0,25,75,20723,0,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_fx, +zmb_vocals_leaper_death,raw\sound\zmb\ai\leaper\death\death_00.LN55.pc.snd,,,zmb_leaper_disapparate,grp_voice,18470,18470,,75,500,750,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,no,bus_voice, +zmb_vocals_leaper_death,raw\sound\zmb\ai\leaper\death\death_01.LN55.pc.snd,,,zmb_leaper_disapparate,grp_voice,18470,18470,,75,500,750,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,no,bus_voice, +zmb_vocals_leaper_death,raw\sound\zmb\ai\leaper\death\death_02.LN55.pc.snd,,,zmb_leaper_disapparate,grp_voice,18470,18470,,75,500,750,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,no,bus_voice, +zmb_vocals_leaper_death,raw\sound\zmb\ai\leaper\death\death_03.LN55.pc.snd,,,zmb_leaper_disapparate,grp_voice,18470,18470,,75,500,750,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,no,bus_voice, +zmb_vocals_leaper_death,raw\sound\zmb\ai\leaper\death\death_04.LN55.pc.snd,,,zmb_leaper_disapparate,grp_voice,18470,18470,,75,500,750,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,no,bus_voice, +zmb_vocals_leaper_fall,raw\sound\zmb\ai\leaper\death\death_00.LN55.pc.snd,,,,grp_voice,10386,11653,,250,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_fall,raw\sound\zmb\ai\leaper\death\death_01.LN55.pc.snd,,,,grp_voice,10386,11653,,250,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_fall,raw\sound\zmb\ai\leaper\death\death_02.LN55.pc.snd,,,,grp_voice,10386,11653,,250,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_fall,raw\sound\zmb\ai\leaper\death\death_03.LN55.pc.snd,,,,grp_voice,10386,11653,,250,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_fall,raw\sound\zmb\ai\leaper\death\death_04.LN55.pc.snd,,,,grp_voice,10386,11653,,250,2250,2500,default,default,allon,allon,6,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,2608,,snp_voice,3d,0,0,0,0,-65,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_spawn,raw\sound\zmb\ai\leaper\spawn\spawn_00.LN55.pc.snd,,,,grp_voice,23252,23252,,750,2500,2750,default,default,allon,allon,3,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,25,75,52056,127,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_spawn,raw\sound\zmb\ai\leaper\spawn\spawn_01.LN55.pc.snd,,,,grp_voice,23252,23252,,750,2500,2750,default,default,allon,allon,3,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,25,75,52056,127,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_spawn,raw\sound\zmb\ai\leaper\spawn\spawn_02.LN55.pc.snd,,,,grp_voice,23252,23252,,750,2500,2750,default,default,allon,allon,3,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,25,75,52056,127,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, +zmb_vocals_leaper_spawn,raw\sound\zmb\ai\leaper\spawn\spawn_03.LN55.pc.snd,,,,grp_voice,23252,23252,,750,2500,2750,default,default,allon,allon,3,priority,1,reject,27553,38966,,30,60,63,-1,,loaded,nonlooping,volume,-1,0,3685,,snp_voice,3d,0,25,75,52056,127,,no,no,none,0,,,,no,0,0,0,,yes,no,0,0,,yes,yes,bus_voice, \ No newline at end of file diff --git a/zm_ai_pack/zone_source/mod.zone b/zm_ai_pack/zone_source/mod.zone index 6ccc163..3a1d38c 100644 --- a/zm_ai_pack/zone_source/mod.zone +++ b/zm_ai_pack/zone_source/mod.zone @@ -14,7 +14,7 @@ include,buried/zm_buried_ghost //include,buried/zm_buried_sloth //include,highrise/zm_highrise_basic_no_anims -//include,highrise/zm_highrise_leaper +include,highrise/zm_highrise_leaper //include,nuked/zm_nuked_basic_no_anims //include,nuked/zm_nuked_dog diff --git a/zm_ai_pack/zone_source/mod_1.zone b/zm_ai_pack/zone_source/mod_1.zone index 9e13ee9..8395274 100644 --- a/zm_ai_pack/zone_source/mod_1.zone +++ b/zm_ai_pack/zone_source/mod_1.zone @@ -7,7 +7,7 @@ include,buried/zm_buried_ghost //include,buried/zm_buried_sloth //include,highrise/zm_highrise_basic -//include,highrise/zm_highrise_leaper +include,highrise/zm_highrise_leaper //include,nuked/zm_nuked_basic //include,nuked/zm_nuked_dog \ No newline at end of file