From: Pasi Kallinen Date: Tue, 10 Mar 2020 06:02:08 +0000 (+0200) Subject: Prevent wizmode panic X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=67d3cd31f82109790bacab632941eebb8e6f6448;p=nethack Prevent wizmode panic In wizard mode, if you angered your quest leader and got expelled from the quest (which removes the quest portal from the dungeon), then used the wizmode level teleport menu to teleport back to the quest start and talked with the angry leader, you would get booted back to the dungeon, and the game panicked because the dungeon end of the portal didn't exist anymore. --- diff --git a/src/do.c b/src/do.c index 114cfe03a..cb7480e68 100644 --- a/src/do.c +++ b/src/do.c @@ -1506,10 +1506,21 @@ boolean at_stairs, falling, portal; if (ttrap->ttyp == MAGIC_PORTAL) break; - if (!ttrap) - panic("goto_level: no corresponding portal!"); - seetrap(ttrap); - u_on_newpos(ttrap->tx, ttrap->ty); + if (!ttrap) { + if (u.uevent.qexpelled && Is_qstart(&u.uz0)) { + /* we're coming back from the quest home level, after + already getting expelled once. The portal back doesn't + exist anymore - see expulsion(). This can only happen + in wizmode. + */ + u_on_rndspot(0); + } else { + panic("goto_level: no corresponding portal!"); + } + } else { + seetrap(ttrap); + u_on_newpos(ttrap->tx, ttrap->ty); + } } else if (at_stairs && !In_endgame(&u.uz)) { if (up) { if (g.at_ladder)