diff --git a/README.md b/README.md index bbdb7eb4..7e04264b 100644 --- a/README.md +++ b/README.md @@ -41,6 +41,9 @@ * Health bar displayed on bottom left of screen * Current zone displayed on bottom left of screen +## Settings +* In-game menu no longer disabled instantly when the game ends + ## Zombies * Health capped at 1 million * Removed walkers in high rounds diff --git a/scripts/zm/main/_zm_reimagined.gsc b/scripts/zm/main/_zm_reimagined.gsc index 339ddefb..57756e14 100644 --- a/scripts/zm/main/_zm_reimagined.gsc +++ b/scripts/zm/main/_zm_reimagined.gsc @@ -13,6 +13,7 @@ main() { replaceFunc(maps/mp/zombies/_zm::check_quickrevive_for_hotjoin, scripts/zm/replaced/_zm::check_quickrevive_for_hotjoin); + replaceFunc(maps/mp/zombies/_zm::end_game, scripts/zm/replaced/_zm::end_game); replaceFunc(maps/mp/zombies/_zm_playerhealth::playerhealthregen, scripts/zm/replaced/_zm_playerhealth::playerhealthregen); replaceFunc(maps/mp/zombies/_zm_utility::track_players_intersection_tracker, scripts/zm/replaced/_zm_utility::track_players_intersection_tracker); replaceFunc(maps/mp/zombies/_zm_powerups::nuke_powerup, scripts/zm/replaced/_zm_powerups::nuke_powerup); diff --git a/scripts/zm/replaced/_zm.gsc b/scripts/zm/replaced/_zm.gsc index e5e7130e..9d9ab31d 100644 --- a/scripts/zm/replaced/_zm.gsc +++ b/scripts/zm/replaced/_zm.gsc @@ -55,4 +55,169 @@ wait_for_all_players_to_connect( max_wait ) return; } } +} + +end_game() +{ + level waittill( "end_game" ); + maps/mp/zombies/_zm::check_end_game_intermission_delay(); + clientnotify( "zesn" ); + if ( isDefined( level.sndgameovermusicoverride ) ) + { + level thread maps/mp/zombies/_zm_audio::change_zombie_music( level.sndgameovermusicoverride ); + } + else + { + level thread maps/mp/zombies/_zm_audio::change_zombie_music( "game_over" ); + } + players = get_players(); + for ( i = 0; i < players.size; i++ ) + { + setclientsysstate( "lsm", "0", players[ i ] ); + } + for ( i = 0; i < players.size; i++ ) + { + if ( players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() ) + { + players[ i ] recordplayerdeathzombies(); + players[ i ] maps/mp/zombies/_zm_stats::increment_player_stat( "deaths" ); + players[ i ] maps/mp/zombies/_zm_stats::increment_client_stat( "deaths" ); + players[ i ] maps/mp/zombies/_zm_pers_upgrades_functions::pers_upgrade_jugg_player_death_stat(); + } + if ( isdefined( players[ i ].revivetexthud) ) + { + players[ i ].revivetexthud destroy(); + } + } + stopallrumbles(); + level.intermission = 1; + level.zombie_vars[ "zombie_powerup_insta_kill_time" ] = 0; + level.zombie_vars[ "zombie_powerup_fire_sale_time" ] = 0; + level.zombie_vars[ "zombie_powerup_point_doubler_time" ] = 0; + wait 0.1; + game_over = []; + survived = []; + players = get_players(); + if ( !isDefined( level._supress_survived_screen ) ) + { + for ( i = 0; i < players.size; i++ ) + { + if ( isDefined( level.custom_game_over_hud_elem ) ) + { + game_over[ i ] = [[ level.custom_game_over_hud_elem ]]( players[ i ] ); + } + else + { + game_over[ i ] = newclienthudelem( players[ i ] ); + game_over[ i ].alignx = "center"; + game_over[ i ].aligny = "middle"; + game_over[ i ].horzalign = "center"; + game_over[ i ].vertalign = "middle"; + game_over[ i ].y -= 130; + game_over[ i ].foreground = 1; + game_over[ i ].fontscale = 3; + game_over[ i ].alpha = 0; + game_over[ i ].color = ( 1, 1, 1 ); + game_over[ i ].hidewheninmenu = 1; + game_over[ i ] settext( &"ZOMBIE_GAME_OVER" ); + game_over[ i ] fadeovertime( 1 ); + game_over[ i ].alpha = 1; + } + survived[ i ] = newclienthudelem( players[ i ] ); + survived[ i ].alignx = "center"; + survived[ i ].aligny = "middle"; + survived[ i ].horzalign = "center"; + survived[ i ].vertalign = "middle"; + survived[ i ].y -= 100; + survived[ i ].foreground = 1; + survived[ i ].fontscale = 2; + survived[ i ].alpha = 0; + survived[ i ].color = ( 1, 1, 1 ); + survived[ i ].hidewheninmenu = 1; + + if ( level.round_number < 2 ) + { + if ( level.script == "zombie_moon" ) + { + if ( !isDefined( level.left_nomans_land ) ) + { + nomanslandtime = level.nml_best_time; + player_survival_time = int( nomanslandtime / 1000 ); + player_survival_time_in_mins = maps/mp/zombies/_zm::to_mins( player_survival_time ); + survived[ i ] settext( &"ZOMBIE_SURVIVED_NOMANS", player_survival_time_in_mins ); + } + else if ( level.left_nomans_land == 2 ) + { + survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUND" ); + } + } + else + { + survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUND" ); + } + } + else + { + survived[ i ] settext( &"ZOMBIE_SURVIVED_ROUNDS", level.round_number ); + } + survived[ i ] fadeovertime( 1 ); + survived[ i ].alpha = 1; + } + } + if ( isDefined( level.custom_end_screen ) ) + { + level [[ level.custom_end_screen ]](); + } + for ( i = 0; i < players.size; i++ ) + { + players[ i ] setclientammocounterhide( 1 ); + players[ i ] setclientminiscoreboardhide( 1 ); + } + uploadstats(); + maps/mp/zombies/_zm_stats::update_players_stats_at_match_end( players ); + maps/mp/zombies/_zm_stats::update_global_counters_on_match_end(); + wait 1; + wait 3.95; + players = get_players(); + foreach ( player in players ) + { + if ( isdefined( player.sessionstate ) && player.sessionstate == "spectator" ) + { + player.sessionstate = "playing"; + } + } + wait 0.05; + players = get_players(); + if ( !isDefined( level._supress_survived_screen ) ) + { + for(i = 0; i < players.size; i++) + { + survived[ i ] destroy(); + game_over[ i ] destroy(); + } + } + for ( i = 0; i < players.size; i++ ) + { + if ( isDefined( players[ i ].survived_hud ) ) + { + players[ i ].survived_hud destroy(); + } + if ( isDefined( players[ i ].game_over_hud ) ) + { + players[ i ].game_over_hud destroy(); + } + } + maps/mp/zombies/_zm::intermission(); + wait level.zombie_vars[ "zombie_intermission_time" ]; + level notify( "stop_intermission" ); + array_thread( get_players(), maps/mp/zombies/_zm::player_exit_level ); + bbprint( "zombie_epilogs", "rounds %d", level.round_number ); + wait 1.5; + players = get_players(); + for ( i = 0; i < players.size; i++ ) + { + players[ i ] cameraactivate( 0 ); + } + exitlevel( 0 ); + wait 666; } \ No newline at end of file