Buildable Nodes Redux + Resource Roulette
So RR conflicts with BRN because my scanning/destroying/spawning nodes and their meshes relies primarily on AFGResouceNode classnames for identification of the vanilla nodes to remove them (and they are always trying to come back!).
After skimming through the BRN mod, one simple solution that comes to mind is to request Robb to put a tag on actors/mesh components spawned by BRN as I didn't see that they're assigned (or if it exists and I missed it, I guess that's the simple solution already)
I'm not sure if there's another more clever way to filter out nodes so that way I can head off potential conflicts with nodes spawned by other mods as well, as there are likely to be many more resource node mods in the future and something smarter than that simple solution would mean I don't have to update this tag filtering logic routinely. I just don't know if there's anything.
Solution:Jump to solution
Robb, the solution I went with is just adding tags to the actors/meshes for your mod when they're spawned using a callback, and I'll do the same for the other conflicting mods. I have to see what kind of performance overhead it brings though but I don't imagine it's much.
Although not the most elegant, I think it's the most maintainable solution because then I can adjust the logic slightly for the tagging if needed for any weird conflicts in this compatibility checking class, and I'm not dependent on other mod authors properly tagging their actors/meshes or following a standardized resource spawning method....
10 Replies
@Rex [they/them] opened a PR on BRNR that fixes it, but you can't really rely on other mod devs to be consistent about how their resource nodes are set up, sadly https://github.com/budak7273/SatisfactoryBuildableResourceNodes/pull/5
GitHub
Set
mMeshActor
on buildable resource nodes by Th3Fanbus · Pull Re...This can be used to know these resource nodes belong to a buildable. Do this retroactively, so that already-built nodes also get updated. While at it, tidy up the Blueprint graphs and invert the or...
which is what made me want this system, but it hasn't been implemented yet https://github.com/satisfactorymodding/SatisfactoryModLoader/issues/200
GitHub
Resource Extraction Data · Issue #200 · satisfactorymodding/Satisfa...
Allow mods that implement new resources to offer information about the resource's nodes for use by other mods. Mods define data assets that specify this information SML BPFL will allow lookup o...
for labeling/filtering stuff, you can use Content Tags to tag classes owned by any mod without introducing any code dependencies
>docsearch Content Tags
This is the best result I got from the SMD :
https://docs.ficsit.app/satisfactory-modding/latest/Development/ModLoader/ContentTagRegistry.html
Content Tag Registry :: Satisfactory Modding Documentation
This page is still a work in progress. If you have any feedback, please let us know in the Discord. Introduced in SML3.8, the Conten...
Yeah, that's why I was wondering if just adding a tag is sufficient. I guess there is a difference between Gameplay tags (you mentioned) and Component/Actor tags (that I mentioned) in that Gameplay tags are the newer/better approach, and support hierarchy etc.
e.g. I tagged my meshes with "ResourceRouletteObject" with
MeshComponent->ComponentTags.Add(ResourceRouletteTag);
after spawning - this approach seems simple enough to specify what is related to what mods without a more consistent method for how the nodes themselves are set up or managed being enforced, and is both blueprint and C++ accessible. Gameplay tags is likely the better solution if this approach makes the most sense, based on my reading of that doc link.
I'll have to check out what Rex did in the PR and see if I can use that to filter out the buildable resources as its not immediately clear to me from the Github diff. Rex blocked me a while back for some reason (I believe it was after I told Archengius that condescending comments to me as a new modder were unnecessary, since both blocked me immediately after this)
I think the idea of that enhancement from Github is quite good, but it also seems like quite an immense challenge to implement it.
In a couple minutes of brainstorming, my simple suggestion would be that any actors/meshes spawned by a mod class default are tagged with SML.ModName or something to this effect - I'm not a UE expert by any means but in my small understand I would think it makes it easier not only for resource nodes but for other mods to identify actors/meshes/etc of other mods. I'm not sure the overhead of extra tags but I don't imagine it's much.
I think this went somewhat over my head on a first reading - what you're saying here is that I can, for instance, add a method to put a gameplay tag to your class (e.g. ABRN_Base_ResourceNode) from my mod, if your mod exists, and use this to filter out actors of this class since they will all inherit the tag, correct?>mod resource node creator
Fred Mod Search™
Resource Node Creator
You can create Resource Nodes with Power Shards
EA: :white_check_mark:
EXP: :white_check_mark:
Last Updated <t:1729277665:R>
Created by Andre Aquila
If this isn't the mod you were looking for, try a different spelling.
There's more than one mod adding resource nodes
SML's system associated a tag with a specific class, with no inheritance. so you should probably look at the node actor's class and parent class if you want to do that
but yes, SML offers multiple ways to tag things. the easiest way to tag something from another mod with no deps is a method call, in game instance module probably, since it lets you use a soft class ref. I think SMLFeatureTests might have an example of that
Solution
Robb, the solution I went with is just adding tags to the actors/meshes for your mod when they're spawned using a callback, and I'll do the same for the other conflicting mods. I have to see what kind of performance overhead it brings though but I don't imagine it's much.
Although not the most elegant, I think it's the most maintainable solution because then I can adjust the logic slightly for the tagging if needed for any weird conflicts in this compatibility checking class, and I'm not dependent on other mod authors properly tagging their actors/meshes or following a standardized resource spawning method.