# HG changeset patch # User John "Elwin" Edwards # Date 1485621936 18000 # Node ID e7862a02160906bccb3802624cb654e5c7709852 # Parent d08f19d529ebce06382fbc101973ffedce559bc7 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. diff -r d08f19d529eb -r e7862a021609 rogue3/misc.c --- a/rogue3/misc.c Wed Jul 20 20:44:41 2016 -0400 +++ b/rogue3/misc.c Sat Jan 28 11:45:36 2017 -0500 @@ -320,20 +320,23 @@ * 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 -r d08f19d529eb -r e7862a021609 rogue3/potions.c --- a/rogue3/potions.c Wed Jul 20 20:44:41 2016 -0400 +++ b/rogue3/potions.c Sat Jan 28 11:45:36 2017 -0500 @@ -158,8 +158,8 @@ 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 -r d08f19d529eb -r e7862a021609 rogue3/rogue.h --- a/rogue3/rogue.h Wed Jul 20 20:44:41 2016 -0400 +++ b/rogue3/rogue.h Sat Jan 28 11:45:36 2017 -0500 @@ -511,7 +511,7 @@ 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 -r d08f19d529eb -r e7862a021609 srogue/potions.c --- a/srogue/potions.c Wed Jul 20 20:44:41 2016 -0400 +++ b/srogue/potions.c Sat Jan 28 11:45:36 2017 -0500 @@ -197,7 +197,6 @@ when P_HASTE: if (!curse) { add_haste(TRUE); - msg("You feel yourself moving much faster."); p_know[P_HASTE] = TRUE; } when P_INVINC: diff -r d08f19d529eb -r e7862a021609 srogue/pstats.c --- a/srogue/pstats.c Wed Jul 20 20:44:41 2016 -0400 +++ b/srogue/pstats.c Sat Jan 28 11:45:36 2017 -0500 @@ -148,10 +148,14 @@ } 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 -r d08f19d529eb -r e7862a021609 srogue/rings.c --- a/srogue/rings.c Wed Jul 20 20:44:41 2016 -0400 +++ b/srogue/rings.c Sat Jan 28 11:45:36 2017 -0500 @@ -84,7 +84,6 @@ } else { add_haste(FALSE); - msg("You find yourself moving must faster."); } when R_GIANT: /* to 24 */ him->s_ef.a_str = MAXSTR;