Files
nethack/dat/knox.lua
2022-05-10 11:26:52 -04:00

168 lines
6.7 KiB
Lua

-- NetHack knox knox.lua $NHDT-Date: 1652196027 2022/05/10 15:20:27 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.5 $
-- Copyright (c) 1989 by Jean-Christophe Collet
-- Copyright (c) 1992 by Izchak Miller
-- NetHack may be freely redistributed. See license for details.
--
--
des.level_init({ style = "solidfill", fg = " " });
des.level_flags("mazelevel", "noteleport")
-- Fort's entry is via a secret door rather than a drawbridge;
-- the moat must be manually circumvented.
des.map([[
----------------------------------------------------------------------------
| |........|...............................................................|
| |........|.................................................------------..|
| --S----S--.................................................|..........|..|
| # |........}}}}}}}....................}}}}}}}..........|..........|..|
| # |........}-----}....................}-----}..........--+--+--...|..|
| # ---........}|...|}}}}}}}}}}}}}}}}}}}}}}|...|}.................|...|..|
| # |..........}---S------------------------S---}.................|...|..|
| # |..........}}}|...............|..........|}}}.................+...|..|
| --S----..........}|...............S..........|}...................|...|..|
| |.....|..........}|...............|......\...S}...................|...|..|
| |.....+........}}}|...............|..........|}}}.................+...|..|
| |.....|........}---S------------------------S---}.................|...|..|
| |.....|........}|...|}}}}}}}}}}}}}}}}}}}}}}|...|}.................|...|..|
| |..-S----......}-----}....................}-----}..........--+--+--...|..|
| |..|....|......}}}}}}}....................}}}}}}}..........|..........|..|
| |..|....|..................................................|..........|..|
| -----------................................................------------..|
| |..............................................................|
----------------------------------------------------------------------------
]]);
-- Non diggable walls
des.non_diggable(selection.area(00,00,75,19))
-- Portal arrival point
des.levregion({ region = {08,16,08,16}, type="branch" });
-- accessible via ^V in wizard mode; arrive near the portal
des.teleport_region({ region = {06,15,09,16}, dir="up" })
des.teleport_region({ region = {06,15,09,16}, dir="down" })
-- Throne room, with Croesus on the throne
des.region({ x1=37,y1=08,x2=46,y2=11, lit=1, type="throne", filled=1 })
-- 50% chance each to move throne and/or fort's entry secret door up one row
if percent(50) then
des.monster({ id = "Croesus", x=43, y=10, peaceful = 0 })
else
des.monster({ id = "Croesus", x=43, y=09, peaceful = 0 })
des.terrain(43,09, "\\")
des.terrain(43,10, ".")
end
if percent(50) then
des.terrain(47,09, "S")
des.terrain(47,10, "|")
end
-- The Vault
function treasure_spot(x,y)
des.gold({ x = x, y = y, amount = 600 + math.random(0, 300) });
if (math.random(0,2) == 0) then
if (math.random(0,2) == 0) then
des.trap("spiked pit", x,y);
else
des.trap("land mine", x,y);
end
end
end
des.region({ region={21,08,35,11}, lit=1, type="ordinary" })
local treasury = selection.area(21,08,35,11);
treasury:iterate(treasure_spot);
-- Vault entrance also varies
if percent(50) then
des.terrain(36,09, "|")
des.terrain(36,10, "S")
end
-- Corner towers
des.region(selection.area(19,06,21,06),"lit")
des.region(selection.area(46,06,48,06),"lit")
des.region(selection.area(19,13,21,13),"lit")
des.region(selection.area(46,13,48,13),"lit")
-- A welcoming committee
des.region({ region={03,10,07,13},lit=1,type="zoo",filled=1,irregular=1 })
-- arrival chamber; needs to be a real room to control migrating monsters,
-- and `unfilled' is a kludge to force an ordinary room to remain a room
des.region({ region={06,15,09,16},lit=0,type="ordinary",arrival_room=true })
-- 3.6.2: Entering level carrying a lit candle would show the whole entry
-- chamber except for its top right corner even though some of the revealed
-- spots are farther away than that is. This is because the lit treasure zoo
-- is forcing the walls around it to be lit too (see light_region(sp_lev.c)),
-- and lit walls show up when light reaches the spot next to them. The unlit
-- corner is beyond candle range and isn't flagged as lit so it doesn't show
-- up until light reaches it rather than when light gets next to it.
--
-- Force left and top walls of the arrival chamber to be unlit in order to
-- hide this lighting quirk.
des.region(selection.area(05,14,05,17),"unlit")
des.region(selection.area(05,14,09,14),"unlit")
-- (Entering the treasure zoo while blind and then regaining sight might
-- expose the new oddity of these walls not appearing when on the lit side
-- but that's even less likely to occur than the rare instance of entering
-- the level with a candle. They'll almost always be mapped from the arrival
-- side before entering the treasure zoo.
--
-- A prior workaround lit the top right corner wall and then jumped through
-- hoops to suppress the extra light in the 3x3 lit area that produced.
-- This is simpler and makes the short range candle light behave more like
-- it is expected to work.)
-- Barracks
des.region({ region={62,03,71,04},lit=1,type="barracks",filled=1,irregular=1 })
-- Doors
des.door("closed",06,14)
des.door("closed",09,03)
des.door("open",63,05)
des.door("open",66,05)
des.door("open",68,08)
des.door("locked",08,11)
des.door("open",68,11)
des.door("closed",63,14)
des.door("closed",66,14)
des.door("closed",04,03)
des.door("closed",04,09)
-- Soldiers guarding the fort
des.monster("soldier",12,14)
des.monster("soldier",12,13)
des.monster("soldier",11,10)
des.monster("soldier",13,02)
des.monster("soldier",14,03)
des.monster("soldier",20,02)
des.monster("soldier",30,02)
des.monster("soldier",40,02)
des.monster("soldier",30,16)
des.monster("soldier",32,16)
des.monster("soldier",40,16)
des.monster("soldier",54,16)
des.monster("soldier",54,14)
des.monster("soldier",54,13)
des.monster("soldier",57,10)
des.monster("soldier",57,09)
des.monster("lieutenant",15,08)
-- Possible source of a boulder
des.monster("stone giant",03,01)
-- Four dragons guarding each side
des.monster("D",18,09)
des.monster("D",49,10)
des.monster("D",33,05)
des.monster("D",33,14)
-- Eels in the moat
des.monster("giant eel",17,08)
des.monster("giant eel",17,11)
des.monster("giant eel",48,08)
des.monster("giant eel",48,11)
-- The corner rooms treasures
des.object("diamond",19,06)
des.object("diamond",20,06)
des.object("diamond",21,06)
des.object("emerald",19,13)
des.object("emerald",20,13)
des.object("emerald",21,13)
des.object("ruby",46,06)
des.object("ruby",47,06)
des.object("ruby",48,06)
des.object("amethyst",46,13)
des.object("amethyst",47,13)
des.object("amethyst",48,13)