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.
152 lines
5.6 KiB
Lua
152 lines
5.6 KiB
Lua
-- NetHack 3.6 Wizard.des $NHDT-Date: 1432512783 2015/05/25 00:13:03 $ $NHDT-Branch: master $:$NHDT-Revision: 1.11 $
|
|
-- Copyright (c) 1992 by David Cohrs
|
|
-- NetHack may be freely redistributed. See license for details.
|
|
--
|
|
des.level_init({ style = "solidfill", fg = " " });
|
|
|
|
des.level_flags("mazelevel", "hardfloor")
|
|
|
|
des.map([[
|
|
............. .......................................................
|
|
.............. .............}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}.......
|
|
.............. ..............}.................................}.......
|
|
.............. ..............}.-------------------------------.}.......
|
|
............... .........C....}.|.............................|.}.......
|
|
............... ..........C....}.|.---------------------------.|.}.......
|
|
............... .........CCC...}.|.|.........................|.|.}.......
|
|
................ ....C....CCC...}.|.|.-----------------------.|.|.}.......
|
|
.......C..C..... .....C....CCC...}.|.|.|......+.......+......|.|.|.}.......
|
|
.............C..CC.....C....CCC...}.|.|.|......|-------|......|.|.|.}.......
|
|
................ ....C....CCC...}.|.|.|......|.......|......|.|.|.}.......
|
|
......C..C..... ....C....CCC...}.|.|.|......|-------|......|.|.|.}.......
|
|
............C.. ...C....CCC...}.|.|.|......+.......+......|.|.|.}.......
|
|
........C...... ....C....CCC...}.|.|.-----------------------.|.|.}.......
|
|
....C......C... ........CCC...}.|.|.........................|.|.}.......
|
|
......C..C.... .........C....}.|.---------------------------.|.}.......
|
|
.............. .........C....}.|.............................|.}.......
|
|
............. ..............}.-------------------------------.}.......
|
|
............. .............}.................................}.......
|
|
............. .............}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}.......
|
|
............. .......................................................
|
|
]]);
|
|
|
|
des.replace_terrain({ region = { 0, 0,30,20}, fromterrain=".", toterrain="C", chance=15 })
|
|
des.replace_terrain({ region = {68, 0,75,20}, fromterrain=".", toterrain="}", chance=25 })
|
|
des.replace_terrain({ region = {34, 1,68,19}, fromterrain="}", toterrain=".", chance=2 })
|
|
|
|
-- Dungeon Description
|
|
des.region(selection.area(00,00,75,20), "lit")
|
|
des.region({ region={37,04,65,16}, lit=0, type="ordinary", prefilled=1, irregular=1,
|
|
contents = function()
|
|
des.door({ state="secret", wall="random" })
|
|
end
|
|
})
|
|
des.region({ region={39,06,63,14}, lit=0, type="ordinary", prefilled=1, irregular=1,
|
|
contents = function()
|
|
des.door({ state="secret", wall="random" })
|
|
end
|
|
})
|
|
|
|
des.region({ region={41,08,46,12}, lit=1, type="ordinary", prefilled=1, irregular=1,
|
|
contents = function()
|
|
local walls = { "north", "south", "west" }
|
|
local widx = math.random(1, #walls)
|
|
des.door({ state="secret", wall=walls[widx] })
|
|
end
|
|
})
|
|
|
|
des.region({ region={56,08,61,12}, lit=1, type="ordinary", prefilled=1, irregular=1,
|
|
contents = function()
|
|
local walls = { "north", "south", "east" }
|
|
local widx = math.random(1, #walls)
|
|
des.door({ state="secret", wall=walls[widx] })
|
|
end
|
|
})
|
|
|
|
des.region(selection.area(48,08,54,08), "unlit")
|
|
des.region(selection.area(48,12,54,12), "unlit")
|
|
|
|
des.region({ region={48,10,54,10}, lit=0, type="ordinary", prefilled=1, irregular=1,
|
|
contents = function()
|
|
des.door({ state="secret", wall="random" })
|
|
end
|
|
})
|
|
|
|
-- Doors
|
|
des.door("locked",55,08)
|
|
des.door("locked",55,12)
|
|
des.door("locked",47,08)
|
|
des.door("locked",47,12)
|
|
-- Stairs
|
|
des.terrain({03,17}, ".")
|
|
des.stair("up", 03,17)
|
|
des.stair("down", 48,10)
|
|
-- Non diggable walls
|
|
des.non_diggable(selection.area(00,00,75,20))
|
|
-- 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()
|
|
des.object()
|
|
-- Random traps
|
|
des.trap("spiked pit",24,02)
|
|
des.trap("spiked pit",07,10)
|
|
des.trap("spiked pit",23,05)
|
|
des.trap("spiked pit",26,19)
|
|
des.trap("spiked pit",72,02)
|
|
des.trap("spiked pit",72,12)
|
|
des.trap("falling rock",45,16)
|
|
des.trap("falling rock",65,13)
|
|
des.trap("falling rock",55,06)
|
|
des.trap("falling rock",39,11)
|
|
des.trap("falling rock",57,09)
|
|
des.trap("magic")
|
|
des.trap("statue")
|
|
des.trap("statue")
|
|
des.trap("polymorph")
|
|
des.trap("anti magic",53,10)
|
|
des.trap("sleep gas")
|
|
des.trap("sleep gas")
|
|
des.trap("dart")
|
|
des.trap("dart")
|
|
des.trap("dart")
|
|
-- Random monsters.
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "B", peaceful = 0 })
|
|
des.monster({ class = "i", peaceful = 0 })
|
|
des.monster({ class = "i", peaceful = 0 })
|
|
des.monster({ class = "i", peaceful = 0 })
|
|
des.monster({ class = "i", peaceful = 0 })
|
|
des.monster({ class = "i", peaceful = 0 })
|
|
des.monster({ class = "i", peaceful = 0 })
|
|
des.monster({ class = "i", peaceful = 0 })
|
|
des.monster("vampire bat")
|
|
des.monster("vampire bat")
|
|
des.monster("vampire bat")
|
|
des.monster("vampire bat")
|
|
des.monster("vampire bat")
|
|
des.monster("vampire bat")
|
|
des.monster("vampire bat")
|
|
des.monster({ class = "i", peaceful = 0 })
|