From d6cbfca12b15cea33bcf3e3076a09c199113d8a6 Mon Sep 17 00:00:00 2001 From: Jbleezy Date: Sun, 23 Jan 2022 21:44:05 -0800 Subject: [PATCH] Grief: add sudden death --- README.md | 1 + scripts/zm/replaced/_zm_perks.gsc | 4 ++ scripts/zm/zgrief/zgrief_reimagined.gsc | 59 +++++++++++++++++++++++-- 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 04231f25..e83cd6c6 100644 --- a/README.md +++ b/README.md @@ -395,6 +395,7 @@ * Teams win rounds by getting all enemy players down * First team to win 3 rounds wins the game * Tie round if both teams die within 5 seconds of eachother +* Sudden death after 5 minute round (all players lose 100 health) * Unlimited zombies * 2500 health zombies * 0.5 second zombie spawn rate diff --git a/scripts/zm/replaced/_zm_perks.gsc b/scripts/zm/replaced/_zm_perks.gsc index de2b80e6..43a96814 100644 --- a/scripts/zm/replaced/_zm_perks.gsc +++ b/scripts/zm/replaced/_zm_perks.gsc @@ -234,6 +234,10 @@ perk_set_max_health_if_jugg( perk, set_premaxhealth, clamp_health_to_max_health { max_total_health += level.pers_jugg_upgrade_health_bonus; } + if ( is_true( level.sudden_death ) && isDefined( level.sudden_death_health_loss ) ) + { + max_total_health -= level.sudden_death_health_loss; + } missinghealth = self.maxhealth - self.health; self setmaxhealth( max_total_health ); self.health -= missinghealth; diff --git a/scripts/zm/zgrief/zgrief_reimagined.gsc b/scripts/zm/zgrief/zgrief_reimagined.gsc index e5b0371d..7f37caee 100644 --- a/scripts/zm/zgrief/zgrief_reimagined.gsc +++ b/scripts/zm/zgrief/zgrief_reimagined.gsc @@ -57,6 +57,7 @@ init() level thread set_grief_vars(); level thread powerup_hud_overlay(); level thread round_start_wait(5, true); + level thread sudden_death(); level thread unlimited_zombies(); level thread remove_round_number(); level thread remove_status_icons_on_end_game(); @@ -1115,6 +1116,10 @@ show_grief_hud_msg( msg, msg_parm, offset, delay ) { self notify( "show_grief_hud_msg" ); } + else + { + self notify( "show_grief_hud_msg2" ); + } self endon( "disconnect" ); @@ -1144,7 +1149,7 @@ show_grief_hud_msg( msg, msg_parm, offset, delay ) zgrief_hudmsg endon( "death" ); - zgrief_hudmsg thread show_grief_hud_msg_cleanup(self); + zgrief_hudmsg thread show_grief_hud_msg_cleanup(self, delay); while ( isDefined( level.hostmigrationtimer ) ) { @@ -1185,14 +1190,21 @@ show_grief_hud_msg( msg, msg_parm, offset, delay ) } } -show_grief_hud_msg_cleanup(player) +show_grief_hud_msg_cleanup(player, delay) { self endon( "death" ); self thread show_grief_hud_msg_cleanup_restart_round(); self thread show_grief_hud_msg_cleanup_end_game(); - player waittill( "show_grief_hud_msg" ); + if(!isDefined(delay)) + { + player waittill( "show_grief_hud_msg" ); + } + else + { + player waittill( "show_grief_hud_msg2" ); + } if ( isDefined( self ) ) { @@ -1681,6 +1693,47 @@ grief_laststand_weapons_return() return 0; } +sudden_death() +{ + level endon("end_game"); + + level.sudden_death = 0; + level.sudden_death_time = 300; + level.sudden_death_health_loss = 100; + + while(1) + { + level waittill("restart_round_start"); + + level.sudden_death = 0; + + time = level waittill_notify_or_timeout("restart_round", level.sudden_death_time); + + if(!isDefined(time)) + { + continue; + } + + level.sudden_death = 1; + + players = get_players(); + foreach(player in players) + { + player thread show_grief_hud_msg( "Sudden Death!" ); + player thread show_grief_hud_msg( "Lose " + level.sudden_death_health_loss + " Health!", undefined, 30, 1 ); + + health = player.health; + player setMaxHealth(player.maxhealth - level.sudden_death_health_loss); + if(player.health > health) + { + player.health = health; + } + + player.premaxhealth -= level.sudden_death_health_loss; + } + } +} + unlimited_zombies() { while(1)