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

Eliminate "Peckish" #39760

Merged
merged 2 commits into from
May 15, 2020
Merged

Eliminate "Peckish" #39760

merged 2 commits into from
May 15, 2020

Conversation

kevingranade
Copy link
Member

Summary

SUMMARY: None

Purpose of change

People frequently report confusion around the "Peckish" message being displayed as a hunger signal, either linked to counterproductive behaviour such as overeating or just eroding confidence in feedback.

Describe the solution

Simply display nothing, the absence of an explicit hunger or satiety message means "I could eat, but don't need to".

Describe alternatives you've considered

There have been a huge number of alternatives proposed, but this is the simplest and most direct that doesn't also make things inaccurate.
Something I want to do in the future is to essentially turn this into a utility curve by simply combining stomach contents and time since ate and overall calorie load to generate a hunger score, and reporting what threshold that is at.

Testing

Have a character wait until hungry, then eat something tiny, then wait about 15 minutes, after 15 minutes it should toggle from "Hungry" to no message. Wait some more and it should toggle back to "Hungry". (It might toggle back after 15 minutes depending on digestion speed)
Start with a hungry character, eat a significant meal, the message should toggle directly from "Hungry" to "Full".
Have a character at "Engorged", then wait for 3 hours. It should toggle from "Engorged" to "Sated" to no message to "Hungry".

} else if( ( stomach.time_since_ate() > 90_minutes && contains < cap / 8 && recently_ate ) ||
( just_ate && contains > 0_ml && contains < cap * 3 / 8 ) ) {
hunger_string = _( "Peckish" );
hunger_color = c_dark_gray;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Probably better to merge the branch condition into the next branch, otherwise people may see "Hungry/Very Hungry" when they would have see "Peckish" before this change.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I carefully analyzed that, and that's also why I outlined the testing I did.
As far as I can tell, "Peckish" only ever kicked in instead of no message, so now it should just go to no message as intended. Also this logic had gotten significantly over-complicated.
If you're hungry and start eating, you should still see hungry until either 15 minutes have passed OR you reach 3 / 8 stomach fullness.
If you're full and passing time as your stomach empties out, it should go from "Sated" to no message, then to Hungry.
If you're hungry and eat a small snack, it should go from hungry to no message and back to hungry, unless the snack is so small that your stomach empties out within 15 minutes, in which case it never budges from hungry.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As far as I can tell, "Peckish" only ever kicked in instead of no message

If just_ate is true, "Peckish" may kick in but no message may not. For example, if the stomach content is between 1/8 and 3/8, and time since last ate is larger than 0.25 hrs, then no hunger message is displayed. If at this time the player eats something small (such as a pill of aspirin?), then time since last ate becomes 0 and stomach content is still below 3/8. Before this change "Peckish" would have been displayed, and after this change "Hungry" would be displayed.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Going from no message to "peckish" when you eat and going from no message to "hungry" when you eat are both bugs, so restoring the old behaviour isn't a fix.
The only pertinent part of that logic is "just ate", everything else is redundant. The problem is, if we don't exclude "just ate" from the no message case, then "hungry" will always disappear immediately upon you eating anything, which is most likely going to make people think "eat one thing and then stop" is what the game wants them to do.

I can't see any way to resolve this without overhauling the whole thing, the scenario of "eating a tic-tack when your stomach is almost empty makes the game say you're hungry" is unintended, but it's the least bad alternative I can see, and it's no worse than the status quo.

@ZhilkinSerg ZhilkinSerg added [C++] Changes (can be) made in C++. Previously named `Code` Mechanics: Character / Player Character / Player mechanics labels Apr 22, 2020
@kwl01skz
Copy link
Contributor

Last August, I planned to deal with the matter, but for many reasons, I stayed at home without a computer until I came back last week.
My idea is to focus only on whether the stomach is full. Only when the character feels that the blood sugar is too low, there will be other prompts. In fact, in the absence of food, some people will eat kaolin (a substance that does not contain calories and can only fill the stomach) to deceive the stomach and avoid hunger. Of course, he will eventually die due to insufficient calories.

@Ramza13 Ramza13 mentioned this pull request May 7, 2020
@ZhilkinSerg ZhilkinSerg merged commit 96b6e0d into master May 15, 2020
@kevingranade kevingranade deleted the kevingranade-peckectomy branch May 21, 2020 05:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[C++] Changes (can be) made in C++. Previously named `Code` Mechanics: Character / Player Character / Player mechanics
Projects
None yet
Development

Successfully merging this pull request may close these issues.

4 participants