mirror of
https://github.com/JezuzLizard/t6-fastfile-mods.git
synced 2025-05-24 21:04:52 +00:00
Fix round manager. Add more todos.
This commit is contained in:
parent
1bf0822701
commit
f7f3ed71b7
@ -13,14 +13,14 @@ 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 leaper" );
|
||||
set_dvar_if_unset( "rm_allowed_special_rounds", "normal zombie_dog leaper mechz" );
|
||||
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", "" );
|
||||
|
||||
set_dvar_if_unset( "rm_allowed_mixed_rounds_presets", "default wave" );
|
||||
set_dvar_if_unset( "rm_allowed_mixed_round_variants_for_default_preset", "random" );
|
||||
set_dvar_if_unset( "rm_allowed_mixed_round_variants_for_wave_preset", "normal_wave dog_wave mechz_wave brutus_wave" );
|
||||
set_dvar_if_unset( "rm_allowed_mixed_round_variants_for_wave_preset", "normal_wave dog_wave mechz_wave brutus_wave leaper_wave" );
|
||||
set_dvar_if_unset( "rm_forced_mixed_rounds_preset", "" );
|
||||
set_dvar_if_unset( "rm_forced_mixed_rounds_variant", "" );
|
||||
set_dvar_if_unset( "rm_mixed_round_chance_base", 20 );
|
||||
@ -188,6 +188,13 @@ main()
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_brutus_wave::spawning_cooldown,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_brutus_wave::spawning_round_start);
|
||||
|
||||
register_mixed_round_preset_variant( "wave", "leaper_wave",
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_leaper_wave::spawning_wave,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_leaper_wave::spawning_chance,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_leaper_wave::spawning_limit,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_leaper_wave::spawning_cooldown,
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_leaper_wave::spawning_round_start);
|
||||
|
||||
scripts\zm\zm_ai_pack\mixed_presets\_default::main();
|
||||
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_random::main();
|
||||
@ -197,10 +204,29 @@ main()
|
||||
scripts\zm\zm_ai_pack\mixed_variants\_normal_wave::main();
|
||||
//Future variants
|
||||
// random - random ais, true_random - random ais + random behavior and stats
|
||||
// elemental?
|
||||
// fx related
|
||||
// - lightning enemies that stun you when they hit you
|
||||
// - fire enemies which set you on fire dealing damage over time
|
||||
// - ice enemies which slow you
|
||||
// - poison enemies
|
||||
// - auras that give nearby enemies buffs or debuff nearby players
|
||||
// - invisible done by using camo suit material from campaign
|
||||
// durable
|
||||
// waves for mixed round_type
|
||||
// boss related
|
||||
// - enemies that override spawning system - enemies spawn near them while they are alive
|
||||
// - overrides enemy types
|
||||
// - gives special reward for defeating them
|
||||
// - always spawns at specific rounds 20/35/50/65 etc
|
||||
// - has special fx around them
|
||||
// - has special abilities if possible
|
||||
// - plays random boss music
|
||||
// - boss health bar and name
|
||||
// - randomly spawning powerups to help the players
|
||||
// several default presets to cycle through
|
||||
// modify aitypes player targetting - target weakest performing, strongest performing, furthest, closest, most health, least health
|
||||
// Add faster sprinters as an enemy type
|
||||
// ghosts phase through walls
|
||||
}
|
||||
|
||||
should_do_special_round()
|
||||
@ -340,11 +366,41 @@ determine_current_round_type()
|
||||
allowed_mixed_presets_string = getdvar( "rm_allowed_mixed_rounds_presets" );
|
||||
can_pick_mixed_round_type = allowed_mixed_presets_string != "";
|
||||
|
||||
for ( i = 0; i < possible_round_types_keys.size; i++ )
|
||||
{
|
||||
if ( possible_round_types_keys[ i ] == "normal" )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
assert( isDefined( level.round_manager_special_rounds[ possible_round_types_keys[ i ] ] ), "Round Manager ERROR: Round type <" + possible_round_types_keys[ i ] + "> was not registered" );
|
||||
if ( !isDefined( level.round_manager_special_rounds[ possible_round_types_keys[ i ] ] ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
for ( j = 0; j < possible_variants_keys.size; j++ )
|
||||
{
|
||||
assert( isDefined( level.round_manager_special_rounds[ possible_round_types_keys[ i ] ][ possible_variants_keys[ j ] ] ), "Round Manager ERROR: Variant <" + possible_variants_keys[ j ] + "> is not registered for round type <" + possible_round_types_keys[ i ] + "> ");
|
||||
}
|
||||
}
|
||||
|
||||
normal_present = false;
|
||||
for ( i = 0; i < possible_round_types_keys.size; i++ )
|
||||
{
|
||||
if ( possible_round_types_keys[ i ] == "normal" )
|
||||
{
|
||||
normal_present = true;
|
||||
break;
|
||||
}
|
||||
|
||||
for (;;)
|
||||
{
|
||||
possible_round_types = array_randomize( possible_round_types_keys );
|
||||
for ( i = 0; i < possible_round_types.size; i++ )
|
||||
{
|
||||
if ( possible_round_types[ i ] == "normal" )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
assert( isDefined( level.round_manager_special_rounds[ possible_round_types[ i ] ] ) );
|
||||
possible_variants = array_randomize( possible_variants_keys );
|
||||
|
||||
@ -362,10 +418,8 @@ determine_current_round_type()
|
||||
|
||||
for ( j = 0; j < possible_variants.size; j++ )
|
||||
{
|
||||
assert( isDefined( level.round_manager_special_rounds[ possible_round_types[ i ] ][ possible_variants[ j ] ] ) );
|
||||
|
||||
if ( possible_round_types.size <= 1 || [[ level.round_manager_special_rounds[ possible_round_types[ i ] ][ possible_variants[ j ] ].chance_func ]]()
|
||||
&& [[ level.round_manager_special_rounds[ possible_round_types[ i ] ][ possible_variants[ j ] ].next_instance_func ]]() <= level.round_number )
|
||||
if ( possible_round_types.size <= 1 || ( [[ level.round_manager_special_rounds[ possible_round_types[ i ] ][ possible_variants[ j ] ].next_instance_func ]]() <= level.round_number || !normal_present )
|
||||
&& [[ level.round_manager_special_rounds[ possible_round_types[ i ] ][ possible_variants[ j ] ].chance_func ]]() )
|
||||
{
|
||||
return_value.round_type = possible_round_types[ i ];
|
||||
return_value.variant = possible_variants[ j ];
|
||||
|
@ -10,5 +10,5 @@ preset_chance()
|
||||
|
||||
round_start()
|
||||
{
|
||||
level.round_manager_spawn_count = 0;
|
||||
level.round_manager_vars[ "spawn_count" ] = 0;
|
||||
}
|
@ -16,7 +16,7 @@ preset_chance()
|
||||
|
||||
round_start()
|
||||
{
|
||||
level.round_manager_spawn_count = 0;
|
||||
level.round_manager_vars[ "spawn_count" ] = 0;
|
||||
}
|
||||
|
||||
spawn_wave( type, custom_starting_properties, wait_for_room = true )
|
||||
@ -40,7 +40,7 @@ spawn_wave( type, custom_starting_properties, wait_for_room = true )
|
||||
if ( isdefined( ai ) )
|
||||
{
|
||||
count++;
|
||||
level.round_manager_spawn_count++;
|
||||
level.round_manager_vars[ "spawn_count" ]++;
|
||||
}
|
||||
wait( level.zombie_vars["zombie_spawn_delay"] );
|
||||
}
|
||||
|
@ -0,0 +1,60 @@
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\_utility;
|
||||
|
||||
#include scripts\zm\zm_ai_pack\_utility;
|
||||
|
||||
main()
|
||||
{
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_leaper_wave_variant_spawn_limit_min", 6 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_leaper_wave_variant_spawn_limit_max", 12 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_leaper_wave_variant_min_round", 15 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_leaper_wave_variant_min_cooldown", 80.0 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_leaper_wave_variant_max_cooldown", 240.0 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_leaper_wave_variant_chance_threshold", 1000 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_leaper_wave_variant_chance_per_spawn_min", 5 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_wave_leaper_wave_variant_chance_per_spawn_max", 10 );
|
||||
}
|
||||
|
||||
spawning_wave()
|
||||
{
|
||||
level.round_manager_vars[ "leaper_wave_count" ]++;
|
||||
custom_starting_properties = sys::spawnstruct();
|
||||
health = int( ( level.round_number / 5 ) * 400 );
|
||||
if ( health > 1600 )
|
||||
{
|
||||
health = 1600;
|
||||
}
|
||||
custom_starting_properties.health = health;
|
||||
scripts\zm\zm_ai_pack\mixed_presets\_wave::spawn_wave( "leaper", custom_starting_properties );
|
||||
time = randomfloatrange( getdvarfloat( "rm_mixed_preset_wave_leaper_wave_variant_min_cooldown" ), getdvarfloat( "rm_mixed_preset_wave_leaper_wave_variant_max_cooldown" ) );
|
||||
level.round_manager_vars[ "guaranteed_leaper_wave_time" ] = int( gettime() + ( time * 1000 ) );
|
||||
}
|
||||
|
||||
spawning_chance()
|
||||
{
|
||||
return scripts\zm\zm_ai_pack\mixed_presets\_wave::spawning_chance( "leaper" );
|
||||
}
|
||||
|
||||
spawning_limit()
|
||||
{
|
||||
if ( level.players.size <= 1 )
|
||||
{
|
||||
return getdvarint( "rm_mixed_preset_wave_leaper_wave_variant_spawn_limit_min" );
|
||||
}
|
||||
else
|
||||
{
|
||||
return getdvarint( "rm_mixed_preset_wave_leaper_wave_variant_spawn_limit_max" );
|
||||
}
|
||||
}
|
||||
|
||||
spawning_cooldown()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
spawning_round_start()
|
||||
{
|
||||
level.round_manager_vars[ "guaranteed_leaper_wave_time" ] = level.round_start_time;
|
||||
level.round_manager_vars[ "leaper_wave_count" ] = 0;
|
||||
}
|
@ -6,24 +6,23 @@
|
||||
|
||||
main()
|
||||
{
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_allowed_aitypes", "normal zombie_dog mechz brutus" );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_allowed_aitypes", "normal zombie_dog mechz brutus leaper" );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_wave_spawn_limit", 24 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_wave_spawn_cooldown", 1 );
|
||||
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_mechz_spawn_chance_10000_base", 100 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_zombie_dog_spawn_chance_10000_base", 1200 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_brutus_spawn_chance_10000_base", 150 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_leaper_spawn_chance_10000_base", 600 );
|
||||
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_mechz_spawn_chance_10000_increase_per_round", 2 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_zombie_dog_spawn_chance_10000_increase_per_round", 6 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_brutus_spawn_chance_10000_increase_per_round", 2 );
|
||||
set_dvar_if_unset( "rm_mixed_preset_default_random_variant_leaper_spawn_chance_10000_increase_per_round", 5 );
|
||||
}
|
||||
|
||||
spawning_random()
|
||||
{
|
||||
mechz_spawn_chance = getdvarint( "rm_mixed_preset_default_random_variant_mechz_spawn_chance_10000_base" );
|
||||
zombie_dog_chance = getdvarint( "rm_mixed_preset_default_random_variant_zombie_dog_spawn_chance_10000_base" );
|
||||
|
||||
count = 0;
|
||||
for (;;)
|
||||
{
|
||||
@ -60,7 +59,7 @@ spawning_random()
|
||||
if ( isdefined( ai ) )
|
||||
{
|
||||
count++;
|
||||
level.round_manager_spawn_count++;
|
||||
level.round_manager_vars[ "spawn_count" ]++;
|
||||
}
|
||||
|
||||
if ( count >= spawning_limit() )
|
||||
|
@ -18,8 +18,9 @@ main()
|
||||
set_dvar_if_unset( "rm_mechz_rush_min_round", 45 );
|
||||
set_dvar_if_unset( "rm_mechz_rush_min_spawn_wait", 1.5 );
|
||||
set_dvar_if_unset( "rm_mechz_rush_max_spawn_wait", 2.5 );
|
||||
set_dvar_if_unset( "rm_mechz_rush_max_mechz_alive", 12 );
|
||||
set_dvar_if_unset( "rm_mechz_rush_max_mechz_round", 12 );
|
||||
set_dvar_if_unset( "rm_mechz_rush_max_mechz_alive", 24 );
|
||||
set_dvar_if_unset( "rm_mechz_rush_max_mechz_round", 24 );
|
||||
set_dvar_if_unset( "rm_mechz_rush_max_mechz_per_player", 4 );
|
||||
set_dvar_if_unset( "rm_mechz_rush_max_health_multiplier", 0.5 );
|
||||
}
|
||||
|
||||
@ -100,13 +101,13 @@ round_wait()
|
||||
round_max()
|
||||
{
|
||||
if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
|
||||
level.mechz_zombie_per_round = 1;
|
||||
else if ( level.special_round_count < 2 )
|
||||
level.mechz_zombie_per_round = 1;
|
||||
else if ( level.special_round_count < 5 )
|
||||
level.mechz_zombie_per_round = 2;
|
||||
else if ( level.special_round_count < 2 )
|
||||
level.mechz_zombie_per_round = 4;
|
||||
else if ( level.special_round_count < 5 )
|
||||
level.mechz_zombie_per_round = 6;
|
||||
else
|
||||
level.mechz_zombie_per_round = 3;
|
||||
level.mechz_zombie_per_round = 8;
|
||||
|
||||
level.zombie_total = level.mechz_zombie_per_round;
|
||||
level.mechz_left_to_spawn = level.zombie_total;
|
||||
@ -199,7 +200,19 @@ round_spawning_rush()
|
||||
|
||||
round_max_rush()
|
||||
{
|
||||
level.zombie_total = getdvarint( "rm_mechz_rush_max_mechz_round" );
|
||||
max_per_player = getdvarint( "rm_mechz_rush_max_mechz_per_player" );
|
||||
|
||||
max_mechz = max_per_player * level.players.size;
|
||||
max = getdvarint( "rm_mechz_rush_max_mechz_round" );
|
||||
if ( max_mechz > max )
|
||||
{
|
||||
max_mechz = max;
|
||||
}
|
||||
if ( max_mechz <= 0 )
|
||||
{
|
||||
max_mechz = 2;
|
||||
}
|
||||
level.zombie_total = max_mechz;
|
||||
level.mechz_left_to_spawn = level.zombie_total;
|
||||
}
|
||||
|
||||
|
@ -25,8 +25,11 @@ main()
|
||||
pluto_sys::replacefunc( maps\mp\animscripts\zm_dog_combat::domeleeafterwait, ::domeleeafterwait_override );
|
||||
pluto_sys::replacefunc( maps\mp\animscripts\zm_dog_combat::handlemeleebiteattacknotetracks, ::handlemeleebiteattacknotetracks_override );
|
||||
|
||||
//pluto_sys::replacefunc( maps\mp\animscripts\zm_run::setanimstatefromspeed, ::setanimstatefromspeed_override );
|
||||
//pluto_sys::replacefunc( maps\mp\animscripts\zm_melee::set_zombie_melee_anim_state, ::set_zombie_melee_anim_state_override );
|
||||
if ( getdvarint( "fix_zombie_move_anim_randomizing_after_melee" ) )
|
||||
{
|
||||
pluto_sys::replacefunc( maps\mp\animscripts\zm_run::setanimstatefromspeed, ::setanimstatefromspeed_override );
|
||||
pluto_sys::replacefunc( maps\mp\animscripts\zm_melee::set_zombie_melee_anim_state, ::set_zombie_melee_anim_state_override );
|
||||
}
|
||||
|
||||
level.script = toLower( getDvar( "mapname" ) );
|
||||
level.gametype = toLower( getDvar( "g_gametype" ) );
|
||||
|
@ -513,10 +513,9 @@ playloopsound( sound_alias, fade_time )
|
||||
}
|
||||
|
||||
/@
|
||||
[DESCRIPTION]: Spawns a temp entity at CALLER's location which plays <sound_name>.
|
||||
If sound is invalid sound will simply fail to play with no error.;
|
||||
[DESCRIPTION]: Returns the playback time of <sound_alias>.;
|
||||
[CALL_TYPE]: method;
|
||||
[USAGE]: playback_time = playsound( <sound_alias> );
|
||||
[USAGE]: playback_time = soundgetplaybacktime( <sound_alias> );
|
||||
[PARAMS]: ARG1:<string>;
|
||||
[PARAMS_NOTES]: NONE;
|
||||
[RETURNS]: <int>;
|
||||
|
@ -84,6 +84,7 @@ script,scripts/zm/zm_ai_pack/mixed_presets/_default.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_presets/_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_brutus_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_dog_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_leaper_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_mechz_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_normal_wave.gsc
|
||||
script,scripts/zm/zm_ai_pack/mixed_variants/_random.gsc
|
||||
|
@ -13,3 +13,4 @@ aats
|
||||
chicky-chicky comes in random variants 1. random projectiles in 360 radius, airstrike where bullet lands, turret shooter, friendly ai shooter
|
||||
|
||||
fix zombie move anims changing when meleeing an enemy
|
||||
reactive armor powerup makes enemiesa % of their max health as damage instead of dealing full damage to the player
|
Loading…
x
Reference in New Issue
Block a user