-
Notifications
You must be signed in to change notification settings - Fork 129
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Overhauling Northstar mod system in 2023 #472
Comments
Naturally given our reliance on Thunderstore nowadays, we should use it as a basis for a new system. A "simple" solution would be to enable a second mods folder, which could be called something like
Of course this solution isn't without caveats... Like what happens if two Thunderstore mods contain the same Northstar mod? Or if a Northstar mod is both installed via mod-manager and manually. |
I agree that we should have a separate thunderstore dir which preserves their structure. Regarding the transition, we should transition to a completely new structure which separates core mods, doesn't include default config, has a separate dir for user config, and has a separate dir for thunderstore/custom/plugins/etc. We can continue loading stuff from the old path, but show a warning, and always override it with stuff from the new layout. This will allow us to solve the configuration and launcher issue all in one go, while not breaking existing installations/tutorials. I'm thinking of something like this: R2Northstar:
*old-stuff
ns:
core:
plugins:
mods:
Northstar.Client:
Northstar.Custom:
Northstar.CustomServers:
profiles: # you would be able to specify a profile name or full path on the cli
default: # would be created automatically on first launch if a profile isn't explicitly specified
settings.json
banlist.txt
cfg:
config_1.cfg
config_2.cfg
mods: # if it is named the same as a core mod, it overrides it with a warning
Example.Example:
thunderstore:
ts_author1-ts_name1-4.2.0:
plugins: Also, I don't really like |
Uh two issues with this. Using More importantly however, don't think making a |
I'd like to separate core mods from the rest. We could allow specifying a different core dir too. |
I agree, to an extent. They should not be separate from a modloading perspective, other than the warning when disabling Northstar.Client or Northstar.CustomServers. Technically speaking Northstar.Custom isn't really a "core mod" in the same way as the other two, it can be disabled and re-enabled without issue and is designed to be optional |
By "core mod", I mean anything which we ship and should be overwritten entirely on updates. |
Tbf, every mod should be fully overwritten when updating that mod :P |
I'm very conflicted on a few things here, but here's my thoughts:
When it comes to the structure i think something like this would work best:
I'm very much in favor of using engine functions where ever possible ( hence the switch to vdf ). Having a similar system to r5r will also make it easier to have multi-game mods / to mod for both games. This is very much inspired by the unfinished mod system r5reloaded has on their There are quite a few things i havent mentioned such as using squirrel definition constants to distinguish between running northstar and vanilla in script. We should probably make a thread on discord to discuss this ,as github issues are unreadable after a hefty discussion, and post only agreed up on things here to keep track of things. |
100% agree on slashing backwards compatibility. Mod-managers can be used to "transform" old structure to new one. Though the value in backwards compatibility is that we don't break users installs. If a mod-manager can apply a fix, then that's fine.
Also agreed. The allowing plugins to be loaded from subdirs was done to somehow map plugins to Thunderstore mods which hopefully the new system won't require us to do anymore. Keeping manifest in plugin is kinda nice though cause it makes everything self contained.
This means we need to parse So right now we have Northstar mods packaged inside Thunderstore mods and in order to auto-update a mod we need to map back the Northstar mod to said Thunderstore mods. So we need some kind of indicator of linkage. We could also abandon the idea of a Northstar mod entirely but again this will require updating 100% of Thunderstore as well as every piece of tooling we have in place. We can certainly try to do this but then we need some (temporary) backwards compatibility as otherwise we are breaking every mod in existence x_x
This is a noble idea but I'd rather not switch from JSON to VDF as the latter is rather poorly defined and lacks library support by most languages which is a bit of an issue for mod-managers ^^
I'm not sure if the two games are compatible enough to allow this tbh. If they are, I'm not opposed to this ^^
👀
Best to make a thread in |
Should be covered with |
superseded by #618 |
Problem
When Northstar was first publicly released we had no mod distribution platform or the like. Further the mod system in Northstar is derived from Icepick which uses a
mod.json
to define various aspects of a mod.Now, 1.5 years after initial release Northstar has largely transitioned to Thunderstore as the sole mod provider which has it's own
manifest.json
to define mod author etc.Further we recently introduced wider support for plugins in
v1.13
of Northstar which are in a separate folder compared to mods.Basically a typically Northstar setup looks like this:
With this we are now in a bit of an awkward situation where mod-managers need to make some weird dance to extract mods and plugins into the right location.
Verified mods
Then there's also the idea of "verified mods" which allows Northstar to auto-download mods required a by a server (e.g. gamemodes or maps) upon joining said server.
For more info on them see:
Discussion
Overall, things are starting to get really messy so we probably wanna consider re-structuring our mod system.
This is what this issue is about.
Considerations
Some things to consider are:
R2Northstar.XXXX
mods to a different location...The text was updated successfully, but these errors were encountered: