Files
nethack/dat/Tou-loca.lua
copperwater 1abdaf1ddb Fix: prevent traps in shops in the Tourist quest
The Tourist locate and goal levels have 2 shops each, and also have
various traps randomly placed on the level. Unfortunately, this does not
account for placing them in the shops, so it was possible to wind up
with a magic trap or falling rock trap or whatever inside the shop,
which the shopkeeper would not clean up.

This commit makes selections that exclude the shop areas, and picks the
traps from those selections, keeping the shop floors trap-free as their
customers expect.
2022-09-22 23:42:01 -07:00

154 lines
6.0 KiB
Lua

-- NetHack Tourist Tou-loca.lua $NHDT-Date: 1652196015 2022/05/10 15:20:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $
-- Copyright (c) 1989 by Jean-Christophe Collet
-- Copyright (c) 1991,92 by M. Stephenson, P. Winner
-- NetHack may be freely redistributed. See license for details.
--
des.level_init({ style = "solidfill", fg = " " });
des.level_flags("mazelevel", "hardfloor")
des.map([[
----------------------------------------------------------------------------
|....|......|..........|......|......|...|....|.....|......|...............|
|....|......|.|------|.|......|......|.|.|....|..}..|......|.|----------|..|
|....|--+----.|......|.|-S---+|+-----|.|.S....|.....|---+--|.|..........+..|
|....|........|......|.|...|.........|.|------|..............|..........|-+|
|....+...}}...+......|.|...|.|-----|.|..............|--+----------------|..|
|----|........|------|.|---|.|.....|......|-----+-|.|.......|...........|--|
|............................|.....|.|--+-|.......|.|.......|...........|..|
|----|.....|-------------|...|--+--|.|....|.......|.|-----------+-------|..|
|....+.....+.........S...|...........|....|-------|........................|
|....|.....|.........|...|.|---------|....|.........|-------|.|----------|.|
|....|.....|---------|---|.|......|..+....|-------|.|.......|.+......S.\.|.|
|....|.....+.........S...|.|......|..|....|.......|.|.......|.|......|...|.|
|-------|..|.........|---|.|+-------------------+-|.|.......+.|----------|.|
|.......+..|---------|.........|.........|..........|.......|.|..........|.|
|.......|..............|--+--|.|.........|.|----+-----------|.|..........|.|
|---------+-|--+-----|-|.....|.|.........|.|........|.|.....+.|..........+.|
|...........|........|.S.....|.|----+----|.|--------|.|.....|.|----------|.|
|...........|........|.|.....|........................|.....|..............|
----------------------------------------------------------------------------
]]);
-- Dungeon Description
des.region(selection.area(00,00,75,19), "lit")
des.non_diggable(selection.area(00,00,75,19))
--
des.region({ region={01,01, 04,05}, lit=0, type="morgue", filled=1 })
des.region({ region={15,03, 20,05}, lit=1, type="shop", filled=1 })
des.region({ region={62,03, 71,04}, lit=1, type="shop", filled=1 })
des.region({ region={01,17, 11,18}, lit=1, type="barracks", filled=1 })
des.region({ region={12,09, 20,10}, lit=1, type="barracks", filled=1 })
des.region({ region={53,11, 59,14}, lit=1, type="zoo", filled=1 })
des.region({ region={63,14, 72,16}, lit=1, type="barracks", filled=1 })
des.region({ region={32,14, 40,16}, lit=1, type="temple", filled=1 })
--
des.region({ region = {06,01,11,02}, type = "ordinary" })
des.region({ region = {24,01,29,02}, type = "ordinary" })
des.region({ region = {31,01,36,02}, type = "ordinary" })
des.region({ region = {42,01,45,03}, type = "ordinary" })
des.region({ region = {53,01,58,02}, type = "ordinary" })
des.region({ region = {24,04,26,05}, type = "ordinary" })
des.region({ region = {30,06,34,07}, type = "ordinary" })
des.region(selection.area(73,05,74,05), "unlit")
des.region({ region = {01,09,04,12}, type = "ordinary" })
des.region({ region = {01,14,07,15}, type = "ordinary" })
des.region({ region = {12,12,20,13}, type = "ordinary" })
des.region({ region = {13,17,20,18}, type = "ordinary" })
des.region({ region = {22,09,24,10}, type = "ordinary" })
des.region({ region = {22,12,24,12}, type = "ordinary" })
des.region({ region = {24,16,28,18}, type = "ordinary" })
des.region({ region = {28,11,33,12}, type = "ordinary" })
des.region(selection.area(35,11,36,12), "lit")
des.region({ region = {38,08,41,12}, type = "ordinary" })
des.region({ region = {43,07,49,08}, type = "ordinary" })
des.region({ region = {43,12,49,12}, type = "ordinary" })
des.region({ region = {44,16,51,16}, type = "ordinary" })
des.region({ region = {53,06,59,07}, type = "ordinary" })
des.region({ region = {61,06,71,07}, type = "ordinary" })
des.region({ region = {55,16,59,18}, type = "ordinary" })
des.region({ region = {63,11,68,12}, type = "ordinary" })
des.region({ region = {70,11,72,12}, type = "ordinary" })
-- Stairs
des.stair("up", 10,04)
des.stair("down", 73,05)
-- Non diggable walls
des.non_diggable(selection.area(00,00,75,19))
des.door("closed",05,05)
des.door("closed",05,09)
des.door("closed",08,14)
des.door("closed",08,03)
des.door("closed",11,09)
des.door("closed",11,12)
des.door("closed",10,16)
des.door("closed",14,05)
des.door("closed",15,16)
des.door("locked",21,09)
des.door("locked",21,12)
des.door("closed",23,17)
des.door("closed",25,03)
des.door("closed",26,15)
des.door("closed",29,03)
des.door("closed",28,13)
des.door("closed",31,03)
des.door("closed",32,08)
des.door("closed",37,11)
des.door("closed",36,17)
des.door("locked",41,03)
des.door("closed",40,07)
des.door("closed",48,06)
des.door("closed",48,13)
des.door("closed",48,15)
des.door("closed",56,03)
des.door("closed",55,05)
des.door("closed",72,03)
des.door("locked",74,04)
des.door("closed",64,08)
des.door("closed",62,11)
des.door("closed",69,11)
des.door("closed",60,13)
des.door("closed",60,16)
des.door("closed",73,16)
-- Objects
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
des.object()
-- Toilet paper
des.object("blank paper", 71, 12)
des.object("blank paper", 71, 12)
-- Random traps - must avoid the 2 shops
local validtraps = selection.area(00,00,75,19):filter_mapchar('.')
validtraps = validtraps - (selection.area(15,03,20,05) + selection.area(62,03,71,04))
for i = 1,9 do
des.trap(validtraps:rndcoord(1))
end
-- Random monsters.
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("giant spider")
des.monster("s")
des.monster("s")