From be2d39149dde336ad94818388593cd97e6061d3c Mon Sep 17 00:00:00 2001 From: SuperCake Date: Sat, 29 Aug 2026 12:06:31 +0200 Subject: [PATCH 1/5] fix: add faction Robots to fgd --- reactivedrop/fgd/swarm.fgd | 1 + 1 file changed, 1 insertion(+) diff --git a/reactivedrop/fgd/swarm.fgd b/reactivedrop/fgd/swarm.fgd index 831eda18d..5cc3e3b0c 100644 --- a/reactivedrop/fgd/swarm.fgd +++ b/reactivedrop/fgd/swarm.fgd @@ -314,6 +314,7 @@ 3 : "Bait" 4 : "Neutral" 5 : "Combine" + 6 : "Robots" ] damagemultipliersamefaction(float) : "Same Faction Damage Scale" : "1.0" : "Amount to scale damage by when attacked by the faction the bullseye is a member of." damagemultiplierotherfaction(float) : "Different Faction Damage Scale" : "1.0" : "Amount to scale damage by when attacked by a faction the bullseye is NOT a member of." From f15261352a7f042eaa2b578bcd94208784a9e6d3 Mon Sep 17 00:00:00 2001 From: SuperCake Date: Sat, 29 Aug 2026 12:11:40 +0200 Subject: [PATCH 2/5] refactor: sort SetDefaultFactionRelationship --- src/game/shared/swarm/asw_gamerules.cpp | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/game/shared/swarm/asw_gamerules.cpp b/src/game/shared/swarm/asw_gamerules.cpp index cf1d4cde9..21a2021e8 100644 --- a/src/game/shared/swarm/asw_gamerules.cpp +++ b/src/game/shared/swarm/asw_gamerules.cpp @@ -4604,40 +4604,40 @@ void CAlienSwarm::InitDefaultAIRelationships() CBaseCombatCharacter::AllocateDefaultRelationships(); // set up faction relationships - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_MARINES, FACTION_ALIENS, D_HATE, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_MARINES, FACTION_MARINES, D_LIKE, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_MARINES, FACTION_ALIENS, D_HATE, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_MARINES, FACTION_BAIT, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_MARINES, FACTION_NEUTRAL, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_MARINES, FACTION_COMBINE, D_HATE, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_MARINES, FACTION_ROBOTS, D_HATE, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ALIENS, FACTION_ALIENS, D_LIKE, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ALIENS, FACTION_MARINES, D_HATE, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ALIENS, FACTION_ALIENS, D_LIKE, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ALIENS, FACTION_BAIT, D_HATE, 999 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ALIENS, FACTION_NEUTRAL, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ALIENS, FACTION_COMBINE, D_HATE, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ALIENS, FACTION_ROBOTS, D_HATE, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_NEUTRAL, FACTION_NEUTRAL, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_NEUTRAL, FACTION_MARINES, D_NEUTRAL, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_NEUTRAL, FACTION_BAIT, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_NEUTRAL, FACTION_ALIENS, D_NEUTRAL, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_NEUTRAL, FACTION_BAIT, D_NEUTRAL, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_NEUTRAL, FACTION_NEUTRAL, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_NEUTRAL, FACTION_COMBINE, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_NEUTRAL, FACTION_ROBOTS, D_NEUTRAL, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_COMBINE, D_LIKE, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_NEUTRAL, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_MARINES, D_HATE, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_BAIT, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_ALIENS, D_HATE, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_BAIT, D_NEUTRAL, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_NEUTRAL, D_NEUTRAL, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_COMBINE, D_LIKE, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_COMBINE, FACTION_ROBOTS, D_HATE, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_ROBOTS, D_LIKE, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_NEUTRAL, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_MARINES, D_HATE, 0 ); - CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_BAIT, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_ALIENS, D_HATE, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_BAIT, D_NEUTRAL, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_NEUTRAL, D_NEUTRAL, 0 ); CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_COMBINE, D_HATE, 0 ); + CAI_BaseNPC::SetDefaultFactionRelationship(FACTION_ROBOTS, FACTION_ROBOTS, D_LIKE, 0 ); // Matching HL2 defaults: Wildlife is scared of everything except other wildlife, barnacles (if we ever add them), and invisible NPCs. for ( int nClass = CLASS_NONE; nClass < LAST_ASW_ENTITY_CLASS; nClass++ ) From 73d9c88ace86c957642fb29b5293343e242b67f8 Mon Sep 17 00:00:00 2001 From: SuperCake Date: Sat, 29 Aug 2026 13:28:07 +0200 Subject: [PATCH 3/5] refactor: replace FACTION defines with enum --- src/game/shared/swarm/asw_gamerules.h | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/game/shared/swarm/asw_gamerules.h b/src/game/shared/swarm/asw_gamerules.h index 445ee8001..510fca0a9 100644 --- a/src/game/shared/swarm/asw_gamerules.h +++ b/src/game/shared/swarm/asw_gamerules.h @@ -88,14 +88,17 @@ class CASW_Powerup; class CBaseStart; // Faction defines -#define FACTION_MARINES ( LAST_SHARED_FACTION + 1 ) -#define FACTION_ALIENS ( LAST_SHARED_FACTION + 2 ) -#define FACTION_BAIT ( LAST_SHARED_FACTION + 3 ) -#define FACTION_NEUTRAL ( LAST_SHARED_FACTION + 4 ) -#define FACTION_COMBINE ( LAST_SHARED_FACTION + 5 ) -#define FACTION_ROBOTS ( LAST_SHARED_FACTION + 6 ) -#define LAST_ASW_FACTION (FACTION_ROBOTS) -#define NUM_ASW_FACTIONS (LAST_ASW_FACTION + 1) +enum +{ + FACTION_MARINES = NUM_SHARED_FACTIONS, + FACTION_ALIENS, + FACTION_BAIT, + FACTION_NEUTRAL, + FACTION_COMBINE, + FACTION_ROBOTS, + + NUM_ASW_FACTIONS, +}; struct StringKeyValue_t { From 5d2c097eec9818296f009e8fda0472f7fd731ced Mon Sep 17 00:00:00 2001 From: SuperCake Date: Sat, 29 Aug 2026 13:54:06 +0200 Subject: [PATCH 4/5] fix base NumFactions off-by-one --- src/game/shared/gamerules.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/game/shared/gamerules.h b/src/game/shared/gamerules.h index 1a555c550..caea36d18 100644 --- a/src/game/shared/gamerules.h +++ b/src/game/shared/gamerules.h @@ -316,7 +316,7 @@ abstract_class CGameRules : public CMemZeroOnNew, public CAutoGameSystemPerFrame virtual void InitDefaultAIRelationships( void ) { return; } virtual const char* AIClassText(int classType) { return NULL; } virtual int NumEntityClasses() const { return LAST_SHARED_ENTITY_CLASS; } - virtual int NumFactions() const { return LAST_SHARED_FACTION; } + virtual int NumFactions() const { return NUM_SHARED_FACTIONS; } // Healthcharger respawn control virtual float FlHealthChargerRechargeTime( void ) = 0;// how long until a depleted HealthCharger recharges itself? From 28821c5ecacf95ce8bf8e93a4559f4c859333c08 Mon Sep 17 00:00:00 2001 From: SuperCake Date: Sat, 29 Aug 2026 13:57:49 +0200 Subject: [PATCH 5/5] refactor: replace base defines FACTION with enum --- src/game/shared/shareddefs.h | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/game/shared/shareddefs.h b/src/game/shared/shareddefs.h index c3c321a0c..6fd250710 100644 --- a/src/game/shared/shareddefs.h +++ b/src/game/shared/shareddefs.h @@ -898,8 +898,11 @@ enum Class_T }; // Factions -#define FACTION_NONE 0 // Not assigned a faction. Entities not assigned a faction will not do faction tests. -#define LAST_SHARED_FACTION (FACTION_NONE) -#define NUM_SHARED_FACTIONS (FACTION_NONE + 1) +enum +{ + FACTION_NONE = 0, // Not assigned a faction. Entities not assigned a faction will not do faction tests. + + NUM_SHARED_FACTIONS, +}; #endif // SHAREDDEFS_H