Add a stack of 2 tins of spinach near the leader on the monk quest start level and another stack of 2 blessed tins of spinach at a random spot on the monk quest locate level, to compensate for the inability to gain strength from giant corpses if they adhere to vegan or vegetarian conduct. paxed supplied the 'tinplace' magic. 4 tins of spinach aren't nearly enough to get to 18/100, but by uncursing the first pair, if necessary, and waiting until strength is at least 18, they can be eaten to add 4..40 (average 22) points of exceptional strength. (Players choosing either of those conducts for other roles or foodless for any role are on their own as far as boosting Str goes, same as before.) The special level loader needed to be modified to handle tins of spinach. It now accepts "spinach" as a fake monster type for an object of type "tin". Also added support for empty tins since it involved the same code, and use of fake monster type "empty" with object type "egg" to be able to create generic (unhatchable) eggs. (Wishing for "egg" produces those by default but it also accepts explicit "empty egg" by coincidence.)
107 lines
4.1 KiB
Lua
107 lines
4.1 KiB
Lua
-- NetHack Monk Mon-strt.lua $NHDT-Date: 1652196007 2022/05/10 15:20:07 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $
|
|
-- Copyright (c) 1989 by Jean-Christophe Collet
|
|
-- Copyright (c) 1991-2 by M. Stephenson
|
|
-- NetHack may be freely redistributed. See license for details.
|
|
--
|
|
--
|
|
-- The "start" level for the quest.
|
|
--
|
|
-- Here you meet your (besieged) class leader, the Grand Master
|
|
-- and receive your quest assignment.
|
|
--
|
|
des.level_init({ style = "solidfill", fg = " " });
|
|
|
|
des.level_flags("mazelevel", "noteleport", "hardfloor")
|
|
|
|
des.map([[
|
|
............................................................................
|
|
............................................................................
|
|
............................................................................
|
|
....................------------------------------------....................
|
|
....................|................|.....|.....|.....|....................
|
|
....................|..------------..|--+-----+-----+--|....................
|
|
....................|..|..........|..|.................|....................
|
|
....................|..|..........|..|+---+---+-----+--|....................
|
|
..................---..|..........|......|...|...|.....|....................
|
|
..................+....|..........+......|...|...|.....|....................
|
|
..................+....|..........+......|...|...|.....|....................
|
|
..................---..|..........|......|...|...|.....|....................
|
|
....................|..|..........|..|+-----+---+---+--|....................
|
|
....................|..|..........|..|.................|....................
|
|
....................|..------------..|--+-----+-----+--|....................
|
|
....................|................|.....|.....|.....|....................
|
|
....................------------------------------------....................
|
|
............................................................................
|
|
............................................................................
|
|
............................................................................
|
|
]]);
|
|
-- Dungeon Description
|
|
des.region(selection.area(00,00,75,19), "lit")
|
|
des.region({ region={24,06, 33,13}, lit=1, type="temple" })
|
|
|
|
des.replace_terrain({ region={00,00, 10,19}, fromterrain=".", toterrain="T", chance=10 })
|
|
des.replace_terrain({ region={65,00, 75,19}, fromterrain=".", toterrain="T", chance=10 })
|
|
|
|
local spacelocs = selection.floodfill(05,04);
|
|
|
|
-- Portal arrival point
|
|
des.terrain({05,04}, ".")
|
|
des.levregion({ region = {05,04,05,04}, type="branch" })
|
|
-- Stairs
|
|
des.stair("down", 52,09)
|
|
-- Doors
|
|
des.door("locked",18,09)
|
|
des.door("locked",18,10)
|
|
des.door("closed",34,09)
|
|
des.door("closed",34,10)
|
|
des.door("closed",40,05)
|
|
des.door("closed",46,05)
|
|
des.door("closed",52,05)
|
|
des.door("locked",38,07)
|
|
des.door("closed",42,07)
|
|
des.door("closed",46,07)
|
|
des.door("closed",52,07)
|
|
des.door("locked",38,12)
|
|
des.door("closed",44,12)
|
|
des.door("closed",48,12)
|
|
des.door("closed",52,12)
|
|
des.door("closed",40,14)
|
|
des.door("closed",46,14)
|
|
des.door("closed",52,14)
|
|
-- Unattended Altar - unaligned due to conflict - player must align it.
|
|
des.altar({ x=28,y=09, align="noalign", type="altar" })
|
|
-- The Grand Master
|
|
des.monster({ id = "Grand Master", coord = {28, 10}, inventory = function()
|
|
des.object({ id = "robe", spe = 6 });
|
|
end })
|
|
-- No treasure chest!
|
|
-- guards for the audience chamber
|
|
des.monster("abbot", 32, 07)
|
|
des.monster("abbot", 32, 08)
|
|
des.monster("abbot", 32, 11)
|
|
des.monster("abbot", 32, 12)
|
|
des.monster("abbot", 33, 07)
|
|
des.monster("abbot", 33, 08)
|
|
des.monster("abbot", 33, 11)
|
|
des.monster("abbot", 33, 12)
|
|
-- Non diggable walls
|
|
des.non_diggable(selection.area(18,03,55,16))
|
|
-- Random traps
|
|
for i = 1, 2 do
|
|
des.trap("dart", spacelocs:rndcoord(1))
|
|
end
|
|
des.trap()
|
|
des.trap()
|
|
des.trap()
|
|
des.trap()
|
|
-- Monsters on siege duty.
|
|
for i = 1, 8 do
|
|
des.monster("earth elemental", spacelocs:rndcoord(1))
|
|
end
|
|
for i = 1, 4 do
|
|
des.monster("xorn", spacelocs:rndcoord(1))
|
|
end
|
|
-- next to leader, so possibly tricky to pick up if not ready for quest yet;
|
|
-- there's no protection against a xorn eating these tins; BUC state is random
|
|
des.object({ id="tin", coord = {29, 9}, quantity=2, montype="spinach" })
|