Open cppcooper opened 1 year ago
I'll consider changes along these lines, but I have some pretty major concerns:
At the moment, I think it would probably make more sense for someone (not necessarily me lol) to write a graphical tool to generate these sections in the INI file. I believe that would maximize ease of use and compatibility. Such a tool could even leave meta-data in the INI comments so that end-users could update the files themselves.
You're definitely right that a graphical tool to generate sections would be the most compatible end-user solution, but from a development stand point I think adding QoL features to the ini parsing would be the least amount of work by a couple magnitudes. As for ease-of-use, I think both paths are relatively equal with the caveat that reading and manually editing becomes easier in one situation and greatly worse in the other.
I'm gonna think about it some more. There is merit in making the INI files better, and it is something that's been in the back of my mind. I just am not wanting to accidentally embrace-extend-extinguish the other versions.
If I were to introduce features like this, I definitely would require that it not break the syntax of INI files. In particular, anything where the order of fields in the sections (or sections in the file) matters is automatically out (INI files should logically just be hash maps). I think if I were to implement something which has the features your hoping for, it'd look something like this:
Would those two additions cover the use case your thinking of? As for linear interpolation and an asymptotic function, I'm not sure the former is necessary if a polynomial option exists and I'm not clear on what you meant by the latter. Could you graph it in desmos and send me a link?
In any case, if I decide to implement this it'll likely be some time before it happens (O(months)). I just moved across the country to start work as a software developer, so things are a little hectic right now and I don't have nearly as much free time as I did last month.
Asymptotic functions would just be something like: or The function I shared just creates a graph like the first one, and manipulates it as needed. That particular function only outputs values 0...1, so it would need to be treated as the 0-1 distance between the start and end values.
I wrote that implementation to allow configuring the asymptote's characteristics. Such as whether the the graph increases to the asymptote or decreases to it, the curve strength, etc. I can try to create an online graphing function to represent it at some point. Many of the various lerp functions would be pretty good options, as well as smoothstep functions.
https://www.febucci.com/2018/08/easing-functions/ https://en.wikipedia.org/wiki/Smoothstep\
edit:
Would those two additions cover the use case your thinking of?
Yea, I think so.
edit: moved to OP
Given the way I have the code currently structured, adding global multipliers should be trivial. I'll definitely do that one, I think it could make a lot of peoples lives easier when configuring their files. Thanks for the feedback.
Curious if 2.3.0 has some progress
Curious if 2.3.0 has some progress
Not yet. I've been focusing development on bug fixes lately. This is still the next feature I plan on adding, though.
This is more of a feature suggestion than request. Given how flexible uncapper already is, adapting it in a few ways would be absolutely brilliant. And if anything already is a feature, I guess that would fall down to documentation.
Having some formulas to apply, per interval (potentially) would make a lot of what is done with it simpler through extended syntax. Some basic equations like:
Generalizing as needed, so long as it's documented (perhaps even graphed for documentation purposes). An asymptotic implementation, in Java so not exactly Rust, could look like:
While extending config syntax, might as well apply some DRY by allowing sections to act like a switch. (ie. looking to the next line(s) for config values to use)
Edit:
I've been doing a lot of modding of my skyrim lately, and another thought that occurred to me was that it would also be desirable to have global multipliers. This would also contribute to simplifying some setups, or making more nuanced ones.
A global multiplier for the different sections (i.e.
[SkillExpGainMults]
or[LevelSkillExpMults]
granularity into*\BaseSkillLevel
and*\CharacterLevel
would be optional)For example maybe the player is using the not a novice mod to start with skills, but doesn't want that to affect their level much. They could achieve that a few ways:
1.
This sort of thing, could also curtail some of the need for DRY features. A benefit, I think, is that this should be backwards compatible. (non-functioning, but non-breaking as well)