From c194ec3dc90cf3fbda8d43d4b9b8c592401efbc2 Mon Sep 17 00:00:00 2001 From: "John \"Elwin\" Edwards" Date: Sat, 28 Jan 2017 11:45:36 -0500 Subject: [PATCH] Fix the perpetual haste cheat. Rogue V3 allowed the player to gain perpetual haste by quaffing a potion of haste while already hasted. This is supposed to remove the haste effect and cause temporary paralysis. Super-Rogue removed haste correctly, but gave confusing messages. --- rogue3/misc.c | 5 ++++- rogue3/potions.c | 4 ++-- rogue3/rogue.h | 2 +- srogue/potions.c | 1 - srogue/pstats.c | 8 ++++++-- srogue/rings.c | 1 - 6 files changed, 13 insertions(+), 8 deletions(-) diff --git a/rogue3/misc.c b/rogue3/misc.c index 115e6ff..3aef05f 100644 --- a/rogue3/misc.c +++ b/rogue3/misc.c @@ -320,20 +320,23 @@ chg_str(int amt) * add a haste to the player */ -void +bool add_haste(int potion) { if (on(player, ISHASTE)) { msg("You faint from exhaustion."); no_command += rnd(8); + player.t_flags &= ~ISHASTE; extinguish(nohaste); + return FALSE; } else { player.t_flags |= ISHASTE; if (potion) fuse(nohaste, 0, rnd(4)+4, AFTER); + return TRUE; } } diff --git a/rogue3/potions.c b/rogue3/potions.c index d4173a4..72d8bb4 100644 --- a/rogue3/potions.c +++ b/rogue3/potions.c @@ -158,8 +158,8 @@ quaff() p_know[P_XHEAL] = TRUE; sight(); when P_HASTE: - add_haste(TRUE); - msg("You feel yourself moving much faster."); + if (add_haste(TRUE)) + msg("You feel yourself moving much faster."); p_know[P_HASTE] = TRUE; when P_RESTORE: msg("Hey, this tastes great. It make you feel warm all over."); diff --git a/rogue3/rogue.h b/rogue3/rogue.h index 33a91e2..5482aeb 100644 --- a/rogue3/rogue.h +++ b/rogue3/rogue.h @@ -511,7 +511,7 @@ void _detach(struct linked_list **list, struct linked_list *i void _free_list(struct linked_list **ptr); char * _new(size_t size); int add_dam(str_t *str); -void add_haste(int potion); +bool add_haste(int potion); void add_pack(struct linked_list *item, int silent); void add_pass(void); void addmsg(char *fmt, ...); diff --git a/srogue/potions.c b/srogue/potions.c index 35ab448..e1066ac 100644 --- a/srogue/potions.c +++ b/srogue/potions.c @@ -197,7 +197,6 @@ quaff(void) when P_HASTE: if (!curse) { add_haste(TRUE); - msg("You feel yourself moving much faster."); p_know[P_HASTE] = TRUE; } when P_INVINC: diff --git a/srogue/pstats.c b/srogue/pstats.c index dcdef66..b197c86 100644 --- a/srogue/pstats.c +++ b/srogue/pstats.c @@ -148,10 +148,14 @@ add_haste(bool potion) } else { player.t_flags |= ISHASTE; - if (potion) + if (potion) { fuse(nohaste, TRUE, roll(10,10)); - else + msg("You feel yourself moving much faster."); + } + else { fuse(nohaste, TRUE, roll(40,20)); + msg("You find yourself moving much faster."); + } } } diff --git a/srogue/rings.c b/srogue/rings.c index 5549050..5951449 100644 --- a/srogue/rings.c +++ b/srogue/rings.c @@ -84,7 +84,6 @@ ring_on(void) } else { add_haste(FALSE); - msg("You find yourself moving must faster."); } when R_GIANT: /* to 24 */ him->s_ef.a_str = MAXSTR;