Intended EOD balance discussion #28
AtomicFox556
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
This is a general discussion describing all the current problems that make DDA less fun to play, based on the reasons why some people I've talked to prefer BN over DDA, as well as current BN changelog, and how said problems could be fixed in this fork of DDA.
As for the reasons why some people prefer DDA over BN though, they seem fairly clear: BN just doesn't have some of the newer DDA features like pockets, and in some cases intentionally disables the ones that already were implemented.
I couldn't figure out a way to have both at once, but with the right settings, game could be configured to favor either better balance (similar to BN) or simulationism approach (similar to DDA) while keeping all the DDA features at least in some form. Achieving that is the goal of this fork; I'll work on this at my own pace and anyone else is welcome to contribute as well, as otherwise it's gonna take a very long time.
First of all, general points about EOD balance between gameplay and realism:
All the more obscure features are tried to be made as clear as possible to the player by providing info about what and when should be done to avoid negative consequences, even if such info normally wouldn't be available in such detail IRL.
In general, no features will be possible to completely disable in a way that skips all the code originally written to implement it. However, for those who do want certain things to be largely irrelevant, adjusting modifiers should allow making them irrelevant. Exceptions can be made for entirely sci-fi features, such as portal storms; it should be possible to disable them entirely, as there is a long-term plan to support a variety of different worlds better than DDA currently does, and it may be inappropriate for some.
I'm not opposed to completely rewriting some features, but with default modifiers, they still have to represent real life like DDA tries to, unless they're representing something that doesn't exist in real life in the first place. All the balancing beyond that should be done via adjustable modifiers.
Personally I don't necessarily agree with all the below points (that they're in fact a problem), but if they're here, it means that at least some other people think that it is a problem. If anyone has anything else to add to it, feel free to mention it here and I'll try to think of the ways that it could be solved in EOD.
Below I'll list all the current issues about DDA along with possible ways they could be fixed, split into categories, in no particular order. Things written in italic have already been implemented.
World
- Ammo for firearms is too plentiful; food is too plentiful; firearms are too common; spawn rates can be adjusted via item spawn multiplier, but you'd also end up losing valuable loot from high-end locations like labs.
Implement a separate adjustable modifier for every category of items, which represents represents a % chance to prevent an item from spawning. This should also affect most other item sources such as foraging, butchering and monster drops. DONE
For monster ammo drops specifically, there should be an adjustable modifier to destroy a specified percent of ammo spawned on death, to prevent excessive ammo spawn from turrets (yes, I know that simply receiving less ammo than there was in a turret with no reason stated makes no sense from realism point of view, but it is a major balance concern that people complain about and I don't know how else to fix without just removing turrets; if anyone has any other ideas, feel free to state them)
Item category for this purpose is decided based on "category" JSON field; all the available ones are listed in
data/json/item_catergory.json
, but most aren't particularly relevant. I propose using the following:Regarding food and water being too plentiful:
data/core/game_balance.json
file contains valuesPLAYER_HUNGER_RATE
for hunger rate adjustment,PLAYER_THIRST_RATE
for thirst rate adjustment, andPLAYER_FATIGUE_RATE
for fatigue rate adjustment. Those could be used to increase or reduce demand for food and water. DONE-- Portal storms are not a fun feature.
Add a setting that, if toggled, prevents specific effect-on-condition that triggers the portal storm once in a while (the effect is named
EOC_PORTAL_STORM_WARN_OR_CAUSE_RECURRING
) from activating. Manually triggering portal storms should still be possible though, such as when activating a certain item. DONEEven better would be to have adjustable modifiers that allow setting portal storms to be more or less frequent, but I can't quite figure out how exactly those effects-on-condition work; it'd be nice if someone knew which numbers would need to be adjusted to achieve this.
Long-term: portal storms should be localized rather than global, like any other weather. They could be further limited to certain locations as well, if people will keep perceiving them as annoying and not fun even after this change.
Long-term: portal storms (specifically the dungeons) should be the way to gain access to certain unique abilities and gear that can't otherwise be accessed. My proposal is magic-like abilities similar to those implemented by Magiclysm mod, as well as various items that exist or existed in real life at some point, but are normally too rare to be found considering the time and the place, such as extremely rare firearms.
Specific implementation details of this are yet to be decided. For those who still wouldn't want to lose access to all of that if random portal storms are disabled, it should be possible to cause portal storms manually.
- Lots of junk spawning isn't fun.
Non-optional feature: add disassembly recipes for every "junk" item, that produce at least somewhat useful items (scrap metal, glass shards, etc.)
Non-optional feature: add some kind of use to junk items that could reasonably have one. For example, eating certain foods while having suitable cutlery available could provide an extra tiny morale bonus (this shouldn't require any extra keypresses on the player's part).
- Some NPCs break the game's atmosphere.
Primarily talking about Alonso here (who is a bit of a meme on his own by now), though I do understand that any apocalypse will likely have its own share of crazy people. In this specific case, I suggest adding an option to tell Alonso in no uncertain terms to stop trying to hit on you right after starting the dialogue, possibly multiple options for doing it either politely or rudely.
If anyone thinks that any other in-game NPCs break the atmosphere with their dialogue, feel free to bring it up as well.
Crafting
- Some crafting takes too long.
Add two modifiers: one would represent minimum base time (in minutes) that a recipe would take in order for crafting speedup to take an effect, another one would represent reduction of crafting speed past that time. Those effects are taken into account before batch crafting time savings are calculated, however, so crafting time for large batches isn't reduced if it wouldn't have been reduced for a single item.
Example 1: an item takes 4320 minutes (72 hours) to craft, crafting time soft cap is set to 480 minutes (8 hours), and crafting time reduction is set to 95%. Then, adjusted crafting time would be min(4320;480)+max((4320-480);0)*(1-0.95) = 672 minutes (11.2 hours) per item.
Example 2: an item takes 240 minutes (4 hours) to craft, crafting time soft cap is set to 480 minutes (8 hours), and crafting time reduction is set to 95%. Then, adjusted crafting time would be 240 minutes (4 hours) because it's already lower than the soft time cap. DONE
This would also affect other long activities such as mining, construction, tree chopping, etc., if they fall under the soft time cap.
- Proficiencies are not a fun feature.
Non-optional feature: make sure that practice recipes exist for every crafting proficiency, to assist learning them.
Add a multiplicative modifier that multiplies crafting time penalty for missing proficiencies. Default is 1; below 1 would reduce time penalty (set to 0 to make them have no effect on crafting time), above 1 would increase time penalty. Similar modifier could be added to failure rate, but people don't seem to complain about this part. DONE
- Crafting menu is cluttered with useless recipes.
Non-optional feature: make more aggressive use of nested crafting categories ( CleverRaven#59924 ) in order to declutter the crafting menu by grouping all the similar recipes together.
Non-optional feature: recipes that make use of overly specific ingredients for no good reason should be adjusted to use generic components, either instead of or as an alternative to those specific components. One example of this is "leather-padded shirt" and "leather-padded pants" items, which could be set to use leather patches an an alternative to leather clothing items.
- Chemistry in particular is extremely complex due to a large amount of different chemicals used in recipes.
This is mostly related to the direction that EOD is currently going, crafting-wise, but applies to DDA to a lesser degree as well. Chemical recipes often need a lot of extremely specific things to produce and, realism-wise, there's no real way of going around that; magical potions are a planned feature that would mitigate this without compromising realism by providing an alternative way to achieve the same result, but that still doesn't fix the actual issue.
I propose making a "Generic Chemistry" mod that would replace large amount of chemicals with a fewer amount of them and rewrite chemical recipes to make use of those new chemicals. I have absolutely no idea what those "generic" chemicals would need to be like in order to also prevent manufacturing of everything from salt water, scrap metal, wood, sugar and similar things, however; suggestions on how all of that could work are welcome.
Survival
- Weariness is not a fun feature.
data/core/game_balance.json
file contains adjustable values namedWEARY_BMR_MULT
,WEARY_THRESH_SCALING
,WEARY_INITIAL_STEP
andWEARY_RECOVERY_MULT
. They could be moved to settings, in order to make it possible to adjust weariness accumulation and recovery rate. DONE- Sleep deprivation is not a fun feature.
Sleep deprivation implementation was made non-optional in this PR: https://github.com/CleverRaven/Cataclysm-DDA/pull/37423/files
Option to toggle it on or off it could be reintroduced. Later it should be changed to a multiplicative modifier to fine-tune how quickly sleep deprivation occurs, separately from normal fatigue.
Current level of sleep deprivation and progress to transition to next level should be possible to show on the sidebar, just like it's currently done for weariness.
- Most frozen food is inedible without manual reheating, and this is annoying.
Non-optional feature: make it possible to eat frozen food if an item with hammering quality of 1 is available, representing breaking the food down with rock and eating the chunks. Doing that shouldn't require any more keypresses than just eating the food as if it was not frozen: smashing happens automatically.
Non-optional feature: add a line into food description that says if this food can be eaten even while frozen, as well freezing temperature for this food.
Make an option to allow character to automatically heat up the food upon eating attempt, as long as suitable tools are available (fire and a pot, a charged hotplate, etc.). This should drain charges from the tool used, if applicable. Available modes should be "never heat up food", "heat up food if otherwise inedible", "heat up food if it tastes better hot".
- Stomach mechanics is not a fun feature.
Add an adjustable modifier that multiplies stomach capacity by a certain number. Setting this modifier high enough would make it possible to consume food in nearly any amounts at once.
Non-optional feature: add a display of current stomach fullness (in liters) and stomach capacity (in liters) somewhere on the character screen, food consumption screen and (optionally) on the sidebar, so you can know when you can or cannot eat more.
- Obesity is not a fun feature.
Add an adjustable modifier that multiplies hunger accumulation over time by a certain number whenever character's weight is higher than ideal weight. Setting this modifier high enough would effectively prevent obesity from occurring no matter how much the character eats.
Non-optional feature: replace vague "weight" description on character screen with a display of "% of ideal weight", incrementing in 0.1%, so you can immediately notice if you begin to gain or lose weight with your current diet without having to wait until penalties happen.
- Vitamins is not a fun feature.
data/core/game_balance.json
file contains adjustable boolean value namedNO_VITAMIN
that can disable vitamins. It could be moved to settings.Add an adjustable modifier that multiplies vitamin consumption rate by a certain number. Setting this modifier high enough would effectively stop vitamin consumption, so keeping track of eaten food becomes irrelevant. DONE
Non-optional feature: add a menu to view current vitamin values for the player character, showing progression to first (or next, the worse one) level of deficiency in percents. It shouldn't require any item to use. I'm aware that there's no way of knowing that IRL, but for the sake of providing clear information about whether you should be consuming more of certain vitamin in your diet, it should exist.
- Random cold/flu/tetanus isn't a fun feature.
Add a modifier that adds the probability (in %) to not catch flu, cold and tetanus any time it would otherwise happen. Modifier set to 100 % would disable this completely. DONE
Combat
- Firearms are too powerful, bows and crossbows are too weak.
Add separate adjustable damage modifier for every ammo category.
Ammo category for this purpose is a separate optional JSON field that is defined in ammo type JSON entry. I propose the following categories:
constant_damage_multiplier
field of arrows, bolts and similar ammo)Any other unusual ammo, such as nails and pebbles, can be left without a category assigned to them; in that case, none of the above modifiers would apply to them.
- Burst fire is mostly useless.
Add a modifier that delays extra recoil until the end of a burst (this is done in Character::fire_gun function), taken into account after the usual recoil delay that is provided by skill.
Example: currently, at skill of 8, 40% of recoil is delayed until after the end of burst. Combined with additional 50% recoil delay modifier, final result would be 70% recoil delayed.
- Stamina is used up too fast while running and attacking with melee weapons.
_data/core/game_balance.json file contains adjustable values named
PLAYER_MAX_STAMINA_BASE
,PLAYER_CARDIOFIT_STAMINA_SCALING
,PLAYER_BASE_STAMINA_REGEN_RATE
andPLAYER_BASE_STAMINA_BURN_RATE
. They could be moved to settings, in order to make it possible to adjust max stamina amount and stamina regeneration rate.Those wouldn't allow to separately adjust stamina consumption of swinging melee weapons. If that would be needed, a separate modifier could be added._ DONE
Other
- Pockets are not a fun feature.
Add omnipocket implementation as an alternative to individual pockets, toggleable via options.
This would be implemented as a single fake item that won't show up in inventory, would prevent putting anything into most "normal" pockets, and would instead have a single "omnipocket" pocket into which all the disabled pockets are merged; this pockets would have variable stats, calculated as such from pocket stats of all the worn clothing:
Max volume: sum of max volume of all the merged pockets.
Max weight: sum of max weight of all the merged pockets.
Max item length: maximum length among all the disabled pockets.
Moves to remove item: volume-weighted average among all the disabled pockets.
For the purpose of calculating encumbrance for worn items which have variable encumbrance, their encumbrance is calculated as if they were filled (in %) as much as the omnipocket.
Example: if you have your omnipocket 40% full and are wearing a backpack and cargo pants, then encumbrance for both backpack and cargo pants are calculated as if they both were 40% full.
Any mergeable pocket of a wearable item that isn't worn is also blocked, but not accounted for in omnipocket calculation.
Upon any change to worn items, omnipocket stats are recalculated: code-wise, old omnipocket is deleted, new one is created with new stats, items from old omnipocket try to be placed into the new omnipocket. If that fails, leftover items are dropped onto the ground instead.
Certain pockets won't be merged into the omnipocket. Examples include watertight and airtight containers (bottles, waterskins), non-wearable containers (boxes, bags), containers with special restrictions and/or rules (ammo pouches, holsters) and similar.
Items on the ground still have all their pockets accessible, but picking up such an item would attempt to place all the items out of an item's pockets that would be merged into the omnipocket, into said omnipocket. If it fails for some reason, items fall onto the ground instead.
Alternatively, figure out a better UI compatible with a possibility to interact with it using a mouse, which would make dealing with pockets much more convenient.
- Generally too many keypresses needed to play DDA.
Non-optional feature: allow butchering to make use of items in crafting radius, even if they aren't placed as furniture.
Non-optional feature: make all tools usable for crafting even if not placed as furniture or appliances. One example of tool that currently needs to be placed for use is butter churn.
Non-optional feature: in general, all electricity-powered crafting tools should be mountable on vehicles, so that they can draw power directly from them. Bulky tools and those that would be particularly unusual to have in a vehicle (such as electric forge) should have high skill requirement.
Exception is made for tools that need to be firmly secured in order to work properly (such as lathes), but those should have non-trivial (at least time-wise) requirements for installation and uninstalling, and if mounting on a vehicle, could instead require to be mounted to a vehicle with a certain minimum weight in order to function, once that feature is implemented.
- Helicopters are too hard to use.
Non-optional feature: add a proficiency that would allow repairing already installed helicopter parts, but not installing new ones. It'd not necessarily be learnable in-game at first, but would be available from starting professions or hobbies (at least one of each).
Add a multiplicative modifier that multiplies amount of fuel consumed by flying. Default is 1; below 1 would reduce amount of fuel used (probably what most people would want), above 1 would increase amount of fuel used.
Add a toggleable setting that would enable any character to repair already existing helicopter parts.
Add a toggleable setting that would enable any character to modify existing flying vehicles and build new ones in any way whatsoever. DONE
Long-term: as far as my understanding goes, realistic construction of flying vehicles would need to place certain limits on weight distribution and general shape of the vehicle, so that players can't just construct a wide flying box. I have no idea how that could work in-game and be clearly communicated to the player, however; suggestions are welcome.
- Having a lot of settings and modifiers would be difficult to manage for the players.
In order to make it unnecessary for players to fiddle with all the modifiers, I propose adding support for settings presets that would automatically set all the affected setting to predefined values. At least two would be needed: "Simulation focus" and "Classic Cataclysm", with the former being just default DDA balance, and the latter being closer to BN in balance.
- Some values are already fairly easily adjustable, but would need manual editing of a JSON file in order to change.
data/core/game_balance.json
file has numerous other adjustable values that should be pulled into options instead of requiring manually editing this file in order to change them. However, in order to make the actual consequences of changing a certain value more clear, they should be changed to represent a multiplier of the current default value.Beta Was this translation helpful? Give feedback.
All reactions