Mod Management Discussion

14 posts / 0 new
Last post
#1
Mod Management Discussion

Hey Folks!

Now that many of you have your feet wet with modding, some are interested in ways of making their mods compatible with others' mods. Similarly, new builds will likely clobber IDs you've used in your mods, so it'd be nice if those IDs were safe.

I don't have a solution for this yet, and I can't guarantee this problem will be solved perfectly. (A proper solution might take serious dev time.) But some ideas have been floating around, and it's worth exploring our options.

One suggestion that a few have mentioned is some sort of "override" system. This could just be a special "override" folder from which the game loads data after the "vanilla" game is done loading. That's a good start, but there are a few gotchas:

  • Modders will need a way to reference "vanilla" data. E.g. new recipe may refer to existing ingredient ID for "flame source."
  • Modders will need a way to reference their new data. E.g. new recipe may need ID to new ingredient, "butterfly wing."
  • Modders/players will need a way to specify load order, in cases where mods conflict.

One solution Rovlad proposed elsewhere was:

If a record has an id, it should be a replacement. If there's no id like that in a "master xml file", it's a new one.

I think this solves #1, and makes new content easier in general (no fussing with IDs!). However, I'm not sure if it'll work for case #2. Without IDs, the new data can't point to other new data.

Alternately, each new mod could start with ID=1, and the game could just increment the mod's IDs to start at the next available number. E.g. new item has ID=1, vanilla game has IDs up top 574, so mod loader just switches the new ID to 575.

This approach solves #2, but not #1.

Any thoughts on how to solve both #1 and #2? (#3 is probably an independent issue.)

Dan Fedor - Founder, Blue Bottle Games

Maybe something that was mentioned somewhere in this subforum. The use of letters and numbers in mod IDs. Some games use this system and it solves these issues with ease. For instance:

"id">meat_stew01<

"id">raw_potato<

This will greatly reduce the chance of modders using the same IDs for their new content. :3

Also, it would be nice if we could also replace vanilla items, conditions and the like by just using the same vanilla IDs in the mod's xml file.

Pew pew pew!

I like that, I could use EmpZA_ to start all my IDs :D

