Use lua for special level files

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.
This commit is contained in:
Pasi Kallinen
2019-05-10 21:11:50 +03:00
parent 3e029d2900
commit fd55d9118e
189 changed files with 16653 additions and 27346 deletions

152
dat/minend-2.lua Normal file
View File

@@ -0,0 +1,152 @@
-- NetHack 3.6 mines.des $NHDT-Date: 1432512783 2015/05/25 00:13:03 $ $NHDT-Branch: master $:$NHDT-Revision: 1.25 $
-- Copyright (c) 1989-95 by Jean-Christophe Collet
-- Copyright (c) 1991-95 by M. Stephenson
-- NetHack may be freely redistributed. See license for details.
--
-- Mine end level variant 2
-- "Gnome King's Wine Cellar"
des.level_init({ style = "solidfill", fg = " " });
des.level_flags("mazelevel");
des.map([[
---------------------------------------------------------------------------
|...................................................| |
|.|---------S--.--|...|--------------------------|..| |
|.||---| |.||-| |...|..........................|..| |
|.||...| |-|.|.|---...|.............................| .. |
|.||...|-|.....|....|-|..........................|..|. .. |
|.||.....|-S|..|....|............................|..|.. |
|.||--|..|..|..|-|..|----------------------------|..|-. |
|.| |..|..|....|..................................|... |
|.| |..|..|----|..-----------------------------|..|.... |
|.|---|..|--|.......|----------------------------|..|..... |
|...........|----.--|......................| |..|....... |
|-----------|...|.| |------------------|.|.|-----|..|.....|.. |
|-----------|.{.|.|--------------------|.|..........|.....|.... |
|...............|.S......................|-------------..-----... |
|.--------------|.|--------------------|.|......................... |
|.................| |.....................|........ |
---------------------------------------------------------------------------
]]);
if math.random(0, 99) < 50 then
des.terrain({55,14},"-")
des.terrain({56,14},"-")
des.terrain({61,15},"|")
des.terrain({52,5}, "S")
des.door("locked", 52,5)
end
if math.random(0, 99) < 50 then
des.terrain({18,1}, "|")
des.terrain(selection.area(7,12, 8,13), ".")
end
if math.random(0, 99) < 50 then
des.terrain({49,4}, "|")
des.terrain({21,5}, ".")
end
if math.random(0, 99) < 50 then
if math.random(0, 99) < 50 then
des.terrain({22,1}, "|")
else
des.terrain({50,7}, "-")
des.terrain({51,7}, "-")
end
end
-- Dungeon Description
des.feature("fountain", {14,13})
des.region(selection.area(23,03,48,06),"lit")
des.region(selection.area(21,06,22,06),"lit")
des.region(selection.area(14,04,14,04),"unlit")
des.region(selection.area(10,05,14,08),"unlit")
des.region(selection.area(10,09,11,09),"unlit")
des.region(selection.area(15,08,16,08),"unlit")
-- Secret doors
des.door("locked",12,02)
des.door("locked",11,06)
-- Stairs
des.stair("up", 36,04)
-- Non diggable walls
des.non_diggable(selection.area(00,00,52,17))
des.non_diggable(selection.area(53,00,74,00))
des.non_diggable(selection.area(53,17,74,17))
des.non_diggable(selection.area(74,01,74,16))
des.non_diggable(selection.area(53,07,55,07))
des.non_diggable(selection.area(53,14,61,14))
-- The Gnome King's wine cellar.
-- the Trespassers sign is a long-running joke
des.engraving({12,03},"engrave","You are now entering the Gnome King's wine cellar.")
des.engraving({12,04},"engrave","Trespassers will be persecuted!")
des.object("booze", 10, 07)
des.object("booze", 10, 07)
des.object("!", 10, 07)
des.object("booze", 10, 08)
des.object("booze", 10, 08)
des.object("!", 10, 08)
des.object("booze", 10, 09)
des.object("booze", 10, 09)
des.object("object detection", 10, 09)
-- Objects
-- The Treasure chamber...
des.object("diamond", 69, 04)
des.object("*", 69, 04)
des.object("diamond", 69, 04)
des.object("*", 69, 04)
des.object("emerald", 70, 04)
des.object("*", 70, 04)
des.object("emerald", 70, 04)
des.object("*", 70, 04)
des.object("emerald", 69, 05)
des.object("*", 69, 05)
des.object("ruby", 69, 05)
des.object("*", 69, 05)
des.object("ruby", 70, 05)
des.object("amethyst", 70, 05)
des.object("*", 70, 05)
des.object("amethyst", 70, 05)
des.object("luckstone", 70, 05)
-- Scattered gems...
des.object("*")
des.object("*")
des.object("*")
des.object("*")
des.object("*")
des.object("*")
des.object("*")
des.object("(")
des.object("(")
des.object()
des.object()
des.object()
-- Random traps
des.trap()
des.trap()
des.trap()
des.trap()
des.trap()
des.trap()
-- Random monsters.
des.monster("gnome king")
des.monster("gnome lord")
des.monster("gnome lord")
des.monster("gnome lord")
des.monster("gnomish wizard")
des.monster("gnomish wizard")
des.monster("gnome")
des.monster("gnome")
des.monster("gnome")
des.monster("gnome")
des.monster("gnome")
des.monster("gnome")
des.monster("gnome")
des.monster("gnome")
des.monster("gnome")
des.monster("hobbit")
des.monster("hobbit")
des.monster("dwarf")
des.monster("dwarf")
des.monster("dwarf")
des.monster("h")