CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.59k stars 4.16k forks source link

Refine Hunger status display #42348

Open I-am-Erk opened 4 years ago

I-am-Erk commented 4 years ago

Is your feature request related to a problem? Please describe.

On one hand, we want hunger to be vague as it is in real life. Nobody knows how many foods they really need to eat to be full, or what the things making them full are. On the other hand, we do have a pretty good idea how hungry we are in a more granular way than currently expressed in game.

Describe the solution you'd like

The displayed hungry/very hungry/famished display should be replaced with hungry followed by a ||\ bar or a number of + signs related to how hungry you are based on several causes of hunger.

All the other hunger displays - starving, satisfied, engorged, etc - should remain about the same. Any of these states would supercede the hungry state appearing.

How it works

Basically, we'd have a number of factors that could contribute to hunger.

You don't see a hunger message until you have at least 3 levels of hunger, at which time you see "hungry". After that hunger would rise in 'levels', with each 2 levels adding a + after hungry, to a max of hungry+++ (or a bar like hunger ||\, but personally I think that's less intuitive as we usually use bars for good things). The hunger meter would always display in a neutral grey colour regardless of how full the bar got.

Newer suggestion: Engorged, Sated, and Starving remain as current and override any other hunger display.

Engorged: Displayed according to current rules, based entirely on stomach contents. Sated: Displayed according to current rules, based entirely on stomach contents. level 0-3 hunger: No message displayed. Level 4-5 hunger: Hungry displayed in grey. Level 6-7 hunger: Hungry+ displayed in white. Level 8-9 hunger: Hungry! displayed in yellow. Level 10+ hunger: Famished! displayed in yellow.

Note that kcal intake should have relatively little effect on hunger, our bodies are notoriously terrible at judging this. However if we hide it behind enough other data it will represent our very limited ability to judge our "blood sugar" without allowing people to too easily just use accountancy.

Under these rules, to see any hunger message at all you need more than 3 levels of hunger. That corresponds to, for example, 1 level of weariness, and a stomach that emptied 2 hours ago. This will be a pretty common example I think. The main time-related effect once the stomach is pretty empty is going to be calorie deficit since you last ate, or emptiness of guts.

Features like temperature and morale could have small effects on hunger (see below) but should never kick in until you have 4 levels already, so they would only work to exaggerate your hunger display, never cause it to appear in the first place.

At 8 levels of hunger, the bar would be maxed out, hunger+++, but the level would still be tracked. At 10 levels of hunger and above the display should change to famished.

Other options:

Other effects of hunger levels

We could increase "stomach capacity" by something like 10% per current hunger level. This would allow very hungry people to eat more before they hit Satisfied. It would also allow very hungry people to eat a ton too quickly, then have their hunger level drop and their stomach capacity contract, and they throw up. I would say that is a good simulation, but we might want to make sure this is a chance to throw up rather than a guarantee. Maybe we would have to change the effects of exceeding stomach capacity to be either you throw up or you feel extremely sick, since between this change and satiety, stomach capacity is becoming quite an abstraction.

Describe alternatives you've considered

The fiasco with peckish has finally convinced me that too many descriptive words for hunger aren't a good idea, otherwise I'd be advocating a bunch more descriptive words.

I have consistently debated where we should start showing hunger, after running the numbers I have changed it to level 3 rather than 2 to avoid too much noise.

Marrim commented 4 years ago

Perhaps consider color-coded hungry word? Or "Hungry!" with one to three exclamation points.

I-am-Erk commented 4 years ago

Colour is a bad choice to convey important information, as it is not always perceived equally. It's fine for alert states but not for information.

An exclamation mark would be the same as a +, functionally, but I feel like hungry! implies a lot more urgency than is needed for only 2-3 levels of hunger.

RocketPapaya413 commented 4 years ago

Boy it's not easy to find simple descriptions of the physical sensation of hunger from an academic standpoint, huh? I've done some internet searches but they mostly brought up absolutely everything else. So I can't back it up with a source right now but I do want to postulate that being overweight should increase the hunger level as well.'

Also, it might be out of scope for this, but I've long thought that hunger pains should come with severe morale and mild pain penalties that persist until satiation.

I-am-Erk commented 4 years ago

