Okay - somewhat loosely since, as I said, these are not things I've spent any time planning out how to do them (and under an assumption for this post that we actually want to do all of this, which of course isn't necessarily true)Zireael wrote:Please tell me how 2 & 3 would differ for those
Hopefully this helps clear up the differences a bit more?
This is covered (very briefly) in the first example in the original post, but to expand on this particularly area. Essentially with option 3 we'd introduce a new commodities plist which allowed definition of the goods, and I think it could all be done in one version (though it and the related stuff would be a major feature for that version on the scale of the new populator/AI). With option 2, we'd introduce that plist in 1.82, run it in parallel at least to 1.84, and then once the old ways of doing things were gone, add the ability to define new goods either in that version or the next one. The tricky thing here is that an OXP station needs to be able to sensibly handle an OXP trade good without either OXP necessarily knowing about the existence of the other - that's really quite difficult (I don't actually know how it would be done at the moment) and I wouldn't want to handle that at the same time as managing compatibility with the current style of station market definition.OXP-defined trade goods,
The key thing that's needed for this to work at all is to get away from using the traditional algorithm to generate system data, and instead just hard-code that data intoOXPable systems/galaxies,
planetinfo.plist
including some new properties for system coordinates ... but if you just do that, properties set as "universal" in OXPs are going to get overridden by the core data at the system level. So, here's the stages to go through for this: (one way, plotted out on the spot, so probably flawed, and I'm skipping over a lot of details to keep it brief)
First, the preparatory work (which also has applications for some of the other suggestions)
1) add a "layer" property to planetinfo.plist, setting all the current core definitions explicitly to layer 0, making the default for OXP planetinfo to layer 1, and the default for changes by JS to some higher layer number. We also introduce a new
setProperty
method on SystemInfo that lets you specify the layer and pins JS-introduced changes to a particular worldscript.2) hard-code the existing system data into planetinfo.plist (probably using some sort of helper tool that OXPers could later use to make their own galaxies), including adding some extra properties which are currently determined from the system seed number but aren't yet modifiable through the plist (e.g. sun-planet vector direction). Make SystemInfo objects outside the current galaxy readable by OXPs.
3) make SystemInfo JS objects unwritable to force use of setProperty by OXPs.
...and now we're ready to actually get started.
4) Reformat planetinfo.plist so that the contents of galaxies are separated to one file per plist (planetinfo.plist keeps universal settings, a list of which charts are defined by which plists, and can for legacy purposes still define systems 0..255 in galaxies 0..7). At this stage there's still a limit of 256 systems per galaxy and 8 galaxies, though, but some JS properties to return those limits are introduced.
5) Remove central planetinfo.plist's legacy ability to define systems.
6) Change galaxy/system IDs to be unique strings rather than numbers (so you don't get two OXPs both trying to define system 257 in the same galaxy). Name the core systems and galaxies in such a way that legacy access methods still work. Don't yet allow definition of new galaxy/system IDs.
7) Remove the limitations on systems per galaxy and galaxies per game by allowing new galaxy/system IDs; introduce some keys which define the allowed galactic hyperdrive links between galaxies;
With option 2, I think this would have to be broken down, assuming we started now, into:
1.82: step 1 and I think also step 2 could go in here; if not, it goes into 1.84 instead.
1.84: step 3
1.86: step 4
1.88: steps 5 and 6
1.90: step 7
...and in practice, actually planning features for 1.90 now would be really silly: at our current pace (which is itself a really big assumption!) that's probably a 2022 or 2023 release. We'd go for the preparatory work first, maybe building in some things which would let us do the rest later, and reassess after 1.84 where to go next and whether to try the rest at all - it's still a 3-stage project even then, which is really ambitious (and, notably, doesn't really give much benefit to the 1.86 or 1.88 releases)
With option 3 ... well, in theory it could all be done in one release, though I wouldn't like to try it!
1.82: steps 1 to 3
1.84: steps 4 to 7
would probably be the fastest I'd want to try to approach it, and even then it would need a strong consensus from the community that it was the right thing to do.
So, this covers a range of potential ideas which have been suggested, for example:weapons adjustments,
- OXP-definable lasers
+ rebalancing the core lasers so that pulse to beam is no longer quite as big a jump
+ adjusting the core game's missile/mine set
+ making the Thargoid weapons more dangerous
- some sort of weapon that stations/capital ships can mount that's actually a reasonable threat to a smaller ship
Removing or significantly changing any existing weapon (+ rather than - bullet) is an option 3 context issue and probably not possible under option 2 - it won't break many OXPs as such, but it will need those with previously balanced-ish fights to be rewritten. (Option 3 for context is what we've effectively been doing recently, remember)
In API terms there's not a lot of difference between options 2 and 3, though - maybe if we decide that an equipment.plist reformatting is needed to do this properly, for example, there's probably the usual "one version for option 3, two versions for option 2" step there.