From b8d747612fe6d72726213c7745136fd88ec0685b Mon Sep 17 00:00:00 2001 From: DESTROYGIRL <170364626+DESTROYGIRL@users.noreply.github.com> Date: Tue, 31 Mar 2026 20:48:45 +0100 Subject: [PATCH 1/4] initial --- src/game/client/neo/ui/neo_hud_round_state.cpp | 5 +++++ src/game/server/neo/neo_player.cpp | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/game/client/neo/ui/neo_hud_round_state.cpp b/src/game/client/neo/ui/neo_hud_round_state.cpp index 7543dc33a..aec87e717 100644 --- a/src/game/client/neo/ui/neo_hud_round_state.cpp +++ b/src/game/client/neo/ui/neo_hud_round_state.cpp @@ -705,6 +705,11 @@ void CNEOHud_RoundState::DrawNeoHudElement() void CNEOHud_RoundState::DrawPlayerList() { + if (!NEORules()->IsTeamplay()) + { + return; + } + ConVarRef cl_neo_bot_cmdr_enable_ref("sv_neo_bot_cmdr_enable"); Assert(cl_neo_bot_cmdr_enable_ref.IsValid()); if (cl_neo_bot_cmdr_enable_ref.IsValid() && cl_neo_bot_cmdr_enable_ref.GetBool()) diff --git a/src/game/server/neo/neo_player.cpp b/src/game/server/neo/neo_player.cpp index d75a80409..a7139ca40 100644 --- a/src/game/server/neo/neo_player.cpp +++ b/src/game/server/neo/neo_player.cpp @@ -3859,7 +3859,7 @@ int CNEO_Player::ShouldTransmit(const CCheckTransmitInfo* pInfo) #ifdef GLOWS_ENABLE otherNeoPlayer->IsDead() || #endif - GetTeamNumber() == otherNeoPlayer->GetTeamNumber()) + (GetTeamNumber() == otherNeoPlayer->GetTeamNumber() && NEORules()->IsTeamplay())) { return FL_EDICT_ALWAYS; } From 919a4fcf85b336cdbcfd3b95e0a74e20920d2d0a Mon Sep 17 00:00:00 2001 From: DESTROYGIRL <170364626+DESTROYGIRL@users.noreply.github.com> Date: Tue, 31 Mar 2026 21:22:06 +0100 Subject: [PATCH 2/4] nav_generate fix --- src/game/shared/neo/neo_gamerules.cpp | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/game/shared/neo/neo_gamerules.cpp b/src/game/shared/neo/neo_gamerules.cpp index b891d26b2..24c91215c 100644 --- a/src/game/shared/neo/neo_gamerules.cpp +++ b/src/game/shared/neo/neo_gamerules.cpp @@ -4711,7 +4711,16 @@ const char *CNEORules::GetTeamClantag(const int iTeamNum) const #ifdef GAME_DLL void CNEORules::OnNavMeshLoad(void) { - TheNavMesh->SetPlayerSpawnName("info_player_defender"); + // We need to access the game config directly because the game type might not be set at this stage + auto cfg = GetActiveGameConfig(); + if (!cfg || cfg->m_GameType != NEO_GAME_TYPE_DM) + { + TheNavMesh->SetPlayerSpawnName("info_player_defender"); + } + else + { + TheNavMesh->SetPlayerSpawnName("info_player_deathmatch"); + } } bool CNEORules::IsOfficialMap(void) From fa7732534627e619a114854d9971685e63fc5698 Mon Sep 17 00:00:00 2001 From: DESTROYGIRL <170364626+DESTROYGIRL@users.noreply.github.com> Date: Tue, 31 Mar 2026 22:42:23 +0100 Subject: [PATCH 3/4] classify deathmatch spawn as a neo spawn --- game/bin/rebuild.fgd | 23 ++++--------------- src/game/server/subs.cpp | 14 +++++++++++ src/game/shared/neo/neo_player_spawnpoint.cpp | 2 +- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/game/bin/rebuild.fgd b/game/bin/rebuild.fgd index 2b3ca6a12..dcee4f63b 100644 --- a/game/bin/rebuild.fgd +++ b/game/bin/rebuild.fgd @@ -9,35 +9,20 @@ ] ] -@PointClass base(Targetname, PlayerClass, Angles) studio("models/editor/attacker_start.mdl") = info_player_attacker : - "This entity marks the start point for attackers." +@BaseClass base(Targetname, PlayerClass, Angles, EnableDisable) = NeoSpawnpointClass [ StartDisabled(choices) : "Start Disabled" : 0 = [ 0 : "No" 1 : "Yes" ] - - input Enable(void) : "Turn spawnpoint on." - input Disable(void) : "Turn spawnpoint off." output OnPlayerSpawn(void) : "Fires when a player spawns from this spawn point." ] -@PointClass base(Targetname, PlayerClass, Angles) studio("models/editor/defender_start.mdl") = info_player_defender : - "This entity marks the start point for defenders." -[ - StartDisabled(choices) : "Start Disabled" : 0 = - [ - 0 : "No" - 1 : "Yes" - ] - - input Enable(void) : "Turn spawnpoint on." - input Disable(void) : "Turn spawnpoint off." - - output OnPlayerSpawn(void) : "Fires when a player spawns from this spawn point." -] +@PointClass base(NeoSpawnpointClass) studio("models/editor/playerstart.mdl") = info_player_deathmatch : "Deathmatch Spawn" [] +@PointClass base(NeoSpawnpointClass) studio("models/editor/attacker_start.mdl") = info_player_attacker : "This entity marks the start point for attackers." [] +@PointClass base(NeoSpawnpointClass) studio("models/editor/defender_start.mdl") = info_player_defender : "This entity marks the start point for defenders." [] @PointClass base(Targetname) iconsprite("vgui/hud/star.vmt") = neo_bloom_controller : "An entity that lets you tweak bloom for your map." [ diff --git a/src/game/server/subs.cpp b/src/game/server/subs.cpp index 46a1570a4..92e27d7e0 100644 --- a/src/game/server/subs.cpp +++ b/src/game/server/subs.cpp @@ -13,6 +13,7 @@ #ifdef NEO #include "weapon_neobasecombatweapon.h" +#include "neo_player_spawnpoint.h" #endif // memdbgon must be the last include file in a .cpp file!!! @@ -42,10 +43,23 @@ void CNullEntity::Spawn( void ) } LINK_ENTITY_TO_CLASS(info_null,CNullEntity); +#ifdef NEO +class CBaseDMStart : public CNEOSpawnPoint +#else class CBaseDMStart : public CPointEntity +#endif { public: +#ifdef NEO + DECLARE_CLASS( CBaseDMStart, CNEOSpawnPoint ); + + CBaseDMStart() : CNEOSpawnPoint() + { + m_iOwningTeam = TEAM_ANY; + } +#else DECLARE_CLASS( CBaseDMStart, CPointEntity ); +#endif bool IsTriggered( CBaseEntity *pEntity ); diff --git a/src/game/shared/neo/neo_player_spawnpoint.cpp b/src/game/shared/neo/neo_player_spawnpoint.cpp index ab78130bb..73ff307b8 100644 --- a/src/game/shared/neo/neo_player_spawnpoint.cpp +++ b/src/game/shared/neo/neo_player_spawnpoint.cpp @@ -63,7 +63,7 @@ void CNEOSpawnPoint::Spawn() { BaseClass::Spawn(); - AssertMsg(m_iOwningTeam == TEAM_JINRAI || m_iOwningTeam == TEAM_NSF, + AssertMsg(m_iOwningTeam == TEAM_JINRAI || m_iOwningTeam == TEAM_NSF || m_iOwningTeam == TEAM_ANY, "CNEOSpawnPoint shouldn't be instantiated directly; use info_player_attacker/defender instead!\n"); #if(0) From 44b506e712b03773f98f32b39eb216b4cfb80447 Mon Sep 17 00:00:00 2001 From: DESTROYGIRL <170364626+DESTROYGIRL@users.noreply.github.com> Date: Tue, 31 Mar 2026 22:58:50 +0100 Subject: [PATCH 4/4] dont respawn after round is over --- src/game/shared/neo/neo_gamerules.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/game/shared/neo/neo_gamerules.cpp b/src/game/shared/neo/neo_gamerules.cpp index 24c91215c..c74c7b29e 100644 --- a/src/game/shared/neo/neo_gamerules.cpp +++ b/src/game/shared/neo/neo_gamerules.cpp @@ -4440,6 +4440,11 @@ bool CNEORules::FPlayerCanRespawn(CBasePlayer* pPlayer) if (CanRespawnAnyTime()) { + if (GetRoundStatus() == PostRound) + { + return false; + } + return true; }