From ef8e240ee1dfded6e177b018092b90a8b09d4707 Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Wed, 29 Apr 2026 21:04:57 -0500 Subject: [PATCH 1/9] PHD Flopper fix https://github.com/nzp-team/nzportable/issues/1363 Fix ready for testing --- source/server/gamemodes/core.qc | 2 ++ source/server/gamemodes/gun_game.qc | 22 ++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/source/server/gamemodes/core.qc b/source/server/gamemodes/core.qc index b865d86..2dda5a4 100644 --- a/source/server/gamemodes/core.qc +++ b/source/server/gamemodes/core.qc @@ -152,6 +152,7 @@ float(float current_earned_score, float damage_style) Gamemode_ScoreForDamage = { switch(current_gamemode) { case GAMEMODE_FESTIVE: return Gamemode_Festive_ScoreForDamage(current_earned_score, damage_style); + case GAMEMODE_GUNGAME: return Gamemode_GunGame_ScoreForDamage(current_earned_score, damage_style); default: break; } @@ -203,6 +204,7 @@ void(entity attacker, float death_style) Gamemode_DieHandler = { switch(current_gamemode) { case GAMEMODE_STICKSNSTONES: Gamemode_Sticks_DieHandler(attacker, death_style); break; + case GAMEMODE_GUNGAME: Gamemode_GunGame_DieHandler(attacker, death_style); break; default: break; } }; diff --git a/source/server/gamemodes/gun_game.qc b/source/server/gamemodes/gun_game.qc index b3efe44..2b8cb82 100644 --- a/source/server/gamemodes/gun_game.qc +++ b/source/server/gamemodes/gun_game.qc @@ -363,4 +363,26 @@ void(float score_earned) Gamemode_GunGame_PlayerAddScore = } } } +}; + +float(float current_earned_score, float damage_style) Gamemode_GunGame_ScoreForDamage = +{ + + // possible fix for PHD Flopper give points toward your weapon + switch(damage_style) { + case DMG_TYPE_GRENADE: + return 0; + } + + return current_earned_score; +}; + +void(entity attacker, float death_style) Gamemode_GunGame_DieHandler = +{ + + // possible fix for PHD Flopper give points toward your weapon + switch(death_style) { + case DMG_TYPE_GRENADE: + return 0; + } }; \ No newline at end of file From 7502ed3eb8356bef4d52895529392d8de88952ae Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Wed, 29 Apr 2026 21:07:59 -0500 Subject: [PATCH 2/9] Update gun_game.qc Fixed comment typo --- source/server/gamemodes/gun_game.qc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/server/gamemodes/gun_game.qc b/source/server/gamemodes/gun_game.qc index 2b8cb82..a14204e 100644 --- a/source/server/gamemodes/gun_game.qc +++ b/source/server/gamemodes/gun_game.qc @@ -368,7 +368,7 @@ void(float score_earned) Gamemode_GunGame_PlayerAddScore = float(float current_earned_score, float damage_style) Gamemode_GunGame_ScoreForDamage = { - // possible fix for PHD Flopper give points toward your weapon + // possible fix for PHD Flopper giving points toward your weapon switch(damage_style) { case DMG_TYPE_GRENADE: return 0; @@ -380,7 +380,7 @@ float(float current_earned_score, float damage_style) Gamemode_GunGame_ScoreForD void(entity attacker, float death_style) Gamemode_GunGame_DieHandler = { - // possible fix for PHD Flopper give points toward your weapon + // possible fix for PHD Flopper giving points toward your weapon switch(death_style) { case DMG_TYPE_GRENADE: return 0; From 87a0928461a6b6fc3d7890d5919f49124949b306 Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Wed, 29 Apr 2026 21:40:49 -0500 Subject: [PATCH 3/9] Changed ray gun damage type --- source/server/damage.qc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/server/damage.qc b/source/server/damage.qc index ebe0624..94294e0 100644 --- a/source/server/damage.qc +++ b/source/server/damage.qc @@ -576,7 +576,7 @@ void(entity inflictor, entity attacker, float damage2, float mindamage, float ra //final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); //bprint(PRINT_HIGH, strcat("damage: ", ftos(final_damage), "\n")); final_damage = damage2; - damage_style = DMG_TYPE_GRENADE; + damage_style = DMG_TYPE_EXPLOSIVE; } else if (inflictor.classname == "player") { // phd flopper. final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); From dd7f2111e7f5a690cd5939feb03a65d75a10c89e Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Wed, 29 Apr 2026 21:43:12 -0500 Subject: [PATCH 4/9] Chnaged the damage type again --- source/server/damage.qc | 2 +- source/server/gamemodes/gun_game.qc | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/source/server/damage.qc b/source/server/damage.qc index 94294e0..7e6659c 100644 --- a/source/server/damage.qc +++ b/source/server/damage.qc @@ -576,7 +576,7 @@ void(entity inflictor, entity attacker, float damage2, float mindamage, float ra //final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); //bprint(PRINT_HIGH, strcat("damage: ", ftos(final_damage), "\n")); final_damage = damage2; - damage_style = DMG_TYPE_EXPLOSIVE; + damage_style = DMG_TYPE_OTHER; } else if (inflictor.classname == "player") { // phd flopper. final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); diff --git a/source/server/gamemodes/gun_game.qc b/source/server/gamemodes/gun_game.qc index a14204e..0a41286 100644 --- a/source/server/gamemodes/gun_game.qc +++ b/source/server/gamemodes/gun_game.qc @@ -370,7 +370,7 @@ float(float current_earned_score, float damage_style) Gamemode_GunGame_ScoreForD // possible fix for PHD Flopper giving points toward your weapon switch(damage_style) { - case DMG_TYPE_GRENADE: + case DMG_TYPE_OTHER: return 0; } @@ -382,7 +382,7 @@ void(entity attacker, float death_style) Gamemode_GunGame_DieHandler = // possible fix for PHD Flopper giving points toward your weapon switch(death_style) { - case DMG_TYPE_GRENADE: + case DMG_TYPE_OTHER: return 0; } }; \ No newline at end of file From 6ea160512fd1893d4ace906779b7c9254010e3ab Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Wed, 29 Apr 2026 21:45:55 -0500 Subject: [PATCH 5/9] Changed the perk damage type Changed the perk damage type to other for easier detection --- source/server/damage.qc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/server/damage.qc b/source/server/damage.qc index 7e6659c..7fa20d0 100644 --- a/source/server/damage.qc +++ b/source/server/damage.qc @@ -576,11 +576,11 @@ void(entity inflictor, entity attacker, float damage2, float mindamage, float ra //final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); //bprint(PRINT_HIGH, strcat("damage: ", ftos(final_damage), "\n")); final_damage = damage2; - damage_style = DMG_TYPE_OTHER; + damage_style = DMG_TYPE_GRENADE; } else if (inflictor.classname == "player") { // phd flopper. final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); - damage_style = DMG_TYPE_GRENADE; + damage_style = DMG_TYPE_OTHER; } else { r = rounds; multi = 1.07; From 13e8cff9ac297ff46640d37e21d1a60c8416164a Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Thu, 30 Apr 2026 13:20:03 -0500 Subject: [PATCH 6/9] New PhD Flopper damage type Says on the tin, implemented a new damage type for to fix this bug without compatibility problems with other weapons --- source/server/damage.qc | 6 +++++- source/server/gamemodes/core.qc | 1 - source/server/gamemodes/gun_game.qc | 14 +------------- source/server/weapons/weapon_core.qc | 6 +++--- source/shared/shared_defs.qc | 1 + 5 files changed, 10 insertions(+), 18 deletions(-) diff --git a/source/server/damage.qc b/source/server/damage.qc index 7fa20d0..43d79c7 100644 --- a/source/server/damage.qc +++ b/source/server/damage.qc @@ -39,6 +39,7 @@ float(float current_health_delay, float current_perks) Gamemode_GetHealthRegenDe #define DMG_SCORE_GRENADE 50 // Death by Grenade. #define DMG_SCORE_EXPLOSIVE 60 // Death by Explosive Weapon. #define DMG_SCORE_TESLA 50 // Death by Tesla. +#define DMG_SCORE_FLOPPER 50 // Death by PhD Flopper #define DMG_SCORE_STDDAMAGE 10 // Standard Damage reward. void() Barrel_Hit; @@ -274,6 +275,9 @@ void(entity attacker, float d_style) DieHandler = case DMG_TYPE_UPPERTORSO: points_earned = DMG_SCORE_UPPERTORSO; break; + case DMG_TYPE_FLOPPER: + points_earned = DMG_SCORE_FLOPPER; + break; default: if (cvar("developer")) bprint(PRINT_HIGH, "DieHandler: Received invalid style\n"); @@ -580,7 +584,7 @@ void(entity inflictor, entity attacker, float damage2, float mindamage, float ra } else if (inflictor.classname == "player") { // phd flopper. final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); - damage_style = DMG_TYPE_OTHER; + damage_style = DMG_TYPE_FLOPPER; } else { r = rounds; multi = 1.07; diff --git a/source/server/gamemodes/core.qc b/source/server/gamemodes/core.qc index 2dda5a4..62547ca 100644 --- a/source/server/gamemodes/core.qc +++ b/source/server/gamemodes/core.qc @@ -152,7 +152,6 @@ float(float current_earned_score, float damage_style) Gamemode_ScoreForDamage = { switch(current_gamemode) { case GAMEMODE_FESTIVE: return Gamemode_Festive_ScoreForDamage(current_earned_score, damage_style); - case GAMEMODE_GUNGAME: return Gamemode_GunGame_ScoreForDamage(current_earned_score, damage_style); default: break; } diff --git a/source/server/gamemodes/gun_game.qc b/source/server/gamemodes/gun_game.qc index 0a41286..52f414d 100644 --- a/source/server/gamemodes/gun_game.qc +++ b/source/server/gamemodes/gun_game.qc @@ -365,24 +365,12 @@ void(float score_earned) Gamemode_GunGame_PlayerAddScore = } }; -float(float current_earned_score, float damage_style) Gamemode_GunGame_ScoreForDamage = -{ - - // possible fix for PHD Flopper giving points toward your weapon - switch(damage_style) { - case DMG_TYPE_OTHER: - return 0; - } - - return current_earned_score; -}; - void(entity attacker, float death_style) Gamemode_GunGame_DieHandler = { // possible fix for PHD Flopper giving points toward your weapon switch(death_style) { - case DMG_TYPE_OTHER: + case DMG_TYPE_FLOPPER: return 0; } }; \ No newline at end of file diff --git a/source/server/weapons/weapon_core.qc b/source/server/weapons/weapon_core.qc index 2d51aae..430d1f4 100644 --- a/source/server/weapons/weapon_core.qc +++ b/source/server/weapons/weapon_core.qc @@ -1841,8 +1841,8 @@ void() CheckPlayer = traceline(self.origin, self.origin + (v_up * -40), 0, self); if (trace_ent.classname == "player") { - DamageHandler(self, trace_ent, 100000, DMG_TYPE_OTHER); - DamageHandler(trace_ent, self, 100000, DMG_TYPE_OTHER); + DamageHandler(self, trace_ent, 100000, DMG_TYPE_FLOPPER); + DamageHandler(trace_ent, self, 100000, DMG_TYPE_FLOPPER); } } @@ -1874,7 +1874,7 @@ void() CheckPlayer = float damage = over * 0.68; if (damage > 98) damage = 98; - DamageHandler (self, other, damage, DMG_TYPE_OTHER); + DamageHandler (self, other, damage, DMG_TYPE_FLOPPER); if (self.health <= 5) GiveAchievement(7, self); diff --git a/source/shared/shared_defs.qc b/source/shared/shared_defs.qc index ef2d092..d2a0cd2 100644 --- a/source/shared/shared_defs.qc +++ b/source/shared/shared_defs.qc @@ -301,6 +301,7 @@ float map_compatibility_mode; #define DMG_TYPE_ZOMBIESWIPE 9 // Zombie-inflicted: Any attack on Player #define DMG_TYPE_ELECTRICTRAP 10 // Trap-inflicted: Electric trap damage #define DMG_TYPE_OTHER 11 // For use with misc. damage infliction +#define DMG_TYPE_FLOPPER 12 // Player-inflicted: PhD Flopper explosion //Perk types #define P_JUG 1 From 291fe73dad359d0b1a7f5b2afe45a2388ad23ec7 Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Sat, 2 May 2026 09:13:13 -0500 Subject: [PATCH 7/9] Implemented requested changes --- source/server/gamemodes/festive.qc | 2 ++ source/server/tests/test_score.qc | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/source/server/gamemodes/festive.qc b/source/server/gamemodes/festive.qc index 1ccbd2f..5a24991 100644 --- a/source/server/gamemodes/festive.qc +++ b/source/server/gamemodes/festive.qc @@ -215,6 +215,8 @@ float(float current_earned_score, float damage_style) Gamemode_Festive_ScoreForD case DMG_TYPE_GRENADE: case DMG_TYPE_TESLA: return 90; + case DMG_TYPE_FLOPPER: + return 90; } return current_earned_score; diff --git a/source/server/tests/test_score.qc b/source/server/tests/test_score.qc index 05d7c29..0894131 100644 --- a/source/server/tests/test_score.qc +++ b/source/server/tests/test_score.qc @@ -55,7 +55,8 @@ void() Test_AddScore_DamageTypes = DMG_TYPE_GRENADE, DMG_TYPE_EXPLOSIVE, DMG_TYPE_LOWERTORSO, - DMG_TYPE_UPPERTORSO + DMG_TYPE_UPPERTORSO, + DMG_TYPE_FLOPPER }; float scores[] = { @@ -66,7 +67,8 @@ void() Test_AddScore_DamageTypes = DMG_SCORE_GRENADE, DMG_SCORE_EXPLOSIVE, DMG_SCORE_LOWERTORSO, - DMG_SCORE_UPPERTORSO + DMG_SCORE_UPPERTORSO, + DMG_SCORE_FLOPPER }; for (float i = 0; i < styles.length; i++) { From 364c51b7310b3ba5e467efe254ddd9c0ed7017a8 Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Sat, 2 May 2026 19:49:08 -0500 Subject: [PATCH 8/9] Implemented unit tests --- source/server/tests/test_score.qc | 36 +++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/source/server/tests/test_score.qc b/source/server/tests/test_score.qc index 0894131..32aadec 100644 --- a/source/server/tests/test_score.qc +++ b/source/server/tests/test_score.qc @@ -112,4 +112,40 @@ void() Test_AddScore_MysteryBoxLeave = remove(mystery_box_ent); remove(owner_ent); +}; + + +// +// Test_AddScore_PhD_GunGame() +// Asserts we are giving correct amount +// of score for every AI damage type. +// Should return 0 +// (https://github.com/nzp-team/nzportable/issues/1363) +// +void() Test_AddScore_PhD_GunGame = +{ + float score_pre = self.points; + + Gamemode_GunGame_DieHandler(self, DMG_TYPE_FLOPPER); + + float score_post = self.points; + float score_delta = score_post - score_pre; + + + + Test_Assert((score_delta == 0), sprintf("Unexpected score earned, expected 0 but got [%d]!", score_delta)); +}; + +// +// Test_AddScore_PhD_Festive() +// Asserts we are giving correct amount +// of score for every AI damage type. +// Should return 90 +// (https://github.com/nzp-team/nzportable/issues/1363) +// +void() Test_AddScore_PhD_Festive = +{ + float pointsEarned = Gamemode_Festive_ScoreForDamage(DMG_SCORE_FLOPPER, DMG_TYPE_FLOPPER); + + Test_Assert((pointsEarned == 90), sprintf("Unexpected score earned, expected 90 but got [%d]!", pointsEarned)); }; \ No newline at end of file From 04db2d9da747089221d096ec07f81dc38d19f32a Mon Sep 17 00:00:00 2001 From: Shawn Clarke Date: Sat, 2 May 2026 19:56:29 -0500 Subject: [PATCH 9/9] Changed the comment For clarity's sake --- source/server/tests/test_score.qc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/server/tests/test_score.qc b/source/server/tests/test_score.qc index 32aadec..62a411e 100644 --- a/source/server/tests/test_score.qc +++ b/source/server/tests/test_score.qc @@ -118,7 +118,7 @@ void() Test_AddScore_MysteryBoxLeave = // // Test_AddScore_PhD_GunGame() // Asserts we are giving correct amount -// of score for every AI damage type. +// of score for PhD Flopper in gun game // Should return 0 // (https://github.com/nzp-team/nzportable/issues/1363) // @@ -139,7 +139,7 @@ void() Test_AddScore_PhD_GunGame = // // Test_AddScore_PhD_Festive() // Asserts we are giving correct amount -// of score for every AI damage type. +// of score for PhD Flopper in Festive // Should return 90 // (https://github.com/nzp-team/nzportable/issues/1363) //