]> granicus.if.org Git - nethack/commitdiff
Ft.Ludios entrance (fort's entry, not level entry)
authorPatR <rankin@nethack.org>
Fri, 22 Apr 2016 09:12:10 +0000 (02:12 -0700)
committerPatR <rankin@nethack.org>
Fri, 22 Apr 2016 09:12:10 +0000 (02:12 -0700)
The code to apply an automatic annotation to the knox level was looking
for a drawbridge like on the castle level, but knox doesn't have any
drawbridge.  Look for its door instead.  (It's initially a secret door,
so won't be revealed via magic mapping.  It needs to be found or
destroyed to get mapped as a door or empty doorway in order to trigger
the annotation.)

Also, give a tiny bit of variation to the knox level layout.  It used
to have both the throne and the secret door on the lower of two similar
rows and the door into the treasure vault on the upper one.  Now each
of the three can be on either of those two rows (independently of each
other), making eight possibilities.  This doesn't accomplish much,
other than to make the secret door locations not always be at the same
fixed spot.

dat/knox.des
doc/fixes36.1
src/dungeon.c

index bf602c1ed8c7c1a7d04ccf2ad9f2730d95e925a5..48cef74144087b2026d85c85e28db23bed8c9e42 100644 (file)
@@ -6,6 +6,8 @@
 MAZE:"knox",' '
 FLAGS: noteleport
 GEOMETRY:center,center
+# Fort's entry is via a secret door rather than a drawbridge;
+# the moat must be manually circumvented.
 MAP
 ----------------------------------------------------------------------------
 | |........|...............................................................|
@@ -37,11 +39,27 @@ TELEPORT_REGION:(06,16,09,17),(0,0,0,0),up
 TELEPORT_REGION:(06,16,09,17),(0,0,0,0),down
 #   Throne room, with Croesus on the throne
 REGION:(37,08,46,11),lit,"throne"
-MONSTER:('@',"Croesus"),(43,10),hostile
+#   50% chance each to move throne and/or fort's entry secret door up one row
+IF [50%] {
+   MONSTER:('@',"Croesus"),(43,10),hostile
+} ELSE {
+   MONSTER:('@',"Croesus"),(43,09),hostile
+   TERRAIN:(43,09), '\'
+   TERRAIN:(43,10), '.'
+}
+IF [50%] {
+   TERRAIN:(47,09), 'S'
+   TERRAIN:(47,10), '|'
+}
 #   The Vault
 #   Using unfilled morgue for
 #   identification in mkmaze.c
 REGION:(21,08,35,11),lit,"morgue",unfilled
+#   Vault entrance also varies
+IF [50%] {
+   TERRAIN:(36,09), '|'
+   TERRAIN:(36,10), 'S'
+}
 #   Corner towers
 REGION:(19,06,21,06),lit,"ordinary"
 REGION:(46,06,48,06),lit,"ordinary"
index af6dc52101e202c6db3cfa1eb8dfdd3d61c7eb50..d59419478c18800452677a5f99519dc7719a2e8c 100644 (file)
@@ -216,6 +216,8 @@ for menustyles traditional or combination, 'A' (or object ID) followed by i
 exploding chest trap would destroy uchain while still worn if uball carried
 if monster shapechange message "<foo> turns into <bar>!" was given, <bar>
        could be "it" (if <foo> sensed telepathically and <bar> is mindless)
+automatic annotation for Ft.Ludios level got applied when a drawbridge became
+       mapped, but entry there is a secret door rather than a drawbridge
 
 post-3.6.0: fix "object lost" panic during pickup caused by sortloot revamp
 post-3.6.0: more sortloot revisions
index 82610573a6e33966b9592cd923f374896a32f392..0d2c934663d23c5dc74bdc6b4ff252088207ce71 100644 (file)
@@ -2465,6 +2465,9 @@ recalc_mapseen()
             /*  An automatic annotation is added to the Castle and
              *  to Fort Ludios once their structure's main entrance
              *  has been seen (in person or via magic mapping).
+             *  For the Fort, that entrance is just a secret door
+             *  which will be converted into a regular one when
+             *  located (or destroyed).
              * DOOR: possibly a lowered drawbridge's open portcullis;
              * DBWALL: a raised drawbridge's "closed door";
              * DRAWBRIDGE_DOWN: the span provided by lowered bridge,
@@ -2474,6 +2477,26 @@ recalc_mapseen()
              *  the adjacent DBWALL has been seen.
              */
             case DOOR:
+                if (Is_knox(&u.uz)) {
+                    int ty, tx = x - 4;
+
+                    /* Throne is four columns left, either directly in
+                     * line or one row higher or lower, and doesn't have
+                     * to have been seen yet.
+                     *   ......|}}}.
+                     *   ..\...S}...
+                     *   ..\...S}...
+                     *   ......|}}}.
+                     * For 3.6.0 and earlier, it was always in direct line:
+                     * both throne and door on the lower of the two rows.
+                     */
+                    for (ty = y - 1; ty <= y + 1; ++ty)
+                        if (isok(tx, ty) && IS_THRONE(levl[tx][ty].typ)) {
+                            mptr->flags.ludios = 1;
+                            break;
+                        }
+                    break;
+                }
                 if (is_drawbridge_wall(x, y) < 0)
                     break;
             /* else FALLTHRU */
@@ -2481,8 +2504,6 @@ recalc_mapseen()
             case DRAWBRIDGE_DOWN:
                 if (Is_stronghold(&u.uz))
                     mptr->flags.castle = 1, mptr->flags.castletune = 1;
-                else if (Is_knox(&u.uz))
-                    mptr->flags.ludios = 1;
                 break;
             default:
                 break;