One thing i noticed was I had too many npc's of different factions spawning in the POI i was testing. I'm assuming i'd need to alter the sleeper groups used in the POI to pick one faction for the POI to get that problem resolved right?
Glad you like it. I didn't even think about the fantasy enemies (like goblins), though thinking about it, it's no surprise they use the same "blood moon" NPC templates.
For the different factions spawning into the POI, there are actually two things to consider: 1) what sleeper volumes the POI designer used, and 2) which NPCs are set to spawn into them in the various NPC Packs.
Here's what I suspect is happening. In NPC Core, there are a couple "generic" enemy gamestage groups (they're called "Group NPC Enemy" in the UI). They're meant to spawn any NPC that is an enemy of the player, so if the NPC pack contains non-friendly NPCs, it will (correctly) add the NPCs to those groups.
However, just because the NPCs are enemies of the player, does not mean they are friendly to
each other. Bandits, Whisperers, fantasy, and mechs all hate anyone in a different faction and will attack the others.
If I'm right, then my advice is to make the POI specific to just one faction, just as you suggested. If it's not your POI, and you're just testing it, then maybe that's not possible.
There are other options. You can modify which entities spawn into the relevant entity groups (in entitygroups.xml). Or, if you want all enemies to be enemies only of the player and not each other, you could modify the faction relationships so they are "neutral" to each other (in npc.xml). Or, you could just make them all the same faction, like "bandits" or something (in the various NPC packs' entityclasses.xml files).
Now since you have made so many changes to these entities, what is the actual in game behaviour changes these characters show ? I am not talking about hiring the NPCs.
I assume you are asking about the recent changes I contributed to SCore? Those relate to the SCore "EntityEnemySDX" C# class.
For a bit of explanation, most NPCs use the SCore "EntityAliveSDX" C# class. That class is actually a subclass of the vanilla
trader C# class - the code to talk to NPCs is in the trader, as is code to give quests, and a few other features needed by NPCs.
That class is well-developed, well-tested, and kind of the "official" class to use. Most NPC packs use that class even for
their "basic" characters, ones you can't talk to.
But, entities of that class can't be spawned into hordes - neither wandering hordes nor blood moon hordes. Anything spawned by the vanilla game's horde spawner system
must use a C# class that descends from the vanilla "EntityEnemy" class, which (unsurprisingly) traders do not. (You also can't spawn vanilla non-enemy animals for the same reason.)
That's what "EntityEnemySDX" is for - specifically to spawn into hordes. But since it's designed for entities that only do that, it has
far fewer features, and it's far less tested.
I started using that class for my "basic" Whisperers, since I specifically wanted them to show up in wandering hordes. It worked OK so I also used that class for my "basic" Rogues and Psychos bandits.
It's only when I started spawning them into sleeper volumes that I saw problems.
First, they didn't have the code to obey the different rules about waking them up in different sleeper volumes. Those are the rules that I modify in my "Variable NPC Sleepers" modlet so that NPCs don't always wake up fully aware as soon as they're spawned into a sleeper volume. (The different behavior is in SCore, I basically just change a couple of feature flags in XML.)
Next, they didn't have the code to obey commands (which makes sense because they can't be talked with, so players can't give them commands). POI designers often use SCore "PathingCube" blocks to give commands to NPCs, mainly to make sentries stay in place.
SphereII was kind enough to let me submit code that fixes these issues. Those are the changes I did recently.
Unless you're asking, just in general, about how NPC AI works in A20 vs. how it worked in A19?
If so that's a huge topic. For starters, A20 NPCs use Utility AI (UAI), but in A19, they used the same Entity AI (EAI) used in vanilla. The limitations of EAI are what prompted Xyth and SphereII to switch to UAI, which was already in the game but in an unfinished state.
If you want to read about UAI, then I took notes as I learned about it:
https://gitlab.com/karlgiesing/7d2d-a20-modlets/-/blob/main/Notes/UtilityAINotes.md
I also contributed "Filters" which can filter out which entities are considered for packages or actions, and make UAI much more efficient (otherwise your average computer would struggle with more than a couple NPCs at a time).
Once you understand all that, then you can look at the XML in then NPC Core utilityai.xml file, and you should be able to understand how it all works.
Hope that's helpful.