diff --git a/dat/vaults.des b/dat/vaults.des index f6c7792..7ec03c4 100644 --- a/dat/vaults.des +++ b/dat/vaults.des @@ -24,7 +24,6 @@ # is a check whether there's actual free space behind the door, outside the room) # - SUBROOM does not work. (causes a crash occasionally. try with fake delphi) # - cannot do split rooms. (can do, with MAP-ENDMAP & REGIONs) -# - Player is occasionally put into a corner of the map. Why? # # TODO: # - FLAGS: unique diff --git a/src/sp_lev.c b/src/sp_lev.c index 3dd75c0..578539c 100644 --- a/src/sp_lev.c +++ b/src/sp_lev.c @@ -471,18 +471,23 @@ flip_level(int flp) struct engr *etmp; struct mkroom *sroom; - /* stairs and ladders */ + /* + * stairs and ladders + * + * DO NOT flip stairs or ladders in the sentinel position (x = 0), + * otherwise players will spawn in level corners surrounded by rock. + */ if (flp & 1) { - yupstair = y2 - yupstair; - ydnstair = y2 - ydnstair; - yupladder = y2 - yupladder; - ydnladder = y2 - ydnladder; + if (xupstair) yupstair = y2 - yupstair; + if (xdnstair) ydnstair = y2 - ydnstair; + if (xupladder) yupladder = y2 - yupladder; + if (xdnladder) ydnladder = y2 - ydnladder; } if (flp & 2) { - xupstair = x2 - xupstair; - xdnstair = x2 - xdnstair; - xupladder = x2 - xupladder; - xdnladder = x2 - xdnladder; + if (xupstair) xupstair = x2 - xupstair; + if (xdnstair) xdnstair = x2 - xdnstair; + if (xupladder) xupladder = x2 - xupladder; + if (xdnladder) xdnladder = x2 - xdnladder; } /* traps */