<!--
### How to use
Leave the headings unless they don't apply to your PR, rep…lace commented out text ( surrounded with <!-- and --> ) with text describing your PR.
-->
#### Summary
<!--
A one-line description of your change that will be extracted and added to the project changelog at https://github.com/CleverRaven/Cataclysm-DDA/blob/master/data/changelog.txt
The format is: ```SUMMARY: Category "description"```
The categories to choose from are: Features, Content, Interface, Mods, Balance, Bugfixes, Performance, Infrastructure, Build, I18N
Example: ```SUMMARY: Content "Adds new mutation category 'Mouse'"```
See the Changelog Guidelines at https://github.com/CleverRaven/Cataclysm-DDA/blob/master/doc/CHANGELOG_GUIDELINES.md for explanations of the categories.
-->
```SUMMARY: Features "Hunger becomes based on stomach volume instead of kCal"```
#### Purpose of change
<!--
If there's an existing issue describing the problem this PR addresses or the feature it adds, please link it like: ```#1234```
If it *fully* resolves an issue, link it like: ```Fixes #1234```
Even if the issue describes the problem, please provide a few-sentence summary here.
Example: ```Fixes #1234 - XL mutants cannot wear arm/leg splints due to missing OVERSIZE flag.```
If there is no related issue, please describe the issue you are addressing, including how to trigger a bug if this is a bugfix.
-->
Currently it's really weird that if you're starving to death you can eat like 10 hamburgers to fill yourself up. I propose making hunger more related to stomach contents, and additionally change the death checks for starvation to be based on the amount of calories you have available to you. This will lay important groundwork for a future fat effects system. It already adds the storage part, but is capped because getting fat has no negative effects for now.
Closes #25586
#### Describe the solution
<!--
How does the feature work, or how does this fix a bug?
The easier you make your solution to understand, the faster it can get merged.
-->
I basically simulate the stomach and digestive system.
1) When you eat a piece of food, that will be added to your stomach.
2) You digest food at a slow rate. no longer do you immediately absorb all the food that you eat. Water is also not absorbed immediately, but is still absorbed quite quickly.
I have changed what the hunger message on the UI means, due to starvation not really being the same thing anymore.
Gorged, Sated, and Full are directly related to how much food is in your stomach. Any character can have these descriptions now.
You are "Hungry" if it's been a few hours since you've eaten. (not related to how much you eat!)
You are "Very Hungry" if you are "Hungry", and additionally if you have a calorie deficit.
You are "Famished" if your body is running off of fat stores totally, and have a calorie deficit.
Since hunger doesn't determine your death anymore, I have added a "calorie storage" to players, such that when it hits 0 you have died from starvation. At a healthy weight, a person can survive for roughly 45 days until death. I have also added a few calories to the player's stomach at the start of the game as well, to avoid "Very Hungry" and "Famished" at game start. A Player burns roughly 8 kcal every 5 minutes, with modifiers based on metabolism. I have added the stomach information to the "check game state..." debug option as well.
#### Additional context
<!--
Add any other context (such as mock-ups, proof of concepts or screenshots) about the feature or bugfix here.
-->
Really needs some playtesting. I've gotten all the most obvious bugs as of now.
Also open to suggestions of altering the hunger logic
Also, I seem to have accidentally astyled a couple files on the blacklist. i'll open a separate PR to handle that so I don't have to figure out how to un-astyle it.
replace get_hunger():
- [x] Ruminant eat underbrush
- [x] grazer eat grass
- [x] proboscis/hummingbird eat nectar
- [x] marloss hunger check (iexamine.cpp line 1977)
- [x] mutagen starvation
- [x] player::activate_mutation()
- [x] mutation_iu.cpp line 293
- [x] player::recalc_speed_bonus line 1686
- [x] player::is_hibernating line 4683 (and other hibernation related things)
- [x] player::suffer() line 5279 (roots need some food value)
- [x] player::suffer() line 5659 (jittery)
- [x] player::check_and_recover_morale() line 6839
- [x] player::rooted() line 7418
- [x] player_display.cpp line 282, line 683
- [x] player_hardcoded_effects.cpp line 1035
- [x] player::metabolic_rate() line 343
review mutations:
- [x] Light Eater, Fast Metabolism, Very Fast Metabolism, Extreme Metabolism and Rapid Metabolism
- [x] Heat Dependent, Very Heat Dependent, Cold Blooded and Ectothermic (though speed of digestion must have been affected by cold-bloodiness too)
- [x] Gourmand (you can eat and drink more, than anyone else)
- [x] Phelloderm, Leaves, Toe Roots, Roots, Rooter, Chloromorphosis and Freshwater Osmosis feed and hydrate your body bypassing digestive system
- [x] Ruminant, Grazer, Intestinal Fortitude, Eater Of The Dead, and Alcohol Metabolism
- [x] Saprophage: you can still consume 'food', though, if you have to: you merely prefer it aged a little which suggests that your digestive system is really more like of a plant and might not follow the same concepts
- [x] Gizzard seem to be a direct change to stomach specifically
- [x] Mycus Feeder
- [x] Hibernation
- [x] Omnicellular (well, looks like you don't digest food anymore and just 'absorb' it instead)
misc:
- [x] heat calculation
- [x] finish hunger logic
- [x] set effects based on how close to starved you are
- [x] remove get_starvation() in favor of stored kcal value
- [x] reassess old hunger effects into new system via hunger or stored kcal
these are items that need to be addressed in a separate PR:
- review bionics that do more than affect metabolism
- Fat Deposits (was already mentioned)
- Inconveniently Large, Large, Freakishly Huge, Huge, Little, Tiny and Unassuming
- Hyper-Metabolism
requires #28572