]> granicus.if.org Git - nethack/commitdiff
avoid becoming stunned due to level teleporting
authorPatR <rankin@nethack.org>
Tue, 28 Jun 2022 19:37:06 +0000 (12:37 -0700)
committerPatR <rankin@nethack.org>
Tue, 28 Jun 2022 19:37:06 +0000 (12:37 -0700)
Reported by entrez:  the code to have a hero become stunned for 1..3
turns when going though a level teleporter trap effectively negated
teleport control (except in wizard mode which is probably why this
slipped through).  Make the effect happen after level_tele instead of
before, change it from being stunned to being confused, and only
happen if hero lacks teleport control.

The association between confusion and level teleportation already
exists and this might be just enough of a hint for someone who isn't
aware of that yet to figure it out.  (Probably just wishing thinking.)

Magic portal traversal hasn't changed; it still causes brief stun.

doc/fixes3-7-0.txt
src/teleport.c

index f0805d2523fcff94850e8770f6e6cd6bdae1dbc0..ca4ef5a93e08605c3d089f5106b53cf99a4ab710 100644 (file)
@@ -826,7 +826,8 @@ if a lit potion of oil on the floor was launched by an explosion and it hit
        tried to extinguish it as a light source
 place_object() validated coordinates after using them to index level.objects
 killed rope golem may drop leashes and bullwhips
-using magic portals and level teleporters stuns hero for a few turns
+using magic portals stuns hero for a few turns
+using level teleporters confuses hero without teleport control for a few turns
 clear obj->bypass for buried objects [a giant on ice triggers a fire trap,
        inventory is subjected to burning and surviving objects have their
        bypass bit set, giant is killed by fire trap and drops a boulder and
index 2ca62ab655089e5aaf91838597342fefee697656..a92fbe72fa245cfb663ad88659999e0c97727e3e 100644 (file)
@@ -1194,10 +1194,15 @@ level_tele_trap(struct trap* trap, unsigned int trflags)
         You("are momentarily blinded by a flash of light.");
     else
         You("are momentarily disoriented.");
-    make_stunned((HStun & TIMEOUT) + 3L, FALSE);
     deltrap(trap);
     newsym(u.ux, u.uy); /* get rid of trap symbol */
     level_tele();
+    /* magic portal traversal causes brief Stun; for level teleport, use
+       confusion instead, and only when hero lacks control; do this after
+       processing the level teleportation attempt because being confused
+       can affect the outcome ("Oops" result) */
+    if (!Teleport_control)
+        make_confused((HConfusion & TIMEOUT) + 3L, FALSE);
 }
 
 /* check whether monster can arrive at location <x,y> via Tport (or fall) */
@@ -1575,14 +1580,8 @@ mlevel_tele_trap(
             if (trap)
                 seetrap(trap);
         }
-        /*
-         * Commit 6a65b412 stated "Using magic portals and level teleporters
-         * stuns for a few turns. It's taxing to teleport long distances."
-         *
-         * In keeping with that stated intent, restrict the stunning effect.
-         */
-        if (is_xport(tt))
-            mtmp->mstun = 1;
+        if (is_xport(tt) && !control_teleport(mtmp->data))
+            mtmp->mconf = 1;
         migrate_to_level(mtmp, ledger_no(&tolevel), migrate_typ, (coord *) 0);
         return Trap_Moved_Mon; /* no longer on this level */
     }