I think given how hard it is to even realize what your weight is in this game we should keep the physical and debatable psychological links of obesity and hunger out for now.

I do agree being hungry should come with a lot more penalties, but for now I'd just like to get a hunger system. This does provide a more granular gradation of a hunger stat that could be used to key off a lot of other things.

kevingranade commented 4 years ago

Implementation detail for screen readers, we need to have "hungry 1", "hungry 2" etc.

ZaricaDemoni commented 4 years ago

Also, it might be out of scope for this, but I've long thought that hunger pains should come with severe morale and mild pain penalties that persist until satiation.

Actively being slightly overweight, and barely feeling like i need to eat. I can't fully agree with this. Though having dealt with hunger pains before, they aren't always painful for everyone. Sometimes its just a feeling of emptiness which can be kind of saddening, but not severe until you've went long enough, learned this from being forced to fast once.. fun 18 hours, and why I hate blood-work.

Side Note: Game counts 3h since last eaten as hungry, that essentially 8 meals a day when running less sleep perk. Would kind of mean you are upset and in pain every 3h because your stomach is empty, but not your gut. Still an interesting idea for later though.

Zireael07 commented 4 years ago

Where did you get the idea that 'hungry' means you're in pain?

ZaricaDemoni commented 4 years ago

Since I'm unsure if that's to me or RocketPapaya413. I'll give the simple description of why some people tend to think that and others don't.

Hunger Pains Also known as hunger pangs, hunger pains are feelings of discomfort deep in the stomach. A hunger pain is often a low-grade discomfort that is just strong enough to notice. However, some people do experience hunger pains that are somewhat sharp and intermittent. They are usually caused by not eating for hours on end, when muscle contractions begin to occur.

Note: This is also generally stopped by a small snack, doesn't have to be a full meal, and doesn't always mean actual pain. My previous side-note was an example of the suggested mechanic playing out in game.. Its a fun read to learn about and I am all for a more refined hunger display though.

Back to the actual topic at hand: I'm not entirely sure the other effects of hunger capacity change is a good idea as that does stray us from the current realism in play. just because your hungry doesn't mean your stomach is willing to expand further before your in pain, as your stomach contents are usually empty for a while before you become hungry to begin with. Interesting note some people don't always know and is kind of on topic, your stomach if it didn't expand couldn't hold more than a single serving of mashed potatoes.

wapcaplet commented 4 years ago

@I-am-Erk your 0-10 point scale would fit neatly into a rendering more like the HP or stamina bars, if we labeled it as whatever the opposite of hunger is - "Fullness", or perhaps "Satiation". Then, where 0 is "not hungry at all" and 10 is "famished":

Satiation
0  |||||
1  ||||\
2  ||||.
3  |||\.
4  |||..
5  ||\..
6  ||...
7  |\...
8  |....
9  \....
10 famished
souricelle commented 4 years ago

Most games (including this one until recently) model hunger as a vital need and not just the sensation of wanting to eat food whether it's necessary or not. Any hunger indicator is thus going to either be viewed as a prompt telling the player that if they don't eat soon they're going to have problems or, if they understand the system, an unnecessary and distracting UI alert.

I don't know if there's a good way to fix it. We frequently hear from people on discord or reddit who have trouble understanding why they're very hungry all the time (calorie deficit) and I see a lot of players misunderstanding peckish. I would almost suggest leaving minor hunger indicators like peckish off the UI entirely and maybe adding a clearer indicator on the character sheet or as periodic messages or something. IE: "You feel like snacking on something despite knowing you don't really need to."

Marrim commented 4 years ago

Yeah, "Hungry" is understood as "you need to eat, now". I've been playing the game a lot recently and it's very noticeable that the indicator appears exactly three hours after you last ate, that's way too often. It should instead appear when your stomach has been empty for three hours.

Since it takes 3 hours for the stomach to empty, you would get a hungry prompt every 6 hours if you eat full meals, and every 3 hours if you try to stave it off with tiny snacks or water. Obviously, it's only an indicator and you could still eat every 3 hours if, e.g., you wanted to gain weight.

I-am-Erk commented 4 years ago

