From 80f2df809f06ea91fa5ec2f0ca40c955ed705745 Mon Sep 17 00:00:00 2001 From: ALIEN31ITA Date: Thu, 9 Jul 2026 22:41:15 +0200 Subject: [PATCH 1/2] First Version Same Box size as the Hadouken taunt. Extinguish your teammates, slightly push back your enemies. --- src/game/server/tf/tf_player.cpp | 49 ++++++++++++++++++++++++++++ src/game/shared/tf/tf_shareddefs.cpp | 1 + src/game/shared/tf/tf_shareddefs.h | 1 + 3 files changed, 51 insertions(+) diff --git a/src/game/server/tf/tf_player.cpp b/src/game/server/tf/tf_player.cpp index d29e346def0..fef70a58fe2 100644 --- a/src/game/server/tf/tf_player.cpp +++ b/src/game/server/tf/tf_player.cpp @@ -19155,6 +19155,55 @@ void CTFPlayer::DoTauntAttack( void ) } } } + else if (iTauntAttack == TAUNTATK_PYRO_ECON_EXTINGUISHER) + { + // Pyro "Friendly Fire" attack + Vector vecForward; + AngleVectors(QAngle(0, m_angEyeAngles[YAW], 0), &vecForward); + Vector vecCenter = WorldSpaceCenter() + vecForward * 64; + Vector vecSize = Vector(24, 24, 24); + CBaseEntity* pList[256]; + int count = UTIL_EntitiesInBox(pList, 256, vecCenter - vecSize, vecCenter + vecSize, FL_CLIENT); + if (count) + { + for (int i = 0; i < count; i++) + { + if (pList[i] == this) + continue; + + if (FVisible(pList[i], MASK_SOLID) == false) + continue; + + //Extinguish our friends, push back our enemies. + if (pList[i]->GetTeamNumber() == GetTeamNumber()) + { + //Ignore non burning teammates + if (!ToTFPlayer(pList[i])->m_Shared.InCond(TF_COND_BURNING)) + return; + + Vector vecPos = WorldSpaceCenter(); + vecPos += (pList[i]->WorldSpaceCenter() - vecPos) * 0.75; + + //Offset angle to match left hook. + AngleVectors(QAngle(-45, m_angEyeAngles[YAW] - 35, 0), &vecForward); + ToTFPlayer(pList[i])->m_Shared.RemoveCond(TF_COND_BURNING); + pList[i]->EmitSound("TFPlayer.FlameOut"); + } + else + { + Vector vecDir = WorldSpaceCenter() - pList[i]->WorldSpaceCenter(); + VectorNormalize(vecDir); + + //Adjust the values?... + float flForce = 175; + Vector vecForce = vecDir * -flForce; + vecForce.z += 230; + + ToTFPlayer(pList[i])->ApplyGenericPushbackImpulse(vecForce, this); + } + } + } + } // Particle Being played in VCD instead //else if ( iTauntAttack == TAUNTATK_FLIP_LAND_PARTICLE ) diff --git a/src/game/shared/tf/tf_shareddefs.cpp b/src/game/shared/tf/tf_shareddefs.cpp index bd54279bc5c..a5636d5a2dc 100644 --- a/src/game/shared/tf/tf_shareddefs.cpp +++ b/src/game/shared/tf/tf_shareddefs.cpp @@ -1055,6 +1055,7 @@ static const char* taunt_attack_name[] = "TAUNTATK_MEDIC_HEROIC_TAUNT", "TAUNTATK_PYRO_GASBLAST", "TAUNTATK_ENGINEER_TRICKSHOT", + "TAUNTATK_PYRO_ECON_EXTINGUISHER", // // INSERT NEW ITEMS HERE TO AVOID BREAKING DEMOS diff --git a/src/game/shared/tf/tf_shareddefs.h b/src/game/shared/tf/tf_shareddefs.h index f3b5a91a61f..adf02e70010 100644 --- a/src/game/shared/tf/tf_shareddefs.h +++ b/src/game/shared/tf/tf_shareddefs.h @@ -967,6 +967,7 @@ enum taunt_attack_t TAUNTATK_MEDIC_HEROIC_TAUNT, TAUNTATK_PYRO_GASBLAST, TAUNTATK_ENGINEER_TRICKSHOT, + TAUNTATK_PYRO_ECON_EXTINGUISHER, // // INSERT NEW ITEMS HERE TO AVOID BREAKING DEMOS From 1b808f176715908c26425f422b13a6fb43583d91 Mon Sep 17 00:00:00 2001 From: ALIEN31ITA Date: Fri, 10 Jul 2026 03:00:20 +0200 Subject: [PATCH 2/2] Added Bonus points rules from the Flamethrower. --- src/game/server/tf/tf_player.cpp | 39 ++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 7 deletions(-) diff --git a/src/game/server/tf/tf_player.cpp b/src/game/server/tf/tf_player.cpp index fef70a58fe2..be51be898c2 100644 --- a/src/game/server/tf/tf_player.cpp +++ b/src/game/server/tf/tf_player.cpp @@ -19175,23 +19175,48 @@ void CTFPlayer::DoTauntAttack( void ) continue; //Extinguish our friends, push back our enemies. - if (pList[i]->GetTeamNumber() == GetTeamNumber()) + CTFPlayer* pAffectedPlayers = ToTFPlayer(pList[i]); + if (pAffectedPlayers->GetTeamNumber() == GetTeamNumber()) { //Ignore non burning teammates - if (!ToTFPlayer(pList[i])->m_Shared.InCond(TF_COND_BURNING)) + if (!pAffectedPlayers->m_Shared.InCond(TF_COND_BURNING)) return; Vector vecPos = WorldSpaceCenter(); - vecPos += (pList[i]->WorldSpaceCenter() - vecPos) * 0.75; + vecPos += (pAffectedPlayers->WorldSpaceCenter() - vecPos) * 0.75; //Offset angle to match left hook. AngleVectors(QAngle(-45, m_angEyeAngles[YAW] - 35, 0), &vecForward); - ToTFPlayer(pList[i])->m_Shared.RemoveCond(TF_COND_BURNING); - pList[i]->EmitSound("TFPlayer.FlameOut"); + pAffectedPlayers->m_Shared.RemoveCond(TF_COND_BURNING); + pAffectedPlayers->EmitSound("TFPlayer.FlameOut"); + + //Same rules from the Flamethrower + if (ShouldGetBonusPointsForExtinguishEvent(pAffectedPlayers->GetUserID())) + { + CTF_GameStats.Event_PlayerAwardBonusPoints(this, pAffectedPlayers, 10); + } + + CRecipientFilter involved_filter; + involved_filter.AddRecipient(this); + involved_filter.AddRecipient(pAffectedPlayers); + + UserMessageBegin(involved_filter, "PlayerExtinguished"); + WRITE_BYTE(entindex()); + WRITE_BYTE(pAffectedPlayers->entindex()); + MessageEnd(); + + IGameEvent* event = gameeventmanager->CreateEvent("player_extinguished"); + if (event) + { + event->SetInt("victim", pAffectedPlayers->entindex()); + event->SetInt("healer", entindex()); + + gameeventmanager->FireEvent(event, true); + } } else { - Vector vecDir = WorldSpaceCenter() - pList[i]->WorldSpaceCenter(); + Vector vecDir = WorldSpaceCenter() - pAffectedPlayers->WorldSpaceCenter(); VectorNormalize(vecDir); //Adjust the values?... @@ -19199,7 +19224,7 @@ void CTFPlayer::DoTauntAttack( void ) Vector vecForce = vecDir * -flForce; vecForce.z += 230; - ToTFPlayer(pList[i])->ApplyGenericPushbackImpulse(vecForce, this); + pAffectedPlayers->ApplyGenericPushbackImpulse(vecForce, this); } } }