diff --git a/README.md b/README.md index bd32b196..ab4b8ed9 100644 --- a/README.md +++ b/README.md @@ -508,14 +508,14 @@ ### Mob of the Dead * 1 afterlife max in solo * Entering afterlife no longer takes 2 additional seconds if the player had Electric Cherry -* Acid Trap kills on any round (normally stops killing after round 158 on PC) -* Tower Trap kills on any round in 1 shot -* Upgraded Tower Trap kills on any round in 1-2 shots -* Upgraded Tower Trap stays upgraded until the end of the round * Plane parts are shared in coop * Plane parts must be all acquired to craft * Plane no longer has to be refueled after first use * Key no longer shows on HUD +* Acid Trap kills on any round (normally stops killing after round 158 on PC) +* Tower Trap kills on any round in 1 shot +* Upgraded Tower Trap kills on any round in 1-2 shots +* Upgraded Tower Trap stays upgraded until the end of the round * Players no longer respawn in the Acid Trap * Zombies spawn in the Docks zone when in the Docks Gates zone * Zombies spawn in the Docks Gates zone when in the Docks zone diff --git a/scripts/zm/replaced/_zm_afterlife.gsc b/scripts/zm/replaced/_zm_afterlife.gsc index 004b2a08..4af35480 100644 --- a/scripts/zm/replaced/_zm_afterlife.gsc +++ b/scripts/zm/replaced/_zm_afterlife.gsc @@ -161,4 +161,144 @@ afterlife_fake_death() playfx( level._effect["afterlife_enter"], self.origin ); self freezecontrols( 1 ); +} + +afterlife_revive_do_revive( playerbeingrevived, revivergun ) +{ + assert( self is_reviving_afterlife( playerbeingrevived ) ); + revivetime = 3; + playloop = 0; + + if ( isdefined( self.afterlife ) && self.afterlife ) + { + playloop = 1; + revivetime = 1; + } + + 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 ( isplayer( playerbeingrevived ) ) + { + playerbeingrevived startrevive( self ); + } + + if ( !isDefined( playerbeingrevived.beingrevivedprogressbar ) ) + { + 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(); + } + + 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 revive_clean_up_on_gameover(); + 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 ); + 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.0 ); + + self.revivetexthud settext( &"GAME_REVIVING" ); + self thread check_for_failed_revive( playerbeingrevived ); + e_fx = spawn( "script_model", playerbeingrevived.revivetrigger.origin ); + e_fx setmodel( "tag_origin" ); + e_fx thread revive_fx_clean_up_on_disconnect( playerbeingrevived ); + playfxontag( level._effect["afterlife_leave"], e_fx, "tag_origin" ); + + if ( isdefined( playloop ) && playloop ) + e_fx playloopsound( "zmb_afterlife_reviving", 0.05 ); + + while ( self is_reviving_afterlife( playerbeingrevived ) ) + { + wait 0.05; + timer += 0.05; + + if ( self player_is_in_laststand() ) + break; + + if ( isdefined( playerbeingrevived.revivetrigger.auto_revive ) && playerbeingrevived.revivetrigger.auto_revive == 1 ) + break; + + if ( timer >= revivetime ) + { + revived = 1; + break; + } + } + + e_fx delete(); + + if ( isDefined( playerbeingrevived.beingrevivedprogressbar ) ) + { + playerbeingrevived.beingrevivedprogressbar destroyelem(); + } + + 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 ) + { + if ( isplayer( playerbeingrevived ) ) + playerbeingrevived stoprevive( self ); + } + + playerbeingrevived.revivetrigger sethintstring( &"GAME_BUTTON_TO_REVIVE_PLAYER" ); + playerbeingrevived.revivetrigger.beingrevived = 0; + self notify( "do_revive_ended_normally" ); + self.is_reviving_any--; + + if ( !revived ) + playerbeingrevived thread checkforbleedout( self ); + + return revived; } \ No newline at end of file diff --git a/scripts/zm/replaced/_zm_laststand.gsc b/scripts/zm/replaced/_zm_laststand.gsc index b0f1c38d..3c0f85a0 100644 --- a/scripts/zm/replaced/_zm_laststand.gsc +++ b/scripts/zm/replaced/_zm_laststand.gsc @@ -154,7 +154,7 @@ laststand_clean_up_on_disconnect( playerbeingrevived, revivergun ) self maps\mp\zombies\_zm_laststand::revive_give_back_weapons( revivergun ); } -laststand_clean_up_reviving_any( playerbeingrevived ) //checked changed to match cerberus output +laststand_clean_up_reviving_any( playerbeingrevived ) { self endon( "do_revive_ended_normally" ); diff --git a/scripts/zm/zm_prison/zm_prison_reimagined.gsc b/scripts/zm/zm_prison/zm_prison_reimagined.gsc index 65f3acfc..85cfd173 100644 --- a/scripts/zm/zm_prison/zm_prison_reimagined.gsc +++ b/scripts/zm/zm_prison/zm_prison_reimagined.gsc @@ -31,6 +31,7 @@ main() replaceFunc(maps\mp\zm_alcatraz_weap_quest::grief_soul_catcher_state_manager, scripts\zm\replaced\zm_alcatraz_weap_quest::grief_soul_catcher_state_manager); replaceFunc(maps\mp\zombies\_zm_afterlife::afterlife_add, scripts\zm\replaced\_zm_afterlife::afterlife_add); replaceFunc(maps\mp\zombies\_zm_afterlife::afterlife_laststand, scripts\zm\replaced\_zm_afterlife::afterlife_laststand); + replaceFunc(maps\mp\zombies\_zm_afterlife::afterlife_revive_do_revive, scripts\zm\replaced\_zm_afterlife::afterlife_revive_do_revive); replaceFunc(maps\mp\zombies\_zm_ai_brutus::init, scripts\zm\replaced\_zm_ai_brutus::init); replaceFunc(maps\mp\zombies\_zm_ai_brutus::get_brutus_spawn_pos_val, scripts\zm\replaced\_zm_ai_brutus::get_brutus_spawn_pos_val); replaceFunc(maps\mp\zombies\_zm_ai_brutus::brutus_spawn, scripts\zm\replaced\_zm_ai_brutus::brutus_spawn);