There is a reasonable argument to not displaying hunger before around level 3-4, as was discussed on discord. Personally I think the key here is:

  1. As stated in the issue, hunger shouldn't be displayed while your belly is at sated or engorged level. This will mask a bit of the hunger noise right away, ensuring that if there's a significant amount of food in your stomach you won't get a hunger display.
  2. Low level hunger should be displayed in a way that is clearly downplayed, if it's displayed. I do think there is some value to displaying hunger in the level 2-3 area, personally, but it's not something I feel terribly strongly about.

@Marrim: Your argument appears to be entirely related to the hunger system that I'm talking about overhauling with this issue. How does your concern related to the much more complex hunger amalgam I'm talking about?

Marrim commented 4 years ago

Well, I've not had trouble with nutrition in my playthroughs once I understood how the system works, but: 1) The hunger display is essentially "time since last meal" right now and it doesn't really need any more granularity than full / satisfied / no message / hungry. 2) The daily messages about calorie deficit are redundant because you can already see your weight in the character screen, and weight is directly related to calorie deficit.

If you want players to be able to judge how they are faring nutrition-wise, but in a very limited way, it makes sense to keep it decoupled from the hunger indicator. Maybe revamp the daily log messages to reflect calories gained/calories spent in the last 12 hours? You could have specific messages for:

I-am-Erk commented 4 years ago

We're not interested in a hunger system that tracks net calories. Please read the issue to understand the goals and how the described system hopes to meet them

Marrim commented 4 years ago

Hrm. Maybe I don't get it, then. As I understood the issue, you want to accurately model whether the player character should feel hungry. Which you do by giving the player data that is more granular but at the same time less precise.

So the net effect would be this (percentages below are abstract): Let's say the player is 41% hungry. Instead of telling them vaguely "you are between 40% and 60% hungry" you add situational modifiers and then tell them "you are 53.4% hungry". What is the point of granularity if the number is wildly off due to complex amalgam of modifiers? You obviously don't want the player to feel confused about such an important thing as nutrition.

Because, yes, our bodies are bad at judging their needs, but if we do feel hungry despite having recently eaten, we generally do know why that is. In the game, we would have no idea and it would just make the whole system seem buggy... ...unless the game gave is little hints like "reading this book makes you feel hungry" or "the stress makes you ravenous, a meal would calm you down".

I-am-Erk commented 4 years ago

you add situational modifiers and then tell them "you are 53.4% hungry" This specifically doesn't do that. It fuzzes the numbers quite a lot to keep it fairly vague. The amount of fuzz is up for debate, as mentioned above. I would suggest we don't display anything until you are at at least level 2-3 hunger, which corresponds to a fully empty stomach and some time since you've eaten.

if we do feel hungry despite having recently eaten, we generally do know why that is. In the game, we would have no idea If you have recently eaten a large amount, you'd get a sated message, which overrides hunger display.

if you've recently eaten a moderate or small amount, you should have food in your guts and stomach. If that's the case, then your main sources of hunger are:

You'd have to be pretty high on those to register a hunger message at all, unless your stomach and guts are also both totally empty or you're critically underweight.

There are really only two large sources of hunger here:

The rest are small changes to the overall level that, on their own, shouldn't be generating hunger messages.

Marrim commented 4 years ago

Ah, the part about not displaying anything until 2-3 levels of hungry is very important. Thanks for clarifying.

Though is it actually realistic for overweight characters to get hungry (subjectively) slower? The way hormones work, body fat tends to mess up a person's ability to feel full, which can lead to a vicious cycle where they eat more, not less.

I-am-Erk commented 4 years ago

The only time obesity will affect hunger gain rate is as compared to being at a desperately low BMI, where your hunger rate gets amplified mostly to let you know you're starving. We're probably not going to delve into obesity related effects on hunger otherwise... the literature is way too fuzzy on details, and it's kind of crossing that line where the information we give the player is again getting so blurred as to be useless.

There would be some downstream stuff where obesity causes you to get weary faster, and thus to feel hungry sooner, but that's about it.

github-actions[bot] commented 1 year ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. Please do not bump or comment on this issue unless you are actively working on it. Stale issues, and stale issues that are closed are still considered.

I-am-Erk commented 1 year ago

I'm kinda sad we haven't seen this one yet but I think it's all still relevant.