Game is playable, and should compile on linux and Windows. Assumes you have a lua 5.3 library available. Removes level compiler and associated files. Replaces special level des-files with lua scripts. Exposes some NetHack internals to lua: - des-table with commands to create special levels - nh-table with NetHack core commands - nhc-table with some constants - u-table with some player-specific data (u-struct) - selection userdata Adds some rudimentary tests. Adds new extended command #wizloadlua to run a specific script, and #wizloaddes to run a specific level-creation script. nhlib.lua is loaded for every lua script. Download and untar lua: mkdir lib cd lib curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz tar zxf lua-5.3.5.tar.gz Then make nethack normally.
143 lines
4.3 KiB
Lua
143 lines
4.3 KiB
Lua
-- NetHack 3.6 gehennom.des $NHDT-Date: 1432512783 2015/05/25 00:13:03 $ $NHDT-Branch: master $:$NHDT-Revision: 1.13 $
|
|
-- Copyright (c) 1989 by Jean-Christophe Collet
|
|
-- Copyright (c) 1992 by M. Stephenson and Izchak Miller
|
|
-- NetHack may be freely redistributed. See license for details.
|
|
--
|
|
des.level_init({ style="mazegrid", bg ="-" });
|
|
|
|
des.level_flags("mazelevel", "noteleport", "shortsighted")
|
|
-- A ghost town
|
|
des.map({ halign = "right", valign = "center", map = [[
|
|
.|....|....|....|..............|....|........
|
|
.|....|....|....|..............|....|........
|
|
.|....|....|....|--...-+-------|.............
|
|
.|....|....|....|..............+.............
|
|
.|.........|....|..............|....|........
|
|
.--+-...-+----+--....-------...--------.-+---
|
|
.....................|.....|.................
|
|
.....................|.....|.................
|
|
.--+----....-+---....|.....|...----------+---
|
|
.|....|....|....|....---+---...|......|......
|
|
.|.........|....|..............|......|......
|
|
.----...---------.....-----....+......|......
|
|
.|........................|....|......|......
|
|
.----------+-...--+--|....|....----------+---
|
|
.|....|..............|....+....|.............
|
|
.|....+.......|......|....|....|.............
|
|
.|....|.......|......|....|....|.............
|
|
]] });
|
|
des.mazewalk(00,06,"west")
|
|
-- Entire main area
|
|
des.region(selection.area(01,00,44,16),"unlit")
|
|
des.stair("down", 33,15)
|
|
des.levregion({ region={01,00,12,20}, region_islev=1, exclude={20,01,70,20}, exclude_islev=1, type="stair-up" });
|
|
des.levregion({ region={01,00,12,20}, region_islev=1, exclude={20,01,70,20}, exclude_islev=1, type="branch" });
|
|
des.teleport_region({ region={01,00,12,20}, region_islev=1, exclude={20,01,70,20}, exclude_islev=1 });
|
|
-- Wall "ruins"
|
|
des.object("boulder",19,02)
|
|
des.object("boulder",20,02)
|
|
des.object("boulder",21,02)
|
|
des.object("boulder",36,02)
|
|
des.object("boulder",36,03)
|
|
des.object("boulder",06,04)
|
|
des.object("boulder",05,05)
|
|
des.object("boulder",06,05)
|
|
des.object("boulder",07,05)
|
|
des.object("boulder",39,05)
|
|
des.object("boulder",08,08)
|
|
des.object("boulder",09,08)
|
|
des.object("boulder",10,08)
|
|
des.object("boulder",11,08)
|
|
des.object("boulder",06,10)
|
|
des.object("boulder",05,11)
|
|
des.object("boulder",06,11)
|
|
des.object("boulder",07,11)
|
|
des.object("boulder",21,11)
|
|
des.object("boulder",21,12)
|
|
des.object("boulder",13,13)
|
|
des.object("boulder",14,13)
|
|
des.object("boulder",15,13)
|
|
des.object("boulder",14,14)
|
|
-- Doors
|
|
des.door("closed",23,02)
|
|
des.door("open",31,03)
|
|
des.door("nodoor",03,05)
|
|
des.door("closed",09,05)
|
|
des.door("closed",14,05)
|
|
des.door("closed",41,05)
|
|
des.door("open",03,08)
|
|
des.door("nodoor",13,08)
|
|
des.door("open",41,08)
|
|
des.door("closed",24,09)
|
|
des.door("closed",31,11)
|
|
des.door("open",11,13)
|
|
des.door("closed",18,13)
|
|
des.door("closed",41,13)
|
|
des.door("open",26,14)
|
|
des.door("closed",06,15)
|
|
-- Special rooms
|
|
des.altar({ x=24,y=07,align="noalign",type="sanctum" })
|
|
des.region({ region={22,12,25,16},lit=0,type="morgue", prefilled=0 })
|
|
des.region({ region={32,09,37,12},lit=1,type="shop",prefilled=0 })
|
|
des.region({ region={12,00,15,04},lit=1,type="shop",prefilled=0 })
|
|
-- Some traps.
|
|
des.trap("spiked pit")
|
|
des.trap("sleep gas")
|
|
des.trap("anti magic")
|
|
des.trap("fire")
|
|
des.trap("fire")
|
|
des.trap("fire")
|
|
des.trap("magic")
|
|
des.trap("magic")
|
|
-- Some random objects
|
|
des.object()
|
|
des.object()
|
|
des.object()
|
|
des.object()
|
|
des.object()
|
|
des.object()
|
|
des.object()
|
|
des.object()
|
|
des.object()
|
|
des.object()
|
|
-- The resident nasty
|
|
des.monster("Orcus",33,15)
|
|
-- And its preferred companions
|
|
des.monster("human zombie",32,15)
|
|
des.monster("shade",32,14)
|
|
des.monster("shade",32,16)
|
|
des.monster("vampire",35,16)
|
|
des.monster("vampire",35,14)
|
|
des.monster("vampire lord",36,14)
|
|
des.monster("vampire lord",36,15)
|
|
-- Randomly placed companions
|
|
des.monster("skeleton")
|
|
des.monster("skeleton")
|
|
des.monster("skeleton")
|
|
des.monster("skeleton")
|
|
des.monster("skeleton")
|
|
des.monster("shade")
|
|
des.monster("shade")
|
|
des.monster("shade")
|
|
des.monster("shade")
|
|
des.monster("giant zombie")
|
|
des.monster("giant zombie")
|
|
des.monster("giant zombie")
|
|
des.monster("ettin zombie")
|
|
des.monster("ettin zombie")
|
|
des.monster("ettin zombie")
|
|
des.monster("human zombie")
|
|
des.monster("human zombie")
|
|
des.monster("human zombie")
|
|
des.monster("vampire")
|
|
des.monster("vampire")
|
|
des.monster("vampire")
|
|
des.monster("vampire lord")
|
|
des.monster("vampire lord")
|
|
-- A few more for the party
|
|
des.monster()
|
|
des.monster()
|
|
des.monster()
|
|
des.monster()
|
|
des.monster()
|