From 2f497c620ef05a4118e87b6a0505b46080ef559c Mon Sep 17 00:00:00 2001 From: cohrs Date: Fri, 25 Mar 2005 20:30:24 +0000 Subject: [PATCH] M29 - unconscious effects when not unconscious While auditing nomul() I noticed unconscious() treats (multi < 0 && !nomovemsg) as unconscious. This explains the behavior in M29 (unconscious message while performing #turn). I checked all the places with this combination, and found a few that did not appear to fall under the "unconscious" category. Most I changed to use You_can_move_again to ensure the same display w/o the unconscious behavior. Also: - found another string that unconscious() should have considered - vomit() now sets nomovemsg, one caller was also doing this redundantly - vomiting_dialogue() was calling stop_occupation() after vomit(), which can reset multi. I reversed the order and removed a doubly-redundant nomul call. tele() still has a problem: some cases where multi < 0 should probably take a branch like the unconscious() branch but with a different message. doturn()'s behavior - turn then wait - is also less than perfect, but I think this is a known problem. --- doc/fixes34.4 | 1 + src/dothrow.c | 2 +- src/eat.c | 3 +-- src/mhitu.c | 2 +- src/pray.c | 2 +- src/timeout.c | 7 +++---- src/trap.c | 3 ++- src/uhitm.c | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) diff --git a/doc/fixes34.4 b/doc/fixes34.4 index 07d2016c9..ddde661b1 100644 --- a/doc/fixes34.4 +++ b/doc/fixes34.4 @@ -104,6 +104,7 @@ monster's aggravation spell now affects meditating monsters busy pet won't miss out upon ascension fix various places that "finally finished" could be displayed after the hero stopped doing something other than eating +fix some cases where movement was disallowed by the hero was still conscious Platform- and/or Interface-Specific Fixes diff --git a/src/dothrow.c b/src/dothrow.c index 9a735236a..32b52c4c4 100644 --- a/src/dothrow.c +++ b/src/dothrow.c @@ -633,7 +633,7 @@ hurtle(dx, dy, range, verbose) if(!range || (!dx && !dy) || u.ustuck) return; /* paranoia */ nomul(-range); - nomovemsg = 0; + nomovemsg = ""; /* it just happens */ if (verbose) You("%s in the opposite direction.", range > 1 ? "hurtle" : "float"); /* if we're in the midst of shooting multiple projectiles, stop */ diff --git a/src/eat.c b/src/eat.c index ebd74e276..5368ceb9a 100644 --- a/src/eat.c +++ b/src/eat.c @@ -213,7 +213,6 @@ choke(food) /* To a full belly all food is bad. (It.) */ } You("stuff yourself and then vomit voluminously."); morehungry(1000); /* you just got *very* sick! */ - nomovemsg = 0; vomit(); } else { killer.format = KILLED_BY_AN; @@ -2575,7 +2574,7 @@ vomit() /* A good idea from David Neves */ { make_sick(0L, (char *) 0, TRUE, SICK_VOMITABLE); nomul(-2); - nomovemsg = 0; + nomovemsg = You_can_move_again; } int diff --git a/src/mhitu.c b/src/mhitu.c index 661bdd112..67c892057 100644 --- a/src/mhitu.c +++ b/src/mhitu.c @@ -1108,7 +1108,7 @@ dopois: } else { if (Blind) You("are frozen!"); else You("are frozen by %s!", mon_nam(mtmp)); - nomovemsg = 0; /* default: "you can move again" */ + nomovemsg = You_can_move_again; nomul(-rnd(10)); exercise(A_DEX, FALSE); } diff --git a/src/pray.c b/src/pray.c index 5c3d772bb..e150a47cb 100644 --- a/src/pray.c +++ b/src/pray.c @@ -1738,7 +1738,7 @@ doturn() } } nomul(-5); - nomovemsg = 0; + nomovemsg = You_can_move_again; return(1); } diff --git a/src/timeout.c b/src/timeout.c index b712a03fa..373daa5b3 100644 --- a/src/timeout.c +++ b/src/timeout.c @@ -44,7 +44,7 @@ stoned_dialogue() case 3: /* limbs turned to stone */ stop_occupation(); nomul(-3); /* can't move anymore */ - nomovemsg = 0; + nomovemsg = You_can_move_again; /* not unconscious */ break; default: break; @@ -72,10 +72,9 @@ vomiting_dialogue() switch ((int) i) { case 0: - vomit(); - morehungry(20); stop_occupation(); - if (multi > 0) nomul(0); + morehungry(20); + vomit(); break; case 2: make_stunned(HStun + d(2,4), FALSE); diff --git a/src/trap.c b/src/trap.c index 082284a86..b29395ff3 100644 --- a/src/trap.c +++ b/src/trap.c @@ -2210,7 +2210,7 @@ glovecheck: target = which_armor(mtmp, W_ARMG); if (mtmp->mhp <= 0) trapkilled = TRUE; if (unconscious()) { multi = -1; - nomovemsg="The explosion awakens you!"; + nomovemsg = "The explosion awakens you!"; } break; @@ -4066,6 +4066,7 @@ unconscious() { return((boolean)(multi < 0 && (!nomovemsg || u.usleep || + !strncmp(nomovemsg,"You awake", 9) || !strncmp(nomovemsg,"You regain con", 14) || !strncmp(nomovemsg,"You are consci", 14)))); } diff --git a/src/uhitm.c b/src/uhitm.c index ac3405a3b..0d9a031b9 100644 --- a/src/uhitm.c +++ b/src/uhitm.c @@ -2328,7 +2328,7 @@ boolean wep_was_destroyed; You("momentarily stiffen."); } else { /* gelatinous cube */ You("are frozen by %s!", mon_nam(mon)); - nomovemsg = 0; /* default: "you can move again" */ + nomovemsg = You_can_move_again; nomul(-tmp); exercise(A_DEX, FALSE); }