IMAGE(http://steamsignature.com/status/english/76561198001057148.png)IMAGE(http://steamsignature.com/AddFriend.png)

I really like that idea - that would solve a lot if it was doable. And it should be, since the order/sequence of the IDs is not important, and only the original string matters.


<--Mighty (mini)Mod of Doom-->
DeviantArt Gallery of MoD Sprites

This is all new to me. But I have a strange idea in my mind, is it possible have some kind of system where a modder can "book" an ID number, much the same way someone would make a reservation at a restaurant or something?

IMAGE(http://steamsignature.com/status/english/76561198001057148.png)IMAGE(http://steamsignature.com/AddFriend.png)

Realistically, I don't think there's much you can do to smooth modding of NEO without a significant time investment. So I guess you'll have to figure out if it's worth it in your dwindling timeline.

One thing I definitely encourage though, is to make sure NEO Scavenger 2 has good modding support! =D

The letters solve both #1 and #2, but it actually creates a new problem. The way the game loads data, it refers to things by a simple number. So when treasure is defined, it looks like:

AA.BBxCCxDD-EE

Where each double letter represents an integer. And if we allow letters, someone might use "x" in their name, causing the game to misread the formula. E.g.

ExcellentMeatStewx1x1-2

The game will look at that, and think, "what is E? And cellentMeatStew isn't a valid percentage!" Same goes for encounter definitions, recipes, etc.

Of course, I could rewrite all the data loading stuff to handle strings. But that might be a very large number of changes.

Then again, if it's the only way, well, it's the only way. Still, let's see if any other ideas work!

Dan Fedor - Founder, Blue Bottle Games

Would it be hard to change the first integer (am I using that word right) to be read from within those -> {} fancy brackets (for example)?
So for example 25.2x0.5x1 would become a {25}.2x0.5x1 ?

That way, if I would fancy to name my new item type entry "Xoxaxor012x" it would still work as before, because the calling line in, let's say TreasureTable, would still look the same {Xoxaxor012x}.2x0.7x1, meaning 70% chance for one "Xoxaxor012x" of variety "2".

Changing of existing tables would be necessary, but I feel that running from top to bottom and adding those brackets to existing syntaxes would not be too time-consuming. Can even be done by someone else that you Dan ;D


<--Mighty (mini)Mod of Doom-->
DeviantArt Gallery of MoD Sprites

Hmm... maybe the letters in the new IDs could be in capital letters and made ID detection caps sensitive. This way it wouldn't require any changes to the existing tables.

Pew pew pew!

I would suggest that this could be solved as simply as by putting a 'modding guide' in the files for the game, and recommending to modders to use higher numbered integers.

For example:

the last entry in the main file for items is '652' [not really, but for the sake of discussion] recommend that players use integers above 2000 to start their list, allowing the modders to add things, and have basic reference id's, easily inter-referenceable to current existing entries, and in both direction, for example, allowing players to add things like, new flame sources, or flammable objects to be properly integrated as being flammable.

Further, modders could easily integrate each other's mods together by simply adjusting the values in the mods when they work them in to be higher than the ones in the mods they already have.

This seems like a valid, and easily implemented temporary fix until something better comes along.

Additionally, this would also allow the current ID system to go unchanged, and allow players to use the same ID to overwrite an existing item.

(From an armchair programmer) What if you could refer to the base game resources with 0.ID, and mod resources as 1.ID? (or 0_ID/1_ID?, if 1.ID could get confused with current syntax)

"Alternately, each new mod could start with ID=1, and the game could just increment the mod's IDs to start at the next available number. E.g. new item has ID=1, vanilla game has IDs up top 574, so mod loader just switches the new ID to 575."

The new notation could tell the loader if "ID=1" refers to the mod's ID=1 (1.1) or the vanilla ID=1 (0.1). If you have a text parser to go through and relabel/throw all the info into a large database on startup, the game itself wouldn't even have to worry about the new labels. Oh, and you might be able to use the group number to implement a crude load order.

At the moment, I'm feeling like modding this game is really easy. Which I like, I've tried to make mods before but, the programming was just waaay over my head. Mmm, as for merging mods and making it easier to merge mods, I don't really think its a huge deal. Of course anything that takes the pain-staking sifting out of it would be fantastic but I wouldn't want to lose any of the current moddability! Whatever you choose! please just don't make this game only moddable by the super geniuses!

IMAGE(http://steamsignature.com/status/english/76561198001057148.png)IMAGE(http://steamsignature.com/AddFriend.png)

I'd agree that it shouldn't be a big deal. Most of the problems function only if someone wants to load plethora of different mods into the game at once, in which case users can modify entries to ease on overlapping or mod creators simply agree to create modpack/collaborate to fix such quirks.

Additionally, it seems that many games also have a list denoting order of loading mods, maybe same thing could be implemented, where each mod would have it's own location, linked in some 'load order' file? While it wouldn't take care of overlapping content, it would allow users to choose priority of mods.

Mmmm busy adding/merging some mods together and an idea happened, its prolly based on many previous listed ideas but anyway

What about adding a Module ID to all tables?
Base Game Module ID=0
Mod A =1
Mod B =2
Mod C =3 etc etc? Not fully sure how it would be implemented but I'm thinking something very similar to the way you can load mods in fallout 3 or Skyrim

Should be very easy then to just change the Module ID to make sure no mods are conflicting

Also then modders can start with fresh IDs that never conflict with the base game, like if Base game treasureId will look like 0.200 and the modder's treasureId will look like 1.200

same can be done for itemtypes 0.30.0 and 1.30.0, they won't conflict I think lol

but hopefully it can still be done in such a way that modders can still make references to items already in the base game and even references to items in other mods

IMAGE(http://steamsignature.com/status/english/76561198001057148.png)IMAGE(http://steamsignature.com/AddFriend.png)