From 5a31603680c2816bf9c690f69e78cb00a73c13c8 Mon Sep 17 00:00:00 2001 From: Alex Smith Date: Mon, 6 Nov 2017 01:28:48 +0000 Subject: [PATCH] Intentionally spoil foodpois mechanics when it happens One of the huge strengths of NetHack is that there's a lot of mechanical content in it; you can continue learning about the game more or less continuously, and when you die, it's usually possible to figure out what you did wrong and avoid that for future games. There are two parts to this: a) a death should only happen if the player didn't play perfectly, b) the nature of the problem should be clear. FoodPois status meets a) just fine, but not b); food poisoning mechanics tend (based on my research) to actively give the wrong impression to new players. (Normally, something along the lines of "corpses are sometimes randomly dangerous", which is insidious in the sense that it'll cause players to leave them as a last resort and thus never discover what they're doing wrong.) The easiest way to fix this is to explain what the rule is explicitly. Additionally, this should hopefully go some way towards changing the incorrect perception many people who haven't played (any/much) NetHack have that the game is arbitrarily cruel... It's important to get the "everything happens for a reason" attitude across from an early stage, by tying it to an event like this that's commonly seen by new plyers. Experienced players should not be affected much if at all by this change, because they hardly ever get food poisoning anyway. (Note: there are actually two main mechanics related to food poisoning, one widely applicable, one much more subtle. The message here is focused mainly on the common case, but doesn't actually contradict the rare case, and attentive players may be able to deduce both mechanics from the one message. Most likely, players will hit the common case, see the message, learn the common case, and some time later hit the rare case, get the message again, and read it more carefully this time.) --- src/eat.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/eat.c b/src/eat.c index a1b4bc33d..ae690a1b2 100644 --- a/src/eat.c +++ b/src/eat.c @@ -1616,6 +1616,8 @@ struct obj *otmp; sick_time = (Sick > 1L) ? Sick - 1L : 1L; make_sick(sick_time, corpse_xname(otmp, "rotted", CXN_NORMAL), TRUE, SICK_VOMITABLE); + + pline("(It must have died too long ago to be safe to eat.)"); } if (carried(otmp)) useup(otmp);