From: PatR Date: Fri, 22 Apr 2016 09:12:10 +0000 (-0700) Subject: Ft.Ludios entrance (fort's entry, not level entry) X-Git-Tag: NetHack-3.6.1_RC01~816 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=117334b20e143ce4bd9b132d4e0761b36b8d4bac;p=nethack Ft.Ludios entrance (fort's entry, not level entry) 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. --- diff --git a/dat/knox.des b/dat/knox.des index bf602c1ed..48cef7414 100644 --- a/dat/knox.des +++ b/dat/knox.des @@ -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" diff --git a/doc/fixes36.1 b/doc/fixes36.1 index af6dc5210..d59419478 100644 --- a/doc/fixes36.1 +++ b/doc/fixes36.1 @@ -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 " turns into !" was given, could be "it" (if sensed telepathically and 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 diff --git a/src/dungeon.c b/src/dungeon.c index 82610573a..0d2c93466 100644 --- a/src/dungeon.c +++ b/src/dungeon.c @@ -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;