Skip to content
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

Move most world/debug options to externals #79310

Draft
wants to merge 4 commits into
base: master
Choose a base branch
from

Conversation

RenechCDDA
Copy link
Member

@RenechCDDA RenechCDDA commented Jan 24, 2025

Summary

None

Purpose of change

We have a plethora of world options. Too many. This is an opinion that has been repeatedly stated by senior developers, and one that I share.

Presenting these options to players implies that it is intended for players to casually fiddle with them. It is not. These are major balance levers, meant for dedicated mods.

Describe the solution

This PR is opened as a draft, so the solution describes how it should be when it's done. It is not done at the time of this writing.

DEBUG:
Distance initial visibility ---> Moved to scenario-specific value. Same default as before, but now scenarios can twiddle with it.

Vertical Range of 3D field of vision ---> Option removed. No reason to keep it around, it should have gone with the option to disable 3D FOV. Value moved to game constants and locked at 4.

WORLD:
Size of cities ---> Untouched (for now), retained on the main menu
City spacing ---> Untouched (for now), retained on the main menu

Difficulty (slider) ---> Removed, underlying options moved to externals
Spawn rate/item scaling factor --> The underlying options in question
Monster speed/monster resilience --> The underlying options in question

Random NPCs (slider) ---> Removed, underlying option moved to externals
Random NPC spawn time --> The underlying option in question

Monster evolution slowdown --> Moved to external

Season length --> Moved to external
Construction scaling --> Moved to external
Eternal Season --> Moved to external

