From: cohrs Date: Sun, 14 Jul 2002 03:06:19 +0000 (+0000) Subject: B04005 - leash and uncontrolled teleportation X-Git-Tag: MOVE2GIT~2642 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=909e262a6f9c191f32049fadc0ca14282093fd4e;p=nethack B04005 - leash and uncontrolled teleportation reported that after an uncontrolled teleport due to eating a leprechaun, his leashed pet was still leashed until he took one more step. The usual approach which included disallowing the teleport seemed wrong in this case, so I put in an abbreviated version that does its checks but does not disallow the teleport. The pet teleports with you in the same cases as other teleports, but when it doesn't, the leash snaps loose. --- diff --git a/doc/fixes34.1 b/doc/fixes34.1 index 49024180f..1ac07ca39 100644 --- a/doc/fixes34.1 +++ b/doc/fixes34.1 @@ -163,6 +163,7 @@ avoid crash when drinking a potion causes the hero to float up over a fire trap, for example, which might try to destroy the in-use potion in some situations, if hero stood still, a hostile dwarf would switch back and forth between weapon and pick-axe and never move +uncontrolled teleports did not handle leashed pets Platform- and/or Interface-Specific Fixes diff --git a/src/allmain.c b/src/allmain.c index 9dc130c1d..1c315841c 100644 --- a/src/allmain.c +++ b/src/allmain.c @@ -221,17 +221,18 @@ moveloop() if(!u.uinvulnerable) { if(Teleportation && !rn2(85)) { -#ifdef REDO xchar old_ux = u.ux, old_uy = u.uy; -#endif tele(); -#ifdef REDO if (u.ux != old_ux || u.uy != old_uy) { + if (!next_to_u()) { + check_leash(old_ux, old_uy); + } +#ifdef REDO /* clear doagain keystrokes */ pushch(0); savech(0); - } #endif + } } /* delayed change may not be valid anymore */ if ((change == 1 && !Polymorph) ||