diff --git a/README.md b/README.md index 72646b24..b5ba3d42 100644 --- a/README.md +++ b/README.md @@ -354,10 +354,12 @@ * Keep weapons when entering Who's Who mode * Keep any perks obtained in Who's Who mode when exiting Who's Who mode * Revive twice as fast in Who's Who mode +* Decreased Who's Who mode duration from 45 seconds to 30 seconds * Invulnerable for 2 seconds after entering and exiting Who's Who mode * Controls are frozen for 0.5 seconds after exiting Who's Who mode * Purchasing Who's Who in Who's Who mode no longer destroys the clone * Downing with Who's Who in Who's Who mode destroys the clone +* Added Who's Who mode duration on HUD * Changed revive waypoint icon to Who's Who perk icon * Revive waypoint shows offscreen diff --git a/scripts/zm/replaced/_zm.gsc b/scripts/zm/replaced/_zm.gsc index 923c4a35..a9facac5 100644 --- a/scripts/zm/replaced/_zm.gsc +++ b/scripts/zm/replaced/_zm.gsc @@ -1655,7 +1655,8 @@ wait_and_revive() self thread maps\mp\zombies\_zm::default_exit_level(); } solo_revive_time = 10; - self.revive_hud settext( &"ZOMBIE_REVIVING_SOLO", self ); + self.revive_hud.y = -160; + self.revive_hud settext( &"ZOMBIE_REVIVING" ); self maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( solo_revive_time ); if ( !isDefined( self.beingrevivedprogressbar ) ) { diff --git a/scripts/zm/replaced/_zm_afterlife.gsc b/scripts/zm/replaced/_zm_afterlife.gsc index 47359c74..afb48d3c 100644 --- a/scripts/zm/replaced/_zm_afterlife.gsc +++ b/scripts/zm/replaced/_zm_afterlife.gsc @@ -166,7 +166,9 @@ afterlife_laststand( b_electric_chair = 0 ) } self ghost(); - self.e_afterlife_corpse = self afterlife_spawn_corpse(); + corpse = self afterlife_spawn_corpse(); + self.e_afterlife_corpse = corpse; + corpse.e_afterlife_player = self; self thread afterlife_clean_up_on_disconnect(); self notify( "player_fake_corpse_created" ); self afterlife_fake_revive(); @@ -256,6 +258,16 @@ afterlife_revive_invincible() afterlife_revive_do_revive( playerbeingrevived, revivergun ) { + playerbeingrevived_player = playerbeingrevived; + playerbeingrevived_player.revive_hud.y = -160; + beingrevivedprogressbar_y = level.primaryprogressbary * -1; + if ( isDefined( playerbeingrevived.e_afterlife_player ) ) + { + playerbeingrevived_player = playerbeingrevived.e_afterlife_player; + playerbeingrevived_player.revive_hud.y = -50; + beingrevivedprogressbar_y = level.secondaryprogressbary * -2; + } + assert( self is_reviving_afterlife( playerbeingrevived ) ); revivetime = 3; playloop = 0; @@ -269,24 +281,28 @@ afterlife_revive_do_revive( playerbeingrevived, revivergun ) timer = 0; revived = 0; playerbeingrevived.revivetrigger.beingrevived = 1; - playerbeingrevived.revive_hud settext( &"GAME_PLAYER_IS_REVIVING_YOU", self ); - playerbeingrevived revive_hud_show_n_fade( 3.0 ); playerbeingrevived.revivetrigger sethintstring( "" ); + if ( playerbeingrevived_player != self ) + { + playerbeingrevived_player.revive_hud settext( &"GAME_PLAYER_IS_REVIVING_YOU", self ); + playerbeingrevived_player revive_hud_show_n_fade( 3.0 ); + } + if ( isplayer( playerbeingrevived ) ) { playerbeingrevived startrevive( self ); } - if ( !isDefined( playerbeingrevived.beingrevivedprogressbar ) ) + if ( !isDefined( playerbeingrevived_player.beingrevivedprogressbar ) && playerbeingrevived_player != self ) { - playerbeingrevived.beingrevivedprogressbar = playerbeingrevived createprimaryprogressbar(); - playerbeingrevived.beingrevivedprogressbar setpoint("CENTER", undefined, level.primaryprogressbarx, -1 * level.primaryprogressbary); - playerbeingrevived.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1); - playerbeingrevived.beingrevivedprogressbar.hidewheninmenu = 1; - playerbeingrevived.beingrevivedprogressbar.bar.hidewheninmenu = 1; - playerbeingrevived.beingrevivedprogressbar.barframe.hidewheninmenu = 1; - playerbeingrevived.beingrevivedprogressbar thread scripts\zm\_zm_reimagined::destroy_on_intermission(); + playerbeingrevived_player.beingrevivedprogressbar = playerbeingrevived_player createprimaryprogressbar(); + playerbeingrevived_player.beingrevivedprogressbar setpoint("CENTER", undefined, level.primaryprogressbarx, beingrevivedprogressbar_y); + playerbeingrevived_player.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1); + playerbeingrevived_player.beingrevivedprogressbar.hidewheninmenu = 1; + playerbeingrevived_player.beingrevivedprogressbar.bar.hidewheninmenu = 1; + playerbeingrevived_player.beingrevivedprogressbar.barframe.hidewheninmenu = 1; + playerbeingrevived_player.beingrevivedprogressbar thread scripts\zm\_zm_reimagined::destroy_on_intermission(); } if ( !isdefined( self.reviveprogressbar ) ) @@ -308,7 +324,7 @@ afterlife_revive_do_revive( playerbeingrevived, revivergun ) self.is_reviving_any++; self thread laststand_clean_up_reviving_any( playerbeingrevived ); self.reviveprogressbar updatebar( 0.01, 1 / revivetime ); - playerbeingrevived.beingrevivedprogressbar updatebar( 0.01, 1 / revivetime ); + playerbeingrevived_player.beingrevivedprogressbar updatebar( 0.01, 1 / revivetime ); self.revivetexthud.alignx = "center"; self.revivetexthud.aligny = "middle"; self.revivetexthud.horzalign = "center"; @@ -358,9 +374,14 @@ afterlife_revive_do_revive( playerbeingrevived, revivergun ) e_fx delete(); - if ( isDefined( playerbeingrevived.beingrevivedprogressbar ) ) + if ( isDefined( playerbeingrevived_player.beingrevivedprogressbar ) ) { - playerbeingrevived.beingrevivedprogressbar destroyelem(); + playerbeingrevived_player.beingrevivedprogressbar destroyelem(); + } + + if ( isDefined( playerbeingrevived_player.revive_hud ) ) + { + playerbeingrevived_player.revive_hud settext(""); } if ( isdefined( self.reviveprogressbar ) ) diff --git a/scripts/zm/replaced/_zm_chugabud.gsc b/scripts/zm/replaced/_zm_chugabud.gsc index 6e54c9be..5ea72f64 100644 --- a/scripts/zm/replaced/_zm_chugabud.gsc +++ b/scripts/zm/replaced/_zm_chugabud.gsc @@ -1,6 +1,7 @@ #include maps\mp\_utility; #include common_scripts\utility; #include maps\mp\zombies\_zm_utility; +#include maps\mp\gametypes_zm\_hud_util; #include maps\mp\zombies\_zm_chugabud; chugabud_laststand() @@ -42,8 +43,9 @@ chugabud_laststand() { self thread activate_chugabud_effects_and_audio(); corpse = self chugabud_spawn_corpse(); - corpse thread chugabud_corpse_revive_icon( self ); self.e_chugabud_corpse = corpse; + corpse.e_chugabud_player = self; + corpse thread chugabud_corpse_revive_icon( self ); corpse thread chugabud_corpse_cleanup_on_spectator( self ); corpse thread chugabud_corpse_cleanup_on_disconnect( self ); @@ -51,7 +53,7 @@ chugabud_laststand() corpse setclientfield( "clientfield_whos_who_clone_glow_shader", 1 ); } - self chugabud_fake_revive(); + self thread chugabud_fake_revive(); wait 0.1; self.ignore_insta_kill = undefined; self.disable_chugabud_corpse = undefined; @@ -62,7 +64,7 @@ chugabud_laststand() return; } - bleedout_time = getdvarfloat( "player_lastStandBleedoutTime" ); + bleedout_time = 30; self thread chugabud_bleed_timeout( bleedout_time, corpse ); self thread chugabud_handle_multiple_instances( corpse ); @@ -245,27 +247,23 @@ chugabud_spawn_corpse() corpse.angles = self.angles; corpse maps\mp\zombies\_zm_clone::clone_give_weapon( "m1911_zm" ); corpse maps\mp\zombies\_zm_clone::clone_animate( "laststand" ); - corpse.revive_hud = self chugabud_revive_hud_create(); corpse thread maps\mp\zombies\_zm_laststand::revive_trigger_spawn(); return corpse; } -chugabud_revive_hud_create() +chugabud_bleed_timeout_hud_create( delay ) { - self.old_revive_hud = self.revive_hud; - self.revive_hud = newclienthudelem( self ); - self.revive_hud.alignx = "center"; - self.revive_hud.aligny = "middle"; - self.revive_hud.horzalign = "center"; - self.revive_hud.vertalign = "bottom"; - self.revive_hud.y = -50; - self.revive_hud.foreground = 1; - self.revive_hud.font = "default"; - self.revive_hud.fontscale = 1.5; - self.revive_hud.alpha = 0; - self.revive_hud.color = ( 1, 1, 1 ); - self.revive_hud settext( "" ); - return self.revive_hud; + hud = self createbar((0.25, 0.25, 1), level.secondaryprogressbarwidth * 2, level.secondaryprogressbarheight); + hud setpoint("CENTER", undefined, level.secondaryprogressbarx, -2.25 * level.secondaryprogressbary); + hud.hidewheninmenu = 1; + hud.bar.hidewheninmenu = 1; + hud.barframe.hidewheninmenu = 1; + hud thread scripts\zm\_zm_reimagined::destroy_on_intermission(); + + hud updatebar(1); + hud.bar scaleovertime(delay, 1, hud.height); + + return hud; } chugabud_corpse_revive_icon( player ) @@ -310,13 +308,6 @@ chugabud_corpse_cleanup( corpse, was_revived ) corpse.revivetrigger = undefined; } - if ( isdefined( corpse.revive_hud ) ) - { - self.revive_hud = self.old_revive_hud; - corpse.revive_hud destroy(); - corpse.revive_hud = undefined; - } - if ( isdefined( corpse.revive_hud_elem ) ) { corpse.revive_hud_elem destroy(); @@ -329,6 +320,14 @@ chugabud_corpse_cleanup( corpse, was_revived ) corpse.revive_waypoint_origin = undefined; } + if ( isdefined( self.chugabud_bleed_timeout_hud ) ) + { + self.chugabud_bleed_timeout_hud destroy(); + self.chugabud_bleed_timeout_hud.bar destroy(); + self.chugabud_bleed_timeout_hud.barframe destroy(); + self.chugabud_bleed_timeout_hud = undefined; + } + self.loadout = undefined; wait 0.1; corpse delete(); @@ -405,6 +404,8 @@ chugabud_bleed_timeout( delay, corpse ) self endon( "disconnect" ); corpse endon( "death" ); + self.chugabud_bleed_timeout_hud = self chugabud_bleed_timeout_hud_create( delay ); + wait delay; if ( isDefined( corpse.revivetrigger ) ) diff --git a/scripts/zm/replaced/_zm_laststand.gsc b/scripts/zm/replaced/_zm_laststand.gsc index 18c8bb53..9265159c 100644 --- a/scripts/zm/replaced/_zm_laststand.gsc +++ b/scripts/zm/replaced/_zm_laststand.gsc @@ -5,83 +5,121 @@ revive_do_revive( playerbeingrevived, revivergun ) { + playerbeingrevived_player = playerbeingrevived; + playerbeingrevived_player.revive_hud.y = -160; + beingrevivedprogressbar_y = level.primaryprogressbary * -1; + if ( isDefined( playerbeingrevived.e_chugabud_player ) ) + { + playerbeingrevived_player = playerbeingrevived.e_chugabud_player; + playerbeingrevived_player.revive_hud.y = -50; + beingrevivedprogressbar_y = level.secondaryprogressbary * -2; + } + revivetime = 3; + if ( self hasperk( "specialty_quickrevive" ) ) { revivetime /= 1.5; } + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active() ) { revivetime *= 0.5; } + if ( isdefined( self.e_chugabud_corpse ) ) { revivetime *= 0.5; } + timer = 0; revived = 0; playerbeingrevived.revivetrigger.beingrevived = 1; - playerbeingrevived.revive_hud settext( &"ZOMBIE_PLAYER_IS_REVIVING_YOU", self ); - playerbeingrevived maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( 3 ); playerbeingrevived.revivetrigger sethintstring( "" ); + + if ( playerbeingrevived_player != self ) + { + playerbeingrevived_player.revive_hud settext( &"ZOMBIE_PLAYER_IS_REVIVING_YOU", self ); + playerbeingrevived_player maps\mp\zombies\_zm_laststand::revive_hud_show_n_fade( 3 ); + } + if ( isplayer( playerbeingrevived ) ) { playerbeingrevived startrevive( self ); } - if ( !isDefined( playerbeingrevived.beingrevivedprogressbar ) ) + + if ( !isDefined( playerbeingrevived_player.beingrevivedprogressbar ) && playerbeingrevived_player != self ) { - playerbeingrevived.beingrevivedprogressbar = playerbeingrevived createprimaryprogressbar(); - playerbeingrevived.beingrevivedprogressbar setpoint("CENTER", undefined, level.primaryprogressbarx, -1 * level.primaryprogressbary); - playerbeingrevived.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1); - playerbeingrevived.beingrevivedprogressbar.hidewheninmenu = 1; - playerbeingrevived.beingrevivedprogressbar.bar.hidewheninmenu = 1; - playerbeingrevived.beingrevivedprogressbar.barframe.hidewheninmenu = 1; - playerbeingrevived.beingrevivedprogressbar thread scripts\zm\_zm_reimagined::destroy_on_intermission(); + playerbeingrevived_player.beingrevivedprogressbar = playerbeingrevived_player createprimaryprogressbar(); + playerbeingrevived_player.beingrevivedprogressbar setpoint("CENTER", undefined, level.primaryprogressbarx, beingrevivedprogressbar_y); + playerbeingrevived_player.beingrevivedprogressbar.bar.color = (0.5, 0.5, 1); + playerbeingrevived_player.beingrevivedprogressbar.hidewheninmenu = 1; + playerbeingrevived_player.beingrevivedprogressbar.bar.hidewheninmenu = 1; + playerbeingrevived_player.beingrevivedprogressbar.barframe.hidewheninmenu = 1; + playerbeingrevived_player.beingrevivedprogressbar thread scripts\zm\_zm_reimagined::destroy_on_intermission(); } + if ( !isDefined( self.reviveprogressbar ) ) { self.reviveprogressbar = self createprimaryprogressbar(); self.reviveprogressbar.bar.color = (0.5, 0.5, 1); self.reviveprogressbar thread scripts\zm\_zm_reimagined::destroy_on_intermission(); } + if ( !isDefined( self.revivetexthud ) ) { self.revivetexthud = newclienthudelem( self ); } + self thread laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ); + if ( !isDefined( self.is_reviving_any ) ) { self.is_reviving_any = 0; } + self.is_reviving_any++; self thread laststand_clean_up_reviving_any( playerbeingrevived ); self.reviveprogressbar updatebar( 0.01, 1 / revivetime ); - playerbeingrevived.beingrevivedprogressbar updatebar( 0.01, 1 / revivetime ); + playerbeingrevived_player.beingrevivedprogressbar updatebar( 0.01, 1 / revivetime ); + + if ( isDefined( playerbeingrevived_player.beingrevivedprogressbar ) ) + { + playerbeingrevived_player.beingrevivedprogressbar updatebar( 0.01, 1 / revivetime ); + } + self.revivetexthud.alignx = "center"; self.revivetexthud.aligny = "middle"; self.revivetexthud.horzalign = "center"; self.revivetexthud.vertalign = "bottom"; self.revivetexthud.y = -113; + if ( self issplitscreen() ) { self.revivetexthud.y = -347; } + self.revivetexthud.foreground = 1; self.revivetexthud.font = "default"; self.revivetexthud.fontscale = 1.8; self.revivetexthud.alpha = 1; self.revivetexthud.color = ( 1, 1, 1 ); self.revivetexthud.hidewheninmenu = 1; + if ( self maps\mp\zombies\_zm_pers_upgrades_functions::pers_revive_active() ) { self.revivetexthud.color = ( 0.5, 0.5, 1 ); } + self.revivetexthud settext( &"ZOMBIE_REVIVING" ); self thread maps\mp\zombies\_zm_laststand::check_for_failed_revive( playerbeingrevived ); + while ( self maps\mp\zombies\_zm_laststand::is_reviving( playerbeingrevived ) ) { wait 0.05; + timer += 0.05; + if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() ) { break; @@ -90,26 +128,37 @@ revive_do_revive( playerbeingrevived, revivergun ) { break; } + if ( timer >= revivetime ) { revived = 1; break; } } - if ( isDefined( playerbeingrevived.beingrevivedprogressbar ) ) + + if ( isDefined( playerbeingrevived_player.beingrevivedprogressbar ) ) { - playerbeingrevived.beingrevivedprogressbar destroyelem(); + playerbeingrevived_player.beingrevivedprogressbar destroyelem(); } + + if ( isDefined( playerbeingrevived_player.revive_hud ) ) + { + playerbeingrevived_player.revive_hud settext(""); + } + if ( isDefined( self.reviveprogressbar ) ) { self.reviveprogressbar destroyelem(); } + if ( isDefined( self.revivetexthud ) ) { self.revivetexthud destroy(); } + if ( isDefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) { + } else if ( !revived ) { @@ -118,6 +167,7 @@ revive_do_revive( playerbeingrevived, revivergun ) playerbeingrevived stoprevive( self ); } } + playerbeingrevived.revivetrigger sethintstring( &"ZOMBIE_BUTTON_TO_REVIVE_PLAYER" ); playerbeingrevived.revivetrigger.beingrevived = 0; self notify( "do_revive_ended_normally" ); @@ -127,6 +177,7 @@ revive_do_revive( playerbeingrevived, revivergun ) { playerbeingrevived thread maps\mp\zombies\_zm_laststand::checkforbleedout( self ); } + return revived; }