Wandering Hordes --> Untouched for now, option will be removed when hordes are in a better state. (That's been the plan for a long time, tangential to this PR)

Mutations by radiation ---> Moved to external

Describe alternatives you've considered

Testing

Opened as draft

Additional context

@Maleclypse
Copy link
Member

Maleclypse commented Jan 24, 2025

I would reverse all of the following.

WORLD:
Size of cities ---> Untouched (for now), retained on the main menu
City spacing ---> Untouched (for now), retained on the main menu

Difficulty (slider) ---> Removed, underlying options moved to externals
Monster speed/monster resilience --> The underlying options in question

Random NPCs (slider) ---> Removed, underlying option moved to externals
Random NPC spawn time --> The underlying option in question

Monster evolution slowdown --> Moved to external

Size of cities and city spacing should both be moved to external only as both of these break special generation in ways that aren't easily addressable at all and should exclusively be something that exists for innawoods or similar mods. It should never be used in any mod that isn't a total conversion mod and I'd consider it ideal with it forcing that kind of labeling in the mod menu even for third party mods.
Difficulty slider could be used to move monster speed and resilience up or down all at once or both could remain as independent sliders but some kind of difficulty adjustment should exist for players who only play whatever ships with the game. If we get rid of this slider we will have to ship difficulty adjustment mods with the game that basically exist only for that one purpose and it seems silly.
I did remove item spawn slider from this list as I agree it makes management of mod spawns difficult to control for.
NPC slider is nice to have because if you move it exclusively to externals I'm going to straight jack it up in XE because I think that world would have more survivors due to longer weirdness and how will that interact if some other mod drops it down but only XE mentions what it's doing. I'd rather just leave this in player control as it only affects random npcs.

Monster Evolution I think should stay but I don't have any real arguments for it other than I think it would worsen the experience for players who are unaware of github and third party modding especially if we didn't then ship a couple mod options around this with the game which again I believe would just clog up the mod menu. Also how would mods interact with each others' slider adjustments to this?

edit: there are several places in the above reasoning where I used “we” language instead of “I”. It would have been better if I had used I but since GitHub doesn’t show edit history I’m commenting it here rather than changing my original text.

@esotericist
Copy link
Contributor

If we get rid of this slider we will have to ship difficulty adjustment mods with the game that basically exist only for that one purpose and it seems silly.

we have no such obligation.

@Maleclypse
Copy link
Member

Maleclypse commented Jan 24, 2025

If we get rid of this slider we will have to ship difficulty adjustment mods with the game that basically exist only for that one purpose and it seems silly.

we have no such obligation.

You have no obligations.
edit: to make sure this is abundantly clear I feel obligated to leave some level of care for the basic user.

@github-actions github-actions bot added <Documentation> Design documents, internal info, guides and help. [C++] Changes (can be) made in C++. Previously named `Code` [Markdown] Markdown issues and PRs Scenarios New Scenarios, balancing, bugs with scenarios labels Jan 24, 2025
@John-Candlebury
Copy link
Member

I agree with Maleclypse assesment of the options, I think theres place for some small but impactful levers to difficulty in user facing settings, and the ones outlined in his post are effective and dont really seem to cause problems with development.

@harakka
Copy link
Member

harakka commented Jan 24, 2025

Presenting these options to players implies that it is intended for players to casually fiddle with them. It is not.

Back when the simplified world settings screen was added a couple of stables ago, the current difficulty slider was specifically created as a new thing so that there is a simple lever for the player to adjust difficulty with that doesn't break the game like a lot of the other settings can do. I don't think that design rationale has expired and I would keep that one at minimum.

@IdleSol

This comment was marked as off-topic.

@Maddremor
Copy link
Contributor

Earnest question: Does tweaking monster evolution have any knock-on effects that are a hassle to deal with? As difficulty goes, I think it's broadly reasonable to have the game ramp up slower for a less skilled player. Monster evolution isn't pegged to any milestones or time frames that are grounded in reality, right? If it messes with wildlife spawns or such then do tell me.

@kevingranade
Copy link
Member

@IdleSol you have made several heckling comments like this recently in different issues. This is not ok and if repeated will result in a permanent ban.

@RenechCDDA
Copy link
Member Author

So my main reason for not removing the city size/spacing slider was that there would be no sliders left. It would be... weird.

Reviewing the points brought up, it seems most of the design conversation around the existing sliders was #57098. I'm really not convinced that any sliders should exist, but I don't have very strong arguments against them at the moment. What I do take issue with is the city size slider. Ironically, that is the one I most think should be removed. As mentioned, it is by far the worst offender of breaking the game.

So my current plan, in light of feedback, is to reverse course on the sliders.

City size/spacing slider ---> Removed, options moved to externals

Difficulty/NPC sliders ---> Kept

Also how would mods interact with each others' slider adjustments to this?

Any external options would be loaded like other json objects, with the last loaded mod taking priority. e.g. if evolution was an external and someone loaded two mods with both defining different values then the last one in the mod list is applied.

All the sliders are currently 'main options', so only one thing can set them. (The player, via the options menu or the sliders during world creation).

I am not 100% sure on how I could/would move the slider options to externals while still keeping them modifiable by sliders, but that's part of the working problem here.

@RenechCDDA RenechCDDA force-pushed the remove_world_options branch from e743218 to a96f09f Compare January 27, 2025 00:28
@github-actions github-actions bot added json-styled JSON lint passed, label assigned by github actions astyled astyled PR, label is assigned by github actions labels Jan 27, 2025
@Procyonae
Copy link
Contributor

I don't think I agree with all of this but ignoring that for a minute do removed options need any kind of config migration or does it just silently ignore the non existent ones?

-region_default ---> external
SEASON_LENGTH --> external
CONSTRUCTION_SCALING ---> external
ETERNAL_SEASON ----> external
-Removed the time group since it only had a single option left(ETERNAL_TIME_OF_DAY), moved that option to its own listing
@github-actions github-actions bot added the BasicBuildPassed This PR builds correctly, label assigned by github actions label Jan 27, 2025
@RenechCDDA
Copy link
Member Author

I don't think I agree with all of this but ignoring that for a minute do removed options need any kind of config migration or does it just silently ignore the non existent ones?

Moving them to externals actually causes the new value to load smoothly from what I can tell, although more testing is definitely needed. There are a lot of ways for an option to be loaded and it's a bit of a mess.

@github-actions github-actions bot added the [JSON] Changes (can be) made in JSON label Jan 27, 2025
@RenechCDDA
Copy link
Member Author

Due to implementation I have once again changed course. (Believe me this is not fun for me either)

None of the sliders have been removed. However, all of the slider-relevant options (including MONSTER_UPGRADE_FACTOR which I erroneously believed was not affected by the difficulty slider) have been permanently hidden from the options menu. They cannot be loaded as externals, as the world options take precedence. (I tried.) As far as I can tell, the sliders still set the options. The sliders are the only way to set their options.

One of the upsides to this is that it shouldn't* have any impact on existing savegames, which will continue to use the same world options at the same values as before.

There are downsides to this approach.

-We are still sending the option text to be translated, despite the fact it will never be displayed.

-Because they remain as world options, they cannot be overridden with externals.

*Note that the following options were not slider-based and may need migration for existing save games.
region_default - the external here should be the only one anyone was ever using, so probably fine?
SEASON_LENGTH/CONSTRUCTION_SCALING/ETERNAL_SEASON - existing save games will need to add an external if they were using non-default values.

I have given some thought about how to do this, and broached the topic on the development discord. The consensus answer seems to be enabling a newly-created per-save unique mod on legacy saves with the externals defined at their old values. There are issues with this, like what if the option is removed/changed in the future?

@RenechCDDA
Copy link
Member Author

Worth noting the churn in 4876d8a is somewhat necessary. There's a fun bug with option groups: If all the options are COPT_ALWAYS_HIDE it still displays the first option, always.

@github-actions github-actions bot removed the BasicBuildPassed This PR builds correctly, label assigned by github actions label Jan 27, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
astyled astyled PR, label is assigned by github actions [C++] Changes (can be) made in C++. Previously named `Code` <Documentation> Design documents, internal info, guides and help. [JSON] Changes (can be) made in JSON json-styled JSON lint passed, label assigned by github actions [Markdown] Markdown issues and PRs Scenarios New Scenarios, balancing, bugs with scenarios
Projects
None yet
Development

Successfully merging this pull request may close these issues.

9 participants