Files
nethack/dat/astral.lua
copperwater 78d46b3a76 Fix: missing filled flags in various levels
This is an omission in the filled/prefilled unification. The default for
filled on regions now being 0 meant that regions that had previously had
no need for any fill declaration at all (regions' prefilled defaulted to
0 before this, the effect being to fill them) now failed to get filled.

The rule of thumb is that all des.regions with a type for which filled
is meaningful (e.g. special rooms) should declare the fill status. I
added it to a bunch of temples even though this doesn't really seem to
affect anything there (the priest and altar come with the altar
definition). I assigned temples filled=1 and filled=2 loosely based on
if there is ever being some other generation that would put other
furniture or items in a temple, but the distinction should not affect
anything right now.

Cases fixed where non-temple regions weren't getting filled:
- Barracks, a graveyard, and shops in Tou-goal
- The beehive in the Wizard's Tower
2020-09-28 07:44:42 +03:00

188 lines
9.3 KiB
Lua

-- NetHack 3.7 endgame.des $NHDT-Date: 1546303680 2019/01/01 00:48:00 $ $NHDT-Branch: NetHack-3.6.2-beta01 $:$NHDT-Revision: 1.14 $
-- Copyright (c) 1989 by Jean-Christophe Collet
-- Copyright (c) 1992,1993 by Izchak Miller, David Cohrs,
-- and Timo Hakulinen
-- NetHack may be freely redistributed. See license for details.
--
des.level_init({ style = "solidfill", fg = " " });
des.level_flags("mazelevel", "noteleport", "hardfloor", "nommap", "shortsighted", "solidify")
des.message("You arrive on the Astral Plane!")
des.message("Here the High Temple of %d is located.")
des.message("You sense alarm, hostility, and excitement in the air!")
des.map([[
---------------
|.............|
|..---------..|
|..|.......|..|
--------------- |..|.......|..| ---------------
|.............| |..|.......|..| |.............|
|..---------..-| |-------| |..|.......|..| |-------| |-..---------..|
|..|.......|...-| |-.......-| |..|.......|..| |-.......-| |-...|.......|..|
|..|.......|....-|-.........-||..----+----..||-.........-|-....|.......|..|
|..|.......+.....+...........||.............||...........+.....+.......|..|
|..|.......|....-|-.........-|--|.........|--|-.........-|-....|.......|..|
|..|.......|...-| |-.......-| -|---+---|- |-.......-| |-...|.......|..|
|..---------..-| |---+---| |-.......-| |---+---| |-..---------..|
|.............| |...|-----|-.........-|-----|...| |.............|
--------------- |.........|...........|.........| ---------------
-------...|-.........-|...-------
|....|-.......-|....|
---...|---+---|...---
|...............|
-----------------
]]);
-- chance to alter above map and turn the wings of the bottom-center into
-- a pair of big (5x15) rooms
for i=1,2 do
-- 3.6.[01]: 75% chance that both sides opened up, 25% that neither did;
-- 3.6.2: 60% twice == 36% chance that both sides open up, 24% left side
-- only, 24% right side only, 16% that neither side opens up
local hall;
if percent(60) then
if i == 1 then
des.terrain(selection.area(17,14, 30,18),".")
des.wallify()
-- temporarily close off the area to be filled so that it doesn't cover
-- the entire entry area
des.terrain(33,18, "|")
hall = selection.floodfill(30,16)
-- re-connect the opened wing with the rest of the map
des.terrain(33,18, ".")
else
des.terrain(selection.area(44,14, 57,18),".")
des.wallify()
des.terrain(41,18, "|")
hall = selection.floodfill(44,16)
des.terrain(41,18, ".")
end
-- extra monsters; was [6 + 3d4] when both wings were opened up at once
for i=1,3 + math.random(2 - 1,2*3) do
des.monster({ id="Angel", coord = { hall:rndcoord(1) }, align="noalign", peaceful=0 })
if percent(50) then
des.monster({ coord = { hall:rndcoord(1) }, peaceful=0 })
end
end
end
end
-- Rider locations
local place = selection.new();
place:set(23,9);
place:set(37,14);
place:set(51,9);
-- Where the player will land on arrival
des.teleport_region({ region = {29,15,45,15}, exclude = {30,15,44,15} })
-- Lit courts
des.region({ region={01,05,16,14},lit=1,type="ordinary",irregular=1 })
des.region({ region={31,01,44,10},lit=1,type="ordinary",irregular=1 })
des.region({ region={61,05,74,14},lit=1,type="ordinary",irregular=1 })
-- A Sanctum for each alignment
-- The shrines' alignments are shuffled for
-- each game
des.region({ region={04,07,10,11},lit=1,type="temple",filled=2 })
des.region({ region={34,03,40,07},lit=1,type="temple",filled=2 })
des.region({ region={64,07,70,11},lit=1,type="temple",filled=2 })
des.altar({ x=07, y=09, align=align[1],type="sanctum" })
des.altar({ x=37, y=05, align=align[2],type="sanctum" })
des.altar({ x=67, y=09, align=align[3],type="sanctum" })
-- Doors
des.door("closed",11,09)
des.door("closed",17,09)
des.door("locked",23,12)
des.door("locked",37,08)
des.door("closed",37,11)
des.door("closed",37,17)
des.door("locked",51,12)
des.door("locked",57,09)
des.door("closed",63,09)
-- Non diggable and phazeable everywhere
des.non_diggable(selection.area(00,00,74,19))
des.non_passwall(selection.area(00,00,74,19))
-- Moloch's horde
-- West round room
des.monster({ id = "aligned priest",x=18,y=09,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=19,y=08,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=19,y=09,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=19,y=10,align="noalign", peaceful=0 })
des.monster({ id = "Angel",x=20,y=09,align="noalign", peaceful=0 })
des.monster({ id = "Angel",x=20,y=10,align="noalign", peaceful=0 })
des.monster({ id = "Pestilence", coord = { place:rndcoord(1) }, peaceful=0 })
-- South-central round room
des.monster({ id = "aligned priest",x=36,y=12,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=37,y=12,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=38,y=12,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=36,y=13,align="noalign", peaceful=0 })
des.monster({ id = "Angel",x=38,y=13,align="noalign", peaceful=0 })
des.monster({ id = "Angel",x=37,y=13,align="noalign", peaceful=0 })
des.monster({ id = "Death", coord = { place:rndcoord(1) }, peaceful=0 })
-- East round room
des.monster({ id = "aligned priest",x=56,y=09,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=55,y=08,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=55,y=09,align="noalign", peaceful=0 })
des.monster({ id = "aligned priest",x=55,y=10,align="noalign", peaceful=0 })
des.monster({ id = "Angel",x=54,y=09,align="noalign", peaceful=0 })
des.monster({ id = "Angel",x=54,y=10,align="noalign", peaceful=0 })
des.monster({ id = "Famine", coord = { place:rndcoord(1) }, peaceful=0 })
--
-- The aligned horde
--
-- We do not know in advance the alignment of the
-- player. The mpeaceful bit will need resetting
-- when the level is created. The setting here is
-- but a place holder.
--
-- West court
des.monster({ id = "aligned priest",x=12,y=07,align="chaos", peaceful=0 })
des.monster({ id = "aligned priest",x=13,y=07,align="chaos",peaceful=1 })
des.monster({ id = "aligned priest",x=14,y=07,align="law", peaceful=0 })
des.monster({ id = "aligned priest",x=12,y=11,align="law",peaceful=1 })
des.monster({ id = "aligned priest",x=13,y=11,align="neutral", peaceful=0 })
des.monster({ id = "aligned priest",x=14,y=11,align="neutral",peaceful=1 })
des.monster({ id = "Angel",x=11,y=05,align="chaos", peaceful=0 })
des.monster({ id = "Angel",x=12,y=05,align="chaos",peaceful=1 })
des.monster({ id = "Angel",x=13,y=05,align="law", peaceful=0 })
des.monster({ id = "Angel",x=11,y=13,align="law",peaceful=1 })
des.monster({ id = "Angel",x=12,y=13,align="neutral", peaceful=0 })
des.monster({ id = "Angel",x=13,y=13,align="neutral",peaceful=1 })
-- Central court
des.monster({ id = "aligned priest",x=32,y=09,align="chaos", peaceful=0 })
des.monster({ id = "aligned priest",x=33,y=09,align="chaos",peaceful=1 })
des.monster({ id = "aligned priest",x=34,y=09,align="law", peaceful=0 })
des.monster({ id = "aligned priest",x=40,y=09,align="law",peaceful=1 })
des.monster({ id = "aligned priest",x=41,y=09,align="neutral", peaceful=0 })
des.monster({ id = "aligned priest",x=42,y=09,align="neutral",peaceful=1 })
des.monster({ id = "Angel",x=31,y=08,align="chaos", peaceful=0 })
des.monster({ id = "Angel",x=32,y=08,align="chaos",peaceful=1 })
des.monster({ id = "Angel",x=31,y=09,align="law", peaceful=0 })
des.monster({ id = "Angel",x=42,y=08,align="law",peaceful=1 })
des.monster({ id = "Angel",x=43,y=08,align="neutral", peaceful=0 })
des.monster({ id = "Angel",x=43,y=09,align="neutral",peaceful=1 })
-- East court
des.monster({ id = "aligned priest",x=60,y=07,align="chaos", peaceful=0 })
des.monster({ id = "aligned priest",x=61,y=07,align="chaos",peaceful=1 })
des.monster({ id = "aligned priest",x=62,y=07,align="law", peaceful=0 })
des.monster({ id = "aligned priest",x=60,y=11,align="law",peaceful=1 })
des.monster({ id = "aligned priest",x=61,y=11,align="neutral", peaceful=0 })
des.monster({ id = "aligned priest",x=62,y=11,align="neutral",peaceful=1 })
des.monster({ id = "Angel",x=61,y=05,align="chaos", peaceful=0 })
des.monster({ id = "Angel",x=62,y=05,align="chaos",peaceful=1 })
des.monster({ id = "Angel",x=63,y=05,align="law", peaceful=0 })
des.monster({ id = "Angel",x=61,y=13,align="law",peaceful=1 })
des.monster({ id = "Angel",x=62,y=13,align="neutral", peaceful=0 })
des.monster({ id = "Angel",x=63,y=13,align="neutral",peaceful=1 })
--
-- Assorted nasties
des.monster({ class = "L", peaceful=0 })
des.monster({ class = "L", peaceful=0 })
des.monster({ class = "L", peaceful=0 })
des.monster({ class = "V", peaceful=0 })
des.monster({ class = "V", peaceful=0 })
des.monster({ class = "V", peaceful=0 })
des.monster({ class = "D", peaceful=0 })
des.monster({ class = "D", peaceful=0 })
des.monster({ class = "D", peaceful=0 })