diff --git a/doc/test.txt b/doc/test.txt new file mode 100644 index 0000000..9d07aa0 --- /dev/null +++ b/doc/test.txt @@ -0,0 +1 @@ +111 \ No newline at end of file diff --git a/src/NetHack_3.7/.clang-format b/src/NetHack_3.7/.clang-format new file mode 100644 index 0000000..00cf466 --- /dev/null +++ b/src/NetHack_3.7/.clang-format @@ -0,0 +1,64 @@ +--- +Language: Cpp +# BasedOnStyle: LLVM +AccessModifierOffset: -2 +AlignAfterOpenBracket: true +AlignEscapedNewlinesLeft: true +AlignOperands: true +AlignTrailingComments: true +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortIfStatementsOnASingleLine: false +AllowShortLoopsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AlwaysBreakAfterDefinitionReturnType: true +AlwaysBreakTemplateDeclarations: false +AlwaysBreakBeforeMultilineStrings: false +BreakBeforeBinaryOperators: NonAssignment +BreakBeforeTernaryOperators: true +BreakConstructorInitializersBeforeComma: false +BinPackParameters: true +BinPackArguments: true +ColumnLimit: 78 +ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 +DerivePointerAlignment: false +ExperimentalAutoDetectBinPacking: false +IndentCaseLabels: false +IndentWrappedFunctionNames: false +IndentFunctionDeclarationAfterType: false +MaxEmptyLinesToKeep: 1 +KeepEmptyLinesAtTheStartOfBlocks: false +NamespaceIndentation: None +ObjCBlockIndentWidth: 2 +ObjCSpaceAfterProperty: false +ObjCSpaceBeforeProtocolList: true +PenaltyBreakBeforeFirstCallParameter: 19 +PenaltyBreakComment: 300 +PenaltyBreakString: 1000 +PenaltyBreakFirstLessLess: 120 +PenaltyExcessCharacter: 1000000 +PenaltyReturnTypeOnItsOwnLine: 100 +PointerAlignment: Right +SpacesBeforeTrailingComments: 1 +Cpp11BracedListStyle: false +Standard: Cpp03 +IndentWidth: 4 +TabWidth: 8 +UseTab: Never +BreakBeforeBraces: Linux +SpacesInParentheses: false +SpacesInSquareBrackets: false +SpacesInAngles: false +SpaceInEmptyParentheses: false +SpacesInCStyleCastParentheses: false +SpaceAfterCStyleCast: true +SpacesInContainerLiterals: true +SpaceBeforeAssignmentOperators: true +ContinuationIndentWidth: 4 +CommentPragmas: '^ NetHack 3' +ForEachMacros: [ foreach, Q_FOREACH, BOOST_FOREACH ] +SpaceBeforeParens: ControlStatements +DisableFormat: false +... diff --git a/src/NetHack_3.7/.gitattributes b/src/NetHack_3.7/.gitattributes new file mode 100644 index 0000000..4abc1c9 --- /dev/null +++ b/src/NetHack_3.7/.gitattributes @@ -0,0 +1,17 @@ +*.[ch] NHSUBST +*.cpp NHSUBST +*.sh NHSUBST +*.pl NHSUBST +Porting NHSUBST +README NHSUBST +* text=auto +*.hqx -text +*.sln -text +*.vcxproj -text +*.doc !diff +*.DOC !diff +*.uu NH_header=no +*.xpm NH_header=no +.git* NH_header=no +* NH_filestag=(file%s_in_top_directory) +NetHack.dsw NH_filestag=(file%s_for_win32_that_are_moved_into_._at_compile_time) diff --git a/src/NetHack_3.7/.gitignore b/src/NetHack_3.7/.gitignore new file mode 100644 index 0000000..2a24910 --- /dev/null +++ b/src/NetHack_3.7/.gitignore @@ -0,0 +1,93 @@ +# CVS default ignores begin +tags +TAGS +.make.state +.nse_depinfo +*~ +\#* +.#* +,* +_$* +*$ +*.old +*.bak +*.BAK +*.orig +*.rej +.del-* +*.a +*.olb +*.o +*.obj +*.so +*.exe +*.Z +*.elc +*.ln +core +# CVS default ignores end +.*.swp + +# We generate makefiles by shell script +Makefile + +# Win32-specific ignores +Debug/ +Release/ +binary/ +build/ +ipch/ +lib/* +Nethack.sln +Nethack.sdf +Nethack.opensdf +Makefile.bcc +Makefile.gcc +Makefile-orig +Makefile.bcc-orig +Makefile.gcc-orig +*.suo +*.pdb +*.ilk +# VS2013 extension to auto-whine about questionable code generates these +*.lastcodeanalysissucceeded +# VS 2017 caches data into the hidden directory .vs +.vs +# Win32-specific ignores end +.DS_Store +# ms-dos +# resulting zip +NH*DOS.ZIP +# 8.3 versions +dat/data.bas +sys/share/posixreg.c +include/patchlev.h +doc/guidebk.txt +# folders compiler, target objs, binary results +djgpp/ +src/msdos_o/ +msdos-binary/ +dat/NHTILES.BMP +dat/msdoshlp.txt +src/host_o/ +util/djgpp-linux64-gcc550.tar.bz2 +util/djgpp-osx-gcc550.tar.bz2 +util/djgpp-mingw-gcc550-standalone.zip +util/dlb_main +util/thintile +util/til2bin2 +util/tile2bin +win/share/monthin.txt +win/share/objthin.txt +win/share/oththin.txt +# end of ms-dos + +#libnethack +targets/* +bundle/* +#test.js +#sys/lib/npm-package/build/nethack.js +#sys/lib/npm-package/build/nethack.wasm +*.user +util/*.lib +util/*.exp diff --git a/src/NetHack_3.7/.gitmodules b/src/NetHack_3.7/.gitmodules new file mode 100644 index 0000000..94c131f --- /dev/null +++ b/src/NetHack_3.7/.gitmodules @@ -0,0 +1,9 @@ +[submodule "submodules/lua"] + path = submodules/lua + url = https://github.com/lua/lua.git +[submodule "submodules/pdcurses"] + path = submodules/pdcurses + url = https://github.com/wmcbrine/PDCurses.git +[submodule "submodules/pdcursesmod"] + path = submodules/pdcursesmod + url = https://github.com/Bill-Gray/PDCursesMod.git diff --git a/src/NetHack_3.7/Cross-compiling b/src/NetHack_3.7/Cross-compiling new file mode 100644 index 0000000..31db08c --- /dev/null +++ b/src/NetHack_3.7/Cross-compiling @@ -0,0 +1,696 @@ +Cross-compiling NetHack 3.7 Last edit: February 18, 2023 + +The NetHack 3.7 build process differs from the build process of previous +versions in some important ways. Those differences make it possible to use +a cross-compiler running on one platform (the "host" platform of the build) +to produce a binary NetHack package that can execute on an entirely different +platform. + +Part A Contents: + A1. Why cross-compile? + A2. Building NetHack 3.6 (before) + A3. Building NetHack 3.7 (going forward) + A4. How was the build procedure reduced to 5 steps? + A5. How can I help with the cross-compiling initiative? + +Part B Contents: + B1. Two sets of compiles and procedures + B2. What needs to be built and executed on the HOST? + B3. What needs to be built for the TARGET? + B4. Case sample: msdos + B5. Case sample: amiga (started but incomplete) + B6. Case sample: Web Assembly, libnh + +-------------------------------------------------------------------------------- + Part A - Cross-compiling NetHack +-------------------------------------------------------------------------------- + + +--------------------------+ + | A1. Why cross-compile? | + +--------------------------+ + +By using cross-compilers on host platforms with fast processors, plenty of RAM +and storage resources, and an available cross-compiler, it may be possible to +keep or resurrect a working version of NetHack on platforms that are now too +constrained to carry out the build process natively on the platform anymore. + +Some of the constraints in carrying out a native build on the desired target +may include, but not necessarily be limited to, any of the following: + + o Access: Somebody with a working knowledge of the NetHack build process may + not have the desired target build platform available to them. Conversely, + somebody with a keen knowledge of the target platform, and access to it, + may not be all that familiar with the NetHack build process. + + o Resources: Address space limitations, insufficient RAM, low amounts of disk + storage, slow processor performance, may impede the ability to execute the + compile process on the target platform. + + o Compilers: Some of the native compilers on historical platforms may only + support the dialect of C that was popular when the platform and compiler + were in their prime. + +Another useful potential result of cross-compiling, is that it paves the way +for carrying out test and production builds of NetHack for multiple target +platforms through automated steps carried out on the host platform(s). + + + +-------------------------------------+ + | A2. Building NetHack 3.6 (before) | + +-------------------------------------+ + +Very generally, the build of NetHack in past versions required the following +steps to be carried out: + + 1. Compile and link util/makedefs. + 2. Run makedefs repeatedly with different command line options to produce + several output files that are required for: + (a) additional build steps to follow, including some header + files: pm.h, onames.h, date.h. + (b) creation of files, containing information required by, + or about the game during its execution, that are stored in a + portable, platform-independent way, that need to be inserted + into the game package. + (c) creation of files containing information required by, or about + the game during its execution, that are stored in an architecture + and/or platform and/or operating system dependent way, that need + to be inserted into the game package (the quest text format is + one example). + 3. Compile and link the level compiler. This step needs to execute + work-alike tools to lex and yacc, or needs to build pre-built lex and + yacc output (.c, .h files) that are provided in the sys/share part of + the NetHack source code tree. + 4. Execute the level compiler to read dat/*.des files and create + a set of binary output files that are architecture and/or operating + system dependent on the build platform, for use by the game during + its execution. + 5. Compile and link the dungeon compiler. Like the level compiler, this + step needs to execute work-alike tools to lex and yacc, or needs to + build pre-built lex and yacc output (.c, .h files) that are provided + in the sys/share part of the NetHack source code tree. + 6. Execute the dungeon compiler to read dat/dungeon.def and create + a set of binary output files that are architecture and/or operating + system dependent on the build platform, for use by the game during + its execution. + 7. Compile and link several less critical utilities such as uudecode, + tile-generation utilities, and so forth, all of which need to execute + on the build platform during the build process to produce output files + for use during the game, that are reasonably portable (not architecture + and/or operating system dependent; only the output of the utilities + becomes part of the game package, not the executable utilities + themselves. + 8. Compile and link the game itself. + 9. Package the game and its required files including the output from + previous steps 2b, 2c, 4, 6, 7 and 8 above. + +Steps 1, 2a, 2b, 7, and 9 above are not impediments to cross-compiling NetHack. + +Steps 2c, 3, 4, 5, 6 and 8 above are impediments to cross-compiling NetHack. + +That's because the files that those steps produce are very much tied to the +platform where the build of NetHack is being carried out. Variations between +platforms (such as 32-bit vs 64-bit, integer sizes, pointer sizes, processor +byte order, data alignment requirements, struct padding and the way bitfields +are stored) impact the portability of those data files between different +platforms and operating systems. If all those things happen to match, the files +might, just might, be usable across platforms, but the chances are against it, +and that certainly cannot be counted on. + + +------------------------------------------+ + | A3. Building NetHack 3.7 (going forward) | + +------------------------------------------+ + +Again, very generally, the build of NetHack in 3.7 requires the following +steps to be carried out: + + 1. Compile and link util/makedefs. + 2. Run makedefs repeatedly with different command line options to produce + several required output files that contain information required by the + game, or contain information about the game during its execution, that + are stored in a portable, platform-independent way, that need to be + inserted into the game package (makedefs -d, -o, -r, -h, -s). + 3. Compile and link several less critical utilities such as uudecode, + tile-generation utilities, and so forth, all of which need to execute + on the build platform during the build process to produce output files + for use during the game, that are reasonably portable (not architecture + and/or operating system dependent; only the output of the utilities + becomes part of the game package, not the executable utilities + themselves. + 4. Compile and link the game components for the TARGET; that includes + NetHack itself, Lua, and any optional regular-expression or window port + libraries that you plan to link into the NetHack game executable. + 5. Package the game and its required files including the output from + previous steps 2, 3 and 4 above. + +Step 4 is now the only impediment to cross-compiling NetHack. That impediment +is resolved by executing step 4 using a cross-compiler that runs on the build (host) +platform to produce a resulting binary for the target platform, instead of +executing the native compiler. + + +-----------------------------------------------------+ + | A4. How was the build procedure reduced to 5 steps? | + +-----------------------------------------------------+ + +The following are among several design changes planned in NetHack 3.7, +and these specific changes are what altered the build process to make +cross-compiling possible: + + o There is no creation of platform-dependent files, such as the quest + text files, by makedefs during the build process. Instead, the quest + text files have been converted to Lua and are inserted into the game + package for processing by the embedded Lua during execution of NetHack. + + o There is no build-time level compiler involved. Instead, the level + descriptions have been converted to Lua and are inserted into the game + package for processing by the embedded Lua during execution of NetHack. + + o There is no build-time dungeon compiler involved. Instead, the dungeon + description has been converted to Lua and is inserted into the game + package for processing by the embedded Lua during execution of NetHack. + + o Some of the build and option information that was formerly produced + during build time by makedefs, and contained information about the + build-platform specifically, is now produced at runtime within the + game under a cross-compiled build. As such, it now produces information + applicable to the target NetHack environment, not the build environment. + + +------------------------------------------------------------+ + | A5. How can I help with the cross-compiling initiative? | + +------------------------------------------------------------+ + + o If you have a favourite target platform (let's call it XX-Platform for + example purposes) that you'd like to see NetHack be able to run on, do + some research to find out if a cross-compiler exists that: + - produces output for XX-Platform. + - executes on a platform that you use and love (Linux, Windows, + macOS are some examples of platforms that have cross-compilers + for other targets available) + + o Then, make the community, devteam, and others aware that you're starting + a cross-compile of NetHack for XX-Platform. You might need to ask some + "starting out" questions initially, and as you get deeper into it, you + might need to ask some tougher questions. + + o Perhaps consider forking from NetHack on GitHub, and do the + cross-compiler work there in your fork. Strive to get it to a point where + it's ready to play-test on XX-Platform, or perhaps even use an emulator + of XX-Platform if one is available. We live in a time where plenty do. + + Doing your work on a GitHub fork has the following advantages: + - It will make it really simple to integrate your work back into + the NetHack source tree if that's one of your goals. + - It will make it possible and straightforward to merge upstream + NetHack changes into your work for the XX-Platform cross-compile + so that it stays current with the game as it evolves. + - You may get help from others in the form of suggestions, or + pull-requests, or offers to join the development. Chances are, + you aren't the only person out there that would like to + establish/resurrect/maintain NetHack on XX-Platform. + + Have fun! + +----------------------------------------------------------------------------- + Part B - Cross-compiling details +----------------------------------------------------------------------------- + +Part B Contents: + B1. Two sets of compiles and procedures + B2. What needs to be built and executed on the HOST? + B3. What needs to be built for the TARGET? + B4. Case sample: msdos + + +-----------------------------------------+ + | B1. Two sets of compiles and procedures | + +-----------------------------------------+ + +The HOST is the platform/place that you're running the build procedures using +the native compiler/linker, and the cross-compiler/linker that runs on the HOST +to build the game for a TARGET platform. + +You have to: + 1. Build mandatory utilities on the HOST. + 2. Execute the mandatory utilities to generate components that will be used + during step 4 to build the game itself, or that will generate components + that will become part of the TARGET game package. + 3. Build optional or enhancing utilities on the HOST, execute those + optional or enhancing utilities on the HOST to generate components that + will become part of the TARGET game package. + 4. Execute a supported cross-compiler to compile the rest of the game + components like NetHack, Lua, and any optional libraries (the word + "supported", in this sense, means a compiler that runs on your HOST + build platform, and generates output executable files for the TARGET + platform). + +It should be mentioned that you can execute the cross-compile build approach +to generate binaries for the same platform as the host, where the HOST +compiler and the TARGET compiler are the same. + + + +------------------------------------------------------+ + | B2. What needs to be built and executed on the HOST? | + +------------------------------------------------------+ + +On the HOST, here are the mandatory things that have to be built. + + a) Using the HOST native compiler, build HOST native utility makedefs + + Compile and link the following with these compiler switches: + -DCROSSCOMPILE + from sources: util/makedefs.c, src/mdlib.c, src/monst.c, src/objects.c + src/date.c, src/alloc.c + + b) Execute HOST native makedefs utility, util/makedefs, as follows: + Required for complete packaging of the game, but not the C source + game compile: + util/makedefs -d + util/makedefs -r + util/makedefs -h + util/makedefs -s + + c) Using the HOST native compiler, build these additional utilities if your + target platform requires components that they produce. It is important + to note that all of the required source files need to be compiled to + native obj files for linking into the HOST-side utility. Some of the + source files (src/monst.c, src/objects.c) were likely already compiled + as native HOST-side obj files in order to build the native HOST utility + 'makedefs' HOST utility above, and you don't need to compile them again + for use in linking other HOST utilities if the HOST-native obj files + produced from them are still around. + + NOTE: There are some source files that need to be compiled for linking + into utilities that are needed on the HOST side, but that are also + needed again later as TARGET obj files for linking into the TARGET + executable, and therefore must be compiled twice. + They include: src/drawing.c, src/objects.c, src/monst.c, + src/alloc.c, util/panic.c. It is important to keep the compiled + HOST-side obj files produced by the HOST native compiler distinct from + the TARGET-side obj files produced by the cross-compiler. That can be + accomplished either by naming the generated object files a little + differently (perhaps with a suffix) between the HOST-side and the + TARGET-side, or by placing the HOST-side obj files and the TARGET-side + obj files into distinct, different directories during the build process. + Use whatever method works best for your cross-compile effort and tools. + + util/dlb + + from sources: src/dlb.c, src/dlb_main.c, src/alloc.c, + util/panic.c + purpose: For packaging up many files that are + required components of the TARGET game + into a single nhdat or nhdat370 combined + file + + util/uudecode + + from sources: sys/share/uudecode.c + purpose: convert some binary files, that are + distributed in the NetHack sources in + uuencoded format, back into their + original binary state + util/tilemap + + from sources: win/share/tilemap.c + purpose: produce output file src/tile.c that is + required for building TARGET packages with + tile support + + util/tile2bmp + + from sources: win/share/tile2bmp.c, win/share/tiletext.c, + win/share/tilemap.c, src/drawing.c, + src/monst.c, src/objects.c + purpose: Read win/share/monsters.txt, + win/share/objects.txt and win/share/other.txt + files and produce a .bmp file. + + util/gif2txt + + from sources: win/share/gifread.c, win/share/tiletext.c, + win/share/tilemap.c, src/drawing.c, + src/monst.c, src/objects.c, + src/alloc.c, util/panic.c + purpose: Read win/share/monsters.txt, + win/share/objects.txt and win/share/other.txt + files and produce a .gif file. + + util/ppmwrite + + from sources: win/share/ppmwrite.c, win/share/tiletext.c, + win/share/tilemap.c, src/drawing.c, + src/monst.c, src/objects.c, + src/alloc.c, util/panic.c + purpose: Read win/share/monsters.txt, + win/share/objects.txt and win/share/other.txt + files and produce a .ppm file. + + + +--------------------------------------------+ + | B3. What needs to be built for the TARGET? | + +--------------------------------------------+ + + +For the TARGET side, here are the mandatory things that have to be built via +the HOST-executed cross-compiler that generates code for the TARGET platform. + +Using the cross-compiler, build the following targets: + + a) NetHack sources (core is mandatory) + + With the cross-compiler and linker for the TARGET platform, + cross-compile and link with these compiler switches: + -DCROSSCOMPILE and -DCROSSCOMPILE_TARGET + + core sources (2019): src/allmain.c, src/alloc.c, src/apply.c, + src/artifact.c, src/attrib.c, src/ball.c, + src/bones.c, src/botl.c, src/cmd.c, src/dbridge.c, + src/decl.c, src/detect.c, src/dig.c, src/display.c, + src/dlb.c, src/do.c, src/do_name.c, src/do_wear.c, + src/dog.c, src/dogmove.c, src/dokick.c, + src/dothrow.c, src/drawing.c, src/dungeon.c, + src/eat.c, src/end.c, src/engrave.c, src/exper.c, + src/explode.c, src/extralev.c, src/files.c, + src/fountain.c, src/hack.c, src/hacklib.c, + src/insight.c, src/invent.c, src/isaac64.c, + src/light.c, src/lock.c, src/mail.c, + src/makemon.c, src/mcastu.c, + src/mdlib.c, src/mhitm.c, src/mhitu.c, src/minion.c, + src/mklev.c, src/mkmap.c, src/mkmaze.c, src/mkobj.c, + src/mkroom.c, src/mon.c, src/mondata.c, + src/monmove.c, src/monst.c, src/mplayer.c, + src/mthrowu.c, src/muse.c, src/music.c, + src/nhlsel.c, src/nhlua.c, src/nhlobj.c, + src/o_init.c, src/objects.c, src/objnam.c, + src/options.c, src/pager.c, src/pickup.c, + src/pline.c, src/polyself.c, src/potion.c, + src/pray.c, src/priest.c, src/quest.c, + src/questpgr.c, src/read.c, src/rect.c, + src/region.c, src/restore.c, src/rip.c, src/rnd.c, + src/role.c, src/rumors.c, src/save.c, src/sfstruct.c, + src/shk.c, src/shknam.c, src/sit.c, src/sounds.c, + src/sp_lev.c, src/spell.c, src/steal.c, src/steed.c, + src/symbols.c, src/sys.c, src/teleport.c, + src/timeout.c, src/topten.c, src/track.c, + src/trap.c, src/u_init.c, src/uhitm.c, src/vault.c, + src/version.c, src/vision.c, + src/weapon.c, src/were.c, src/wield.c, src/windows.c, + src/wizard.c, src/worm.c, src/worn.c, src/write.c, + src/zap.c, sys/share/cppregex.cpp + + tty sources: win/tty/getline.c, win/tty/termcap.c, + win/tty/topl.c, win/tty/wintty.c + + generated (if req'd): + src/tile.c + + plus your platform-specific source files that contain main, typically + *main.c, and unix support in *unix.c, tty support in *tty.c, and other + system support in *sys.c as well as others sources pertaining to your + specific target platform(s). + + b) Lua (mandatory in 3.7) + + lib/lua-5.4.6/src + + from sources: lua.c, lapi.c, lauxlib.c, lbaselib.c, lcode.c, + lcorolib.c, lctype.c, ldblib.c, ldebug.c, + ldo.c, ldump.c, lfunc.c, lgc.c, linit.c, + liolib.c, llex.c, lmathlib.c, lmem.c, + loadlib.c, lobject.c, lopcodes.c, + loslib.c, lparser.c, lstate.c, lstring.c, + lstrlib.c, ltable.c, ltablib.c, ltm.c, + lundump.c, lutf8lib.c, lvm.c, lzio.c, + lbitlib.c + purpose: links into the game executable to interpret + lua level description files, lua dungeon + description files, and a lua quest text file. + + d) recover (optional if desired/required; some targets have recover + functionality built into NetHack itself) + + c) Additional optional library packages/obj files as required + + lib/pdcurses/... + or lib/pdcursesmod/... + + from sources: addch.c, addchstr.c, addstr.c, attr.c, beep.c, + bkgd.c, border.c, clear.c, color.c, delch.c, + deleteln.c, getch.c, getstr.c, getyx.c, + inch.c, inchstr.c, initscr.c, inopts.c, + insch.c, insstr.c, instr.c, kernel.c, + keyname.c, mouse.c, move.c, outopts.c, + overlay.c, pad.c, panel.c, printw.c, + refresh.c, scanw.c, scr_dump.c, scroll.c, + slk.c, termattr.c, touch.c, util.c, window.c, + debug.c, pdcclip.c, pdcdisp.c, pdcgetsc.c, + pdckbd.c, pdcutil.c + purpose: underlying curses platform support for some + target platforms where inclusion of the + NetHack curses window port in win/curses is + desired + + +-------------------------+ + | B4. Case sample: msdos | + +-------------------------+ + +Cross-compiler used: Andrew Wu's djgpp cross-compiler +Cross-compiler url: https://github.com/andrewwutw/build-djgpp +Cross-compiler pre-built binary downloads: + https://github.com/andrewwutw/build-djgpp/releases + + Cross-compiler bits tested: + https://github.com/andrewwutw/build-djgpp + and the pre-built binary for your platform from: + https://github.com/andrewwutw/build-djgpp/releases + and a DOS-extender (for including in msdos packaging) from + http://sandmann.dotster.com/cwsdpmi/csdpmi7b.zip + and pdcurses from: + https://github.com/wmcbrine/PDCurses.git + or pdcursesmod from: + https://github.com/Bill-Gray/PDCursesMod.git + + - A shell script to download that djgpp cross-compiler and associated + pieces for either linux or macOS is available: + + sh sys/msdos/fetch-cross-compiler.sh + + That script won't install anything, it just does file fetches and stores + them in subfolders of lib. The linux.370 and macOS.370 hints files are + configured to find the cross-compiler there if you add + CROSS_TO_MSDOS=1 + on your make command line. + + Note: Both the fetch-cross-compiler.sh script and and the msdos + cross-compile and package procedures require unzip and zip to be available + on your host build system. + + On your linux host: + + cd sys/unix ; sh setup.sh hints/linux.370 ; cd ../.. + make fetch-lua + + On your macOS host: + + cd sys/unix ; sh setup.sh hints/macOS.370 ; cd ../.. + make fetch-lua + + The MSDOS cross-compile can then be carried out by specifying + CROSS_TO_MSDOS=1 on the make command line: + + make CROSS_TO_MSDOS=1 all + make CROSS_TO_MSDOS=1 package + + You can explicitly include tty and curses support if desired. The default + you'll end up with is a tty-only cross-compile build: + + make WANT_WIN_TTY=1 WANT_WIN_CURSES=1 CROSS_TO_MSDOS=1 package + + Result: The "make package" target will bundle all of the necessary + components to run NetHack on msdos into a folder: + targets/msdos/pkg + and then it zips the contents of that folder into: + targets/msdos/nh370dos.zip + + Also note that building the msdos targets using the make command + above, does not preclude you from building local linux or macOS + targets as well. Just drop the CROSS_TO_MSDOS=1 from the make + command line. That's because the cross-compiler hints additions are + enclosed inside ifdef sections and won't interfere with the + non-cross-compile build in that case. + + +-------------------------+ + | B5. Case sample: amiga | + +-------------------------+ + +Disclaimer: This is a minimal recipe, just to help someone else get + started if they have a desire to get a full cross-compile of + NetHack going for the Amiga. + See CAVEATS below. + +Cross-compiler used: bebbo's amiga-gcc +Cross-compiler url: https://github.com/bebbo/amiga-gcc + + To our knowledge, a pre-built copy of the cross-compiler isn't available, + so you will likely have to obtain the cross-compiler sources via git and + build it on your system. + + The build prerequisite packages for building the compiler on Ubuntu can be + easily obtained: + + sudo apt install make wget git gcc g++ lhasa libgmp-dev \ + libmpfr-dev libmpc-dev flex bison gettext texinfo ncurses-dev \ + autoconf rsync + + The build prerequisite packages for macOS via homebrew are documented but + not tested by us any of us to date. + + brew install bash wget make lhasa gmp mpfr libmpc flex gettext \ + texinfo gcc make autoconf + + After installing the prerequite packages and the cross-compiler + it was a straightforward build: + + git clone https://github.com/bebbo/amiga-gcc.git + cd amiga-gcc + make update + + [Note that you may have to take ownership of the files in the bebbo + repo via chown before succesfully carrying out the next steps] + + make clean + make clean-prefix + date; make all -j3 >&b.log; date + + The compiler pieces are installed in /opt/amiga by default. If you prefer, + you can alter the prefix before you build if you want. The instructions + for doing so were spelled out at the time of this writing at: + + https://github.com/bebbo/amiga-gcc + + On your linux host: + + cd sys/unix ; sh setup.sh hints/linux.370 ; cd ../.. + make fetch-lua + + On your macOS host: + + cd sys/unix ; sh setup.sh hints/macOS.370 ; cd ../.. + make fetch-lua + + The Amiga cross-compile can then be carried out by specifying + CROSS_TO_AMIGA=1 on the make command line: + + make CROSS_TO_AMIGA=1 all + make CROSS_TO_AMIGA=1 package + + You can explicitly include tty and curses support if desired, otherwise + you'll end up with a tty-only cross-compile build. The SDL1 pdcurses + support has not been tested. + + make WANT_WIN_TTY=1 WANT_WIN_CURSES=1 CROSS_TO_AMIGA=1 all + + Result: The "make package" target will bundle the (hopefully) necessary + components to run NetHack on msdos into a folder: + targets/amiga/pkg + and then it zips the contents of that folder into: + targets/amiga/nh370ami.zip + + Also note that building the amiga targets using the make command + above, does not preclude you from building local linux or macOS + targets as well. Just drop the CROSS_TO_AMIGA=1 from the make + command line. + + The cross-compiler hints additions are enclosed inside ifdef sections + and won't interfere with the non-cross-compile build in that case. + + CAVEATS: The original NetHack Amiga build steps included the source for + some utilities that were built and executed on the amiga: + txt2iff and xpm2iff + as part of the NetHack build procedure on amiga. + Those did not compile out-of-the-box on the linux host. They + will either have to be: + - ported to build and run on the linux or macOS cross-compile + host + or + + - their functionality will have to be rolled into amiga NetHack + itself and executed on the target Amiga the first time the game + is run, perhaps. + + If you make headway, or are successful getting a working copy of + NetHack going on the amiga, drop us a note at devteam@nethack.org. + + +--------------------------------+ + | B6. Case sample: Web Assembly | + +--------------------------------+ + +Credit: The initial Web Assembly cross compile was found in a pull request: + https://github.com/NetHack/NetHack/pull/385 + by apowers313. The pull request was merged with some accompanying + NetHack source tree integration changes in early October 2020. + +Cross-compiler used: emscripten +Cross-compiler url: https://emscripten.org/docs/getting_started/downloads.html + + Here's a brief guide to obtaining the cross-compiler sources via git and + building it on your system. + + For Ubuntu, the build prerequisite packages for building the compiler can + be easily obtained: + + sudo apt-get install python3 cmake default-jre + + For macOS, you will need to install Xcode, git, cmake, Python 3.5 or new + (at time of this writing). + + After installing the prerequite packages above, obtain the cross-compiler + via git and build it from the directory of your choice using steps similar + to these: + + git clone https://github.com/emscripten-core/emsdk.git + cd emsdk + git pull + ./emsdk install latest + ./emsdk activate latest + source ./emsdk_env.sh + + The steps above reflect what was outlined at this url at the time + of writing: + + https://emscripten.org/docs/getting_started/downloads.html + + That is the definitive source and trumps anything documented here. + + On your linux host, prepare to cross-compile NetHack as follows: + + cd sys/unix ; sh setup.sh hints/linux.370 ; cd ../.. + make fetch-lua + + On your macOS host, prepare to cross-compile NetHack as follows: + + cd sys/unix ; sh setup.sh hints/macOS.370 ; cd ../.. + make fetch-lua + + Then, cross-compile to targets/wasm as follows: + + make CROSS_TO_WASM=1 + + You can build src/libnh.a from pull request 385 as follows: + + make WANT_LIBNH=1 + + Do not add any additional windowport interfaces to your build + (such as WANT_WIN_TTY=1 WANT_WIN_CURSES=1 WANT_WIN_X11=1 or + WANT_WIN_QT=1) as those aren't applicable to the Web Assembly + or nethacklib builds. A "shim" pseudo-windowport is included + from pull request 385. + + Result: As mentioned, the wasm cross-compile will end up in + targets/wasm and the nethacklib.a will end up in + src. + + The cross-compiler hints additions are enclosed inside ifdef sections + and shouldn't interfere with the non-cross-compile builds using + hints/linux.370 or hints/macOS.370. + +--- + diff --git a/src/NetHack_3.7/DEVEL/.gitattributes b/src/NetHack_3.7/DEVEL/.gitattributes new file mode 100644 index 0000000..835917d --- /dev/null +++ b/src/NetHack_3.7/DEVEL/.gitattributes @@ -0,0 +1,7 @@ +*.txt NHSUBST +nhgitset.pl NHSUBST +hooksdir/* NHSUBST +* text=auto +DOTGIT/TARGET NH_header=no +hooksdir/TARGET NH_header=no +* NH_filestag=(file%s_for_people_developing_changes_to_NetHack) diff --git a/src/NetHack_3.7/DEVEL/DOTGIT/TARGET b/src/NetHack_3.7/DEVEL/DOTGIT/TARGET new file mode 100644 index 0000000..6b8710a --- /dev/null +++ b/src/NetHack_3.7/DEVEL/DOTGIT/TARGET @@ -0,0 +1 @@ +.git diff --git a/src/NetHack_3.7/DEVEL/Developer.txt b/src/NetHack_3.7/DEVEL/Developer.txt new file mode 100644 index 0000000..99846d8 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/Developer.txt @@ -0,0 +1,234 @@ + ___ _ + | \ _____ _____| |___ _ __ ___ _ _ + | |) / -_) V / -_) / _ \ '_ \/ -_) '_| + |___/\___|\_/\___|_\___/ .__/\___|_| + |_| + +# NetHack 3.7 Developer.txt $NHDT-Date: 1596498265 2020/08/03 23:44:25 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.19 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +Welcome to the NetHack Infrastructure Developer's Guide. + +This is the info you need if you are developing code for NetHack. +(This information is from DevTeam. If you are working with a variant please +check for additional documentation for that variant.) + +For information on building NetHack, see README in the top level directory. +For information on playing NetHack, see the Guidebook in the doc directory. + +DANGER! WORK IN PROGRESS! Known issues marked XXX. + +CONTENTS +1. email +2. git repositories +3. bug reporting +4. git configuration +5. variable expansion +6. reserved names +7. nhadd/nhcommit +8. hooks +------------------------------------------------------------------------------ +1. email +Email to devteam@nethack.org will usually get a response, but it may take a +while. Please do not send save files, binary screen grabs, or other large +things. +------------------------------------------------------------------------------ +2. git repositories +The public NetHack git repository is available (read-only) at: + https://github.com/NetHack/NetHack + or + https://sourceforge.net/p/nethack/NetHack/ + +Branches: +NetHack-3.6.0 The 3.6.0 release code and subsequent fixes and additions. +------------------------------------------------------------------------------ +3. bug reporting +Please use the form at http://www.nethack.org/common/contact.html (or send +us an email if that's more appropriate). +------------------------------------------------------------------------------ +4. git configuration + +NOTE: These instructions assume you are on the default branch; this _is_ + where you want to be for setting things up. This may or may not be + the branch you want to use for your changes; see the appropriate + project private documentation for more information (if you are working + alone we suggest using branch names starting with "LOCAL-"). + +NOTE: The following instructions require perl. If you do not have perl on + your system, please install it before proceeding. + +A. If you have never set up git on this machine before: + (This assumes you will only be using git for NetHack. If you are going to + use it for other projects as well, think before you type.) + Tell git what name (or nickname) and email address to use for you: + git config --global user.name "MY NAME" + git config --global user.email USER@EXAMPLE.COM + You probably want to set up a credential cache. + macOS (10 - 12): + git config --global credential.helper osxkeychain + Windows: + git config --global credential.helper store +XXX linux +B. Specify the prefix for variable substitution: + (This assumes you are not a member of DevTeam or any variant's development + team. If you are, this may be wrong. Look for more specific documentation. + For example, this file uses "MINE" for the substitution prefix - this will + almost always be wrong if you are working with someone else.) + Decide where you want to put this info; it should NOT be inside the + tree you cloned from git. I use ~/nethack/GITADDDIR; for that base, + create the needed directories and edit the file: + ~/nethack/GITADDDIR/DOTGIT/PRE + Put this in it (if your OS is not Unix-like you may need to change + the first line): + #!/bin/sh + git config nethack.substprefix MINE + Now make it executable: + chmod +x ~/nethack/GITADDDIR/DOTGIT/PRE +C. Configure the repository: + - cd to the top level of the repository + - tell the repository about the directory you created above: + git config nethack.gitadddir FULL_PATH_TO_GITADDDIR + so for the example above: + git config nethack.gitadddir ~/nethack/GITADDDIR + - do the automated setup: + perl DEVEL/nhgitset.pl + If it complains, fix what it complains about. nhgitset.pl accepts + the following options: + -v verbose + -n dry run + You can re-run nhgitset.pl as often as needed; occasionally we will + update it (or something it installs) and you will need to run it again + so the changes take effect. +D. aliases + Two aliases are installed by nhgitset.pl: + nhadd + nhcommit + These two commands take the same options as the normal git add and commit + commands but perform RCS/CVS-style variable substitution. + + Note that nothing terrible will happen if you do not use the nh* versions + of the commands. + + Supported substitutions: + MINE-Date the commit time and date + Experimental substitutions: + MINE-Revision CVS style revision number + MINE-Branch the current git branch + + For direct access to the substitution mechanism, use: + nhsub + + See the section "nhadd/nhcommit" for details on those aliases. + Run "perldoc DEVEL/hooksdir/nhsub" for details on nhsub. + +That's it. If you need to do something more when setting up your repository, +keep reading. Otherwise, you are done with this section. + +1) to run your own hooks in addition to ours: + name your hook + WHEN-HOOKNAME + where WHEN is + PRE (run your code before the NetHack hook) + POST (run your code after the NetHack hook) + and HOOKNAME is the normal git name of the hook. + Make sure the hooks are executable (chmod +x ...). + Be sure to test carefully since the composition of two bits of code may or + may not do what you want. +2) to install other bits on setup: + Put additional files in the GITADDDIR tree. Use "DOTGIT" instead of + ".git". If a file called PRE, POST, or INSTEAD exists in a + subdirectory of GITADDDIR, it is run before the copy, after the copy, + or instead of the copy. No copy operation is attempted in the DOTGIT + directory; use a script and standard git commands to change the + contents as needed. +3) NB: In all namespaces, anything that matches m/^nh/i or m/^nethack/i is + reserved. +------------------------------------------------------------------------------ +5. variable expansion +A. Introduction + We have implemented an RCS/CVS/SVN style variable expansion mechanism. + References of either of the formats: + $PREFIX-VARNAME$ + $PREFIX-VARNAME: VALUE $ + will be handled (if enabled). + + The PREFIX is the value in the git config variable nethack.substprefix. + VARNAME is one of: + Date + Branch (experimental) + Revision (experimental) + other names will give a warning. + +B. Enabling variable expansion + Variable expansion is controlled by the .gitattributes file. + + To enable variable expansion: + pattern NHSUBST + To disable variable expansion: + pattern -NHSUBST + + More information: "git help gitattributes" + +C. Oddities + To trigger variable expansion, you _must_ use "git nhadd" or "git nhcommit" + instead of "git add" or "git commit." Nothing terrible will happen if you + use the wrong one, but the values will not be updated. + + Variable expansion modifies the files in the work tree - your editor or + IDE may or may not be happy with this. + +D. Using your own hooks + You can use your own hooks - put them in .git/hooks as usual BUT name them + as follows: + WHEN-HOOKNAME + where WHEN is: + PRE (execute the code before the NetHack hook) + POST (execute the code after the NetHack hook) + and HOOKNAME is the normal git name for the hook. + + Test carefully - interactions between hooks can be nasty. +------------------------------------------------------------------------------ +6. reserved names + Anything that matches m/^nh/i or m/^nethack/i is reserved in all + namespaces (environment, file names, git config, etc). +------------------------------------------------------------------------------ +7. nhadd/nhcommit + nhadd is essentially "git nhsub $*; git add $*" + nhcommit is essentially "git nhsub $*; git commit $*" + + As "git add" and "git commit" have complex arguments, nhsub attempts to + do the right thing - or at least something reasonable - for most arguments. + If nhadd/nhcommit don't do what you need, run "git nhsub" on its own then + add/commit. + + So when do I need to use what? + The object is to get nhsub run right before git takes a snapshot of each + file. So for example: + - use "git nhcommit " instead of "git commit " + - use "git nhadd " instead of "git add " + - use either "git commit" or "git nhcommit" (because the snapshot was + already taken) + - if you use "git nhsub " then you can "git add " or + "git commit " + + For more complex situations, "git nhsub" takes -v and -n flags - see + "perldoc DEVEL/hooksdir/nhsub". + +------------------------------------------------------------------------------ +8. hooks + + nhgitset.pl also installs hooks into .git/hooks. These hooks provide + a framework which allows local hook code to co-exist with hook code we + supply - see DEVEL/hooksdir/NHgithook.pm for details. + + We currently use the following hooks: + post-checkout + post-commit + post-merge + These are used to generate dat/gitinfo.txt which provides the data that + ends up available through the game command #version and the command line + option --version. + +------------------------------------------------------------------------------ + diff --git a/src/NetHack_3.7/DEVEL/code_features.txt b/src/NetHack_3.7/DEVEL/code_features.txt new file mode 100644 index 0000000..6c71000 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/code_features.txt @@ -0,0 +1,124 @@ +# NetHack 3.7 code_features.txt $NHDT-Date: 1596498264 2020/08/03 23:44:24 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.6 $ +# Copyright (c) 2015 by Michael Allison +# NetHack may be freely redistributed. See license for details. + +Developer-useful info about code features, assumptions, purpose, +rationale, etc. + +============================================== +FEATURE_NOTICE Alerts for a Release + +There is a code mechanism for alerting players to a change in behavior +over prior versions of the game. + +Here's how to do it: + o Where the change in behavior needs to alert the player, + - Add an 'if statement' to invoke the alert behavior + if the condition is met, for example + if (flags.suppress_alert < FEATURE_NOTICE_VER(3.6.0)) + pline("Note: and explain the change here."); + - The example above will alert the users for a new feature + added in 3.6.0 via a one-liner via pline(), but you + could get more elaborate (just make sure it is all done + in the 'if' code block. + +Once the user finds the alert no longer useful, or becoming +annoying, they can set the "suppress_alert" option. + - The user can only set the suppress_alert to the current + version, not future versions. That restriction is done + so that the feature can be used for new things in new + releases. + - The suppression can be done interactively mid game with + the 'O' command, or via + OPTIONS=suppress_alert:3.6.0 + in the user's config file. + +============================================== +PREFIXES_IN_USE and NOCWD_ASSUMPTIONS + +Those provide a storage mechanism for holding the paths to various different +types of files. Those paths are stored in the fqn_prefix[] array. They are a +mechanism for enabling separation of the different files that NetHack needs. + +The prefixes are added to the beginning of file names by various routines in +files.c immediately prior to opening one of the types of files that the game +uses. + +They aren't about config file options (although config file options would be +one way to set non-default values for some of the paths in the fqn_prefix[] +array). Obviously the very first path needed (now sysconfdir, previously +configdir) isn't viable for setting via config file options, but the game +still needs to hunt it down "someplace." When the "someplace" is figured +out, that place (path) would be stored in fqn_prefix[SYSCONPREFIX]. How it +gets stored in fqn_prefix[SYSCONPREFIX] is up to us as developers. + +Any of the fqn_prefix[] entries can be set somehow. It could be done in port +startup code; in options processing; in config file processing; by +translating a system environment variable such as USERPROFILE; whatever +you/we want. The point is that NOCWD_ASSUMPTIONS and PREFIXES_IN_USE are +there to ensure that there is a place to store that path information. The +code to *utilize* the information is already in files.c (see fqname()). + +There is a fqn_prefix[] entry for holding the path to each of the following: + PREFIX NAME +0 HACKPREFIX hackdir +1 LEVELPREFIX leveldir location to create level files +2 SAVEPREFIX savedir location to create/read saved games +3 BONESPREFIX bonesir location to create/read bones +4 DATAPREFIX datadir location to read data.base etc. +5 SCOREPREFIX scoredir location to read/write scorefile +6 LOCKPREFIX lockdir location to create/read lock files +7 SYSCONFPREFIX sysconfdir location to read SYSCF_FILE +8 CONFIGPREFIX configdir location to read user configuration file +9 TROUBLEPREFIX troubledir location to place panic files etc. + +To recap, they are about enabling "different paths for different things", and +separation of: +- read-only stuff from read-write stuff. +- sysadmin stuff from user-writable stuff. +etc. + +============================================== +REGULAR EXPRESSIONS + +There are multiple regular expression libraries supported. Currently, one (and +only one) of the following files should be linked into a built: + sys/share/cppregex.cpp + sys/share/posixregex.c + sys/share/pmatchregex.c + +This provides a way to access different system regular expression libraries, +or fall back onto pmatch() if none is available. cppregex.cpp uses the regular +expression library in the C++11 standard, and is the default on Windows. +posixregex.c uses the POSIX regular expression library, and is the default on +POSIX. pmatchregex.c is the fallback. + +Configuration files written using either of the two true regex engines are +compatible with one another, as the regular expressions are both POSIX +extended regular expressions. Configuration files written using the fallback +engine are incompatible. + +Additional regular expression implementations can be written. The full +interface documentation is in sys/share/posixregex.c + +=========================================================== +HEADER FILE NOTES + +hack.h defines values that are available to all NetHack source files, +contains enums for use in all NetHack source files, and contains a +number of struct definitions for use in all NetHack source files. +hack.h does not contain variable declarations or variable definitions. + +decl.h and decl.c are related: decl.h contains the extern declarations +for variables that are defined in decl.c. These variables are global +and available to all NetHack source files. +decl.c variable definitions are generally laid out in much the same +order as their corresponding declarations in decl.h. + +A new header file cstd.h was added to coincide with 3.7's switch to +C99. It contains calls to some C99 standard header files. + +=================== NEXT FEATURE ========================== + + + diff --git a/src/NetHack_3.7/DEVEL/code_style.txt b/src/NetHack_3.7/DEVEL/code_style.txt new file mode 100644 index 0000000..0f0edce --- /dev/null +++ b/src/NetHack_3.7/DEVEL/code_style.txt @@ -0,0 +1,289 @@ +# NetHack 3.7 code_style.txt $NHDT-Date: 1694890786 2023/09/16 18:59:46 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.8 $ +# Copyright (c) 2015 by Derek S. Ray +# NetHack may be freely redistributed. See license for details. + +NetHack DevTeam Coding Style +============================ + +NetHack is written in C, with a little bit of C++ to access platform +libraries. This coding style document is concerned primarily with the style +used for C source files. We do not have a defined style for C++ files, but C++ +should be styled in keeping with C. + +The code base in C files was, close to the 3.6 release, reformatted using a +version of the clang-format tool patched to support K&R-style argument +declarations. Due to some incompatibilities, the patch is not publicly +available and clang-format is not expected to be regularly used. Since then, +function declarations and definitions have been switched to ANSI. + +Developers should do their best to adhere to the coding style to promote +legible, easy-to-edit code. Legibility is paramount, so in some cases, it may +be better not to fully adhere to the style guidelines. + +Recipes for common text editors can be found at the end of this file. + +Indentation and Spacing +----------------------- + +The basic indentation is 4 spaces wide. All indentation is done using space +characters, not tabs. + +Lines should be at most 78 characters wide. If a line would be longer than the +limit, the line should be wrapped and the wrapped portion should be aligned +with the parentheses or brackets containing the wrap. If there is no set of +parentheses or brackets, the line should be indented four spaces. Wrapping +should normally occur after a comma or before a binary operator, when +possible: + + int index + = SomeExcessivelyLongExpression; + + fcall(arg1, + arg2, (cond13 + && cond2)); + +Single blank lines should be used wherever convenient to improve readability. + +Functions and Control Statements +-------------------------------- + +For a function definition, the return type, declarator, and opening brace +should each appear on a line of their own. Arguments are defined in the following +parenthesis, per ANSI. There are two general styles. One with no comments, where +arguments are added one after another, with a wrap aligning to the first argument +if there is an overflow. + + void + foo(int i, char c) + { + /* function body */ + } + + void + long_function_name(int first_arg, struct long_name *second_arg, + int third_arg, int forth_arg) + { + /* function body */ + } + +Alternatively, arguments can be one per line if they are commented: + + void + long_function_name(int first_arg, /* main operation */ + struct long_name *second_arg, /* control details */ + int third_arg, /* local conditions - if + they apply */ + int forth_arg) /* remote conditions */ + { + /* function body */ + } + +If the function takes no parameters: + + int + long_function_name(void) + { + /* function body */ + } + +Opening braces of control statements appear on the same line as the control +statement: + + if (condition) { + /* body */ + } + +Else statements and the while statements of do-while blocks appear on the same +line as the closing brace of the if or do statement. Otherwise, closing braces +always get a line of their own. + + if (condition) { + /* body */ + } else if (condition) { + do { + /* body */ + } while (condition); + } else { + /* body */ + } + +If a control block has only a single statement, it can appear on a line of its +own, with an indent. If the statement is a null statement, then it should be +expressed as an empty set block, not with a semicolon, because many compilers +will warn if a null statement is used: + + if (condition) + fcall(); + + if (condition) { + } else + fcall(); + +If multiple control blocks are being used in a row, it may be more readable to +use braces even for single statements, and they should be used if they improve +readability. The following is an example of poor usage: + + if (condition) { + /* long body */ + } else if (condition) + statement; + else { + /* very long body */ + } + +Switch statements should have the case labels unindented, and the statements +should be indented normally. The default case should occur last unless there's +a compelling reason not to, and fallthroughs should be explicitly marked as +such with a comment, to avoid Yeenoghu getting the touch of death again: + + switch (condition) { + case FOO: + case BAR: + fcall(); + /* fall-through */ + case BAZ: + fcall(); + break; + + default: + statement; + } + +Variables should never be declared in a condition or a for loop +initialization, and if an assignment is used as a condition, it should be +wrapped in an additional set of parentheses for clarity: + + int *p; + if ((p = fcall())) { + /* body */ + } + + int i; + for (i = 1; i < 10; ++i) { + /* body */ + } + +Variable names to avoid +----------------------- + + near, far Some compilers and cross-compilers that target old + processors with segmented architectures may treat + those as keywords. It is safest to just avoid them. + +Spaces in Expressions +--------------------- + +Spaces should appear around binary operators, after commas, after a C-style +cast, and after the keyword in a control statement. They should not appear +between a function name and the opening parenthesis of a function call, nor +immediately inside a pair of parentheses: + + foo(i, j, l); + if ((boolean) condition) { + /* body */ + } + +Casts and sizeof +---------------- + +Casts should separate the cast operator and its expression with a space: + '(char *) str' +'sizeof (type)' requires the parentheses. 'sizeof expression' does not; +using them is not wrong but omitting them avoids some visual clutter. +Using them without the separating space gives the false impression of a +function call or macro-with-argument(s) expansion; 'sizeof' is an operator +and the parentheses required for '(type)' are to treat it like a cast. + +Comments +-------- + +Some block comments are undecorated, just split into reasonable width lines: + /* this is + a comment */ +They usually don't include sentence punctuation. + +Others are more elaborate: + /* + * This is + * another comment. + */ +This style is usually used with sentence punctation, particularly if they +contain more than one sentence. + +End-of-line comments which need to span lines + somecode(); /* this comment + * is ok */ +should start every continuation line with an asterisk, otherwise clang-format +would convert them into a block comment + othercode(); /* this comment + should be avoided */ +because it would be converted into + othercode(); + /* this comment + should be avoided */ +if another bulk reformatting ever gets performed. Similarly, multiple +comments intended to read as one + morecode(); /* start of comment */ + /* more of comment */ + /* end of comment */ +are deprecated because they will end up losing the indentation of the +followup lines if reformatted. + +Many files end with + /*filename*/ +usually preceded by a blank line. This was intended as a workaround for a +comment--somewhere, possibly in Amiga or Atari code--that stated that some +compiler or other didn't always process the last line of the file. If that +last line is a comment, nothing is lost. The real issue almost certainly +was source file(s) that didn't end in newline. These days we try to force +the final newline for every file, prior to release if not always maintained +day-to-day. The name at the end can still be worthwhile when editing or +browsing multiple files. + + +Vim Configuration +================= + +For vim, the following settings are encouraged when editing NetHack code, to +ensure that indentation is done correctly: + + set shiftwidth=4 + set softtabstop=4 + set expandtab + set tabstop=4 + set shiftround + set textwidth=78 + set cindent + set filetype=c + + +Visual Studio Configuration +=========================== + +In Visual Studio under Tools->Options->Text Editor->C/C++, you can set the +following options to obtain desired behavior: + +[Tabs] +Indenting: Smart +Tab size: 4 +Indent size: 4 +Insert Spaces + +There are a number of other options under [Formatting] that should be +checked (Indentation, New Lines, Spacing, and Wrapping), but there are so +many entries that reproducing them here is impractical. Fortunately, the +options are in plain English, so walking through them with a copy of +this Guide handy and making changes as required will suffice. + +Emacs Configuration +=================== + +There are no doubt umpteen different ways to handle this in Emacs. +Putting the following in ~/.emacs.el is one + +(defun hook-c () + (setq c-set-style "k&r") + (setq c-basic-offset 4) + (setq indent-tabs-mode nil)) +(add-hook 'c-mode-common-hook 'hook-c) + diff --git a/src/NetHack_3.7/DEVEL/git_recipes.txt b/src/NetHack_3.7/DEVEL/git_recipes.txt new file mode 100644 index 0000000..e4ca949 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/git_recipes.txt @@ -0,0 +1,206 @@ +# NetHack 3.7 git_recipes.txt $NHDT-Date: 1596498266 2020/08/03 23:44:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.11 $ +# Copyright (c) 2015 by Derek S. Ray +# NetHack may be freely redistributed. See license for details. + +Git has a messy learning curve. This file is an attempt to serve as a quick +reference for basic tasks while you get up to speed. + +------------------------ + +[*] git checkout [-f] (branch) + +Switch your local repository to be at the most recent commit of (branch). +Including -f will discard changes made in the working directory. + + +[*] git status [-uall | -uno] + +Shows all changed files in your local repository and also a list of the ones +you have staged for commit. +Including -uall will also show you all untracked files in all subdirectories. +Including -uno will show you _no_ untracked files. + + +[*] git log [-NUM] +[*] git log +[*] git log [--pretty=one] +[*] git log (branch) + +For a full explanation of all the arguments you can pass to 'log', please see +the manual; there are a lot and these are just a few of the common ones. For +our purposes, git log will show you all the commits according to criteria +you specify: + +-NUM: The last NUM commits in this branch + : all commits between commit1 and commit2 +-pretty=one: format output as a single line for each entry +(branch): show the commits from (branch) instead of the current one + +[*] git log --pretty=one --decorate --graph --all + +(This is best explained by executing and looking at the output.) + + +[*] git add (filename) +[*] git nhadd (filename) + +Adds the changes you've made in (filename) to the pre-commit staging area. +(also referred to as the 'index') + OR +Make a new file be tracked by git. + +"nhadd" is the preferred syntax and will automatically update the source file +headers with the latest date, branch, and version. See Developer.txt for +details. + + +[*] git commit [-a] [-m "text"] +[*] git nhcommit [-a] [-m "text"] + +Commits all staged changes (in the index) to this branch in your local repo +from your current position. +Including -a will 'git add' all eligible files before doing so. +Including -m will use "text" as the commit message instead of opening an +editor window for you to create one. + +"nhcommit" is the preferred syntax and will automatically update the source file +headers with the latest date, branch, and version. See Developer.txt for +details. + + +[*] git push [--all] [-u origin (branch)] + +Sends all your commits for the current branch to the centralized repo. +Including --all will send the commits for _all_ branches. +Specifying -u is only needed the first time you push (branch) that you +created; it establishes the connection between local and remote for that +branch. + + +[*] git reset [--hard] (filename) + +Without any parameters, unstages the changes for (filename) from the index; +does not change the working tree. This is the equivalent of the command +git reset --mixed (filename); git reset --soft (filename) has no effect. + +With --hard, unstages (filename) from the index and reverts (filename) in +the working tree to the most recent commit. + +*** WARNING *** --hard _will_ throw away your changes. + + +[DSR: I'm hesitant about including this command because you can trash stuff +with it. But at the same time, for people who are adapting to a commit not +also automatically being a send, it's nice for them to know how to undo one in +case they do something wrong. thoughts?] + +[*] git reset [--soft | --mixed | --hard] HEAD~1 + +*** WARNING *** Never, EVER do this to a commit that you have already pushed; +you will be rewriting history on other people's machines and this will +generally turn out very poorly. + +With --soft, undoes the most recent 'git commit' action, but leaves the +changes in the index and in the working directory. + +With --mixed, does everything --soft does but also unstages the changes from +the index. If you don't specify one of the three, reset will assume this. + +With --hard, does everything --mixed does but also reverts the working tree to +the prior commit. + +*** WARNING *** --hard will effectively delete a commit and "lose" the changes. +[/end area-of-concern] + + +[*] git fetch [--all] + +Retrieve commits from the remote repository to your machine. +Including --all will get commits for all branches. +Does NOT merge them into your local repository. + + +[*] git pull + +Incorporate any fetched commits for the current branch into your repository +and update your position accordingly. This will create a merge commit (noting +that you merged a branch into itself). + + +[*] git rebase [no-arguments version ONLY] + +Incorporate fetched commits for the current branch into your repository, and +replay any local commits and changes afterwards on top. + +Quality picture-pages ASCII art: + + E---F---G---H (remote changes) + / + / +(branch 'frog') A---B---C---D---E'---F' (your local changes) + +After 'git fetch' and 'git rebase', it will look like this: + + --- (remote HEAD) + | + V +(branch 'frog') A---B---C---D---E---F---G---H---E'---F' + ^ ^ + | | + -------- (to be pushed) + + +[*] git branch (branch) + +Creates a new branch from the current commit you're pointed to. +Does not automatically checkout (switch to) the branch. + + +[*] git checkout -b (branch) + +Creates a new branch from the current commit you're pointed to, and +automatically checks out that branch. + + +[*] git branch --list | [--all | -a] | [--remotes | -r] + +Lists all branches matching . +With --all instead, lists all branches (including remotely tracked ones). +With --remotes instead, lists only remote branches. + + +[*] git merge (branch) [--no-commit] + +Merges all the changes from (branch) since it last diverged from a common +ancestor into your current branch. + +With --no-commit, does not automatically create a merge entry in the log but +leaves all the merged files in your working directory; to complete the merge +you must commit them manually later (likely after you have edited them). This +more accurately mimics the merge behavior of svn [and cvs?] + + +[*] git stash [save | apply | list] + +save: Takes all changes in your working directory and 'stashes' them in a temporary +holding area. Convenient if the command you're trying to run won't go unless +you have a clean working dir; also convenient to move experimental changes +between branches without needing to commit them. + +apply: Replays the named stash onto your current working directory as though +it were a patch. Does not delete the stash from the list. + +list: Lists all of your stashed code blobs. + + +======================================= +External Links +======================================= +http://pcottle.github.io/learnGitBranching + +======================================= +Typical workflows for common activities +======================================= + +{To be added in near future: DSR 3/15} + diff --git a/src/NetHack_3.7/DEVEL/gitinfo.pl b/src/NetHack_3.7/DEVEL/gitinfo.pl new file mode 100644 index 0000000..f348f8e --- /dev/null +++ b/src/NetHack_3.7/DEVEL/gitinfo.pl @@ -0,0 +1,36 @@ +#!/usr/bin/perl +# NetHack 3.7 getinfo.pl $NHDT-Date: 1596498266 2020/08/03 23:44:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +# Copyright (c) 2018 by Michael Allison +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); + + # special case for this script only: allow + # it to run from DEVEL or $TOP + if (-f "hooksdir/NHgithook.pm" || -f "DEVEL/hooksdir/NHgithook.pm"){ + push(@INC, "DEVEL/hooksdir"); + } + chdir("..") if (-f "hooksdir/NHgithook.pm"); +} +use NHgithook; + +&NHgithook::nhversioning; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/NHadd b/src/NetHack_3.7/DEVEL/hooksdir/NHadd new file mode 100644 index 0000000..c4d6e54 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/NHadd @@ -0,0 +1,22 @@ +#!/usr/bin/perl +# NetHack 3.7 NHadd $NHDT-Date: 1596498406 2020/08/03 23:46:46 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +# wrapper for nhadd and nhcommit aliases + +%ok = map { $_ => 1 } ('add', 'commit'); + +die "Bad subcommand '$ARGV[0]'" unless $ok{$ARGV[0]}; + +# we won't fail on a failure, so just system() +$rv = system('.git/hooks/nhsub',"--$ARGV[0]",@ARGV[1..$#ARGV]); +if($rv){ + print "warning: nhsub failed: $rv $!\n"; +} + +if(length $ENV{GIT_PREFIX}){ + chdir($ENV{GIT_PREFIX}) or die "Can't chdir $ENV{GIT_PREFIX}: $!"; +} + +exec "git", @ARGV or die "Can't exec git: $!"; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/NHgithook.pm b/src/NetHack_3.7/DEVEL/hooksdir/NHgithook.pm new file mode 100644 index 0000000..c7c3456 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/NHgithook.pm @@ -0,0 +1,252 @@ +# +# NetHack 3.7 NHgithook.pm $NHDT-Date: 1596498406 2020/08/03 23:46:46 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.7 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +# NetHack Git Hook Module + +package NHgithook; +use Cwd; + +### +### CONFIG +### +my $trace = 0; +my $tracefile = "/tmp/nhgitt.$$"; + +# OS hackery +my $DS = quotemeta('/'); +if ($^O eq "MSWin32") +{ + $DS = quotemeta('\\'); +} + +our %saved_env; +our @saved_argv; +our $saved_input; + +sub saveSTDIN { + @saved_input = ; + + if($trace){ + print TRACE "STDIN:\n"; + print TRACE $saved_input; + print TRACE "ENDSTDIN\n"; + } + + tie *STDIN, 'NHIO::STDIN', @saved_input; +} + +# XXX this needs a re-write (don't tie and untie, just set NEXT=0) +# (the sensitive thing is @foo = ) +sub resetSTDIN{ + my $x = tied(*STDIN); + my %x = %$x; + my $data = @$x{DATA}; + untie *STDIN; + tie *STDIN, 'NHIO::STDIN', $data; +} + +# don't need this now +#sub restore { +# open STDIN, "<", \$saved_input or die "reopen STDIN: $!"; +# @ARGV = @saved_argv; +# %ENV = %saved_env; +#} + +sub PRE { + &do_hook("PRE"); +} + +sub POST { + &do_hook("POST"); +} + +### +### store githash and gitbranch in dat/gitinfo.txt +### + +sub nhversioning { + use strict; + use warnings; + + my $git_sha = `git rev-parse HEAD`; + $git_sha =~ s/\s+//g; + my $git_branch = `git rev-parse --abbrev-ref HEAD`; + $git_branch =~ s/\s+//g; + die "git rev-parse failed" unless(length $git_sha and length $git_branch); + my $exists = 0; + + if (open my $fh, '<', 'dat/gitinfo.txt') { + $exists = 1; + my $hashok = 0; + my $branchok = 0; + while (my $line = <$fh>) { + if ((index $line, $git_sha) >= 0) { + $hashok++; + } + if ((index $line, $git_branch) >= 0) { + $branchok++; + } + } + close $fh; + if ($hashok && $branchok) { + print "dat/gitinfo.txt unchanged, githash=".$git_sha."\n"; + return; + } + } else { + print "WARNING: Can't find dat directory\n" unless(-d "dat"); + } + if (open my $fh, '>', 'dat/gitinfo.txt') { + my $how = ($exists ? "updated" : "created"); + print $fh 'githash='.$git_sha."\n"; + print $fh 'gitbranch='.$git_branch."\n"; + print "dat/gitinfo.txt ".$how.", githash=".$git_sha."\n"; + } else { + print "WARNING: Unable to open dat/gitinfo.txt: $!\n"; + } +} + +# PRIVATE +sub do_hook { + my($p) = @_; + my $hname = $0; + $hname =~ s!^((.*$DS)|())(.*)!$1$p-$4!; + if(-x $hname){ + print TRACE "START $p: $hname\n" if($trace); + + open TOHOOK, "|-", $hname or die "open $hname: $!"; + print TOHOOK ; + close TOHOOK or die "close $hname: $! $?"; + + print TRACE "END $p\n" if($trace); + } +} + +sub trace_start { + return unless($trace); + my $self = shift; + open TRACE, ">>", $tracefile; + print TRACE "START CLIENT PID:$$ ARGV:\n"; + print TRACE "CWD: " . cwd() . "\n"; + print TRACE "[0] $0\n"; + my $x1; + for(my $x=0;$x $ENV{$k}\n"; + } +} + +BEGIN { + %saved_env = %ENV; + @saved_argv = @ARGV; + &trace_start; +} + +### +### ugly mess so we can re-read STDIN +### +package NHIO::STDIN; +sub TIEHANDLE { + my $class = shift; + my %fh; + # XXX yuck + if(ref @_[0]){ + $fh{DATA} = @_[0]; + } else { + $fh{DATA} = \@_; + } + $fh{NEXT} = 0; + return bless \%fh, $class; +} + +sub READLINE { + my $self = shift; + return undef if($self->{EOF}); + if(wantarray){ + my $lim = $#{$self->{DATA}}; + my @ary = @{$self->{DATA}}[$self->{NEXT}..$lim]; + my @rv = @ary[$self->{NEXT}..$#ary]; + $self->{EOF} = 1; + return @rv; + } else{ + my $rv = $self->{DATA}[$self->{NEXT}]; + if(length $rv){ + $self->{NEXT}++; + return $rv; + } else { + $self->{EOF} = 1; + return undef; + } + } +} + +sub EOF { + $self = shift; + return $self->{EOF}; +} + +1; +__END__ + +=head1 NAME + +NHgithook - common code for NetHack git hooks (and other git bits) + +=head1 SYNOPSIS + + BEGIN { + my $DS = quotemeta('/'); + my $PDS = '/'; + if ($^O eq "MSWin32") + { + $DS = quotemeta('\\'); + $PDS = '\\'; + } + + push(@INC, $ENV{GIT_DIR}.$PDS."hooks"); # for most hooks + push(@INC, ($0 =~ m!^(.*)$DS!)[0]); # when the above doesn't work + + $gitdir = `git rev-parse --git-dir`; # and when the above really doesn't work + $gitdir =~ s/[\r\n]*$/; + push(@INC, $gitdir.$PDS."hooks"); + } + use NHgithook; + + &NHgithook::saveSTDIN; + &NHgithook::PRE; + (core hook code) + &NHgithook::POST; + +=head1 DESCRIPTION + +Buffers call information so multiple independent actions may be coded for +Git hooks and similar Git callouts. + +=head1 SETUP + +Changing the C<$trace> and C<$tracefile> variables requires editing the +module source. Setting C<$trace> enables tracing, logs basic information, +and leaves the C filehandle open for additional output; output to this +filehandle must be guarded by C<$NHgithook::trace>. Setting +C<$tracefile> specifies the file used for trace output. Note that C<$$> +may be useful since multiple processes may be live at the same time. + +=head1 FUNCTIONS + + NHgithook::saveSTDIN reads STDIN until EOF and saves it + NHgithook::PRE runs the PRE hook, if it exists + NHgithook::POST runs the POST hook, if it exists + +=head1 BUGS + +Some features not well tested, especially under Windows. + +=head1 AUTHOR + +Kenneth Lorber (keni@his.com) diff --git a/src/NetHack_3.7/DEVEL/hooksdir/NHsubst b/src/NetHack_3.7/DEVEL/hooksdir/NHsubst new file mode 100644 index 0000000..99621fc --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/NHsubst @@ -0,0 +1,398 @@ +#!/usr/bin/perl +# NetHack 3.7 NHsubst $NHDT-Date: 1596498407 2020/08/03 23:46:47 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.5 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +# git merge driver for substitutions (like RCS/CVS) +# driver line: .... %O %A %B %L +use strict; + +my $debug = 0; +my $rawin = 0; # feed diff to stdin for testing (do NOT set $debug=1) + +# We want TRACE open so we don't need to test $debug everywhere, but we skip +# this first block because it's expensive and dumpfile() hangs with $rawin. +my $sink = ($^O eq "MSWin32") ? "NUL" : "/dev/null"; +my $dbgfile = ($^O eq "MSWin32") ? "$ENV{TEMP}.$$" : "/tmp/trace.$$"; +open TRACE, ">>", $rawin?"/dev/tty":(($debug==0)? $sink : $dbgfile); +print TRACE "TEST TRACE\n"; +if($debug){ + print TRACE "START CLIENT ARGV:\n"; + print TRACE "[0] $0\n"; + my $x1; + for(my $x=0;$x $ENV{$k}\n"; + } + print TRACE "CWD: " . `pwd`; + &dumpfile($ARGV[0], "[0O]"); + &dumpfile($ARGV[1], "[1A]"); + &dumpfile($ARGV[2], "[2B]"); + print TRACE "L=$ARGV[3]\n"; + print TRACE "END\n"; +} + +my $mark_len = $ARGV[3]; +$mark_len = 3 if($mark_len==0 && $rawin); + +my $mark_start = '<' x $mark_len; +my $mark_middle = '=' x $mark_len; +my $mark_end = '>' x $mark_len; + +my $PREFIX; +# pick up the prefix for substitutions in this repo +if($rawin){ + $PREFIX = "TEST"; +} else { + $PREFIX = `git config --local --get nethack.substprefix`; + chomp($PREFIX); +} + +my @out; +my $cntout; +if($rawin){ + @out = ; +} else { + #system "git merge-file -p .... > temp + my $tags = "-L CURRENT -L ANCESTOR -L OTHER"; # XXX should "CURRENT" be "MINE"? + @out = `git merge-file -p $tags $ARGV[1] $ARGV[0] $ARGV[2]`; + #NB: we don't check the exit value because it's useless + print TRACE "MERGE-FILE START\n".join("",@out)."MERGE-FILE END\n"; +} + +($cntout,@out) = &edit_merge(@out); + +if($rawin){ + print "COUNT: $cntout\n"; + print @out; +} else { + # spit @out to $ARGV[1] (careful: what about EOL character?) + open OUT, ">$ARGV[1]" or die "Can't open $ARGV[1]"; + print OUT @out; + close OUT; + + print TRACE "WRITING START ($ARGV[1])\n".join("",@out)."WRITING END\n"; + &dumpfile($ARGV[1], "READBACK"); +} +print TRACE "COUNT: $cntout\n"; + +exit( ($cntout>0) ? 1 : 0); + +#git merge-file [-L [-L [-L ]]] +# [--ours|--theirs|--union] [-p|--stdout] [-q|--quiet] [--marker-size=] +# [--[no-]diff3] +#The `merge.*.driver` variable's value is used to construct a command to run to merge ancestor's +# version (%O), current version (%A) and the other branches' version (%B). These three tokens are +# replaced with the names of temporary files that hold the contents of these versions when the +# command line is built. Additionally, %L will be replaced with the conflict marker size (see +# below). + +# keep failing so we don't need to keep changing the setup while building this script + +sub dumpfile { + my($file, $tag) = @_; + print TRACE "FILE $tag START\n"; + print TRACE `hexdump -C $file`; + print TRACE "FILE END\n"; +} + +sub edit_merge { + my(@input) = @_; + # $::count is a bit ugly XXX + local $::count = 0; # we need the number of conflicts for exit() + my @out; + + local $_; + while($_ = shift @input){ + if(m/^$mark_start /){ + print TRACE "FOUND A CONFLICT\n"; + my @conflict; + push(@conflict, $_); + while($_ = shift @input){ + push(@conflict, $_); + if(m/^$mark_end /){ + last; + } + } + push(@out, &edit_conflict(@conflict)); + } else { + push(@out, $_); + } + } + print TRACE "RETURN count=$::count\n"; + return($::count, @out); +} + +sub edit_conflict { + my(@in) = @_; + + print TRACE "EDIT START: " . scalar(@in)."\n"; + if($debug){ + foreach my $x (@in){ my $xx = $x; chomp($xx); print TRACE "-$xx-\n"; } + } + print TRACE "EDIT END INPUT\n"; + + # one-line change - use as base case to develop the code + # ours ARGV[1] top-of-diff + # theirs ARGV[2] bottom-of-diff + # simple conflict: + # [0] <<<<<<< d1 + # [1] $$PREFIX-Date: 1 ... + # [2] ======= + # [3] $$PREFIX-Date: 3 ... + # [4] >>>>>>> d3 + if(scalar(@in) == 5 && $in[2] =~ m/^$mark_middle/){ + my $back = &merge_one_line_maybe($in[1],$in[3]); # (ours, theirs) + if(!defined $back){ + $::count++; # leave the conflict + return @in; + } else { + return ($back); + } + # NOTREACHED + } else { +# XXX LATER +# Start at the top of both sections and work downwards. As long as the lines can be merged, +# push them out and keep going. If there are lines left, we will still have a conflict but +# we can try to make it smaller. Push out the start-conflict marker. Start at the +# bottom of both section and work upwards. As long as the lines can be merged, reverse push out +# the merged line and keep going. (We know there will be lines left at some point.) Push out +# remaining (middle) lines from OURS. Push out mark_middle. Push out remaining middle lines +# from THEIRS. Push out end-conflict marker. $::count++; return (@a,$b,@c,$d,@e,$f,@g) +# @a +# $b = <<< +# @c +# $d = === +# @e +# $f = >>> +# @g + } + # not matched - return the unchanged conflict + $::count++; + return @in; +} + +# XXX This is expensive. Add a quick check for "anything that looks like a subst var" and just +# declare the lines unmergeable if it fails. +sub merge_one_line_maybe { + my($ours, $theirs) = @_; + + my $more = 1; + my $fail = 0; + my $out = ''; + # TYPES: + # 0 no match + # 1 unexpanded var + # 2 expanded var + # 3 non-var text + my($ourstype, $theirtype); + my($oursvar, $theirvar); + my($oursval, $theirval); + + while($more){ + ($ourstype, $theirtype) = (0,0); + ($oursvar, $theirvar) = (undef, undef); + ($oursvar, $theirvar) = (undef, undef); + # unexpanded var + if($ours =~ m/\G\$$PREFIX-([A-Z][a-z]+)\$/gc){ + $ourstype = 1; + $oursvar = $1; + } + if($theirs =~ m/\G\$$PREFIX-([A-Z][a-z]+)\$/gc){ + $theirtype = 1; + $theirvar = $1; + } + # expanded var + unless($ourstype){ + if($ours =~ m/\G\$$PREFIX-([A-Za-z]+):\s+(.*?)\s\$/gc){ + $ourstype = 2; + $oursvar = $1; + $oursval = $2; + } + } + unless($theirtype){ + if($theirs =~ m/\G\$$PREFIX-([A-Za-z]+):\s+(.*?)\s\$/gc){ + $theirtype = 2; + $theirvar = $1; + $theirval = $2; + } + } + # non-var text + unless($ourstype){ + if($ours =~ m/\G(\$?[^\x24]*)/gc){ + $ourstype = 3; + $oursval = $1; + } + } + unless($theirtype){ + if($theirs =~ m/\G(\$?[^\x24]*)/gc){ + $theirtype = 3; + $theirval = $1; + } + } +print TRACE "MID: $ourstype/$oursval $theirtype/$theirval\n"; + # are we done? + if(pos($ours)==length $ours && pos($theirs) == length $theirs){ + $more = 0; + } + if($ourstype == 0 && $theirtype == 0){ + die "NHsubst MERGE FAILED - aborted infinite loop\n"; + } + + # now see if ours and their match or can be resolved + # text + if($ourstype == 3 && $theirtype == 3){ +#mismatch is \s vs \s\s - where is this coming from? + # HACK - hopefully temporary + if($oursval =~ m/^\s+$/ && $theirval =~ m/^\s+$/){ + $out .= $oursval; + next; + } + if($oursval eq $theirval){ + $out .= $oursval; + next; + } + return undef; + } + if($ourstype == 3 || $theirtype == 3){ + return undef; + } +# XXX we could do better: on failure of one field, return 2 lines with the fields we _can_ fix +# substituted into those lines, leaving only the fail-to-match bits for the user to +# deal with. Later. + # vars (all 4 cases) + if($oursvar ne $theirvar){ + return undef; + } + my $m = merge_one_var_maybe($oursvar, $oursval, $theirval); + if(! defined $m){ + return undef; + } + $out .= $m; + } + return $out; +} + +# return undef if we can't merge the values; $NAME: VALUE $ or $NAME$ (as appropriate) if we can. +sub merge_one_var_maybe { + my($varname, $oursval, $theirval) = @_; +print TRACE "MVM: -$varname-$oursval-$theirval-\n"; + my $resolvedas; + { + no strict; + my $fn = "PREFIX::$varname"; + if(defined &$fn){ + $resolvedas = &$fn($PREFIX,$varname,$oursval, $theirval); + } else { + $resolvedas = undef; # can't resolve + } + } + + if(!defined $resolvedas){ + $::count++; # we have an externally visible conflict + return undef; + } else { + return $resolvedas; + } + # NOTREACHED +} + +package PREFIX; +# Resolve the conflict of a single var's 2 values. Return undef to leave the conflict. +sub Date { + my($PREFIX, $varname, $mine, $theirs) = @_; + my $m = ($mine =~ m/(\d+)/)[0]; + my $t = ($theirs =~ m/(\d+)/)[0]; + return undef unless ($m>0) && ($t>0); + + return "\$$PREFIX-$varname: " . (($m>$t)?$mine:$theirs) .' $'; +} + +#sub Header { +#sub Author { + +sub Branch { + my($PREFIX, $varname, $mine, $theirs) = @_; + $mine =~ s/^\s+//; $mine =~ s/\s+$//; + $theirs =~ s/^\s+//; $theirs =~ s/\s+$//; + return "\$$PREFIX-$varname: $mine \$" if(length $mine); + return "\$$PREFIX-$varname: $theirs \$" if(length $theirs); + return "\$$PREFIX-$varname\$" if(length $theirs); +} + +sub Revision { + my($PREFIX, $varname, $mine, $theirs) = @_; + my($m) = ($mine =~ m/1.(\d+)/); + my($t) = ($theirs =~ m/1.(\d+)/); + if($m > 0 && $t > 0){ + my $q = ($m > $t) ? $m : $t; + return "\$$PREFIX-$varname: 1.$q \$"; + } + if($m > 0){ + return "\$$PREFIX-$varname: 1.$m \$"; + } + if($t > 0){ + return "\$$PREFIX-$varname: 1.$t \$"; + } + return "\$$PREFIX-$varname\$"; +} +__END__ + +TEST 1: +<<< d1 +$TEST-Date: 1 $ +=== +$TEST-Date: 3 $ +>>> d3 + +TEST 2: +nothing +at all + +TEST 3: +<<< d1 +a line +=== +one line +two lines +>>> d3 + +TEST 4: +<<< d1 +$TEST-Date: 1 $ yes +=== +$TEST-Date: 1 $ no +>>> d3 + +TEST 5: +<<< d1 +$TEST-Date: 3 $ yes +=== +$TEST-Date: 1 $ yes +>>> d3 + +TEST 6: +<<< d1 +$TEST-Date: 3 $ yes$TEST-Date: 4 $ +=== +$TEST-Date: 1 $ yes$TEST-Date: 5 $ +>>> d3 + +TEST 7: +<<< d1 +$TEST-Branch: mine $ +=== +$TEST-Branch: theirs $ +>>> d3 + +TEST 8: +<<< d1 +/* NetHack 3.7 objnam.c $TEST-Date$ $TEST-Branch$:$TEST-Revision$ */ +=== +/* NetHack 3.7 objnam.c $TEST-Date: 1426977394 2015/03/21 22:36:34 $ $TEST-Branch: master $:$TEST-Revision: 1.108 $ */ +>>> d3 diff --git a/src/NetHack_3.7/DEVEL/hooksdir/NHtext b/src/NetHack_3.7/DEVEL/hooksdir/NHtext new file mode 100644 index 0000000..8e0d9a9 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/NHtext @@ -0,0 +1,161 @@ +#!/usr/bin/perl +# NetHack 3.7 NHtext $NHDT-Date: 1596498408 2020/08/03 23:46:48 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.9 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +# clean/smudge filter for handling substitutions +use strict; + +#my $debug = 0; # save trace to file +#my $debug2 = 0; # annotate output when running from command line + +#my $sink = ($^O eq "MSWin32")? "NUL" :"/dev/null"; +#my $dbgfile = ($^O eq "MSWin32") ? "$ENV{TEMP}.$$" : "/tmp/trace.$$"; +#open TRACE, ">>", ($debug==0)? $sink : $dbgfile; + +sub git_config { + my($section, $var) = @_; + local($_); + # Sigh. Without GIT_DIR we have to do it the slow way, and sometimes we don't + # have GIT_DIR. + if(0 == length($ENV{GIT_DIR})){ + my $raw = `git config --local --get $section.$var`; + chomp($raw); + return $raw + } + open(CONFIG, "<", "$ENV{GIT_DIR}/config") or die "Missing .git/config: $!"; + while(){ + m/^\[$section]/ && do { + while(){ + m/^\s+$var\s+=\s+(.*)/ && do { + return $1; + }; + } + }; + } + die "Missing config var: [$section] $var\n"; +} +# pick up the prefix for substitutions in this repo +my $PREFIX = &git_config('nethack','substprefix'); + +my $submode = 0; # ok to make non-cleaning changes to file +my $mode; + +if($ARGV[0] eq "--clean"){ + $mode = "c"; + if(0 == 0+$ENV{NHMODE}){ + $submode = 1; # do NOT add extra changes to the file +# print TRACE "SKIPPING\n"; + } +} elsif($ARGV[0] eq "--smudge"){ + $mode = "s"; +} else { + warn "Unknown mode '$ARGV[0]'\n"; + exit 1; +} + +# XXX for now, there isn't any - if we get called, we subst. No options for now. +# get relevent config info +#XXX +#git check-attr -a $ARGV[1] + +# Process stdin to stdout. +# For speed we read in the entire file then do the substitutions. + +local($_) = ''; +my $len; +while(1){ + # On at least some systems we only get 64K. + my $len = sysread(STDIN, $_, 999999, length($_)); + last if($len == 0); + die "read failed: $!" unless defined($len); +} + +# $1 - var and value (including trailing space but not $) +# $2 - var +# $4 - value or undef +# s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\N{DOLLAR SIGN}]+))?)\$/&handlevar($2,$4)/eg; +s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\x24]+))?)\$/&handlevar($2,$4)/ego; + +die "write failed: $!" unless defined syswrite(STDOUT, $_); +exit 0; + +sub handlevar { + my($var, $val) = @_; +# print "HIT '$var' '$val'\n" if($debug2); + + my $subname = "PREFIX::$var"; + if(defined &$subname){ + no strict; + $val =~ s/\s+$//; + $val = &$subname($val,$mode,$submode); + } else { + warn "No handler for \$$PREFIX-$var\n"; + } + + if(length $val){ + return "\$$PREFIX-$var: $val \$"; + } else { + return "\$$PREFIX-$var\$"; + } +} + +package PREFIX; +use POSIX qw(strftime); + +# On push, put in the current date because we changed the file. +# On pull, keep the current value so we can see the last change date. +sub Date { + my($val, $mode, $submode) = @_; + if($mode eq "c"){ + if($submode==0){ + # we add this to make merge easier for now XXX + my $now = time; # not %s below - may not be portable + # YYYY/MM/DD HH:MM:SS + $val = "$now " . strftime("%Y/%m/%d %H:%M:%S", gmtime($now)); + } + } +# if($mode eq "s"){ +# } + return $val; +} + +#sub Header { +#} +#sub Author { +#} + +# NB: the standard-ish Revision line isn't enough - you need Branch:Revision - +# but we split it into 2 so we can use the standard processing code on Revision +# and just slip Branch in. +sub Branch { + my($val, $mode, $submode) = @_; + if($mode eq "c"){ + if($submode==0){ + $val = `git symbolic-ref -q --short HEAD`; + $val =~ s/[\n\r]*$//; + $val =~ s/^\*\s*//; + $val = "(unknown)" unless($val =~ m/^[[:print:]]+$/); + } + } +# if($mode eq "s"){ +# } + return $val; +} + +sub Revision { + my($val, $mode, $submode) = @_; + if($mode eq "c"){ + if($submode==0){ + my $file = $ARGV[1]; + my @val = `git log --follow --oneline $file`; + my $ver = 0+$#val; + $ver = 0 if($ver < 0); + $val = "1.$ver"; + } + } +# if($mode eq "s"){ +# } + return $val; +} + diff --git a/src/NetHack_3.7/DEVEL/hooksdir/TARGET b/src/NetHack_3.7/DEVEL/hooksdir/TARGET new file mode 100644 index 0000000..f321e28 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/TARGET @@ -0,0 +1 @@ +.git/hooks diff --git a/src/NetHack_3.7/DEVEL/hooksdir/applypatch-msg b/src/NetHack_3.7/DEVEL/hooksdir/applypatch-msg new file mode 100644 index 0000000..2318186 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/applypatch-msg @@ -0,0 +1,32 @@ +#!/usr/bin/perl +# NetHack 3.7 applypatch-msg $NHDT-Date: 1596498405 2020/08/03 23:46:45 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/commit-msg b/src/NetHack_3.7/DEVEL/hooksdir/commit-msg new file mode 100644 index 0000000..e4befa0 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/commit-msg @@ -0,0 +1,32 @@ +#!/usr/bin/perl +# NetHack 3.7 commit-msg $NHDT-Date: 1596498405 2020/08/03 23:46:45 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/nhsub b/src/NetHack_3.7/DEVEL/hooksdir/nhsub new file mode 100644 index 0000000..7e5fdbd --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/nhsub @@ -0,0 +1,521 @@ +#!/usr/bin/perl +# $NHDT-Date: 1524689646 2018/04/25 20:54:06 $ Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.7 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +# Note: was originally called nhdate; the rename is not reflected in the code. + +use strict; +our %opt; #cmd v n f F m (other single char, but we don't care) +my $mode; # a c d f (add, commit, date, date -f) + +if(length $ENV{GIT_PREFIX}){ + chdir($ENV{GIT_PREFIX}) or die "Can't chdir $ENV{GIT_PREFIX}: $!"; +} + +#SO how do we know if a file has changed? +#(git status: git status --porcelain --ignored -- FILES. +#maybe + -z but it's a question of rename operations - probably doesn't +# matter, but need to experiment. + +# key: [dacf] first character of opt{cmd} (f if nhsub -f or add -f) +# first 2 chars of "git status --porcelain --ignored" +# (see "git help status" for table) +# No default. Undef means something unexpected happened. +my %codes = ( + 'f M'=>1, 'f D'=>1, # [MD] not updated + 'a M'=>0, 'a D'=>0, + 'd M'=>0, 'd D'=>0, + 'c M'=>0, 'c D'=>0, + + 'dM '=>0, 'dMM'=>1, 'dMD'=>0, + 'aM '=>0, 'aMM'=>1, 'aMD'=>0, + 'cM '=>0, 'cMM'=>1, 'cMD'=>0, + 'fM '=>0, 'fMM'=>1, 'fMD'=>0, + # M [ MD] updated in index + + 'dA '=>1, 'dAM'=>1, 'dAD'=>1, + 'aA '=>1, 'aAM'=>1, 'aAD'=>1, + 'cA '=>1, 'cAM'=>1, 'cAD'=>1, + 'fA '=>1, 'fAM'=>1, 'fAD'=>1, + # A [ MD] added to index + + 'dD '=>0, 'dDM'=>0, + 'aD '=>1, 'aDM'=>1, + 'cD '=>0, 'cDM'=>0, + 'fD '=>1, 'fDM'=>1, + # D [ M] deleted from index + + 'dR '=>0, 'dRM'=>1, 'dRD'=>0, + 'aR '=>0, 'aRM'=>1, 'aRD'=>0, + 'cR '=>0, 'cRM'=>1, 'cRD'=>0, + 'fR '=>0, 'fRM'=>1, 'fRD'=>0, + # R [ MD] renamed in index + + 'dC '=>0, 'dCM'=>1, 'dCD'=>0, + 'aC '=>0, 'aCM'=>1, 'aCD'=>0, + 'cC '=>0, 'cCM'=>1, 'cCD'=>0, + 'fC '=>0, 'fCM'=>1, 'fCD'=>0, + # C [ MD] copied in index + + 'aM '=>1, 'aA '=>1, 'aR '=>1, 'aC '=>1, + 'fM '=>1, 'fA '=>1, 'fR '=>1, 'fC '=>1, + # [MARC] index and work tree matches + + 'd M'=>1, 'dMM'=>1, 'dAM'=>1, 'dRM'=>1, 'dCM'=>1, + 'a M'=>1, 'aMM'=>1, 'aAM'=>1, 'aRM'=>1, 'aCM'=>1, + 'c M'=>1, 'cMM'=>1, 'cAM'=>1, 'cRM'=>1, 'cCM'=>1, + 'f M'=>1, 'fMM'=>1, 'fAM'=>1, 'fRM'=>1, 'fCM'=>1, + # [ MARC] M work tree changed since index + + 'd D'=>0, 'dMD'=>0, 'dAD'=>0, 'dRD'=>0, 'dCD'=>0, + 'a D'=>0, 'aMD'=>0, 'aAD'=>0, 'aRD'=>0, 'aCD'=>0, + 'c D'=>0, 'cMD'=>0, 'cAD'=>0, 'cRD'=>0, 'cCD'=>0, + 'f D'=>0, 'fMD'=>0, 'fAD'=>0, 'fRD'=>0, 'fCD'=>0, + # [ MARC] D deleted in work tree + + # ------------------------------------------------- + # DD unmerged, both deleted + # AU unmerged, added by us + # UD unmerged, deleted by them + # UA unmerged, added by them + # DU unmerged, deleted by us + # AA unmerged, both added + # UU unmerged, both modified + # ------------------------------------------------- + 'a??'=>1, 'f??'=>1, # ?? untracked + 'd??'=>0, 'c??'=>0, + + 'f!!'=>1, # !! ignored + 'a!!'=>0, 'd!!'=>0, 'c!!'=>0, + + 'f@@'=>1, # @@ internal ignored + 'a@@'=>0, 'd@@'=>0, 'c@@'=>0 +); + +# OS hackery +my $PDS = '/'; +if ($^O eq "MSWin32") +{ + $PDS = '\\'; +} + +# various command line options to consider and what the code actually does: +#DONE nhcommit with no files should exit(0) +#DONE nhadd with no files should exit(0) +#DONE commit -a? +# add root dir +#DONE commit -a + files -> exit(0) +#nothing: commit --interactive/--patch +#nothing: add -i/--interactive --patch/-p? +#nothing: add -u/--update?????? -A/--all/--no-ignore-removal??? +#nothing (not quite right): add --no-all --ignore-removal??? +#DONE add --refresh +#nothing: add -N/--intent-to-add +#DONE add -n - exit(0) +#DONE add --dry-run - exit 0 +#DONE commit --dry-run - exit 0 +#DONE?: add foo/\*/x (letting git expand the filenames) + +my @rawlist0 = &cmdparse(@ARGV); + +# Use git ls-files to expand command line filepaths with wildcards. +# Let's try this for all commands. +my @rawlist; +foreach my $e (@rawlist0){ + if($e =~ m/[?*[\\]/){ + my @rv = &lsfiles(undef, $e); + push(@rawlist, @rv) if(@rv); + if($opt{f}){ + my @rv = &lsfiles('-i', $e); + push(@rawlist, @rv) if(@rv); + } + } else { + push(@rawlist, $e); + } +} + +push(@rawlist,'.') if($#rawlist == -1); + +# pick up the prefix for substitutions in this repo +#TEST my $PREFIX = &git_config('nethack','substprefix'); +my $PREFIX = "NHDT"; +print "PREFIX: '$PREFIX'\n" if($opt{v}); + +while(@rawlist){ + my $raw = shift @rawlist; + if(-f $raw){ + &schedule_work($raw); + next; + } + if(-d $raw){ + if($raw =~ m!$PDS.git$!o){ + print "SKIP $raw\n" if($opt{v}>=2); + next; + } + opendir RDIR,$raw or die "Can't opendir: $raw"; + local($_); # needed until perl 5.11.2 + while($_ = readdir RDIR){ + next if(m/^\.\.?$/); + if(m/^\./ && $opt{f}){ + print " IGNORE-f: $raw$PDS$_\n" if($opt{v}>=2); + next; + } + push(@rawlist, $raw.$PDS.$_); + } + closedir RDIR; + } + # ignore other file types + if(! -e $raw){ + print "warning: missing file $raw\n"; + } +} + +# XXX could batch things up - later + +sub schedule_work { + my($file) = @_; + print "CHECK: '$file'\n" if($opt{v}>=2); + local($_) = `git status --porcelain --ignored -- $file`; + my $key = $mode . join('',(m/^(.)(.)/)); + if(length $key == 1){ + # Hack. An unmodified, tracked file produces no output from + # git status. Treat as another version of 'ignored'. + $key .= '@@'; + } + $key =~ s/-/ /g; # for Keni's locally mod'ed git + if(!exists $codes{$key}){ + die "I'm lost.\nK='$key' F=$file\nST=$_"; + } + if($codes{$key}==0){ + if($opt{v}>=2){ + print " IGNORE: $_" if(length); + print " IGNORE: !! $file\n" if(!length); + } + return; + } + if($opt{F}){ + my $ign = `git check-ignore $file`; + if($ign !~ m/^\s*$/){ + print " IGNORE-F: $ign" if($opt{v}>=2); + return; + } + } +# FALLTHROUGH and continue +#print "ACCEPT TEST\n"; # XXXXXXXXXX TEST +#return; + + my $attr = `git check-attr NHSUBST -- $file`; + if($attr =~ m/NHSUBST:\s+(.*)/){ +# XXX this is a bug in git. What if the value of an attribute is the +# string "unset"? Sigh. + if(! $opt{F}){ + if($1 eq "unset" || $1 eq "unspecified"){ + print " NOATTR: $attr" if($opt{v}>=2); + return; + } + } + &process_file($file); + return; + } + die "Can't parse check-attr return: $attr\n"; +} + +sub process_file { + my($file) = @_; + print "DOFIL: $file\n" if($opt{v}>=1); + + # For speed we read in the entire file then do the substitutions. + local($_) = ''; + my $len; + open INFILE, "<", $file or die "Can't open $file: $!"; + while(1){ + # On at least some systems we only get 64K. + my $len = sysread(INFILE, $_, 999999, length($_)); + last if($len == 0); + die "read failed: $!" unless defined($len); + } + close INFILE; + + local $::current_file = $file; # used under handlevar + # $1 - var and value (including trailing space but not $) + # $2 - var + # $4 - value or undef +#s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\N{DOLLAR SIGN}]+))?)\$/&handlevar($2,$4)/eg; +my $count = s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\x24]+))?)\$/&handlevar($2,$4)/eg; +# XXX had o modifier, why? + return unless($count>0); + return if($opt{n}); + my $mode = 0777 & (stat($file))[2]; + + my $ofile = $file . ".nht"; + open(TOUT, ">", $ofile) or die "Can't open $ofile"; + +# die "write failed: $!" unless defined syswrite(TOUT, $_); + my $offset = 0; + my $sent; +#print STDERR "L=",length,"\n"; + while($offset < length){ + $sent = syswrite(TOUT, $_, (length($_) - $offset), $offset); + die "write failed: $!" unless defined($sent); +#print STDERR "rv=$sent\n"; + last if($sent == (length($_) - $offset)); + $offset += $sent; +#print STDERR "loop: O=$offset\n"; + } + + close TOUT or die "Can't close $ofile"; + # Do the right thing for *nix and hope for the best elsewhere: + chmod($mode, $ofile)==1 or warn "Can't set filemode on $ofile"; + rename $ofile, $file or die "Can't rename $ofile to $file"; +} + +# XXX docs for --fixup and --squash are wrong in git's synopsis. --file missing +# --message --template -t +sub cmdparse { + my(@in) = @_; + + # What are we doing? + $opt{cmd} = 'date'; # really nhsub + if($in[0] eq '--add'){ + $opt{cmd} = 'add'; + shift @in; + } + if($in[0] eq '--commit'){ + $opt{cmd} = 'commit'; + shift @in; + } + +# add: -n -v +# commit: --dry-run -v +# nhsub: -n -v + while($in[0] =~ m/^-/){ + local($_) = $in[0]; + if($_ eq '--'){ + shift @in; + last; + } + if(m/^--/){ + if($opt{cmd} eq 'add' && $_ eq '--dry-run'){ + exit 0; + } + if($opt{cmd} eq 'commit' && $_ eq '--dry-run'){ + exit 0; + } + if($opt{cmd} eq 'add' && $_ eq '--refresh'){ + exit 0; + } + shift @in; + next; + } +# XXX this is messy - time for a rewrite? + if(m/^-(.*)/){ + foreach my $single ( split(//,$1) ){ + # don't do -v here from add/commit + if($single ne 'v'){ + # don't use -m from add/commit + if($opt{cmd} eq 'date' || $single ne 'm'){ + $opt{$single}++; + } + } elsif($opt{cmd} eq 'date'){ + $opt{$single}++; + } + + if($opt{cmd} eq 'add' && $single eq 'n'){ + exit 0; + } +#need to deal with options that eat a following element (-m, -F etc etc) +#add: nothing? +#commit: -c -C -F -m +# -u mode is optional +# -S keyid is optional + if($opt{cmd} eq 'commit'){ + if($single =~ m/[uS]/){ + last; + } + if($single =~ m/[cCFm]/){ +#XXX this will be a mess if the argument is wrong, but can we tell? No. + shift @in; + last; + } + } + } + } + shift @in; + } + + ($mode) = ($opt{cmd} =~ m/^(.)/); + $mode = 'f' if($opt{cmd} eq 'date' && ($opt{f}||$opt{F})); + $mode = 'f' if($opt{cmd} eq 'add' && $opt{f}); + + if($opt{cmd} eq 'add' && $#in == -1){ + exit 0; + } + if($opt{cmd} eq 'commit' && $#in == -1){ + exit 0; + } + if($opt{cmd} eq 'add' && $opt{a} && $#in != -1){ + exit 0; + } + if($opt{cmd} eq 'add' && $opt{a}){ + my $x = `git rev-parse --show-toplevel`; + $x =~ s/[\n\r]+$//; + push(@in, $x); + } + return @in; # this is our file list +} + +sub git_config { + my($section, $var) = @_; + my $raw = `git config --local --get $section.$var`; + $raw =~ s/[\r\n]*$//g; + return $raw if(length $raw); + die "Missing config var: [$section] $var\n"; +} + +sub handlevar { + my($var, $val) = @_; +# print "HIT '$var' '$val'\n" if($debug2); + + my $subname = "PREFIX::$var"; + if(defined &$subname){ + no strict; + print " SUBIN: $var '$val'\n" if($opt{v}>=3); + $val =~ s/\s+$//; + $val = &$subname($val); + print " SUBOT: $var '$val'\n" if($opt{v}>=3); + } else { + warn "No handler for \$$PREFIX-$var\n"; + } + + if(length $val){ + return "\$$PREFIX-$var: $val \$"; + } else { + return "\$$PREFIX-$var\$"; + } +} + +sub lsfiles { + my ($flags, $ps) = @_; + open RV, "-|", "git ls-files $flags '$ps'" or die "Can't ls-files"; + my @rv = ; + map { s/[\r\n]+$// } @rv; + if(!close RV){ + return undef if($! == 0); + die "close ls-files failed: $!"; + } + return undef if($#rv == -1); + return @rv; +} + +package PREFIX; +use POSIX qw(strftime); + +# On push, put in the current date because we changed the file. +# On pull, keep the current value so we can see the last change date. +sub Date { + my($val) = @_; + my $now; + if($opt{m}){ + my $hash = `git log -1 '--format=format:%H' $::current_file`; + #author keni 1429884677 -0400 + chomp($now = `git cat-file -p $hash | awk '/author/{print \$4}'`); + } else { + $now = time; + } + # YYYY/MM/DD HH:MM:SS + $val = "$now " . strftime("%Y/%m/%d %H:%M:%S", gmtime($now)); + return $val; +} + +#sub Header { +#} +#sub Author { +#} + +# NB: the standard-ish Revision line isn't enough - you need Branch:Revision - +# but we split it into 2 so we can use the standard processing code on Revision +# and just slip Branch in. +sub Branch { + my($val) = @_; + $val = `git symbolic-ref -q --short HEAD`; + $val =~ s/[\n\r]*$//; + $val =~ s/^\*\s*//; + $val = "(unknown)" unless($val =~ m/^[[:print:]]+$/); + return $val; +} + +sub Revision { + my($val) = @_; + my @val = `git log --follow --oneline $::current_file`; + my $ver = 0+$#val; + $ver = 0 if($ver < 0); + $val = "1.$ver"; + return $val; +} +__END__ + +=head1 NAME + +C - NetHack git command for substitution variables + +=head1 SYNOPSIS + +C + +=head1 DESCRIPTION + +C rewrites the specified files by doing variable substitution for +variables starting with the prefix specified in the repository's +C configuration variable. C is also invoked +internally from the implementation of the C and C +commands. + +The program re-writes those files listed on the command line; if the file +is actually a directory, the program recurses into that directory tree. +Not all files found are re-written; some are ignored and those with no +substitution variables are not re-written. Unless changed by the options, +files that have not changed are not affected. + +If no files are listed on the command line, the current directory is +checked as if specified as C<.>. +Files listed directly on the command line are always checked. +The C<.git> directory is never processed. + +The following command line options are available: + +=over + +=item C<-v[v[v]]> + +Verbose output; may be (usefully) specified up to 3 times. Not available +when invoked as part of C or C. + +=item C<-n> + +Do not write any files. + +=item C<-f> + +Force, version 1: +Perform substitution even if the file has not changed, +except no dot files are processed unless listed directly on the command line. +This prevents accidents with editor temporary files while recursing. Note +that this overloads the C<-f> option of C and C. + +=item C<-F> + +Force, version 2: +Perform substitution even if the file has not changed, +even if the NHSUBST attribute is not set for the +file, and only if the file is not ignored by git. Not available +when invoked as part of C or C. + +=item C<-m> + +Use metadata (C and C) to find the last change date to +substitute. Often used with C<-f>. This is useful for cleaning up dates in files that were not +updated when last changed. (Do not use C/C after C +or the changes will be overwritten with the current date.) + +=back diff --git a/src/NetHack_3.7/DEVEL/hooksdir/post-applypatch b/src/NetHack_3.7/DEVEL/hooksdir/post-applypatch new file mode 100644 index 0000000..ec6af70 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/post-applypatch @@ -0,0 +1,32 @@ +#!/usr/bin/perl +# $NHDT-Date: 1524689631 2018/04/25 20:53:51 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.1 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/post-checkout b/src/NetHack_3.7/DEVEL/hooksdir/post-checkout new file mode 100644 index 0000000..d7e6c57 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/post-checkout @@ -0,0 +1,33 @@ +#!/usr/bin/perl +# NetHack 3.7 post-checkout $NHDT-Date: 1596498409 2020/08/03 23:46:49 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::nhversioning; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/post-commit b/src/NetHack_3.7/DEVEL/hooksdir/post-commit new file mode 100644 index 0000000..cb37b38 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/post-commit @@ -0,0 +1,33 @@ +#!/usr/bin/perl +# NetHack 3.7 post-commit $NHDT-Date: 1596498409 2020/08/03 23:46:49 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::nhversioning; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/post-merge b/src/NetHack_3.7/DEVEL/hooksdir/post-merge new file mode 100644 index 0000000..a634f51 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/post-merge @@ -0,0 +1,34 @@ +#!/usr/bin/perl +# NetHack 3.7 post-merge $NHDT-Date: 1596498410 2020/08/03 23:46:50 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} + +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::nhversioning; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/post-rewrite b/src/NetHack_3.7/DEVEL/hooksdir/post-rewrite new file mode 100644 index 0000000..655c1a0 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/post-rewrite @@ -0,0 +1,34 @@ +#!/usr/bin/perl +# NetHack 3.7 post-rewrite $NHDT-Date: 1596498411 2020/08/03 23:46:51 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::saveSTDIN; +&NHgithook::PRE; +&NHgithook::resetSTDIN; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/pre-applypatch b/src/NetHack_3.7/DEVEL/hooksdir/pre-applypatch new file mode 100644 index 0000000..3b57a6f --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/pre-applypatch @@ -0,0 +1,32 @@ +#!/usr/bin/perl +# NetHack 3.7 pre-applypatch $NHDT-Date: 1596498411 2020/08/03 23:46:51 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/pre-auto-gc b/src/NetHack_3.7/DEVEL/hooksdir/pre-auto-gc new file mode 100644 index 0000000..d1ab9b0 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/pre-auto-gc @@ -0,0 +1,32 @@ +#!/usr/bin/perl +# NetHack 3.7 pre-auto-gc $NHDT-Date: 1596498412 2020/08/03 23:46:52 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/pre-commit b/src/NetHack_3.7/DEVEL/hooksdir/pre-commit new file mode 100644 index 0000000..bb5dbfe --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/pre-commit @@ -0,0 +1,32 @@ +#!/usr/bin/perl +# NetHack 3.7 pre-commit $NHDT-Date: 1596498413 2020/08/03 23:46:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/pre-push b/src/NetHack_3.7/DEVEL/hooksdir/pre-push new file mode 100644 index 0000000..c2639fa --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/pre-push @@ -0,0 +1,34 @@ +#!/usr/bin/perl +# NetHack 3.7 pre-push $NHDT-Date: 1596498413 2020/08/03 23:46:53 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::saveSTDIN; +&NHgithook::PRE; +&NHgithook::resetSTDIN; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/pre-rebase b/src/NetHack_3.7/DEVEL/hooksdir/pre-rebase new file mode 100644 index 0000000..7f447a0 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/pre-rebase @@ -0,0 +1,32 @@ +#!/usr/bin/perl +# NetHack 3.7 pre-rebase $NHDT-Date: 1596498414 2020/08/03 23:46:54 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/hooksdir/prepare-commit-msg b/src/NetHack_3.7/DEVEL/hooksdir/prepare-commit-msg new file mode 100644 index 0000000..b681385 --- /dev/null +++ b/src/NetHack_3.7/DEVEL/hooksdir/prepare-commit-msg @@ -0,0 +1,32 @@ +#!/usr/bin/perl +# $NHDT-Date: 1524689633 2018/04/25 20:53:53 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.1 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +#STARTUP-START +BEGIN { + # OS hackery has to be duplicated in each of the hooks :/ + # first the directory separator + my $DS = quotemeta('/'); + my $PDS = '/'; + # msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). + # temporarily removed because inconsistent behavior + # if ($^O eq "msys") + # { + # $/ = "\r\n"; + # $\ = "\r\n"; + # } + if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $PDS = '\\'; + } + $gitdir = `git rev-parse --git-dir`; + chomp $gitdir; + push(@INC, $gitdir.$PDS."hooks"); +} +use NHgithook; +#STARTUP-END + +&NHgithook::PRE; +&NHgithook::POST; +exit 0; diff --git a/src/NetHack_3.7/DEVEL/nhgitset.pl b/src/NetHack_3.7/DEVEL/nhgitset.pl new file mode 100644 index 0000000..03bb63f --- /dev/null +++ b/src/NetHack_3.7/DEVEL/nhgitset.pl @@ -0,0 +1,341 @@ +#!/usr/bin/perl +# $NHDT-Date: 1693357449 2023/08/30 01:04:09 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +# Copyright (c) 2015 by Kenneth Lorber, Kensington, Maryland +# NetHack may be freely redistributed. See license for details. + +# value of nethack.setupversion we will end up with when this is done +# version 1 is reserved for repos checked out before versioning was added +my $version_new = 3; +my $version_old = 0; # current version, if any (0 is no entry ergo new repo) + +use Cwd; +use Getopt::Std; + +# Activestate Perl doesn't include File::Spec. Grr. +BEGIN { + eval "require File::Spec::Functions"; + if($@){ + die <import; +} + +exit 1 unless(getopts('nvf')); # TODO: this can probably have better output + +# OS hackery +my $DS = quotemeta('/'); # Directory Separator (for regex) +my $DSP = '/'; # ... for printing +# Temporarily disabled; there's something weird about msys +# msys: POSIXish over a Windows filesystem (so / not \ but \r\n not \n). +#if($^O eq "msys"){ +# $/ = "\r\n"; +# $\ = "\r\n"; +# # NB: We don't need to do anything about File::Spec. It doesn't know +# # about msys but it defaults to Unix, so we'll be ok. +#} +if($^O eq "MSWin32"){ + $DS = quotemeta('\\'); + $DSP = '\\'; +} + +# make sure we're at the top level of a repo +if(! -d ".git"){ + die "This is not the top level of a git repository.\n"; +} + +my $vtemp = `git config --local --get nethack.setupversion`; +chomp($vtemp); +if($vtemp > 0){ + $version_old = 0+$vtemp; + if($version_old != $version_new){ + print STDERR "Migrating from setup version $version_old to $version_new\n" if($opt_v); + } +} +# legacy check: +if(length $vtemp == 0){ + if(`git config --get merge.NHsubst.name` =~ m/^Net/){ + $version_old = 1; + print STDERR "Migrating to setup version 1\n" if($opt_v); + } +} + +my $gitadddir = `git config --get nethack.gitadddir`; +chomp($gitadddir); +if(length $gitadddir){ + if(! -d $gitadddir){ + die "nethack.gitadddir has invalid value '$gitadddir'\n"; + } +} +print STDERR "nethack.gitadddir=$gitadddir\n" if($opt_v); + +# This is (relatively) safe because we know we're at R in R/DEVEL/nhgitset.pl +my $srcdir = ($0 =~ m!^(.*)$DS!)[0]; + +if(! -f catfile($srcdir, 'nhgitset.pl')){ + die "I can't find myself in '$srcdir'\n"; +} + +print STDERR "Copying from: $srcdir\n" if($opt_v); + +if($opt_f || $version_old==0){ + print STDERR "Configuring line endings\n" if($opt_v); + unlink catfile('.git','index') unless($opt_n); + system("git reset") unless($opt_n); + system("git config --local core.safecrlf true") unless($opt_n); + system("git config --local core.autocrlf false") unless($opt_n); +} elsif($version_old <2){ + my $xx = `git config --get --local core.safecrlf`; + if($xx !~ m/true/){ + print STDERR "\nNeed to 'rm .git${DSP}index;git reset'.\n"; + print STDERR " When ready to proceed, re-run with -f flag.\n"; + exit 2; + } +} + + + +print STDERR "Installing aliases\n" if($opt_v); +$addpath = catfile(curdir(),'.git','hooks','NHadd'); +&add_alias('nhadd', "!$addpath add"); +&add_alias('nhcommit', "!$addpath commit"); +my $nhsub = catfile(curdir(),'.git','hooks','nhsub'); +&add_alias('nhsub', "!$nhsub"); + +print STDERR "Installing filter/merge\n" if($opt_v); + +# XXXX need it in NHadd to find nhsub??? +# removed at version 3 +#if($^O eq "MSWin32"){ +# $cmd = '.git\\\\hooks\\\\NHtext'; +#} else { +# $cmd = catfile(curdir(),'.git','hooks','NHtext'); +#} +#&add_config('filter.NHtext.clean', "$cmd --clean %f"); +#&add_config('filter.NHtext.smudge', "$cmd --smudge %f"); +if($version_old == 1 or $version_old == 2){ + print STDERR "Removing filter.NHtext\n" if($opt_v); + system('git','config','--unset','filter.NHtext.clean') unless($opt_n); + system('git','config','--unset','filter.NHtext.smudge') unless($opt_n); + system('git','config','--remove-section','filter.NHtext') unless($opt_n); + + print STDERR "Removing NHtext\n" if($opt_v); + unlink catfile(curdir(),'.git','hooks','NHtext') unless($opt_n); +} + +$cmd = catfile(curdir(),'.git','hooks','NHsubst'); +&add_config('merge.NHsubst.name', 'NetHack Keyword Substitution'); +&add_config('merge.NHsubst.driver', "$cmd %O %A %B %L"); + +print STDERR "Running directories\n" if($opt_v); + +foreach my $dir ( glob("$srcdir$DS*") ){ + next unless(-d $dir); + + my $target = catfile($dir, 'TARGET'); + next unless(-f $target); + + open TARGET, '<', $target or die "$target: $!"; + my $targetpath = ; + # still have to eat all these line endings under msys, so instead of chomp use this: + $targetpath =~ s![\r\n]!!g; + close TARGET; + print STDERR "Directory $dir -> $targetpath\n" if($opt_v); + + my $enddir = $dir; + $enddir =~ s!.*$DS!!; + if(! &process_override($enddir, "INSTEAD")){ + &process_override($enddir, "PRE"); + my $fnname = "do_dir_$enddir"; + if(defined &$fnname){ + &$fnname($dir, $targetpath); + } + &process_override($enddir, "POST"); + } +} + +&check_prefix; # for variable substitution + +if($version_old != $version_new){ + print STDERR "Setting version to $version_new\n" if($opt_v); + if(! $opt_n){ + system("git config nethack.setupversion $version_new"); + if($?){ + die "Can't set nethack.setupversion $version_new: $?,$!\n"; + } + } +} + +exit 0; + +sub process_override { + my($srcdir, $plname) = @_; + return 0 unless(length $gitadddir); + + my $plpath = catfile($gitadddir, $srcdir, $plname); +#print STDERR " ",catfile($srcdir, $plname),"\n"; # save this for updating docs - list of overrides + return 0 unless(-x $plpath); + + print STDERR "Running $plpath\n" if($opt_v); + # current directory is top of target repo + + unless($opt_n){ + system("$plpath $opt_v") and die "Callout $plpath failed: $?\n"; + } + return 1; +} + +sub add_alias { + my($name, $def) = @_; + &add_config("alias.$name",$def); +} + +sub add_config { + my($name, $val) = @_; + system('git', 'config', '--local', $name, $val) unless($opt_n); +} + +sub check_prefix { + my $lcl = `git config --local --get nethack.substprefix`; + chomp($lcl); + if(0==length $lcl){ + my $other = `git config --get nethack.substprefix`; + chomp($other); + if(0==length $other){ + print STDERR "ERROR: nethack.substprefix is not set anywhere. Set it and re-run.\n"; + exit 2; + } else { + &add_config('nethack.substprefix', $other); + print STDERR "Copying prefix '$other' to local repository.\n" if($opt_v); + } + $lcl = $other; # for display below + } + print "\n\nUsing prefix '$lcl' - PLEASE MAKE SURE THIS IS CORRECT\n\n"; +} + +sub do_dir_DOTGIT { +if(1){ + # We are NOT going to mess with config now. + return; +} else { + my($srcdir, $targetdir) = @_; +#warn "do_dir_DOTGIT($srcdir, $targetdir)\n"; + my $cname = "$srcdir/config"; + if(-e $cname){ + print STDERR "Appending to .git/config\n" if($opt_v); + open CONFIG, ">>.git/config" or die "open .git/config: $!"; + open IN, "<", $cname or die "open $cname: $!"; + my @data = ; + print CONFIG @data; + close IN; + close CONFIG; + } else { + print STDERR " Nothing to add to .git/config\n" if($opt_v); + } +# XXX are there other files in .git that we might want to handle? +# So just in case: + for my $file ( glob("$srcdir/*") ){ + next if( $file =~ m!.*/TARGET$! ); + next if( $file =~ m!.*/config$! ); + die "ERROR: no handler for $file\n"; + } +} +} + +sub do_dir_hooksdir { + my($srcdir, $targetdir) = @_; + + unless (-d $targetdir){ + # Older versions of git, when cloning a repo and + # the expected source templates directory does not + # exist, does not create .git/hooks. So do it here. + mkdir $targetdir; + print STDERR "WARNING: .git/hooks had to be created.\n"; + print STDERR " You may want to update git.\n"; + } + + for my $path ( glob("$srcdir$DS*") ){ + + next if( $path =~ m!.*${DS}TARGET$! ); + + my $file = $path; + + $file =~ s!.*$DS!!; + + $file = catfile($targetdir, $file); + + next if($opt_n); + + open IN, "<", $path or die "Can't open $path: $!"; + open OUT, ">", "$file" or die "Can't open $file: $!"; + while(){ + print OUT; + } + close OUT; + close IN; + + if(! -x $file){ + chmod 0755 ,$file; + } + } +} + +__END__ +(can we change the .gitattributes syntax to include a comment character?) +maybe [comment] attr.c:parse_attr_line +grr - looks like # is the comment character + + + +=head1 NAME + +nhgitset.pl - Setup program for NetHack git repositories + +=head1 SYNOPSIS + + cd THE_REPO + [git config nethack.gitadddir GITADDDIR] + perl SOME_PATH/DEVEL/nhgitset.pl [-v][-n][-f] + +=head1 DESCRIPTION + +nhgitset.pl installs NetHack-specific setup after a C (or after +changes to the desired configuration, which are installed by re-running +nhgitset.pl). + +The follwing options are available: + +B<-f> Force. Do not use this unless the program requests it. + +B<-n> Make no changes. + +B<-v> Verbose output. + +=head1 CONFIG + +nhgitset.pl uses the following non-standard C variables: + +nethack.gitadddir + + DOTGIT/INSTEAD + DOTGIT/PRE + DOTGIT/POST + hooksdir/INSTEAD + hooksdir/PRE + hooksdir/POST + +nethack.setupversion + +nethack.substprefix + + +=head1 EXIT STATUS + +0 Success. + +1 Fail. + +2 Intervention required. diff --git a/src/NetHack_3.7/Files b/src/NetHack_3.7/Files new file mode 100644 index 0000000..e0da484 --- /dev/null +++ b/src/NetHack_3.7/Files @@ -0,0 +1,677 @@ +This is a listing of all files in a full NetHack 3.7 distribution, organized +in their standard manner on a UNIX system. It indicates which files are +necessary for which versions, so that you can tell which files may be deleted +from or not transferred to your system if you wish. + +(Note: we ignore various dot files related to git.) + +.: +(files in top directory) +.clang-format Cross-compiling Files +Porting README azure-pipelines.yml + +DEVEL: +(files for people developing changes to NetHack) +Developer.txt code_features.txt code_style.txt git_recipes.txt +gitinfo.pl nhgitset.pl + +DEVEL/DOTGIT: +(file for people developing changes to NetHack) +TARGET + +DEVEL/hooksdir: +(files for people developing changes to NetHack) +NHadd NHgithook.pm NHsubst +NHtext TARGET applypatch-msg +commit-msg nhsub post-applypatch +post-checkout post-commit post-merge +post-rewrite pre-applypatch pre-auto-gc +pre-commit pre-push pre-rebase +prepare-commit-msg + +dat: +(files for all versions) +Arc-fila.lua Arc-filb.lua Arc-goal.lua Arc-loca.lua Arc-strt.lua +Bar-fila.lua Bar-filb.lua Bar-goal.lua Bar-loca.lua Bar-strt.lua +Cav-fila.lua Cav-filb.lua Cav-goal.lua Cav-loca.lua Cav-strt.lua +GENFILES Hea-fila.lua Hea-filb.lua Hea-goal.lua Hea-loca.lua +Hea-strt.lua Kni-fila.lua Kni-filb.lua Kni-goal.lua Kni-loca.lua +Kni-strt.lua Mon-fila.lua Mon-filb.lua Mon-goal.lua Mon-loca.lua +Mon-strt.lua Pri-fila.lua Pri-filb.lua Pri-goal.lua Pri-loca.lua +Pri-strt.lua Ran-fila.lua Ran-filb.lua Ran-goal.lua Ran-loca.lua +Ran-strt.lua Rog-fila.lua Rog-filb.lua Rog-goal.lua Rog-loca.lua +Rog-strt.lua Sam-fila.lua Sam-filb.lua Sam-goal.lua Sam-loca.lua +Sam-strt.lua Tou-fila.lua Tou-filb.lua Tou-goal.lua Tou-loca.lua +Tou-strt.lua Val-fila.lua Val-filb.lua Val-goal.lua Val-loca.lua +Val-strt.lua Wiz-fila.lua Wiz-filb.lua Wiz-goal.lua Wiz-loca.lua +Wiz-strt.lua air.lua asmodeus.lua astral.lua baalz.lua +bigrm-1.lua bigrm-2.lua bigrm-3.lua bigrm-4.lua bigrm-5.lua +bigrm-6.lua bigrm-7.lua bigrm-8.lua bigrm-9.lua bigrm-10.lua +bigrm-11.lua bogusmon.txt castle.lua cmdhelp data.base +dungeon.lua earth.lua engrave.txt epitaph.txt fakewiz1.lua +fakewiz2.lua fire.lua hellfill.lua help hh +history juiblex.lua keyhelp knox.lua license +medusa-1.lua medusa-2.lua medusa-3.lua medusa-4.lua minefill.lua +minend-1.lua minend-2.lua minend-3.lua minetn-1.lua minetn-2.lua +minetn-3.lua minetn-4.lua minetn-5.lua minetn-6.lua minetn-7.lua +nhcore.lua nhlib.lua opthelp optmenu oracle.lua +oracles.txt orcus.lua quest.lua rumors.fal rumors.tru +sanctum.lua soko1-1.lua soko1-2.lua soko2-1.lua soko2-2.lua +soko3-1.lua soko3-2.lua soko4-1.lua soko4-2.lua symbols +themerms.lua tower1.lua tower2.lua tower3.lua tribute +usagehlp valley.lua water.lua wizard1.lua wizard2.lua +wizard3.lua wizhelp + +doc: +(files for all versions) +Gbk-1pg-pfx.mn Gbk-1pg-sfx.mn Guidebook.mn Guidebook.tex +Guidebook.txt config.nh dlb.6 dlb.txt +fixes1-0.txt fixes1-4-f.txt fixes2-2.txt fixes2-3-e.txt +fixes3-0.txt fixes3-0-pl01.txt fixes3-0-pl02.txt fixes3-0-pl03.txt +fixes3-0-pl04.txt fixes3-0-pl05.txt fixes3-0-pl06.txt fixes3-0-pl07.txt +fixes3-0-pl08.txt fixes3-0-pl09.txt fixes3-0-pl10.txt fixes3-1-1.txt +fixes3-1-2.txt fixes3-1-3.txt fixes3-2-0.txt fixes3-2-1.txt +fixes3-2-2.txt fixes3-2-3.txt fixes3-3-0.txt fixes3-3-1.txt +fixes3-4-0.txt fixes3-4-1.txt fixes3-4-2.txt fixes3-4-3.txt +fixes3-5-0.txt fixes3-6-0.txt fixes3-6-1.txt fixes3-6-2.txt +fixes3-6-3.txt fixes3-6-4.txt fixes3-6-5.txt fixes3-6-6.txt +fixes3-6-7.txt fixes3-7-0.txt fixesX-X-X.txt lua.adoc +makedefs.6 makedefs.txt mn.7 mn.txt +mnh.7 mnh.txt nethack.6 nethack.txt +options.txt recover.6 recover.txt sound.txt +tmac.n tmac.nh window.txt + +include: +(files for X versions) +tile2x11.h winX.h xwindow.h xwindowp.h + +(files for all versions) +align.h artifact.h artilist.h attrib.h botl.h +color.h config.h config1.h context.h coord.h +cstd.h decl.h defsym.h dgn_file.h display.h +dlb.h dungeon.h engrave.h extern.h flag.h +fnamesiz.h func_tab.h global.h hack.h integer.h +isaac64.h lint.h mail.h mextra.h mfndpos.h +micro.h mkroom.h monattk.h mondata.h monflag.h +monst.h monsters.h obj.h objclass.h objects.h +optlist.h patchlevel.h pcconf.h permonst.h prop.h +quest.h rect.h region.h rm.h seffects.h +skills.h sndprocs.h sp_lev.h spell.h sym.h +sys.h tcap.h tileset.h timeout.h tradstdc.h +trap.h unixconf.h vision.h vmsconf.h warnings.h +winami.h wincurs.h windconf.h winprocs.h wintype.h +you.h youprop.h + +(file for tty versions) +wintty.h + +outdated: +(files that are no longer maintained for current game code) +.travis.yml + +outdated/dat: +(files that are no longer maintained for current game code) +symbols + +outdated/include: +(files for GEM versions) +bitmfile.h gem_rsc.h load_img.h wingem.h + +(file for GNOME versions) +winGnome.h + +(files for all versions) +amiconf.h beconf.h def_os2.h os2conf.h system.h tosconf.h +trampoli.h wceconf.h + +(files for various Macintosh versions) +mac-carbon.h mac-qt.h mac-term.h macconf.h macpopup.h +mactty.h macwin.h mttypriv.h + +outdated/sys/amiga: +(files for Amiga versions - untested for 3.7) +Build.ami Install.ami Makefile.agc Makefile.ami NetHack.cnf +amidos.c amidos.p amifont.uu amifont8.uu amigst.c +amii.hlp amimenu.c amirip.c amistack.c amitty.c +amiwind.c amiwind.p clipwin.c colorwin.c grave16.xpm +ifchange mkdmake txt2iff.c winamenu.c winami.c +winami.p winchar.c windefs.h winext.h winfuncs.c +winkey.c winproto.h winreq.c winstr.c xpm2iff.c + +outdated/sys/atari: +(files for Atari version - untested for 3.7) +Install.tos atarifnt.uue nethack.mnu setup.g tos.c +unx2atar.sed + +outdated/sys/be: +(files for BeOS version - untested for 3.7) +README bemain.c + +outdated/sys/mac: +(files for 68K Macintosh versions) +Files.r Install.mw MacHelp NHDeflts NHrsrc.hqx +NHsound.hqx News README carbon.plist dprintf.c +maccurs.c macerrs.c macfile.c machelp.hqx macmain.c +macmenu.c mactopl.c mactty.c macunix.c macwin.c +mgetline.c mmodal.c mrecover.c mrecover.hqx mttymain.c + +outdated/sys/msdos: +(files for deprecated real mode msdos version) +Makefile.BC Makefile.MSC SCHEMA35.MSC moveinit.pat ovlinit.c +schema1.BC schema2.BC schema3.MSC + +outdated/sys/os2: +(files for OS/2 version - untested for 3.7) +Install.os2 Makefile.os2 nhpmico.uu os2.c + +outdated/sys/unix: +(files that are no longer maintained for current game code) +README.linux cross-amiga.sh + +outdated/sys/unix/hints: +(files that are no longer maintained for current game code) +cross-amiga linux linux-chroot linux-qt4 +linux-qt5 linux-x11 macosx macosx10.5 +macosx10.7 macosx10.8 macosx10.10 macosx10.10-qt +macosx10.14 + +outdated/sys/unix/hints/include: +(files that are no longer maintained for current game code) +cross-amiga-post cross-amiga-pre + +outdated/sys/vms: +(files that are no longer maintained for current game code) +lev_lex.h + +outdated/sys/wince: +(files for Windows CE and PocketPC - untested for 3.7) +Install.ce bootstrp.mak celib.c cesetup.bat cesound.c +defaults.nh keypad.uu menubar.uu mhaskyn.c mhaskyn.h +mhcmd.c mhcmd.h mhcolor.c mhcolor.h mhdlg.c +mhdlg.h mhfont.c mhfont.h mhinput.c mhinput.h +mhmain.c mhmain.h mhmap.c mhmap.h mhmenu.c +mhmenu.h mhmsg.h mhmsgwnd.c mhmsgwnd.h mhrip.c +mhrip.h mhstatus.c mhstatus.h mhtext.c mhtext.h +mhtxtbuf.c mhtxtbuf.h mswproc.c newres.h nhico.uu +resource.h winMS.h winhack.c winhack.rc winhcksp.rc +winmain.c + +outdated/sys/wince/ceinc: +(header files for Windows CE and PocketPC - untested for 3.7) +assert.h errno.h fcntl.h + +outdated/sys/wince/ceinc/sys: +(sys/stat.h for Windows CE and PocketPC - untested for 3.6.2) +stat.h + +outdated/sys/windows: +(files that are no longer maintained for current game code) +travis-gcc.sh + +outdated/sys/windows/vs: +(files that are no longer maintained for current game code) +travisci.sh + +outdated/win/Qt3: +(files for the Qt 3 widget library - X11, Windows, Mac OS X, or Qtopia) +Info.plist Install.Qt knethack.lnk +knh-mini.xpm knh.xpm qpe-nethack.control +qt3_clust.cpp qt3_clust.h qt3_kde0.h +qt3_win.cpp qt3_win.h qt3_xpms.h +qt3tableview.cpp qt3tableview.h tileedit.cpp +tileedit.h + +outdated/win/gem: +(files for GEM versions - untested for 3.7) +Install.gem bitmfile.c gem_rsc.uu gem_rso.uu gr_rect.c gr_rect.h +load_img.c tile2img.c title.uu wingem.c wingem1.c xpm2img.c + +outdated/win/gnome: +(files for GNOME versions - untested for 3.7) +README gn_xpms.h gnaskstr.c gnaskstr.h gnbind.c gnbind.h +gnglyph.c gnglyph.h gnmain.c gnmain.h gnmap.c gnmap.h +gnmenu.c gnmenu.h gnmesg.c gnmesg.h gnomeprv.h gnopts.c +gnopts.h gnplayer.c gnplayer.h gnsignal.c gnsignal.h gnstatus.c +gnstatus.h gntext.c gntext.h gnworn.c gnworn.h gnyesno.c +gnyesno.h mapbg.xpm + +sound/fmod: +(file in top directory) +fmod.c + +sound/macsound: +(file in top directory) +macsound.m + +sound/qtsound: +(file in top directory) +README.md + +sound/wav: +(files in top directory) +README attributions.txt +sa2_xpleveldown.uu sa2_xplevelup.uu +se_squeak_A.uu se_squeak_B.uu +se_squeak_B_flat.uu se_squeak_C.uu +se_squeak_D.uu se_squeak_D_flat.uu +se_squeak_E.uu se_squeak_E_flat.uu +se_squeak_F.uu se_squeak_F_sharp.uu +se_squeak_G.uu se_squeak_G_sharp.uu +sound_Bell.uu sound_Bugle_A.uu +sound_Bugle_B.uu sound_Bugle_C.uu +sound_Bugle_D.uu sound_Bugle_E.uu +sound_Bugle_F.uu sound_Bugle_G.uu +sound_Drum_Of_Earthquake.uu sound_Fire_Horn.uu +sound_Frost_Horn.uu sound_Leather_Drum.uu +sound_Magic_Flute_A.uu sound_Magic_Flute_B.uu +sound_Magic_Flute_C.uu sound_Magic_Flute_D.uu +sound_Magic_Flute_E.uu sound_Magic_Flute_F.uu +sound_Magic_Flute_G.uu sound_Magic_Harp_A.uu +sound_Magic_Harp_B.uu sound_Magic_Harp_C.uu +sound_Magic_Harp_D.uu sound_Magic_Harp_E.uu +sound_Magic_Harp_F.uu sound_Magic_Harp_G.uu +sound_Tooled_Horn_A.uu sound_Tooled_Horn_B.uu +sound_Tooled_Horn_C.uu sound_Tooled_Horn_D.uu +sound_Tooled_Horn_E.uu sound_Tooled_Horn_F.uu +sound_Tooled_Horn_G.uu sound_Wooden_Flute_A.uu +sound_Wooden_Flute_B.uu sound_Wooden_Flute_C.uu +sound_Wooden_Flute_D.uu sound_Wooden_Flute_E.uu +sound_Wooden_Flute_F.uu sound_Wooden_Flute_G.uu +sound_Wooden_Harp_A.uu sound_Wooden_Harp_B.uu +sound_Wooden_Harp_C.uu sound_Wooden_Harp_D.uu +sound_Wooden_Harp_E.uu sound_Wooden_Harp_F.uu +sound_Wooden_Harp_G.uu uu2wav.cmd +uu2wav.sh + +sound/windsound: +(file in top directory) +windsound.c + +src: +(files for all versions) +allmain.c alloc.c apply.c artifact.c attrib.c ball.c +bones.c botl.c cmd.c date.c dbridge.c decl.c +detect.c dig.c display.c dlb.c do.c do_name.c +do_wear.c dog.c dogmove.c dokick.c dothrow.c drawing.c +dungeon.c eat.c end.c engrave.c exper.c explode.c +extralev.c files.c fountain.c hack.c hacklib.c insight.c +invent.c isaac64.c light.c lock.c mail.c makemon.c +mcastu.c mdlib.c mhitm.c mhitu.c minion.c mklev.c +mkmap.c mkmaze.c mkobj.c mkroom.c mon.c mondata.c +monmove.c monst.c mplayer.c mthrowu.c muse.c music.c +nhlobj.c nhlsel.c nhlua.c o_init.c objects.c objnam.c +options.c pager.c pickup.c pline.c polyself.c potion.c +pray.c priest.c quest.c questpgr.c read.c rect.c +region.c restore.c rip.c rnd.c role.c rumors.c +save.c sfstruct.c shk.c shknam.c sit.c sounds.c +sp_lev.c spell.c steal.c steed.c symbols.c sys.c +teleport.c timeout.c topten.c track.c trap.c u_init.c +uhitm.c utf8map.c vault.c version.c vision.c weapon.c +were.c wield.c windows.c wizard.c worm.c worn.c +write.c zap.c + +submodules: +(files in top directory) +lua pdcurses pdcursesmod + +sys/libnh: +(files in top directory) +README.md libnhmain.c sysconf + +sys/libnh/test: +(files in top directory) +README.md libtest.c run.sh + +sys/msdos: +(files for MSDOS version) +Install.dos Makefile.GCC exceptn.S.patch +fetch-cross-compiler.sh font.c font.h +msdos.c msdoshlp.txt nhlua.h +pckeys.c pctiles.c pctiles.h +pcvideo.h portio.h setup.bat +sysconf tile2bin.c vesa.h +video.c vidtxt.c vidvesa.c +vidvga.c + +(files for running MSDOS binary under Windows) +nhico.uu nhpif.uu + +sys/msdos/fonts: +(files for MSDOS version) +README.txt makefont.lua nh-u16b.bdf nh-u16v.bdf nh-u18b.bdf +nh-u20b.bdf nh-u22b.bdf nh-u24b.bdf nh-u28b.bdf nh-u32b.bdf + +sys/share: +(Berkeley random number file, which may be included in any version) +random.c + +(Berkeley uudecode file, which may be used in build process of any version) +uudecode.c + +(file for MSDOS, OS/2, Amiga, and Atari versions - only MSDOS tested for 3.7) +pcmain.c + +(file for MSDOS, OS/2, and Atari versions - only MSDOS tested for 3.7) +NetHack.cnf pctty.c + +(file for MSDOS, OS/2, and VMS versions) +termcap + +(file for VMS version) +tclib.c + +(files for MSDOS, OS/2 and Atari versions - only MSDOS tested for 3.7) +pcsys.c pcunix.c + +(files for OS/2 version - untested for 3.7) +Makefile.lib termcap.uu + +(files for UNIX and Be versions) +ioctl.c unixtty.c + +(posix regex for versions that include regex in their C library) +posixregex.c + +(c++ regex code for versions that can build a C++ module and link it in) +cppregex.cpp + +(pmatch regex for other versions) +pmatchregex.c + +sys/unix: +(files for UNIX versions) +Install.unx Makefile.dat Makefile.doc Makefile.src +Makefile.top Makefile.utl NewInstall.unx README.xcode +XCode.xcconfig depend.awk gitinfo.sh mkmkfile.sh +nethack.sh setup.sh sysconf unixmain.c +unixres.c unixunix.c + +sys/unix/NetHack.xcodeproj: +(file for macOS Xcode) +project.pbxproj + +sys/unix/NetHack.xcodeproj/project.xcworkspace: +(file for macOS Xcode) +contents.xcworkspacedata + +sys/unix/NetHack.xcodeproj/project.xcworkspace/xcshareddata: +(files for macOS Xcode) +IDEWorkspaceChecks.plist WorkspaceSettings.xcsettings + +sys/unix/NetHack.xcodeproj/xcshareddata/xcschemes: +(files for macOS Xcode) +NetHack.xcscheme makedefs.xcscheme recover.xcscheme + +sys/unix/hints: +(files for configuring UNIX NetHack versions) +linux-minimal linux.370 macOS.370 +macosx.sh solaris solaris-playground +unix + +sys/unix/hints/include: +(files for configuring UNIX NetHack versions) +compiler.370 cross-post.370 cross-pre.370 gbdates-post.370 +gbdates-pre.370 multisnd-post.370 multisnd1-pre.370 multisnd2-pre.370 +multiw-1.370 multiw-2.370 multiw-3.370 + +sys/vms: +(files for VMS version) +Install.vms Makefile.dat Makefile.doc Makefile.src Makefile.top +Makefile.utl install.com nethack.com oldcrtl.c spec_lev.com +sysconf vmsbuild.com vmsfiles.c vmsmail.c vmsmain.c +vmsmisc.c vmstty.c vmsunix.c + +sys/windows: +(files for Windows 7/8.x/10/11 version) +.nethackrc.template Install.windows Makefile.mingw32 +Makefile.mingw32.depend Makefile.nmake console.rc +consoletty.c guitty.c nethack.def +nhico.uu nhsetup.bat porthelp +sysconf.template win10.c win10.h +win32api.h windmain.c windsys.c +winos.h + +sys/windows/vs: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +NetHack.sln NetHackPackage.appxmanifest +NetHackPackage.wapproj NetHackProperties.props +Package.StoreAssociation.xml ScreenShot.PNG +build.bat common.props +config.props console.props +cpp.hint default.props +default_dll.props default_lib.props +dirs.props dll.props +files.props + +sys/windows/vs/Images: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +BadgeLogo.scale-100.png +BadgeLogo.scale-125.png +BadgeLogo.scale-150.png +BadgeLogo.scale-200.png +BadgeLogo.scale-400.png +LargeTile.scale-100.png +LargeTile.scale-125.png +LargeTile.scale-150.png +LargeTile.scale-200.png +LargeTile.scale-400.png +LockScreenLogo.scale-200.png +SmallTile.scale-100.png +SmallTile.scale-125.png +SmallTile.scale-150.png +SmallTile.scale-200.png +SmallTile.scale-400.png +SplashScreen.scale-100.png +SplashScreen.scale-125.png +SplashScreen.scale-150.png +SplashScreen.scale-200.png +SplashScreen.scale-400.png +Square150x150Logo.scale-100.png +Square150x150Logo.scale-125.png +Square150x150Logo.scale-150.png +Square150x150Logo.scale-200.png +Square150x150Logo.scale-400.png +Square44x44Logo.altform-unplated_targetsize-16.png +Square44x44Logo.altform-unplated_targetsize-256.png +Square44x44Logo.altform-unplated_targetsize-32.png +Square44x44Logo.altform-unplated_targetsize-48.png +Square44x44Logo.scale-100.png +Square44x44Logo.scale-125.png +Square44x44Logo.scale-150.png +Square44x44Logo.scale-200.png +Square44x44Logo.scale-400.png +Square44x44Logo.targetsize-16.png +Square44x44Logo.targetsize-24.png +Square44x44Logo.targetsize-24_altform-unplated.png +Square44x44Logo.targetsize-256.png +Square44x44Logo.targetsize-32.png +Square44x44Logo.targetsize-48.png +StoreLogo.backup.png +StoreLogo.scale-100.png +StoreLogo.scale-125.png +StoreLogo.scale-150.png +StoreLogo.scale-200.png +StoreLogo.scale-400.png +Wide310x150Logo.scale-100.png +Wide310x150Logo.scale-125.png +Wide310x150Logo.scale-150.png +Wide310x150Logo.scale-200.png +Wide310x150Logo.scale-400.png + +sys/windows/vs/NetHack: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +NetHack.vcxproj afternethack.proj + +sys/windows/vs/NetHackW: +(file for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +NetHackW.vcxproj + +sys/windows/vs/PDCurses: +(file for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +PDCurses.vcxproj + +sys/windows/vs/PDCursesGui: +(file for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +pdcursesgui.vcxproj + +sys/windows/vs/dlb: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +afterdlb.proj dlb.vcxproj + +sys/windows/vs/makedefs: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +aftermakedefs.proj makedefs.vcxproj + +sys/windows/vs/recover: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +afterrecover.proj recover.vcxproj + +sys/windows/vs/tile2bmp: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +aftertile2bmp.proj tile2bmp.vcxproj + +sys/windows/vs/tilemap: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +aftertilemap.proj tilemap.vcxproj + +sys/windows/vs/tiles: +(file for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +tiles.vcxproj + +sys/windows/vs/uudecode: +(files for Visual Studio 2017 or 2019 or 2022 Community Edition builds) +afteruudecode.proj uudecode.vcxproj + +test: +(files for testing) +test_cnf.lua test_des.lua test_lev.lua test_obj.lua test_sel.lua +test_shk.lua test_src.lua testmove.lua testwish.lua + +util: +(files for all versions) +dlb_main.c makedefs.c mdgrep.h mdgrep.pl panic.c recover.c + +win/Qt: +(files for the Qt 4 or 5 widget library - X11, Windows, Mac OS X) +Qt-issues.txt qt_bind.cpp qt_bind.h qt_click.cpp qt_click.h +qt_clust.cpp qt_clust.h qt_delay.cpp qt_delay.h qt_glyph.cpp +qt_glyph.h qt_icon.cpp qt_icon.h qt_inv.cpp qt_inv.h +qt_kde0.h qt_key.cpp qt_key.h qt_line.cpp qt_line.h +qt_main.cpp qt_main.h qt_map.cpp qt_map.h qt_menu.cpp +qt_menu.h qt_msg.cpp qt_msg.h qt_plsel.cpp qt_plsel.h +qt_post.h qt_pre.h qt_rip.cpp qt_rip.h qt_set.cpp +qt_set.h qt_stat.cpp qt_stat.h qt_str.cpp qt_str.h +qt_streq.cpp qt_streq.h qt_svsel.cpp qt_svsel.h qt_win.cpp +qt_win.h qt_xcmd.cpp qt_xcmd.h qt_xpms.h qt_yndlg.cpp +qt_yndlg.h + +win/X11: +(files for X versions) +Install.X11 NetHack.ad Window.c X11-issues.txt +dialogs.c ibm.bdf nethack.rc nh10.bdf +nh32icon nh56icon nh72icon nh_icon.xpm +pet_mark.xbm pilemark.xbm rip.xpm tile2x11.c +winX.c winmap.c winmenu.c winmesg.c +winmisc.c winstat.c wintext.c winval.c + +win/chain: +(files for stacking window systems) +wc_chainin.c wc_chainout.c wc_trace.c + +win/curses: +(files in top directory) +Bugs.txt Readme.txt Todo.txt cursdial.c cursdial.h cursinit.c +cursinit.h cursinvt.c cursinvt.h cursmain.c cursmesg.c cursmesg.h +cursmisc.c cursmisc.h cursstat.c cursstat.h curswins.c curswins.h + +win/macosx: +(files for macosx versions) +NetHackGuidebook.applescript NetHackRecover.applescript +NetHackTerm.applescript recover.pl + +win/share: +(files for versions using optional tiles) +bmptiles.c gifread.c giftiles.c monsters.txt nhicns.uu +nhsplash.xpm objects.txt other.txt ppmwrite.c renumtiles.pl +safeproc.c thintile.c tile.doc tile.h tile2bmp.c +tilemap.c tileset.c tiletext.c tiletxt.c + +win/shim: +(file in top directory) +winshim.c + +win/tty: +(files for tty versions) +getline.c termcap.c topl.c wintty.c + +win/win32: +(files for Windows versions - tested up to Windows 11) +NetHackW.c NetHackW.exe.manifest NetHackW.rc +mhaskyn.c mhaskyn.h mhdlg.c +mhdlg.h mhfont.c mhfont.h +mhinput.c mhinput.h mhmain.c +mhmain.h mhmap.c mhmap.h +mhmenu.c mhmenu.h mhmsg.h +mhmsgwnd.c mhmsgwnd.h mhrip.c +mhrip.h mhsplash.c mhsplash.h +mhstatus.c mhstatus.h mhtext.c +mhtext.h mnsel.uu mnselcnt.uu +mnunsel.uu mswproc.c nethack.rc +nhresource.h petmark.uu pilemark.uu +record.uu resource.h rip.uu +splash.uu tiles-mingw32.mak tiles.mak +winMS.h + +This is a list of files produced by auxiliary programs. They can all be +regenerated from the files in the distribution. + +dat: +(files generated by makedefs at playground creation time) +data options oracles rumors + +(files generated for Qt interface on macOS) +Info.plist nethack.icns + +(files generated for windows at compile time) +dlb.lst porthelp + +(files generated for windows gui at compile time) +guioptions + +(files generated for windows tty at compile time) +ttyoptions + +(tile files optionally generated for X ports at playground creation time) +pet_mark.xbm rip.xpm x11tiles + +src: +(files for win32 that are moved into src at compile time) +Makefile Makefile.mingw32 + +(files generated by 'moc' for Qt interface at compile time) +qt_kde0.moc qt_main.moc qt_map.moc qt_menu.moc qt_msg.moc +qt_plsel.moc qt_set.moc qt_stat.moc qt_xcmd.moc qt_yndlg.moc + +(file generated by makedefs -m but unused in 3.7) +monstr.c + +(file optionally generated by tilemap at compile time) +tile.c + +sys/windows: +(file generated by uudecode at compile time) +nethack.ico + +util: +(file generated for unix at compile time if various tiles utilities are built) +tiletxt.c + +(file generated for windows at compile time) +uudecode.exe + +NOTE: If your binaries were compiled with the data librarian (DLB) option, + your playground will not contain all of the files listed here. All + of the files listed as being required for the playground must still + have been built by your compiler, but the DLB code will roll them up + into another file (or files). + diff --git a/src/NetHack_3.7/Porting b/src/NetHack_3.7/Porting new file mode 100644 index 0000000..7260159 --- /dev/null +++ b/src/NetHack_3.7/Porting @@ -0,0 +1,265 @@ + NetHack Porting Guidelines v 3.7 2023-04-23 + + + 1.0 Introduction + + This document goes through the steps required to port NetHack to a +new machine, with the intention of compiling natively on that machine. If +you are cross-compiling for one platform on another, it is suggested that +you read Cross-compiling. + +The basic steps in porting the program using a native compiler are: + + 1. Get the code onto your build machine. The parts of the current + directory setup you definitely need include src (NetHack code + shared by all systems), include (include files), util (code + for utility programs), and dat (various data files). The + documentation in doc is strongly recommended. You already + have the files in the top directory since you're reading this + one. :-) + + If you will be cross-compiling for your target platform on + a different platform, you may want to read Cross-compiling + in the Top folder as well. + + A full list of the distribution files and their associated + OSes may be found in the top-level file "Files". + + If your machine uses an OS already supported, you need the sys + subdirectory for that OS and possibly sys/share. Otherwise, + get the closest match (say sys/msdos for single-tasking OSes + and sys/unix for multi-user OSes, along with sys/share, if + nothing else comes to mind). You may want others for + comparison. + + If your machine uses a windowing system already supported, + you need the win subdirectory for that system (or the + appropriate sys subdirectory if the windowing system was + previously considered restricted to one OS) and possibly + win/share. + + 2. Modify the appropriate include files to customize NetHack to + your system. You may need to add a new OS-specific "*conf.h" + file (see unixconf.h, windconf.h, pcconf.h, etc. as examples). + + 3. If your machine uses a new OS instead of a variant of existing + OSes, add a new sys subdirectory. Add, if required, a OS- + specific copy of "main.c", "tty.c" and "unix.c". Possibly + add an OS-specific library (see "msdos.c" and "tos.c" as + examples) to provide functions NetHack wants and your OS lacks. + + 4. If your machine uses a new windowing system, follow doc/window.txt + carefully. Put files implementing these routines in a win or + sys subdirectory as appropriate. + + 5. If your compilation environment isn't close to one already + supported, try starting from the UNIX makefiles. Modify the + top level makefile and the src makefile as required. Then run + an initial compile. You are bound to get some errors. You + should be able to fix them in a fairly simple fashion. If + things seem to be getting too complex, take a step back, and + possibly send us some mail. We might be able to help. + + 6. Mail all of your fixes to us in a contextual form so that we can + easily integrate them into the code, or fork the NetHack + repository on GitHub and issue a pull-request for your changes. + + One general rule of thumb exists. Always add code. Don't delete +somebody else's code for yours -- it won't work on their machine if you do. +Always add your OS specific code inside #ifdef / #else / #endif constructs +so that it will be able to be folded back into the original code easily. + + + 2.0 Include Files + + 2.1 config.h + + The file "config.h" is a master configuration file that determines +the basic features of the game, as well as many of the security options. +It is intended that end users configure the game by editing "config.h" and +an appropriate "*conf.h" file, so any #defines for individual preferences +should be added to those files. OS-specific #defines that are not intended +to be changed should also go in "*conf.h"; try to find the most appropriate +place for other #defines. + + The following sections may require modification: + + - Section 1: OS and window system selection. + You may have to put a #define for your OS here. + If your OS is yet another UNIX variant, put the + #define in unixconf.h instead. + An unfortunately large amount of stuff shares + this section because the #definitions have to + be seen before *conf.h is reached. Don't add + to this unless necessary. + + - Section 2: Global parameters and filenames. + These will have to be customized to your system. + + - Section 3: Type definitions and other compiler behavior. + These will have to be matched to your compiler. + + 2.2 global.h + + This file defines things specific to NetHack that should not +require modification by an end user. For a new port, you may have to add +automatic inclusion of another auxiliary config file (*conf.h) which you +wrote for your system. + + 2.3 extern.h + + If you create any new source modules or new functions in old modules, +you must enter the names of the new external references (the functions defined +there for external use) in this file. + + + 3.0 Source files + + The first step in getting the game up is to get the "makedefs" +program running. This program is used to create configuration-specific +files for the game. + + Once "makedefs" has been built, the rest of the game can be compiled. +You may have to create an OS-specific module to handle things you want to +use, like a mouse or a ram-disk. + + 3.1 Makefiles + + This distribution provides makefiles for several kinds of systems. +There are joint makefiles for the various varieties of UNIX, makefiles for +MSDOS, a makefile for NT, and so on. You may have to create a new +makefile for your specific machine. You may even have to translate some +makefiles into a form more congenial to your system. If possible, however, +add to one of those provided. + + 3.2 termcap.c + + If your system wants to use tty windowing and it doesn't run off +of a termcap or terminfo database, you may have to put the appropriate +terminal control strings into termcap.c. You can also consider using the +termcap code from sys/share/tclib.c or sys/share/termcap.uu, especially if +your system supports multiple kinds of terminals. Alternatively, you can +define NO_TERMS and provide alternative screen handling in a +platform-specific module. That has already been done for MSDOS and for +the Windows console, and those mods can be used as an example. + + 3.4 tty.c + + You may need to create a new "tty.c" module. If you do, call it +[OS]tty.c where the [OS] is replaced with the name of the OS you are porting +to. This file contains the routines that configure the terminal/console +for raw I/O, etc. + + 3.5 unix.c + + You may need to create a new "unix.c" module. If you do, call it +[OS]unix.c where the [OS] is replaced with the name of the OS you are porting +to. This file contains some OS dependencies concerning time and filename +creation. + + An object of the NetHack development project is to get the game +working on as many different types of hardware and under as many different +operating systems as is practical. Any assistance will be appreciated. + +Cross-compiling may allow porting of NetHack to a machine where there may +be challenges building on the platform directly, and may help maintain a +working version of NetHack on that platform. See the file Cross-compiling +for more information. + + 4.0 Build Process + +NetHack requires the following steps to be carried out: + + 4.1. makedefs + +Compile and link util/makedefs. Run makedefs repeatedly with different command +line options to produce several output files that are required for: + (a) creation of files, containing information required by, + or about the game during its execution, that are stored in a + portable, platform-independent way, that need to be inserted + into the final game package. + + Required for complete packaging of the game, but not the C source + game compile: + util/makedefs -d + util/makedefs -r + util/makedefs -h + util/makedefs -s + + For reference purposes, but no longer a required prerequisite for the + game compile process: + util/makedefs -v + util/makedefs -o + util/makedefs -p + + 4.2. Other utilities + + Compile and link other utilities such as uudecode, tile-generation +utilities, and so forth. Those produce output files for use during the game and +need to be included in the packaging of the game. + + 4.3. Lua + + Compile and link into a library, or obtain a prebuilt Lua library for +your platform. Place the Lua source into lib/lua-5.4.6 (or other folder +representing an appropriate Lua version); place the compiled Lua library into +lib. + + 4.4 Compile NetHack sources + + Compile the source code of the game, including a suitable +regular-expression choice from several options available in sys/share. Pick one +that is supported by your OS or that you have obtained a 3rd party library for. + + 4.5 Compile optional window port components into a library + + If your platform requires 3rd party sources in order to support the +window port options that you have chosen, such as curses sources for the curses +window port, you may store the sources for that library in a subfolder under +lib. + + 4.6. Link the game + + Link the game to the Lua library, and to any window port support +libraries. + + 4.7 Package the game + + + + 5.0 Design Updates + +The following design updates were introduced in NetHack 3.7. + + 5.1 Quest text files + + The quest text files that were formerly converted from their source +text by makedefs during the build process, have been replaced by Lua versions +and are inserted into the game package for processing by the embedded Lua +interpreter during game execution. + + 5.2 Level Compiler + + There is no longer a build-time level compiler. Instead, the level +descriptions have been converted to Lua and are inserted into the game package +for processing by the embeded Lua interpreter during game execution. + + 5.3 Dungeon Compiler + + There is no longer a build-time dungeon compiler. Instead, the dungeon +description has been converted to Lua and is inserted into the game package for +processing by the embeded Lua interpreter during game execution. + + + 5.4 Run-time Options + + Some of the build and option information that was formerly produced at +build-time by makedefs, and contained information about the game platform and +options selected during the build of the game, can now be produced at run-time +by code within the game itself. That was done to facilitate cross-compiling of +NetHack on one platform for game execution on another. + + +# NetHack 3.7 Porting $NHDT-Date: 1643491454 2022/01/29 21:24:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.17 $ +# Copyright (c) 2005 by Michael Allison +# NetHack may be freely redistributed. See license for details. diff --git a/src/NetHack_3.7/README b/src/NetHack_3.7/README new file mode 100644 index 0000000..7863dd0 --- /dev/null +++ b/src/NetHack_3.7/README @@ -0,0 +1,216 @@ + NetHack 3.7.0 work-in-progress -- General information + +NetHack 3.7 is an enhancement to the dungeon exploration game NetHack, +which is a distant descendent of Rogue and Hack, and a direct descendent of +NetHack 3.6. + +NetHack 3.7.0 work-in-progress is not a release of NetHack. As a .0 version, +and still very early in its development cycle, there has already been changes +made, and there will continue to be many more prior to an eventual release. +The file doc/fixes3-7-0.txt in the source distribution will be updated with +a list of fixes as they are committed. + +In short -- there are likely to be bugs. Don't treat NetHack-3.7 branch as +released code, and if stability is paramount, then the most recent +NetHack 3.6.7 release is safest for you. + +We're making the .0 work-in-progress available so that you can observe, test +out, and contribute to its development. Constructive suggestions, GitHub pull +requests, and bug reports are all welcome and encouraged. + +The file doc/fixes3-7-0.txt in the source distribution has a full list of +bug-fixes included so far, as well as brief mentions of some of the other code +changes. The text in there was written for the development team's own use and is +provided "as is", so please do not ask us to further explain the entries in +that file. Some entries might be considered "spoilers", particularly in the +"new features" section. + +Along with the game improvements and bug fixes, NetHack 3.7 strives to make +some general architectural improvements to the game or to its building +process. Among them: + + * Remove barriers to building NetHack on one platform and operating system, + for later execution on another (possibly quite different) platform and/or + operating system. That capability is generally known as "cross-compiling." + See the file "Cross-compiling" in the top-level folder for more information + on that. + + * Replace the build-time "yacc and lex"-based level compiler, the "yacc and + lex"-based dungeon compiler, and the quest text file processing done + by NetHack's "makedefs" utility, with Lua text alternatives that are + loaded and processed by the game during play. + + * Write game savefiles and bonesfiles in a more portable and consistent way + to open up the possibility of utilizing them between different platforms, + such as between your desktop computer and your hand-held device. + + * Add support to make the game restartable without exit (a.k.a. "play again" + support). Toward that end, many previously scattered and separate variables + have been gathered into central 'ga' through 'gz' structures in + decl.h/decl.c. That central ability to reinitialize the variables will + benefit the porting effort to some platforms that are under consideration + where "play again" is typical. + +Here are some other general notes on the changes in NetHack 3.7 that were not +considered spoilers: + - automatic annotation "gateway to Moloch's Sanctum" for vibrating square + level once that square's location becomes known (found or magic + mapped); goes away once sanctum temple is found (entered or high altar + mapped) + - savefile: add support to deconstruct internal data structures down into + their individual fields and save those fields instead of the entire + struct + - savefile: use little-endian format for fields where that makes a difference + + - - - - - - - - - - - + +Please read items (1), (2) and (3) BEFORE doing anything with your new code. + +1. Unpack the code in a dedicated new directory. We will refer to that + directory as the 'Top' directory. It makes no difference what you + call it. + +2. Having unpacked, you should have a file called 'Files' in your Top + directory. + + This file contains the list of all the files you now SHOULD + have in each directory. Please check the files in each directory + against this list to make sure that you have a complete set. + + This file also contains a list of what files are created during + the build process. + + The names of the directories listed should not be changed unless you + are ready to go through the makefiles and the makedefs program and change + all the directory references in them. + +3. Before you do anything else, please read carefully the file called + "license" in the 'dat' subdirectory. It is expected that you comply + with the terms of that license, and we are very serious about it. + +4. If you are attempting to build NetHack on one platform/processor, to + produce a game on a different platform/processor it may behoove you to + read the file "Cross-compiling" in your Top directory. + +5. If everything is in order, you can now turn to trying to get the program + to compile and run on your particular system. It is worth mentioning + that the default configuration is SysV/Sun/Solaris2.x (simply because + the code was housed on such a system). + + The files sys/*/Install.* were written to guide you in configuring the + program for your operating system. The files win/*/Install.* are + available, where necessary, to help you in configuring the program + for particular windowing environments. Reading them, and the man pages, + should answer most of your questions. + + + At the time of the most recent official release, NetHack 3.6, it had + been tested to run/compile on: + + Intel Pentium or better running Linux, BSDI + Intel Pentium or better running Windows 10 or 11 + Intel-based, or Apple M1 or M2 Macs running macOS 10.11 (El Capitan) to + 13 (Ventura) (follow the instructions in sys/unix/NewInstall.unx) + Intel 80386 or greater running MS-DOS with DPMI + built via djgpp compiler (native or Linux-hosted cross-compiler) + OpenVMS (aka VMS) V8.4 on Alpha and on Integrity/Itanium/IA64 + + Previous versions of NetHack were tested and known to run on the + following systems, but it is unknown if they can still build and + execute NetHack 3.6 or NetHack 3.7: + + Apple Macintosh running MacOS 7.5 or higher, LinuxPPC, BeOS 4.0 + Atari ST/TT/Falcon running TOS (or MultiTOS) with GCC + AT&T 3B1 running System V (3.51) + AT&T 3B2/600 & 3B2/622 running System V R3.2.1 + AT&T 3B2/1000 Model 80 running System V R3.2.2 + AT&T 3B4000 running System V + AT&T 6386 running System V R3.2 + Commodore Amiga running AmigaDOS 3.0 or higher with SAS/C 6.x + (but see Makefile.ami about DICE and Manx) + Data General AViiON systems running DG/UX + DEC Alpha/VMS (aka OpenVMS AXP), running V1.x through V7.1 + DEC VAX/VMS, running V4.6 through V7.1 + DEC vaxen running BSD, Ultrix + Decstations running Ultrix 3.1, 4.x + Encore Multimax running UMAX 4.2 + Gould NP1 running UTX 3/2 + HP 9000s300 running HP-UX + HP 9000s700 running HP-UX 9.x, 10.x, 11.x + H/PC Pro devices running Windows CE 2.11 and higher. + IBM PC/RT and RS/6000 running AIX 3.x + IBM PS/2 and AT compatibles running OS/2 - 2.0 and up with GCC emx + IBM PS/2 and AT compatibles running OS/2 1.1 - 2.0 (and probably + Warp) with Microsoft 6.0, and OS/2 2.0 and up with IBM CSet++ 2.0. + Intel 80386 or greater (or clone) running 386BSD + Intel x86 running a version of Windows 7 or 8 or prior to XP. + Mips M2000 running RiscOS 4.1 + NeXT running Mach (using BSD configuration) + Palm Size PC 1.1 devices running Windows CE 2.11 + Pocket PC devices running Windows CE 3.0 and higher + Pyramid 9820x running OSx 4.4c + SGI Iris running IRIX + Stardent Vistra 800 running SysV R4.0 + Stride 460 running UniStride 2.1 + Sun-3s, -4s, and -386is running SunOS 3.x + Sun-3s and -386is running SunOS 4.x + "Sun SPARC"-based machine running SunOS 4.x, Solaris 2.x, or Solaris 7 + Valid Logic Systems SCALD-System + + Previous versions, using a cross-compiler hosted on another platform, + such as win32, could also build the following from source: + Pocket PC devices running Windows CE 3.0 and higher + H/PC Pro devices running Windows CE 2.11 and higher + Palm Size PC 1.1 devices running Windows CE 2.11 + + Unless otherwise mentioned, the compiler used was the OS-vendor's + C compiler. + + - - - - - - - - - - - + +If you have problems building the game, or you find bugs in it, we recommend +filing a bug report from our "Contact Us" web page at: + https://www.nethack.org/common/contact.html +Please include the version information from #version or the command line +option --version in the appropriate field. + +A public repository of the latest NetHack code that we've made +available can be obtained via git here: + https://github.com/NetHack/NetHack + or + https://sourceforge.net/p/nethack/NetHack/ + +When sending correspondence, please observe the following: +o Please be sure to include your machine type, OS, and patchlevel. +o Please avoid sending us binary files (e.g. save files or bones files). + If you have found a bug and think that your save file would aid in solving + the problem, send us a description in words of the problem, your machine + type, your operating system, and the version of NetHack. Tell us that you + have a save file, but do not actually send it. + You may then be contacted by a member of the development team with the + address of a specific person to send the save file to. +o Though we make an effort to reply to each bug report, it may take some + time before you receive feedback. This is especially true during the + period immediately after a new release, when we get the most bug reports. +o We don't give hints for playing the game. +o Don't bother to ask when the next version will be out or you can expect + to receive a stock answer. + +If you want to submit a patch for the NetHack source code via email directly, +you can direct it to this address: + nethack-bugs (at) nethack.org + +If a feature is not accepted you are free, of course, to post the patches +to the net yourself and let the marketplace decide their worth. + +All of this amounts to the following: If you decide to apply a free-lanced +patch to your 3.6 code, you are welcome to do so, of course, but we won't +be able to provide support or receive bug reports for it. + +In our own patches, we will assume that your code is synchronized with ours. + + -- Good luck, and happy Hacking -- + +# $NHDT-Date: 1652133501 2022/05/09 21:58:21 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.97 $ +# Copyright (c) 2012 by Michael Allison +# NetHack may be freely redistributed. See license for details. diff --git a/src/NetHack_3.7/azure-pipelines.yml b/src/NetHack_3.7/azure-pipelines.yml new file mode 100644 index 0000000..ad29099 --- /dev/null +++ b/src/NetHack_3.7/azure-pipelines.yml @@ -0,0 +1,254 @@ +strategy: + matrix: + linux_latest_gcc9_minimal: + imageName: 'ubuntu-latest' + toolchainName: gcc9 + buildTargetName: minimal + linux_jammy_clang_all: + imageName: 'ubuntu-22.04' + toolchainName: clang + buildTargetName: all + linux_jammy_gcc9_all: + imageName: 'ubuntu-22.04' + toolchainName: gcc9 + buildTargetName: all + linux_jammy_gcc12_all: + imageName: 'ubuntu-22.04' + toolchainName: gcc12 + buildTargetName: all + macOS_latest_clang_all: + imageName: 'macOS-latest' + toolchainName: clang + buildTargetName: all + macOS_Ventura_clang13_all: + imageName: 'macOS-13' + toolchainName: clang + buildTargetName: all + windows-visualstudio: + imageName: 'windows-latest' + toolchainName: vs + buildTargetName: all + windows-mingw: + imageName: 'windows-2019' + toolchainName: mingw + buildTargetName: all + linux_focal_cross_msdos: + imageName: 'ubuntu-20.04' + toolchainName: cross + buildTargetName: msdos + linux_jammy_docs: + imageName: 'ubuntu-22.04' + toolchainName: docs + buildTargetName: all + continueOnError: true + +pool: + vmImage: $(imageName) + +# resources: +# repositories: +# - repository: pdcursesrepo +# type: github +# name: wmcbrine/PDCurses +# ref: refs/heads/master +# endpoint: github.com_barthouse + +variables: + toolchain: $(toolchainName) + buildTarget: $(buildTargetName) + netHackPath: s/NetHack + +steps: +- bash: | + if [ "$(toolchain)" == "gcc7" ] + then + echo "##vso[task.setvariable variable=CC]gcc-7" + echo "##vso[task.setvariable variable=CXX]g++-7" + fi + if [ "$(toolchain)" == "gcc9" ] + then + echo "##vso[task.setvariable variable=CC]gcc-9" + echo "##vso[task.setvariable variable=CXX]g++-9" + fi + if [ "$(toolchain)" == "gcc10" ] + then + echo "##vso[task.setvariable variable=CC]gcc-10" + echo "##vso[task.setvariable variable=CXX]g++-10" + fi + if [ "$(toolchain)" == "gcc11" ] + then + echo "##vso[task.setvariable variable=CC]gcc-11" + echo "##vso[task.setvariable variable=CXX]g++-11" + fi + if [ "$(toolchain)" == "gcc12" ] + then + echo "##vso[task.setvariable variable=CC]gcc-12" + echo "##vso[task.setvariable variable=CXX]g++-12" + fi + if [ "$(toolchain)" == "clang" ] + then + echo "##vso[task.setvariable variable=CC]clang" + echo "##vso[task.setvariable variable=CXX]clang++" + fi + if [ "$(toolchain)" == "cross" ] + then + echo "##vso[task.setvariable variable=CC]gcc-9" + echo "##vso[task.setvariable variable=CXX]g++-9" + fi + displayName: 'Setting variables' + +- bash: | + echo "toolchain: $(toolchain)" + echo "buildTarget: $(buildTarget)" + echo "netHackPath: $NETHACKPATH" + echo "CC: $CC" + echo "CXX: $CXX" + displayName: 'Echoing variables' + +- checkout: git://NetHack/NetHack@NetHack-3.7 + submodules: true + path: $(netHackPath) # $(Agent.BuildDirectory)/$(netHackPath) + +- task: DownloadSecureFile@1 + name: storeKey + inputs: + secureFile: 'NetHackPackage_StoreKey.pfx' + condition: eq( variables.toolchain, 'vs' ) + displayName: 'Store Key Download' + +- task: CopyFiles@2 + inputs: + contents: NetHackPackage_StoreKey.pfx + SourceFolder: $(Agent.TempDirectory) + TargetFolder: $(Agent.BuildDirectory)/$(netHackPath)/sys/windows/vs + condition: eq( variables.toolchain, 'vs' ) + displayName: 'Copying store key' + +- task: MSBuild@1 + inputs: + solution: $(Agent.BuildDirectory)/$(netHackPath)/sys/windows/vs/NetHack.sln + platform: Win32 + configuration: Debug + condition: eq( variables.toolchain, 'vs' ) + displayName: 'Visual Studio Build' + +- bash: | + export ADD_LUA=Y + export WANT_LUAC=N + export LUATOP=../submodules/lua + export LUASRC=../submodules/lua + export ADD_CURSES=Y + export PDCURSES_TOP=../submodules/pdcursesmod + export LUA_VERSION=5.4.6 + # + # 64-bit + #export CURLSRC=https://github.com/brechtsanders/winlibs_mingw/releases/download/11.2.0-9.0.0-ucrt-r5/winlibs-x86_64-posix-seh-gcc-11.2.0-mingw-w64ucrt-9.0.0-r5.zip + #export CURLDST=mingw-x64.zip + #export MINGWBIN=mingw64 + #export MSYSTEM=MINGW64 + # + # 32-bit + export CURLSRC=https://github.com/brechtsanders/winlibs_mingw/releases/download/11.2.0-9.0.0-ucrt-r5/winlibs-i686-posix-dwarf-gcc-11.2.0-mingw-w64ucrt-9.0.0-r5.zip + export CURLDST=mingw-x86.zip + export MINGWBIN=mingw32 + export MSYSTEM=MINGW32 + # all + mkdir -p ../lib + cd ../lib + mkdir -p mingw + curl -L $CURLSRC -o $CURLDST + #tar -C mingw -xvf $CURLDST + #/c/Windows/System32/tar -C mingw -xvf $CURLDST + powershell -command "Expand-Archive -Force $CURLDST mingw" + export PATH=../lib/mingw/$MINGWBIN/bin:$PATH + export + cd ../src + pwd + cp ../sys/windows/Makefile.mingw32* . + mingw32-make -f Makefile.mingw32 CI_COMPILER=1 GIT=1 MSYSTEM=$MSYSTEM LUA_VERSION=$LUA_VERSION clean + mingw32-make -f Makefile.mingw32 CI_COMPILER=1 GIT=1 MSYSTEM=$MSYSTEM LUA_VERSION=$LUA_VERSION depend + mingw32-make -f Makefile.mingw32 CI_COMPILER=1 GIT=1 MSYSTEM=$MSYSTEM LUA_VERSION=$LUA_VERSION + condition: eq( variables.toolchain, 'mingw' ) + workingDirectory: $(Agent.BuildDirectory)/$(netHackPath)/src + displayName: 'MinGW Build' + +- bash: | + sudo apt-get -qq -y update + sudo apt-get -qq -y install libncurses5-dev + sudo apt-get -qq -y install libx11-dev libxaw7-dev xfonts-utils qtbase5-dev qtmultimedia5-dev qtbase5-dev-tools + condition: eq( variables['Agent.OS'], 'Linux' ) + workingDirectory: $(Agent.BuildDirectory)/$(netHackPath) + displayName: 'Getting linux build dependencies' + +- bash: | + cd sys/unix + sh setup.sh hints/linux.370 + cd ../.. + make fetch-lua + make WANT_WIN_ALL=1 QT_SELECT=5 MOC=moc all + condition: and(eq( variables['Agent.OS'], 'Linux' ), eq( variables.buildTarget, 'all')) + workingDirectory: $(Agent.BuildDirectory)/$(netHackPath) + displayName: 'Building linux full build' + +- bash: | + cd sys/unix + sh setup.sh hints/linux-minimal + cd ../.. + sed -i '/^#define CLIPPING/d' include/config.h + sed -i '/^#define COMPRESS/d' include/config.h + #sed -i '/^#define DOAGAIN/d' include/config.h + sed -i '/^#define DUMPLOG/d' include/config.h + #sed -i '/^#define GDBPATH/d' include/config.h + #sed -i '/^#define GREPPATH/d' include/config.h + sed -i '/^#define INSURANCE/d' include/config.h + sed -i '/^#define ENHANCED_SYMBOLS/d' include/config.h + sed -i '/^#define LOGFILE/d' include/config.h + sed -i '/^#define NEWS/d' include/config.h + sed -i '/^#define PANICLOG/d' include/config.h + #sed -i '/^#define STATUS_HILITES/d' include/config.h + sed -i '/^#define SYSCF/d' include/config.h + sed -i '/^#define USER_SOUNDS/d' include/config.h + sed -i '/^#define XLOGFILE/d' include/config.h + sed -i '/^#define HANGUPHANDLING/d' include/global.h + sed -i '/^#define MAIL/d' include/unixconf.h + sed -i '/^#define SHELL/d' include/unixconf.h + sed -i '/^#define SUSPEND/d' include/unixconf.h + sed -i 's/^#define TEXTCOLOR//' include/unixconf.h + make fetch-lua + make WANT_WIN_ALL=1 all + condition: and(eq( variables['Agent.OS'], 'Linux' ), eq( variables.buildTarget, 'minimal')) + displayName: 'Building linux minimal build' + workingDirectory: $(Agent.BuildDirectory)/$(netHackPath) + +- bash: | + cd sys/unix + sh setup.sh hints/macos.370 + cd ../.. + make fetch-lua + make WANT_MACSOUND=1 all + condition: eq( variables['Agent.OS'], 'Darwin' ) + workingDirectory: $(Agent.BuildDirectory)/$(netHackPath) + displayName: 'Building mac full build' + +- bash: | + export GCCVER=gcc1220 + cd sys/unix + sh setup.sh hints/linux.370 + cd ../.. + make fetch-lua + sh sys/msdos/fetch-cross-compiler.sh + retVal=$? + if [ $retVal -eq 0 ]; then + make LUA_VERSION=5.4.6 WANT_WIN_TTY=1 WANT_WIN_CURSES=1 CROSS_TO_MSDOS=1 package + fi + condition: and(eq( variables['Agent.OS'], 'Linux' ), eq( variables.toolchain, 'cross')) + workingDirectory: $(Agent.BuildDirectory)/$(netHackPath) + displayName: 'Building MSDOS build' +- bash: | + sudo apt-get install texlive + make Guidebook + make Guidebook.txt + make Guidebook.pdf + condition: and(eq( variables['Agent.OS'], 'Linux' ), eq( variables.toolchain, 'docs')) + workingDirectory: $(Agent.BuildDirectory)/$(netHackPath) + displayName: 'Building NetHack documentation' diff --git a/src/NetHack_3.7/dat/.gitattributes b/src/NetHack_3.7/dat/.gitattributes new file mode 100644 index 0000000..cf71f96 --- /dev/null +++ b/src/NetHack_3.7/dat/.gitattributes @@ -0,0 +1,10 @@ +*.def NHSUBST +*.des NHSUBST +*.txt NHSUBST +*.lua NHSUBST +data.base NHSUBST +symbols NHSUBST +tribute NHSUBST +GENFILES NHSUBST +* NH_filestag=(file%s_for_all_versions) +..files NH_filegenprog diff --git a/src/NetHack_3.7/dat/.gitignore b/src/NetHack_3.7/dat/.gitignore new file mode 100644 index 0000000..748a8ff --- /dev/null +++ b/src/NetHack_3.7/dat/.gitignore @@ -0,0 +1,27 @@ +options +oracles +data +rip.xpm +pet_mark.xbm +pilemark.xbm +quest.dat +rumors +bogusmon +engrave +epitaph +x11tiles +nhtiles.bmp +*.lev +spec_levs +quest_levs +dungeon.pdf +dungeon +nethack.png +nhsplash.xpm +nhdat +dlb.lst +guioptions +porthelp +NetHack.ad +gitinfo.txt + diff --git a/src/NetHack_3.7/dat/Arc-fila.lua b/src/NetHack_3.7/dat/Arc-fila.lua new file mode 100644 index 0000000..1a869dd --- /dev/null +++ b/src/NetHack_3.7/dat/Arc-fila.lua @@ -0,0 +1,59 @@ +-- NetHack Archeologist Arc-fila.lua $NHDT-Date: 1652195998 2022/05/10 15:19:58 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster("S") + end +}); + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.monster("S") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.object() + des.monster("S") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.stair("down") + des.object() + des.trap() + des.monster("S") + des.monster("human mummy") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.monster("S") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.monster("S") + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Arc-filb.lua b/src/NetHack_3.7/dat/Arc-filb.lua new file mode 100644 index 0000000..a533487 --- /dev/null +++ b/src/NetHack_3.7/dat/Arc-filb.lua @@ -0,0 +1,59 @@ +-- NetHack Archeologist Arc-filb.lua $NHDT-Date: 1652195998 2022/05/10 15:19:58 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster("M") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.monster("M") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.object() + des.monster("M") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.stair("down") + des.object() + des.trap() + des.monster("S") + des.monster("human mummy") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.monster("S") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.monster("S") + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Arc-goal.lua b/src/NetHack_3.7/dat/Arc-goal.lua new file mode 100644 index 0000000..0561d1a --- /dev/null +++ b/src/NetHack_3.7/dat/Arc-goal.lua @@ -0,0 +1,115 @@ +-- NetHack Archeologist Arc-goal.lua $NHDT-Date: 1652195998 2022/05/10 15:19:58 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.map([[ + + --------- + |..|.|..| + -----------|..S.S..|----------- + |.|........|+-|.|-+|........|.| + |.S........S..|.|..S........S.| + |.|........|..|.|..|........|.| + ------------------+------------------ + |..|..........|.......|..........|..| + |..|..........+.......|..........S..| + |..S..........|.......+..........|..| + |..|..........|.......|..........|..| + ------------------+------------------ + |.|........|..|.|..|........|.| + |.S........S..|.|..S........S.| + |.|........|+-|.|-+|........|.| + -----------|..S.S..|----------- + |..|.|..| + --------- + +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.region(selection.area(35,02,36,03), "unlit") +des.region(selection.area(40,02,41,03), "unlit") +des.region(selection.area(24,04,24,06), "unlit") +des.region(selection.area(26,04,33,06), "lit") +des.region(selection.area(38,02,38,06), "unlit") +des.region(selection.area(43,04,50,06), "lit") +des.region(selection.area(52,04,52,06), "unlit") +des.region(selection.area(35,05,36,06), "unlit") +des.region(selection.area(40,05,41,06), "unlit") +des.region(selection.area(21,08,22,11), "unlit") +des.region(selection.area(24,08,33,11), "lit") +des.region(selection.area(35,08,41,11), "unlit") +des.region(selection.area(43,08,52,11), "lit") +des.region(selection.area(54,08,55,11), "unlit") +des.region(selection.area(24,13,24,15), "unlit") +des.region(selection.area(26,13,33,15), "unlit") +des.region(selection.area(35,13,36,14), "unlit") +des.region(selection.area(35,16,36,17), "unlit") +des.region(selection.area(38,13,38,17), "unlit") +des.region(selection.area(40,13,41,14), "unlit") +des.region(selection.area(40,16,41,17), "unlit") +des.region({ region={43,13, 50,15}, lit=0, type="temple", filled=2 }) +des.region(selection.area(52,13,52,15), "unlit") +-- Stairs +des.stair("up", 38,10) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- The altar of Huhetotl. Unattended. +des.altar({ x=50,y=14,align="chaos",type="altar" }) +-- Objects +des.object({ id = "crystal ball", x=50, y=14,buc="blessed",spe=5,name="The Orb of Detection" }) +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() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap("rolling boulder",46,14) +-- Random monsters. +des.monster("Minion of Huhetotl", 50, 14) +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("M") diff --git a/src/NetHack_3.7/dat/Arc-loca.lua b/src/NetHack_3.7/dat/Arc-loca.lua new file mode 100644 index 0000000..ec08e98 --- /dev/null +++ b/src/NetHack_3.7/dat/Arc-loca.lua @@ -0,0 +1,145 @@ +-- NetHack Archeologist Arc-loca.lua $NHDT-Date: 1652195999 2022/05/10 15:19:59 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor") + +des.map([[ +............................................................................ +............................................................................ +............................................................................ +........................-------------------------------..................... +........................|....|.S......................|..................... +........................|....|.|.|+------------------.|..................... +........................|....|.|.|.|.........|......|.|..................... +........................|....|.|.|.|.........|......|.|..................... +........................|---+-.|.|.|..---....+......|.|..................... +........................|....|.|.|.---|.|....|......|.|..................... +........................|....S.|.|.+..S.|--S-----S--|.|..................... +........................|....|.|.|.---|.|....|......+.|..................... +........................|---+-.|.|.|..---....|.------.|..................... +........................|....|.|.|.|.........|.|....+.|..................... +........................|....|.|.|.|.........|+|....|-|..................... +........................|....|.|.|------------+------.S..................... +........................|....|.S......................|..................... +........................-------------------------------..................... +............................................................................ +............................................................................ +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.region({ region={25,04, 28,07}, lit=1, type="temple", filled=2 }) +des.region({ region={25,09, 28,11}, lit=0, type="temple", filled=2 }) +des.region({ region={25,13, 28,16}, lit=1, type="temple", filled=2 }) +des.region(selection.area(30,04,30,16), "lit") +des.region(selection.area(32,04,32,16), "unlit") +des.region({ region={33,04, 53,04}, lit=0, type="ordinary", irregular=1 }) +des.region(selection.area(36,10,37,10), "unlit") +des.region(selection.area(39,09,39,11), "unlit") +des.region({ region={36,06, 42,08}, lit=0, type="ordinary", irregular=1 }) +des.region({ region={36,12, 42,14}, lit=0, type="ordinary", irregular=1 }) +des.region(selection.area(46,06,51,09), "unlit") +des.region({ region={46,11, 49,11}, lit=0, type="ordinary", irregular=1 }) +des.region(selection.area(48,13,51,14), "unlit") +-- Doors +des.door("closed",31,04) +des.door("closed",28,08) +des.door("locked",29,10) +des.door("closed",28,12) +des.door("closed",31,16) +des.door("locked",34,05) +des.door("locked",35,10) +des.door("locked",38,10) +des.door("closed",43,10) +des.door("closed",45,08) +des.door("locked",46,14) +des.door("locked",46,15) +des.door("locked",49,10) +des.door("locked",52,11) +des.door("closed",52,13) +des.door("closed",54,15) +-- Stairs +des.stair("up", 03,17) +des.stair("down", 39,10) +-- Altars - three types. All are unattended. +des.altar({ x=26,y=05,align=align[1], type="altar" }) +des.altar({ x=26,y=10,align=align[2], type="altar" }) +des.altar({ x=26,y=15,align=align[3], type="altar" }) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- 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() +-- Treasure? +des.engraving({ type="engrave", text="X marks the spot." }) +des.engraving({ type="engrave", text="X marks the spot." }) +des.engraving({ type="engrave", text="X marks the spot." }) +des.engraving({ type="engrave", text="X marks the spot." }) +-- Random traps +des.trap("spiked pit",24,02) +des.trap("spiked pit",37,00) +des.trap("spiked pit",23,05) +des.trap("spiked pit",26,19) +des.trap("spiked pit",55,10) +des.trap("spiked pit",55,08) +des.trap("pit",51,01) +des.trap("pit",23,18) +des.trap("pit",31,18) +des.trap("pit",48,19) +des.trap("pit",55,15) +des.trap("magic",60,04) +des.trap("statue",72,07) +des.trap("statue") +des.trap("statue") +des.trap("anti magic",64,12) +des.trap("sleep gas") +des.trap("sleep gas") +des.trap("dart") +des.trap("dart") +des.trap("dart") +des.trap("rolling boulder",32,10) +des.trap("rolling boulder",40,16) +-- Random monsters. +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("S") +des.monster("M") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("human mummy") +des.monster("M") diff --git a/src/NetHack_3.7/dat/Arc-strt.lua b/src/NetHack_3.7/dat/Arc-strt.lua new file mode 100644 index 0000000..cad4037 --- /dev/null +++ b/src/NetHack_3.7/dat/Arc-strt.lua @@ -0,0 +1,116 @@ +-- NetHack Archeologist Arc-strt.lua $NHDT-Date: 1652195999 2022/05/10 15:19:59 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 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, Lord Carnarvon +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor") + +des.map([[ +............................................................................ +............................................................................ +............................................................................ +............................................................................ +....................}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}................. +....................}-------------------------------------}................. +....................}|..S......+.................+.......|}................. +....................}-S---------------+----------|.......|}................. +....................}|.|...............|.......+.|.......|}................. +....................}|.|...............---------.---------}................. +....................}|.S.\.............+.................+.................. +....................}|.|...............---------.---------}................. +....................}|.|...............|.......+.|.......|}................. +....................}-S---------------+----------|.......|}................. +....................}|..S......+.................+.......|}................. +....................}-------------------------------------}................. +....................}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}................. +............................................................................ +............................................................................ +............................................................................ +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.region(selection.area(22,06,23,06), "unlit") +des.region(selection.area(25,06,30,06), "unlit") +des.region(selection.area(32,06,48,06), "unlit") +des.region(selection.area(50,06,56,08), "lit") +des.region(selection.area(40,08,46,08), "unlit") +des.region(selection.area(22,08,22,12), "unlit") +des.region(selection.area(24,08,38,12), "unlit") +des.region(selection.area(48,08,48,08), "lit") +des.region(selection.area(40,10,56,10), "lit") +des.region(selection.area(48,12,48,12), "lit") +des.region(selection.area(40,12,46,12), "unlit") +des.region(selection.area(50,12,56,14), "lit") +des.region(selection.area(22,14,23,14), "unlit") +des.region(selection.area(25,14,30,14), "unlit") +des.region(selection.area(32,14,48,14), "unlit") +-- Stairs +des.stair("down", 55,07) +-- Portal arrival point +des.levregion({ region = {63,06,63,06}, type="branch" }) +-- Doors +des.door("closed",22,07) +des.door("closed",38,07) +des.door("locked",47,08) +des.door("locked",23,10) +des.door("locked",39,10) +des.door("locked",57,10) +des.door("locked",47,12) +des.door("closed",22,13) +des.door("closed",38,13) +des.door("locked",24,14) +des.door("closed",31,14) +des.door("locked",49,14) +-- Lord Carnarvon +des.monster({ id = "Lord Carnarvon", coord = {25, 10}, inventory = function() + des.object({ id = "fedora", spe = 5 }); + des.object({ id = "bullwhip", spe = 4 }); +end }) +-- The treasure of Lord Carnarvon +des.object("chest", 25, 10) +-- student guards for the audience chamber +des.monster("student", 26, 09) +des.monster("student", 27, 09) +des.monster("student", 28, 09) +des.monster("student", 26, 10) +des.monster("student", 28, 10) +des.monster("student", 26, 11) +des.monster("student", 27, 11) +des.monster("student", 28, 11) +-- city watch guards in the antechambers +des.monster("watchman", 50, 06) +des.monster("watchman", 50, 14) +-- Eels in the moat +des.monster("giant eel", 20, 10) +des.monster("giant eel", 45, 04) +des.monster("giant eel", 33, 16) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Monsters on siege duty. +des.monster("S", 60, 09) +des.monster("M", 60, 10) +des.monster("S", 60, 11) +des.monster("S", 60, 12) +des.monster("M", 60, 13) +des.monster("S", 61, 10) +des.monster("S", 61, 11) +des.monster("S", 61, 12) +des.monster("S", 30, 03) +des.monster("M", 20, 17) +des.monster("S", 67, 02) +des.monster("S", 10, 19) diff --git a/src/NetHack_3.7/dat/Bar-fila.lua b/src/NetHack_3.7/dat/Bar-fila.lua new file mode 100644 index 0000000..64ea97e --- /dev/null +++ b/src/NetHack_3.7/dat/Bar-fila.lua @@ -0,0 +1,33 @@ +-- NetHack Barbarian Bar-fila.lua $NHDT-Date: 1652195999 2022/05/10 15:19:59 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg=".", smoothed=true, joined=true, lit=0, walled=false }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.trap() +des.trap() +des.trap() +des.trap() +-- +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ class = "O", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Bar-filb.lua b/src/NetHack_3.7/dat/Bar-filb.lua new file mode 100644 index 0000000..9764c31 --- /dev/null +++ b/src/NetHack_3.7/dat/Bar-filb.lua @@ -0,0 +1,44 @@ +-- NetHack Barbarian Bar-filb.lua $NHDT-Date: 1652196000 2022/05/10 15:20:00 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg=" ", smoothed=true, joined=true, lit=0, walled=true }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.trap() +des.trap() +des.trap() +des.trap() +-- +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ class = "O", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ class = "T", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Bar-goal.lua b/src/NetHack_3.7/dat/Bar-goal.lua new file mode 100644 index 0000000..760f36a --- /dev/null +++ b/src/NetHack_3.7/dat/Bar-goal.lua @@ -0,0 +1,95 @@ +-- NetHack Barbarian Bar-goal.lua $NHDT-Date: 1652196000 2022/05/10 15:20:00 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.map([[ + + ............. + .................. + .... ......................... .... + ....... .......................... ....... + ...... ........................ ....... + .. ...................................... .. + .. ..................... .. + .. .................. .. + .. ..S...S.............. ................ + .. ........ ... + ......... .. + ...... .. ... .... + .. ... .. ...... ........ + .... .. .................. ........ ...... + ...... ...................... ...... .. + .... .................. ........... + .............. + ........... + +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "unlit") +-- Secret doors +des.door("locked",22,09) +des.door("locked",26,09) +-- Stairs +des.stair("up", 36,05) +-- The altar. Unattended. +des.altar({ x=63,y=04,align="noncoaligned", type="altar" }) +des.non_diggable(selection.area(00,00,75,19)) +-- Objects +des.object({ id = "luckstone", x=63, y=04,buc="blessed",spe=0,name="The Heart of Ahriman" }) +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() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster({ id = "Thoth Amon", x=63, y=04, peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ class = "O", peaceful=0 }) +des.monster({ class = "O", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ class = "T", peaceful=0 }) +des.wallify() + diff --git a/src/NetHack_3.7/dat/Bar-loca.lua b/src/NetHack_3.7/dat/Bar-loca.lua new file mode 100644 index 0000000..a11a896 --- /dev/null +++ b/src/NetHack_3.7/dat/Bar-loca.lua @@ -0,0 +1,107 @@ +-- NetHack Barbarian Bar-loca.lua $NHDT-Date: 1652196000 2022/05/10 15:20:00 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor") + +des.map([[ +..........PPP......................................... +...........PP.......................................... ....... +..........PP...........-----..........------------------ .......... +...........PP..........+...|..........|....S...........|.. ............ +..........PPP..........|...|..........|-----...........|... ............. +...........PPP.........-----..........+....+...........|... ............. +..........PPPPPPPPP...................+....+...........S................. +........PPPPPPPPPPPPP.........-----...|-----...........|................ +......PPPPPPPPPPPPPP..P.......+...|...|....S...........| ... +.....PPPPPPP......P..PPPP.....|...|...------------------.. ... +....PPPPPPP.........PPPPPP....-----........................ ........ +...PPPPPPP..........PPPPPPP.................................. .......... +....PPPPPPP........PPPPPPP.................................... .......... +.....PPPPP........PPPPPPP.........-----........................ ........ +......PPP..PPPPPPPPPPPP...........+...|......................... ..... +..........PPPPPPPPPPP.............|...|......................... .... +..........PPPPPPPPP...............-----......................... . +..............PPP................................................. +...............PP.................................................... +................PPP................................................... +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.region(selection.area(24,03,26,04), "unlit") +des.region(selection.area(31,08,33,09), "unlit") +des.region(selection.area(35,14,37,15), "unlit") +des.region(selection.area(39,03,54,08), "lit") +des.region(selection.area(56,00,75,08), "unlit") +des.region(selection.area(64,09,75,16), "unlit") +-- Doors +des.door("open",23,03) +des.door("open",30,08) +des.door("open",34,14) +des.door("locked",38,05) +des.door("locked",38,06) +des.door("closed",43,03) +des.door("closed",43,05) +des.door("closed",43,06) +des.door("closed",43,08) +des.door("locked",55,06) +-- Stairs +des.stair("up", 05,02) +des.stair("down", 70,13) +-- Objects +des.object({ x = 42, y = 03 }) +des.object({ x = 42, y = 03 }) +des.object({ x = 42, y = 03 }) +des.object({ x = 41, y = 03 }) +des.object({ x = 41, y = 03 }) +des.object({ x = 41, y = 03 }) +des.object({ x = 41, y = 03 }) +des.object({ x = 41, y = 08 }) +des.object({ x = 41, y = 08 }) +des.object({ x = 42, y = 08 }) +des.object({ x = 42, y = 08 }) +des.object({ x = 42, y = 08 }) +des.object({ x = 71, y = 13 }) +des.object({ x = 71, y = 13 }) +des.object({ x = 71, y = 13 }) +-- Random traps +des.trap("spiked pit",10,13) +des.trap("spiked pit",21,07) +des.trap("spiked pit",67,08) +des.trap("spiked pit",68,09) +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster({ id = "ogre", x=12, y=09, peaceful=0 }) +des.monster({ id = "ogre", x=18, y=11, peaceful=0 }) +des.monster({ id = "ogre", x=45, y=05, peaceful=0 }) +des.monster({ id = "ogre", x=45, y=06, peaceful=0 }) +des.monster({ id = "ogre", x=47, y=05, peaceful=0 }) +des.monster({ id = "ogre", x=46, y=05, peaceful=0 }) +des.monster({ id = "ogre", x=56, y=03, peaceful=0 }) +des.monster({ id = "ogre", x=56, y=04, peaceful=0 }) +des.monster({ id = "ogre", x=56, y=05, peaceful=0 }) +des.monster({ id = "ogre", x=56, y=06, peaceful=0 }) +des.monster({ id = "ogre", x=57, y=03, peaceful=0 }) +des.monster({ id = "ogre", x=57, y=04, peaceful=0 }) +des.monster({ id = "ogre", x=57, y=05, peaceful=0 }) +des.monster({ id = "ogre", x=57, y=06, peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ id = "ogre", peaceful=0 }) +des.monster({ class = "O", peaceful=0 }) +des.monster({ class = "T", peaceful=0 }) +des.monster({ id = "rock troll", x=46, y=06, peaceful=0 }) +des.monster({ id = "rock troll", x=47, y=06, peaceful=0 }) +des.monster({ id = "rock troll", x=56, y=07, peaceful=0 }) +des.monster({ id = "rock troll", x=57, y=07, peaceful=0 }) +des.monster({ id = "rock troll", x=70, y=13, peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ id = "rock troll", peaceful=0 }) +des.monster({ class = "T", peaceful=0 }) + diff --git a/src/NetHack_3.7/dat/Bar-strt.lua b/src/NetHack_3.7/dat/Bar-strt.lua new file mode 100644 index 0000000..28cacf0 --- /dev/null +++ b/src/NetHack_3.7/dat/Bar-strt.lua @@ -0,0 +1,99 @@ +-- NetHack Barbarian Bar-strt.lua $NHDT-Date: 1652196001 2022/05/10 15:20:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 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, Pelias, +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor") + +des.map([[ +..................................PP........................................ +...................................PP....................................... +...................................PP....................................... +....................................PP...................................... +........--------------......-----....PPP.................................... +........|...S........|......+...|...PPP..................................... +........|----........|......|...|....PP..................................... +........|.\..........+......-----........................................... +........|----........|...............PP..................................... +........|...S........|...-----.......PPP.................................... +........--------------...+...|......PPPPP................................... +.........................|...|.......PPP.................................... +...-----......-----......-----........PP.................................... +...|...+......|...+..--+--.............PP................................... +...|...|......|...|..|...|..............PP.................................. +...-----......-----..|...|.............PPPP................................. +.....................-----............PP..PP................................ +.....................................PP...PP................................ +....................................PP...PP................................. +....................................PP....PP................................ +]]); + +-- the forest beyond the river +des.replace_terrain({ region={37,00, 59,19}, fromterrain=".", toterrain="T", chance=5 }) +des.replace_terrain({ region={60,00, 64,19}, fromterrain=".", toterrain="T", chance=10 }) +des.replace_terrain({ region={65,00, 75,19}, fromterrain=".", toterrain="T", chance=20 }) +-- guarantee a path and free spot for the portal +des.terrain(selection.randline(selection.new(), 37,7, 62,02, 7), ".") +des.terrain({62,02}, ".") + +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.region(selection.area(09,05,11,05), "unlit") +des.region(selection.area(09,07,11,07), "lit") +des.region(selection.area(09,09,11,09), "unlit") +des.region(selection.area(13,05,20,09), "lit") +des.region(selection.area(29,05,31,06), "lit") +des.region(selection.area(26,10,28,11), "lit") +des.region(selection.area(04,13,06,14), "lit") +des.region(selection.area(15,13,17,14), "lit") +des.region(selection.area(22,14,24,15), "lit") +-- Stairs +des.stair("down", 09,09) +-- Portal arrival point +des.levregion({ region = {62,02,62,02}, type="branch" }) +-- Doors +des.door("locked",12,05) +des.door("locked",12,09) +des.door("closed",21,07) +des.door("open",07,13) +des.door("open",18,13) +des.door("open",23,13) +des.door("open",25,10) +des.door("open",28,05) +-- Elder +des.monster({ id = "Pelias", coord = {10, 07}, inventory = function() + des.object({ id = "runesword", spe = 5 }); + des.object({ id = "chain mail", spe = 5 }); +end }) +-- The treasure of Pelias +des.object("chest", 09, 05) +-- chieftain guards for the audience chamber +des.monster("chieftain", 10, 05) +des.monster("chieftain", 10, 09) +des.monster("chieftain", 11, 05) +des.monster("chieftain", 11, 09) +des.monster("chieftain", 14, 05) +des.monster("chieftain", 14, 09) +des.monster("chieftain", 16, 05) +des.monster("chieftain", 16, 09) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- One trap to keep the ogres at bay. +des.trap("spiked pit",37,07) +-- Eels in the river +des.monster("giant eel", 36, 01) +des.monster("giant eel", 37, 09) +des.monster("giant eel", 39, 15) +-- Monsters on siege duty. +local ogrelocs = selection.floodfill(37,7) & selection.area(40,03, 45,20) +for i = 0, 11 do + des.monster({ id = "ogre", coord = ogrelocs:rndcoord(1), peaceful = 0 }) +end diff --git a/src/NetHack_3.7/dat/Cav-fila.lua b/src/NetHack_3.7/dat/Cav-fila.lua new file mode 100644 index 0000000..d1b0b20 --- /dev/null +++ b/src/NetHack_3.7/dat/Cav-fila.lua @@ -0,0 +1,35 @@ +-- NetHack Caveman Cav-fila.lua $NHDT-Date: 1652196001 2022/05/10 15:20:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style = "mines", fg = ".", bg = " ", smoothed=true, joined=true, walled=true }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.trap() +des.trap() +des.trap() +des.trap() +-- +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ class = "h", peaceful=0 }) +des.monster({ id = "hill giant", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Cav-filb.lua b/src/NetHack_3.7/dat/Cav-filb.lua new file mode 100644 index 0000000..a18fed7 --- /dev/null +++ b/src/NetHack_3.7/dat/Cav-filb.lua @@ -0,0 +1,41 @@ +-- NetHack Caveman Cav-filb.lua $NHDT-Date: 1652196001 2022/05/10 15:20:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style = "mines", fg = ".", bg = " ", smoothed=true, joined=true, walled=true }) + +-- +des.stair("up") +des.stair("down") +-- +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.trap() +des.trap() +des.trap() +des.trap() +-- +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ class = "h", peaceful=0 }) +des.monster({ class = "h", peaceful=0 }) +des.monster({ id = "hill giant", peaceful=0 }) +des.monster({ id = "hill giant", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Cav-goal.lua b/src/NetHack_3.7/dat/Cav-goal.lua new file mode 100644 index 0000000..871579f --- /dev/null +++ b/src/NetHack_3.7/dat/Cav-goal.lua @@ -0,0 +1,59 @@ +-- NetHack Caveman Cav-goal.lua $NHDT-Date: 1652196002 2022/05/10 15:20:02 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.map([[ + + ..................... + ....................... + ......................... + ........................... + ............................. + ............................... + ................................. + ................................... + ..................................... + ....................................... + ..................................... + ................................... + ................................. + ............................... + ............................. + ........................... + ......................... + ....................... + +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +-- Stairs +des.stair("up") +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Objects +des.object({ id = "mace", x=23, y=10, buc="blessed", spe=0, name="The Sceptre of Might" }) +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() +-- monsters. +des.monster({ id = "Chromatic Dragon", x=23, y=10, asleep=1 }) +des.monster("shrieker", 26, 13) +des.monster("shrieker", 25, 8) +des.monster("shrieker", 45, 11) +des.wallify() diff --git a/src/NetHack_3.7/dat/Cav-loca.lua b/src/NetHack_3.7/dat/Cav-loca.lua new file mode 100644 index 0000000..d779d60 --- /dev/null +++ b/src/NetHack_3.7/dat/Cav-loca.lua @@ -0,0 +1,101 @@ +-- NetHack Caveman Cav-loca.lua $NHDT-Date: 1652196002 2022/05/10 15:20:02 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor") + +des.map([[ + + ............. ........... + ............... ............. + ............. ............... .......... + ........... ............. ............... + ... ... .................. + ... .......... ... .................. + ... ............ BBB................... + ... .......... ...................... + ..... .. .....B........................ + .... ............... . ........B.......................... + ...... .. .............S.............. .................. + .... .. ........... ............... + .. ... .................... + .... BB................... + .. .. .. ............... + .. ....... .... ..... .... .. ....... S + ............ ....... .. ....... ..... ... .... + ....... ..... ...... ....... + +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "unlit") +des.region({ region={52,06, 73,15}, lit=1, type="ordinary", irregular=1 }) +-- Doors +des.door("locked",28,11) +-- Stairs +des.stair("up", 04,03) +des.stair("down", 73,10) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- 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() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster({ id = "bugbear", x=02, y=10, peaceful=0 }) +des.monster({ id = "bugbear", x=03, y=11, peaceful=0 }) +des.monster({ id = "bugbear", x=04, y=12, peaceful=0 }) +des.monster({ id = "bugbear", x=02, y=11, peaceful=0 }) +des.monster({ id = "bugbear", x=16, y=16, peaceful=0 }) +des.monster({ id = "bugbear", x=17, y=17, peaceful=0 }) +des.monster({ id = "bugbear", x=18, y=18, peaceful=0 }) +des.monster({ id = "bugbear", x=19, y=16, peaceful=0 }) +des.monster({ id = "bugbear", x=30, y=06, peaceful=0 }) +des.monster({ id = "bugbear", x=31, y=07, peaceful=0 }) +des.monster({ id = "bugbear", x=32, y=08, peaceful=0 }) +des.monster({ id = "bugbear", x=33, y=06, peaceful=0 }) +des.monster({ id = "bugbear", x=34, y=07, peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ id = "bugbear", peaceful=0 }) +des.monster({ class = "h", peaceful=0 }) +des.monster({ class = "H", peaceful=0 }) +des.monster({ id = "hill giant", x=03, y=12, peaceful=0 }) +des.monster({ id = "hill giant", x=20, y=17, peaceful=0 }) +des.monster({ id = "hill giant", x=35, y=08, peaceful=0 }) +des.monster({ id = "hill giant", peaceful=0 }) +des.monster({ id = "hill giant", peaceful=0 }) +des.monster({ id = "hill giant", peaceful=0 }) +des.monster({ id = "hill giant", peaceful=0 }) +des.monster({ class = "H", peaceful=0 }) +des.wallify() + +-- +-- The "goal" level for the quest. +-- +-- Here you meet Tiamat your nemesis monster. You have to +-- defeat Tiamat in combat to gain the artifact you have +-- been assigned to retrieve. +-- diff --git a/src/NetHack_3.7/dat/Cav-strt.lua b/src/NetHack_3.7/dat/Cav-strt.lua new file mode 100644 index 0000000..224ed74 --- /dev/null +++ b/src/NetHack_3.7/dat/Cav-strt.lua @@ -0,0 +1,94 @@ +-- NetHack Caveman Cav-strt.lua $NHDT-Date: 1652196002 2022/05/10 15:20:02 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 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, Shaman Karnov +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor") + +des.map([[ + + ...... .......................... ... .... ...... + ...... .......................... ........ .... ..... + ..BB ............................. ......... .... .. + .. ...................... ....... .. .... .. + .. .................... .. ....... .. ... + .. S BB ..... ....... .... .... + .. ... . .. ........ .. .. .. ... + .. ...... .. ............ .. ... + . .... .. ........ .. ........... + ... .. .. ............. ................... + ..... ..... ............................... ........... + .....B................ ... ... + ..... . .......... .... . ... .......... ... + ... .. ............. .. ................... .... + BB .. ......... BB ... .......... .. ... ... + ...... ..... B ........ .. .. .... ... + .......... .......... ..... ... ..... ........ + .. ... . ..... .... .. ... .. + +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "unlit") +des.region({ region={13,01, 40,05}, lit=1, type="temple", filled=1, irregular=1 }) +-- The occupied rooms. +des.region({ region={02,01, 08,03}, lit=1, type="ordinary", irregular=1 }) +des.region({ region={01,11, 06,14}, lit=1, type="ordinary", irregular=1 }) +des.region({ region={13,08, 18,10}, lit=1, type="ordinary", irregular=1 }) +des.region({ region={05,17, 14,18}, lit=1, type="ordinary", irregular=1 }) +des.region({ region={17,16, 23,18}, lit=1, type="ordinary", irregular=1 }) +des.region({ region={35,16, 44,18}, lit=1, type="ordinary", irregular=1 }) +-- Stairs +des.stair("down", 02,03) +-- Portal arrival point +des.levregion({ region = {71,09,71,09}, type="branch" }) +-- Doors +des.door("locked",19,06) +-- The temple altar (this will force a priest(ess) to be created) +des.altar({ x=36,y=02, align="coaligned", type="shrine" }) +-- Shaman Karnov +des.monster({ id = "Shaman Karnov", coord = {35, 02}, inventory = function() + des.object({ id = "leather armor", spe = 5 }); + des.object({ id = "club", spe = 5 }); +end }) +-- The treasure of Shaman Karnov +des.object("chest", 34, 02) +-- neanderthal guards for the audience chamber +des.monster("neanderthal", 20, 03) +des.monster("neanderthal", 20, 02) +des.monster("neanderthal", 20, 01) +des.monster("neanderthal", 21, 03) +des.monster("neanderthal", 21, 02) +des.monster("neanderthal", 21, 01) +des.monster("neanderthal", 22, 01) +des.monster("neanderthal", 26, 09) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Random traps +des.trap("pit",47,11) +des.trap("pit",57,10) +des.trap() +des.trap() +des.trap() +des.trap() +-- Monsters on siege duty (in the outer caves). +des.monster({ id ="bugbear", x=47, y=02, peaceful=0 }) +des.monster({ id ="bugbear", x=48, y=03, peaceful=0 }) +des.monster({ id ="bugbear", x=49, y=04, peaceful=0 }) +des.monster({ id ="bugbear", x=67, y=03, peaceful=0 }) +des.monster({ id ="bugbear", x=69, y=04, peaceful=0 }) +des.monster({ id ="bugbear", x=51, y=13, peaceful=0 }) +des.monster({ id ="bugbear", x=53, y=14, peaceful=0 }) +des.monster({ id ="bugbear", x=55, y=15, peaceful=0 }) +des.monster({ id ="bugbear", x=63, y=10, peaceful=0 }) +des.monster({ id ="bugbear", x=65, y=09, peaceful=0 }) +des.monster({ id ="bugbear", x=67, y=10, peaceful=0 }) +des.monster({ id ="bugbear", x=69, y=11, peaceful=0 }) +des.wallify() diff --git a/src/NetHack_3.7/dat/GENFILES b/src/NetHack_3.7/dat/GENFILES new file mode 100644 index 0000000..2613ad9 --- /dev/null +++ b/src/NetHack_3.7/dat/GENFILES @@ -0,0 +1,46 @@ +#!/usr/bin/perl +# NetHack 3.7 GENFILES $NHDT-Date: 1596498242 2020/08/03 23:44:02 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +# Copyright (c) 2018 by Kenneth Lorber +# NetHack may be freely redistributed. See license for details. + +# 2 sections: +# *.lev entries are generated by reading *.des +# hardcoded entries are in __DATA__ + +($dir = $0) =~ s!^(.*/)(.*)!$1!; + +#print "T (files generated by lev_comp at playground creation time)\n"; +# +#foreach $des (<$dir*.des>){ +# open IN, "<", $des or warn("Can't open $des: $!"); +# while(){ +# m/^(MAZE|LEVEL):\s*"(.*?)"/ && do { +# print "F $2.lev\n"; +# }; +# } +# close IN; +#} +while(){ + print; +} + +__DATA__ +T (tile files optionally generated for X ports at playground creation time) +F pet_mark.xbm +F rip.xpm +F x11tiles +T (files generated for Qt interface on macOS) +F nethack.icns +F Info.plist +T (files generated for windows at compile time) +F porthelp +F dlb.lst +T (files generated for windows tty at compile time) +F ttyoptions +T (files generated for windows gui at compile time) +F guioptions +T (files generated by makedefs at playground creation time) +F data +F options +F oracles +F rumors diff --git a/src/NetHack_3.7/dat/Hea-fila.lua b/src/NetHack_3.7/dat/Hea-fila.lua new file mode 100644 index 0000000..7fa038d --- /dev/null +++ b/src/NetHack_3.7/dat/Hea-fila.lua @@ -0,0 +1,42 @@ +-- NetHack Healer Hea-fila.lua $NHDT-Date: 1652196003 2022/05/10 15:20:03 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991, 1993 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = "P" }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg="P", smoothed=false, joined=true, lit=1, walled=false }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.monster("rabid rat") +des.monster({ class = "r", peaceful=0 }) +des.monster({ class = "r", peaceful=0 }) +des.monster("giant eel") +des.monster("giant eel") +des.monster("electric eel") +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +-- +des.trap() +des.trap() +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Hea-filb.lua b/src/NetHack_3.7/dat/Hea-filb.lua new file mode 100644 index 0000000..7784023 --- /dev/null +++ b/src/NetHack_3.7/dat/Hea-filb.lua @@ -0,0 +1,50 @@ +-- NetHack Healer Hea-filb.lua $NHDT-Date: 1652196003 2022/05/10 15:20:03 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991, 1993 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = "P" }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg="P", smoothed=false, joined=true, lit=1, walled=false }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.monster("rabid rat") +des.monster("rabid rat") +des.monster({ class = "r", peaceful=0 }) +des.monster({ class = "r", peaceful=0 }) +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("electric eel") +des.monster("electric eel") +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +-- +des.trap() +des.trap() +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Hea-goal.lua b/src/NetHack_3.7/dat/Hea-goal.lua new file mode 100644 index 0000000..0499a12 --- /dev/null +++ b/src/NetHack_3.7/dat/Hea-goal.lua @@ -0,0 +1,90 @@ +-- NetHack Healer Hea-goal.lua $NHDT-Date: 1652196003 2022/05/10 15:20:03 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991, 1993 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = "P" }); + +des.level_flags("mazelevel"); + +-- +des.level_init({ style="mines", fg=".", bg="P", smoothed=false, joined=true, lit=1, walled=false }) + +des.map([[ +.P....................................PP. +PP.......PPPPPPP....PPPPPPP....PPPP...PP. +...PPPPPPP....PPPPPPP.....PPPPPP..PPP...P +...PP..............................PPP... +..PP..............................PP..... +..PP..............................PPP.... +..PPP..............................PP.... +.PPP..............................PPPP... +...PP............................PPP...PP +..PPPP...PPPPP..PPPP...PPPPP.....PP...PP. +P....PPPPP...PPPP..PPPPP...PPPPPPP...PP.. +PPP..................................PPP. +]]); +-- Dungeon Description +des.region(selection.area(00,00,40,11), "lit") +-- Stairs +des.stair("up", 39,10) +-- Non diggable walls +des.non_diggable(selection.area(00,00,40,11)) +-- Objects +des.object({ id = "quarterstaff", x=20, y=06, buc="blessed", spe=0, name="The Staff of Aesculapius" }) +des.object("wand of lightning", 20, 06) +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() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster({ id = "Cyclops", x=20, y=06, peaceful=0 }) +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster({ class = "r", peaceful=0 }) +des.monster({ class = "r", peaceful=0 }) +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("electric eel") +des.monster("electric eel") +des.monster("shark") +des.monster("shark") +des.monster({ class = ";", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) + diff --git a/src/NetHack_3.7/dat/Hea-loca.lua b/src/NetHack_3.7/dat/Hea-loca.lua new file mode 100644 index 0000000..a05020f --- /dev/null +++ b/src/NetHack_3.7/dat/Hea-loca.lua @@ -0,0 +1,97 @@ +-- NetHack Healer Hea-loca.lua $NHDT-Date: 1652196004 2022/05/10 15:20:04 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991, 1993 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor"); +-- +des.level_init({ style="mines", fg=".", bg="P", smoothed=true ,joined=true, lit=1, walled=false }) + +des.map([[ +PPPPPPPPPPPPP.......PPPPPPPPPPP +PPPPPPPP...............PPPPPPPP +PPPP.....-------------...PPPPPP +PPPPP....|.S.........|....PPPPP +PPP......+.|.........|...PPPPPP +PPP......+.|.........|..PPPPPPP +PPPP.....|.S.........|..PPPPPPP +PPPPP....-------------....PPPPP +PPPPPPPP...............PPPPPPPP +PPPPPPPPPPP........PPPPPPPPPPPP +]]); +-- Dungeon Description +des.region(selection.area(00,00,30,09), "lit") +des.region({ region={12,03, 20,06}, lit=1, type="temple", filled=1 }) +-- Doors +des.door("closed",09,04) +des.door("closed",09,05) +des.door("locked",11,03) +des.door("locked",11,06) +-- Stairs +des.stair("up", 04,04) +des.stair("down", 20,06) +-- Non diggable walls +des.non_diggable(selection.area(11,02,21,07)) +-- Altar in the temple. +des.altar({ x=13,y=05, align="chaos", type="shrine" }) +-- 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() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster({ class = "r", peaceful=0 }) +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("giant eel") +des.monster("electric eel") +des.monster("electric eel") +des.monster("kraken") +des.monster("shark") +des.monster("shark") +des.monster({ class = ";", peaceful=0 }) +des.monster({ class = ";", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Hea-strt.lua b/src/NetHack_3.7/dat/Hea-strt.lua new file mode 100644 index 0000000..9e9e352 --- /dev/null +++ b/src/NetHack_3.7/dat/Hea-strt.lua @@ -0,0 +1,109 @@ +-- NetHack Healer Hea-strt.lua $NHDT-Date: 1652196004 2022/05/10 15:20:04 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991, 1993 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +-- +-- The "start" level for the quest. +-- +-- Here you meet your (besieged) class leader, Hippocrates +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor") + +des.map([[ +PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP +PPPP........PPPP.....PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP.P..PPPPP......PPPPPPPP +PPP..........PPPP...PPPPP.........................PPPP..PPPPP........PPPPPPP +PP............PPPPPPPP..............................PPP...PPPP......PPPPPPPP +P.....PPPPPPPPPPPPPPP................................PPPPPPPPPPPPPPPPPPPPPPP +PPPP....PPPPPPPPPPPP...................................PPPPP.PPPPPPPPPPPPPPP +PPPP........PPPPP.........-----------------------........PP...PPPPPPP.....PP +PPP............PPPPP....--|.|......S..........S.|--.....PPPP.PPPPPPP.......P +PPPP..........PPPPP.....|.S.|......-----------|S|.|......PPPPPP.PPP.......PP +PPPPPP......PPPPPP......|.|.|......|...|......|.|.|.....PPPPPP...PP.......PP +PPPPPPPPPPPPPPPPPPP.....+.|.|......S.\.S......|.|.+......PPPPPP.PPPP.......P +PPP...PPPPP...PPPP......|.|.|......|...|......|.|.|.......PPPPPPPPPPP.....PP +PP.....PPP.....PPP......|.|S|-----------......|.S.|......PPPPPPPPPPPPPPPPPPP +PPP..PPPPP...PPPP.......--|.S..........S......|.|--.....PPPPPPPPP....PPPPPPP +PPPPPPPPPPPPPPPP..........-----------------------..........PPPPP..........PP +PPPPPPPPPPPPPPPPP........................................PPPPPP............P +PPP.............PPPP...................................PPP..PPPP..........PP +PP...............PPPPP................................PPPP...PPPP........PPP +PPP.............PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP....PPPPPP +PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP +]]); + +des.replace_terrain({ region={01,01, 74,18}, fromterrain="P", toterrain=".", chance=10 }) + +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +-- Stairs +des.stair("down", 37,9) +-- Portal arrival point +des.levregion({ region = {04,12,04,12}, type="branch" }) +-- altar for the Temple +des.altar({ x=32,y=09,align="neutral",type="altar" }) +-- Doors +des.door("locked",24,10) +des.door("closed",26,08) +des.door("closed",27,12) +des.door("locked",28,13) +des.door("closed",35,07) +des.door("locked",35,10) +des.door("locked",39,10) +des.door("closed",39,13) +des.door("locked",46,07) +des.door("closed",47,08) +des.door("closed",48,12) +des.door("locked",50,10) +-- Hippocrates +des.monster({ id = "Hippocrates", coord = {37, 10}, inventory = function() + des.object({ id = "silver dagger", spe = 5 }); +end }) +-- The treasure of Hippocrates +des.object("chest", 37, 10) +-- intern guards for the audience chamber +des.monster("attendant", 29, 08) +des.monster("attendant", 29, 09) +des.monster("attendant", 29, 10) +des.monster("attendant", 29, 11) +des.monster("attendant", 40, 09) +des.monster("attendant", 40, 10) +des.monster("attendant", 40, 11) +des.monster("attendant", 40, 13) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Monsters on siege duty. +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("rabid rat") +des.monster("giant eel") +des.monster("shark") +des.monster(";") +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "D", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) +des.monster({ class = "S", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Kni-fila.lua b/src/NetHack_3.7/dat/Kni-fila.lua new file mode 100644 index 0000000..362d067 --- /dev/null +++ b/src/NetHack_3.7/dat/Kni-fila.lua @@ -0,0 +1,35 @@ +-- NetHack Knight Kni-fila.lua $NHDT-Date: 1652196004 2022/05/10 15:20:04 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = "." }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg="P", smoothed=false, joined=true, lit=1, walled=false }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ class = "i", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +-- +des.trap() +des.trap() +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Kni-filb.lua b/src/NetHack_3.7/dat/Kni-filb.lua new file mode 100644 index 0000000..14a414f --- /dev/null +++ b/src/NetHack_3.7/dat/Kni-filb.lua @@ -0,0 +1,40 @@ +-- NetHack Knight Kni-filb.lua $NHDT-Date: 1652196005 2022/05/10 15:20:05 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = "." }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg="P", smoothed=false, joined=true, lit=1, walled=false }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ class = "i", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +-- +des.trap() +des.trap() +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Kni-goal.lua b/src/NetHack_3.7/dat/Kni-goal.lua new file mode 100644 index 0000000..08a8dff --- /dev/null +++ b/src/NetHack_3.7/dat/Kni-goal.lua @@ -0,0 +1,99 @@ +-- NetHack Knight Kni-goal.lua $NHDT-Date: 1652196005 2022/05/10 15:20:05 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.map([[ +....PPPP..PPP.. +.PPPPP...PP.. .......... ................................. +..PPPPP...P.. ........... ................................... +..PPP....... ........... ...................................... +...PPP....... ......... ............... ..................... +........... ............ ............ ...................... +............ ............. ....... ..................... +.............................. ......................... +............................... .................................. +............................. .................................... +......... ...................................................... +.....PP... ..................................................... +.....PPP.... .................................................... +......PPP.... .............. .................................... +.......PPP.... ............. ..................................... +........PP... ............ ...................................... +...PPP........ .......... .................................. +..PPPPP........ .......... .............................. +....PPPPP...... ......... .......................... +.......PPPP... +]]); +-- Dungeon Description +des.region(selection.area(00,00,14,19), "lit") +des.region(selection.area(15,00,75,19), "unlit") +-- Stairs +des.stair("up", 03,08) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Objects +des.object({ id = "mirror", x=50,y=06, buc="blessed", spe=0, name="The Magic Mirror of Merlin" }) +des.object({ coord = { 33, 01 } }) +des.object({ coord = { 33, 02 } }) +des.object({ coord = { 33, 03 } }) +des.object({ coord = { 33, 04 } }) +des.object({ coord = { 33, 05 } }) +des.object({ coord = { 34, 01 } }) +des.object({ coord = { 34, 02 } }) +des.object({ coord = { 34, 03 } }) +des.object({ coord = { 34, 04 } }) +des.object({ coord = { 34, 05 } }) +des.object({ coord = { 35, 01 } }) +des.object({ coord = { 35, 02 } }) +des.object({ coord = { 35, 03 } }) +des.object({ coord = { 35, 04 } }) +des.object({ coord = { 35, 05 } }) +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- Random traps +des.trap("spiked pit",13,07) +des.trap("spiked pit",12,08) +des.trap("spiked pit",12,09) +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster({ id = "Ixoth", x=50, y=06, peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ class = "i", peaceful=0 }) +des.monster({ class = "i", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ class = "j", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Kni-loca.lua b/src/NetHack_3.7/dat/Kni-loca.lua new file mode 100644 index 0000000..91d557a --- /dev/null +++ b/src/NetHack_3.7/dat/Kni-loca.lua @@ -0,0 +1,137 @@ +-- NetHack Knight Kni-loca.lua $NHDT-Date: 1652196005 2022/05/10 15:20:05 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor") + +des.level_init({ style="mines", fg=".", bg="P", smoothed=false, joined=true, lit=1, walled=false }) + +des.map([[ +xxxxxxxxx......xxxx...........xxxxxxxxxx +xxxxxxx.........xxx.............xxxxxxxx +xxxx..............................xxxxxx +xx.................................xxxxx +....................................xxxx +.......................................x +........................................ +xx...................................xxx +xxxx..............................xxxxxx +xxxxxx..........................xxxxxxxx +xxxxxxxx.........xx..........xxxxxxxxxxx +xxxxxxxxx.......xxxxxx.....xxxxxxxxxxxxx +]]); +-- Dungeon Description +-- The Isle of Glass is a Tor rising out of the swamps surrounding it. +des.region(selection.area(00,00,39,11), "lit") +-- The top area of the Tor is a holy site. +des.region({ region={09,02, 27,09}, lit=1, type="temple", filled=2 }) +-- Stairs +des.stair("up", 38,0) +des.stair("down", 18,05) +-- The altar atop the Tor and its attendant (creating altar makes the priest). +des.altar({ x=17, y=05, align="neutral", type="shrine" }) +-- 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 +-- All of the avenues are guarded by magic except for the East. +-- South +des.trap("magic",08,11) +des.trap("magic",09,11) +des.trap("magic",10,11) +des.trap("magic",11,11) +des.trap("magic",12,11) +des.trap("magic",13,11) +des.trap("magic",14,11) +des.trap("magic",15,11) +des.trap("magic",16,11) +des.trap("magic",20,11) +des.trap("magic",21,11) +des.trap("magic",22,11) +des.trap("magic",23,11) +des.trap("magic",24,11) +des.trap("magic",25,11) +des.trap("magic",26,11) +des.trap("magic",27,11) +des.trap("magic",28,11) +-- West +des.trap("magic",00,03) +des.trap("magic",00,04) +des.trap("magic",00,05) +des.trap("magic",00,06) +-- North +des.trap("magic",06,00) +des.trap("magic",07,00) +des.trap("magic",08,00) +des.trap("magic",09,00) +des.trap("magic",10,00) +des.trap("magic",11,00) +des.trap("magic",12,00) +des.trap("magic",13,00) +des.trap("magic",14,00) +des.trap("magic",19,00) +des.trap("magic",20,00) +des.trap("magic",21,00) +des.trap("magic",22,00) +des.trap("magic",23,00) +des.trap("magic",24,00) +des.trap("magic",25,00) +des.trap("magic",26,00) +des.trap("magic",27,00) +des.trap("magic",28,00) +des.trap("magic",29,00) +des.trap("magic",30,00) +des.trap("magic",31,00) +des.trap("magic",32,00) +-- Even so, there are magic "sinkholes" around. +des.trap("anti magic") +des.trap("anti magic") +des.trap("anti magic") +des.trap("anti magic") +des.trap("anti magic") +des.trap("anti magic") +des.trap("anti magic") +-- Random monsters. +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ id = "quasit", peaceful=0 }) +des.monster({ class = "i", peaceful=0 }) +des.monster({ class = "j", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ id = "ochre jelly", peaceful=0 }) +des.monster({ class = "j", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Kni-strt.lua b/src/NetHack_3.7/dat/Kni-strt.lua new file mode 100644 index 0000000..9873fb4 --- /dev/null +++ b/src/NetHack_3.7/dat/Kni-strt.lua @@ -0,0 +1,109 @@ +-- NetHack Knight Kni-strt.lua $NHDT-Date: 1652196006 2022/05/10 15:20:06 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 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, King Arthur +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = "." }); + +des.level_flags("mazelevel", "noteleport", "hardfloor") +-- This is a kludge to init the level as a lit field. +des.level_init({ style="mines", fg=".", bg=".", smoothed=false, joined=false, lit=1, walled=false }) + +des.map([[ +.................................................. +.-----......................................-----. +.|...|......................................|...|. +.--|+-------------------++-------------------+|--. +...|...................+..+...................|... +...|.|-----------------|++|-----------------|.|... +...|.|.................|..|.........|.......|.|... +...|.|...\.............+..+.........|.......|.|... +...|.|.................+..+.........+.......|.|... +...|.|.................|..|.........|.......|.|... +...|.|--------------------------------------|.|... +...|..........................................|... +.--|+----------------------------------------+|--. +.|...|......................................|...|. +.-----......................................-----. +.................................................. +]]); +-- Dungeon Description +des.region(selection.area(00,00,49,15), "lit") +des.region(selection.area(04,04,45,11), "unlit") +des.region({ region={06,06,22,09}, lit=1, type="throne", filled=2 }) +des.region(selection.area(27,06,43,09), "lit") +-- Portal arrival point +des.levregion({ region = {20,14,20,14}, type="branch" }) +-- Stairs +des.stair("down", 40,7) +-- Doors +-- Outside Doors +des.door("locked",24,03) +des.door("locked",25,03) +-- Inside Doors +des.door("closed",23,04) +des.door("closed",26,04) +des.door("locked",24,05) +des.door("locked",25,05) +des.door("closed",23,07) +des.door("closed",26,07) +des.door("closed",23,08) +des.door("closed",26,08) +des.door("closed",36,08) +-- Watchroom Doors +des.door("closed",04,03) +des.door("closed",45,03) +des.door("closed",04,12) +des.door("closed",45,12) +-- King Arthur +des.monster({ id = "King Arthur", coord = {09, 07}, inventory = function() + des.object({ id = "long sword", spe = 4, buc = "blessed", name = "Excalibur" }); + des.object({ id = "plate mail", spe = 4 }); +end }) +-- The treasure of King Arthur +des.object("chest", 09, 07) +-- knight guards for the watchrooms +des.monster({ id = "knight", x=04, y=02, peaceful = 1 }) +des.monster({ id = "knight", x=04, y=13, peaceful = 1 }) +des.monster({ id = "knight", x=45, y=02, peaceful = 1 }) +des.monster({ id = "knight", x=45, y=13, peaceful = 1 }) +-- page guards for the audience chamber +des.monster("page", 16, 06) +des.monster("page", 18, 06) +des.monster("page", 20, 06) +des.monster("page", 16, 09) +des.monster("page", 18, 09) +des.monster("page", 20, 09) +-- Non diggable walls +des.non_diggable(selection.area(00,00,49,15)) +-- Random traps +des.trap("sleep gas",24,04) +des.trap("sleep gas",25,04) +des.trap() +des.trap() +des.trap() +des.trap() +-- Monsters on siege duty. +des.monster({ id = "quasit", x=14, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=16, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=18, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=20, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=22, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=24, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=26, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=28, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=30, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=32, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=34, y=00, peaceful=0 }) +des.monster({ id = "quasit", x=36, y=00, peaceful=0 }) + +-- Some warhorses +for i = 1, 2 + nh.rn2(3) do + des.monster({ id = "warhorse", peaceful = 1, inventory = function() if percent(50) then des.object("saddle"); end end }); +end diff --git a/src/NetHack_3.7/dat/Mon-fila.lua b/src/NetHack_3.7/dat/Mon-fila.lua new file mode 100644 index 0000000..c62801a --- /dev/null +++ b/src/NetHack_3.7/dat/Mon-fila.lua @@ -0,0 +1,61 @@ +-- NetHack Monk Mon-fila.lua $NHDT-Date: 1652196006 2022/05/10 15:20:06 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- + +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster({ class = "E", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.monster({ class = "E", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.object() + des.monster("xorn") + des.monster("earth elemental") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.stair("down") + des.object() + des.trap() + des.monster({ class = "E", peaceful=0 }) + des.monster("earth elemental") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.monster({ class = "X", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.monster("earth elemental") + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Mon-filb.lua b/src/NetHack_3.7/dat/Mon-filb.lua new file mode 100644 index 0000000..98e98f1 --- /dev/null +++ b/src/NetHack_3.7/dat/Mon-filb.lua @@ -0,0 +1,60 @@ +-- NetHack Monk Mon-filb.lua $NHDT-Date: 1652196006 2022/05/10 15:20:06 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- + +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster({ class = "X", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.monster({ class = "X", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.object() + des.monster({ class = "E", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.stair("down") + des.object() + des.trap() + des.monster({ class = "E", peaceful=0 }) + des.monster("earth elemental") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.monster({ class = "X", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.monster("earth elemental") + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Mon-goal.lua b/src/NetHack_3.7/dat/Mon-goal.lua new file mode 100644 index 0000000..c19bfef --- /dev/null +++ b/src/NetHack_3.7/dat/Mon-goal.lua @@ -0,0 +1,75 @@ +-- NetHack Monk Mon-goal.lua $NHDT-Date: 1652196007 2022/05/10 15:20:07 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +-- des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.level_init({ style="mines", fg="L", bg=".", smoothed=false, joined=false, lit=0, walled=false }) + +des.map([[ +xxxxxx..xxxxxx...xxxxxxxxx +xxxx......xx......xxxxxxxx +xx.xx.............xxxxxxxx +x....................xxxxx +......................xxxx +......................xxxx +xx........................ +xxx......................x +xxx................xxxxxxx +xxxx.....x.xx.......xxxxxx +xxxxx...xxxxxx....xxxxxxxx +]]); +-- Dungeon Description +local place = { {14,04},{13,07} } +local placeidx = math.random(1, #place); + +des.region(selection.area(00,00,25,10), "unlit") +-- Stairs +des.stair("up", 20,05) +-- Objects +des.object({ id = "lenses", coord = place[placeidx], buc="blessed", spe=0, name="The Eyes of the Overworld" }) +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("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap() +des.trap() +-- Random monsters. +des.monster("Master Kaen",place[placeidx]) +des.altar({ coord = place[placeidx], align="noalign", type="altar" }) +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") diff --git a/src/NetHack_3.7/dat/Mon-loca.lua b/src/NetHack_3.7/dat/Mon-loca.lua new file mode 100644 index 0000000..598b364 --- /dev/null +++ b/src/NetHack_3.7/dat/Mon-loca.lua @@ -0,0 +1,98 @@ +-- NetHack Monk Mon-loca.lua $NHDT-Date: 1652196007 2022/05/10 15:20:07 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +-- 1 2 3 4 5 6 7 +--123456789012345678901234567890123456789012345678901234567890123456789012345 +des.map([[ + ---------------------------------------------------- -------- + ---.................................................- --.....| + ---...--------........------........................--- ---...| + ---.....- --.......- ----..................---- --.-- + ---.....---- --------- --..................-- --..| + ---...----- ----.----.....----.....--- --..|| +----..---- -----..--- |...--- |.......--- --...| +|...--- ----....--- |.--- |.........-- --...|| +|...- ----.....--- ---- |..........---....| +|...---- ----......--- | |...|.......-....|| +|......----- ---.........- | -----...|............| +|..........----- ----...........--- -------......||...........|| +|..............-----................--- |............|||..........| +|-S----...............................--- |...........|| |.........|| +|.....|..............------.............-----..........|| ||........| +|.....|.............-- ---.........................|| |.......|| +|.....|.............- ---.....................--| ||......| +|---S--------.......---- --.................---- |.....|| +|...........|..........--------..............----- ||....| +|...........|............................----- |....| +------------------------------------------ ------ +]]); +-- Random Monsters + +-- Dungeon Description +des.region(selection.area(00,00,75,20), "lit") +-- Stairs +des.stair("up") +des.stair("down") +-- 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() +-- since vegetarian monks shouldn't eat giant corpses, give a chance for +-- Str boost that isn't throttled by exercise restrictions; +-- make a modest effort (Elbereth only) to prevent xorns from eating the tins +local tinplace = selection.negate():filter_mapchar('.') +local tinloc = tinplace:rndcoord(0) +des.object({ id="tin", coord=tinloc, quantity=2, buc="blessed", + montype="spinach" }) +des.engraving({ coord=tinloc, type="burn", text="Elbereth" }) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("earth elemental") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") +des.monster("xorn") diff --git a/src/NetHack_3.7/dat/Mon-strt.lua b/src/NetHack_3.7/dat/Mon-strt.lua new file mode 100644 index 0000000..ffbfec4 --- /dev/null +++ b/src/NetHack_3.7/dat/Mon-strt.lua @@ -0,0 +1,106 @@ +-- 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" }) diff --git a/src/NetHack_3.7/dat/Pri-fila.lua b/src/NetHack_3.7/dat/Pri-fila.lua new file mode 100644 index 0000000..c65683c --- /dev/null +++ b/src/NetHack_3.7/dat/Pri-fila.lua @@ -0,0 +1,55 @@ +-- NetHack Priest Pri-fila.lua $NHDT-Date: 1652196008 2022/05/10 15:20:08 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster("human zombie") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.object() + des.monster("human zombie") + end +}) + +des.room({ type = "morgue", + contents = function() + des.stair("down") + des.object() + des.trap() + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.monster("wraith") + end +}) + +des.room({ type = "morgue", + contents = function() + des.object() + des.trap() + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Pri-filb.lua b/src/NetHack_3.7/dat/Pri-filb.lua new file mode 100644 index 0000000..ad0a84e --- /dev/null +++ b/src/NetHack_3.7/dat/Pri-filb.lua @@ -0,0 +1,62 @@ +-- NetHack Priest Pri-filb.lua $NHDT-Date: 1652196008 2022/05/10 15:20:08 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +-- + +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster("human zombie") + des.monster("wraith") + end +}) + +des.room({ type = "morgue", + contents = function() + des.object() + des.object() + des.object() + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.object() + des.monster("human zombie") + des.monster("wraith") + end +}) + +des.room({ type = "morgue", + contents = function() + des.stair("down") + des.object() + des.object() + des.trap() + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.monster("human zombie") + des.monster("wraith") + end +}) + + +des.room({ type = "morgue", + contents = function() + des.object() + des.trap() + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Pri-goal.lua b/src/NetHack_3.7/dat/Pri-goal.lua new file mode 100644 index 0000000..1e29d97 --- /dev/null +++ b/src/NetHack_3.7/dat/Pri-goal.lua @@ -0,0 +1,84 @@ +-- NetHack Priest Pri-goal.lua $NHDT-Date: 1687033651 2023/06/17 20:27:31 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.level_init({ style="mines", fg="L", bg=".", smoothed=false, joined=false, lit=0, walled=false }) + +des.map([[ +xxxxxx..xxxxxx...xxxxxxxxx +xxxx......xx......xxxxxxxx +xx.xx.............xxxxxxxx +x....................xxxxx +......................xxxx +......................xxxx +xx........................ +xxx......................x +xxx................xxxxxxx +xxxx.....x.xx.......xxxxxx +xxxxx...xxxxxx....xxxxxxxx +]]); +-- Dungeon Description +local place = { {14,04}, {13,07} } +local placeidx = math.random(1, #place); + +des.region(selection.area(00,00,25,10), "unlit") +-- Stairs +des.stair("up", 20,05) +-- Objects [note: eroded=-1 => obj->oerodeproof=1] +des.object({ id = "helm of brilliance", coord = place[placeidx], + buc="blessed", spe=0, eroded=-1, name="The Mitre of Holiness" }) +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("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap() +des.trap() +-- Random monsters. +des.monster("Nalzok",place[placeidx]) +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("human zombie") +des.monster("Z") +des.monster("Z") +des.monster("wraith") +des.monster("wraith") +des.monster("wraith") +des.monster("wraith") +des.monster("wraith") +des.monster("wraith") +des.monster("wraith") +des.monster("wraith") +des.monster("W") diff --git a/src/NetHack_3.7/dat/Pri-loca.lua b/src/NetHack_3.7/dat/Pri-loca.lua new file mode 100644 index 0000000..6c89097 --- /dev/null +++ b/src/NetHack_3.7/dat/Pri-loca.lua @@ -0,0 +1,73 @@ +-- NetHack Priest Pri-loca.lua $NHDT-Date: 1652196009 2022/05/10 15:20:09 $ $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. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor", "noflip") +-- This is a kludge to init the level as a lit field. +des.level_init({ style="mines", fg=".", bg=".", smoothed=false, joined=false, lit=1, walled=false }) + +des.map([[ +........................................ +........................................ +..........----------+----------......... +..........|........|.|........|......... +..........|........|.|........|......... +..........|----.----.----.----|......... +..........+...................+......... +..........+...................+......... +..........|----.----.----.----|......... +..........|........|.|........|......... +..........|........|.|........|......... +..........----------+----------......... +........................................ +........................................ +]]); +-- Dungeon Description +des.region({ region={00,00, 09,13}, lit=0, type="morgue", filled=1 }) +des.region({ region={09,00, 30,01}, lit=0, type="morgue", filled=1 }) +des.region({ region={09,12, 30,13}, lit=0, type="morgue", filled=1 }) +des.region({ region={31,00, 39,13}, lit=0, type="morgue", filled=1 }) +des.region({ region={11,03, 29,10}, lit=1, type="temple", filled=1, irregular=1 }) +-- The altar inside the temple +des.altar({ x=20,y=07, align="noalign", type="shrine" }) +des.monster({ id = "aligned cleric", x=20, y=07, align="noalign", peaceful = 0 }) +-- Doors +des.door("locked",10,06) +des.door("locked",10,07) +des.door("locked",20,02) +des.door("locked",20,11) +des.door("locked",30,06) +des.door("locked",30,07) +-- Stairs +-- Note: The up stairs are *intentionally* off of the map. +des.stair("up", 43,05) +des.stair("down", 20,06) +-- Non diggable walls +des.non_diggable(selection.area(10,02,30,13)) +-- Objects (inside the antechambers). +des.object({ coord = { 14, 03 } }) +des.object({ coord = { 15, 03 } }) +des.object({ coord = { 16, 03 } }) +des.object({ coord = { 14, 10 } }) +des.object({ coord = { 15, 10 } }) +des.object({ coord = { 16, 10 } }) +des.object({ coord = { 17, 10 } }) +des.object({ coord = { 24, 03 } }) +des.object({ coord = { 25, 03 } }) +des.object({ coord = { 26, 03 } }) +des.object({ coord = { 27, 03 } }) +des.object({ coord = { 24, 10 } }) +des.object({ coord = { 25, 10 } }) +des.object({ coord = { 26, 10 } }) +des.object({ coord = { 27, 10 } }) +-- Random traps +des.trap({ coord = { 15,04 } }) +des.trap({ coord = { 25,04 } }) +des.trap({ coord = { 15,09 } }) +des.trap({ coord = { 25,09 } }) +des.trap() +des.trap() +-- No random monsters - the morgue generation will put them in. diff --git a/src/NetHack_3.7/dat/Pri-strt.lua b/src/NetHack_3.7/dat/Pri-strt.lua new file mode 100644 index 0000000..29edb6d --- /dev/null +++ b/src/NetHack_3.7/dat/Pri-strt.lua @@ -0,0 +1,102 @@ +-- NetHack Priest Pri-strt.lua $NHDT-Date: 1652196009 2022/05/10 15:20:09 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.5 $ +-- 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, High Priest +-- 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", filled=2 }) + +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 }) +des.terrain({05,04}, ".") + +local spacelocs = selection.floodfill(05,04); + +-- Portal arrival point +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" }) +-- High Priest +des.monster({ id = "Arch Priest", coord = {28, 10}, inventory = function() + des.object({ id = "robe", spe = 4 }); + des.object({ id = "mace", spe = 4 }); +end }) +-- The treasure of High Priest +des.object("chest", 27, 10) +-- knight guards for the audience chamber +des.monster("acolyte", 32, 07) +des.monster("acolyte", 32, 08) +des.monster("acolyte", 32, 11) +des.monster("acolyte", 32, 12) +des.monster("acolyte", 33, 07) +des.monster("acolyte", 33, 08) +des.monster("acolyte", 33, 11) +des.monster("acolyte", 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, 12 do + des.monster("human zombie", spacelocs:rndcoord(1)); +end diff --git a/src/NetHack_3.7/dat/Ran-fila.lua b/src/NetHack_3.7/dat/Ran-fila.lua new file mode 100644 index 0000000..c9c02cf --- /dev/null +++ b/src/NetHack_3.7/dat/Ran-fila.lua @@ -0,0 +1,35 @@ +-- NetHack Ranger Ran-fila.lua $NHDT-Date: 1652196009 2022/05/10 15:20:09 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg="T", smoothed=true, joined=true, walled=true }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.trap() +des.trap() +des.trap() +des.trap() +-- +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ class = "C", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Ran-filb.lua b/src/NetHack_3.7/dat/Ran-filb.lua new file mode 100644 index 0000000..48275fa --- /dev/null +++ b/src/NetHack_3.7/dat/Ran-filb.lua @@ -0,0 +1,39 @@ +-- NetHack Ranger Ran-filb.lua $NHDT-Date: 1652196010 2022/05/10 15:20:10 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg=" ", smoothed=true, joined=true, walled=true }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.trap() +des.trap() +des.trap() +des.trap() +-- +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ class = "C", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Ran-goal.lua b/src/NetHack_3.7/dat/Ran-goal.lua new file mode 100644 index 0000000..a28b0c1 --- /dev/null +++ b/src/NetHack_3.7/dat/Ran-goal.lua @@ -0,0 +1,106 @@ +-- NetHack Ranger Ran-goal.lua $NHDT-Date: 1652196010 2022/05/10 15:20:10 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.map([[ + + ... ... + .......................................................................... + ... + ... + . ............ ....... . ....... . + . ............................. . ........ .........S.. . + . ............ . ...... . . . ....... .. . + . ......... . .... + . ... . .. . + . S . ......... .S. .S............... . + . ... . ... . ......... . . + . ........ .....S.+.......+....\....+........+. . + . ... ... S ......... .. ..... . + . .. ......... .. ...... . + . ....... ... + .... .... .......... . + . .............. .. . ...... .. ............. . + . ............. . .......... ...... . + ... + ... + .......................................................................... + ... ... + +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +-- Stairs +des.stair("up", 19,10) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Objects +des.object({ id = "bow", x=37, y=10, buc="blessed", spe=0, name="The Longbow of Diana" }) +des.object("chest", 37, 10) +des.object({ coord = { 36, 09 } }) +des.object({ coord = { 36, 10 } }) +des.object({ coord = { 36, 11 } }) +des.object({ coord = { 37, 09 } }) +des.object({ coord = { 37, 11 } }) +des.object({ coord = { 38, 09 } }) +des.object({ coord = { 38, 10 } }) +des.object({ coord = { 38, 11 } }) +des.object() +des.object() +des.object() +des.object() +des.object() +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- doors +des.door("locked",12,08) +des.door("closed",22,10) +des.door("locked",24,10) +des.door("closed",25,11) +des.door("closed",32,10) +des.door("closed",37,03) +des.door("closed",37,07) +des.door("closed",37,13) +des.door("closed",37,16) +des.door("closed",42,10) +des.door("locked",46,08) +des.door("closed",51,10) +des.door("locked",53,08) +des.door("closed",65,05) +-- Random monsters. +des.monster({ id = "Scorpius", x=37, y=10, peaceful=0 }) +des.monster({ id = "forest centaur", x=36, y=09, peaceful=0 }) +des.monster({ id = "forest centaur", x=36, y=10, peaceful=0 }) +des.monster({ id = "forest centaur", x=36, y=11, peaceful=0 }) +des.monster({ id = "forest centaur", x=37, y=09, peaceful=0 }) +des.monster({ id = "forest centaur", x=37, y=11, peaceful=0 }) +des.monster({ id = "forest centaur", x=38, y=09, peaceful=0 }) +des.monster({ id = "mountain centaur", x=38, y=10, peaceful=0 }) +des.monster({ id = "mountain centaur", x=38, y=11, peaceful=0 }) +des.monster({ id = "mountain centaur", x=02, y=02, peaceful=0 }) +des.monster({ id = "mountain centaur", x=71, y=02, peaceful=0 }) +des.monster({ id = "mountain centaur", x=02, y=16, peaceful=0 }) +des.monster({ id = "mountain centaur", x=71, y=16, peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ class = "C", peaceful=0 }) +des.monster({ class = "C", peaceful=0 }) +des.monster({ id = "scorpion", x=03, y=02, peaceful=0 }) +des.monster({ id = "scorpion", x=72, y=02, peaceful=0 }) +des.monster({ id = "scorpion", x=03, y=17, peaceful=0 }) +des.monster({ id = "scorpion", x=72, y=17, peaceful=0 }) +des.monster({ id = "scorpion", x=41, y=10, peaceful=0 }) +des.monster({ id = "scorpion", x=33, y=09, peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) +des.monster({ class = "s", peaceful=0 }) + +des.wallify() diff --git a/src/NetHack_3.7/dat/Ran-loca.lua b/src/NetHack_3.7/dat/Ran-loca.lua new file mode 100644 index 0000000..386c3e7 --- /dev/null +++ b/src/NetHack_3.7/dat/Ran-loca.lua @@ -0,0 +1,79 @@ +-- NetHack Ranger Ran-loca.lua $NHDT-Date: 1652196010 2022/05/10 15:20:10 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor") +--1234567890123456789012345678901234567890123456789012345678901234567890 +des.map([[ + ....... ......... ....... + ................... ................... + .... ....... ....... .... +... ..... . ..... . ..... ... +. .......... ..... ........... ..... .......... . +. .. ..... .......... ..... .......... ..... .. . +. . . ..... . ..... . . . +. . ..... ............. ..... . . +. . ................ ....... ................ . . +. . ..... ....... ..... . . +. . . ...... ...... . . . +. . ........... ......... ........... . . +. . .......... .......... . . +. .. ..... . ..... . ..... .. . +. .......... ..... ........... ..... .......... . +. ..... .......... ..... .......... ..... . +. . ..... . ..... . . +... ....... ....... ....... ... + .............. ............. .............. + ....... ....... ....... ....... ....... +]]); +-- Dungeon Description +des.region(selection.area(00,00,54,19), "lit") +-- Stairs +des.stair("up", 25,05) +des.stair("down", 27,18) +-- Non diggable walls +des.non_diggable(selection.area(00,00,54,19)) +-- Objects +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- Random traps +des.trap("spiked pit") +des.trap("spiked pit") +des.trap("teleport") +des.trap("teleport") +des.trap("arrow") +des.trap("arrow") +-- Random monsters. +des.monster({ id = "wumpus", x=27, y=18, peaceful=0, asleep=1 }) +des.monster({ id = "giant bat", peaceful=0 }) +des.monster({ id = "giant bat", peaceful=0 }) +des.monster({ id = "giant bat", peaceful=0 }) +des.monster({ id = "giant bat", peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ id = "forest centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "mountain centaur", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) +des.monster({ class = "s", peaceful=0 }) +des.monster({ class = "s", peaceful=0 }) + diff --git a/src/NetHack_3.7/dat/Ran-strt.lua b/src/NetHack_3.7/dat/Ran-strt.lua new file mode 100644 index 0000000..2540b62 --- /dev/null +++ b/src/NetHack_3.7/dat/Ran-strt.lua @@ -0,0 +1,101 @@ +-- NetHack Ranger Ran-strt.lua $NHDT-Date: 1652196011 2022/05/10 15:20:11 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991 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, Orion, +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = "." }); + +des.level_flags("mazelevel", "noteleport", "hardfloor", "arboreal") + +des.level_init({ style="mines", fg=".", bg=".", smoothed=true, joined=true, lit=1, walled=false }) +des.replace_terrain({ region={00,00, 76,19}, fromterrain=".", toterrain="T", chance=5 }) +--1234567890123456789012345678901234567890123456789012345678901234567890 +des.map({ halign = "left", valign = "center", map = [[ + xx + ................................... x + .. .. + .. ...............F............... .. + . .. .F. .. . + . .. .............F............. .. . + . . .. .. . . + . . .. ....................... .. ... + . . . .. .. . + ... . .. .|..................... ...... + FFF . . ..S.................. + ... . .. .|................. .... ... + . . . .. .. . . . + . . .. ....................... .. . . + . . .. .. . . + . .. .............F............. .. . + . .. .F. .. . + .. ...............F............... .. + .. .. + ................................... x + xx +]] }); +-- Dungeon Description +des.region(selection.area(00,00,40,20), "lit") +-- Stairs +des.stair("down", 10,10) +-- Portal arrival point; just about anywhere on the right hand side of the map +des.levregion({ region = {51,2,77,18}, region_islev = 1, type="branch" }) +-- Orion +des.monster({ id = "Orion", coord = {20, 10}, inventory = function() + des.object({ id = "leather armor", spe = 4 }); + des.object({ id = "yumi", spe = 4 }); + des.object({ id = "arrow", spe = 4, quantity = 50 }); +end }) +-- The treasure of Orion +des.object("chest", 20, 10) +-- Guards for the audience chamber +des.monster("hunter", 19, 09) +des.monster("hunter", 20, 09) +des.monster("hunter", 21, 09) +des.monster("hunter", 19, 10) +des.monster("hunter", 21, 10) +des.monster("hunter", 19, 11) +des.monster("hunter", 20, 11) +des.monster("hunter", 21, 11) +-- Non diggable walls +des.non_diggable(selection.area(00,00,40,20)) +-- Traps +des.trap("arrow",30,09) +des.trap("arrow",30,10) +des.trap("pit",40,09) +des.trap("spiked pit") +des.trap("bear") +des.trap("bear") +-- Monsters on siege duty. +des.monster({ id = "minotaur", x=33, y=09, peaceful=0, asleep=1 }) +des.monster({ id = "forest centaur", x=19, y=03, peaceful=0 }) +des.monster({ id = "forest centaur", x=19, y=04, peaceful=0 }) +des.monster({ id = "forest centaur", x=19, y=05, peaceful=0 }) +des.monster({ id = "forest centaur", x=21, y=03, peaceful=0 }) +des.monster({ id = "forest centaur", x=21, y=04, peaceful=0 }) +des.monster({ id = "forest centaur", x=21, y=05, peaceful=0 }) +des.monster({ id = "forest centaur", x=01, y=09, peaceful=0 }) +des.monster({ id = "forest centaur", x=02, y=09, peaceful=0 }) +des.monster({ id = "forest centaur", x=03, y=09, peaceful=0 }) +des.monster({ id = "forest centaur", x=01, y=11, peaceful=0 }) +des.monster({ id = "forest centaur", x=02, y=11, peaceful=0 }) +des.monster({ id = "forest centaur", x=03, y=11, peaceful=0 }) +des.monster({ id = "forest centaur", x=19, y=15, peaceful=0 }) +des.monster({ id = "forest centaur", x=19, y=16, peaceful=0 }) +des.monster({ id = "forest centaur", x=19, y=17, peaceful=0 }) +des.monster({ id = "forest centaur", x=21, y=15, peaceful=0 }) +des.monster({ id = "forest centaur", x=21, y=16, peaceful=0 }) +des.monster({ id = "forest centaur", x=21, y=17, peaceful=0 }) +des.monster({ id = "plains centaur", peaceful=0 }) +des.monster({ id = "plains centaur", peaceful=0 }) +des.monster({ id = "plains centaur", peaceful=0 }) +des.monster({ id = "plains centaur", peaceful=0 }) +des.monster({ id = "plains centaur", peaceful=0 }) +des.monster({ id = "plains centaur", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) +des.monster({ id = "scorpion", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Rog-fila.lua b/src/NetHack_3.7/dat/Rog-fila.lua new file mode 100644 index 0000000..6b4a80f --- /dev/null +++ b/src/NetHack_3.7/dat/Rog-fila.lua @@ -0,0 +1,64 @@ +-- NetHack Rogue Rog-fila.lua $NHDT-Date: 1652196011 2022/05/10 15:20:11 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1992 by Dean Luick +-- NetHack may be freely redistributed. See license for details. +-- +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster({ id = "leprechaun", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.monster({ id = "leprechaun", peaceful=0 }) + des.monster({ id = "guardian naga", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.trap() + des.object() + des.monster({ id = "water nymph", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.stair("down") + des.object() + des.trap() + des.trap() + des.monster({ class = "l", peaceful=0 }) + des.monster({ id = "guardian naga", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.trap() + des.monster({ id = "leprechaun", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.trap() + des.monster({ id = "leprechaun", peaceful=0 }) + des.monster({ id = "water nymph", peaceful=0 }) + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Rog-filb.lua b/src/NetHack_3.7/dat/Rog-filb.lua new file mode 100644 index 0000000..83b5969 --- /dev/null +++ b/src/NetHack_3.7/dat/Rog-filb.lua @@ -0,0 +1,64 @@ +-- NetHack Rogue Rog-filb.lua $NHDT-Date: 1652196011 2022/05/10 15:20:11 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1992 by Dean Luick +-- NetHack may be freely redistributed. See license for details. +-- +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster({ id = "leprechaun", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.monster({ id = "leprechaun", peaceful=0 }) + des.monster({ id = "guardian naga", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.trap() + des.object() + des.monster({ id = "water nymph", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.stair("down") + des.object() + des.trap() + des.trap() + des.monster({ class = "l", peaceful=0 }) + des.monster({ id = "guardian naga", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.trap() + des.monster({ id = "leprechaun", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.trap() + des.monster({ id = "leprechaun", peaceful=0 }) + des.monster({ id = "water nymph", peaceful=0 }) + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Rog-goal.lua b/src/NetHack_3.7/dat/Rog-goal.lua new file mode 100644 index 0000000..4eb58f3 --- /dev/null +++ b/src/NetHack_3.7/dat/Rog-goal.lua @@ -0,0 +1,110 @@ +-- NetHack Rogue Rog-goal.lua $NHDT-Date: 1652196012 2022/05/10 15:20:12 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1992 by Dean Luick +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport") + +-- 1 2 3 4 5 6 7 +--123456789012345678901234567890123456789012345678901234567890123456789012345 +des.map([[ +----- -------.......................................|-----------------| +|...| -----.....|.......................................|.................| +|...----...|.....|.......................................|....---------....| +|.---......---..--.................................------------.......|....| +|...............|..................................|..|...|...----........-| +|.....-----....--.................................|-..--..-|.....----S----| +|--S---...|....|.................................|-........-|....|........| +|.........---------.............................|-....}}....-|...|...|....| +|....|.....S......|............................|-.....}}.....-|..--.------| +|-----.....--.....|...........................|-...}}}}}}}}...-|....|.....-- +|...........--....------S-----...............|-....}}}}}}}}....-|..........| +|............--........|...| |..............--.....}}.}}........----------S- +|.............|........|...| |..............|......}}}}}}}}......|...|.....| +|S-.---.---.---.---.---|...| ------------...--........}}.}}.....--..---....| +|.---.---.---.---.-S-..----- |....|.....|....|-....}}}}}}}}....---..S.|--..| +|...|.......|..........|...---....---...S.....|-...}}}}}}}}...-|.S..|...|..| +|...|..|....|..........|............|..--..----|-.....}}.....-|..----...-S-- +|...|---....----.......|----- ......|...---| |-....}}....-|...|..--.--..| +-----.....---.....--.---....--...--------..| |-........-|....|.........| + |.............|..........|.............S... |S-------|.....|..-----..| + ---------------------------------------- ...... ---------- ---- +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,20), "lit") +-- Stairs +des.levregion({ region={01,00,15,20}, region_islev=1, exclude={01,18,04,20}, type="stair-up" }); +-- Doors +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,20)) +-- One trap to keep the gnomes at bay. +des.trap("spiked pit",37,07) +-- Objects +des.object({ id = "skeleton key", x=38, y=10, buc="blessed", spe=0, name="The Master Key of Thievery" }) +des.object({ id = "tin", x=26, y=12, montype="chameleon" }) +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() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster({ id = "Master Assassin", x=38, y=10, peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ class = "l", peaceful=0 }) +des.monster({ class = "l", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ class = "N", peaceful=0 }) +des.monster({ class = "N", peaceful=0 }) +des.monster({ class = "N", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "shark", x=51, y=14, peaceful=0 }) +des.monster({ id = "shark", x=53, y=09, peaceful=0 }) +des.monster({ id = "shark", x=55, y=15, peaceful=0 }) +des.monster({ id = "shark", x=58, y=10, peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Rog-loca.lua b/src/NetHack_3.7/dat/Rog-loca.lua new file mode 100644 index 0000000..3a88e11 --- /dev/null +++ b/src/NetHack_3.7/dat/Rog-loca.lua @@ -0,0 +1,99 @@ +-- NetHack Rogue Rog-loca.lua $NHDT-Date: 1652196012 2022/05/10 15:20:12 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1992 by Dean Luick +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +-- 1 2 3 4 5 6 7 +--123456789012345678901234567890123456789012345678901234567890123456789012345 +des.map([[ + ---------------------------------------------------- -------- + ---.................................................- --.....| + ---...--------........-------.......................--- ---...| + ---.....- ---......- ---..................---- --.-- + ---.....---- -------- --..................-- --..| + ---...----- ----.----.....----.....--- --..|| +----..---- -----..--- |...--- |.......--- --...| +|...--- ----....--- |.--- |.........-- --...|| +|...- ----.....--- ---- |..........---....| +|...---- ----......--- | |...|.......-....|| +|......----- ---.........- | -----...|............| +|..........----- ----...........--- -------......||...........|| +|..............-----................--- |............|||..........| +|------...............................--- |...........|| |.........|| +|.....|..............------.............-----..........|| ||........| +|.....|.............-- ---.........................|| |.......|| +|.....|.............- ---.....................--| ||......| +|-S----------.......---- --.................---- |.....|| +|...........|..........--------..............----- ||....| +|...........|............................----- |....| +------------------------------------------ ------ +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,20), "lit") +-- Doors +--DOOR:locked|closed|open,(xx,yy) +-- Stairs +des.stair("up") +des.stair("down") +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,20)) +-- Objects +des.object({ id = "scroll of teleportation", x=11, y=18, buc="cursed", spe=0 }) +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() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ id = "leprechaun", peaceful=0 }) +des.monster({ class = "l", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ id = "guardian naga", peaceful=0 }) +des.monster({ class = "N", peaceful=0 }) +des.monster({ class = "N", peaceful=0 }) +des.monster({ class = "N", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) +des.monster({ id = "chameleon", peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Rog-strt.lua b/src/NetHack_3.7/dat/Rog-strt.lua new file mode 100644 index 0000000..c7c1117 --- /dev/null +++ b/src/NetHack_3.7/dat/Rog-strt.lua @@ -0,0 +1,166 @@ +-- NetHack Rogue Rog-strt.lua $NHDT-Date: 1652196012 2022/05/10 15:20:12 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $ +-- Copyright (c) 1992 by Dean Luick +-- NetHack may be freely redistributed. See license for details. +-- +-- +-- The "start" level for the quest. +-- +-- Here you meet your (besieged) class leader, Master of Thieves +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor", "nommap") + +-- 1 2 3 4 5 6 7 +--123456789012345678901234567890123456789012345678901234567890123456789012345 +des.map([[ +---------------------------------.------------------------------------------ +|.....|.||..........|....|......|.|.........|.......+............---.......| +|.....|..+..........+....---....S.|...-S-----.-----.|............+.+.......| +|.....+.||........---......|....|.|...|.....|.|...|.---.....------.--------| +|-----|.-------|..|........------.-----.....|.--..|...-------..............| +|.....|........------+------..........+.....|..--S---.........------.-----.. +|.....|.------...............-----.}}.--------.|....-------.---....|.+...--| +|..-+--.|....|-----.--------.|...|.....+.....|.|....|.....+.+......|.--....| +|..|....|....|....+.|......|.|...-----.|.....|.--...|.....|.|......|..|....| +|..|.-----S----...|.+....-----...|...|.----..|..|.---....--.---S-----.|----| +|..|.|........|...------.|.S.....|...|....-----.+.|......|..|.......|.|....| +|---.-------..|...|....|.|.|.....|...----.|...|.|---.....|.|-.......|.---..| +...........|..S...|....---.----S----..|...|...+.|..-------.---+-....|...--+| +|---------.---------...|......|....S..|.---...|.|..|...........----.---....| +|........|.........|...+.------....|---.---...|.--+-.----.----....|.+...--+| +|........|.---+---.|----.--........|......-----......|..|..|.--+-.|.-S-.|..| +|........|.|.....|........----------.----.......---.--..|-.|....|.-----.|..| +|----....+.|.....----+---............|..|--------.+.|...SS.|....|.......|..| +|...--+-----.....|......|.------------............---...||.------+--+----..| +|..........S.....|......|.|..........S............|.....||...|.....|....|..| +-------------------------.-------------------------------------------------- +]]); +-- Dungeon Description +--REGION:(00,00,75,20),lit,"ordinary" + +local streets = selection.floodfill(0,12) + +-- The down stairs is at one of the 4 "exits". The others are mimics, +-- mimicing stairwells. +local place = { {33,0}, {0,12}, {25,20}, {75,05} } +shuffle(place) + +des.stair({ dir = "down", coord = place[1] }) +des.monster({ id = "giant mimic", coord = place[2], appear_as = "ter:staircase down" }) +des.monster({ id = "large mimic", coord = place[3], appear_as = "ter:staircase down" }) +des.monster({ id = "small mimic", coord = place[4], appear_as = "ter:staircase down" }) +-- Portal arrival point +des.levregion({ region = {19,09,19,09}, type="branch" }) +-- Doors (secret) +--DOOR:locked|closed|open,(xx,yy) +des.door("locked", 32, 2) +des.door("locked", 63, 9) +des.door("locked", 27,10) +des.door("locked", 31,12) +des.door("locked", 35,13) +des.door("locked", 69,15) +des.door("locked", 56,17) +des.door("locked", 57,17) +des.door("locked", 11,19) +des.door("locked", 37,19) +des.door("locked", 39, 2) +des.door("locked", 49, 5) +des.door("locked", 10, 9) +des.door("locked", 14,12) +-- Doors (regular) +des.door("closed", 52, 1) +des.door("closed", 9, 2) +des.door("closed", 20, 2) +des.door("closed", 65, 2) +des.door("closed", 67, 2) +des.door("closed", 6, 3) +des.door("closed", 21, 5) +des.door("closed", 38, 5) +des.door("closed", 69, 6) +des.door("closed", 4, 7) +des.door("closed", 39, 7) +des.door("closed", 58, 7) +des.door("closed", 60, 7) +des.door("closed", 18, 8) +des.door("closed", 20, 9) +des.door("closed", 48,10) +des.door("closed", 46,12) +des.door("closed", 62,12) +des.door("closed", 74,12) +des.door("closed", 23,14) +des.door("closed", 23,14) +des.door("closed", 50,14) +des.door("closed", 68,14) +des.door("closed", 74,14) +des.door("closed", 14,15) +des.door("closed", 63,15) +des.door("closed", 9,17) +des.door("closed", 21,17) +des.door("closed", 50,17) +des.door("closed", 6,18) +des.door("closed", 65,18) +des.door("closed", 68,18) +-- Master of Thieves +des.monster({ id = "Master of Thieves", coord = {36, 11}, inventory = function() + des.object({ id = "leather armor", spe = 5 }); + des.object({ id = "silver dagger", spe = 4 }); + des.object({ id = "dagger", spe = 2, quantity = d(2,4), buc = "not-cursed" }); +end }) +-- The treasure of Master of Thieves +des.object("chest", 36, 11) +-- thug guards, room #1 +des.monster("thug", 28, 10) +des.monster("thug", 29, 11) +des.monster("thug", 30, 09) +des.monster("thug", 31, 07) +-- thug guards, room #2 +des.monster("thug", 31, 13) +des.monster("thug", 33, 14) +des.monster("thug", 30, 15) +--thug guards, room #3 +des.monster("thug", 35, 09) +des.monster("thug", 36, 13) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,20)) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- +-- Monsters to get in the way. +-- +-- West exit +des.monster({ id = "leprechaun", x=01, y=12, peaceful=0 }) +des.monster({ id = "water nymph", x=02, y=12, peaceful=0 }) +-- North exit +des.monster({ id = "water nymph", x=33, y=01, peaceful=0 }) +des.monster({ id = "leprechaun", x=33, y=02, peaceful=0 }) +-- East exit +des.monster({ id = "water nymph", x=74, y=05, peaceful=0 }) +des.monster({ id = "leprechaun", x=74, y=04, peaceful=0 }) +-- South exit +des.monster({ id = "leprechaun", x=25, y=19, peaceful=0 }) +des.monster({ id = "water nymph", x=25, y=18, peaceful=0 }) +-- Wandering the streets. +for i=1,4 + math.random(1 - 1,1*3) do + des.monster({ id = "water nymph", coord = streets:rndcoord(1), peaceful=0 }) + des.monster({ id = "leprechaun", coord = streets:rndcoord(1), peaceful=0 }) +end +for i=1,7 + math.random(1 - 1,1*3) do + des.monster({ id = "chameleon", coord = streets:rndcoord(1), peaceful=0 }) +end diff --git a/src/NetHack_3.7/dat/Sam-fila.lua b/src/NetHack_3.7/dat/Sam-fila.lua new file mode 100644 index 0000000..53d23d5 --- /dev/null +++ b/src/NetHack_3.7/dat/Sam-fila.lua @@ -0,0 +1,37 @@ +-- NetHack Samurai Sam-fila.lua $NHDT-Date: 1652196013 2022/05/10 15:20:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg="P", smoothed=true, joined=true, walled=true }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.monster("d") +des.monster("wolf") +des.monster("wolf") +des.monster("wolf") +des.monster("wolf") +des.monster("wolf") +des.monster("stalker") +-- +des.trap() +des.trap() +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Sam-filb.lua b/src/NetHack_3.7/dat/Sam-filb.lua new file mode 100644 index 0000000..69e6103 --- /dev/null +++ b/src/NetHack_3.7/dat/Sam-filb.lua @@ -0,0 +1,60 @@ +-- NetHack Samurai Sam-filb.lua $NHDT-Date: 1652196013 2022/05/10 15:20:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.map([[ +------------- ------------- +|...........| |...........| +|...-----...|----------------------------------|...-----...| +|...| |...|..................................|...| |...| +|...-----..........................................-----...| +|...........|--S----------------------------S--|...........| +----...--------.|..........................|.--------...---- + |...|........+..........................+........|...| + |...|........+..........................+........|...| +----...--------.|..........................|.--------...---- +|...........|--S----------------------------S--|...........| +|...-----..........................................-----...| +|...| |...|..................................|...| |...| +|...-----...|----------------------------------|...-----...| +|...........| |...........| +------------- ------------- +]]); +des.region(selection.area(00,00,59,15), "unlit") +-- Doors +des.door("closed",16,07) +des.door("closed",16,08) +des.door("closed",43,07) +des.door("closed",43,08) +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.monster("d") +des.monster("wolf") +des.monster("wolf") +des.monster("wolf") +des.monster("wolf") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +-- +des.trap() +des.trap() +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Sam-goal.lua b/src/NetHack_3.7/dat/Sam-goal.lua new file mode 100644 index 0000000..eb3f956 --- /dev/null +++ b/src/NetHack_3.7/dat/Sam-goal.lua @@ -0,0 +1,111 @@ +-- NetHack Samurai Sam-goal.lua $NHDT-Date: 1652196013 2022/05/10 15:20:13 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport"); + +des.map([[ + + ....................... + ......-------------------...... + ......----.................----...... + ....----.....-------------.....----.... + ....--.....----...........----.....--.... + ...||....---....---------....---....||... + ...|....--....---.......---....--....|... + ....|...||...---...--+--...---...||...|.... + ....|...|....|....|-...-|....|....|...|.... + ....|...|....|....+.....+....|....|...|.... + ....|...|....|....|-...-|....|....|...|.... + ....|...||...---...--+--...---...||...|.... + ...|....--....---.......---....--....|... + ...||....---....---------....---....||... + ....--.....----...........----.....--.... + ....----.....-------------.....----.... + ......----.................----...... + ......-------------------...... + ....................... +]]); +-- Dungeon Description +local place = { {02,11},{42,09} } +local placeidx = math.random(1, #place); + +des.region(selection.area(00,00,44,19), "unlit") +-- Doors +des.door("closed",19,10) +des.door("closed",22,08) +des.door("closed",22,12) +des.door("closed",25,10) +-- Stairs +des.stair({ dir = "up", coord = place[placeidx] }) + +-- Holes in the concentric ring walls +local place = { {22,14},{30,10},{22, 6},{14,10} } +local placeidx = math.random(1, #place); +des.terrain(place[placeidx], ".") +local place = { {22, 4},{35,10},{22,16},{ 9,10} } +local placeidx = math.random(1, #place); +des.terrain(place[placeidx], ".") +local place = { {22, 2},{22,18} } +local placeidx = math.random(1, #place); +des.terrain(place[placeidx], ".") + +-- Non diggable walls +des.non_diggable(selection.area(00,00,44,19)) +-- Objects +des.object({ id = "tsurugi", x=22, y=10, buc="blessed", spe=0, name="The Tsurugi of Muramasa" }) +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.trap("board",22,09) +des.trap("board",24,10) +des.trap("board",22,11) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster("Ashikaga Takauji", 22, 10) +des.monster({ id = "samurai", peaceful=0 }) +des.monster({ id = "samurai", peaceful=0 }) +des.monster({ id = "samurai", peaceful=0 }) +des.monster({ id = "samurai", peaceful=0 }) +des.monster({ id = "samurai", peaceful=0 }) +des.monster({ id = "ninja", peaceful=0 }) +des.monster({ id = "ninja", peaceful=0 }) +des.monster({ id = "ninja", peaceful=0 }) +des.monster({ id = "ninja", peaceful=0 }) +des.monster({ id = "ninja", peaceful=0 }) +des.monster("wolf") +des.monster("wolf") +des.monster("wolf") +des.monster("wolf") +des.monster("d") +des.monster("d") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") diff --git a/src/NetHack_3.7/dat/Sam-loca.lua b/src/NetHack_3.7/dat/Sam-loca.lua new file mode 100644 index 0000000..95bf247 --- /dev/null +++ b/src/NetHack_3.7/dat/Sam-loca.lua @@ -0,0 +1,141 @@ +-- NetHack Samurai Sam-loca.lua $NHDT-Date: 1652196014 2022/05/10 15:20:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor"); + +des.map([[ +............................................................................ +............................................................................ +........-----..................................................-----........ +........|...|..................................................|...|........ +........|...---..}..--+------------------------------+--..}..---...|........ +........|-|...|.....|...|....|....|....|....|....|.|...|.....|...|-|........ +..........|...-------...|....|....|....|....|....S.|...-------...|.......... +..........|-|.........------+----+-+-------+-+--------.........|-|.......... +............|..--------.|}........................}|.--------..|............ +............|..+........+..........................+........+..|............ +............|..+........+..........................+........+..|............ +............|..--------.|}........................}|.--------..|............ +..........|-|.........--------+-+-------+-+----+------.........|-|.......... +..........|...-------...|.S....|....|....|....|....|...-------...|.......... +........|-|...|.....|...|.|....|....|....|....|....|...|.....|...|-|........ +........|...---..}..--+------------------------------+--..}..---...|........ +........|...|..................................................|...|........ +........-----..................................................-----........ +............................................................................ +............................................................................ +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +-- Doors +des.door("locked",22,04) +des.door("locked",22,15) +des.door("locked",53,04) +des.door("locked",53,15) +des.door("locked",49,06) +des.door("locked",26,13) +des.door("locked",28,07) +des.door("locked",30,12) +des.door("locked",33,07) +des.door("locked",32,12) +des.door("locked",35,07) +des.door("locked",40,12) +des.door("locked",43,07) +des.door("locked",42,12) +des.door("locked",45,07) +des.door("locked",47,12) +des.door("closed",15,09) +des.door("closed",15,10) +des.door("closed",24,09) +des.door("closed",24,10) +des.door("closed",51,09) +des.door("closed",51,10) +des.door("closed",60,09) +des.door("closed",60,10) +-- Stairs +des.stair("up", 10,10) +des.stair("down", 25,14) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Objects +des.object("*", 25, 05) +des.object("*", 26, 05) +des.object("*", 27, 05) +des.object("*", 28, 05) +des.object("*", 25, 06) +des.object("*", 26, 06) +des.object("*", 27, 06) +des.object("*", 28, 06) +-- +des.object("[", 40, 05) +des.object("[", 41, 05) +des.object("[", 42, 05) +des.object("[", 43, 05) +des.object("[", 40, 06) +des.object("[", 41, 06) +des.object("[", 42, 06) +des.object("[", 43, 06) +-- +des.object(")", 27, 13) +des.object(")", 28, 13) +des.object(")", 29, 13) +des.object(")", 30, 13) +des.object(")", 27, 14) +des.object(")", 28, 14) +des.object(")", 29, 14) +des.object(")", 30, 14) +-- +des.object("(", 37, 13) +des.object("(", 38, 13) +des.object("(", 39, 13) +des.object("(", 40, 13) +des.object("(", 37, 14) +des.object("(", 38, 14) +des.object("(", 39, 14) +des.object("(", 40, 14) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster({ id = "ninja", x=15, y=05, peaceful=0 }) +des.monster({ id = "ninja", x=16, y=05, peaceful=0 }) +des.monster("wolf", 17, 05) +des.monster("wolf", 18, 05) +des.monster({ id = "ninja", x=19, y=05, peaceful=0 }) +des.monster("wolf", 15, 14) +des.monster("wolf", 16, 14) +des.monster({ id = "ninja", x=17, y=14, peaceful=0 }) +des.monster({ id = "ninja", x=18, y=14, peaceful=0 }) +des.monster("wolf", 56, 05) +des.monster({ id = "ninja", x=57, y=05, peaceful=0 }) +des.monster("wolf", 58, 05) +des.monster("wolf", 59, 05) +des.monster({ id = "ninja", x=56, y=14, peaceful=0 }) +des.monster("wolf", 57, 14) +des.monster({ id = "ninja", x=58, y=14, peaceful=0 }) +des.monster("d", 59, 14) +des.monster("wolf", 60, 14) +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +des.monster("stalker") +-- "guards" for the central courtyard. +des.monster({ id = "samurai", x=30, y=05, peaceful=0 }) +des.monster({ id = "samurai", x=31, y=05, peaceful=0 }) +des.monster({ id = "samurai", x=32, y=05, peaceful=0 }) +des.monster({ id = "samurai", x=32, y=14, peaceful=0 }) +des.monster({ id = "samurai", x=33, y=14, peaceful=0 }) +des.monster({ id = "samurai", x=34, y=14, peaceful=0 }) diff --git a/src/NetHack_3.7/dat/Sam-strt.lua b/src/NetHack_3.7/dat/Sam-strt.lua new file mode 100644 index 0000000..e6cac09 --- /dev/null +++ b/src/NetHack_3.7/dat/Sam-strt.lua @@ -0,0 +1,98 @@ +-- NetHack Samurai Sam-strt.lua $NHDT-Date: 1695932714 2023/09/28 20:25:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +-- +-- The "start" level for the quest. +-- +-- Here you meet your (besieged) class leader, Lord Sato +-- and receive your quest assignment. +-- +-- The throne room designation produces random atmospheric +-- messages (until the room is entered) but this one doesn't +-- actually contain any throne. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor") + +des.map([[ +..............................................................PP............ +...............................................................PP........... +..........---------------------------------------------------...PPP......... +..........|......|.........|...|..............|...|.........|....PPPPP...... +......... |......|.........S...|..............|...S.........|.....PPPP...... +..........|......|.........|---|..............|---|.........|.....PPP....... +..........+......|.........+...-------++-------...+.........|......PP....... +..........+......|.........|......................|.........|......PP....... +......... |......---------------------++--------------------|........PP..... +..........|.................................................|.........PP.... +..........|.................................................|...........PP.. +..........----------------------------------------...-------|............PP. +..........................................|.................|.............PP +.............. ................. .........|.................|..............P +............. } ............... } ........|.................|............... +.............. ........PP....... .........|.................|............... +.....................PPP..................|.................|............... +......................PP..................-------------------............... +............................................................................ +............................................................................ +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.region({ region={18,03, 26,07}, lit=1, type="throne", filled=2 }) +-- Portal arrival zone +des.levregion({ region = {62,12,70,17}, type="branch" }) +-- Stairs +des.stair("down", 29,04) +-- Doors +des.door("locked",10,06) +des.door("locked",10,07) +des.door("closed",27,04) +des.door("closed",27,06) +des.door("closed",38,06) +des.door("locked",38,08) +des.door("closed",39,06) +des.door("locked",39,08) +des.door("closed",50,04) +des.door("closed",50,06) +-- Lord Sato +des.monster({ id = "Lord Sato", coord = {20, 04}, inventory = function() + des.object({ id = "splint mail", spe = 5, eroded=-1, buc="not-cursed" }); + des.object({ id = "katana", spe = 4, eroded=-1, buc="not-cursed" }); +end }) +-- The treasure of Lord Sato +des.object("chest", 20, 04) +-- roshi guards for the audience chamber +des.monster("roshi", 18, 04) +des.monster("roshi", 18, 05) +des.monster("roshi", 18, 06) +des.monster("roshi", 18, 07) +des.monster("roshi", 26, 04) +des.monster("roshi", 26, 05) +des.monster("roshi", 26, 06) +des.monster("roshi", 26, 07) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Monsters on siege duty. +des.monster({ id = "ninja", x=64, y=00, peaceful=0 }) +des.monster("wolf", 65, 01) +des.monster({ id = "ninja", x=67, y=02, peaceful=0 }) +des.monster({ id = "ninja", x=69, y=05, peaceful=0 }) +des.monster({ id = "ninja", x=69, y=06, peaceful=0 }) +des.monster("wolf", 69, 07) +des.monster({ id = "ninja", x=70, y=06, peaceful=0 }) +des.monster({ id = "ninja", x=70, y=07, peaceful=0 }) +des.monster({ id = "ninja", x=72, y=01, peaceful=0 }) +des.monster("wolf", 75, 09) +des.monster({ id = "ninja", x=73, y=05, peaceful=0 }) +des.monster({ id = "ninja", x=68, y=02, peaceful=0 }) +des.monster("stalker") diff --git a/src/NetHack_3.7/dat/Tou-fila.lua b/src/NetHack_3.7/dat/Tou-fila.lua new file mode 100644 index 0000000..6465b5d --- /dev/null +++ b/src/NetHack_3.7/dat/Tou-fila.lua @@ -0,0 +1,35 @@ +-- NetHack Tourist Tou-fila.lua $NHDT-Date: 1652196014 2022/05/10 15:20:14 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg=" ", smoothed=true, joined=true, walled=true }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.trap() +des.trap() +des.trap() +des.trap() +-- +des.monster({ id = "soldier", peaceful = 0 }) +des.monster({ id = "soldier", peaceful = 0 }) +des.monster({ id = "soldier", peaceful = 0 }) +des.monster({ id = "soldier", peaceful = 0 }) +des.monster({ id = "soldier", peaceful = 0 }) +des.monster({ class = "H", peaceful = 0 }) +des.monster({ class = "C", peaceful = 0 }) diff --git a/src/NetHack_3.7/dat/Tou-filb.lua b/src/NetHack_3.7/dat/Tou-filb.lua new file mode 100644 index 0000000..5485501 --- /dev/null +++ b/src/NetHack_3.7/dat/Tou-filb.lua @@ -0,0 +1,39 @@ +-- NetHack Tourist Tou-filb.lua $NHDT-Date: 1652196015 2022/05/10 15:20:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noflip"); + +des.level_init({ style="mines", fg=".", bg=" ", smoothed=true, joined=true, walled=true }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.trap() +des.trap() +des.trap() +des.trap() +-- +des.monster({ id = "soldier", peaceful = 0 }) +des.monster({ id = "captain", peaceful = 0 }) +des.monster({ id = "captain", peaceful = 0 }) +des.monster({ class = "H", peaceful = 0 }) +des.monster({ class = "H", peaceful = 0 }) +des.monster({ class = "C", peaceful = 0 }) +des.monster("s") diff --git a/src/NetHack_3.7/dat/Tou-goal.lua b/src/NetHack_3.7/dat/Tou-goal.lua new file mode 100644 index 0000000..f0f3ca8 --- /dev/null +++ b/src/NetHack_3.7/dat/Tou-goal.lua @@ -0,0 +1,159 @@ +-- NetHack Tourist Tou-goal.lua $NHDT-Date: 1652196015 2022/05/10 15:20:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel"); + +des.map([[ +---------------------------------------------------------------------------- +|.........|.........|..........|..| |.................|........|........|..| +|.........|.........|..........|..| |....--------.....|........|........|..| +|------S--|--+-----------+------..| |....|......|.....|........|........|..| +|.........|.......................| |....|......+.....--+-------------+--..| +|.........|.......................| |....|......|..........................| +|-S-----S-|......----------.......| |....|......|..........................| +|..|..|...|......|........|.......| |....-----------.........----..........| +|..+..+...|......|........|.......| |....|.........|.........|}}|..........| +|..|..|...|......+........|.......| |....|.........+.........|}}|..........| +|..|..|...|......|........|.......S.S....|.........|.........----..........| +|---..----|......|........|.......| |....|.........|.......................| +|.........+......|+F-+F-+F|.......| |....-----------.......................| +|---..----|......|..|..|..|.......| |......................--------------..| +|..|..|...|......--F-F--F--.......| |......................+............|..| +|..+..+...|.......................| |--.---...-----+-----..|............|..| +|--|..----|--+-----------+------..| |.....|...|.........|..|------------|..| +|..+..+...|.........|..........|..| |.....|...|.........|..+............|..| +|..|..|...|.........|..........|..| |.....|...|.........|..|............|..| +---------------------------------------------------------------------------- +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +-- The Inn +des.region(selection.area(01,01,09,02), "lit") +des.region({ region = {01,04,09,05}, lit=1, type = "barracks", filled = 1 }) +des.region(selection.area(01,07,02,10), "unlit") +des.region(selection.area(07,07,09,10), "unlit") +des.region(selection.area(01,14,02,15), "unlit") +des.region(selection.area(07,14,09,15), "unlit") +des.region(selection.area(01,17,02,18), "unlit") +des.region(selection.area(07,17,09,18), "unlit") +-- +des.region({ region = {11,01,19,02}, lit = 0, type = "barracks", filled = 1 }) +des.region(selection.area(21,01,30,02), "unlit") +des.region({ region = {11,17,19,18}, lit = 0, type = "barracks", filled = 1 }) +des.region(selection.area(21,17,30,18), "unlit") +-- Police Station +des.region(selection.area(18,07,25,11), "lit") +des.region(selection.area(18,13,19,13), "unlit") +des.region(selection.area(21,13,22,13), "unlit") +des.region(selection.area(24,13,25,13), "unlit") +-- The town itself +des.region(selection.area(42,03,47,06), "unlit") +des.region(selection.area(42,08,50,11), "unlit") +des.region({ region = {37,16,41,18}, lit = 0, type = "morgue", filled = 1 }) +des.region(selection.area(47,16,55,18), "unlit") +des.region(selection.area(55,01,62,03), "unlit") +des.region(selection.area(64,01,71,03), "unlit") +des.region({ region = {60,14,71,15}, lit = 1, type = "shop", filled = 1 }) +des.region({ region = {60,17,71,18}, lit = 1, type = "shop", filled = 1 }) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Stairs +des.stair("up", 70,08) +-- Doors +des.door("locked",07,03) +des.door("locked",02,06) +des.door("locked",08,06) +des.door("closed",03,08) +des.door("closed",06,08) +des.door("open",10,12) +des.door("closed",03,15) +des.door("closed",06,15) +des.door("closed",03,17) +des.door("closed",06,17) +des.door("closed",13,03) +des.door("random",25,03) +des.door("closed",13,16) +des.door("random",25,16) +des.door("locked",17,09) +des.door("locked",18,12) +des.door("locked",21,12) +des.door("locked",24,12) +des.door("locked",34,10) +des.door("locked",36,10) +des.door("random",48,04) +des.door("random",56,04) +des.door("random",70,04) +des.door("random",51,09) +des.door("random",51,15) +des.door("open",59,14) +des.door("open",59,17) +-- Objects +des.object({ id = "credit card", x=04, y=01, buc="blessed", spe=0, name="The Platinum Yendorian Express Card" }) +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 - must avoid the 2 shops +local validtraps = selection.area(00,00,75,19):filter_mapchar('.') +validtraps = validtraps - selection.area(60,14,71,18) +for i=1,6 do + des.trap(validtraps:rndcoord(1)) +end +-- Random monsters. +des.monster({ id = "Master of Thieves", x=04, y=01, peaceful = 0 }) +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("s") +des.monster("s") +-- ladies of the evening +des.monster("succubus", 02, 08) +des.monster("succubus", 08, 08) +des.monster("incubus", 02, 14) +des.monster("incubus", 08, 14) +des.monster("incubus", 02, 17) +des.monster("incubus", 08, 17) +-- Police station (with drunken prisoners) +des.monster({ id = "Kop Kaptain", x=24, y=09, peaceful = 0 }) +des.monster({ id = "Kop Lieutenant", x=20, y=09, peaceful = 0 }) +des.monster({ id = "Kop Lieutenant", x=22, y=11, peaceful = 0 }) +des.monster({ id = "Kop Lieutenant", x=22, y=07, peaceful = 0 }) +des.monster({ id = "Keystone Kop", x=19, y=07, peaceful = 0 }) +des.monster({ id = "Keystone Kop", x=19, y=08, peaceful = 0 }) +des.monster({ id = "Keystone Kop", x=22, y=09, peaceful = 0 }) +des.monster({ id = "Keystone Kop", x=24, y=11, peaceful = 0 }) +des.monster({ id = "Keystone Kop", x=19, y=11, peaceful = 0 }) +des.monster("prisoner", 19, 13) +des.monster("prisoner", 21, 13) +des.monster("prisoner", 24, 13) +-- +des.monster({ id = "watchman", x=33, y=10, peaceful = 0 }) + +des.wallify() diff --git a/src/NetHack_3.7/dat/Tou-loca.lua b/src/NetHack_3.7/dat/Tou-loca.lua new file mode 100644 index 0000000..68885a9 --- /dev/null +++ b/src/NetHack_3.7/dat/Tou-loca.lua @@ -0,0 +1,153 @@ +-- NetHack Tourist Tou-loca.lua $NHDT-Date: 1652196015 2022/05/10 15:20:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor") +des.map([[ +---------------------------------------------------------------------------- +|....|......|..........|......|......|...|....|.....|......|...............| +|....|......|.|------|.|......|......|.|.|....|..}..|......|.|----------|..| +|....|--+----.|......|.|-S---+|+-----|.|.S....|.....|---+--|.|..........+..| +|....|........|......|.|...|.........|.|------|..............|..........|-+| +|....+...}}...+......|.|...|.|-----|.|..............|--+----------------|..| +|----|........|------|.|---|.|.....|......|-----+-|.|.......|...........|--| +|............................|.....|.|--+-|.......|.|.......|...........|..| +|----|.....|-------------|...|--+--|.|....|.......|.|-----------+-------|..| +|....+.....+.........S...|...........|....|-------|........................| +|....|.....|.........|...|.|---------|....|.........|-------|.|----------|.| +|....|.....|---------|---|.|......|..+....|-------|.|.......|.+......S.\.|.| +|....|.....+.........S...|.|......|..|....|.......|.|.......|.|......|...|.| +|-------|..|.........|---|.|+-------------------+-|.|.......+.|----------|.| +|.......+..|---------|.........|.........|..........|.......|.|..........|.| +|.......|..............|--+--|.|.........|.|----+-----------|.|..........|.| +|---------+-|--+-----|-|.....|.|.........|.|........|.|.....+.|..........+.| +|...........|........|.S.....|.|----+----|.|--------|.|.....|.|----------|.| +|...........|........|.|.....|........................|.....|..............| +---------------------------------------------------------------------------- +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.non_diggable(selection.area(00,00,75,19)) +-- +des.region({ region={01,01, 04,05}, lit=0, type="morgue", filled=1 }) +des.region({ region={15,03, 20,05}, lit=1, type="shop", filled=1 }) +des.region({ region={62,03, 71,04}, lit=1, type="shop", filled=1 }) +des.region({ region={01,17, 11,18}, lit=1, type="barracks", filled=1 }) +des.region({ region={12,09, 20,10}, lit=1, type="barracks", filled=1 }) +des.region({ region={53,11, 59,14}, lit=1, type="zoo", filled=1 }) +des.region({ region={63,14, 72,16}, lit=1, type="barracks", filled=1 }) +des.region({ region={32,14, 40,16}, lit=1, type="temple", filled=1 }) +-- +des.region({ region = {06,01,11,02}, type = "ordinary" }) +des.region({ region = {24,01,29,02}, type = "ordinary" }) +des.region({ region = {31,01,36,02}, type = "ordinary" }) +des.region({ region = {42,01,45,03}, type = "ordinary" }) +des.region({ region = {53,01,58,02}, type = "ordinary" }) +des.region({ region = {24,04,26,05}, type = "ordinary" }) +des.region({ region = {30,06,34,07}, type = "ordinary" }) +des.region(selection.area(73,05,74,05), "unlit") +des.region({ region = {01,09,04,12}, type = "ordinary" }) +des.region({ region = {01,14,07,15}, type = "ordinary" }) +des.region({ region = {12,12,20,13}, type = "ordinary" }) +des.region({ region = {13,17,20,18}, type = "ordinary" }) +des.region({ region = {22,09,24,10}, type = "ordinary" }) +des.region({ region = {22,12,24,12}, type = "ordinary" }) +des.region({ region = {24,16,28,18}, type = "ordinary" }) +des.region({ region = {28,11,33,12}, type = "ordinary" }) +des.region(selection.area(35,11,36,12), "lit") +des.region({ region = {38,08,41,12}, type = "ordinary" }) +des.region({ region = {43,07,49,08}, type = "ordinary" }) +des.region({ region = {43,12,49,12}, type = "ordinary" }) +des.region({ region = {44,16,51,16}, type = "ordinary" }) +des.region({ region = {53,06,59,07}, type = "ordinary" }) +des.region({ region = {61,06,71,07}, type = "ordinary" }) +des.region({ region = {55,16,59,18}, type = "ordinary" }) +des.region({ region = {63,11,68,12}, type = "ordinary" }) +des.region({ region = {70,11,72,12}, type = "ordinary" }) +-- Stairs +des.stair("up", 10,04) +des.stair("down", 73,05) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +des.door("closed",05,05) +des.door("closed",05,09) +des.door("closed",08,14) +des.door("closed",08,03) +des.door("closed",11,09) +des.door("closed",11,12) +des.door("closed",10,16) +des.door("closed",14,05) +des.door("closed",15,16) +des.door("locked",21,09) +des.door("locked",21,12) +des.door("closed",23,17) +des.door("closed",25,03) +des.door("closed",26,15) +des.door("closed",29,03) +des.door("closed",28,13) +des.door("closed",31,03) +des.door("closed",32,08) +des.door("closed",37,11) +des.door("closed",36,17) +des.door("locked",41,03) +des.door("closed",40,07) +des.door("closed",48,06) +des.door("closed",48,13) +des.door("closed",48,15) +des.door("closed",56,03) +des.door("closed",55,05) +des.door("closed",72,03) +des.door("locked",74,04) +des.door("closed",64,08) +des.door("closed",62,11) +des.door("closed",69,11) +des.door("closed",60,13) +des.door("closed",60,16) +des.door("closed",73,16) + +-- 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() +-- Toilet paper +des.object("blank paper", 71, 12) +des.object("blank paper", 71, 12) +-- Random traps - must avoid the 2 shops +local validtraps = selection.area(00,00,75,19):filter_mapchar('.') +validtraps = validtraps - (selection.area(15,03,20,05) + selection.area(62,03,71,04)) +for i = 1,9 do + des.trap(validtraps:rndcoord(1)) +end +-- Random monsters. +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("s") +des.monster("s") diff --git a/src/NetHack_3.7/dat/Tou-strt.lua b/src/NetHack_3.7/dat/Tou-strt.lua new file mode 100644 index 0000000..5c3a0bc --- /dev/null +++ b/src/NetHack_3.7/dat/Tou-strt.lua @@ -0,0 +1,134 @@ +-- NetHack Tourist Tou-strt.lua $NHDT-Date: 1652196016 2022/05/10 15:20:16 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991,92 by M. Stephenson, P. Winner +-- NetHack may be freely redistributed. See license for details. +-- +-- +-- The "start" level for the quest. +-- +-- Here you meet your (besieged) class leader, Twoflower +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor") +des.map([[ +.......}}....---------..-------------------------------------------------... +........}}...|.......|..|.-------------------------------------------...|... +.........}}..|.......|..|.|......|......|.............|......|......|...|... +..........}}.|.......|..|.|......+......+.............+......+..\...|...|... +...........}}}..........|.|......|......|.............|......|......|...|... +.............}}.........|.|----S-|--S---|S----------S-|---S--|------|...|... +..............}}}.......|...............................................|... +................}}}.....----S------++--S----------S----------S-----------... +..................}}........... .. ................................... +......-------......}}}}........}}}}..}}}}..}}}}..}}}}....................... +......|.....|.......}}}}}}..}}}} .. }}}}..}}}}..}}}..................... +......|.....+...........}}}}}}........................}}}..}}}}..}}}..}}}... +......|.....|...........................................}}}}..}}}..}}}}.}}}} +......-------............................................................... +............................................................................ +...-------......-------..................................................... +...|.....|......|.....|..................................................... +...|.....+......+.....|..................................................... +...|.....|......|.....|..................................................... +...-------......-------..................................................... +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.region({ region={14,01, 20,03}, lit=0, type="morgue", filled=1 }) +des.region(selection.area(07,10,11,12), "unlit") +des.region(selection.area(04,16,08,18), "unlit") +des.region(selection.area(17,16,21,18), "unlit") +des.region(selection.area(27,02,32,04), "unlit") +des.region(selection.area(34,02,39,04), "unlit") +des.region(selection.area(41,02,53,04), "unlit") +des.region(selection.area(55,02,60,04), "unlit") +des.region(selection.area(62,02,67,04), "lit") +-- Stairs +des.stair("down", 66,03) +-- Portal arrival point +des.levregion({ region = {68,14,68,14}, type="branch" }) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Doors +des.door("locked",31,05) +des.door("locked",36,05) +des.door("locked",41,05) +des.door("locked",52,05) +des.door("locked",58,05) +des.door("locked",28,07) +des.door("locked",39,07) +des.door("locked",50,07) +des.door("locked",61,07) +des.door("closed",33,03) +des.door("closed",40,03) +des.door("closed",54,03) +des.door("closed",61,03) +des.door("open",12,11) +des.door("open",09,17) +des.door("open",16,17) +des.door("locked",35,07) +des.door("locked",36,07) +-- Monsters on siege duty. +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("giant spider") +des.monster("s") +des.monster("s") +des.monster("forest centaur") +des.monster("forest centaur") +des.monster("forest centaur") +des.monster("forest centaur") +des.monster("forest centaur") +des.monster("forest centaur") +des.monster("forest centaur") +des.monster("forest centaur") +des.monster("C") +-- Twoflower +des.monster({ id = "Twoflower", coord = {64, 03}, inventory = function() + des.object({ id = "walking shoes", spe = 3 }); + des.object({ id = "hawaiian shirt", spe = 3 }); +end }) +-- The treasure of Twoflower +des.object("chest", 64, 03) +-- guides for the audience chamber +des.monster("guide", 29, 03) +des.monster("guide", 32, 04) +des.monster("guide", 35, 02) +des.monster("guide", 38, 03) +des.monster("guide", 45, 03) +des.monster("guide", 48, 02) +des.monster("guide", 49, 04) +des.monster("guide", 51, 03) +des.monster("guide", 57, 03) +des.monster("guide", 62, 04) +des.monster("guide", 66, 04) +-- path guards +des.monster("watchman", 35, 08) +des.monster("watchman", 36, 08) +-- river monsters +des.monster("giant eel", 62, 12) +des.monster("piranha", 47, 10) +des.monster("piranha", 29, 11) +des.monster("kraken", 34, 09) +des.monster("kraken", 37, 09) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Val-fila.lua b/src/NetHack_3.7/dat/Val-fila.lua new file mode 100644 index 0000000..8047f79 --- /dev/null +++ b/src/NetHack_3.7/dat/Val-fila.lua @@ -0,0 +1,40 @@ +-- NetHack Valkyrie Val-fila.lua $NHDT-Date: 1652196016 2022/05/10 15:20:16 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = "I" }); + +des.level_flags("mazelevel", "icedpools", "noflip") + +des.level_init({ style="mines", fg=".", bg="I", smoothed=true, joined=true, lit=1, walled=false }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("a") +des.monster({ id = "fire giant", peaceful = 0 }) +-- +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Val-filb.lua b/src/NetHack_3.7/dat/Val-filb.lua new file mode 100644 index 0000000..ede6f1e --- /dev/null +++ b/src/NetHack_3.7/dat/Val-filb.lua @@ -0,0 +1,42 @@ +-- NetHack Valkyrie Val-filb.lua $NHDT-Date: 1652196016 2022/05/10 15:20:16 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = "L" }); + +des.level_flags("mazelevel", "icedpools", "noflip") + +des.level_init({ style="mines", fg=".", bg="L", smoothed=true, joined=true, lit=1, walled=false }) + +-- +des.stair("up") +des.stair("down") +-- +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +des.object() +-- +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("a") +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +-- +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap() +des.trap() diff --git a/src/NetHack_3.7/dat/Val-goal.lua b/src/NetHack_3.7/dat/Val-goal.lua new file mode 100644 index 0000000..43179a3 --- /dev/null +++ b/src/NetHack_3.7/dat/Val-goal.lua @@ -0,0 +1,104 @@ +-- NetHack Valkyrie Val-goal.lua $NHDT-Date: 1652196017 2022/05/10 15:20:17 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.5 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = "L" }); + +des.level_flags("mazelevel", "icedpools") + +des.level_init({ style="mines", fg=".", bg="L", smoothed=true, joined=true, lit=1, walled=false }) + +des.map([[ +xxxxxx.....................xxxxxxxx +xxxxx.......LLLLL.LLLLL......xxxxxx +xxxx......LLLLLLLLLLLLLLL......xxxx +xxxx.....LLL|---------|LLL.....xxxx +xxxx....LL|--.........--|LL.....xxx +x......LL|-...LLLLLLL...-|LL.....xx +.......LL|...LL.....LL...|LL......x +......LL|-..LL.......LL..-|LL...... +......LL|.................|LL...... +......LL|-..LL.......LL..-|LL...... +.......LL|...LL.....LL...|LL....... +xx.....LL|-...LLLLLLL...-|LL......x +xxx.....LL|--.........--|LL.....xxx +xxxx.....LLL|---------|LLL...xxxxxx +xxxxx.....LLLLLLLLLLLLLLL...xxxxxxx +xxxxxx......LLLLL.LLLLL.....xxxxxxx +xxxxxxxxx..................xxxxxxxx +]]); +-- Dungeon Description +des.region(selection.area(00,00,34,16), "lit") +-- Stairs +-- Note: The up stairs are *intentionally* off of the map. +-- if the stairs are surrounded by lava, maybe give some room +des.replace_terrain({ region = {44,09, 46,11}, fromterrain='L', toterrain='.', chance=50 }); +des.stair("up", 45,10) +-- Non diggable walls +des.non_diggable(selection.area(00,00,34,16)) +-- Drawbridges; northern one opens from the south (portcullis) to further +-- north (lowered span), southern one from the north to further south +des.drawbridge({ x=17, y=02, dir="south", state="random" }) +if percent(75) then + des.drawbridge({ x=17, y=14, dir="north", state="open" }) +else + des.drawbridge({ x=17, y=14, dir="north", state="random" }) +end +-- Objects +des.object({ id = "crystal ball", x=17, y=08, buc="blessed", spe=5, name="The Orb of Fate" }) +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() +-- Traps +des.trap("board",13,08) +des.trap("board",21,08) +-- Random traps +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("board") +des.trap() +des.trap() +-- Random monsters. +des.monster("Lord Surtur", 17, 08) +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("a") +des.monster("a") +des.monster({ id = "fire giant", x=10, y=06, peaceful = 0 }) +des.monster({ id = "fire giant", x=10, y=07, peaceful = 0 }) +des.monster({ id = "fire giant", x=10, y=08, peaceful = 0 }) +des.monster({ id = "fire giant", x=10, y=09, peaceful = 0 }) +des.monster({ id = "fire giant", x=10, y=10, peaceful = 0 }) +des.monster({ id = "fire giant", x=24, y=06, peaceful = 0 }) +des.monster({ id = "fire giant", x=24, y=07, peaceful = 0 }) +des.monster({ id = "fire giant", x=24, y=08, peaceful = 0 }) +des.monster({ id = "fire giant", x=24, y=09, peaceful = 0 }) +des.monster({ id = "fire giant", x=24, y=10, peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ class = "H", peaceful = 0 }) + +-- +-- The "fill" levels for the quest. +-- +-- These levels are used to fill out any levels not occupied by specific +-- levels as defined above. "filla" is the upper filler, between the +-- start and locate levels, and "fillb" the lower between the locate +-- and goal levels. +-- diff --git a/src/NetHack_3.7/dat/Val-loca.lua b/src/NetHack_3.7/dat/Val-loca.lua new file mode 100644 index 0000000..a287583 --- /dev/null +++ b/src/NetHack_3.7/dat/Val-loca.lua @@ -0,0 +1,85 @@ +-- NetHack Valkyrie Val-loca.lua $NHDT-Date: 1652196017 2022/05/10 15:20:17 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1991-2 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "hardfloor", "icedpools", "noflip") + +des.level_init({ style="mines", fg=".", bg="I", smoothed=true, joined=false, lit=1, walled=false }) + +des.map([[ +PPPPxxxx xxxxPPPPPx +PLPxxx xPPLLLPP +PPP ....................... PPPLLP +xx ............................ PPPP +x ............................... xxxx + ................................. xx +.................................... x + ................................... +x .................................. x +xx .............................. PP +xPPP .......................... PLP +xPLLP xxPLLP +xPPPPxx xxxxPPPP +]]); +-- Dungeon Description +des.region(selection.area(00,00,39,12), "lit") +-- Stairs +des.stair("up", 48,14) +des.stair("down", 20,06) +-- Non diggable walls +des.non_diggable(selection.area(00,00,39,12)) +-- 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("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap() +des.trap() +-- Random monsters. +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("fire ant") +des.monster("a") +des.monster({ class = "H", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ id = "fire giant", peaceful = 0 }) +des.monster({ class = "H", peaceful = 0 }) + diff --git a/src/NetHack_3.7/dat/Val-strt.lua b/src/NetHack_3.7/dat/Val-strt.lua new file mode 100644 index 0000000..906500f --- /dev/null +++ b/src/NetHack_3.7/dat/Val-strt.lua @@ -0,0 +1,100 @@ +-- NetHack Valkyrie Val-strt.lua $NHDT-Date: 1652196017 2022/05/10 15:20:17 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- 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 Norn, +-- and receive your quest assignment. +-- + +des.level_flags("mazelevel", "noteleport", "hardfloor", "icedpools") +des.level_init({ style = "solidfill", fg = "I" }) + +local pools = selection.new() +-- random locations +for i = 1,13 do + pools:set(); +end +-- some bigger ones +pools = pools | selection.grow(selection.set(selection.new()), "west") +pools = pools | selection.grow(selection.set(selection.new()), "north") +pools = pools | selection.grow(selection.set(selection.new()), "random") + +-- Lava pools surrounded by water +des.terrain(pools:clone():grow("all"), "P") +des.terrain(pools, "L") + +des.map([[ +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..{..xxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.....xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..xxxxxxxxxxxxxxxxxxx +xxxxxxxx.....xxxxxxxxxxxxx|----------------|xxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxx +xxxxxxx..xxx...xxxxxxxxxxx|................|xxxxxxxxxx..xxxxxxxxxxxxxxxxxxxx +xxxxxx..xxxxxx......xxxxx.|................|.xxxxxxxxx.xxxxxxxxxxxxxxxxxxxxx +xxxxx..xxxxxxxxxxxx.......+................+...xxxxxxx.xxxxxxxxxxxxxxxxxxxxx +xxxx..xxxxxxxxx.....xxxxx.|................|.x...xxxxx.xxxxxxxxxxxxxxxxxxxxx +xxx..xxxxxxxxx..xxxxxxxxxx|................|xxxx.......xxxxxxxxxxxxxxxxxxxxx +xxxx..xxxxxxx..xxxxxxxxxxx|----------------|xxxxxxxxxx...xxxxxxxxxxxxxxxxxxx +xxxxxx..xxxx..xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxxxx +xxxxxxx......xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxx +xxxxxxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...x......xxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.........xxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.......xxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +]]); +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +-- Portal arrival point +des.levregion({ region = {66,17,66,17}, type="branch" }) +-- Stairs +des.stair("down", 18,01) +des.feature("fountain", 53,02) +-- Doors +des.door("locked",26,10) +des.door("locked",43,10) +-- Norn +des.monster({ id = "Norn", coord = {35, 10}, inventory = function() + des.object({ id = "banded mail", spe = 5 }); + des.object({ id = "long sword", spe = 4 }); +end }) +-- The treasure of the Norn +des.object("chest", 36, 10) +-- valkyrie guards for the audience chamber +des.monster("warrior", 27, 08) +des.monster("warrior", 27, 09) +des.monster("warrior", 27, 11) +des.monster("warrior", 27, 12) +des.monster("warrior", 42, 08) +des.monster("warrior", 42, 09) +des.monster("warrior", 42, 11) +des.monster("warrior", 42, 12) +-- Non diggable walls +des.non_diggable(selection.area(26,07,43,13)) +-- Random traps +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +-- Monsters on siege duty. +des.monster("fire ant", 04, 12) +des.monster("fire ant", 08, 08) +des.monster("fire ant", 14, 04) +des.monster("fire ant", 17, 11) +des.monster("fire ant", 24, 10) +des.monster("fire ant", 45, 10) +des.monster("fire ant", 54, 02) +des.monster("fire ant", 55, 07) +des.monster("fire ant", 58, 14) +des.monster("fire ant", 63, 17) +des.monster({ id = "fire giant", x=18, y=01, peaceful = 0 }) +des.monster({ id = "fire giant", x=10, y=16, peaceful = 0 }) + diff --git a/src/NetHack_3.7/dat/Wiz-fila.lua b/src/NetHack_3.7/dat/Wiz-fila.lua new file mode 100644 index 0000000..401067e --- /dev/null +++ b/src/NetHack_3.7/dat/Wiz-fila.lua @@ -0,0 +1,59 @@ +-- NetHack Wizard Wiz-fila.lua $NHDT-Date: 1652196018 2022/05/10 15:20:18 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1992 by David Cohrs +-- NetHack may be freely redistributed. See license for details. +-- +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster({ class = "i", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.monster({ class = "i", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.object() + des.monster("vampire bat") + des.monster("vampire bat") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.stair("down") + des.object() + des.trap() + des.monster({ class = "i", peaceful=0 }) + des.monster("vampire bat") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.monster({ class = "i", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.monster("vampire bat") + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Wiz-filb.lua b/src/NetHack_3.7/dat/Wiz-filb.lua new file mode 100644 index 0000000..28dc5e3 --- /dev/null +++ b/src/NetHack_3.7/dat/Wiz-filb.lua @@ -0,0 +1,58 @@ +-- NetHack Wizard Wiz-filb.lua $NHDT-Date: 1652196018 2022/05/10 15:20:18 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1992 by David Cohrs +-- NetHack may be freely redistributed. See license for details. +-- +-- +des.room({ type = "ordinary", + contents = function() + des.stair("up") + des.object() + des.monster({ class = "X", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.monster({ class = "i", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.object() + des.monster({ class = "X", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.stair("down") + des.object() + des.trap() + des.monster({ class = "i", peaceful=0 }) + des.monster("vampire bat") + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.object() + des.trap() + des.monster({ class = "i", peaceful=0 }) + end +}) + +des.room({ type = "ordinary", + contents = function() + des.object() + des.trap() + des.monster("vampire bat") + end +}) + +des.random_corridors() diff --git a/src/NetHack_3.7/dat/Wiz-goal.lua b/src/NetHack_3.7/dat/Wiz-goal.lua new file mode 100644 index 0000000..8bf8662 --- /dev/null +++ b/src/NetHack_3.7/dat/Wiz-goal.lua @@ -0,0 +1,132 @@ +-- NetHack Wizard Wiz-goal.lua $NHDT-Date: 1652196018 2022/05/10 15:20:18 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- 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"); + +des.map([[ + + + + ------------- ------------- + |...........| |...........| + -------|...........-------------------...........| + |......S...........|..|..|..|..|..|..|...........| + |......|...........|..|..|..|..|..|..|...........| + |......|...........-F+-F+-F+-F+-F+-F+-...........| + --S----|...........S.................+...........| + |......|...........-F+-F+-F+-F+-F+-F+-...........| + |......|...........|..|..|..|..|..|..|...........| + |......|...........|..|..|..|..|..|..|...........| + -------|...........-------------------...........| + |...........| |...........| + ------------- ------------- + + + + +]]); +-- Dungeon Description +des.region({ region={13,10,18,12}, lit=0, type="temple", filled=2 }) +des.region(selection.area(13,06,18,08), "lit") +des.region(selection.area(20,04,30,14), "unlit") +des.region(selection.area(32,06,33,07), "unlit") +des.region(selection.area(35,06,36,07), "unlit") +des.region(selection.area(38,06,39,07), "unlit") +des.region(selection.area(41,06,42,07), "unlit") +des.region(selection.area(44,06,45,07), "unlit") +des.region(selection.area(47,06,48,07), "unlit") +des.region(selection.area(32,09,48,09), "unlit") +des.region(selection.area(32,11,33,12), "unlit") +des.region(selection.area(35,11,36,12), "unlit") +des.region(selection.area(38,11,39,12), "unlit") +des.region(selection.area(41,11,42,12), "unlit") +des.region(selection.area(44,11,45,12), "unlit") +des.region(selection.area(47,11,48,12), "unlit") +des.region(selection.area(50,04,60,14), "lit") +-- Doors +des.door("locked",19,06) +des.door("locked",14,09) +des.door("locked",31,09) +des.door("locked",33,08) +des.door("locked",36,08) +des.door("locked",39,08) +des.door("locked",42,08) +des.door("locked",45,08) +des.door("locked",48,08) +des.door("locked",33,10) +des.door("locked",36,10) +des.door("locked",39,10) +des.door("locked",42,10) +des.door("locked",45,10) +des.door("locked",48,10) +des.door("locked",49,09) +-- Stairs +des.stair("up", 55,05) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- The altar. This is not a shrine. +des.altar({ coord={16,11}, aligned="noncoaligned", type="altar" }) +-- Objects +des.object({ id = "amulet of ESP", x=16, y=11, buc="blessed", spe=0, name="The Eye of the Aethiopica" }) +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() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Random monsters. +des.monster("Dark One", 16, 11) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "B",random, peaceful = 0 }) +des.monster({ class = "i",random, peaceful = 0 }) +des.monster({ class = "i",random, peaceful = 0 }) +des.monster({ class = "i",random, peaceful = 0 }) +des.monster({ class = "i",random, peaceful = 0 }) +des.monster({ class = "i",random, peaceful = 0 }) +des.monster({ class = "i",random, peaceful = 0 }) +des.monster({ class = "i",random, 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("vampire bat") +des.monster({ class = "i",random, peaceful = 0 }) +-- Captive Monsters in the dungeon +des.monster({ id = "rogue", x=35, y=06, peaceful=1, name="Pug" }) +des.monster({ id = "owlbear", x=47, y=06, peaceful=1, asleep=1 }) +des.monster({ id = "wizard", x=32, y=11, peaceful=1, asleep=1, name="Newt" }) +des.monster({ id = "Grey-elf", x=44, y=11, peaceful=1 }) +des.monster({ id = "hill giant", x=47, y=11, peaceful=1, asleep=1 }) +des.monster({ id = "gnomish wizard", x=38, y=06, peaceful=1 }) +des.monster({ id = "prisoner", x=35, y=11, peaceful=1 }) +des.monster({ id = "prisoner", x=41, y=11, peaceful=1, asleep=1 }) diff --git a/src/NetHack_3.7/dat/Wiz-loca.lua b/src/NetHack_3.7/dat/Wiz-loca.lua new file mode 100644 index 0000000..4522d61 --- /dev/null +++ b/src/NetHack_3.7/dat/Wiz-loca.lua @@ -0,0 +1,151 @@ +-- NetHack Wizard Wiz-loca.lua $NHDT-Date: 1652196019 2022/05/10 15:20:19 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- 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", irregular=1, + contents = function() + des.door({ state="secret", wall="random" }) + end +}) +des.region({ region={39,06,63,14}, lit=0, type="ordinary", irregular=1, + contents = function() + des.door({ state="secret", wall="random" }) + end +}) + +des.region({ region={41,08,46,12}, lit=1, type="ordinary", 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", 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", 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 }) diff --git a/src/NetHack_3.7/dat/Wiz-strt.lua b/src/NetHack_3.7/dat/Wiz-strt.lua new file mode 100644 index 0000000..96a04ba --- /dev/null +++ b/src/NetHack_3.7/dat/Wiz-strt.lua @@ -0,0 +1,107 @@ +-- NetHack Wizard Wiz-strt.lua $NHDT-Date: 1652196019 2022/05/10 15:20:19 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +-- Copyright (c) 1992 by David Cohrs +-- NetHack may be freely redistributed. See license for details. +-- +-- +-- The "start" level for the quest. +-- +-- Here you meet your (besieged) class leader, Neferet the Green +-- and receive your quest assignment. +-- +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor") + +des.map([[ +............................................................................ +.....................C....CC.C........................C..................... +..........CCC.....................CCC....................................... +........CC........-----------.......C.C...C...C....C........................ +.......C.....---------------------...C..C..C..C............................. +......C..C...------....\....------....C.....C............................... +........C...||....|.........|....||......................................... +.......C....||....|.........+....||......................................... +.......C...||---+--.........|....|||........................................ +......C....||...............|--S--||........................................ +...........||--+--|++----|---|..|.SS..........C......C...................... +........C..||.....|..|...|...|--|.||..CC..C.....C..........C................ +.......C...||.....|..|.--|.|.|....||.................C..C................... +.....C......||....|..|.....|.|.--||..C..C..........C...........}}}.......... +......C.C...||....|..-----.|.....||...C.C.C..............C....}}}}}}........ +.........C...------........|------....C..C.....C..CC.C......}}}}}}}}}}}..... +.........CC..---------------------...C.C..C.....CCCCC.C.......}}}}}}}}...... +.........C........-----------..........C.C.......CCC.........}}}}}}}}}...... +..........C.C.........................C............C...........}}}}}........ +......................CCC.C................................................. +]]); + +-- first do cloud everywhere +des.replace_terrain({ region={0,0, 75,19}, fromterrain=".", toterrain="C", chance=10 }) +-- then replace clouds inside the tower back to floor +des.replace_terrain({ region={13,5, 33,15}, fromterrain="C", toterrain=".", chance=100 }) + +-- Dungeon Description +des.region(selection.area(00,00,75,19), "lit") +des.region(selection.area(35,00,49,03), "unlit") +des.region(selection.area(43,12,49,16), "unlit") +des.region({ region={19,11,33,15}, lit=0, type="ordinary", irregular=1 }) +des.region(selection.area(30,10,31,10), "unlit") +-- Stairs +des.stair("down", 30,10) +-- Portal arrival point +des.terrain({63,06}, ".") +des.levregion({ region = {63,06,63,06}, type="branch" }) +-- Doors +des.door("closed",31,09) +des.door("closed",16,08) +des.door("closed",28,07) +des.door("locked",34,10) +des.door("locked",35,10) +des.door("closed",15,10) +des.door("locked",19,10) +des.door("locked",20,10) +-- Neferet the Green, the quest leader +des.monster({ id = "Neferet the Green", coord = {23, 05}, inventory = function() + des.object({ id = "elven cloak", spe = 5 }); + des.object({ id = "quarterstaff", spe = 5 }); +end }) +-- The treasure of the quest leader +des.object("chest", 24, 05) +-- apprentice guards for the audience chamber +des.monster("apprentice", 30, 07) +des.monster("apprentice", 24, 06) +des.monster("apprentice", 15, 06) +des.monster("apprentice", 15, 12) +des.monster("apprentice", 26, 11) +des.monster("apprentice", 27, 11) +des.monster("apprentice", 19, 09) +des.monster("apprentice", 20, 09) +-- Eels in the pond +des.monster("giant eel", 62, 14) +des.monster("giant eel", 69, 15) +des.monster("giant eel", 67, 17) +-- Non diggable walls +des.non_diggable(selection.area(00,00,75,19)) +-- Random traps +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +des.trap() +-- Monsters on siege duty. +des.monster({ class = "B", x=60, y=09, peaceful = 0 }) +des.monster({ class = "W", x=60, y=10, peaceful = 0 }) +des.monster({ class = "B", x=60, y=11, peaceful = 0 }) +des.monster({ class = "B", x=60, y=12, peaceful = 0 }) +des.monster({ class = "i", x=60, y=13, peaceful = 0 }) +des.monster({ class = "B", x=61, y=10, peaceful = 0 }) +des.monster({ class = "B", x=61, y=11, peaceful = 0 }) +des.monster({ class = "B", x=61, y=12, peaceful = 0 }) +des.monster({ class = "B", x=35, y=03, peaceful = 0 }) +des.monster({ class = "i", x=35, y=17, peaceful = 0 }) +des.monster({ class = "B", x=36, y=17, peaceful = 0 }) +des.monster({ class = "B", x=34, y=16, peaceful = 0 }) +des.monster({ class = "i", x=34, y=17, peaceful = 0 }) +des.monster({ class = "W", x=67, y=02, peaceful = 0 }) +des.monster({ class = "B", x=10, y=19, peaceful = 0 }) diff --git a/src/NetHack_3.7/dat/air.lua b/src/NetHack_3.7/dat/air.lua new file mode 100644 index 0000000..af27b86 --- /dev/null +++ b/src/NetHack_3.7/dat/air.lua @@ -0,0 +1,108 @@ +-- NetHack endgame air.lua $NHDT-Date: 1652196019 2022/05/10 15:20:19 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- 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", "shortsighted", "stormy") +-- The following messages are somewhat obtuse, to make then +-- equally meaningful if the player can see or not. +des.message("What a strange feeling!") +des.message("You notice that there is no gravity here.") +-- The player lands, upon arrival, in the +-- lower-left area. The location of the +-- portal to the next level is randomly chosen. +-- This map has no visible outer boundary, and +-- is all "air". +des.map([[ +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA +]]); +-- Use up and down regions to partition the level into three parts; +-- teleportation can't cross from one part into another. +-- The up region is where you'll arrive after activating the portal from +-- the preceding level; the exit portal is placed inside the down region. +des.teleport_region({ region = {01,00,24,20}, region_islev = 1, exclude = {25,00,79,20}, exclude_islev=1, dir="up" }) +des.teleport_region({ region = {56,00,79,20}, region_islev = 1, exclude = {01,00,55,20}, exclude_islev=1, dir="down" }) + +-- des.portal(levregion(57,01,78,19),(0,0,0,0),"fire") +des.levregion({ region = {57,01,78,19}, region_islev=1, type="portal", name="fire" }); +des.region(selection.area(00,00,75,19),"lit") +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) +des.monster({ id = "air elemental", peaceful = 0 }) + +des.monster({ id = "floating eye", peaceful = 0 }) +des.monster({ id = "floating eye", peaceful = 0 }) +des.monster({ id = "floating eye", peaceful = 0 }) + +des.monster({ id = "yellow light", peaceful = 0 }) +des.monster({ id = "yellow light", peaceful = 0 }) +des.monster({ id = "yellow light", peaceful = 0 }) + +des.monster("couatl") + +des.monster("D") +des.monster("D") +des.monster("D") +des.monster("D") +des.monster("D") + +des.monster("E") +des.monster("E") +des.monster("E") +des.monster("J") +des.monster("J") + +des.monster({ id = "djinni", peaceful = 0 }) +des.monster({ id = "djinni", peaceful = 0 }) +des.monster({ id = "djinni", peaceful = 0 }) + +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "fog cloud", peaceful = 0 }) +des.monster({ id = "energy vortex", peaceful = 0 }) +des.monster({ id = "energy vortex", peaceful = 0 }) +des.monster({ id = "energy vortex", peaceful = 0 }) +des.monster({ id = "energy vortex", peaceful = 0 }) +des.monster({ id = "energy vortex", peaceful = 0 }) +des.monster({ id = "steam vortex", peaceful = 0 }) +des.monster({ id = "steam vortex", peaceful = 0 }) +des.monster({ id = "steam vortex", peaceful = 0 }) +des.monster({ id = "steam vortex", peaceful = 0 }) +des.monster({ id = "steam vortex", peaceful = 0 }) + diff --git a/src/NetHack_3.7/dat/asmodeus.lua b/src/NetHack_3.7/dat/asmodeus.lua new file mode 100644 index 0000000..c860e3c --- /dev/null +++ b/src/NetHack_3.7/dat/asmodeus.lua @@ -0,0 +1,96 @@ +-- NetHack gehennom asmodeus.lua $NHDT-Date: 1652196020 2022/05/10 15:20:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- 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") + +local tmpbounds = selection.match("-"); +local bnds = tmpbounds:bounds(); +local bounds2 = selection.fillrect(bnds.lx, bnds.ly + 1, bnds.hx - 2, bnds.hy - 1); + +-- First part +local asmo1 = des.map({ halign = "half-left", valign = "center", map = [[ +--------------------- +|.............|.....| +|.............S.....| +|---+------------...| +|.....|.........|-+-- +|..---|.........|.... +|..|..S.........|.... +|..|..|.........|.... +|..|..|.........|-+-- +|..|..-----------...| +|..S..........|.....| +--------------------- +]], contents = function(rm) + -- Doors + des.door("closed",04,03) + des.door("locked",18,04) + des.door("closed",18,08) + -- + des.stair("down", 13,07) + -- Non diggable walls + des.non_diggable(selection.area(00,00,20,11)) + -- Entire main area + des.region(selection.area(01,01,20,10),"unlit") + -- The fellow in residence + des.monster("Asmodeus",12,07) + -- Some random weapons and armor. + des.object("[") + des.object("[") + des.object(")") + des.object(")") + des.object("*") + des.object("!") + des.object("!") + des.object("?") + des.object("?") + des.object("?") + -- Some traps. + des.trap("spiked pit", 05,02) + des.trap("fire", 08,06) + des.trap("sleep gas") + des.trap("anti magic") + des.trap("fire") + des.trap("magic") + des.trap("magic") + -- Random monsters. + des.monster("ghost",11,07) + des.monster("horned devil",10,05) + des.monster("L") + -- Some Vampires for good measure + des.monster("V") + des.monster("V") + des.monster("V") +end }); + +des.levregion({ region={01,00,6,20}, region_islev=1, exclude={6,1,70,16}, exclude_islev=1, type="stair-up" }); + +des.levregion({ region={01,00,6,20}, region_islev=1, exclude={6,1,70,16}, exclude_islev=1, type="branch" }); +des.teleport_region({ region = {01,00,6,20}, region_islev=1, exclude={6,1,70,16}, exclude_islev=1 }) + +-- Second part +local asmo2 = des.map({ halign = "half-right", valign = "center", map = [[ +--------------------------------- +................................| +................................+ +................................| +--------------------------------- +]], contents = function(rm) + des.mazewalk(32,02,"east") + -- Non diggable walls + des.non_diggable(selection.area(00,00,32,04)) + des.door("closed",32,02) + des.monster("&") + des.monster("&") + des.monster("&") + des.trap("anti magic") + des.trap("fire") + des.trap("magic") +end }); + +local protected = bounds2:negate() | asmo1 | asmo2; +hell_tweaks(protected); diff --git a/src/NetHack_3.7/dat/astral.lua b/src/NetHack_3.7/dat/astral.lua new file mode 100644 index 0000000..f0ba895 --- /dev/null +++ b/src/NetHack_3.7/dat/astral.lua @@ -0,0 +1,187 @@ +-- NetHack endgame astral.lua $NHDT-Date: 1652196020 2022/05/10 15:20:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.7 $ +-- 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 cleric",x=18,y=09,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",x=19,y=08,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",x=19,y=09,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",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 cleric",x=36,y=12,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",x=37,y=12,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",x=38,y=12,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",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 cleric",x=56,y=09,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",x=55,y=08,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",x=55,y=09,align="noalign", peaceful=0 }) +des.monster({ id = "aligned cleric",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 cleric",x=12,y=07,align="chaos", peaceful=0 }) +des.monster({ id = "aligned cleric",x=13,y=07,align="chaos",peaceful=1 }) +des.monster({ id = "aligned cleric",x=14,y=07,align="law", peaceful=0 }) +des.monster({ id = "aligned cleric",x=12,y=11,align="law",peaceful=1 }) +des.monster({ id = "aligned cleric",x=13,y=11,align="neutral", peaceful=0 }) +des.monster({ id = "aligned cleric",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 cleric",x=32,y=09,align="chaos", peaceful=0 }) +des.monster({ id = "aligned cleric",x=33,y=09,align="chaos",peaceful=1 }) +des.monster({ id = "aligned cleric",x=34,y=09,align="law", peaceful=0 }) +des.monster({ id = "aligned cleric",x=40,y=09,align="law",peaceful=1 }) +des.monster({ id = "aligned cleric",x=41,y=09,align="neutral", peaceful=0 }) +des.monster({ id = "aligned cleric",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 cleric",x=60,y=07,align="chaos", peaceful=0 }) +des.monster({ id = "aligned cleric",x=61,y=07,align="chaos",peaceful=1 }) +des.monster({ id = "aligned cleric",x=62,y=07,align="law", peaceful=0 }) +des.monster({ id = "aligned cleric",x=60,y=11,align="law",peaceful=1 }) +des.monster({ id = "aligned cleric",x=61,y=11,align="neutral", peaceful=0 }) +des.monster({ id = "aligned cleric",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 }) diff --git a/src/NetHack_3.7/dat/baalz.lua b/src/NetHack_3.7/dat/baalz.lua new file mode 100644 index 0000000..233c26c --- /dev/null +++ b/src/NetHack_3.7/dat/baalz.lua @@ -0,0 +1,66 @@ +-- NetHack gehennom baalz.lua $NHDT-Date: 1652196020 2022/05/10 15:20:20 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $ +-- 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 = "solidfill", fg = " ", lit = 0 }); + +-- TODO FIXME: see baalz_fixup - the legs get removed currently. + +des.level_flags("mazelevel", "corrmaze") +-- the two pools are fakes used to mark spots which need special wall fixups +-- the two iron bars are eyes and spots to their left will be made diggable +des.map({ halign = "right", valign = "center", map = [[ +------------------------------------------------- +| ---- ---- +| ---- | ----------- | +| ------ | ---------|.........|--P +| F....| -------|...........-------------- +---....|--|..................S............|---- ++...--....S..----------------|............S...| +---....|--|..................|............|---- +| F....| -------|...........-----S-------- +| ------ | ---------|.........|--P +| ---- | ----------- | +| ---- ---- +------------------------------------------------- +]] }); +des.levregion({ region = {01,00,15,20}, region_islev=1, exclude={15,1,70,16}, exclude_islev=1, type="stair-up" }) +des.levregion({ region = {01,00,15,20}, region_islev=1, exclude={15,1,70,16}, exclude_islev=1, type="branch" }) +des.teleport_region({region = {01,00,15,20}, region_islev=1, exclude = {15,1,70,16}, exclude_islev=1 }) +-- this actually leaves the farthest right column diggable +des.non_diggable(selection.area(00,00,47,12)) +des.mazewalk(00,06,"west") +des.stair("down", 44,06) +des.door("locked",00,06) +-- The fellow in residence +des.monster("Baalzebub",35,06) +-- Some random weapons and armor. +des.object("[") +des.object("[") +des.object(")") +des.object(")") +des.object("*") +des.object("!") +des.object("!") +des.object("?") +des.object("?") +des.object("?") +-- Some traps. +des.trap("spiked pit") +des.trap("fire") +des.trap("sleep gas") +des.trap("anti magic") +des.trap("fire") +des.trap("magic") +des.trap("magic") +-- Random monsters. +des.monster("ghost",37,07) +des.monster("horned devil",32,05) +des.monster("barbed devil",38,07) +des.monster("L") +-- Some Vampires for good measure +des.monster("V") +des.monster("V") +des.monster("V") + diff --git a/src/NetHack_3.7/dat/bigrm-1.lua b/src/NetHack_3.7/dat/bigrm-1.lua new file mode 100644 index 0000000..a4003aa --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-1.lua @@ -0,0 +1,73 @@ +-- NetHack bigroom bigrm-1.lua $NHDT-Date: 1652196021 2022/05/10 15:20:21 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.3 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel", "noflip"); + +des.map([[ +--------------------------------------------------------------------------- +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +--------------------------------------------------------------------------- +]]); + + +if percent(75) then + local terrains = { "-", "F", "L", "T", "C" }; + local tidx = math.random(1, #terrains); + local choice = math.random(0, 4); + if choice == 0 then + -- one horizontal line + des.terrain(selection.line(10,8, 65,8), terrains[tidx]); + elseif choice == 1 then + -- two vertical lines + local sel = selection.line(15,4, 15, 13) | selection.line(59,4, 59, 13); + des.terrain(sel, terrains[tidx]); + elseif choice == 2 then + -- plus sign + local sel = selection.line(10,8, 64, 8) | selection.line(37,3, 37, 14); + des.terrain(sel, terrains[tidx]); + elseif choice == 3 then + -- brackets: [ ] + des.terrain(selection.rect(4,4, 70,13), terrains[tidx]); + local sel = selection.line(25,4, 50,4) | selection.line(25,13, 50,13); + des.terrain(sel, '.'); + else + -- nothing + end +end + +des.region(selection.area(01,01, 73, 16), "lit"); + +des.stair("up"); +des.stair("down"); + +des.non_diggable(); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +for i = 1,28 do + des.monster(); +end diff --git a/src/NetHack_3.7/dat/bigrm-10.lua b/src/NetHack_3.7/dat/bigrm-10.lua new file mode 100644 index 0000000..dc51c1e --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-10.lua @@ -0,0 +1,61 @@ +-- NetHack bigroom bigrm-10.lua $NHDT-Date: 1652196024 2022/05/10 15:20:24 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel", "noflip"); + +des.map([[ +....................................................................... +....................................................................... +....................................................................... +....................................................................... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +...CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC... +...C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C... +....................................................................... +....................................................................... +....................................................................... +....................................................................... +]]); + +if percent(40) then + -- occasionally it's not a fog maze + local terrain = { "L", "}", "T", "-", "F" }; + local tidx = math.random(1, #terrain); + -- break it up a bit + des.replace_terrain({ region={0, 0, 70, 18}, fromterrain="C", toterrain=".", chance=5 }); + des.replace_terrain({ region={0, 0, 70, 18}, fromterrain="C", toterrain=terrain[tidx] }); +end; + +des.region(selection.area(00,00,70,18), "lit"); + +-- when falling down on this level, never end up in the fog maze +des.teleport_region({ region = {00,00,70,18}, exclude = {02,03,68,15}, dir = "down" }); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +for i = 1,28 do + des.monster(); +end + +des.mazewalk({ x=4, y=2, dir="south", stocked=0 }); + +-- Stairs up, not in the fog maze +des.levregion({ region = {00,00,70,18}, exclude = {02,03,68,15}, type="stair-up"}); +des.stair("down"); diff --git a/src/NetHack_3.7/dat/bigrm-11.lua b/src/NetHack_3.7/dat/bigrm-11.lua new file mode 100644 index 0000000..db9bcdc --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-11.lua @@ -0,0 +1,39 @@ +-- NetHack bigroom bigrm-11.lua $NHDT-Date: 1652196024 2022/05/10 15:20:24 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.0 $ +-- Copyright (c) 2021 by Pasi Kallinen +-- NetHack may be freely redistributed. See license for details. +-- +-- Boulder "maze" with wide corridors + +function t_or_f() return percent(50) and true or false; end + +des.level_flags("mazelevel", "noflip"); +des.level_init({ style = "maze", corrwid = 3 + nh.rn2(3), wallthick = 1, deadends=t_or_f() }); + +des.region(selection.area(00,00,75,18), "lit"); +des.non_diggable(); + +function replace_wall_boulder(x,y) + des.terrain(x, y, "."); + des.object("boulder", x, y); +end + +-- replace horizontal and vertical walls +local sel = selection.match([[.w.]]) | selection.match(".\nw\n."); +sel:iterate(replace_wall_boulder); +-- replace the leftover corner walls +local sel = selection.match([[.w.]]); +sel:iterate(replace_wall_boulder); + +des.stair("up"); +des.stair("down"); + +for i = 1,15 do + des.object(); +end +for i = 1,6 do + des.trap("rolling boulder"); +end +for i = 1,28 do + des.monster(); +end + diff --git a/src/NetHack_3.7/dat/bigrm-2.lua b/src/NetHack_3.7/dat/bigrm-2.lua new file mode 100644 index 0000000..53c3e10 --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-2.lua @@ -0,0 +1,71 @@ +-- NetHack bigroom bigrm-2.lua $NHDT-Date: 1652196021 2022/05/10 15:20:21 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel", "noflip"); + +des.map([[ +--------------------------------------------------------------------------- +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +--------------------------------------------------------------------------- +]]); +-- Dungeon Description +des.region(selection.area(01,01,73,16),"lit"); + +local darkness; + +local choice = math.random(0, 3) +if choice == 0 then + darkness = selection.area(01,07,22,09) + | selection.area(24,01,50,05) + | selection.area(24,11,50,16) + | selection.area(52,07,73,09); +elseif choice == 1 then + darkness = selection.area(24,01,50,16); +elseif choice == 2 then + darkness = selection.area(01,01,22,16) + | selection.area(52,01,73,16); +end + +if darkness ~= nil then + des.region(darkness,"unlit"); + if percent(25) then + des.replace_terrain({ selection = darkness:grow(), + fromterrain = ".", toterrain = "I" }); + end +end + +-- Stairs +des.stair("up"); +des.stair("down"); +-- Non diggable walls +des.non_diggable(); +-- Objects +for i = 1,15 do + des.object(); +end +-- Random traps +for i = 1,6 do + des.trap(); +end +-- Random monsters. +for i = 1,28 do + des.monster(); +end diff --git a/src/NetHack_3.7/dat/bigrm-3.lua b/src/NetHack_3.7/dat/bigrm-3.lua new file mode 100644 index 0000000..ee7e0f3 --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-3.lua @@ -0,0 +1,83 @@ +-- NetHack bigroom bigrm-3.lua $NHDT-Date: 1652196021 2022/05/10 15:20:21 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel", "noflip"); + +des.map([[ +--------------------------------------------------------------------------- +|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|..............---.......................................---..............| +|...............|.........................................|...............| +|.....|.|.|.|.|---|.|.|.|.|...................|.|.|.|.|.|---|.|.|.|.|.....| +|.....|-------- --------|...................|---------- --------|.....| +|.....|.|.|.|.|---|.|.|.|.|...................|.|.|.|.|.|---|.|.|.|.|.....| +|...............|.........................................|...............| +|..............---.......................................---..............| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.........................................................................| +|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.|.| +--------------------------------------------------------------------------- +]]); + +-- Dungeon Description +des.region(selection.area(01,01,73,16), "lit"); + +-- replace some walls +if percent(66) then + local sel = selection.match("[.w.]"); + local terrains = { "F", "T", "W", "Z" }; + local choice = terrains[math.random(1, #terrains)]; + des.terrain(sel, choice); +end + +-- Stairs +des.stair("up"); +des.stair("down"); + +-- Non diggable walls +des.non_diggable(); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +des.monster({ x = 01, y = 01 }); +des.monster({ x = 13, y = 01 }); +des.monster({ x = 25, y = 01 }); +des.monster({ x = 37, y = 01 }); +des.monster({ x = 49, y = 01 }); +des.monster({ x = 61, y = 01 }); +des.monster({ x = 73, y = 01 }); +des.monster({ x = 07, y = 07 }); +des.monster({ x = 13, y = 07 }); +des.monster({ x = 25, y = 07 }); +des.monster({ x = 37, y = 07 }); +des.monster({ x = 49, y = 07 }); +des.monster({ x = 61, y = 07 }); +des.monster({ x = 67, y = 07 }); +des.monster({ x = 07, y = 09 }); +des.monster({ x = 13, y = 09 }); +des.monster({ x = 25, y = 09 }); +des.monster({ x = 37, y = 09 }); +des.monster({ x = 49, y = 09 }); +des.monster({ x = 61, y = 09 }); +des.monster({ x = 67, y = 09 }); +des.monster({ x = 01, y = 16 }); +des.monster({ x = 13, y = 16 }); +des.monster({ x = 25, y = 16 }); +des.monster({ x = 37, y = 16 }); +des.monster({ x = 49, y = 16 }); +des.monster({ x = 61, y = 16 }); +des.monster({ x = 73, y = 16 }); diff --git a/src/NetHack_3.7/dat/bigrm-4.lua b/src/NetHack_3.7/dat/bigrm-4.lua new file mode 100644 index 0000000..777eeb3 --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-4.lua @@ -0,0 +1,59 @@ +-- NetHack bigroom bigrm-4.lua $NHDT-Date: 1652196022 2022/05/10 15:20:22 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel", "noflip"); + +des.map([[ +----------- ----------- +|.........| |.........| +|.........|-----------| |-----------|.........| +|-|...................|----------| |----------|...................|-| + -|.............................|-------|.............................|- + -|.................................................................|- + -|...............................................................|- + -|......LLLLL.......................................LLLLL......|- + -|.....LLLLL.......................................LLLLL.....|- + -|.....LLLLL.......................................LLLLL.....|- + -|......LLLLL.......................................LLLLL......|- + -|...............................................................|- + -|.................................................................|- + -|.............................|-------|.............................|- +|-|...................|----------| |----------|...................|-| +|.........|-----------| |-----------|.........| +|.........| |.........| +----------- ----------- +]]); + +local terrains = { ".", ".", ".", ".", "P", "L", "-", "T", "W", "Z" }; +local tidx = math.random(1, #terrains); +local toterr = terrains[tidx]; +if (toterr ~= "L") then + des.replace_terrain({ fromterrain = "L", toterrain = toterr }); +end + +des.feature("fountain", 05,02); +des.feature("fountain", 05,15); +des.feature("fountain", 69,02); +des.feature("fountain", 69,15); + +des.region(selection.area(01,01,73,16), "lit"); + +des.stair("up"); +des.stair("down"); + +des.non_diggable(); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +for i = 1,28 do + des.monster(); +end diff --git a/src/NetHack_3.7/dat/bigrm-5.lua b/src/NetHack_3.7/dat/bigrm-5.lua new file mode 100644 index 0000000..3e40812 --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-5.lua @@ -0,0 +1,54 @@ +-- NetHack bigroom bigrm-5.lua $NHDT-Date: 1652196022 2022/05/10 15:20:22 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel", "noflip"); + +des.map([[ + ------------------ + ---------................--------- + -------................................------- + ------............................................------ + ----......................................................---- + ---............................................................--- + ---................................................................--- +---....................................................................--- +|........................................................................| +|........................................................................| +|........................................................................| +---....................................................................--- + ---................................................................--- + ---............................................................--- + ----......................................................---- + ------............................................------ + -------................................------- + ---------................--------- + ------------------ +]]); + + +if percent(25) then + local sel = selection.match("."):percentage(2):grow(); + des.replace_terrain({ selection=sel, fromterrain=".", toterrain=percent(50) and "I" or "C" }); +end + +des.region(selection.area(00,00,72,18), "lit"); + +des.stair("up"); +des.stair("down"); + +des.non_diggable(); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +for i = 1,28 do + des.monster(); +end diff --git a/src/NetHack_3.7/dat/bigrm-6.lua b/src/NetHack_3.7/dat/bigrm-6.lua new file mode 100644 index 0000000..f67cc16 --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-6.lua @@ -0,0 +1,48 @@ +-- NetHack bigroom bigrm-6.lua $NHDT-Date: 1652196022 2022/05/10 15:20:22 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel", "noflip"); + +des.map([[ + --------- --------- --------- --------- + ---.......--- ---.......--- ---.......--- ---.......--- + --...........-- --...........-- --...........-- --...........-- + --.............-- --.............-- --.............-- --.............-- + -...............- -...............- -...............- -...............- +|-...............---...............---...............---...............-- +|.................-.................-.................-.................| +|........T.................T.................T.................T........| +|.......................................................................| +|......T.{.....................................................{.T......| +|.......................................................................| +|........T.................T.................T.................T........| +|.................-.................-.................-.................| +--...............---...............---...............---...............-- + -...............- -...............- -...............- -...............- + --.............-- --.............-- --.............-- --.............-- + --...........-- --...........-- --...........-- --...........-- + ---.......--- ---.......--- ---.......--- ---.......--- + --------- --------- --------- --------- +]]); + +des.region(selection.area(01,01,72,17), "lit"); + +des.stair("up"); +des.stair("down"); + +des.non_diggable(); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +for i = 1,28 do + des.monster(); +end diff --git a/src/NetHack_3.7/dat/bigrm-7.lua b/src/NetHack_3.7/dat/bigrm-7.lua new file mode 100644 index 0000000..6dc828c --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-7.lua @@ -0,0 +1,52 @@ +-- NetHack bigroom bigrm-7.lua $NHDT-Date: 1652196023 2022/05/10 15:20:23 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.0 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel"); + +des.map([[ + ----- + ---------...--- + ---------.........L...--- + ---------.......................--- + ---------.................................--- + ---------...........................................--- + ---------.....................................................--- +|--------...............................................................--| +|.........................................................................| +|.L.....................................................................L.| +|.........................................................................| +|--...............................................................--------| + ---.....................................................--------- + ---...........................................--------- + ---.................................--------- + ---.......................--------- + ---...L.........--------- + ---...--------- + ----- +]]); + +local terrain = { "L", "T", "{", "." }; +local tidx = math.random(1, #terrain); +des.replace_terrain({ region={00,00, 74,18}, fromterrain="L", toterrain=terrain[tidx] }); + +des.region(selection.area(01,01,73,17), "lit"); + +des.stair("up"); +des.stair("down"); + +des.non_diggable(); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +for i = 1,28 do + des.monster(); +end diff --git a/src/NetHack_3.7/dat/bigrm-8.lua b/src/NetHack_3.7/dat/bigrm-8.lua new file mode 100644 index 0000000..f851411 --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-8.lua @@ -0,0 +1,53 @@ +-- NetHack bigroom bigrm-8.lua $NHDT-Date: 1652196023 2022/05/10 15:20:23 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel"); + +des.map([[ +---------------------------------------------- +|............................................--- +--.............................................--- + ---......................................FF.....--- + ---...................................FF........--- + ---................................FF...........--- + ---.............................FF..............--- + ---..........................FF.................--- + ---.......................FF....................--- + ---....................FF.......................--- + ---.................FF..........................--- + ---..............FF.............................--- + ---...........FF................................---- + ---........FF...................................--- + ---.....FF......................................--- + ---.............................................-- + ---............................................| + ---------------------------------------------- +]]); + +if percent(40) then + local terrain = { "L", "}", "T", ".", "-", "C" }; + local tidx = math.random(1, #terrain); + des.replace_terrain({ region={00,00, 74,17}, fromterrain="F", toterrain=terrain[tidx] }); +end; + +des.region(selection.area(01,01,73,16), "lit"); + +des.stair("up"); +des.stair("down"); + +des.non_diggable(); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +for i = 1,28 do + des.monster(); +end diff --git a/src/NetHack_3.7/dat/bigrm-9.lua b/src/NetHack_3.7/dat/bigrm-9.lua new file mode 100644 index 0000000..e465436 --- /dev/null +++ b/src/NetHack_3.7/dat/bigrm-9.lua @@ -0,0 +1,52 @@ +-- NetHack bigroom bigrm-9.lua $NHDT-Date: 1652196023 2022/05/10 15:20:23 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- Copyright (c) 1990 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +des.level_init({ style = "solidfill", fg = " " }); +des.level_flags("mazelevel", "noflip"); + +des.map([[ +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}................}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}................................}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}............................................}}}}}}}}}}}}}}} +}}}}}}}}}}......................................................}}}}}}}}}} +}}}}}}}............................................................}}}}}}} +}}}}}.......................LLLLLLLLLLLLLLLLLL.......................}}}}} +}}}....................LLLLLLLLLLLLLLLLLLLLLLLLLLL.....................}}} +}....................LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................} +}....................LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................} +}....................LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL....................} +}}}....................LLLLLLLLLLLLLLLLLLLLLLLLLLL.....................}}} +}}}}}.......................LLLLLLLLLLLLLLLLLL.......................}}}}} +}}}}}}}............................................................}}}}}}} +}}}}}}}}}}......................................................}}}}}}}}}} +}}}}}}}}}}}}}}}............................................}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}................................}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}................}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}} +]]); + +-- Unlit, except 3 mapgrids around the "pupil" +des.region(selection.area(00,00,73,18),"unlit"); +des.region(selection.area(26,04,47,14),"lit"); +des.region(selection.area(21,05,51,13),"lit"); +des.region(selection.area(19,06,54,12),"lit"); + +des.stair("up"); +des.stair("down"); + +des.non_diggable(); + +for i = 1,15 do + des.object(); +end + +for i = 1,6 do + des.trap(); +end + +for i = 1,28 do + des.monster(); +end diff --git a/src/NetHack_3.7/dat/bogusmon.txt b/src/NetHack_3.7/dat/bogusmon.txt new file mode 100644 index 0000000..8b53352 --- /dev/null +++ b/src/NetHack_3.7/dat/bogusmon.txt @@ -0,0 +1,548 @@ +# NetHack 3.7 bogusmon.txt $NHDT-Date: 1596498237 2020/08/03 23:43:57 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.10 $ +# Copyright (c) 2016 by Pasi Kallinen +# NetHack may be freely redistributed. See license for details. +# +# Hallucinatory monsters +# +# +# prefix codes: +# dash - female, personal name +# underscore _ female, general name +# plus + male, personal name +# vertical bar | male, general name +# equals = gender not specified, personal name + +# misc. +jumbo shrimp +giant pigmy +gnu +killer penguin +giant cockroach +giant slug +maggot +pterodactyl +tyrannosaurus rex +basilisk +beholder +nightmare +efreeti +marid +rot grub +bookworm +master lichen +shadow +hologram +jester +attorney +sleazoid +killer tomato +amazon +robot +battlemech +rhinovirus +harpy +lion-dog +rat-ant +Y2K bug +angry mariachi +arch-pedant +bluebird of happiness +cardboard golem +duct tape golem +diagonally moving grid bug +evil overlord +newsgroup troll +ninja pirate zombie robot +octarine dragon +plaid unicorn +gonzo journalist +lag monster +loan shark +possessed waffle iron +poultrygeist +stuffed raccoon puppet +viking +wee green blobbie +wereplatypus +hag of bolding +blancmange +raging nerd +spelling bee +land octopus +frog prince +pigasus +_Semigorgon +conventioneer +large microbat +small megabat +uberhulk +tofurkey ++Dudley +shrinking violet +shallow one +spherical cow +electric giraffe +steam dragon +omnibus +slinky +maxotaur +millitaur +octahedron +dungeon core +quale +holloway +chiasmus +giant tetrapod +voussoir +barking spider +frog cloud +toothsayer + +# Quendor (Zork, &c.) +grue +Christmas-tree monster +luck sucker +paskald +brogmoid +dornbeast + +# Moria +Ancient Multi-Hued Dragon ++Evil Iggy + +# Rogue V5 http://rogue.rogueforge.net/vade-mecum/ +rattlesnake +ice monster +phantom +quagga +aquator +griffin +emu +kestrel +xeroc +venus flytrap + +# Wizardry +creeping coins + +# Greek legend +hydra +siren + +# Monty Python +killer bunny + +# The Princess Bride +rodent of unusual size + +# Wallace & Gromit +were-rabbit + +# "Only you can prevent forest fires! ++Smokey Bear + +# Discworld +Luggage +vampiric watermelon + +# Lord of the Rings +Ent + +# Xanth +tangle tree +nickelpede +wiggle + +# Lewis Carroll +white rabbit +snark + +# Dr. Dolittle +pushmi-pullyu + +# The Smurfs +smurf + +# Star Trek +tribble +Klingon +Borg + +# Star Wars +Ewok + +# Tonari no Totoro +Totoro + +# Nausicaa +ohmu + +# Sailor Moon +youma + +# Pokemon (Meowth) +nyaasu + +# monster movies +-Godzilla ++King Kong + +# old L of SH +earthquake beast + +# Robotech +Invid + +# The Terminator +Terminator + +# Bubblegum Crisis +boomer + +# Dr. Who ("Exterminate!") +Dalek + +# HGttG +microscopic space fleet +Ravenous Bugblatter Beast of Traal + +# The Tough Guide to Fantasyland +leathery-winged avian + +# TMNT +teenage mutant ninja turtle + +# Usagi Yojimbo +samurai rabbit + +# Cerebus +aardvark + +# Little Shop of Horrors +=Audrey II + +# 50's rock 'n' roll +witch doctor +one-eyed one-horned flying purple people eater + +# saccharine kiddy TV ++Barney the dinosaur + +# Angband ++Morgoth + +# Babylon 5 +Vorlon + +# King Arthur +questing beast + +# Movie +Predator + +# Harry Potter +dementor + +# common pest +mother-in-law + +# Actual creatures +praying mantis +beluga whale +chicken +coelacanth +star-nosed mole +lungfish +slow loris +sea cucumber +tapeworm +liger +velociraptor +corpulent porpoise +quokka +potoo +lemming +dhole + +# european cryptids +wolpertinger +elwedritsche +skvader ++Nessie +tatzelwurm +dahu + +# fictitious beasts +dropbear +wild haggis +jackalope +flying monkey +flying pig +hippocampus +hippogriff +kelpie +catoblepas +phoenix +amphisbaena + +# Unusually animate body parts +bouncing eye +floating nose +wandering eye + +# Computerese +buffer overflow +dangling pointer +walking disk drive +floating point +regex engine +netsplit +wiki +peer +COBOL +wire shark + +# bugs +bohrbug +mandelbug +schroedinbug +heisenbug + +# DooM +cacodemon +scrag + +# MST3K ++Crow T. Robot + +# Items and stuff +chess pawn +chocolate pudding +ooblecks +terracotta warrior +hearse +roomba +miniature blimp +dust speck + +# DnD monster +gazebo + +# SciFi elements +gray goo +magnetic monopole +first category perpetual motion device +big dumb object + +# Ultima ++Lord British + +# They Might Be Giants +particle man + +# Robot Finds Kitten +kitten prospecting robot + +# Typography +guillemet +solidus +obelus +dingbat +bold face +boustrophedon +ligature +rebus +dinkus + +# Their actual character +apostrophe golem +voluptuous ampersand + +# Web comics and animation ++Bob the angry flower ++Strong Bad ++Magical Trevor + +# Girl Genius +smakken +mimmoth + +# KoL +one-winged dewinged stab-bat + +# deities +Invisible Pink Unicorn +Flying Spaghetti Monster + +# Monkey Island +three-headed monkey ++El Pollo Diablo + +# modern folklore +little green man + +# Portal +weighted Companion Cube + +# /b/ +/b/tard + +# South Park +manbearpig + +# internet memes +bonsai-kitten +tie-thulu ++Domo-kun +looooooooooooong cat +nyan cat + +# the Internet is made for cat pix +ceiling cat +basement cat +monorail cat + +# POWDER +tridude + +# Radomir Dopieralski +orcus cosmicus + +# Angband +yeek +quylthulg +Greater Hell Beast + +# Souljazz ++Vendor of Yizard + +# Dungeon Crawl Stone Soup ++Sigmund +lernaean hydra +-Ijyb +=Gloorx Vloq ++Blork the orc + +# Wil Wheaton, John Scalzi +unicorn pegasus kitten + +# Minecraft +enderman + +# Pun +wight supremacist + +# Starcraft 2 +zergling + +# Feelings +existential angst +figment of your imagination +flash of insight + +# Fish +ghoti + +# Roald Dahl +vermicious knid + +# Carcassonne +meeple + +# The Wombles +womble + +# Fraggle Rock +fraggle + +# Harry Harrison +stainless steel rat + +# The Culture +antagonistic undecagonstring + +# Spoonerism +mock role + +# Truly scary things +clown +mime +peddler +haggler + +# soundex and typos of monsters +gloating eye +flush golem +martyr orc +mortar orc +acid blog +acute blob +aria elemental +aliasing priest +aligned parasite +aligned parquet +aligned proctor +baby balky dragon +baby blues dragon +baby caricature +baby crochet +baby grainy dragon +baby bong worm +baby long word +baby parable worm +barfed devil +beer wight +boor wight +brawny mold +rave spider +clue golem +bust vortex +errata elemental +elastic eel +electrocardiogram eel +fir elemental +tire elemental +flamingo sphere +fallacy golem +frizzed centaur +forest centerfold +fierceness sphere +frosted giant +geriatric snake +gnat ant +giant bath +grant beetle +greater snake +grind bug +giant mango +glossy golem +gnome laureate +gnome dummy +gooier ooze +green slide +guardian nacho +hell hound pun +high purist +hairnet devil +ice trowel +killer beet +feather golem +lounge worm +mountain lymph +pager golem +pie fiend +prophylactic worm +sock mole +rogue piercer +seesawing sphere +simile mimic +moldier ant +stain vortex +scone giant +umbrella hulk +vampire mace +verbal jabberwock +water lemon +water melon +winged grizzly +yellow wight diff --git a/src/NetHack_3.7/dat/castle.lua b/src/NetHack_3.7/dat/castle.lua new file mode 100644 index 0000000..83eaeca --- /dev/null +++ b/src/NetHack_3.7/dat/castle.lua @@ -0,0 +1,256 @@ +-- NetHack castle castle.lua $NHDT-Date: 1652196024 2022/05/10 15:20:24 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.7 $ +-- Copyright (c) 1989 by Jean-Christophe Collet +-- NetHack may be freely redistributed. See license for details. +-- +-- +-- This is the stronghold level : +-- there are several ways to enter it : +-- - opening the drawbridge (wand of opening, knock spell, playing +-- the appropriate tune) +-- +-- - enter via the back entry (this suppose a ring of levitation, boots +-- of water walking, etc.) +-- +-- Note : If you don't play the right tune, you get indications like in the +-- MasterMind game... +-- +-- To motivate the player : there are 4 storerooms (armors, weapons, food and +-- gems) and a wand of wishing in one of the 4 towers... + +des.level_init({ style="mazegrid", bg ="-" }); + +des.level_flags("mazelevel", "noteleport", "noflipy") + +des.map([[ +}}}}}}}}}.............................................}}}}}}}}} +}-------}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}-------} +}|.....|-----------------------------------------------|.....|} +}|.....+...............................................+.....|} +}-------------------------------+-----------------------------} +}}}}}}|........|..........+...........|.......S.S.......|}}}}}} +.....}|........|..........|...........|.......|.|.......|}..... +.....}|........------------...........---------S---------}..... +.....}|...{....+..........+.........\.S.................+...... +.....}|........------------...........---------S---------}..... +.....}|........|..........|...........|.......|.|.......|}..... +}}}}}}|........|..........+...........|.......S.S.......|}}}}}} +}-------------------------------+-----------------------------} +}|.....+...............................................+.....|} +}|.....|-----------------------------------------------|.....|} +}-------}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}-------} +}}}}}}}}}.............................................}}}}}}}}} +]]); + +-- Random registers initialisation +local object = { "[", ")", "*", "%" }; +shuffle(object) + +local place = selection.new(); +place:set(04,02); +place:set(58,02); +place:set(04,14); +place:set(58,14); + +local monster = { "L", "N", "E", "H", "M", "O", "R", "T", "X", "Z" } +shuffle(monster) + +des.teleport_region({ region = {01,00,10,20}, region_islev=1, exclude={1,1,61,15}, dir="down" }) +des.teleport_region({ region = {69,00,79,20}, region_islev=1, exclude={1,1,61,15}, dir="up" }) +des.levregion({ region = {01,00,10,20}, region_islev=1, exclude={0,0,62,16}, type="stair-up" }) +des.feature("fountain", 10,08) +-- Doors +des.door("closed",07,03) +des.door("closed",55,03) +des.door("locked",32,04) +des.door("locked",26,05) +des.door("locked",46,05) +des.door("locked",48,05) +des.door("locked",47,07) +des.door("closed",15,08) +des.door("closed",26,08) +des.door("locked",38,08) +des.door("locked",56,08) +des.door("locked",47,09) +des.door("locked",26,11) +des.door("locked",46,11) +des.door("locked",48,11) +des.door("locked",32,12) +des.door("closed",07,13) +des.door("closed",55,13) +-- The drawbridge +des.drawbridge({ dir="east", state="closed", x=05,y=08}) +-- Storeroom number 1 +des.object(object[1],39,05) +des.object(object[1],40,05) +des.object(object[1],41,05) +des.object(object[1],42,05) +des.object(object[1],43,05) +des.object(object[1],44,05) +des.object(object[1],45,05) +des.object(object[1],39,06) +des.object(object[1],40,06) +des.object(object[1],41,06) +des.object(object[1],42,06) +des.object(object[1],43,06) +des.object(object[1],44,06) +des.object(object[1],45,06) +-- Storeroom number 2 +des.object(object[2],49,05) +des.object(object[2],50,05) +des.object(object[2],51,05) +des.object(object[2],52,05) +des.object(object[2],53,05) +des.object(object[2],54,05) +des.object(object[2],55,05) +des.object(object[2],49,06) +des.object(object[2],50,06) +des.object(object[2],51,06) +des.object(object[2],52,06) +des.object(object[2],53,06) +des.object(object[2],54,06) +des.object(object[2],55,06) +-- Storeroom number 3 +des.object(object[3],39,10) +des.object(object[3],40,10) +des.object(object[3],41,10) +des.object(object[3],42,10) +des.object(object[3],43,10) +des.object(object[3],44,10) +des.object(object[3],45,10) +des.object(object[3],39,11) +des.object(object[3],40,11) +des.object(object[3],41,11) +des.object(object[3],42,11) +des.object(object[3],43,11) +des.object(object[3],44,11) +des.object(object[3],45,11) +-- Storeroom number 4 +des.object(object[4],49,10) +des.object(object[4],50,10) +des.object(object[4],51,10) +des.object(object[4],52,10) +des.object(object[4],53,10) +des.object(object[4],54,10) +des.object(object[4],55,10) +des.object(object[4],49,11) +des.object(object[4],50,11) +des.object(object[4],51,11) +des.object(object[4],52,11) +des.object(object[4],53,11) +des.object(object[4],54,11) +des.object(object[4],55,11) +-- THE WAND OF WISHING in 1 of the 4 towers +local loc = place:rndcoord(1); +des.object({ id = "chest", trapped = 0, locked = 1, coord = loc , + contents = function() + des.object("wishing"); + end +}); +-- Prevent monsters from eating it. (@'s never eat objects) +des.engraving({ coord = loc, type="burn", text="Elbereth" }) +des.object({ id = "scroll of scare monster", coord = loc, buc="cursed" }) +-- The treasure of the lord +des.object("chest",37,08) +-- Traps +des.trap("trap door",40,08) +des.trap("trap door",44,08) +des.trap("trap door",48,08) +des.trap("trap door",52,08) +des.trap("trap door",55,08) +-- Soldiers guarding the entry hall +des.monster("soldier",08,06) +des.monster("soldier",09,05) +des.monster("soldier",11,05) +des.monster("soldier",12,06) +des.monster("soldier",08,10) +des.monster("soldier",09,11) +des.monster("soldier",11,11) +des.monster("soldier",12,10) +des.monster("lieutenant",09,08) +-- Soldiers guarding the towers +des.monster("soldier",03,02) +des.monster("soldier",05,02) +des.monster("soldier",57,02) +des.monster("soldier",59,02) +des.monster("soldier",03,14) +des.monster("soldier",05,14) +des.monster("soldier",57,14) +des.monster("soldier",59,14) +-- The four dragons that are guarding the storerooms +des.monster("D",47,05) +des.monster("D",47,06) +des.monster("D",47,10) +des.monster("D",47,11) +-- Sea monsters in the moat +des.monster("giant eel",05,07) +des.monster("giant eel",05,09) +des.monster("giant eel",57,07) +des.monster("giant eel",57,09) +des.monster("shark",05,00) +des.monster("shark",05,16) +des.monster("shark",57,00) +des.monster("shark",57,16) +-- The throne room and the court monsters +des.monster(monster[10],27,05) +des.monster(monster[1],30,05) +des.monster(monster[2],33,05) +des.monster(monster[3],36,05) +des.monster(monster[4],28,06) +des.monster(monster[5],31,06) +des.monster(monster[6],34,06) +des.monster(monster[7],37,06) +des.monster(monster[8],27,07) +des.monster(monster[9],30,07) +des.monster(monster[10],33,07) +des.monster(monster[1],36,07) +des.monster(monster[2],28,08) +des.monster(monster[3],31,08) +des.monster(monster[4],34,08) +des.monster(monster[5],27,09) +des.monster(monster[6],30,09) +des.monster(monster[7],33,09) +des.monster(monster[8],36,09) +des.monster(monster[9],28,10) +des.monster(monster[10],31,10) +des.monster(monster[1],34,10) +des.monster(monster[2],37,10) +des.monster(monster[3],27,11) +des.monster(monster[4],30,11) +des.monster(monster[5],33,11) +des.monster(monster[6],36,11) +-- MazeWalks +des.mazewalk(00,10,"west") +des.mazewalk(62,06,"east") +-- Non diggable walls +des.non_diggable(selection.area(00,00,62,16)) +-- Subrooms: +-- Entire castle area +des.region(selection.area(00,00,62,16),"unlit") +-- Courtyards +des.region(selection.area(00,05,05,11),"lit") +des.region(selection.area(57,05,62,11),"lit") +-- Throne room +des.region({ region={27,05, 37,11},lit=1,type="throne", filled=2 }) +-- Antechamber +des.region(selection.area(07,05,14,11),"lit") +-- Storerooms +des.region(selection.area(39,05,45,06),"lit") +des.region(selection.area(39,10,45,11),"lit") +des.region(selection.area(49,05,55,06),"lit") +des.region(selection.area(49,10,55,11),"lit") +-- Corners +des.region(selection.area(02,02,06,03),"lit") +des.region(selection.area(56,02,60,03),"lit") +des.region(selection.area(02,13,06,14),"lit") +des.region(selection.area(56,13,60,14),"lit") +-- Barracks +des.region({ region={16,05, 25,06},lit=1,type="barracks", filled=1 }) +des.region({ region={16,10, 25,11},lit=1,type="barracks", filled=1 }) +-- Hallways +des.region(selection.area(08,03,54,03),"unlit") +des.region(selection.area(08,13,54,13),"unlit") +des.region(selection.area(16,08,25,08),"unlit") +des.region(selection.area(39,08,55,08),"unlit") +-- Storeroom alcoves +des.region(selection.area(47,05,47,06),"unlit") +des.region(selection.area(47,10,47,11),"unlit") diff --git a/src/NetHack_3.7/dat/cmdhelp b/src/NetHack_3.7/dat/cmdhelp new file mode 100644 index 0000000..134866d --- /dev/null +++ b/src/NetHack_3.7/dat/cmdhelp @@ -0,0 +1,226 @@ +&# cmdhelp - became obsolete when 'BINDINGS=key:command' got added +& Tell what command a keystroke invokes +^ Show the type of an adjacent trap +^[ Cancel command (same as ESCape key) +&? debug +^E Search for nearby traps, secret doors, and unseen monsters +^F Map level; reveals traps and secret corridors but not secret doors +^G Create a monster by name or class +^I View inventory with all items identified +^O List special level locations +^V Teleport between levels +^W Wish for something +&: #!debug +^E unavailable debugging command +^F unavailable debugging command +^G unavailable debugging command +^I unavailable debugging command +^O Shortcut for '#overview': list interesting levels you have visited +^V unavailable debugging command +^W unavailable debugging command +&. #?debug +&? number_pad=0,-1 +b Go southwest 1 space +B Go southwest until you are on top of something +h Go west 1 space +H Go west until you are on top of something +j Go south 1 space +J Go south until you are on top of something +k Go north 1 space +K Go north until you are on top of something +l Go east 1 space +L Go east until you are on top of something +n Go southeast 1 space +N Go southeast until you are on something +u Go northeast 1 space +U Go northeast until you are on top of something +&# y,Y handled below +&: #number_pad=1,2,3,4 +h Help: synonym for '?' +j Jump: shortcut for '#jump' +k Kick: synonym for '^D' +l Loot: shortcut for '#loot' +n Start a count; continue with digit(s) +N Name: shortcut for '#name' +u Untrap: shortcut for '#untrap' +&. #0,-1 vs 1,2,3,4 +a Apply (use) a tool or break a wand +A Remove all armor and/or all accessories and/or unwield weapons +^A Redo the previous command +^B Go southwest until you are near something +c Close a door +C Call (name) a monster, an individual object, or a type of object +^C Interrupt: quit the game +d Drop an item +D Drop specific item types +^D Kick something (usually a door, chest, or box) +e Eat something +E Engrave writing on the floor +f Fire ammunition from quiver +F Followed by direction, fight a monster (even if you don't sense it) +g Followed by direction, move until you are near something +G Followed by direction, same as control-direction +^H Go west until you are near something +i Show your inventory +I Inventory specific item types +^J Go south until you are near something +^K Go north until you are near something +^L Go east until you are near something +m Followed by direction, move without picking anything up or fighting +M Followed by direction, move a distance without picking anything up +^N Go southeast until you are near something +o Open a door +O Show option settings, possibly change them +p Pay your shopping bill +P Put on an accessory (ring, amulet, etc; will work for armor too) +^P Toggle through previously displayed game messages +q Quaff (drink) something (potion, water, etc) +Q Select ammunition for quiver (use '#quit' to quit) +r Read a scroll or spellbook +R Remove an accessory (ring, amulet, etc; will work for armor too) +^R Redraw screen +s Search all immediately adjacent locations for traps and secret doors +S Save the game (and exit; there is no "save and keep going") +t Throw something (choose an item, then a direction--not a target) +T Take off one piece of armor (will work for accessories too) +^T Teleport around level +^U Go northeast until you are near something +v Show version ('#version' shows more information) +V Show history of game's development +w Wield a weapon (for dual weapons: 'w' secondary, 'x', 'w' primary, 'X') +W Wear a piece of armor (will work for accessories too) +x Swap wielded and secondary weapons +X Toggle two-weapon combat +^X Show your attributes (shows more in debug or explore mode) +&? number_pad=0,1,2,3,4 +&? number_pad=0 +y Go northwest 1 space +Y Go northwest until you are on top of something +&. +^Y Go northwest until you are near something +z Zap a wand +Z Zap (cast) a spell +&? suspend +^Z Suspend game; 'fg' (foreground) to resume +&: +^Z unavailable command: suspend +&. +&: number_pad=-1 +y Zap a wand +Y Zap (cast) a spell +&? suspend +^Y Suspend game; 'fg' (foreground) to resume +&: +^Y unavailable command: suspend +&. +z Go northwest 1 space +Z Go northwest until you are on top of something +^Z Go northwest until you are near something +&. #0,1..4 vs -1 +< Go up a staircase +> Go down a staircase +/ Show what type of thing a symbol corresponds to +? Give a help message +&? shell +! Do a shell escape; 'exit' shell to come back +&: +! unavailable command: shell +&. +\ Show what object types have been discovered +` Show discovered types for one class of objects +_ Travel via a shortest-path algorithm to a point on the map +. Rest one move while doing nothing +&? rest_on_space + Rest one move while doing nothing +&. +: Look at what is on the floor +; Show what type of thing a map symbol on the level corresponds to +, Pick up things at the current location +@ Toggle the pickup option on/off +) Show the weapon(s) currently wielded or readied +[ Show the armor currently worn += Show the ring(s) currently worn +" Show the amulet currently worn +( Show the tools currently in use +* Show all equipment in use (combination of the ),[,=,",( commands) +$ Count your gold ++ List known spells +Del Display map without monsters or objects obstructing the view. +# Perform an extended command (use '#?' to list choices) +&# number_pad: +&# -1 = numpad off, swap y with z (including Y with Z, ^Y with ^Z, M-y &c) +&# 0 = numpad off (default) +&# 1 = numpad on, normal keypad layout, '5'->'g' +&# 2 = numpad on, normal keypad layout, '5'->'G' +&# 3 = numpad on, phone keypad layout, '5'->'g' +&# 4 = numpad on, phone keypad layout, '5'->'G' +&? number_pad = 1,2,3,4 +0 Show inventory +4 Move west +6 Move east +- 'F' prefix; force fight +&: #-1,0 +0 Continue a count +4 Start or continue a count +6 Start or continue a count +&. #1,2,3,4 vs -1,0 +&? number_pad=1,2 +7 Move northwest +8 Move north +9 Move northeast +1 Move southwest +2 Move south +3 Move southeast +&: number_pad=3,4 +1 Move northwest +2 Move north +3 Move northeast +7 Move southwest +8 Move south +9 Move southeast +&: #-1,0 +1 Start or continue a count +2 Start or continue a count +3 Start or continue a count +7 Start or continue a count +8 Start or continue a count +9 Start or continue a count +&. #1,2 vs 3,4 vs -1,0 +&? number_pad=1,3 +5 'g' movement prefix +M-5 'G' movement prefix +&: number_pad=2,4 +5 'G' movement prefix +M-5 'g' movement prefix +M-0 Inventory specific item types +&: #-1,0 +5 Start or continue a count +M-2 Toggle two-weapon combat +&. #1,3 vs 2,4 vs -1,0 +M-? Display extended command help (if the platform allows this) +M-a Adjust inventory letters +M-A Annotate: supply a name for the current dungeon level +M-c Chat: talk to an adjacent creature +M-C Conduct: list voluntary challenges you have maintained +M-d Dip an object into something +M-e Enhance: check weapons skills, advance them if eligible +M-f Force a lock +M-i Invoke an object's special powers +M-j Jump to a nearby location +M-l Loot a box on the floor +M-m When polymorphed, use a monster's special ability +M-n Name a monster, an individual object, or a type of object +M-N Name a monster, an individual object, or a type of object +M-o Offer a sacrifice to the gods +M-O Overview: show a summary of the explored dungeon +M-p Pray to the gods for help +M-q Quit (exit without saving) +M-r Rub a lamp or a touchstone +M-R Ride: mount or dismount a saddled steed +M-s Sit down +M-t Turn undead +M-T Tip: empty a container +M-u Untrap something (trap, door, or chest) +M-v Print compile time options for this version of NetHack +M-w Wipe off your face +M-X Switch from normal play to explore mode diff --git a/src/NetHack_3.7/dat/data.base b/src/NetHack_3.7/dat/data.base new file mode 100644 index 0000000..0103cdf --- /dev/null +++ b/src/NetHack_3.7/dat/data.base @@ -0,0 +1,6450 @@ +# NetHack 3.7 data.base +# $NHDT-Date: 1684001509 2023/05/13 18:11:49 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.106 $ +# Copyright (c) 1994, 1995, 1996 by the NetHack Development Team +# Copyright (c) 1994 by Boudewijn Wayers +# NetHack may be freely redistributed. See license for details. +# +# This is the source file for the "data" file generated by `makedefs -d'. +# A line starting with a # is a comment and is ignored by makedefs. +# Any other line not starting with whitespace is a lookup key, usually +# a creature or an item. Key wildcard matching only supports '?' for +# single character, '*' for zero or more characters, and leading '~' as +# described below. +# +# Each entry should be comprised of: +# the thing/person being described on a line by itself, in lowercase; +# on each succeeding line a description. +# +# If the first character of a key field is "~", then anything which matches +# the rest of that key will be treated as if it did not match any of the +# following keys for that entry. For instance, `~orc ??m*' preceding `orc*' +# prevents "orc mummy" and "orc zombie" from matching. +# +# A citation of "[]" indicates arbitrary text written by developers or +# contributers. Falling off the end of an entry without any citation +# implies "[]". +# +# Some entries include blank lines to separate paragraphs but many don't. +# +abbot + For it had been long apparent to Count Landulf that nothing + could be done with his seventh son Thomas, except to make him + an Abbot or something of that kind. Born in 1226, he had from + childhood a mysterious objection to becoming a predatory eagle, + or even to taking an ordinary interest in falconry or tilting + or any other gentlemanly pursuits. He was a large and heavy and + quiet boy, and phenomenally silent, scarcely opening his mouth + except to say suddenly to his schoolmaster in an explosive + manner, "What is God?" The answer is not recorded but it is + probable that the asker went on worrying out answers for himself. + [ The Runaway Abbot, by G.K. Chesterton ] +# takes "suit or piece of armor" when specifying '[' +# FIXME: "dragon scales, dragon scale mail" needs its own entry +# FIXME too: "ac, armor class" also merits its own distinct entry +ac +armor* +armour* +*leather armor +suit or piece of armor +~*dragon*scale* +~scroll of mail +*mail + "The last spot on the school jousting team came down to another + boy and me. He was poor, and his only armor was a blanket his + mother had made him from her hair. I, on the other hand, had + a brand new suit of chain mail. Just before our joust, I asked + him what he'd do if he made the team. (I was hoping to be more + popular with the ladies.) He said he would be able to save the + town from dragons and be able to afford some water for his 20 + brothers and sisters. + + Well, a sense of compassion came over me. I insisted we swap + armor. He was forced to accept, as it would have been an + insult not to do so. + + On the battlefield, we charged at each other and we both connected + with our lances. + + Lying there on the mud mortally wounded, I learned what true armor + class was that day." + [ When Help Collides, by J.D. Berry ] +aclys +aklys +thonged club + A short studded or spiked club attached to a cord allowing + it to be drawn back to the wielder after having been thrown. + It should not be confused with the atlatl, which is a device + used to throw spears for longer distances. +~agate ring +agate* + Translucent, cryptocrystalline variety of quartz and a subvariety + of chalcedony. Agates are identical in chemical structure to + jasper, flint, chert, petrified wood, and tiger's-eye, and are + often found in association with opal. The colorful, banded rocks + are used as a semiprecious gemstone and in the manufacture of + grinding equipment. An agate's banding forms as silica from + solution is slowly deposited into cavities and veins in older + rock. + [ The Columbia Encyclopedia, Sixth Edition ] +alchemy + By and large, the only skill the alchemists of Ankh-Morpork had + discovered so far was the ability to turn gold into less gold. + [ Moving Pictures, by Terry Pratchett ] +aleax + Said to be a doppelganger sent to inflict divine punishment + for alignment violations. +*altar +offer* +sacrific* + Altars are of three types: + 1. In Temples. These are for Sacrifices [...]. The stone + top will have grooves for blood, and the whole will be covered + with _dry brown stains of a troubling kind_ from former + Sacrifices. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] + + To every man upon this earth + Death cometh soon or late; + And how can man die better + Than facing fearful odds + For the ashes of his fathers + And the temples of his gods? + [ Lays of Ancient Rome, by Thomas B. Macaulay ] +amaterasu omikami + The Shinto sun goddess, Amaterasu Omikami is the central + figure of Shintoism and the ancestral deity of the imperial + house. One of the daughters of the primordial god Izanagi + and said to be his favourite offspring, she was born from + his left eye. + [ Encyclopedia of Gods, by Michael Jordan ] +amber* + "Tree sap," Wu explained, "often flows over insects and traps + them. The insects are then perfectly preserved within the + fossil. One finds all kinds of insects in amber - including + biting insects that have sucked blood from larger animals." + [ Jurassic Park, by Michael Crichton ] +*amnesia +maud + Get thee hence, nor come again, + Mix not memory with doubt, + Pass, thou deathlike type of pain, + Pass and cease to move about! + 'Tis the blot upon the brain + That will show itself without. + ... + For, Maud, so tender and true, + As long as my life endures + I feel I shall owe you a debt, + That I never can hope to pay; + And if ever I should forget + That I owe this debt to you + And for your sweet sake to yours; + O then, what then shall I say? - + If ever I should forget, + May God make me more wretched + Than ever I have been yet! + [ Maud, And Other Poems, by Alfred, Lord Tennyson ] +~amulet of yendor +~amulet of restful sleep +*amulet +amulet of * +amulet versus * + "The complete Amulet can keep off all the things that make + people unhappy -- jealousy, bad temper, pride, disagreeableness, + greediness, selfishness, laziness. Evil spirits, people called + them when the Amulet was made. Don't you think it would be nice + to have it?" + "Very," said the children, quite without enthusiasm. + "And it can give you strength and courage." + "That's better," said Cyril. + "And virtue." + "I suppose it's nice to have that," said Jane, but not with much + interest. + "And it can give you your heart's desire." + "Now you're talking," said Robert. + [ The Story of the Amulet, by Edith Nesbit ] +amulet of yendor + This mysterious talisman is the object of your quest. It is + said to possess powers which mere mortals can scarcely + comprehend, let alone utilize. The gods will grant the gift of + immortality to the adventurer who can deliver it from the + depths of Moloch's Sanctum and offer it on the appropriate high + altar on the Astral Plane. +angel* + He answered and said unto them, he that soweth the good seed + is the Son of man; the field is the world, and the good seed + are the children of the kingdom; but the weeds are the + children of the wicked one; the enemy that sowed them is the + devil; the harvest is the end of the world; and the reapers + are the angels. As therefore the weeds are gathered and + burned in the fire; so shall it be in the end of this world. + [...] So shall it be at the end of the world; the angels + shall come forth, and sever the wicked from among the just, + and shall cast them into the furnace of fire; there shall be + wailing and gnashing of teeth. + [ The Gospel According to Matthew, 13:37-42, 49-50 ] +angry god* + Cold wind blows. + The gods look down in anger on this poor child. + + Why so unforgiving? + And why so cold? + [ Bridge of Sighs, by Robin Trower ] +anhur + An Egyptian god of war and a great hunter, few gods can match + his fury. Unlike many gods of war, he is a force for good. + The wrath of Anhur is slow to come, but it is inescapable + once earned. Anhur is a mighty figure with four arms. He + is often seen with a powerful lance that requires both of + his right arms to wield and which is tipped with a fragment + of the sun. He is married to Mehut, a lion-headed goddess. +ankh-morpork + The twin city of Ankh-Morpork, foremost of all the cities + bounding the Circle Sea, was as a matter of course the home + of a large number of gangs, thieves' guilds, syndicates and + similar organisations. This was one of the reasons for its + wealth. Most of the humbler folk on the widdershin side of + the river, in Morpork's mazy alleys, supplemented their + meagre incomes by filling some small role for one or other + of the competing gangs. + [ The Colour of Magic, by Terry Pratchett ] +anshar + A primordial Babylonian-Akkadian deity, Anshar is mentioned + in the Babylonian creation epic _Enuma Elish_ as one of a + pair of offspring (with Kishar) of Lahmu and Lahamu. Anshar + is linked with heaven while Kishar is identified with earth. + [ Encyclopedia of Gods, by Michael Jordan ] +ant +* ant + This giant variety of the ordinary ant will fight just as + fiercely as its small, distant cousin. Various varieties + exist, and they are known and feared for their relentless + persecution of their victims. +anu + Anu was the Babylonian god of the heavens, the monarch of + the north star. He was the oldest of the Babylonian gods, + the father of all gods, and the ruler of heaven and destiny. + Anu features strongly in the _atiku_ festival in + Babylon, Uruk and other cities. +# takes "apelike creature" when specifying 'Y' +ape +apelike creature +* ape + The most highly evolved of all the primates, as shown by + all their anatomical characters and particularly the + development of the brain. Both arboreal and terrestrial, + the apes have the forelimbs much better developed than + the hind limbs. Tail entirely absent. Growth is slow + and sexual maturity reached at quite an advanced age. + [ A Field Guide to the Larger Mammals of Africa, by Dorst ] + + Aldo the gorilla had a plan. It was a good plan. It was + right. He knew it. He smacked his lips in anticipation as + he thought of it. Yes. Apes should be strong. Apes should + be masters. Apes should be proud. Apes should make the + Earth shake when they walked. Apes should _rule_ the Earth. + [ Battle for the Planet of the Apes, by David Gerrold ] +apple + NEWTONIAN, adj. Pertaining to a philosophy of the universe + invented by Newton, who discovered that an apple will fall + to the ground, but was unable to say why. His successors + and disciples have advanced so far as to be able to say + when. + [ The Devil's Dictionary, by Ambrose Bierce ] +archeolog* +* archeologist + Archeology is the search for fact, not truth. [...] + So forget any ideas you've got about lost cities, exotic travel, + and digging up the world. We do not follow maps to buried + treasure, and X never, ever, marks the spot. + [ Indiana Jones and the Last Crusade ] + + "I cannot be having with archeological excavations, myself," + I said. "The fellows who dig them only ever find tiny walls + and a few bits of broken pottery, and then they get all + excited and swear that they have just made the most + important discovery of the century, the ruins of a mile-high + gold-covered temple to Frogmore the God of Bike-Saddle + Fixtures or some such." + "I think you will find," said Mr Rune, "that they do this + in order to secure further government funding for their + diggings and so remain in employment." + "That is a rather cynical view," I said. + [ the brightonomicon, by Robert Rankin ] +# [title & author: same situation as with "bad luck" entry] +archon + Archons are the predominant inhabitants of the heavens. + However unusual their appearance, they are not generally + evil. They are beings at peace with themselves and their + surroundings. +arioch + Arioch, the patron demon of Elric's ancestors; one of the most + powerful of all the Dukes of Hell, who was called Knight of + the Swords, Lord of the Seven Darks, Lord of the Higher Hell + and many more names besides. + [ Elric of Melnibone, by Michael Moorcock ] +*arrow + I shot an arrow into the air, + It fell to earth, I knew not where; + For, so swiftly it flew, the sight + Could not follow it in its flight. + + I breathed a song into the air, + It fell to earth, I knew not where; + For who has sight so keen and strong + That it can follow the flight of song? + + Long, long afterward, in an oak + I found the arrow still unbroke; + And the song, from beginning to end, + I found again in the heart of a friend. + [ The Arrow and the Song, by Henry Wadsworth Longfellow ] +ashikaga takauji + Ashikaga Takauji was a daimyo of the Minamoto clan who + joined forces with the Go-Daigo to defeat the Hojo armies. + Later when Go-Daigo attempted to reduce the powers of the + samurai clans he rebelled against him. He defeated Go- + Daigo and established the emperor Komyo on the throne. + Go-Daigo eventually escaped and established another + government in the town of Yoshino. This period of dual + governments was known as the Nambokucho. + [ Samurai - The Story of a Warrior Tradition, by Cook ] +asmodeus + It is said that Asmodeus is the overlord over all of hell. + His appearance, unlike many other demons and devils, is + human apart from his horns and tail. He can freeze flesh + with a touch. + [] + + The evil demon who appears in the Apocryphal book of _Tobit_ + and is derived from the Persian _Aeshma_. In _Tobit_ Asmodeus + falls in love with Sara, daughter of Raguel, and causes the + death of seven husbands in succession, each on his bridal night. + He was finally driven from Egypt through a charm made by Tobias + of the heart and liver of a fish burned on perfumed ashes, as + described by Milton in _Paradise Lost_ (IV, 167-71). Hence + Asmodeus often figures as the spirit of matrimonial jealousy + or unhappiness. + [ Brewer's Concise Dictionary of Phrase and Fable ] +athame + The consecrated ritual knife of a Wiccan initiate (one of four + basic tools, together with the wand, chalice and pentacle). + Traditionally, the athame is a double-edged, black-handled, + cross-hilted dagger of between six and eighteen inches length. + [] + + A belt made from a twisted braid of silken threads of gold wound + around her waist, and a dark-handled knife rested on a slant at + her hip through a loop in the belt. + [...] + She arched her brows. "You should know better, dear godchild. + You know I cannot speak what is untrue. During our last + encounter I returned to Faerie with great power and upset vital + balances. Those balances had to be redressed, and your debt was + the mechanism that the Queen chose to employ." + I frowned at her for a minute. "Returned with great power." My + eyes fell to the knife at her waist. "That thing the vampires + gave you?" + She rested her fingers lightly on the knife's hilt. "Don't + cheapen it. This athame was no creation of theirs. And it was + less a gift than a trade." + "Amoracchius and that thing are in the same league?" Gulp. My + faerie godmother was dangerous enough without a big-time + artifact of magic. + [ Summer Knight, by Jim Butcher ] +athen* + Athene was the offspring of Zeus, and without a mother. She + sprang forth from his head completely armed. Her favourite + bird was the owl, and the plant sacred to her is the olive. + [ Bulfinch's Mythology, by Thomas Bulfinch ] +axe +battle?axe +double?headed?axe + "For ev'ry silver ringing blow, + Cities and palaces shall grow!" + + "Bite deep and wide, O Axe, the tree, + Tell wider prophecies to me." + + "When rust hath gnaw'd me deep and red, + A nation strong shall lift his head. + + "His crown the very Heav'ns shall smite, + Aeons shall build him in his might." + + "Bite deep and wide, O Axe, the tree; + Bright Seer, help on thy prophecy!" + [ Malcolm's Katie, by Isabella Valancey Crawford ] +axolotl + A mundane salamander, harmless. +bag +bag of * +sack + "Now, this third handkerchief," Mein Herr proceeded, "has also + four edges, which you can trace continuously round and round: + all you need do is to join its four edges to the four edges of + the opening. The Purse is then complete, and its outer + surface--" + "I see!" Lady Muriel eagerly interrupted. "Its outer surface + will be continuous with its inner surface! But it will take + time. I'll sew it up after tea." She laid aside the bag, and + resumed her cup of tea. "But why do you call it Fortunatus's + Purse, Mein Herr?" + The dear old man beamed upon her, with a jolly smile, looking + more exactly like the Professor than ever. "Don't you see, + my child--I should say Miladi? Whatever is inside that Purse, + is outside it; and whatever is outside it, is inside it. So + you have all the wealth of the world in that leetle Purse!" + [ Sylvie and Bruno Concluded, by Lewis Carroll ] +b*lzebub + The "lord of the flies" is a translation of the Hebrew + Ba'alzevuv (Beelzebub in Greek). It has been suggested that + it was a mistranslation of a mistransliterated word which + gave us this pungent and suggestive name of the Devil, a + devil whose name suggests that he is devoted to decay, + destruction, demoralization, hysteria and panic... + [ Notes on _Lord of the Flies_, by E.L. Epstein ] +balrog + ... It came to the edge of the fire and the light faded as + if a cloud had bent over it. Then with a rush it leaped + the fissure. The flames roared up to greet it, and wreathed + about it; and a black smoke swirled in the air. Its streaming + mane kindled, and blazed behind it. In its right hand + was a blade like a stabbing tongue of fire; in its left it + held a whip of many thongs. + 'Ai, ai!' wailed Legolas. 'A Balrog! A Balrog is come!' + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +baluchitherium +titanothere + Extinct rhinos include a variety of forms, the most + spectacular being _Baluchitherium_ from the Oligocene of + Asia, which is the largest known land mammal. Its body, 18 + feet high at the shoulder and carried on massive limbs, + allowed the 4-foot-long head to browse on the higher branches + of trees. Though not as enormous, the titanotheres of the + early Tertiary were also large perissodactyls, _Brontotherium_ + of the Oligocene being 8 feet high at the shoulder. + [ Prehistoric Animals, by Barry Cox ] +banana + He took another step and she cocked her right wrist in + viciously. She heard the spring click. Weight slapped into + her hand. + "Here!" she shrieked hysterically, and brought her arm up in + a hard sweep, meaning to gut him, leaving him to blunder + around the room with his intestines hanging out in steaming + loops. Instead he roared laughter, hands on his hips, + flaming face cocked back, squeezing and contorting with great + good humor. + "Oh, my dear!" he cried, and went off into another gale of + laughter. + She looked stupidly down at her hand. It held a firm yellow + banana with a blue and white Chiquita sticker on it. She + dropped it, horrified, to the carpet, where it became a + sickly yellow grin, miming Flagg's own. + "You'll tell," he whispered. "Oh yes indeed you will." + And Dayna knew he was right. + [ The Stand, by Stephen King ] +banshee + In Irish folklore and that of the Western Highlands of Scotland, + a female fairy who announces her presence by shrieking and + wailing under the windows of a house when one of its occupants + is awaiting death. The word is a phonetic spelling of the + Irish _beansidhe_, a woman of the fairies. + [ Brewer's Concise Dictionary of Phrase and Fable ] +barbarian +* barbarian + They dressed alike -- in buckskin boots, leathern breeks and + deerskin shirts, with broad girdles that held axes and short + swords; and they were all gaunt and scarred and hard-eyed; + sinewy and taciturn. + They were wild men, of a sort, yet there was still a wide + gulf between them and the Cimmerian. They were sons of + civilization, reverted to a semi-barbarism. He was a + barbarian of a thousand generations of barbarians. They had + acquired stealth and craft, but he had been born to these + things. He excelled them even in lithe economy of motion. + They were wolves, but he was a tiger. + [ Conan - The Warrior, by Robert E. Howard ] +# takes "bat or bird" when specifying 'B' +~*combat +~*wombat +*bat +bat or bird + A bat, flitting in the darkness outside, took the wrong turn + as it made its nightly rounds and came in through the window + which had been left healthfully open. It then proceeded to + circle the room in the aimless fat-headed fashion habitual + with bats, who are notoriously among the less intellectually + gifted of God's creatures. Show me a bat, says the old + proverb, and I will show you something that ought to be in + some kind of a home. + [ A Pelican at Blandings, by P.G. Wodehouse ] +bear*trap + Probably most commonly associated with trapping, the leghold + trap is a rather simple mechanical trap. It is made up of two + jaws, a spring of some sort, and a trigger in the middle. When + the animal steps on the trigger the trap closes around the leg, + holding the animal in place. Usually some kind of lure is used + to position the animal, or the trap is set on an animal trail. + Traditionally, leghold traps had tightly closing "teeth" to make + sure the animal stayed in place. The teeth also made sure the + animal could not move the leg in the trap and ruin their fur. + However, this resulted in many animals gnawing off legs in order + to escape. More modern traps have a gap called an "offset jaw" + and work more like a handcuff. They grip above the paw, making + sure the animal cannot pull out but does not destroy the leg. + This also allows the trapper to release unwanted catches. + [ Wikipedia, the free encyclopedia ] +*bee + This giant variety of its useful normal cousin normally + appears in small groups, looking for raw material to produce + the royal jelly needed to feed their queen. On rare + occasions, one may stumble upon a bee-hive, in which the + queen bee is being well provided for, and guarded against + intruders. +*beetle + [ The Creator ] has an inordinate fondness for beetles. + [ attributed to biologist J.B.S. Haldane ] + + The common name for the insects with wings shaped like + shields (_Coleoptera_), one of the ten sub-species into + which the insects are divided. They are characterized by + the shields (the front pair of wings) under which the back + wings are folded. + [ Van Dale's Groot Woordenboek der Nederlandse Taal ] +bell of opening + "A bell, book and candle job." + The Bursar sighed. "We tried that, Archchancellor." + The Archchancellor leaned towards him. + "Eh?" he said. + "I _said_, we tried that Archchancellor," said the Bursar loudly, + directing his voice at the old man's ear. "After dinner, you + remember? We used Humptemper's _Names of the Ants_ and rang Old + Tom."* + "Did we, indeed. Worked, did it?" + "_No_, Archchancellor." + + * Old Tom was the single cracked bronze bell in the University + bell tower. + [ Eric, by Terry Pratchett ] +*bell* + Hear the sledges with the bells -- + Silver bells! + What a world of merriment their melody foretells! + How they tinkle, tinkle, tinkle, + In the icy air of night! + While the stars that oversprinkle + All the heavens, seem to twinkle + With a crystalline delight; + Keeping time, time, time, + In a sort of Runic rhyme, + To the tintinabulation that so musically wells + From the bells, bells, bells, bells, + Bells, bells, bells -- + From the jingling and the tinkling of the bells. + [ The Bells, by Edgar Allan Poe ] +blindfold + The blindfolding was performed by binding a piece of the + yellowish linen whereof those of the Amahagger who condescended + to wear anything in particular made their dresses tightly round + the eyes. This linen I afterwards discovered was taken from the + tombs, and was not, as I had first supposed, of native + manufacture. The bandage was then knotted at the back of the + head, and finally brought down again and the ends bound under + the chin to prevent its slipping. Ustane was, by the way, also + blindfolded, I do not know why, unless it was from fear that she + should impart the secrets of the route to us. + [ She, by H. Rider Haggard ] +blind io + On this particular day Blind Io, by dint of constant vigilance + the chief of the gods, sat with his chin on his hand + and looked at the gaming board on the red marble table in + front of him. Blind Io had got his name because, where his + eye sockets should have been, there were nothing but two + areas of blank skin. His eyes, of which he had an impressively + large number, led a semi-independent life of their + own. Several were currently hovering above the table. + [ The Colour of Magic, by Terry Pratchett ] +* blob +ooze +* ooze +*pudding +* slime + These giant amoeboid creatures look like nothing more than + puddles of slime, but they both live and move, feeding on + metal or wood as well as the occasional dungeon explorer to + supplement their diet. + + But we were not on a station platform. We were on the track ahead + as the nightmare, plastic column of fetid black iridescence oozed + tightly onward through its fifteen-foot sinus, gathering unholy + speed and driving before it a spiral, re-thickening cloud of the + pallid abyss vapor. It was a terrible, indescribable thing vaster + than any subway train -- a shapeless congeries of protoplasmic + bubbles, faintly self-luminous, and with myriads of temporary eyes + forming and unforming as pustules of greenish light all over the + tunnel-filling front that bore down upon us, crushing the frantic + penguins and slithering over the glistening floor that it and its + kind had swept so evilly free of all litter. + [ At the Mountains of Madness, by H.P. Lovecraft ] +blue jelly +ochre jelly +spotted jelly + I'd planned how to prevent the lock from sealing behind me; it + required a temporary sacrifice, not cleverness. I used the door + itself to help me cut off a portion of my body, after shunting all + memory from the piece to be abandoned. The piece, looking + inexpressibly dear and forlorn for a bit of blue jelly, would + force open the outer door until I returned and rejoined it. + [ Beholder's Eye, by Julie E. Czerneda ] +bone devil + Bone devils attack with weapons and with a great hooked tail + which causes a loss of strength to those they sting. +book of the dead +candelabrum* +*candle + Faustus: Come on Mephistopheles. What shall we do? + Mephistopheles: Nay, I know not. We shall be cursed with bell, + book, and candle. + Faustus: How? Bell, book, and candle, candle, book, and bell, + Forward and backward, to curse Faustus to hell. + Anon you shall hear a hog grunt, a calf bleat, and an ass bray, + Because it is Saint Peter's holy day. + (Enter all the Friars to sing the dirge) + [ Doctor Faustus and Other Plays, by Christopher Marlowe ] +boomerang +#: this one is commented out because two from the same source feels a +#: bit excessive; if uncommented, it should be first since the punchline +#: is about coming back while the other one is disdainful about that, so +#: if this one came second, its joke would be weakened +# "It's a boomerang," said Vimes. "You find something like this +# all over the world. You have to wave it carefully and suddenly +# your opponent gets it in the back. I've heard that there's a lad +# in Fourecks who can throw a boomerang with such precision that it +# can get the morning paper and come back with it." +# [ Raising Steam, by Terry Pratchett ] +# + Rincewind pulled himself up and thought about reaching for his + stick. And then he thought again. The man had a couple of spears + stuck in the ground, and people here were good at spears, because + if you didn't get efficient at hitting the things that moved fast + you had to eat the things that moved slowly. He was also holding + a boomerang, and it wasn't one of those toy ones that came back. + This was one of the big, heavy, gently curved sort that didn't + come back because it was sticking in something's ribcage. You + could laugh at the idea of wooden weapons until you saw the kind + of wood that grew here. + [ The Last Continent, by Terry Pratchett ] +~*jack*boot* +*boot* +*shoes + In Fantasyland these are remarkable in that they seldom or + never wear out and are suitable for riding or walking in + without the need of Socks. Boots never pinch, rub, or get + stones in them; nor do nails stick upwards into the feet from + the soles. They are customarily mid-calf length or knee-high, + slip on and off easily and never smell of feet. Unfortunately, + the formula for making this splendid footwear is a closely + guarded secret, possibly derived from nonhumans (see Dwarfs, + Elves, and Gnomes). + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +*booze +potion of sleeping + On waking, he found himself on the green knoll whence he had + first seen the old man of the glen. He rubbed his eyes -- it + was a bright sunny morning. The birds were hopping and + twittering among the bushes, and the eagle was wheeling aloft, + and breasting the pure mountain breeze. "Surely," thought Rip, + "I have not slept here all night." He recalled the occurrences + before he fell asleep. The strange man with a keg of liquor -- + the mountain ravine -- the wild retreat among the rocks -- the + woe-begone party at ninepins -- the flagon -- "Oh! that flagon! + that wicked flagon!" thought Rip -- "what excuse shall I make + to Dame Van Winkle!" + [ Rip Van Winkle, a Posthumous Writing + of Diedrich Knickerbocker, by Washington Irving ] +boulder + I worked the lever well under, and stretched my back; the end + of the stone rose up, and I kicked the fulcrum under. Then, + when I was going to bear down, I remembered there was + something to get out from below; when I let go of the lever, + the stone would fall again. I sat down to think, on the root + of the oak tree; and, seeing it stand about the ground, I saw + my way. It was lucky I had brought a longer lever. It would + just reach to wedge under the oak root. + Bearing it down so far would have been easy for a heavy man, + but was a hard fight for me. But this time I meant to do it + if it killed me, because I knew it could be done. Twice I + got it nearly there, and twice the weight bore it up again; + but when I flung myself on it the third time, I heard in my + ears the sea-sound of Poseidon. Then I knew this time I + would do it; and so I did. + [ The King Must Die, by Mary Renault ] +~*longbow of diana +bow +* bow + "Stand to it, my hearts of gold," said the old bowman as he + passed from knot to knot. "By my hilt! we are in luck this + journey. Bear in mind the old saying of the Company." + "What is that, Aylward?" cried several, leaning on their bows + and laughing at him. + "'Tis the master-bowyer's rede: 'Every bow well bent. Every + shaft well sent. Every stave well nocked. Every string well + locked.' There, with that jingle in his head, a bracer on + his left hand, a shooting glove on his right, and a + farthing's-worth of wax in his girdle, what more doth a + bowman need?" + "It would not be amiss," said Hordle John, "if under his + girdle he had four farthings'-worth of wine." + [ The White Company, by Sir Arthur Conan Doyle ] +brigit + Brigit (Brigid, Bride, Banfile), which means the Exalted One, + was the Celtic (continental European and Irish) fertility + goddess. She was originally celebrated on February first in + the festival of Imbolc, which coincided with the beginning + of lactation in ewes and was regarded in Scotland as the date + on which Brigit deposed the blue-faced hag of winter. The + Christian calendar adopted the same date for the Feast of St. + Brigit. There is no record that a Christian saint ever + actually existed, but in Irish mythology she became the + midwife to the Virgin Mary. + [ Encyclopedia of Gods, by Michael Jordan ] +~stormbringer +*broadsword + Bring me my broadsword + And clear understanding. + Bring me my cross of gold, + As a talisman. + [ "Broadsword" (refrain), by Ian Anderson ] +bugbear + Bugbears are relatives of goblins, although they tend to be + larger and more hairy. They are aggressive carnivores and + sometimes kill just for the treasure their victims may be + carrying. +bugle + 'I read you by your bugle horn + And by your palfrey good, + I read you for a Ranger sworn + To keep the King's green-wood.' + 'A Ranger, Lady, winds his horn, + And 'tis at peep of light; + His blast is heard at merry morn, + And mine at dead of night.' + [ Brignall Banks, by Sir Walter Scott ] +bullwhip + "Good," he said and, unbelievably, smiled at me, a smirk like + a round of rotted cheese. "What did your keeper use on you? + A bullwhip?" + [ Melusine, by Sarah Monette ] +*camaxtli + A classical Mesoamerican Aztec god, also known as Mixcoatl- + Camaxtli (the Cloud Serpent), Camaxtli is the god of war. He + is also a deity of hunting and fire who received human + sacrifice of captured prisoners. According to tradition, the + sun god Tezcatlipoca transformed himself into Mixcoatl-Camaxtli + to make fire by twirling the sacred fire sticks. + [ Encyclopedia of Gods, by Michael Jordan ] +camelot* + The seat of Arthur's power in medieval romance. The name is + of unknown origin and refers to the castle but also includes + the surrounding town. ... Camelot appears, most significantly, + as a personal capital as opposed to a permanent or national + one. It is Arthur's and Arthur's alone. There are no previous + lords and Arthur's successor, Constantine, does not take up + residence there. Camelot is actually said to have been + demolished after Arthur and Lancelot were gone by Mark. Fazio + degli Uberti, the Italian poet, claims to have seen the ruins + in the 14th century. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +candy bar + Only once a year, on his birthday, did Charlie Bucket ever + get to taste a bit of chocolate. The whole family saved up + their money for that special occasion, and when the great + day arrived, Charlie was always presented with one small + chocolate bar to eat all by himself. And each time he + received it, on those marvelous birthday mornings, he would + place it carefully in a small wooden box that he owned, and + treasure it as though it were a bar of solid gold; and for + the next few days, he would allow himself only to look at it, + but never to touch it. Then at last, when he could stand it + no longer, he would peel back a tiny bit of the paper + wrapping at one corner to expose a tiny bit of chocolate, and + then he would take a tiny nibble - just enough to allow the + lovely sweet taste to spread out slowly over his tongue. The + next day, he would take another tiny nibble, and so on, and + so on. And in this way, Charlie would make his ten-cent bar + of birthday chocolate last him for more than a month. + [ Charlie and the Chocolate Factory, by Roald Dahl ] +carrot + In World War II, Britain's air ministry spread the word that + a diet of these vegetables helped pilots see Nazi bombers + attacking at night. That was a lie intended to cover the real + matter of what was underpinning the Royal Air Force's successes: + Airborne Interception Radar, also known as AI. ... British + Intelligence didn't want the Germans to find out about the + superior new technology helping protect the nation, so they + created a rumor to afford a somewhat plausible-sounding + explanation for the sudden increase in bombers being shot down. + ... The disinformation was so persuasive that the English public + took to eating carrots to help them find their way during the + blackouts. + [ Urban Legends Reference Pages ] +s*d*g*r* cat + Imagine a sealed container, so perfectly constructed that no + physical influence can pass either inwards or outwards across its + walls. Imagine that inside the container is a cat, and also a + device that can be triggered by some quantum event. If that event + takes place, then the device smashes a phial containing cyanide and + the cat is killed. If the event does not take place, the cat lives + on. In Schroedinger's original version, the quantum event was the + decay of a radioactive atom. ... To the outside observer, the cat + is indeed in a linear combination of being alive and dead, and only + when the container is finally opened would the cat's state vector + collapse into one or the other. On the other hand, to a (suitably + protected) observer inside the container, the cat's state-vector + would have collapsed much earlier, and the outside observer's + linear combination has no relevance. + [ The Emperor's New Mind, by Roger Penrose ] +# takes "cat or other feline" when specifying 'f' +*cat +*feline +kitten + Well-known quadruped domestic animal from the family of + predatory felines (_Felis ochreata domestica_), with a thick, + soft pelt; often kept as a pet. Various folklores have the + cat associated with magic and the gods of ancient Egypt. + [] + + So Ulthar went to sleep in vain anger; and when the people + awakened at dawn - behold! Every cat was back at his + accustomed hearth! Large and small, black, grey, striped, + yellow and white, none was missing. Very sleek and fat did + the cats appear, and sonorous with purring content. + [ The Cats of Ulthar, by H.P. Lovecraft ] +# this one doesn't work very well for dwarven and gnomish cavemen +cave dweller +cave*man +human cave*man + Now it was light enough to leave. Moon-Watcher picked up + the shriveled corpse and dragged it after him as he bent + under the low overhang of the cave. Once outside, he + threw the body over his shoulder and stood upright - the + only animal in all this world able to do so. + Among his kind, Moon-Watcher was almost a giant. He was + nearly five feet high, and though badly undernourished + weighed over a hundred pounds. His hairy, muscular body + was halfway between ape and man, but his head was already + much nearer to man than ape. The forehead was low, and + there were ridges over the eye sockets, yet he unmistakably + held in his genes the promise of humanity. + [ 2001: A Space Odyssey, by Arthur C. Clarke ] +dwar* cave*man +gnom* cave*man + 'Twas in a land unkempt of life's red dawn; + Where in his sanded cave he dwelt alone; + Sleeping by day, or sometimes worked upon + His flint-head arrows and his knives of stone; + By night stole forth and slew the savage boar, + So that he loomed a hunter of loud fame, + And many a skin of wolf and wild-cat wore, + And counted many a flint-head to his name; + Wherefore he walked the envy of the band, + Hated and feared, but matchless in his skill. + Till lo! one night deep in that shaggy land, + He tracked a yearling bear and made his kill; + Then over-worn he rested by a stream, + And sank into a sleep too deep for dream. + [ The Dreamer, by Robert Service ] +*centaur + Of all the monsters put together by the Greek imagination + the Centaurs (Kentauroi) constituted a class in themselves. + Despite a strong streak of sensuality, in their make-up, + their normal behaviour was moral, and they took a kindly + thought of man's welfare. The attempted outrage of Nessos on + Deianeira, and that of the whole tribe of Centaurs on the + Lapith women, are more than offset by the hospitality of + Pholos and by the wisdom of Cheiron, physician, prophet, + lyrist, and the instructor of Achilles. Further, the + Centaurs were peculiar in that their nature, which united the + body of a horse with the trunk and head of a man, involved + an unthinkable duplication of vital organs and important + members. So grotesque a combination seems almost un-Greek. + These strange creatures were said to live in the caves and + clefts of the mountains, myths associating them especially + with the hills of Thessaly and the range of Erymanthos. + [ Mythology of all races, Vol. 1, pp. 270-271 ] +# [ capitalization of the title seems to be all over the place, +# including all lower case and conventional mixed case; +# it appears that Volume 1 (of 13) was written by +# William Sherwood Fox and edited by Louis Herbert Gray ] +centipede + I observed here, what I had often seen before, that certain + districts abound in centipedes. Here they have light + reddish bodies and blue legs; great myriapedes are seen + crawling every where. Although they do no harm, they excite + in man a feeling of loathing. Perhaps our appearance + produces a similar feeling in the elephant and other large + animals. Where they have been much disturbed, they + certainly look upon us with great distrust, as the horrid + biped that ruins their peace. + [ Travels and Researches in South Africa, + by Dr. David Livingstone ] +cerberus +kerberos + Cerberus, (or Kerberos in Greek), was the three-headed dog + that guarded the Gates of Hell. He allowed any dead to enter, + and likewise prevented them all from ever leaving. He was + bested only twice: once when Orpheus put him to sleep by + playing bewitching music on his lyre, and the other time when + Hercules confronted him and took him to the world of the + living (as his twelfth and last labor). +chameleon + A small lizard perched on a brown stone. Feeling threatened by + the approach of human beings along the path, it metamorphosed + into a stingray beetle, then into a stench-puffer, then into a + fiery salamander. + Bink smiled. These conversions weren't real. It had assumed + the forms of obnoxious little monsters, but not their essence. + It could not sting, stink or burn. It was a chameleon, using + its magic to mimic creatures of genuine threat. + Yet as it shifted into the form of a basilisk it glared at him + with such ferocity that Bink's mirth abated. If its malice + could strike him, he would be horribly dead. + [ A Spell for Chameleon, by Piers Anthony ] +charo*n + When an ancient Greek died, his soul went to the nether world: + the Hades. To reach the nether world, the souls had to cross + the river Styx, the river that separated the living from the + dead. The Styx could be crossed by ferry, whose shabby ferry- + man, advanced in age, was called Charon. The deceased's next- + of-kin would place a coin under his tongue, to pay the ferry- + man. +chest +large box + Dantes rapidly cleared away the earth around the chest. Soon + the center lock appeared, then the handles at each end, all + delicately wrought in the manner of that period when art made + precious even the basest of metals. He took the chest by the + two handles and tried to lift it, but it was impossible. He + tried to open it; it was locked. He inserted the sharp end + of his pickaxe between the chest and the lid and pushed down + on the handle. The lid creaked, then flew open. + Dantes was seized with a sort of giddy fever. He cocked his + gun and placed it beside him. Then he closed his eyes like + a child, opened them and stood dumbfounded. + The chest was divided into three compartments. In the first + were shining gold coins. In the second, unpolished gold + ingots packed in orderly stacks. From the third compartment, + which was half full, Dantes picked up handfuls of diamonds, + pearls and rubies. As they fell through his fingers in a + glittering cascade, they gave forth the sound of hail beating + against the windowpanes. + [ The Count of Monte Cristo, by Alexandre Dumas ] +chih*sung*tzu + A character in Chinese mythology noted for bringing about the + end of a terrible drought which threatened the survival of + the people. He achieved this by means of sprinkling the + earth with water from a bowl, using the branch of a tree to + do so. He became the heavenly controller of the rain, and + lived with other celestial beings in their paradise on Mount + Kunlun. + [ The Illustrated Who's Who In Mythology, by Michael Senior ] +chromatic dragon +tiamat + Tiamat is said to be the mother of evil dragonkind. She is + extremely vain. +citrine* + A pale yellow variety of crystalline quartz resembling topaz. +clay golem + It was a warm spring night when a fist knocked at the door so + hard that the hinges bent. + A man opened it and peered out into the street. There was + mist coming off the river and it was a cloudy night. He might + as well have tried to see through white velvet. + But he thought afterwards that there had been shapes out + there, just beyond the light spilling out into the road. A + lot of shapes, watching him carefully. He thought maybe + there'd been very faint points of light... + There was no mistaking the shape right in front of him, + though. It was big and dark red and looked like a child's + clay model of a man. Its eyes were two embers. + [ Feet of Clay, by Terry Pratchett ] +cleaver + Hither came Conan, the Cimmerian, black-haired, sullen-eyed, + sword in hand, a thief, a reaver, a slayer, with gigantic + melancholies and gigantic mirth, to tread the jeweled + thrones of the Earth under his sandalled feet. + [ The Phoenix on the Sword, by Robert E. Howard ] +~elven cloak +~oilskin cloak +*cloak* + Cloaks are the universal outer garb of everyone who is not a + Barbarian. It is hard to see why. They are open in front + and require you at most times to use one hand to hold them + shut. On horseback they leave the shirt-sleeved arms and + most of the torso exposed to wind and Weather. The OMTs + [ Official Management Terms ] for Cloaks well express their + difficulties. They are constantly _swirling and dripping_ + and becoming _heavy with water_ in rainy Weather, _entangling + with trees_ or _swords_, or needing to be _pulled close + around her/his shivering body_. This seems to suggest they + are less than practical for anyone on an arduous Tour. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +cloud* + I wandered lonely as a cloud + That floats on high o'er vales and hills, + When all at once I saw a crowd, + A host, of golden daffodils; + Beside the lake, beneath the trees, + Fluttering and dancing in the breeze. + [ I Wandered Lonely as a Cloud, by William Wordsworth ] +cobra + Darzee and his wife only cowered down in the nest without + answering, for from the thick grass at the foot of the bush + there came a low hiss -- a horrid cold sound that made + Rikki-tikki jump back two clear feet. Then inch by inch out of + the grass rose up the head and spread hood of Nag, the big + black cobra, and he was five feet long from tongue to tail. + When he had lifted one-third of himself clear of the ground, + he stayed balancing to and fro exactly as a dandelion-tuft + balances in the wind, and he looked at Rikki-tikki with the + wicked snake's eyes that never change their expression, + whatever the snake may be thinking of. + 'Who is Nag?' said he. '_I_ am Nag. The great God Brahm put + his mark upon all our people, when the first cobra spread his + hood to keep the sun off Brahm as he slept. Look, and be + afraid!' + [ Rikki-tikki-tavi, by Rudyard Kipling ] +c*ckatrice + Once in a great while, when the positions of the stars are + just right, a seven-year-old rooster will lay an egg. Then, + along will come a snake, to coil around the egg, or a toad, + to squat upon the egg, keeping it warm and helping it to + hatch. When it hatches, out comes a creature called basilisk, + or cockatrice, the most deadly of all creatures. A single + glance from its yellow, piercing toad's eyes will kill both + man and beast. Its power of destruction is said to be so + great that sometimes simply to hear its hiss can prove fatal. + Its breath is so venomous that it causes all vegetation + to wither. + + There is, however, one creature which can withstand the + basilisk's deadly gaze, and this is the weasel. No one knows + why this is so, but although the fierce weasel can slay the + basilisk, it will itself be killed in the struggle. Perhaps + the weasel knows the basilisk's fatal weakness: if it ever + sees its own reflection in a mirror it will perish instantly. + But even a dead basilisk is dangerous, for it is said that + merely touching its lifeless body can cause a person to + sicken and die. + [ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) + and other sources ] +*coin +~creeping coins +*coins +zorkmid* + The coin bears the likeness of Belwit the Flat, along with the + inscriptions, "One Zorkmid," and "699 GUE [ Great Underground + Empire ]." On the other side, the coin depicts Egreth Castle, + and says "In Frobs We Trust" in several languages. + [ Zork Zero, by Infocom ] +combat +fight +fracas +melee +spat +squabble +tiff + [Scene: Mr. Moon and Gilbert enter tavern and discover many + corpses strewn about the place; Blind Pew is sole survivor.] + Blind Pew: Evening. Sounded as though there has been a bit + of a squabble. + Mr. Moon: Squabble? They're all dead. + Blind Pew: Oh. Must have been more of a tiff then. + [ Yellowbeard, directed by Mel Damski, screenplay + by Graham Chapman, Peter Cook, Bernard McKenna ] +conical hat + You couldn't escape the pointy hat, though. There was nothing magical + about a pointy hat except that it said that the woman underneath it + was a witch. People paid attention to a pointy hat. + [ Wintersmith, by Terry Pratchett ] +# not "*cope" because that would match "stethoscope" +cope +* cope + The cope is a liturgical vestment which may be worn by any + rank of the clergy. Copes are made in all liturgical colours, + and are like a very long mantle or cloak, fastened at the breast + by a clasp. + [ Wikipedia, the free encyclopedia ] +# the word "cornuthaum" was coined by devteam member jwalz and adopted in +# 3.2.0, after searching for an actual name for pointy hat came up empty +cornuthaum + He was dressed in a flowing gown with fur tippets which had + the signs of the zodiac embroidered over it, with various + cabalistic signs, such as triangles with eyes in them, queer + crosses, leaves of trees, bones of birds and animals, and a + planetarium whose stars shone like bits of looking-glass with + the sun on them. He had a pointed hat like a dunce's cap, or + like the headgear worn by ladies of that time, except that + the ladies were accustomed to have a bit of veil floating + from the top of it. + [ The Once and Future King, by T.H. White ] + + "A wizard!" Dooley exclaimed, astounded. + "At your service, sirs," said the wizard. "How + perceptive of you to notice. I suppose my hat rather gives me + away. Something of a beacon, I don't doubt." His hat was + pretty much that, tall and cone-shaped with stars and crescent + moons all over it. All in all, it couldn't have been more + wizardish. + [ The Elfin Ship, James P. Blaylock ] +couatl + A mythical feathered serpent. The couatl are very rare. +coyote + This carnivore is known for its voracious appetite and + inflated view of its own intelligence. +cram* + If you want to know what cram is, I can only say that I don't + know the recipe; but it is biscuitish, keeps good indefinitely, + is supposed to be sustaining, and is certainly not entertaining, + being in fact very uninteresting except as a chewing + exercise. It was made by the Lake-men for long journeys. + [ The Hobbit, by J.R.R. Tolkien ] +cream pie + Gregor stared at the pastry tray, and sighed. "I suppose + it would disturb the guards if I tried to shove a cream torte up + your nose." + "Deeply. You should have done it when we were eight and + twelve, you could have gotten away with it then. The cream pie + of justice flies one way," Miles snickered. + [ The Vor Game, by Lois McMaster Bujold ] +credit card +charge card + "We are not worried about the expiration date," repeated the + barman, satisfied that he now had Ford Prefect's full attention; + "we are worried about the entire piece of plastic." + "What?" said Ford. He seemed a little taken aback. + "This," said the barman, holding out the card as if it were a + small fish whose soul had three weeks earlier winged its way to + the Land Where Fish Are Eternally Blessed. "We don't accept it." + [...] + "But you don't understand," said Ford, his expression slowly + ripening from a little taken abackness into rank incredulity, + "this is the American Express card. It is the finest way of + settling bills known to man. Haven't you read their junk mail?" + [ So Long, and Thanks For All The Fish, by Douglas Adams ] +*crocodile + A big animal with the appearance of a lizard, constituting + an order of the reptiles (_Loricata_ or _Crocodylia_), the + crocodile is a large, dangerous predator native to tropical + and subtropical climes. It spends most of its time in large + bodies of water. + [] + + How doth the little crocodile + Improve his shining tail, + And pour the waters of the Nile + On every golden scale! + + How cheerfully he seems to grin + How neatly spreads his claws, + And welcomes little fishes in, + With gently smiling jaws! + [ How Doth The Little Crocodile, by Lewis Carroll ] +# Creosote is the Discworld analogue of Croesus +croesus +kroisos +creosote + Croesus (in Greek: Kroisos), the wealthy last king of Lydia; + his empire was destroyed when he attacked Cyrus in 549 BC, + after the Oracle of Delphi (q.v.) had told him: "if you attack + the Persians, you will destroy a mighty empire". Herodotus + relates of his legendary conversation with Solon of Athens, + who impressed upon him that being rich does not imply being + happy and that no one should be considered fortunate before + his death. +crom + Warily Conan scanned his surroundings, all of his senses alert + for signs of possible danger. Off in the distance, he could + see the familiar shapes of the Camp of the Duali tribe. + Suddenly, the hairs on his neck stand on end as he detects the + aura of evil magic in the air. Without thought, he readies + his weapon, and mutters under his breath: + "By Crom, there will be blood spilt today." + [ Conan the Avenger, by Robert E. Howard, Bjorn Nyberg, + and L. Sprague de Camp ] +crossbow* + "God save thee, ancient Mariner! + From the fiends, that plague thee thus! - + Why look'st thou so?" - With my cross-bow + I shot the Albatross. + [ The Rime of the Ancient Mariner, by Samuel Taylor Coleridge ] +crystal ball + You look into one of these and see _vapours swirling like + clouds_. These shortly clear away to show a sort of video + without sound of something that is going to happen to you + soon. It is seldom good news. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +curse* + Curses are longstanding ill-wishings which, in Fantasyland, + often manifest as semisentient. They have to be broken or + dispelled. The method varies according to the type and + origin of the Curse: + [...] + 4. Curses on Rings and Swords. You have problems. Rings + have to be returned whence they came, preferably at over a + thousand degrees Fahrenheit, and the Curse means you won't + want to do this. Swords usually resist all attempts to + raise their Curses. Your best source is to hide the Sword + or give it to someone you dislike. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +cwn*n + A pack of snow-white, red-eared spectral hounds which + sometimes took part in the kidnappings and raids the + inhabitants of the underworld sometimes make on this world + (the Wild Hunt). They are associated in Wales with the sounds + of migrating wild geese, and are said to be leading the souls + of the damned to hell. The phantom chase is usually heard or + seen in midwinter and is accompanied by a howling wind. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +cyclops + And after he had milked his cattle swiftly, + he again took hold of two of my men + and had them as his supper. + Then I went, with a tub of red wine, + to stand before the Cyclops, saying: + "A drop of wine after all this human meat, + so you can taste the delicious wine + that is stored in our ship, Cyclops." + He took the tub and emptied it. + He appreciated the priceless wine that much + that he promptly asked me for a second tub. + "Give it", he said, "and give me your name as well". + ... + Thrice I filled the tub, + and after the wine had clouded his mind, + I said to him, in a tone as sweet as honey: + "You have asked my name, Cyclops? Well, + my name is very well known. I'll give it to you, + if you give me the gift you promised me as a guest. + My name is Nobody. All call me thus: + my father and my mother and my friends." + Ruthlessly he answered to this: + "Nobody, I will eat you last of all; + your host of friends will completely precede you. + That will be my present to you, my friend." + And after these words he fell down backwards, + restrained by the all-restrainer Hupnos. + His monstrous neck slid into the dust; + the red wine squirted from his throat; + the drunk vomited lumps of human flesh. + [ The Odyssey, (chapter Epsilon), by Homer ] +~sting +*dagger + Is this a dagger which I see before me, + The handle toward my hand? Come, let me clutch thee. + I have thee not, and yet I see thee still. + Art thou not, fatal vision, sensible + To feeling as to sight? or art thou but + A dagger of the mind, a false creation, + Proceeding from the heat-oppressed brain? + I see thee yet, in form as palpable + As this which now I draw. + [ Macbeth, by William Shakespeare ] +dark one + ... But he ruled rather by force and fear, if they might + avail; and those who perceived his shadow spreading over the + world called him the Dark Lord and named him the Enemy; and + he gathered again under his government all the evil things of + the days of Morgoth that remained on earth or beneath it, + and the Orcs were at his command and multiplied like flies. + Thus the Black Years began ... + [ The Silmarillion, by J.R.R. Tolkien ] +# includes "dart trap" +dart* + Darts are missile weapons, designed to fly such that a sharp, + often weighted point will strike first. They can be + distinguished from javelins by fletching (i.e., feathers on + the tail) and a shaft that is shorter and/or more flexible, + and from arrows by the fact that they are not of the right + length to use with a normal bow. + [ Wikipedia, the free encyclopedia ] + + Against my foe I hurled a murderous dart. + He caught it in his hand -- I heard him laugh -- + I saw the thing that should have pierced his heart + Turn to a golden staff. + [ Gifts, by Mary Coleridge ] +demogorgon + A terrible deity, whose very name was capable of producing the + most horrible effects. He is first mentioned by the 4th-century + Christian writer, Lactantius, who in doing so broke with the + superstition that the very reference to Demogorgon by name + brought death and disaster. + [ Brewer's Concise Dictionary of Phrase and Fable ] + + Demogorgon, the prince of demons, wallows in filth and can + spread a quickly fatal illness to his victims while rending + them. He is a mighty spellcaster, and he can drain the life + of mortals with a touch of his tail. +# takes "major demon" when specifying '&' +demon +major demon + It is often very hard to discover what any given Demon looks + like, apart from a general impression of large size, huge + fangs, staring eyes, many limbs, and an odd color; but all + accounts agree that Demons are very powerful, very Magic (in + a nonhuman manner), and made of some substance that can squeeze + through a keyhole yet not be pierced with a Sword. This makes + them difficult to deal with, even on the rare occasions when + they are friendly. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +demonbane + Do not be deceived, Wormwood. Our cause is never more in danger + than when a human, no longer desiring, but still intending, to do + our Enemy's will, looks round upon a universe from which every + trace of Him seems to have vanished, and asks why he has been + forsaken, and still obeys. + [ The Screwtape Letters, by C.S. Lewis ] +dented pot + Here was a sight to beat all: a man in the prime of life rambling + barefoot down the wilderness road, dressed in raggedy pantaloons + sewn out of two meal sacks, a shirt so tattered and scrappish + that its owner had a proud choice of holes to stick his arms + through, and -- the crowning glory -- a hat in the exact + likeness of a tin mush pot, somewhat dented, but snugly fitted, + with the handle turned to one side, as if it were the very + latest and smartest of fashions. + [ Johnny Appleseed, by James Howard Kunstler ] +diamond + The hardest known mineral (with a hardness of 10 on Mohs' scale). + It is an allotropic form of pure carbon that has crystallized in + the cubic system, usually as octahedra or cubes, under great + pressure. + [ A Concise Dictionary of Physics ] + + The diamond, _adamas_ or _dyamas_, is a transparent stone, like + crystal, but having the colour of polished iron, but it cannot + be destroyed by iron, fire or any other means, unless it is + placed in the hot blood of a goat; with sharp pieces of diamond + other stones are engraved and polished. It is no greater than + a small nut. There are six kinds, however Adamant attracts + metal; it expels venom; it produces amber (and is efficacious + against empty fears and for those resisting spells). It is + found in India, in Greece and in Cyprus, where magicians make + use of it. It gives you courage; it averts apparitions; it + removes anger and quarrels; it heals the mad; it defends you + from your enemies. It should be set in gold or silver and worn + on the left arm. It is likewise found in Arabia. + [ The Aberdeen Bestiary, translated by Colin McLaren ] +dilithium* + The most famous and the first to be named of the imaginary + "minerals" of Star Trek is dilithium. ... Because of this + mineral's central role in the storyline, a whole mythology + surrounds it. It is, however, a naturally occurring substance + within the mythology, as there are various episodes that + make reference to the mining of dilithium deposits. ... + This name itself is imaginary and gives no real information on + the structure or make-up of this substance other than that this + version of the name implies a lithium and iron-bearing + aluminosilicate of some sort. That said, the real mineral that + most closely matches the descriptive elements of this name is + ferroholmquistite which is a dilithium triferrodiallosilicate. + If one goes on the premise that nature follows certain general + norms, then one could extrapolate that dilithium might have a + similar number of silicon atoms in its structure. + Keeping seven (i.e. hepto) ferrous irons and balancing the + oxygens would give a theoretical formula of Li2Fe7Al2Si8O27. + A mineral with this composition could theoretically exist, + although it is doubtful that it would possess the more fantastic + properties ascribed to dilithium. + [ The Mineralogy of Star Trek, by Jeffrey de Fourestier ] +dingo + A wolflike wild dog, Canis dingo, of Australia, having a + reddish- or yellowish-brown coat, believed to have been + introduced by the aborigines. + [ Webster's Encyclopedic Unabridged Dictionary + of the English Language ] +disenchanter + Ask not, what your magic can do to it. Ask what it can do + to your magic. +dispater + The Roman ruler of the underworld and fortune, similar to the + Greek Hades. Every hundred years, the Ludi Tarentini were + celebrated in his honor. The Gauls regarded Dis Pater as + their ancestor. The name is a contraction of the Latin Dives, + "the wealthy", Dives Pater, "the wealthy father", or "Fater + Wealth". It refers to the wealth of precious stone below the + earth. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +# 3.7; monster adapted from slash'em based on an AD&D Monster Manual entry; +# slash'em lacked a description so this entry has been created from scratch; +# the puma comparison is how the AD&D monster is described (except that +# that creature has six legs and two tentacles!) but the actual monster's +# behavior is substantially different +displacer beast + This strange creature appears to be mutant form of puma (aka + cougar or mountain lion) which lives in underground settings + rather than outdoor wilderness. It is capable of exchanging + positions with people or creatures in its path and is not + fooled by displaced images of others. +djinn* + The djinn are genies from the elemental plane of Air. There, + among their kind, they have their own societies. They are + sometimes encountered on earth and may even be summoned here + to perform some service for powerful wizards. The wizards + often leave them about for later service, safely tucked away + in a flask or lamp. Once in a while, such a tool is found by + a lucky rogue, and some djinn are known to be so grateful + when released that they might grant their rescuer a wish. +# takes "dog or other canine" when specifying 'd' +~hachi +~slasher +~sirius +*dog +pup* +*canine + A domestic animal, the _tame dog_ (_Canis familiaris_), of + which numerous breeds exist. The male is called a dog, + while the female is called a bitch. Because of its known + loyalty to man and gentleness with children, it is the + world's most popular domestic animal. It can easily be + trained to perform various tasks. +# typing "spellbook or a closed door" shouldn't yield this entry +~trap*door +~*spellbook* +*door +doorway + Through me you pass into the city of woe: + Through me you pass into eternal pain: + Through me among the people lost for aye. + Justice the founder of my fabric mov'd: + To rear me was the task of power divine, + Supremest wisdom, and primeval love. + Before me things create were none, save things + Eternal, and eternal I endure. + All hope abandon ye who enter here. + [ The Inferno, from The Divine Comedy of Dante Alighieri, + translated by H.F. Cary ] +doppelganger + "Then we can only give thanks that this is Antarctica, where + there is not one, single, solitary, living thing for it to + imitate, except these animals in camp." + + "Us," Blair giggled. "It can imitate us. Dogs can't make four + hundred miles to the sea; there's no food. There aren't any + skua gulls to imitate at this season. There aren't any + penguins this far inland. There's nothing that can reach the + sea from this point - except us. We've got brains. We can do + it. Don't you see - it's got to imitate us - it's got to be one + of us - that's the only way it can fly an airplane - fly a plane + for two hours, and rule - be - all Earth's inhabitants. A world + for the taking - if it imitates us! + [ Who Goes There?, by John W. Campbell ] + + Xander: Let go! I have to kill the demon bot! + Xander Double (grabbing the gun): Anya, get out of the way. + Buffy: Xander! + Xander Double: That's all right, Buffy. I have him. + Xander: No, Buffy, I'm me. Help me! + Anya: My gun, he's got my gun. + Riley: You own a gun? + Buffy: Xander, gun holding Xander, give it to me. + Anya: Buffy, which one's real? + Xander: I am. + Xander Double: No, _I_ am. + [ Buffy the Vampire Slayer, Episode 5.03, "The Replacement" ] +*dragon +*xoth + In the West the dragon was the natural enemy of man. Although + preferring to live in bleak and desolate regions, whenever it + was seen among men it left in its wake a trail of destruction + and disease. Yet any attempt to slay this beast was a perilous + undertaking. For the dragon's assailant had to contend + not only with clouds of sulphurous fumes pouring from its fire + breathing nostrils, but also with the thrashings of its tail, + the most deadly part of its serpent-like body. + [ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ] + + "One whom the dragons will speak with," he said, "that is a + dragonlord, or at least that is the center of the matter. It's + not a trick of mastering the dragons, as most people think. + Dragons have no masters. The question is always the same, with + a dragon: will he talk to you or will he eat you? If you can + count upon his doing the former, and not doing the latter, why + then you're a dragonlord." + [ The Tombs of Atuan, by Ursula K. Le Guin ] +*dragon*scale* + Stephen had argued, and the expert armorer had grudgingly + admitted, that dragonscale shield or armor, provided it proved + feasible to make at all, ought to offer some real, practical + advantages over any metal breastplate or shield -- gram for + gram of weight, such a defense would probably be a lot + tougher and more protective than any human smiths could + make of steel. + [ The Last Book of Swords: Shieldbreaker's Story, + by Fred Saberhagen ] +dragonbane + And now the youth + was to enter the line of battle with his lord, + his first time to be tested as a fighter. + His spirit did not break and the ancestral blade + would keep its edge, as the dragon discovered + as soon as they came together in combat. + [ Beowulf, translated by Seamus Heaney ] +*drum* + Many travelers have seen the drums of the great apes, and + some have heard the sounds of their beating and the noise of + the wild, weird revelry of these first lords of the jungle, + but Tarzan, Lord Greystoke, is, doubtless, the only human + being who ever joined in the fierce, mad, intoxicating revel + of the Dum-Dum. + [ Tarzan of the Apes, by Edgar Rice Burroughs ] +dunce* + A dunce cap, also variously known as a dunce hat, dunce's + cap, or dunce's hat, is a tall conical hat. In popular + culture, it is typically made of paper and often marked with + a D, and given to schoolchildren to wear as punishment for + being stupid or lazy. While this is now a rare practice, + it is frequently depicted in popular culture such as + children's cartoons. + [ Wikipedia, the free encyclopedia ] +dungeon* + At once as far as Angels kenn he views + The dismal Situation waste and wilde, + A Dungeon horrible, on all sides round + As one great Furnace flam'd, yet from those flames + No light, but rather darkness visible + Serv'd only to discover sights of woe, + Regions of sorrow, doleful shades, where peace + And rest can never dwell, hope never comes + That comes to all; but torture without end + Still urges, and a fiery Deluge, fed + With ever-burning Sulphur unconsum'd: + Such place Eternal Justice had prepar'd + For those rebellious, here their Prison ordain'd + In utter darkness, and their portion set + As far remov'd from God and light of Heav'n + As from the Center thrice to th' utmost Pole. + [ Paradise Lost, by John Milton ] +~dwarf ??m* +~dwar* cloak +#~dwar* cave*man +dwarf* + Dwarfs have faces like men (ugly men, with wrinkled, leathery + skins), but are generally either flat-footed, duck-footed, or + have feet pointing backwards. They are of the earth, earthy, + living in the darkest of caverns and venturing forth only + with the cloaks by which they can make themselves invisible, + and others disguised as toads. Miners often come across them, + and sometimes establish reasonably close relations with them. + ... The miners of Cornwall were always delighted to hear a + bucca busily mining away, for all dwarfs have an infallible + nose for precious metals. + Among other things, dwarfs are rightly valued for their skill + as blacksmiths and jewellers: they made Odin his famous spear + Gungnir, and Thor his hammer; for Freya they designed a + magnificent necklace, and for Frey a golden boar. And in their + spare time they are excellent bakers. Ironically, despite + their odd feet, they are particularly fond of dancing. They + can also see into the future, and consequently are excellent + meteorologists. They can be free with presents to people + they like, and a dwarvish gift is likely to turn to gold in + the hand. But on the whole they are a snappish lot. + [ The Immortals, by Derek and Julia Parker ] +# accept "dwarfish" and "dwarvish" +dwar* cloak +hooded cloak + That's how they all came to start, jogging off from the inn one + fine morning just before May, on laden ponies; and Bilbo was + wearing a dark-green hood (a little weather-stained) and a + dark-green cloak borrowed from Dwalin. They were too large for + him, and he looked rather comic. + [ The Hobbit, by J.R.R. Tolkien ] +earendil +elwing + In after days, when because of the triumph of Morgoth Elves and + Men became estranged, as he most wished, those of the Elven-race + that lived still in Middle-earth waned and faded, and Men usurped + the sunlight. Then the Quendi wandered in the lonely places of the + great lands and the isles, and took to the moonlight and the + starlight, and to the woods and the caves, becoming as shadows + and memories, save those who ever and anon set sail into the West + and vanished from Middle-earth. But in the dawn of years Elves + and Men were allies and held themselves akin, and there were some + among Men that learned the wisdom of the Eldar, and became great + and valiant among the captains of the Noldor. And in the glory + and beauty of the Elves, and in their fate, full share had the + offspring of elf and mortal, Earendil, and Elwing, and Elrond + their child. + [ The Silmarillion, by J.R.R. Tolkien ] +eel +giant eel + The behaviour of eels in fresh water extends the air of + mystery surrounding them. They move freely into muddy, silty + bottoms of lakes, lying buried in the daylight hours in summer. + [...] Eels are voracious carnivores, feeding mainly at + night and consuming a wide variety of fishes and invertebrate + creatures. Contrary to earlier thinking, eels seek living + rather than dead creatures and are not habitual eaters of + carrion. + [ Freshwater Fishes of Canada, by Scott and Crossman ] +egg + But I asked why not keep it and let the hen sit on it till it + hatched, and then we could see what would come out of it. + "Nothing good, I'm certain of that," Mom said. "It would + probably be something horrible. But just remember, if it's a + crocodile or a dragon or something like that, I won't have it + in my house for one minute." + [ The Enormous Egg, by Oliver Butterworth ] +elbereth + ... Even as they stepped over the threshold a single clear + voice rose in song. + + A Elbereth Gilthoniel, + silivren penna miriel + o menel aglar elenath! + Na-chaered palan-diriel + o galadhremmin ennorath, + Fanuilos, le linnathon + nef aear, si nef aearon! + + Frodo halted for a moment, looking back. Elrond was in his + chair and the fire was on his face like summer-light upon the + trees. Near him sat the Lady Arwen. [...] + He stood still enchanted, while the sweet syllables of the + elvish song fell like clear jewels of blended word and melody. + "It is a song to Elbereth," said Bilbo. "They will sing that, + and other songs of the Blessed Realm, many times tonight. + Come on!" + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +electric eel + South-American fish (_Gymnotus electricus_), living in fresh + water. Shaped like a serpent, it can grow up to 2 metres. + This eel is known for its electrical organ which enables it + to paralyse creatures up to the size of a horse. + [ Van Dale's Groot Woordenboek der Nederlandse Taal ] +*elemental + Elementals are manifestations of the basic nature of the + universe. There are four known forms of elementals: air, fire, + water, and earth. Some mystics have postulated the necessity + for a fifth type, the spirit elemental, but none have ever + been encountered, at least on this plane of existence. +~human or elf* +~elf ??m* +*elf* +elvenking +elvenqueen +elven monarch + The Elves sat round the fire upon the grass or upon the sawn + rings of old trunks. Some went to and fro bearing cups and + pouring drinks; others brought food on heaped plates and + dishes. + + "This is poor fare," they said to the hobbits; "for we are + lodging in the greenwood far from our halls. If ever you are + our guests at home, we will treat you better." + "It seems to me good enough for a birthday-party," said Frodo. + Pippin afterwards recalled little of either food or drink, for + his mind was filled with the light upon the elf-faces, and the + sound of voices so various and so beautiful that he felt in a + waking dream. [...] + + Sam could never describe in words, nor picture clearly to + himself, what he felt or thought that night, though it remained + in his memory as one of the chief events of his life. The + nearest he ever got was to say: "Well, sir, if I could grow + apples like that, I would call myself a gardener. But it was + the singing that went to my heart, if you know what I mean." + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +elven cloak + The Elves next unwrapped and gave to each of the Company the + clothes they had brought. For each they had provided a hood + and cloak, made according to his size, of the light but warm + silken stuff that the Galadrim wove. It was hard to say of + what colour they were: grey with the hue of twilight under + the trees they seemed to be; and yet if they were moved, or + set in another light, they were green as shadowed leaves, or + brown as fallow fields by night, dusk-silver as water under + the stars. + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +emerald + 'Put off that mask of burning gold + With emerald eyes.' + 'O no, my dear, you make so bold + To find if hearts be wild and wise, + And yet not cold.' + + 'I would but find what's there to find, + Love or deceit.' + 'It was the mask engaged your mind, + And after set your heart to beat, + Not what's behind.' + + 'But lest you are my enemy, + I must enquire.' + 'O no, my dear, let all that be; + What matter, so there is but fire + In you, in me?' + [ The Mask, by W.B. Yeats ] +engrav* +A.S* + Presently we reached a place where the beach narrowed; the sea + almost came up to the foot of the cliffs, leaving a passage no + wider than a couple of yards. Between two projecting rocks we + caught sight of the entrance to a dark tunnel. + There, on a slab of granite, appeared two mysterious letters, + half eaten away by time -- the two initials of the bold, + adventurous traveller: + + A.S. + + 'A.S.,' cried my uncle. 'Arne Saknussemm! Arne Saknussemm again!' + + [...] at the sight of those two letters, carved there three + hundred years before, I stood in utter stupefaction. Not + only was the signature of the learned alchemist legible on + the rock, but I held in my hand the dagger which had traced it. + Without showing the most appalling bad faith, I could no longer + doubt the existence of the traveller and the reality of his + journey. + [ Journey to the Centre of the Earth, by Jules Verne, + translated by Robert Baldick ] +*epidaurus + The asclepieion at Epidaurus was the most celebrated healing + center of the Classical world, the place where ill people went + in the hope of being cured. To find out the right cure for + their ailments, they spent a night in the enkoimitiria, a big + sleeping hall. In their dreams, the god himself (Asclepius) + would advise them what they had to do to regain their health. + There are also mineral springs in the vicinity which may have + been used in healing. + [ Wikipedia, the free encyclopedia ] +erinys +erinyes + These female-seeming devils named after the Furies of mythology + attack hand to hand and poison their unwary victims as well. +ettin + The two-headed giant, or ettin, is a vicious and unpredictable + hunter that stalks by night and eats any meat it can catch. +excalibur + At first only its tip was visible, but then it rose, straight, + proud, all that was noble and great and wondrous. The tip of + the blade pointed toward the moon, as if it would cleave it + in two. The blade itself gleamed like a beacon in the night. + There was no light source for the sword to be reflecting + from, for the moon had darted behind a cloud in fear. The + sword was glowing from the intensity of its strength and + power and knowledge that it was justice incarnate, and that + after a slumber of uncounted years its time had again come. + After the blade broke the surface, the hilt was visible, and + holding the sword was a single strong, yet feminine hand, + wearing several rings that bore jewels sparkling with the + blue-green color of the ocean. + [ Knight Life, by Peter David ] +expensive camera + There was a time when Rincewind had quite liked the iconoscope. + He believed, against all experience, that the world was + fundamentally understandable, and that if he could only equip + himself with the right mental toolbox he could take the back off + and see how it worked. He was, of course, dead wrong. The + iconoscope didn't take pictures by letting light fall onto + specially treated paper, as he had surmised, but by the far + simpler method of imprisoning a small demon with a good eye for + colour and a speedy hand with a paintbrush. He had been very + upset to find that out. + [ The Light Fantastic, by Terry Pratchett ] +eye of the aethiopica + This is a powerful amulet of ESP. In addition to its standard + powers, it regenerates the energy of anyone who carries + it, allowing them to cast spells more often. It also reduces + any spell damage to the person who carries it by half, and + protects from magic missiles. Finally, when invoked it has + the power to instantly open a portal to any other area of the + dungeon, allowing its invoker to travel quickly between + areas. +# note: The Eyes of the Overworld is the title of Jack Vance's sequel +# to The Dying Earth and in it the 'Eyes' were separate "cusps" that +# needed to be worn like contact lenses, one on each eyeball. Wearing +# just one and attempting to look with both eyes caused instant stun. +# And when wearing two you couldn't see normal world, only a projection +# of it that had similar topology but where everything was "better". +# NetHack simplifies things: a pair of lenses is a single item like +# spectacles (eyeglasses), and the effect of wearing these lenses has +# been changed to be useful to game play (Xray vision). [The quote is +# not derived from the book.] +eyes of the overworld + The Eyes of the Overworld is a rather obscure artifact. + These magical lenses push the wearer's view sense into the + "overworld" -- another name for a segment of the Astral Plane. + Usually, there is nothing to be seen. However, the wearer + is also able to look back and see the area around herself, + much like looking on a map. Why anyone would want to ... +fedora + Some hats can only be worn if you're willing to be jaunty, to set + them at an angle and to walk beneath them with a spring in your + stride as if you're only a step away from dancing. They demand a + lot of you. + [ Anansi Boys, by Neil Gaiman ] +figurine* + Then it appeared in Paris at just about the time that Paris + was full of Carlists who had to get out of Spain. One of + them must have brought it with him, but, whoever he was, it's + likely he knew nothing about its real value. It had been -- + no doubt as a precaution during the Carlist trouble in Spain + -- painted or enameled over to look like nothing more than a + fairly interesting black statuette. And in that disguise, + sir, it was, you might say, kicked around Paris for seventy + years by private owners and dealers too stupid to see what + it was under the skin. + [ The Maltese Falcon, by Dashiell Hammett ] +fire trap + 'Let him be for a while,' said Cohen. 'I reckon the fish + disagreed with him.' + 'Don't see why,' said Truckle. 'I pulled him out before it'd + hardly chewed him. And he must've dried out nicely in that + corridor. You know, the one where the flames shot up out of + the floor unexpectedly.' + 'I reckon our bard wasn't expecting flames to shoot out of + the floor unexpectedly,' said Cohen. + Truckle shrugged theatrically. '_Well_, if you're not going + to expect unexpected flames, what's the point of going + _anywhere_?' + [ The Last Hero, by Terry Pratchett ] +f* brand + Some say the world will end in fire, + Some say in ice. + From what I've tasted of desire + I hold with those who favor fire. + But if it had to perish twice, + I think I know enough of hate + To say that for destruction ice + Is also great + And would suffice. + [ Fire and Ice, by Robert Frost ] +flesh golem + With an anxiety that almost amounted to agony, I collected + the instruments of life around me, that I might infuse a spark + of being into the lifeless thing that lay at my feet. It was + already one in the morning; the rain pattered dismally against + the panes, and my candle was nearly burnt out, when, by the + glimmer of the half-extinguished light, I saw the dull yellow + eye of the creature open; it breathed hard, and a convulsive + motion agitated its limbs. + + How can I describe my emotions at this catastrophe, or how + delineate the wretch whom with such infinite pains and care I + had endeavoured to form? His limbs were in proportion, and I + had selected his features as beautiful. Beautiful!--Great God! + His yellow skin scarcely covered the work of muscles and + arteries beneath; his hair was of a lustrous black, and + flowing; his teeth of a pearly whiteness; but these luxuriances + only formed a more horrid contrast with his watery eyes, that + seemed almost of the same colour as the dun white sockets in + which they were set, his shrivelled complexion and straight + black lips. + [ Frankenstein, by Mary Wollstonecraft Shelley ] +flint* + An emerald is as green as grass; + A ruby red as blood; + A sapphire shines as blue as heaven; + A flint lies in the mud. + + A diamond is a brilliant stone, + To catch the world's desire; + An opal holds a fiery spark; + But a flint holds fire. + [ Precious Stones, by Christina Giorgina Rossetti ] +floating eye + Floating eyes, not surprisingly, are large, floating eyeballs + which drift about the dungeon. Though not dangerous in and + of themselves, their power to paralyse those who gaze at + their large eye in combat is widely feared. Many are the + tales of those who struck a floating eye, were paralysed by + its mystic powers, and then nibbled to death by some other + creature that lurked around nearby. +*flute + With this thou canst do mighty deeds + And change men's passions for thy needs: + A man's despair with joy allay, + Turn bachelors old to lovers gay. + [ The Magic Flute, by Wolfgang Amadeus Mozart ] +# also takes fog/vapor cloud +fog* cloud + The fog comes + on little cat feet. + + It sits looking + over harbor and city + on silent haunches + and then moves on. + [ Fog, by Carl Sandburg ] +# includes "food detection" and "detect food", which might not be the best +*food* + The little girl stood on tip-toe and picked one of the nicest + and biggest lunch-boxes, and then she sat down upon the ground + and eagerly opened it. Inside she found, nicely wrapped in + white papers, a ham sandwich, a piece of sponge-cake, a pickle, + a slice of new cheese and an apple. Each thing had a separate + stem, and so had to be picked off the side of the box; but + Dorothy found them all to be delicious, and she ate every bit + of luncheon in the box before she had finished. + [ Ozma of Oz, by L. Frank Baum ] +fortune cookie + Nemesis cracked another cookie and wrinkled her nose. "_You will + have great fortune when you least expect it,_" she read. "That's + exactly the sort of nonsense I hate. Someone opens a cookie, and + suddenly they have a prophecy that they'll be rich! I blame that + tramp Tyche. Always dispensing good luck to people who don't + deserve it!" + Leo looked at the mound of broken cookies. "Uh ... you know those + aren't real prophecies, right? They're just stuffed into the + cookies at some factory--" + "Don't try to excuse it!" Nemesis snapped. "It's just like Tyche + to get people's hopes up. No, no. I _must_ counter her." Nemesis + flicked a finger over the slip of paper, and the letters changed + to red. "_You will die painfully when you most expect it._ + There! Much better." + [ The Mark of Athena, by Rick Riordan ] +fountain + Rest! This little Fountain runs + Thus for aye: -- It never stays + For the look of summer suns, + Nor the cold of winter days. + Whose'er shall wander near, + When the Syrian heat is worst, + Let him hither come, nor fear + Lest he may not slake his thirst: + He will find this little river + Running still, as bright as ever. + Let him drink, and onward hie, + Bearing but in thought, that I, + Erotas, bade the Naiad fall, + And thank the great god Pan for all! + [ For a Fountain, by Bryan Waller Procter ] +fox + One hot summer's day a Fox was strolling through an orchard + till he came to a bunch of Grapes just ripening on a vine + which had been trained over a lofty branch. "Just the thing + to quench my thirst," quoth he. Drawing back a few paces, he + took a run and a jump, and just missed the bunch. Turning + round again with a One, Two, Three, he jumped up, but with + no greater success. Again and again he tried after the + tempting morsel, but at last had to give it up, and walked + away with his nose in the air, saying: "I am sure they are + sour." + [ Aesop's Fables ] +fruit +fruitname + They say this is edible. Some adventurers have strange tastes. +*fung* + Fungi, division of simple plants that lack chlorophyll, true + stems, roots, and leaves. Unlike algae, fungi cannot + photosynthesize, and live as parasites or saprophytes. The + division comprises the slime molds and true fungi. True + fungi are multicellular (with the exception of yeasts); the + body of most true fungi consists of slender cottony + filaments, or hyphae. All fungi are capable of asexual + reproduction by cell division, budding, fragmentation, or + spores. Those that reproduce sexually alternate a sexual + generation (gametophyte) with a spore-producing one. The + four classes of true fungi are the algaelike fungi (e.g., + black bread mold and downy mildew), sac fungi (e.g., yeasts, + powdery mildews, truffles, and blue and green molds such as + Penicillium), basidium fungi (e.g., mushrooms and puffballs) + and imperfect fungi (e.g., species that cause athlete's foot + and ringworm). Fungi help decompose organic matter (important + in soil renewal); are valuable as a source of antibiotics, + vitamins, and various chemicals; and for their role in + fermentation, e.g., in bread and alcoholic beverage + production. + [ The Concise Columbia Encyclopedia ] +*gargoyle + And so it came to pass that while Man ruled on Earth, the + gargoyles waited, lurking, hidden from the light. Reborn + every 600 years in Man's reckoning of time, the gargoyles + joined battle against Man to gain dominion over the Earth. + + In each coming, the gargoyles were nearly destroyed by Men + who flourished in greater numbers. Now it has been so many + hundreds of years that it seems the ancient statues and + paintings of gargoyles are just products of Man's + imagination. In this year, with Man's thoughts turned toward + the many ills he has brought among himself, Man has forgotten + his most ancient adversary, the gargoyles. + [ Excerpt from the opening narration to the movie + _Gargoyles_, written by Stephen and Elinor Karpf ] +*garlic + 1 November - All day long we have travelled, and at a good + speed. The horses seem to know that they are being kindly + treated, for they go willingly their full stage at best + speed. We have now had so many changes and find the same + thing so constantly that we are encouraged to think that the + journey will be an easy one. Dr. Van Helsing is laconic, he + tells the farmers that he is hurrying to Bistritz, and pays + them well to make the exchange of horses. We get hot soup, + or coffee, or tea, and off we go. It is a lovely country. + Full of beauties of all imaginable kinds, and the people are + brave, and strong, and simple, and seem full of nice + qualities. They are very, very superstitious. In the first + house where we stopped, when the woman who served us saw the + scar on my forehead, she crossed herself and put out two + fingers towards me, to keep off the evil eye. I believe they + went to the trouble of putting an extra amount of garlic into + our food, and I can't abide garlic. Ever since then I have + taken care not to take off my hat or veil, and so have + escaped their suspicions. + [ Dracula, by Bram Stoker ] +# gas spore -- see *spore +gehenn* +*h?nnom +hell + "Place of Torment." The Valley of Hinnom, south-west of + Jerusalem, where Solomon, king of Israel, built "a high place", + or place of worship, for the gods Chemosh and Moloch. The + valley came to be regarded as a place of abomination because + some of the Israelites sacrificed their children to Moloch + there. In a later period it was made a refuse dump and + perpetual fires were maintained there to prevent pestilence. + Thus, in the New Testament, Gehenna became synonymous with hell. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +gelatinous cube + Despite its popularity (or perhaps because of it), the + gelatinous cube is also widely known as one of the sillier + role-playing monsters. It is something of a commentary on the + ubiquity of treasure-laden dungeons in the Dungeons & Dragons + universe, as the cube is a creature specifically adapted to a + dungeon ecosystem. 10 feet to the side, it travels through + standard 10-foot by 10-foot dungeon corridors, cleaning up + debris and redistributing treasure by excreting indigestible + metal items. + [ Wikipedia, the free encyclopedia ] +*gem +gem or rock + The difference between false memories and true ones is the + same as for jewels: it is always the false ones that look the + most real, the most brilliant. + [ Salvador Dali ] +# 3.7; monster derived from slash'em which lacked a description so this +# entry has been created from scratch +genetic engineer + These very odd people have mastered the ability to insert gene + sequences from one organism into another, usually triggering + immediate mutations in the subject. Far from needing an + elaborate laboratory to accomplish such abominations, a mere + touch seems to be all that is necessary. +geryon + Forthwith that image vile of fraud appear'd, + His head and upper part expos'd on land, + But laid not on the shore his bestial train. + His face the semblance of a just man's wore, + So kind and gracious was its outward cheer; + The rest was serpent all: two shaggy claws + Reach'd to the armpits, and the back and breast, + And either side, were painted o'er with nodes + And orbits. Colours variegated more + Nor Turks nor Tartars e'er on cloth of state + With interchangeable embroidery wove, + Nor spread Arachne o'er her curious loom. + As ofttimes a light skiff, moor'd to the shore, + Stands part in water, part upon the land; + Or, as where dwells the greedy German boor, + The beaver settles watching for his prey; + So on the rim, that fenc'd the sand with rock, + Sat perch'd the fiend of evil. In the void + Glancing, his tail upturn'd its venomous fork, + With sting like scorpion's arm'd. Then thus my guide: + "Now need our way must turn few steps apart, + Far as to that ill beast, who couches there." + [ The Inferno, from The Divine Comedy of Dante Alighieri, + translated by H.F. Cary ] +*ghost +valley of *dea* + And now the souls of the dead who had gone below came swarming + up from Erebus -- fresh brides, unmarried youths, old men + with life's long suffering behind them, tender young girls + still nursing this first anguish in their hearts, and a great + throng of warriors killed in battle, their spear-wounds gaping + yet and all their armour stained with blood. From this + multitude of souls, as they fluttered to and fro by the + trench, there came a moaning that was horrible to hear. + Panic drained the blood from my cheeks. + [ The Odyssey, (chapter Lambda), by Homer ] +ghoul + The forces of the gloom know each other, and are strangely + balanced by each other. Teeth and claws fear what they cannot + grasp. Blood-drinking bestiality, voracious appetites, hunger + in search of prey, the armed instincts of nails and jaws which + have for source and aim the belly, glare and smell out + uneasily the impassive spectral forms straying beneath a + shroud, erect in its vague and shuddering robe, and which seem + to them to live with a dead and terrible life. These + brutalities, which are only matter, entertain a confused fear + of having to deal with the immense obscurity condensed into an + unknown being. A black figure barring the way stops the wild + beast short. That which emerges from the cemetery intimidates + and disconcerts that which emerges from the cave; the + ferocious fear the sinister; wolves recoil when they encounter + a ghoul. + [ Les Miserables, by Victor Hugo ] +*giant +giant humanoid + Giants have always walked the earth, though they are rare in + these times. They range in size from little over nine feet + to a towering twenty feet or more. The larger ones use huge + boulders as weapons, hurling them over large distances. All + types of giants share a love for men - roasted, boiled, or + fried. Their table manners are legendary. +*gloves +gauntlets* + And her old Uncle William used to say a lady is known by her + shoes and her gloves. + [ Mrs. Dalloway, by Virginia Woolf ] +# note: "gnomish wizard" is a monster +~gnome ??m* +#~gnom* cave*man +gnome* +gnomish wizard + ... And then a gnome came by, carrying a bundle, an old + fellow three times as large as an imp and wearing clothes of + a sort, especially a hat. And he was clearly just as frightened + as the imps though he could not go so fast. Ramon Alonzo + saw that there must be some great trouble that was vexing + magical things; and, since gnomes speak the language of men, and + will answer if spoken to gently, he raised his hat, and asked + of the gnome his name. The gnome did not stop his hasty + shuffle a moment as he answered 'Alaraba' and grabbed the rim + of his hat but forgot to doff it. + 'What is the trouble, Alaraba?' said Ramon Alonzo. + 'White magic. Run!' said the gnome .. + [ The Charwoman's Shadow, by Lord Dunsany ] + + "Muggles have garden gnomes, too, you know," Harry told Ron as + they crossed the lawn. + "Yeah, I've seen those things they think are gnomes," said Ron, + bent double with his head in a peony bush, "like fat little + Santa Clauses with fishing rods..." + There was a violent scuffling noise, the peony bush shuddered, + and Ron straightened up. "This is a gnome," he said grimly. + "Geroff me! Gerroff me!" squealed the gnome. + It was certainly nothing like Santa Claus. It was small and + leathery looking, with a large, knobby, bald head exactly like + a potato. Ron held it at arm's length as it kicked out at him + with its horny little feet; he grasped it around the ankles + and turned it upside down. + [ Harry Potter and the Chamber of Secrets, by J.K. Rowling ] +goblin + Now goblins are cruel, wicked, and bad-hearted. They make + no beautiful things, but they make many clever ones. They + can tunnel and mine as well as any but the most skilled + dwarves, when they take the trouble, though they are usually + untidy and dirty. Hammers, axes, swords, daggers, pickaxes, + tongs, and also instruments of torture, they make very well, + or get other people to make to their design, prisoners and + slaves that have to work till they die for want of air and + light. + [ The Hobbit, by J.R.R. Tolkien ] +god +goddess + Goddesses and Gods operate in ones, threesomes, or whole + pantheons of nine or more (see Religion). Most of them claim + to have made the world, and this is indeed a likely claim in + the case of threesomes or pantheons: Fantasyland does have + the air of having been made by a committee. But all Goddesses + and Gods, whether they say they made the world or not, have + very detailed short-term plans for it which they are determined + to carry out. Consequently they tend to push people into the + required actions by the use of coincidence or Prophecy, or just + by narrowing down your available choices of what to do next: + if a deity is pushing you, things will go miserably badly until + there is only one choice left to you. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +gold +gold piece + A metal of characteristic yellow colour, the most precious + metal used as a common commercial medium of exchange. Symbol, + Au; at. no. 79; at. wt. 197.2. It is the most malleable + and ductile of all metals, and very heavy (sp. gr., 19.3). + It is quite unalterable by heat, moisture, and most + corrosive agents, and therefore well suited for its use in + coin and jewelry. + [ Webster's New International Dictionary + of the English Language, Second Edition ] +gold golem + The bellows he set away from the fire, and gathered all the tools + wherewith he wrought into a silver chest; and with a sponge wiped + he his face and his two hands withal, and his mighty neck and + shaggy breast, and put upon him a tunic, and grasped a stout staff, + and went forth halting; but there moved swiftly to support their + lord handmaidens wrought of gold in the semblance of living maids. + In them is understanding in their hearts, and in them speech and + strength, and they know cunning handiwork by gift of the immortal + gods. + [ The Iliad, by Homer ] +~flesh golem +~gold golem +~straw golem +~wood golem +~clay golem +*golem + "The original story harks back, so they say, to the sixteenth + century. Using long-lost formulas from the Kabbala, a rabbi is + said to have made an artificial man -- the so-called Golem -- to + help ring the bells in the Synagogue and for all kinds of other + menial work. + "But he hadn't made a full man, and it was animated by some sort + of vegetable half-life. What life it had, too, so the story + runs, was only derived from the magic charm placed behind its + teeth each day, that drew down to itself what was known as the + `free sidereal strength of the universe.' + "One evening, before evening prayers, the rabbi forgot to take + the charm out of the Golem's mouth, and it fell into a frenzy. + It raged through the dark streets, smashing everything in its + path, until the rabbi caught up with it, removed the charm, and + destroyed it. Then the Golem collapsed, lifeless. All that was + left of it was a small clay image, which you can still see in + the Old Synagogue." ... + [ The Golem, by Gustav Meyrink ] +grave + "Who'd care to dig 'em," said the old, old man, + "Those six feet marked in chalk? + Much I talk, more I walk; + Time I were buried," said the old, old man. + [ Three Songs to the Same Tune, by W.B. Yeats ] +grayswandir + Why had I been wearing Grayswandir? Would another weapon have + affected a Logrus-ghost as strongly? Had it really been my + father, then, who had brought me here? And had he felt I might + need the extra edge his weapon could provide? I wanted to + think so, to believe that he had been more than a Pattern-ghost. + [ Knight of Shadows, by Roger Zelazny ] +*grease + ANOINT, v.t. To grease a king or other great functionary + already sufficiently slippery. + [ The Devil's Dictionary, by Ambrose Bierce ] +gremlin + The gremlin is a highly intelligent and completely evil + creature. It lives to torment other creatures and will go + to great lengths to inflict pain or cause injury. + [] + + Suddenly, Wilson thought about war, about the newspaper + stories which recounted the alleged existence of creatures in + the sky who plagued the Allied pilots in their duties. They + called them gremlins, he remembered. Were there, actually, + such beings? Did they, truly, exist up here, never falling, + riding on the wind, apparently of bulk and weight, yet + impervious to gravity? + He was thinking that when the man appeared again. + [ Nightmare at 20,000 Feet, by Richard Matheson ] +grid bug + These electronically based creatures are not native to this + universe. They appear to come from a world whose laws of + motion are radically different from ours. + [] + + Tron looked to his mate and pilot. "I'm going to check on + the beam connection, Yori. You two can keep a watch out for + grid bugs." Tron paced forward along the slender catwalk + that still seemed awfully insubstantial to Flynn, though he + knew it to be amazingly sturdy. He gazed after Tron, asking + himself what in the world a grid bug was, and hoping that the + beam connection -- to which he'd given no thought whatsoever + until this moment -- was healthy and sound." + [ Tron, novel by Brian Daley, story by Steven Lisberger ] +gunyoki + The samurai's last meal before battle. It was usually made + up of cooked chestnuts, dried seaweed, and sake. +hachi + Hachi was a dog that went with his master, a professor, to + the Shibuya train station every morning. In the afternoon, + when his master was to return from work Hachi would be there + waiting. One day his master died at the office, and did not + return. For over ten years Hachi returned to the station + every afternoon to wait for his master. When Hachi died a + statue was erected on the station platform in his honor. It + is said to bring you luck if you touch his statue. +hallucinat* +potion of hallucination + All at once, and without further warning, my reason forsook me + altogether, and I started from Fr. Moffitt's house to go to my + boarding place. The sidewalks were to me one mass of living, + moving, howling, and ferocious animals. Bears, lions, tigers, + wolves, jaguars, leopards, pumas -- all wild beasts of all climes + -- were frothing at the mouth around me and striving to get to me. + Recollect that while all this was hallucination, it was just as + real as if it had been an undeniable and awful reality. + [ Fifteen Years in Hell, by Luther Benson ] +*harp + A triangular stringed instrument, often Magic. Even when not + Magic, a Harp is surprisingly portable and tough and can be + carried everywhere on the back of the Bard or Harper in all + weathers. A Harp seldom goes out of tune and never warps. + Its strings break only in very rare instances, usually + because the Harper is sulking or crossed in love. This is + just as well as no one seems to make or sell spare strings. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] + + After breakfast was over, the ogre called out: "Wife, wife, + bring me my golden harp." So she brought it and put it on + the table before him. Then he said: "Sing!" and the golden + harp sang most beautifully. And it went on singing till the + ogre fell asleep, and commenced to snore like thunder. + Then Jack lifted up the copper-lid very quietly and got down + like a mouse and crept on hands and knees till he came to the + table, when up he crawled, caught hold of the golden harp and + dashed with it towards the door. But the harp called out + quite loud: "Master! Master!" and the ogre woke up just in + time to see Jack running off with his harp. + [ Jack and the Beanstalk, from English Fairy Tales, + by Joseph Jacobs ] +hawaiian*shirt + 'One of the things he can't do, he can't ride a horse,' he + said. Then he stiffened as if sandbagged by a sudden + recollection, gave a small yelp of terror and dashed into + the gloom. When he returned, the being called Twoflower was + hanging limply over his shoulder. It was small and skinny, + and dressed very oddly in a pair of knee-length britches and + a shirt in such a violent and vivid conflict of colours that + the Weasel's fastidious eye was offended even in the half-light. + [ The Colour of Magic, by Terry Pratchett ] +healer +* healer +attendant +doctor +physician + I swear by Apollo the physician, and Aesculapius, and Health, + and All-heal, and all the gods and goddesses, that, according + to my ability and judgment, I will keep this Oath and this + stipulation -- to reckon him who taught me this Art equally dear + to me as my parents, to share my substance with him, and relieve + his necessities if required; to look upon his offspring in the + same footing as my own brothers, and to teach them this art, if + they shall wish to learn it, without fee or stipulation; and + that by precept, lecture, and every other mode of instruction, + I will impart a knowledge of the Art to my own sons, and those + of my teachers, and to disciples bound by a stipulation and oath + according to the law of medicine, but to none others. I will + follow that system of regimen which, according to my ability and + judgment, I consider for the benefit of my patients, and abstain + from whatever is deleterious and mischievous. [...] + [ Hippocrates' Oath, translated by Francis Adams ] + + PHYSICIAN, n. One upon whom we set our hopes when ill and our + dogs when well. + [ The Devil's Dictionary, by Ambrose Bierce ] +heart of ahriman + The other three drew in their breath sharply, and the dark, + powerful man who stood at the head of the sarcophagus whispered: + "The Heart of Ahriman!" The other lifted a quick hand + for silence. Somewhere a dog began howling dolefully, and a + stealthy step padded outside the barred and bolted door. ... + But none looked aside from the mummy case over which the man + in the ermine-trimmed robe was now moving the great flaming + jewel, while he muttered an incantation that was old when + Atlantis sank. The glare of the gem dazzled their eyes, so + that they could not be sure what they saw; but with a + splintering crash, the carven lid of the sarcophagus burst + outward as if from some irresistible pressure applied from + within and the four men, bending eagerly forward, saw the + occupant -- a huddled, withered, wizened shape, with dried + brown limbs like dead wood showing through moldering bandages. + "Bring that thing back?" muttered the small dark man who + stood on the right, with a short, sardonic laugh. "It is + ready to crumble at a touch. We are fools ---" + [ Conan the Conqueror, by Robert E. Howard ] +hell hound* + But suddenly they started forward in a rigid, fixed stare, + and his lips parted in amazement. At the same instant Lestrade + gave a yell of terror and threw himself face downward upon the + ground. I sprang to my feet, my inert hand grasping my pistol, + my mind paralyzed by the dreadful shape which had sprung out + upon us from the shadows of the fog. A hound it was, an + enormous coal-black hound, but not such a hound as mortal eyes + have ever seen. Fire burst from its open mouth, its eyes + glowed with a smouldering glare, its muzzle and hackles and + dewlap were outlined in flickering flame. Never in the + delirious dream of a disordered brain could anything more + savage, more appalling, more hellish be conceived than that + dark form and savage face which broke upon us out of the wall + of fog. + [ The Hound of the Baskervilles, by Sir Arthur Conan Doyle ] +# note: nethack's helm of brilliance got changed to crystal +helm of brilliance + A helm he set on his head, high of steel; thereon was many + gemstone, all encompassed with gold; it was Uther's, the noble + king's; it was named Goswhit, each other unlike. + [ Layamon's Brut, translated by Sir Frederic Madden, K.H. ] +hermes + Messenger and herald of the Olympians. Being required to do + a great deal of travelling and speaking in public, he became + the god of eloquence, travellers, merchants, and thieves. He + was one of the most energetic of the Greek gods, a + Machiavellian character full of trickery and sexual vigour. + Like other Greek gods, he is endowed with not-inconsiderable + sexual prowess which he directs towards countryside nymphs. + He is a god of boundaries, guardian of graves and patron deity + of shepherds. He is usually depicted as a handsome young + man wearing winged golden sandals and holding a magical + herald's staff consisting of intertwined serpents, the + kerykeion. He is reputedly the only being able to find his way + to the underworld ferry of Charon and back again. He is said + to have invented, among other things, the lyre, Pan's Pipes, + numbers, the alphabet, weights and measures, and sacrificing. +hezrou + "Hezrou" is the common name for the type II demon. It is + among the weaker of demons, but still quite formidable, + mostly due to the stench. +hippocrates + Greek physician, recognized as the father of medicine. He + is believed to have been born on the island of Cos, to have + studied under his father, a physician, to have traveled for + some time, perhaps studying in Athens, and to have then + returned to practice, teach, and write at Cos. The + Hippocratic or Coan school that formed around him was of + enormous importance in separating medicine from superstition + and philosophic speculation, placing it on a strictly + scientific plane based on objective observation and critical + deductive reasoning. + [ The Columbia Encyclopedia, Sixth Edition ] +hobbit + Hobbits are an unobtrusive but very ancient people, more + numerous formerly than they are today; for they love peace + and quiet and good tilled earth: a well-ordered and well- + farmed countryside was their favourite haunt. They do not + and did not understand or like machines more complicated + than a forge-bellows, a water-mill, or a handloom, although + they were skillful with tools. Even in ancient days they + were, as a rule, shy of "the Big Folk", as they call us, and + now they avoid us with dismay and are becoming hard to find. + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +hobgoblin + Hobgoblin. Used by the Puritans and in later times for + wicked goblin spirits, as in Bunyan's "Hobgoblin nor foul + friend", but its more correct use is for the friendly spirits + of the brownie type. In "A midsummer night's dream" a + fairy says to Shakespeare's Puck: + Those that Hobgoblin call you, and sweet Puck, + You do their work, and they shall have good luck: + Are you not he? + and obviously Puck would not wish to be called a hobgoblin + if that was an ill-omened word. + Hobgoblins are on the whole, good-humoured and ready to be + helpful, but fond of practical joking, and like most of the + fairies rather nasty people to annoy. Boggarts hover on the + verge of hobgoblindom. Bogles are just over the edge. + One Hob mentioned by Henderson, was Hob Headless who haunted + the road between Hurworth and Neasham, but could not cross + the little river Kent, which flowed into the Tess. He was + exorcised and laid under a large stone by the roadside for + ninety-nine years and a day. If anyone was so unwary as to + sit on that stone, he would be unable to quit it for ever. + The ninety-nine years is nearly up, so trouble may soon be + heard of on the road between Hurworth and Neasham. + [ A Dictionary of Fairies, by Katharine Briggs ] +holy water + "We want a word with you," said Ligur (in a tone of voice + intended to imply that "word" was synonymous with "horrifically + painful eternity"), and the squat demon pushed open the office + door. + The bucket teetered, then fell neatly on Ligur's head. + Drop a lump of sodium in water. Watch it flame and burn and + spin around crazily, flaring and sputtering. This was like + that, just nastier. + The demon peeled and flared and flickered. Oily brown smoke + oozed from it, and it screamed and it screamed and it screamed. + Then it crumpled, folded in on itself, and what was left lay + glistening on the burnt and blackened circle of carpet, looking + like a handful of mashed slugs. + "Hi," said Crowley to Hastur, who had been walking behind Ligur, + and had unfortunately not been so much as splashed. + There are some things that are unthinkable; there are some + depths that not even demons would believe other demons would + stoop to. + ". . . Holy water. You bastard," said Hastur. "You complete + _bastard_. He hadn't never done nothing to _you_." + "Yet," corrected Crowley. + [ Good Omens, by Neil Gaiman and Terry Pratchett ] +hom*nculus + A homunculus is a creature summoned by a mage to perform some + particular task. They are particularly good at spying. They + are smallish creatures, but very agile. They can put their + victims to sleep with a venomous bite, but due to their size, + the effect does not last long on humans. + + "Tothapis cut him off. 'Be still and hearken. You will travel + aboard the sacred wingboat. Of it you may not have heard; but + it will bear you thither in a night and a day and a night. + With you will go a homunculus that can relay your words to me, + and mine to you, across the leagues between at the speed of + thought.'" + [ Conan the Rebel, by Poul Anderson ] +# also gets 'pruning hook' aka guisarme +*hook + But as for Queequeg -- why, Queequeg sat there among them -- + at the head of the table, too, it so chanced; as cool as an + icicle. To be sure I cannot say much for his breeding. His + greatest admirer could not have cordially justified his + bringing his harpoon into breakfast with him, and using it + there without ceremony; reaching over the table with it, to + the imminent jeopardy of many heads, and grappling the + beefsteaks towards him. + [ Moby Dick, by Herman Melville ] +~unicorn horn +*horn + Roland hath set the Olifant to his mouth, + He grasps it well, and with great virtue sounds. + High are those peaks, afar it rings and loud, + Thirty great leagues they hear its echoes mount. + So Charles heard, and all his comrades round; + Then said that King: "Battle they do, our counts!" + And Guenelun answered, contrarious: + "That were a lie, in any other mouth." + [ The Song of Roland ] +horn of plenty +cornucopia + The infant Zeus was fed with goat's milk by Amalthea, + daughter of Melisseus, King of Crete. Zeus, in gratitude, + broke off one of the goat's horns, and gave it to Amalthea, + promising that the possessor should always have in abundance + everything desired. + [ Brewer's Concise Dictionary of Phrase and Fable ] + + When Amalthea's horn + O'er hill and dale the rose-crowned flora pours, + And scatters corn and wine, and fruits and flowers. + [ Os Lusiadas, by Luis Vaz de Camoes ] +horned devil +barbed devil + These devils lack any real special abilities, though they + are quite difficult to kill. +~horsem* +*horse + King Richard III: A horse! a horse! my kingdom for a horse! + Catesby: Withdraw, my lord; I'll help you to a horse. + King Richard III: Slave, I have set my life upon a cast, + And I will stand the hazard of the die: + I think there be six Richmonds in the field; + Five have I slain to-day instead of him. + A horse! a horse! my kingdom for a horse! + [ King Richard III, by William Shakespeare ] +*horsem* +rider* +death +famine +pestilence +war +hunger + [Pestilence:] And I saw when the Lamb opened one of the seals, + and I heard, as it were the noise of thunder, one of the four + beasts saying, Come and see. And I saw, and behold a white + horse: and he that sat on him had a bow; and a crown was given + unto him: and he went forth conquering, and to conquer. + + [War:] And when he had opened the second seal, I heard the + second beast say, Come and see. And there went out another + horse that was red: and power was given to him that sat thereon + to take peace from the earth, and that they should kill one + another: and there was given unto him a great sword. + + [Famine:] And when he had opened the third seal, I heard the + third beast say, Come and see. And I beheld, and lo a black + horse; and he that sat on him had a pair of balances in his + hand. And I heard a voice in the midst of the four beasts say, + A measure of wheat for a penny, and three measures of barley + for a penny; and see thou hurt not the oil and the wine. + + [Death:] And when he had opened the fourth seal, I heard the + voice of the fourth beast say, Come and see. And I looked, and + behold a pale horse: and his name that sat on him was Death, + and Hell followed with him. And power was given unto them over + the fourth part of the earth, to kill with sword, and with + hunger, and with death, and with the beasts of the earth. + [ Revelations of John, 6:1-8 ] +huan*ti + The first of five mythical Chinese emperors, Huan Ti is known + as the yellow emperor. He rules the _moving_ heavens, as + opposed to the _dark_ heavens. He is an inventor, said to + have given mankind among other things, the wheel, armour, and + the compass. He is the god of fortune telling and war. +# citation used to be [ after the Encyclopedia of Gods... ] -- not sure what +# that was intended to mean +hu*h*eto*l +minion of huhetotl + Huehuetotl, or Huhetotl, which means Old God, was the Aztec + (classical Mesoamerican) god of fire. He is generally + associated with paternalism and one of the group classed + as the Xiuhtecuhtli complex. He is known to send his + minions to wreak havoc upon ordinary humans. + [ Encyclopedia of Gods, by Michael Jordan ] +humanoid + Humanoids are all approximately the size of a human, and may + be mistaken for one at a distance. They are usually of a + tribal nature, and will fiercely defend their lairs. Usually + hostile, they may even band together to raid and pillage + human settlements. +# takes "human or elf or you" when specifying '@' as a dwarf, gnome, or orc +human +chieftain +guard +ninja +nurse +ronin +student +warrior +*watch* +human or elf* + These strange creatures live mostly on the surface of the + earth, gathering together in societies of various forms, but + occasionally a stray will descend into the depths and commit + mayhem among the dungeon residents who, naturally, often + resent the intrusion of such beasts. They are capable of + using weapons and magic, and it is even rumored that the + Wizard of Yendor is a member of this species. +hunter + What of the hunting, hunter bold? + Brother, the watch was long and cold. + What of the quarry ye went to kill? + Brother, he crops in the jungle still. + Where is the power that made your pride? + Brother, it ebbs from my flank and side. + Where is the haste that ye hurry by? + Brother, I go to my lair to die. + [ The Jungle Book, by Rudyard Kipling ] +# note: this might need to be reformatted; it's much wider than other entries +# but should be able to fit within a normal-width screen once nethack strips +# off the leading . +ice box + Ice, white ice, like a winding-sheet, sheathing each smoke-grimed wall; + Ice on the stove-pipe, ice on the bed, ice gleaming over all; + Sparkling ice on the dead man’s chest, glittering ice in his hair, + Ice on his fingers, ice in his heart, ice in his glassy stare; + Hard as a log and trussed like a frog, with his arms and legs outspread. + I gazed at the coffin I'd brought for him, and I gazed at the gruesome dead, + And at last I spoke: "Bill liked his joke; but still, goldarn his eyes, + A man had ought to consider his mates in the way he goes and dies." + [ The Ballad of Blasphemous Bill, by Robert W. Service ] +ice devil + Ice devils are large semi-insectoid creatures, who are + equally at home in the fires of Hell and the cold of Limbo, + and who can cause the traveller to feel the latter with just + a touch of their tail. +idefix + Another clever translation [of the _Asterix_ character names] + is that of Idefix. An _idee fixe_ is a "fixed idea", i.e. + an obsession, a dogma. The translation, Dogmatix, manages to + conserve the "fixed idea" meaning and also include the syllable + dog -- perfect, given that the character is a dog who has very + strong views on the environment (he howls whenever he sees an + uprooted tree). + [ Wikipedia, the free encyclopedia ] +# takes "imp or minor demon" when specifying 'i' +imp +imp or minor demon + ... imps ... little creatures of two feet high that could + gambol and jump prodigiously; ... + [ The Charwoman's Shadow, by Lord Dunsany ] + + An 'imp' is an off-shoot or cutting. Thus an 'ymp tree' was + a grafted tree, or one grown from a cutting, not from seed. + 'Imp' properly means a small devil, an off-shoot of Satan, + but the distinction between goblins or bogles and imps from + hell is hard to make, and many in the Celtic countries as + well as the English Puritans regarded all fairies as devils. + The fairies of tradition often hover uneasily between the + ghostly and the diabolic state. + [ A Dictionary of Fairies, by Katharine Briggs ] +# "amorous demon" is a placeholder until something better comes along +incubus +succubus +amorous demon + The incubus and succubus are male and female versions of the + same demon, one who lies with a human for its own purposes, + usually to the detriment of the mortals who are unwise in + their dealings with them. +*insect +*insects + A minute invertebrate animal; one of the class _Insecta_. + The true insects or hexapods have the body divided into a + head, a thorax of 3 segments, each of which bears a pair of + legs, and an abdomen of 7 to 11 segments, and in development + usually pass through a metamorphosis. There are usually 2 + pairs of wings, sometimes one pair or none. + [ Webster's Comprehensive International Dictionary + of the English Language ] + + Else, if thou refuse to let my people go, behold, to morrow + will I bring the locusts into thy coast: + And they shall cover the face of the earth, that one cannot + be able to see the earth: and they shall eat the residue of + that which is escaped, which remaineth unto you from the hail, + and shall eat every tree which groweth for you out of the field: + And they shall fill thy houses, and the houses of all thy + servants, and the houses of all the Egyptians; which neither + thy fathers, nor thy fathers' fathers have seen, since the day + that they were upon the earth unto this day. And he turned + himself, and went out from Pharaoh. + [ Exodus, 10:4-6 ] +*iron ball +*iron chain + "You are fettered, " said Scrooge, trembling. "Tell me why?" + "I wear the chain I forged in life," replied the Ghost. "I + made it link by link, and yard by yard; I girded it on of my + own free will, and of my own free will I wore it. Is its + pattern strange to you?" + Scrooge trembled more and more. + "Or would you know," pursued the Ghost, "the weight and + length of the strong coil you bear yourself? It was full as + heavy and as long as this, seven Christmas Eves ago. You + have laboured on it, since. It is a ponderous chain!" + [ A Christmas Carol, by Charles Dickens ] +iron bars + Stone walls do not a prison make, + Nor iron bars a cage; + Minds innocent and quiet take + That for an hermitage; + If I have freedom in my love, + And in my soul am free, + Angels alone that soar above + Enjoy such liberty. + [ To Althea from Prison, by Richard Lovelace ] +ishtar + Ishtar (the star of heaven) is the Mesopotamian goddess of + fertility and war. She is usually depicted with wings and + weapon cases at her shoulders, carrying a ceremonial double- + headed mace-scimitar embellished with lion heads, frequently + being accompanied by a lion. She is symbolized by an eight- + pointed star. + [ Encyclopedia of Gods, by Michael Jordan ] +issek + Now Issek of the Jug, whom Fafhrd chose to serve, was once + of the most lowly and unsuccessful of the gods, godlets + rather, in Lankhmar. He had dwelt there for about thirteen + years, during which time he had traveled only two squares up + the Street of the Gods and was now back again, ready for + oblivion. He is not to be confused with Issek the Armless, + Issek of the Burnt Legs, Flayed Issek, or any other of the + numerous and colorfully mutilated divinities of that name. + Indeed, his unpopularity may have been due in part to the + fact that the manner of his death -- racking -- was not + deemed particularly spectacular. ... However, after Fafhrd + became his acolyte, things somehow began to change. + [ Swords In The Mist, by Fritz Leiber ] +izchak + The shopkeeper of the lighting shop in the town level of the + gnomish mines is a tribute to Izchak Miller, a founding member + of the NetHack development team and a personal friend of a large + number of us. Izchak contributed greatly to the game, coding a + large amount of the shopkeep logic (hence the nature of the tribute) + as well as a good part of the alignment system, the prayer code and + the rewrite of "hell" in the 3.1 release. Izchak was a professor + of Philosophy, who taught at many respected institutions, including + MIT and Stanford, and who also worked, for a period of time, at + Xerox PARC. Izchak was the first "librarian" of the NetHack project, + and was a founding member of the DevTeam, joining in 1986 while he + was working at the University of Pennsylvania (hence our former + mailing list address). Until the 3.1.3 release, Izchak carefully + kept all of the code synchronized and arbitrated disputes between + members of the development teams. Izchak Miller passed away at the + age of 58, in the early morning hours of April 1, 1994 from + complications due to cancer. We then dedicated NetHack 3.2 in his + memory. + [ Mike Stephenson, for the NetHack DevTeam ] +jabberwock +vorpal* + "Beware the Jabberwock, my son! + The jaws that bite, the claws that catch! + Beware the Jubjub bird, and shun + The frumious Bandersnatch!" + + He took his vorpal sword in hand; + Long time the manxome foe he sought -- + So rested he by the Tumtum tree, + And stood awhile in thought. + + And, as in uffish thought he stood, + The Jabberwock, with eyes of flame, + Came whiffling through the tulgey wood, + And burbled as it came! + + One, two! One, two! And through and through + The vorpal blade went snicker-snack! + He left it dead, and with its head + He went galumphing back. + [ Jabberwocky, by Lewis Carroll ] +jacinth* + Sweet in the rough weather + The voice of the turtle-dove + 'Beautiful altogether + Is my Love. + His Hands are open spread for love + And full of jacinth stones + As the apple-tree among trees of the grove + Is He among the sons.' + [ The Beloved, by May Probyn ] +jackal + In Asiatic folktale, jackal provides for the lion; he scares + up game, which the lion kills and eats, and receives what is + left as reward. In stories from northern India he is + sometimes termed "minister to the king," i.e. to the lion. + From the legend that he does not kill his own food has arisen + the legend of his cowardice. Jackal's heart must never be + eaten, for instance, in the belief of peoples indigenous to + the regions where the jackal abounds. ... In Hausa Negro + folktale Jackal plays the role of sagacious judge and is + called "O Learned One of the Forest." The Bushmen say that + Jackal goes around behaving the way he does "because he is + Jackal". + [ Funk & Wagnalls Standard Dictionary of Folklore ] +*jack*boot* + A large boot extending over the knee, acting as protective + armour for the leg, worn by troopers in the 17th and 18th + centuries and later. It is still the type of boot worn by + the Household Cavalry and was adopted by fishermen and others + before the advent of gum boots. Figuratively, _to be under the + jack-boot_ is to be controlled by a brutal military regime. + [ Brewer's Concise Dictionary of Phrase and Fable ] +jade* + Nothing grew among the ruins of the city. The streets were + broken and the walls of the houses had fallen, but there were + no weeds flowering in the cracks and it seemed that the city + had but recently been brought down by an earthquake. Only + one thing still stood intact, towering over the ruins. It + was a gigantic statue of white, gray and green jade - the + statue of a naked youth with a face of almost feminine beauty + that turned sightless eyes toward the north. + "The eyes!" Duke Avan Astran said. "They're gone!" + [ The Jade Man's Eyes, by Michael Moorcock ] +jaguar + Large, flesh-eating animal of the cat family, of Central and + South America. This feline predator (_Panthera onca_) is + sometimes incorrectly called a panther. + [ Van Dale's Groot Woordenboek der Nederlandse Taal ] +jellyfish + I do not care to share the seas + With jellyfishes such as these; + Particularly Portuguese. + [ Lines on Meeting a Portuguese Man-o'-war while Bathing, + by Michael Flanders ] +juiblex +jubilex + Little is known about the Faceless Lord, even the correct + spelling of his name. He does not have a physical form as + we know it, and those who have peered into his realm claim + he is a slime-like creature who swallows other creatures + alive, spits acidic secretions, and causes disease in his + victims which can be almost instantly fatal. +# historically (according to wikipedia...), C-ration was heavier but +# provided more nutrition, and required some form of tin opener; +# in nethack they weigh the same and K-ration provides more nutrition? +k?ration +c?ration + The C ration was a predecessor of the K ration. + [] + The K ration was the [ Quartermaster Subsistence Research + and Development Laboratory's ] answer to the demand for an + individual, easy-to-carry ration that could be used in + assault and combat operations. It was noted for compactness + and superior packaging and was acknowledged as the ration + that provided the greatest variety of nutritionally balanced + components within the smallest space. + [ Special Rations for the Armed Forces, 1946-53, + by Franz A. Koehler ] +kabuto + The kabuto is the helmet worn by the samurai. It was + characterized by a prominent beaked front which jutted out over + the brow to protect the wearer's face; a feature that gives + rise to their modern Japanese name of 'shokaku tsuki kabuto' + (battering-ram helmet). Their main constructional element + was an oval plate, the shokaku bo, slightly domed for the + head with a narrow prolongation in front that curved forwards + and downwards where it developed a pronounced central + fold. Two horizontal strips encircling the head were riveted + to this frontal strip: the lower one, the koshimaki (hip + wrap), formed the lower edge of the helmet bowl; the other, + the do maki (body wrap), was set at about the level of the + temples. Filling the gaps between these strips and the shokaku + bo were small plates, sometimes triangular but more commonly + rectangular in shape. Because the front projected so + far from the head, the triangular gap beneath was filled by + a small plate, the shoshaku tei ita, whose rear edge bent + downwards into a flange that rested against the forehead. + [ Arms & Armour of the Samurai, by Bottomley & Hopson ] +katana + The katana is a long, single-edged samurai sword with a + slightly curved blade. Its long handle is designed to allow + it to be wielded with either one or two hands. +kelp* +*frond + I noticed that all the plants were attached to the soil by + an almost imperceptible bond. Devoid of roots, they seemed + not to require any nourishment from sand, soil, or pebble. + All they required was a point of support -- nothing else. + These plants are self-propagated, and their existence depends + entirely on the water that supports and nourishes them. + Most of them do not sprout leaves, but sprout blades of + various whimsical shapes, and their colors are limited to + pink, carmine, green, olive, fawn, and brown. I had the + opportunity to observe once more -- not the dried specimens + I had studied on the _Nautilus_ -- but the fresh, living + specimens in their native setting. + [ 20,000 Leagues Under the Sea, by Jules Verne ] +ki-rin + The ki-rin is a strange-looking wingless flying creature. + It has scales, a mane like a lion, a tail, four legs with + hooves, and a horn like a unicorn's. It is brightly colored, + and can usually be found flying in the sky looking for good + deeds to reward. +king arthur +*arthur + Ector took both his sons to the church before which the + anvil had been placed. There, standing before the anvil, he + commanded Kay: "Put the sword back into the steel if you + really think the throne is yours!" But the sword glanced + off the steel. "Now it is your turn", Ector said facing + Arthur. + The young man lifted the sword and thrust with both arms; the + blade whizzed through the air with a flash and drilled the + metal as if it were mere butter. Ector and Kay dropped to + their knees before Arthur. + "Why, father and brother, do you bow before me?", Arthur asked + with wonder in his voice. + "Because now I know for sure that you are the king, not only + by birth but also by law", Ector said. "You are no son of + mine nor are you Kay's brother. Immediately after your birth, + Merlin the Wise brought you to me to be raised safely. And + though it was me that named you Arthur when you were baptized, + you are really the son of brave king Uther Pendragon and queen + Igraine..." + And after these words, the lord rose and went to see the arch- + bishop to impart to him what had passed. + [ Van Gouden Tijden Zingen de Harpen, by Vladimir Hulpach, + Emanuel Frynta, and Vackav Cibula ] +knife +stiletto + Possibly perceiving an expression of dubiosity on their + faces, the globetrotter went on adhering to his adventures. + + -- And I seen a man killed in Trieste by an Italian chap. + Knife in his back. Knife like that. + + Whilst speaking he produced a dangerous looking clasp knife, + quite in keeping with his character, and held it in the + striking position. + + -- In a knockingshop it was count of a tryon between two + smugglers. Fellow hid behind a door, come up behind him. + Like that. Prepare to meet your God, says he. Chuck! It + went into his back up to the butt. + [ Ulysses, by James Joyce ] +knight +* knight + Here lies the noble fearless knight, + Whose valour rose to such a height; + When Death at last had struck him down, + His was the victory and renown. + He reck'd the world of little prize, + And was a bugbear in men's eyes; + But had the fortune in his age + To live a fool and die a sage. + [ Don Quixote of La Mancha, by Miquel de Cervantes Saavedra ] +~kobold ??m* +*kobold* + The race of kobolds are reputed to be an artificial creation + of a master wizard (demi-god?). They are about 3' tall with + a vaguely dog-like face. They bear a violent dislike of the + Elven race, and will go out of their way to cause trouble + for Elves at any time. +*kop* +rubber hose + The Kops are a brilliant concept. To take a gaggle of inept + policemen and display them over and over again in a series of + riotously funny physical punishments plays equally well to the + peanut gallery and the expensive box seats. People hate cops. + Even people who have never had anything to do with cops hate + them. Of course, we count on them to keep order and to protect + us when we need protecting, and we love them on television shows + in which they have nerves of steel and hearts of gold, but in + the abstract, as a nation, collectively we hate them. They are + too much like high school principals. We're very happy to see + their pants fall down, and they look good to us with pie on + their faces. The Keystone Kops turn up--and they get punished + for it, as they crash into each other, fall down, and suffer + indignity after indignity. Here is pure movie satisfaction. + + The Kops are very skillfully presented. The comic originality + and timing in one of their chase scenes requires imagination + to think up, talent to execute, understanding of the medium, + and, of course, raw courage to perform. The Kops are madmen + presented as incompetents, and they're madmen rushing around + in modern machines. What's more, the machines they were operating + in their routines were newly invented and not yet experienced + by the average moviegoer. (In the early days of automobiles, + it was reported that there were only two cars registered in all + of Kansas City, and they ran into each other. There is both + poetry and philosophy in this fact, but most of all, there is + humor. Sennett got the humor.) + [ Silent Stars, by Jeanine Basinger ] +kos + "I am not a coward!" he cried. "I'll dare Thieves' House + and fetch you Krovas' head and toss it with blood a-drip at + Vlana's feet. I swear that, witness me, Kos the god of + dooms, by the brown bones of Nalgron my father and by his + sword Graywand here at my side!" + [ Swords and Deviltry, by Fritz Leiber ] +koto + A Japanese harp. +kraken + Out from the water a long sinuous tentacle had crawled; it + was pale-green and luminous and wet. Its fingered end had + hold of Frodo's foot, and was dragging him into the water. + Sam on his knees was now slashing at it with a knife. The + arm let go of Frodo, and Sam pulled him away, crying out + for help. Twenty other arms came rippling out. The dark + water boiled, and there was a hideous stench. + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +the lady +lady +lady luck +offler + Blind Io took up the dice-box, which was a skull whose various + orifices had been stoppered with rubies, and with several of + his eyes on the Lady he rolled three fives. She smiled. This + was the nature of the Lady's eyes: they were bright green, + lacking iris or pupil, and they glowed from within. + + The room was silent as she scrabbled in her box of pieces and, + from the very bottom, produced a couple that she set down on + the board with two decisive clicks. The rest of the players, + as one God, craned forward to peer at them. + + "A wenegade wiffard and fome fort of clerk," said Offler the + Crocodile God, hindered as usual by his tusks. "Well, + weally!" With one claw he pushed a pile of bone-white tokens + into the centre of the table. + + The Lady nodded slightly. She picked up the dice-cup and held + it as steady as a rock, yet all the Gods could hear the three + cubes rattling about inside. And then she sent them bouncing + across the table. + + A six. A three. A five. + + Something was happening to the five, however. Battered by the + chance collision of several billion molecules, the die flipped + onto a point, spun gently and came down a seven. Blind Io + picked up the cube and counted the sides. + + "Come _on_," he said wearily, "Play fair." + [ The Colour of Magic, by Terry Pratchett ] +*lamp + When he came to himself he told his mother what had passed, + and showed her the lamp and the fruits he had gathered in the + garden, which were in reality precious stones. He then asked + for some food. + + "Alas! child," she said, "I have nothing in the house, but I + have spun a little cotton and will go and sell it." + + Aladdin bade her keep her cotton, for he would sell the lamp + instead. As it was very dirty she began to rub it, that it + might fetch a higher price. Instantly a hideous genie + appeared, and asked what she would have. She fainted away, + but Aladdin, snatching the lamp, said boldly: + "Fetch me something to eat!" + [ Aladdin, from The Arabian Nights, by Andrew Lang ] +lance + With this the wind increased, and the mill sails began to turn + about; which Don Quixote espying, said, 'Although thou movest + more arms than the giant Briareus thou shalt stoop to me.' + And, after saying this, and commending himself most devoutly + to his Lady Dulcinea, desiring her to succor him in that trance, + covering himself well with his buckler, and setting his lance + on his rest, he spurred on Rozinante, and encountered with the + first mill that was before him, and, striking his lance into + the sail, the wind swung it about with such fury, that it broke + his lance into shivers, carrying him and his horse after it, + and finally tumbled him a good way off from it on the field in + evil plight. + [ Don Quixote of La Mancha, by Miquel de Cervantes Saavedra ] +land mine + Your heart is intact, your brain is not badly damaged, but the rest + of your injuries are comparable to stepping on a land mine. You'd + never walk again, and you'd be in great pain. You would come to + wish you had not survived. + [ Steel Beach, by John Varley ] +*lantern + While pretending to be a fancy safety lamp, it is in fact + battery powered. A discreet little switch is marked "on/off" + in elaborate lettering. + [ Adventure 770, by Mike Arnautov ] +# citation is a descriptive passage from the original text adventure game +lava +* lava + You are on the edge of a breath-taking view. Far below you + is an active volcano, from which great gouts of molten lava + come surging out, cascading back down into the depths. The + glowing rock fills the farthest reaches of the cavern with a + blood-red glare, giving everything an eerie, macabre appearance. + The air is filled with flickering sparks of ash and a heavy + smell of brimstone. The walls are hot to the touch, and the + thundering of the volcano drowns out all other sounds. + Embedded in the jagged roof far overhead are myriad twisted + formations composed of pure white alabaster, which scatter the + murky light into sinister apparitions upon the walls. To one + side is a deep gorge, filled with a bizarre chaos of tortured + rock which seems to have been crafted by the devil himself. + An immense river of fire crashes out from the depths of the + volcano, burns its way through the gorge, and plummets into a + bottomless pit far off to your left. To the right, an immense + geyser of blistering steam erupts continuously from a barren + island in the center of a sulfurous lake, which bubbles + ominously. The far right wall is aflame with an incandescence + of its own, which lends an additional infernal splendor to the + already hellish scene. A dark, forboding passage exits to the + south. + [ Adventure, by Will Crowther and Don Woods ] +leash + They had splendid heads, fine shoulders, strong legs, and + straight tails. The spots on their bodies were jet-black and + mostly the size of a two-shilling piece; they had smaller + spots on their heads, legs, and tails. Their noses and eye- + rims were black. Missis had a most winning expression. + Pongo, though a dog born to command, had a twinkle in his + eye. They walked side by side with great dignity, only + putting the Dearlys on the leash to lead them over crossings. + [ The Hundred and One Dalmatians, by Dodie Smith ] +lembas* + In the morning, as they were beginning to pack their slender + goods, Elves that could speak their tongue came to them and + brought them many gifts of food and clothing for their + journey. The food was mostly in the form of very thin cakes, + made of a meal that was baked a light brown on the outside, + and inside was the colour of cream. Gimli took up one of the + cakes and looked at it with a doubtful eye. + 'Cram,' he said under his breath, as he broke off a crisp + corner and nibbled at it. His expression quickly changed, + and he ate all the rest of the cake with relish. + 'No more, no more!' cried the Elves laughing. 'You have + eaten enough already for a long day's march.' + 'I thought it was only a kind of cram, such as the Dalemen + make for journeys in the wild,' said the Dwarf. + 'So it is,' they answered. 'But we call it lembas or + waybread, and it is more strengthening than any foods made by + Men, and it is more pleasant than cram, by all accounts.' + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +lemure +larvae + The Larvae (Lemures) are Roman spirits of deceased family + members. These malignant spirits dwell throughout the house + and frighten the inhabitants. People tried to reconcile or + avert the Larvae with strange ceremonies which took place on + May 9, 11, and 13; this was called the "Feast of the Lemures". + The master of the house usually performed these ceremonies, + either by offering black beans to the spirits or chasing them + away by making a lot of noise. Their counterparts are the + Lares, friendly and beneficent house spirits. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +leocrotta +leu*otta + ... the leucrocotta, a wild beast of extraordinary swiftness, + the size of the wild ass, with the legs of a Stag, the neck, + tail, and breast of a lion, the head of a badger, a cloven + hoof, the mouth slit up as far as the ears, and one continuous + bone instead of teeth; it is said, too, that this animal can + imitate the human voice. + [ Curious Creatures in Zoology, by John Ashton ] +leprechaun + The Irish Leprechaun is the Faeries' shoemaker and is known + under various names in different parts of Ireland: + Cluricaune in Cork, Lurican in Kerry, Lurikeen in Kildare + and Lurigadaun in Tipperary. Although he works for the + Faeries, the Leprechaun is not of the same species. He is + small, has dark skin and wears strange clothes. His nature + has something of the manic-depressive about it: first he + is quite happy, whistling merrily as he nails a sole on to a + shoe; a few minutes later, he is sullen and morose, drunk + on his home-made heather ale. The Leprechaun's two great + loves are tobacco and whiskey, and he is a first-rate con-man, + impossible to out-fox. No one, no matter how clever, has ever + managed to cheat him out of his hidden pot of gold or his + magic shilling. At the last minute he always thinks of some + way to divert his captor's attention and vanishes in the + twinkling of an eye. + [ A Field Guide to the Little People + by Nancy Arrowsmith & George Moorse ] +*lich + But on its heels ere the sunset faded, there came a second + apparition, striding with incredible strides and halting when + it loomed almost upon me in the red twilight-the monstrous mummy + of some ancient king still crowned with untarnished gold but + turning to my gaze a visage that more than time or the worm had + wasted. Broken swathings flapped about the skeleton legs, and + above the crown that was set with sapphires and orange rubies, a + black something swayed and nodded horribly; but, for an instant, + I did not dream what it was. Then, in its middle, two oblique + and scarlet eyes opened and glowed like hellish coals, and two + ophidian fangs glittered in an ape-like mouth. A squat, furless, + shapeless head on a neck of disproportionate extent leaned + unspeakably down and whispered in the mummy's ear. Then, with + one stride, the titanic lich took half the distance between us, + and from out the folds of the tattered sere-cloth a gaunt arm + arose, and fleshless, taloned fingers laden with glowering gems, + reached out and fumbled for my throat . . . + [ The Abominations of Yondo, by Clark Ashton Smith ] +lichen + The chamber was of unhewn rock, round, as near as might + be, eighteen or twenty feet across, and gay with rich + variety of fern and moss and lichen. The fern was in + its winter still, or coiling for the spring-tide; but + moss was in abundant life, some feathering, and some + gobleted, and some with fringe of red to it. + [ Lorna Doone, by R.D. Blackmore ] +# takes "light" when specifying 'y' +~* of light +* light +light + Strange creatures formed from energy rather than matter, + lights are given to self-destructive behavior when battling + foes. +gecko +iguana +lizard + Lizards, snakes and the burrowing amphisbaenids make up the + order Squamata, meaning the scaly ones. The elongate, slim, + long-tailed bodies of lizards have become modified to enable + them to live in a wide range of habitats. Lizards can be + expert burrowers, runners, swimmers and climbers, and a few + can manage crude, short-distance gliding on rib-supported + "wings". Most are carnivores, feeding on invertebrate and + small vertebrate prey, but others feed on vegetation. + [ Macmillan Illustrated Animal Encyclopedia ] +loki + Loki, or Lopt, is described in Snorri's _Edda_ as being + "pleasing and handsome in appearance, evil in character, and + very capricious in behaviour". He is the son of the giant + Farbauti and of Laufey. + Loki is the Norse god of cunning, evil, thieves, and fire. + He hated the other gods and wanted to ruin them and overthrow + the universe. He committed many murders. As a thief, he + stole Freyja's necklace, Thor's belt and gauntlets of power, + and the apples of youth. Able to shapechange at will, he is + said to have impersonated at various times a mare, flea, fly, + falcon, seal, and an old crone. As a mare he gave birth to + Odin's horse Sleipnir. He also allegedly sired the serpent + Midgard, the mistress of the netherworld, Hel, and the wolf + Fenrir, who will devour the sun at Ragnarok. +*longbow of diana + This legendary bow grants ESP when carried and can reflect magical + attacks when wielded. When invoked it provides a supply of arrows. +# long worm -- see "worm" +looking glass +mirror + But as Snow White grew, she became more and more beautiful, + and by the time she was seven years old she was as beautiful + as the day and more beautiful than the queen herself. One + day when the queen said to her mirror: + + "Mirror, Mirror, here I stand. + Who is the fairest in the land?" - + + the mirror replied: + + "You, O Queen, are the fairest here, + But Snow White is a thousand times more fair." + [ Snow White, by Jakob and Wilhelm Grimm ] +lord carnarvon + Lord Carnarvon was a personality who could have been produced + nowhere but in England, a mixture of sportsman and collector, + gentleman and world traveler, a realist in action and a + romantic in feeling. ... In 1903 he went for the first time + to Egypt in search of a mild climate and while there visited + the excavation sites of several archaeological expeditions. + ... In 1906 he began his own excavations. + [ Gods, Graves, and Scholars, by C.W. Ceram ] +lord sato + Lord Sato was the family head of the Taro Clan, and a mighty + daimyo. He is a loyal servant of the Emperor, and will do + everything in his power to further the imperial cause. +lord surt* + Yet first was the world in the southern region, which was + named Muspell; it is light and hot; that region is glowing + and burning, and impassable to such as are outlanders and + have not their holdings there. He who sits there at the + land's-end, to defend the land, is called Surtr; he brandishes + a flaming sword, and at the end of the world he shall go forth + and harry, and overcome all the gods, and burn all the + world with fire. + [ The Prose Edda, by Snorri Sturluson ] +# if a quote for good luck gets added, make this one exclusively bad luck +luck +bad luck + "[...] We'll succeed and you'll get all the fortune you came + seeking." + Jack shook his head dismally. "You'll be better off without + me," he said. "I'm nothing but bad luck. It's because I'm + cursed. A farmer I met on the way to the city cursed me. He + said, 'I curse you Jack. May you never know wealth. May all + that you wish for be denied you.'" + "What a horrid man," said Eddie. "Why did he curse you like + that?" + Jack shrugged [...]. "Bad grace, I suppose. Just because I + shot off his ear and made him jump into a pit full of spikes." + [ the hollow chocolate bunnies of the apocalypse, + by Robert Rankin ] +# [no relation... both cover and title page list this +# book's title in all lower case; however, its sequel, +# "the toyminator", refers to it using conventional +# capitalization in a couple of early footnotes] +lug* + Lugh, or Lug, was the sun god of the Irish Celts. One of his + weapons was a rod-sling which worshippers sometimes saw in + the sky as a rainbow. As a tribal god, he was particularly + skilled in the use of his massive, invincible spear, which + fought on its own accord. One of his epithets is _lamfhada_ + (of the long arm). He was a young and apparently more + attractive deity than Dagda, the father of the gods. Being + able to shapeshift, his name translates as lynx. +lurker* + These dungeon scavengers are very adept at blending into the + surrounding walls and ceilings of the dungeon due to the + stone-like coloring of their skin. +lycanthrope +were* +human were* +*were + In 1573, the Parliament of Dole published a decree, permitting + the inhabitants of the Franche-Comte to pursue and kill a + were-wolf or loup-garou, which infested that province, + "notwithstanding the existing laws concerning the chase." + The people were empowered to "assemble with javelins, + halberds, pikes, arquebuses and clubs, to hunt and pursue the + said were-wolf in all places where they could find it, and to + take, burn, and kill it, without incurring any fine or other + penalty." The hunt seems to have been successful, if we may + judge from the fact that the same tribunal in the following + year condemned to be burned a man named Giles Garnier, who + ran on all fours in the forest and fields and devoured little + children, "even on Friday." The poor lycanthrope, it appears, + had as slight respect for ecclesiastical feasts as the French + pig, which was not restrained by any feeling of piety from + eating infants on a fast day. + [ The History of Vampires, by Dudley Wright ] +lynx + To dream of seeing a lynx, enemies are undermining your + business and disrupting your home affairs. For a woman, + this dream indicates that she has a wary woman rivaling her + in the affections of her lover. If she kills the lynx, she + will overcome her rival. + [ 10,000 Dreams Interpreted, by Gustavus Hindman Miller ] +~*sceptre of might +mace +sceptre + Originally a club armed with iron, and used in war; now a staff + of office pertaining to certain dignitaries, as the Speaker of + the House of Commons, Lord Mayors, Mayors etc. Both sword and + mace are symbols of dignity, suited to the times when men went + about in armour, and sovereigns needed champions to vindicate + their rights. + [ Brewer's Concise Dictionary of Phrase and Fable ] +magic marker + The pen is mightier than the sword. + [ Richelieu, by Edward Bulwer-Lytton ] +magic mirror of merlin + [...] In Dehenbarth (that now South Wales is hight, + What time King Ryence reigned, and dealed right) + The great magician Merlin had devised, + By his deep science, and hell-dreaded might, + A looking-glass, right wondrously aguised, + Whose virtues through the wide world soon were solemnized. + + It virtue had to show in perfect sight + Whatever thing was in the world contained, + Betwixt the lowest earth and heaven's height, + So that it to the looker appertained; + Whatever foe had wrought, or friend had fained, + Therein discovered was, nor aught might pass, + Nor aught in secret from the same remained; +# we'll leave out the part about it being a crystal ball... +# For-thy it round and hollow shaped was, +# Like the world itself, and seemed a world of glass. + [ The Faerie Queene, by Edmund Spencer ] +magicbane + A highly enchanted athame said to hold the power to channel + and direct magical energy. +mail d*emon + It is rumoured that these strange creatures can be harmed by + domesticated canines only. +ma*annan* + Normally called Manannan, Ler's son was the patron of + merchants and sailors. Manannan had a sword which never + failed to slay, a boat which propelled itself wherever its + owner wished, a horse which was swifter than the wind, and + magic armour which no sword could pierce. He later became + god of the sea, beneath which he lived in Tir na nOc, the + underworld. +manes + Manes or Di Manes ("good ones") is the euphemistic description + of the souls of the deceased, worshipped as divinities. The + formula D.M. (= Dis Manibus; "dedicated to the Manes-gods") + can often be found on tombstones. Manes also means + metaphorically 'underworld' or 'realm of death'. Festivals + in honor of the dead were the Parentalia and the Feralia, + celebrated in February. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] + + The gnats of the dungeon, these swarming monsters are rarely + seen alone. +marduk + First insisting on recognition as supreme commander, Marduk + defeated the Dragon, cut her body in two, and from it created + heaven and earth, peopling the world with human beings who not + unnaturally showed intense gratitude for their lives. The + gods were also properly grateful, invested him with many + titles, and eventually permitted themselves to be embodied in + him, so that he became supreme god, plotting the whole course + of known life from the paths of the planets to the daily + events in the lives of men. + [ The Immortals, by Derek and Julia Parker ] +marilith + The marilith has a torso shaped like that of a human female, + and the lower body of a great snake. It has multiple arms, + and can freely attack with all of them. Since it is + intelligent enough to use weapons, this means it can cause + great damage. +mars + The god of war, and one of the most prominent and worshipped + gods. In early Roman history he was a god of spring, growth in + nature, and fertility, and the protector of cattle. Mars is + also mentioned as a chthonic god (earth-god) and this could + explain why he became a god of death and finally a god of war. + He is the son of Jupiter and Juno. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +martial arts +unarmed combat +bare*handed combat + "What else can we do? None of this is fast enough." "It will have + to be." He stood up, a tall, broad wall of a man. "Why don't you + ask around, see if anyone in the neighborhoods knows anything + about martial arts. You need more than a book or two to learn + good dependable unarmed combat." + [ Parable of the Sower, by Octavia Butler ] +master assassin + He strolled down the stairs, followed by a number of assassins. + When he was directly in front of Ymor he said: "I've come for + the tourist." ... + "One step more and you'll leave here with fewer eyeballs than + you came with," said the thiefmaster. "So sit down and have + a drink, Zlorf, and let's talk about this sensibly. _I_ + thought we had an agreement. You don't rob -- I don't kill. + Not for payment, that is," he added after a pause. + Zlorf took the proffered beer. + "So?" he said. "I'll kill him. Then you rob him. Is he that + funny looking one over there?" + "Yes." + Zlorf stared at Twoflower, who grinned at him. He shrugged. + He seldom wasted time wondering why people wanted other people + dead. It was just a living. + "Who is your client, may I ask?" said Ymor. + Zlorf held up a hand. "Please!" he protested. "Professional + etiquette." + [ The Colour of Magic, by Terry Pratchett ] +master key of thievery + This skeleton key was fashioned in ages past and imbued with + a powerful magic which allows it to open any lock. When + carried, it grants its owner warning, teleport control, and + reduces all physical damage by half. Finally, when invoked, + it has the ability to disarm any trapped lock. +master of thieves + There was a flutter of wings at the window. Ymor shifted his + bulk out of the chair and crossed the room, coming back with + a large raven. After he'd unfastened the message capsule from + its leg it flew up to join its fellows lurking among the + rafters. Withel regarded it without love. Ymor's ravens were + notoriously loyal to their master, to the extent that Withel's + one attempt to promote himself to the rank of greatest thief + in Ankh-Morpork had cost their master's right hand man his + left eye. But not his life, however. Ymor never grudged a + man his ambitions. + [ The Colour of Magic, by Terry Pratchett ] +mastodon + Any large, elephantlike mammal of the genera Mammut, Mastodon, + etc., from the Oligocene and Pleistocene epochs, having + conical projections on the molar teeth. + [ Webster's Encyclopedic Unabridged Dictionary + of the English Language ] +*mattock + A mattock is an agricultural tool similar to a mining pick. + It is distinguished by the head terminating in a broader blade + rather than a narrow spike, which makes it particularly suitable + for breaking up moderately hard ground. ... During the Middle + Ages of Europe, the mattock served as an improvised shafted + weapon for the poorer classes. + [ Wikipedia, the free encyclopedia ] +meat* +huge chunk of meat + Some hae meat and canna eat, + And some would eat that want it; + But we hae meat, and we can eat, + Sae let the Lord be thankit. + [ Grace Before Meat, by Robert Burns ] +# nethack's Medusa doesn't match the myth very closely, particularly in +# how reflection is involved, but that's par for the course +# +# this used to begin "Medusa, one of the three Gorgons or Graeae" as +# if Graeae and Gorgons where the same thing, but Bulfinch's Mythology +# indicates that they are quite different; since the first paragraph is +# a made-up introduction to an excerpt from that work, the contradictory +# mention of Graeae has been removed +medusa +perseus +shield of reflection + Medusa, one of the three Gorgons, is the only one of her + sisters to have assumed mortal form and inhabited the dungeon + world. + [] + + When Perseus was grown up Polydectes sent him to attempt the + conquest of Medusa, a terrible monster who had laid waste the + country. She was once a beautiful maiden whose hair was her + chief glory, but as she dared to vie in beauty with Minerva, + the goddess deprived her of her charms and changed her + beautiful ringlets into hissing serpents. She became a cruel + monster of so frightful an aspect that no living thing could + behold her without being turned into stone. All around the + cavern where she dwelt might be seen the stony figures of men + and animals which had chanced to catch a glimpse of her and + had been petrified with the sight. Perseus, favoured by + Minerva and Mercury, the former of whom lent him her shield + and the latter his winged shoes, approached Medusa while she + slept and taking care not to look directly at her, but guided + by her image reflected in the bright shield which he bore, he + cut off her head and gave it to Minerva, who fixed it in the + middle of her Aegis. + [ Bulfinch's Mythology, by Thomas Bulfinch ] +melon + "What is it, Umbopa, son of a fool?" I shouted in Zulu. + "It is food and water, Macumazahn," and again he waved the + green thing. + Then I saw what he had got. It was a melon. We had hit upon + a patch of wild melons, thousands of them, and dead ripe. + "Melons!" I yelled to Good, who was next me; and in another + second he had his false teeth fixed in one. + I think we ate about six each before we had done, and, poor + fruit as they were, I doubt if I ever thought anything nicer. + [ King Solomon's Mines, by H. Rider Haggard ] +mercury + Roman god of commerce, trade and travellers. He is commonly + depicted carrying a caduceus (a staff with two snakes + intertwining around it) and a purse. +*mimic + The ancestors of the modern day chameleon, these creatures can + assume the form of anything in their surroundings. They may + assume the shape of objects or dungeon features. Unlike the + chameleon though, which assumes the shape of another creature + and goes in hunt of food, the mimic waits patiently for its + meals to come in search of it. +*mind flayer + This creature has a humanoid body, tentacles around its + covered mouth, and three long fingers on each hand. Mind + flayers are telepathic, and love to devour intelligent beings, + especially humans. If they hit their victim with a tentacle, + the mind flayer will slowly drain it of all intelligence, + eventually killing its victim. +mine* +gnomish mines + Made by Dwarfs. The Rule here is that the Mine is either long + deserted or at most is inhabited by a few survivors who will + make confused claims to have been driven out/decimated by humans/ + other Dwarfs/Minions of the Dark Lord. Inhabited or not, this + Mine will be very complex, with many levels of galleries, + beautifully carved and engineered. What was being mined here + is not always evident, but at least some of the time it will + appear to have been Jewels, since it is customary to find + unwanted emeralds, etc., still embedded in the rock of the + walls. Metal will also be present, but only when made up into + armor and weapons (_wondrous_). + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +minotaur + The Minotaur was a monster, half bull, half human, the + offspring of Minos' wife Pasiphae and a wonderfully beautiful + bull. ... When the Minotaur was born Minos did not kill him. + He had Daedalus, a great architect and inventor, construct a + place of confinement for him from which escape was impossible. + Daedalus built the Labyrinth, famous throughout the world. + Once inside, one would go endlessly along its twisting paths + without ever finding the exit. + [ Mythology, by Edith Hamilton ] +mit*ra* + Originating in India (Mitra), Mithra is a god of light who + was translated into the attendant of the god Ahura Mazda in + the light religion of Persia; from this he was adopted as + the Roman deity Mithras. He is not generally regarded as a + sky god but a personification of the fertilizing power of + warm, light air. According to the _Avesta_, he possesses + 10,000 eyes and ears and rides in a chariot drawn by white + horses. Mithra, according to Zarathustra, is concerned with + the endless battle between light and dark forces: he + represents truth. He is responsible for the keeping of oaths + and contracts. He is attributed with the creation of both + plants and animals. His chief adversary is Ahriman, the + power of darkness. + [ The Encyclopaedia of Myths and Legends of All Nations, + by Herbert Spencer Robinson and Knox Wilson ] +*mithril* + _Mithril_! All folk desired it. It could be beaten like + copper, and polished like glass; and the Dwarves could make + of it a metal, light and yet harder than tempered steel. + Its beauty was like to that of common silver, but the beauty + of _mithril_ did not tarnish or grow dim. + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +*mitre of holiness + This helm of brilliance performs all of the normal functions + of a helm of brilliance, but also has the ability to protect + anyone who carries it from fire. When invoked, it boosts + the energy of the invoker, allowing them to cast more spells. +mjollnir + Forged by the dwarves Eitri and Brokk, in response to Loki's + challenge, Mjollnir is an indestructible war hammer. It has + two magical properties: when thrown it always returned to + Thor's hand; and it could be made to shrink in size until it + could fit inside Thor's shirt. Its only flaw is that it has + a short handle. The other gods judged Mjollnir the winner of + the contest because, of all the treasures created, it alone had + the power to protect them from the giants. As the legends + surrounding Mjollnir grew, it began to take on the quality of + "vigja", or consecration. Thor used it to consecrate births, + weddings, and even to raise his goats from the dead. In the + Norse mythologies Mjollnir is considered to represent Thor's + governance over the entire cycle of life - fertility, birth, + destruction, and resurrection. +mog + Mog is known as the Spider God. Mog resembles a four-limbed + spider with a handsome, if not entirely human, face. +~slime mold +*mold + Mold, multicellular organism of the division Fungi, typified + by plant bodies composed of a network of cottony filaments. + The colors of molds are due to spores borne on the filaments. + Most molds are saprophytes. Some species (e.g., penicillium) + are used in making cheese and antibiotics. + [ The Concise Columbia Encyclopedia ] +mol?ch + And the Lord spake unto Moses, saying, + Again, thou shalt say to the children of Israel, Whosoever + he be of the children of Israel, or of the strangers that + sojourn in Israel, that giveth any of his seed unto Molech; + he shall surely be put to death: the people of the land shall + stone him with stones. + And I will set my face against that man, and will cut him off + from among his people; because he hath given of his seed unto + Molech, to defile my sanctuary, and to profane my holy name. + And if the people of the land do any ways hide their eyes + from the man, when he giveth of his seed unto Molech, and kill + him not: + Then I will set my face against that man, and against his + family, and will cut him off, and all that go a whoring after + him, to commit whoredom with Molech, from among their people. + [ Leviticus 20:1-5 ] +monk +* monk +grand master +master kaen + One day, an army general invited the Buddhist monk I-Hsiu + (literally, "One Rest") to his military head office for a + dinner. I-Hsiu was not accustomed to wearing luxurious + clothings and so he just put on an old ordinary casual + robe to go to the military base. To him, "form is void". + + As he approached the base, two soldiers appeared before him + and shouted, "Where does this beggar came from? Identify + yourself! You do not have permission to be around here!" + + "My name is I-Hsiu Dharma Master. I am invited by your + general for a supper." + + The two soldiers examined the monk closely and said, "You + liar. How come my general invites such a shabby monk to + dinner? He invites the very solemn venerable I-Hsiu to our + base for a great ceremony today, not you. Now, get out!" + + I-Hsiu was unable to convince the soldiers that he was + indeed the invited guest, so he returned to the temple + and changed to a very formal solemn ceremonial robe for + the dinner. And as he returned to the military base, the + soldiers observed that he was such a great Buddhist monk, + let him in with honour. + + At the dinner, I-Hsiu sat in front of the table full of + food but, instead of putting the food into his mouth, he + picked up the food with his chopsticks and put it into + his sleeves. The general was curious, and whispered to + him, "This is very embarrassing. Do you want to take + some food back to the temple? I will order the cook to + prepare some take out orders for you." "No" replied the + monk. "When I came here, I was not allowed into the + base by your soldiers until I wear this ceremonial robe. + You do not invite me for a dinner. You invite my robe. + Therefore, my robe is eating the food, not me." + [ Dining with a General - a Zen Buddhism Koan, + translation by Yiu-man Chan ] +monkey + "Listen, man-cub," said the Bear, and his voice rumbled like + thunder on a hot night. "I have taught thee all the Law of + the Jungle for all the peoples of the jungle--except the + Monkey-Folk who live in the trees. They have no law. They + are outcasts. They have no speech of their own, but use the + stolen words which they overhear when they listen, and peep, + and wait up above in the branches. Their way is not our way. + They are without leaders. They have no remembrance. They + boast and chatter and pretend that they are a great people + about to do great affairs in the jungle, but the falling of + a nut turns their minds to laughter and all is forgotten. + We of the jungle have no dealings with them. We do not drink + where the monkeys drink; we do not go where the monkeys go; + we do not hunt where they hunt; we do not die where they die...." + [ The Jungle Book, by Rudyard Kipling ] +morning star + The morning star was a medieval weapon resembling a mace, but + with a large spike on the end and smaller spikes around the + circumference. It was also known as the goedendag (from the + Dutch word for "good day") and the holy water sprinkler (from + its resemblance to the aspergillum sometimes used in the + Catholic Mass). It was used by both cavalry and infantry; + the horseman's weapon typically had a shorter haft than the + footman's, which might be up to six feet long. It came into + use in the beginning of the 14th century. + + The name "morning star" is often erroneously applied to the + military flail (also known as the therscol), a similar weapon, + but with the head attached by a short chain. + [ Dictionary of Medieval Knighthood and Chivalry, + by Bradford Broughton ] +mumak* + ... the Mumak of Harad was indeed a beast of vast bulk, and + the like of him does not walk now in Middle-Earth; his kin + that live still in latter days are but memories of his girth + and majesty. On he came, ... his great legs like trees, + enormous sail-like ears spread out, long snout upraised like + a huge serpent about to strike, his small red eyes raging. + His upturned hornlike tusks ... dripped with blood. + [ The Two Towers, by J.R.R. Tolkien ] +*mummy + But for an account of the manner in which the body was + bandaged, and a list of the unguents and other materials + employed in the process, and the words of power which were + spoken as each bandage was laid in its place, we must have + recourse to a very interesting papyrus which has been edited + and translated by M. Maspero under the title of Le Rituel de + l'Embaumement. ... + Everything that could be done to preserve the body was now + done, and every member of it was, by means of the words of + power which changed perishable substances into imperishable, + protected to all eternity; when the final covering of purple + or white linen had been fastened upon it, the body was ready + for the tomb. + [ Egyptian Magic, by E.A. Wallis Budge ] +mummy wrapping + He held a white cloth -- it was a serviette he had brought + with him -- over the lower part of his face, so that his + mouth and jaws were completely hidden, and that was the + reason for his muffled voice. But it was not that which + startled Mrs. Hall. It was the fact that all his forehead + above his blue glasses was covered by a white bandage, and + that another covered his ears, leaving not a scrap of his + face exposed excepting only his pink, peaked nose. It was + bright, pink, and shiny just as it had been at first. He + wore a dark-brown velvet jacket with a high, black, linen- + lined collar turned up about his neck. The thick black + hair, escaping as it could below and between the cross + bandages, project in curious tails and horns, giving him + the strangest appearance conceivable. + [ The Invisible Man, by H.G. Wells ] +*naga* +*naja* + The naga is a mystical creature with the body of a snake and + the head of a man or woman. They will fiercely protect the + territory they consider their own. Some nagas can be forced + to serve as guardians by a spellcaster of great power. +naginata + A Japanese pole-arm, fitted with a curved single-edged blade. + The blades ranged in length from two to four feet, mounted on + shafts about four to five feet long. The naginata were cut + with a series of short grooves near to the tang, above which + the back edge was thinned, but not sharpened, so that the + greater part of the blade was a flattened diamond shape in + section. Seen in profile, the curve is slight or non- + existent near the tang, becoming more pronounced towards the + point. + [] + + "With his naginata he killed five, but with the sixth it + snapped asunder in the midst and, flinging it away, he drew + his sword, wielding it in the zigzag style, the interlacing, + cross, reversed dragonfly, waterwheel, and eight-sides-at- + once styles of fencing and cutting down eight men; but as he + brought down the ninth with a mighty blow on the helmet, the + blade snapped at the hilt." + [ Story of Tsutsui no Jomio Meishu from Tales of Heike ] +nalfeshnee + Not only do these demons do physical damage with their claws + and bite, but they are capable of using magic as well. +nalzok + Nalzok is Moloch's cunning and unfailingly loyal battle + lieutenant, to whom he trusts the command of warfare when he + does not wish to exercise it himself. Nalzok is a major + demon, known to command the undead. He is hungry for power, + and secretly covets Moloch's position. Moloch doesn't trust + him, but, trusting his own power enough, chooses to allow + Nalzok his position because he is useful. +neanderthal* + 1. Valley between Duesseldorf and Elberfeld in Germany, + where an ancient skull of a prehistoric ancestor to modern + man was found. 2. Human(oid) of the race mentioned above. +neferet +neferet the green + Neferet the Green holds office in her hidden tower, only + reachable by magical means, where she teaches her apprentices + the enigmatic skills of occultism. Despite her many years, she + continues to investigate new spells, especially those involving + translocation. It is further rumored that when she was an + apprentice herself, she accidentally turned her skin green, and + has kept it that way ever since. +newt + (kinds of) small animal, like a lizard, which spends most of + its time in the water. + [ Oxford's Student's Dictionary of Current English ] + + "Fillet of a fenny snake, + In the cauldron boil and bake; + Eye of newt and toe of frog, + Wool of bat and tongue of dog, + Adder's fork and blind-worm's sting, + Lizard's leg and howlet's wing, + For a charm of powerful trouble, + Like a hell-broth boil and bubble." + [ Macbeth, by William Shakespeare ] +ninja-to + A Japanese broadsword. +*norn + The Norns were the three Norse Fates, or the goddesses of fate. + Female giants, they brought the wonderful Golden Age to an end. + They cast lots over the cradle of every child that was born, + and placed gifts in the cradle. Their names were Urda, + Verdandi, and Skuld, representing the past, the present, and + the future. Urda and Verdandi were kindly disposed, but Skuld + was cruel and savage. Their tasks were to sew the web of + fate, to water the sacred ash, Yggdrasil, and to keep it in + good condition by placing fresh earth around it daily. In her + fury, Skuld often spoiled the work of her sisters by tearing + the web to shreds. + [ The Encyclopaedia of Myths and Legends of All Nations, + by Herbert Spencer Robinson and Knox Wilson ] +nunchaku + A nunchaku is two sections of wood (or metal in modern + incarnations) connected by a cord or chain. There is much + controversy over its origins; some say it was originally a + Chinese weapon, others say it evolved from a threshing flail; + one theory purports that it was developed from a horse's bit. + Chinese nunchaku tend to be rounded, whereas Japanese are + octagonal, and they were originally linked by horse hair. + There are many variations on the nunchaku, ranging from the + three sectional staff (san-setsu-kon nunchaku), to smaller + multi-section nunchaku. The nunchaku was popularized by + Bruce Lee in a number of films, made in both Hollywood and + Hong Kong. + [ Wikipedia, the free encyclopedia ] +*nymph +naiad + A female creature from Roman and Greek mythology, the nymph + occupied rivers, forests, ponds, etc. A nymph's beauty is + beyond words: an ever-young woman with sleek figure and + long, thick hair, radiant skin and perfect teeth, full lips + and gentle eyes. A nymph's scent is delightful, and her + long robe glows, hemmed with golden threads and embroidered + with rainbow hues of unearthly magnificence. A nymph's + demeanour is graceful and charming, her mind quick and witty. + [] + + Theseus felt her voice pulling him down into fathoms of + sleep. The song was the skeleton of his dream, and the dream + was full of terror. Demon girls were after him, and a bull- + man was goring him. Everywhere there was blood. There was + pain. There was fear. But his head was in the nymph's lap + and her musk was about him, her voice weaving the dream. He + knew then that she had been sent to tell him of something + dreadful that was to happen to him later. Her song was a + warning. But she had brought him a new kind of joy, one that + made him see everything differently. The boy, who was to + become a hero, suddenly knew then what most heroes learn + later -- and some too late -- that joy blots suffering and + that the road to nymphs is beset by monsters. + [ The Minotaur, by Bernard Evslin ] +obsidian* + A volcanic glass, homogeneous in texture and having a low water + content, with a vitreous luster and a conchoidal fracture. The + color is commonly black, but may be some shade of red or brown, + and cut sections sometimes appear to be green. Like other + volcanic glasses, obsidian is a lava that has cooled too quickly + for the contained minerals to crystallize. In chemical + composition it is rich in silica and similar to granite. It is + favored by primitive peoples for knives, arrowheads, spearheads, + and other weapons and tools. + [ The Columbia Encyclopedia, Sixth Edition ] +odin + Also called Sigtyr (god of Victory), Val-father (father of + the slain), One-Eyed, Hanga-god (god of the hanged), Farma- + god (god of cargoes), Hapta-god (god of prisoners), and + Othin. He is the prime god of the Norsemen: god of war and + victory, wisdom and prophecy, poetry, the dead, air and wind, + hospitality, and magic. + As the god of war and victory, Odin is ruler of the Valkyries, + warrior-maidens who lived in the halls of Valhalla in Asgard, + the hall of dead heroes where he held his court. + These chosen ones will defend the realm of the gods against + the Frost Giants on the final day of reckoning, Ragnarok. + As god of the wind, Odin rides through the air on his eight- + footed horse, Sleipnir, wielding Gungner, his spear, normally + accompanied by his ravens, Hugin and Munin, who he would also + use as his spies. + As a god of hospitality, he enjoys visiting the earth in + disguise to see how people were behaving and to see how they + would treat him, not knowing who he was. + Odin is usually represented as a one-eyed wise old man with a + long white beard and a wide-brimmed hat (he gave one of his + eyes to Mimir, the guardian of the well of wisdom in Hel, in + exchange for a draught of knowledge). +ogre* + Anyone who has met a gluttonous, nude, angry ogre, will not + easily forget this encounter -- if he survives it at all. + Both male and female ogres can easily grow as tall as three + metres. Build and facial expressions would remind one of a + Neanderthal. Its small, pointy, keen teeth are striking. + Since ogres avoid direct sunlight, their ragged, unfurry + skin is as white as a sheet. They enjoy coating their body + with lard and usually wear nothing but a loin-cloth. An elf + would smell its rancid stench at ten metres distance. + Ogres are solitary creatures: very rarely one may encounter + a female with two or three young. They are the only real + carnivores among the humanoids, and its favourite meal is -- + not surprisingly -- human flesh. They sometimes ally with + orcs or goblins, but only when they anticipate a good meaty + meal. + [ het Boek van de Regels; Het Oog des Meesters ] +oilskin cloak + During our watches below we overhauled our clothes, and made + and mended everything for bad weather. Each of us had made + for himself a suit of oil-cloth or tarpaulin, and these we + got out, and gave thorough coatings of oil or tar, and hung + upon the stays to dry. Our stout boots, too, we covered + over with a thick mixture of melted grease and tar. Thus we + took advantage of the warm sun and fine weather of the + Pacific to prepare for its other face. + [ Two Years Before the Mast, by Richard Henry Dana ] +oilskin sack + Summer passed all too quickly. On the last day of camp, Mr. + Brickle called his counselors together and paid them what he + owed them. Louis received one hundred dollars - the first + money he had ever earned. He had no wallet and no pockets, + so Mr. Brickle placed the money in a waterproof bag that had + a drawstring. He hung this moneybag around Louis' neck, + along with the trumpet, the slate, the chalk pencil, and the + lifesaving medal. + [ The Trumpet of the Swan, by E.B. White ] +olog-hai + But at the end of the Third Age a troll-race not before seen + appeared in southern Mirkwood and in the mountain borders of + Mordor. Olog-hai they were called in the Black Speech. That + Sauron bred them none doubted, though from what stock was not + known. Some held that they were not Trolls but giant Orcs; + but the Olog-hai were in fashion of body and mind quite unlike + even the largest of Orc-kind, whom they far surpassed in size + and power. Trolls they were, but filled with the evil will + of their master: a fell race, strong, agile, fierce and + cunning, but harder than stone. Unlike the older race of the + Twilight they could endure the Sun.... They spoke little, + and the only tongue they knew was the Black Speech of Barad-dur. + [ The Return of the King, by J.R.R. Tolkien ] +oracle +delphi +p*thia + Delphi under towering Parnassus, where Apollo's oracle was, + plays an important part in mythology. Castalia was its + sacred spring; Cephissus its river. It was held to be the + center of the world, so many pilgrims came to it, from + foreign countries as well as Greece. No other shrine rivaled + it. The answers to the questions asked by the anxious + seekers for Truth were delivered by a priestess who went into + a trance before she spoke. + [ Mythology, by Edith Hamilton ] +orange +pear + What was the fruit like? Unfortunately, no one can describe + a taste. All I can say is that, compared with those fruits, + the freshest grapefruit you've ever eaten was dull, and the + juiciest orange was dry, and the most melting pear was hard + and woody, and the sweetest wild strawberry was sour. And + there were no seeds or stones, and no wasps. If you had once + eaten that fruit, all the nicest things in this world would + taste like medicines after it. But I can't describe it. You + can't find out what it is like unless you can get to that + country and taste it for yourself. + [ The Last Battle, by C.S. Lewis ] +*orb of detection + This Orb is a crystal ball of exceptional powers. When + carried, it grants ESP, limits damage done by spells, and + protects the carrier from magic missiles. When invoked it + allows the carrier to become invisible. +*orb of fate + Some say that Odin himself created this ancient crystal ball, + although others argue that Loki created it and forged Odin's + signature on the bottom. In any case, it is a powerful + artifact. Anyone who carries it is granted the gift of + warning, and damage, both spell and physical, is partially + absorbed by the orb itself. When invoked it has the power + to teleport the invoker between levels. +goblin king +orcrist + The Great Goblin gave a truly awful howl of rage when he + looked at it, and all his soldiers gnashed their teeth, + clashed their shields, and stamped. They knew the sword at + once. It had killed hundreds of goblins in its time, when + the fair elves of Gondolin hunted them in the hills or did + battle before their walls. They had called it Orcrist, + Goblin-cleaver, but the goblins called it simply Biter. + They hated it and hated worse any one that carried it. + [ The Hobbit, by J.R.R. Tolkien ] +orcus + Orcus, Prince of the Undead, has a ram's head and a poison + stinger. He is most feared, though, for his powerful magic + abilities. His wand causes death to those he chooses. +~orc ??m* +~orcish barbarian +~orcish ranger +~orcish rogue +~orcish wizard +orc* +* orc +uruk*hai + Orcs, bipeds with a humanoid appearance, are related to the + goblins, but much bigger and more dangerous. The average orc + is only moderately intelligent, has broad, muscled shoulders, + a short neck, a sloping forehead and a thick, dark fur. + Their lower eye-teeth are pointing forward, like a boar's. + Female orcs are more lightly built and bare-chested. Not + needing any clothing, they do like to dress in variegated + apparels. Suspicious by nature, orcs live in tribes or + hordes. They tend to live underground as well as above + ground (but they dislike sunlight). Orcs can use all weapons, + tools and armours that are used by men. Since they don't have + the talent to fashion these themselves, they are constantly + hunting for them. There is nothing a horde of orcs cannot + use. + [ het Boek van de Regels; Het Oog des Meesters ] +orion +sirius + Orion was the son of Neptune. He was a handsome giant and a + mighty hunter. His father gave him the power of wading + through the depths of the sea, or, as others say, of + walking on its surface. + + He dwelt as a hunter with Diana (Artemis), with whom he + was a favourite, and it is even said she was about to marry + him. Her brother was highly displeased and often chid her, + but to no purpose. One day, observing Orion wading through + the sea with his head just above the water, Apollo pointed + it out to his sister and maintained that she could not hit + that black thing on the sea. The archer-goddess discharged + a shaft with fatal aim. The waves rolled the dead body of + Orion to the land, and bewailing her fatal error with many + tears, Diana placed him among the stars, where he appears + as a giant, with a girdle, sword, lion's skin, and + club. Sirius, his dog, follows him, and the Pleiads fly + before him. + [ Bulfinch's Mythology, by Thomas Bulfinch ] +osaku + The osaku is a small tool for picking locks. +owlbear + Owlbears are probably the crossbreed creation of a demented + wizard; given the lethal nature of this creation, it is quite + likely the wizard who created them is no longer alive. As + the name might already suggest, owlbears are a cross between + a giant owl and a bear. They are covered with fur and + feathers. +page + A male servant or attendant; specifically, in chivalry, + a lad or young man in training for knighthood, or a youth + of gentle parentage attending a royal or princely personage. + [ Webster's Comprehensive International Dictionary + of the English Language ] +*pall + _Pallium._ The Roman name for a square woollen cloak worn + by men in ancient Greece, especially by philosophers and + courtesans, corresponding to the Roman toga. Hence the + Greeks called themselves _gens palliata,_ and the Romans + called themselves _gens togata._ + [ Brewer's Concise Dictionary of Phrase and Fable ] +panther + And lo! almost where the ascent began, + A panther light and swift exceedingly, + Which with a spotted skin was covered o'er! + + And never moved she from before my face, + Nay, rather did impede so much my way, + That many times I to return had turned. + [ Dante's Inferno, as translated + by Henry Wadsworth Longfellow ] +*paper + Some players, who unconsciously perceive Paper as weak or a + sign of surrender, will shy away from using it entirely or + drop it from their game when they are falling behind. On the + other hand, Paper also connects with a player's perceptions + about writing. There is a quiet power in the printed word. + It has the ability to lay off thousands of employees, declare + war against nations, spread scandal or confess love. Paper, + in short, has power over masses. The fate of the entire world + is determined by print. As such, some players perceive Paper + as a subtle attack, the victory of modern culture over barbarism. + Such players may use Paper to assert their superiority and dignity. + [ The Official Rock Paper Scissors Strategy Guide, + by Douglas and Graham Walker ] +pelias + Conan cried out sharply and recoiled, thrusting his companion + back. Before them rose the great shimmering white form of Satha, + an ageless hate in its eyes. Conan tensed himself for one mad + berserker onslaught -- to thrust the glowing faggot into that + fiendish countenance and throw his life into the ripping sword- + stroke. But the snake was not looking at him. It was glaring + over his shoulder at the man called Pelias, who stood with his + arms folded, smiling. And in the great, cold, yellow eyes + slowly the hate died out in a glitter of pure fear -- the only + time Conan ever saw such an expression in a reptile's eyes. + With a swirling rush like the sweep of a strong wind, the great + snake was gone. + "What did he see to frighten him?" asked Conan, eyeing his + companion uneasily. + "The scaled people see what escapes the mortal eye," answered + Pelias cryptically. "You see my fleshy guise, he saw my naked + soul." + [ Conan the Usurper, by Robert E. Howard and L. Sprague de Camp ] +pick*ax* +broad pick + The mine is full of holes; + With the wound of pickaxes. + But look at the goldsmith's store. + There, there is gold everywhere. + [ Divan-i Kebir Meter 2, by Mevlana Celaleddin Rumi ] +*piercer + Ye Piercer doth look like unto a stalactyte, and hangeth + from the roofs of caves and caverns. Unto the height of a + man, and thicker than a man's thigh do they grow, and in + groups do they hang. If a creature doth pass beneath them, + they will by its heat and noise perceive it, and fall upon + it to kill and devour it, though in any other way they move + but exceeding slow. + [ the Bestiary of Xygag ] +piranha + They live in "schools." Many times they will wait for prey + to come to the shallow water of the river. Then the large + group of piranhas will attack. These large groups are able + to kill large animals... Their lower teeth fit perfectly + into the spaces of their upper teeth, creating a tremendous + vice-like bite... Piranhas are attracted to any disturbance + in the water. + [ http://www.animalsoftherainforest.com ] +pit +spiked pit + Amid the thought of the fiery destruction that impended, the + idea of the coolness of the well came over my soul like balm. + I rushed to its deadly brink. I threw my straining vision + below. The glare from the enkindled roof illumined its inmost + recesses. Yet, for a wild moment, did my spirit refuse to + comprehend the meaning of what I saw. At length it forced -- + it wrestled its way into my soul -- it burned itself in upon my + shuddering reason. Oh! for a voice to speak! -- oh! horror! -- + oh! any horror but this! + [ The Pit and the Pendulum, by Edgar Allan Poe ] +pit fiend + Pit fiends are among the more powerful of devils, capable of + attacking twice with weapons as well as grabbing and crushing + the life out of those unwary enough to enter their + domains. +platinum yendorian express card + This is an ancient artifact made of an unknown material. It + is rectangular in shape, very thin, and inscribed with + unreadable ancient runes. When carried, it grants the one + who carries it ESP, and reduces all spell induced damage done to + the carrier by half. It also protects from magic missile + attacks. Finally, its power is such that when invoked, it + can charge other objects. +# playing style, rather vague topic but these quotes are too apt to pass up +player +play* style +user + Be bold, + be bold, + but not too bold. + Or else your life's blood, + shall run cold. + [ The White Road, by Neil Gaiman ] + + People think I'm crazy to worry all the time; + If you paid attention, you'd be worried too. + You better pay attention, or this world we love so much + Might just kill you. + [ It's a Jungle Out There, by Randy Newman ] +# [ theme song from "Monk" ] +poison +poisoned +potion of sickness +*venom + Fate intervened. Some of us, that day, she led inexorably + through the gates of death. Some of us, innocent and unsuspecting, + took, unwillingly, that one last step to oblivion. Some of us took + very little sugar. + [ We Have Always Lived in the Castle, + by Shirley Jackson ] +polearm +* polearm +partisan +ranseur +spetum +glaive +halberd +bardiche +angled poleaxe +long poleaxe +voulge +pole cleaver +fauchard +pole sickle +guisarme +bill-guisarme +lucern hammer +bec de corbin + Many of the weapons of the Middle Ages were poled or long-shafted + arms. Unlike the ancient spear or javelin, however, they were not + intended to be thrown. Some were devices with simple single- or + double-edged blades and nothing more, while others combined + the pick, spear, and hammer or axe all in one weapon. + [ Heraldry and Armor of the Middle Ages, by Marvin H. Pakula ] +polymorph trap + One morning, as Gregor Samsa was waking up from anxious dreams, + he discovered that in bed he had been changed into a monstrous + verminous bug. He lay on his armour-hard back and saw, as he + lifted his head up a little, his brown, arched abdomen divided + up into rigid bow-like sections. From this height the blanket, + just about ready to slide off completely, could hardly stay in + place. His numerous legs, pitifully thin in comparison to the + rest of his circumference, flickered helplessly before his eyes. + [ The Metamorphosis, by Franz Kafka, + translated by Ian Johnston ] +pony + Hey! now! Come hoy now! Whither do you wander? + Up, down, near or far, here, there or yonder? + Sharp-ears, Wise-nose, Swish-tail and Bumpkin, + White-socks my little lad, and old Fatty Lumpkin! + + [...] + Tom called them one by one and they climbed over the brow and + stood in a line. Then Tom bowed to the hobbits. + + "Here are your ponies, now!" he said. "They've more sense (in some + ways) than you wandering hobbits have -- more sense in their noses. + For they sniff danger ahead which you walk right into; and if they + run to save themselves, then they run the right way." + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +*portal + Portals can be Mirrors, Pictures, Standing Stones, Stone + Circles, Windows, and special gates set up for the purpose. + You will travel through them both to distant parts of the + continent and to and from our own world. The precise manner + of their working is a Management secret. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +trident +poseido*n + Poseido(o)n, lord of the seas and father of rivers and + fountains, was the son of Chronos and Rhea, brother of Zeus, + Hades, Hera, Hestia and Demeter. His rank of ruler of the + waves he received by lot at the Council Meeting of the Gods, + at which Zeus took the upper world for himself and gave + dominion over the lower world to Hades. + + Poseidon is associated in many ways with horses and thus is + the god of horses. He taught men how to ride and manage the + animal he invented and is looked upon as the originator and + guardian deity of horse races. + + His symbol is the familiar trident or three-pronged spear + with which he can split rocks, cause or quell storms, and + shake the earth, a power which makes him the god of + earthquakes as well. Physically, he is shown as a strong and + powerful ruler, every inch a king. + [ The Encyclopaedia of Myths and Legends of All Nations, + by Herbert Spencer Robinson and Knox Wilson ] +~*sleeping +~*booze +*potion* + POTABLE, n. Suitable for drinking. Water is said to be + potable; indeed, some declare it our natural beverage, + although even they find it palatable only when suffering + from the recurrent disorder known as thirst, for which it + is a medicine. Upon nothing has so great and diligent + ingenuity been brought to bear in all ages and in all + countries, except the most uncivilized, as upon the + invention of substitutes for water. To hold that this + general aversion to that liquid has no basis in the + preservative instinct of the race is to be unscientific -- + and without science we are as the snakes and toads. + [ The Devil's Dictionary, by Ambrose Bierce ] + + Jack Burton: What's in the flask, Egg? Magic potion? + Egg Shen: Yeah. + Jack: I thought so, good. What do we do? Drink it? + Egg: Yeah. + Jack: Good, I thought so. + [later] + Jack: This does what again, exactly? + Egg: Huge buzz! [drinks] Oh good! See things no + one else can see, do things no one else can do. + [ Big Trouble in Little China, directed by + John Carpenter, written by Gary Goldman & + David Z. Weinstein, adaptation by W.D. Richter ] +pray* + Whatever a man prays for, he prays for a miracle. Every + prayer reduces itself to this: Great God, grant that twice + two be not four. + [ Fathers and Sons, by Ivan Turgenev ] +priest* +* priest* +cleric +* cleric +acolyte + [...] For the two priests were talking exactly like priests, + piously, with learning and leisure, about the most aerial + enigmas of theology. The little Essex priest spoke the more + simply, with his round face turned to the strengthening stars; + the other talked with his head bowed, as if he were not even + worthy to look at them. But no more innocently clerical + conversation could have been heard in any white Italian cloister + or black Spanish cathedral. The first he heard was the tail of + one of Father Brown's sentences, which ended: "... what they + really meant in the Middle Ages by the heavens being + incorruptible." The taller priest nodded his bowed head and + said: "Ah, yes, these modern infidels appeal to their reason; + but who can look at those millions of worlds and not feel that + there may well be wonderful universes above us where reason is + utterly unreasonable?" + [ The Innocence of Father Brown, by G.K. Chesterton ] +paddle cactus + Opuntia, commonly called prickly pear, is a genus in the cactus + family, Cactaceae. Prickly pears are also known as tuna (fruit), + sabra, nopal (paddle, plural nopales) from the Nahuatl word + nopalli for the pads, or nostle, from the Nahuatl word nochtli + for the fruit; or paddle cactus. + [ Wikipedia, the free encyclopedia ] +prisoner + Where am I? + In the Village. + What do you want? + Information. + Whose side are you on? + That would be telling. We want information ... + information ... + You won't get it. + By hook or by crook, we will. + Who are you? + The new Number 2. + Who is Number 1? + You are Number 6. + I am not a number! I am a free man! + [ The Prisoner, by Patrick McGoohan ] +ptah + Known under various names (Nu, Neph, Cenubis, Amen-Kneph, + Khery-Bakef), Ptah is the creator god and god of craftsmen. + He is usually depicted as wearing a closely fitting robe + with only his hands free. His most distinctive features are + the invariable skull-cap exposing only his face and ears, + and the _was_ or rod of domination which he holds, + consisting of a staff surmounted by the _ankh_ symbol of + life. He is otherwise symbolized by his sacred animal, the + bull. +*purple worm + A gargantuan version of the harmless rain-worm, the purple + worm poses a huge threat to the ordinary adventurer. It is + known to swallow whole and digest its victims within only a + few minutes. These worms are always on guard, sensitive + to the most minute vibrations in the earth, but may also + be awakened by a remote shriek. +pyrolisk + At first glance around the corner, I thought it was another + cockatrice. I had encountered the wretched creatures two or + three times since leaving the open area. I quickly ducked my + head back and considered what to do next. My heart had begun + to thump audibly as I patted my pack to make sure I still had + the dead lizards at close reach. A check of my attire showed + no obvious holes or damage. I had to keep moving. One deep + breath, and a count of three, two, one, and around the corner + I bolted. But it was no cockatrice! I felt a sudden intense + searing of the skin around my face, and flames began to leap + from my pack. I tossed it to the ground, and quickly retreated + back, around that corner, desperately striving to get out of + its sight. +python + A monstrous serpent in Greek mythology, and the child of Gaia, + the goddess earth. It was produced from the slime and mud + that was left on the earth by the great flood of Deucalion. + It lived in a cave and guarded the oracle of Delphi on mount + Parnassus. + + No man dared to approach the beast and the people asked Apollo + for help. He came down from Mount Olympus with his silver bow + and golden arrows. With using only one arrow he killed the + serpent and claimed the oracle for himself. ... The old name of + Delphi, Pytho, refers to the serpent. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +quadruped + The woodlands and other regions are inhabited by multitudes + of four-legged creatures which cannot be simply classified. + They might not have fiery breath or deadly stings, but + adventurers have nevertheless met their end numerous times + due to the claws, hooves, or bites of such animals. +quantum mechanic + These creatures are not native to this universe; they seem + to have strangely derived powers, and unknown motives. + [] + + _Uncertainty Principle_ The principle that it is not possible + to know with unlimited accuracy both the position and momentum + of a particle. ... An explanation of the uncertainty is that + in order to locate a particle exactly, an observer must be + able to bounce off it a photon of radiation; this act of + location itself alters the position of the particle + in an unpredictable way. To locate the position accurately, + photons of short wavelength would have to be used. The high + momentum of such photons would cause a large effect on the + position. On the other hand, using photons of lower momenta + would have less effect on the particle's position, but would + be less accurate because of the lower wavelength. + [ A Concise Dictionary of Physics ] +quasit + Quasits are small, evil creatures, related to imps. Their + talons release a very toxic poison when used in an attack. +*quest + Many, possibly most, Tours are organized as a Quest. This + is like a large-scale treasure hunt, with clues scattered + all over the continent, a few false leads, Mystical Masters + as game-show hosts, and the Dark Lord and the Terrain to + make the Quest interestingly difficult. [...] + In order to be assured of your future custom, the Management + has a further Rule: Tourists, far from being rewarded for + achieving their Quest Object, must then go on to conquer + the Dark Lord or set about Saving the World, or both. And + why not? By then you will have had a lot of practice in + that sort of thing and, besides, the Quest Object is usually + designed to help you do it. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +quetzalcoatl + One of the principal Aztec-Toltec gods was the great and wise + Quetzalcoatl, who was called Kukumatz in Guatemala, and + Kukulcan in Yucatan. His image, the plumed serpent, is found + on both the oldest and the most recent Indian edifices. ... + The legend tells how the Indian deity Quetzalcoatl came from + the "Land of the Rising Sun". He wore a long white robe and + had a beard; he taught the people crafts and customs and laid + down wise laws. He created an empire in which the ears of + corn were as long as men are tall, and caused bolls of colored + cotton to grow on cotton plants. But for some reason or other + he had to leave his empire. ... But all the legends of + Quetzalcoatl unanimously agree that he promised to come again. + [ Gods, Graves, and Scholars, by C.W. Ceram ] +quit* + Maltar: [...] I remembered a little saying I learned my + first day at the academy. + Natalie: Yeah, yeah, I know. Winners never quit and quitters + never win. + Maltar: What? No! Winners never quit and quitters should + be cast into the Flaming Pit of Death. + [ Snow Day, directed by Chris Koch, + written by Will McRobb and Chris Viscardi ] +raijin +raiden + The Japanese god of thunder (rai) and lightning (den). He + prevented the Mongols from invading Japan in 1274. Sitting on + a cloud he sent forth a shower of lightning arrows upon the + invading fleet. Only three men escaped. Raiden is portrayed + as a red demon with sharp claws, carrying a large drum. He is + fond of eating human navels. The only protection against him + is to hide under a mosquito net. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +ranger +* ranger + "Lonely men are we, Rangers of the wild, hunters -- but hunters + ever of the servants of the Enemy; for they are found in many + places, not in Mordor only. + If Gondor, Boromir, has been a stalwart tower, we have played + another part. Many evil things there are that your strong walls + and bright swords do not stay. You know little of the lands + beyond your bounds. Peace and freedom, do you say? The North + would have known them little but for us. Fear would have + destroyed them. But when dark things come from the houseless + hills, or creep from sunless woods, they fly from us. What + roads would any dare to tread, what safety would there be in + quiet lands, or in the homes of simple men at night, if the + Dunedain were asleep, or were all gone into the grave?" + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +rat +* rat + Rats are long-tailed rodents. They are aggressive, + omnivorous, and adaptable, often carrying diseases. + [] + + "The rat," said O'Brien, still addressing his invisible + audience, "although a rodent, is carnivorous. You are aware + of that. You will have heard of the things that happen in + the poor quarters of this town. In some streets a woman dare + not leave her baby alone in the house, even for five minutes. + The rats are certain to attack it. Within quite a small time + they will strip it to the bones. They also attack sick or + dying people. They show astonishing intelligence in knowing + when a human being is helpless." + [ 1984, by George Orwell ] +raven + But the raven, sitting lonely on the placid bust, spoke only + That one word, as if his soul in that one word he did outpour. + Nothing further then he uttered -- not a feather then he fluttered-- + Till I scarcely more than muttered, 'other friends have flown before-- + On the morrow *he* will leave me, as my hopes have flown before.' + Then the bird said, 'Nevermore.' + [ The Raven, by Edgar Allan Poe ] +~*invisibility +ring +* ring +ring of * + Three Rings for the Elven-kings under the sky, + Seven for the Dwarf-lords in their halls of stone, + Nine for Mortal Men doomed to die, + One for the Dark Lord on his dark throne, + In the Land of Mordor where the Shadows lie. + One Ring to rule them all, One Ring to find them, + One Ring to bring them all and in the darkness bind them + In the Land of Mordor where the Shadows lie. + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +ring of invisibility + "When time came for the shepherds to hold their customary + assembly in order to prepare their monthly report to the king + about the state of the flocks, he came too, wearing this ring. + While he was sitting with the others, it chanced that he moved + the collet of the ring around toward himself into the inside of + his hand; having done this, he disappeared from the sight of + those who were sitting beside him, and they discussed of him as + of someone who had left. And he wondered and once again feeling + for the ring, he turned the collet outwards and, by turning it, + reappeared. Reflecting upon this, he put the ring to the test + to see if it indeed had such power, and he came to this + conclusion that, by turning the collet inwards, he became + invisible, outwards, visible. Having perceived this, he at + once managed for himself to become one of the envoys to the + king; upon arrival, having seduced his wife, with her help, + he laid a hand on the king, murdered him and took hold of the + leadership." + [ The Republic, by Plato, translated by James Adam ] +robe + Robes are the only garments, apart from Shirts, ever to have + sleeves. They have three uses: + 1. As the official uniform of Priests, Priestesses, Monks, + Nuns (see Nunnery), and Wizards. The OMT [ Official Management + Term ] prescribed for the Robes of Priests and Nuns is that + they _fall in severe folds_; of Priestesses that they _float_; + and of Wizards that they _swirl_. You can thus see who you + are dealing with. + 2. For Kings. The OMT here is _falling in stately folds_. + 3. As the garb of Desert Nomads. [...] + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +rock +large rock + Bilbo saw that the moment had come when he must do something. + He could not get up at the brutes and he had nothing to shoot + with; but looking about he saw that in this place there were + many stones lying in what appeared to be a now dry little + watercourse. Bilbo was a pretty fair shot with a stone, and + it did not take him long to find a nice smooth egg-shaped one + that fitted his hand cosily. As a boy he used to practise + throwing stones at things, until rabbits and squirrels, and + even birds, got out of his way as quick as lightning if they + saw him stoop; and even grownup he had still spent a deal of + his time at quoits, dart-throwing, shooting at the wand, + bowls, ninepins and other quiet games of the aiming and + throwing sort - indeed he could do lots of things, besides + blowing smoke-rings, asking riddles and cooking, that I + haven't time to tell you about. There is no time now. While + he was picking up stones, the spider had reached Bombur, and + soon he would have been dead. At that moment Bilbo threw. + The stone struck the spider plunk on the head, and it dropped + senseless off the tree, flop to the ground, with all its legs + curled up. + [ The Hobbit, by J.R.R. Tolkien ] +rock mole + A rock mole is a member of the rodent family. They get their + name from their ability to tunnel through rock in the same + fashion that a mole tunnels through earth. They are known to + eat anything they come across in their diggings, although it + is still unknown how they convert some of these things into + something of nutritional value. +rodent* + A gnawing mammal (order _Rodentia_) having in each jaw two + (rarely four) incisors, growing continually from persistent + pulps, and no canine teeth, as a squirrel, beaver, or rat. + [ Webster's Comprehensive International Dictionary + of the English Language ] +rogue +* rogue + I understand the business, I hear it: to have an open ear, a + quick eye, and a nimble hand, is necessary for a cut-purse; a + good nose is requisite also, to smell out work for the other + senses. I see this is the time that the unjust man doth + thrive. ... The prince himself is about a piece of iniquity, + stealing away from his father with his clog at his heels: if + I thought it were a piece of honesty to acquaint the king + withal, I would not do't: I hold it the more knavery to + conceal it; and therein am I constant to my profession. + [ Autolycus the Rogue, from The Winter's Tale by + William Shakespeare ] +root +dwarven root + But when they were cooked these roots proved good to eat, + somewhat like bread; and the outlaws were glad of them, for + they had long lacked bread save when they could steal it. + "Wild Elves know them not; Grey-elves have not found them; + the proud ones from over the Sea are too proud to delve," + said Mim. + + "What is their name?" said Turin. Mim looked at him sidelong. + "They have no name, save in the Dwarf-tongue, which we do not + teach," he said. "And we not teach Men to find them, for Men + are greedy and thriftless, and would not spare till all the + plants had perished; whereas now they pass them by as they go + blundering in the wild. No more will you learn of me; but you + may have enough of my bounty, as long as you speak fair and + do not spy or steal." Then again he laughed in his throat. + + "They are of great worth." he said. "More than gold in the + hungry winter, for they may be hoarded like the nuts of a + squirrel, and already we were building our store from the + first that are ripe." + [ Unfinished Tales, Part 1, by J.R.R. Tolkien ] +roshi + Roshi is a Japanese word, common in Zen Buddhism, meaning "old" + (ro) and "teacher" (shi). Roshi can be used as a term of + respect, as in the Rinzai school; as a simple reference to + actual age, as in the Soto school; or it can mean a teacher who + has transmitted knowledge to, and thus "given birth" to, a new + teacher. + [ Wikipedia, the free encyclopedia ] +rothe + The rothe (pronounced roth-AY) is a musk ox-like creature with + an aversion to light. It prefers to live underground near + lichen and moss. +*royal jelly + "'Royal Jelly,'" he read aloud, "'must be a substance of + tremendous nourishing power, for on this diet alone, the + honey-bee larva increases in weight fifteen hundred times in + five days!'" + + "How much?" + + "Fifteen hundred times, Mabel. And you know what that means + if you put it in terms of a human being? It means," he said, + lowering his voice, leaning forward, fixing her with those + small pale eyes, "it means that in five days a baby weighing + seven and a half pounds to start off with would increase in + weight to five tons!" + [ Royal Jelly, by Roald Dahl ] +ruby +sapphire + _Corundum._ Mineral, aluminum oxide, Al2O3. The clear + varieties are used as gems and the opaque as abrasive materials. + Corundum occurs in crystals of the hexagonal system and in + masses. It is transparent to opaque and has a vitreous to + adamantine luster. ... The chief corundum gems are the ruby + (red) and the sapphire (blue). + [ The Columbia Encyclopedia, Sixth Edition ] +rust monster + These strange creatures live on a diet of metals. They can + turn a suit of armour into so much useless rusted scrap in no + time at all. +# takes "rust monster or disenchanter" when specifying 'R' +rust monster or disenchanter + These ground-dwelling monsters are known to make short + work out of degrading adventurers' combat equipment. +*saber +*sabre + Flashed all their sabres bare, + Flashed as they turned in air, + Sab'ring the gunners there, + Charging an army, while + All the world wondered: + Plunged in the battery smoke, + Right through the line they broke; + Cossack and Russian + Reeled from the sabre-stroke + Shattered and sundered. + Then they rode back, but not-- + Not the six hundred. + [ The Charge of the Light Brigade, + by Alfred, Lord Tennyson ] +saddle + The horseman serves the horse, + The neat-herd serves the neat, + The merchant serves the purse, + The eater serves his meat; + 'Tis the day of the chattel, + Web to weave, and corn to grind, + Things are in the saddle, + And ride mankind. + [ Ode, by Ralph Waldo Emerson ] +sake + Japanese rice wine. +salamander + For hundreds of years, many people believed that salamanders + were magical. In England in the Middle Ages, people thought + that fire created salamanders. When they set fire to damp + logs, dozens of the slimy creatures scurried out. The word + salamander, in fact, comes from a Greek word meaning "fire + animal". + [ Salamanders, by Cherie Winner ] +samurai +* samurai + By that time, Narahara had already slipped his arm from the + sleeve of his outer robe, drew out his two-and-a-half-foot + Fujiwara Tadahiro sword, and, brandishing it over his head, + began barreling toward the foreigners. In less than a minute, + he had charged upon them and cut one of them through the torso. + The man fled, clutching his bulging guts, finally to fall from + his horse at the foot of a pine tree about a thousand yards + away. Kaeda Takeji finished him off. The other two Englishmen + were severely wounded as they tried to flee. Only the woman + managed to escape virtually unscathed. + [ The Fox-horse, from Drunk as a Lord, by Ryotaro Shiba ] +sandestin + Ildefonse left the terrace and almost immediately sounds + of contention came from the direction of the work-room. + Ildefonse presently returned to the terrace, followed by + Osherl and a second sandestin using the guise of a gaunt blue + bird-like creature, some six feet in height. + + Ildefonse spoke in scathing tones: "Behold these two + creatures! They can roam the chronoplex as easily as you + or I can walk around the table; yet neither has the wit to + announce his presence upon arrival. I found Osherl asleep + in his fulgurite and Sarsem perched in the rafters." + [...] + "No matter," said Rhialto. "He has brought Sarsem, and this + was his requirement. In the main, Osherl, you have done well!" + + "And my indenture point?" + + "Much depends upon Sarsem's testimony. Sarsem, will you sit?" + + "In this guise, I find it more convenient to stand." + + "Then why not alter to human form and join us in comfort at + the table?" + + "That is a good idea." Sarsem became a naked young epicene + in an integument of lavender scales with puffs of purple hair + like pom-poms growing down his back. He seated himself at + the table but declined refreshment. "This human semblance, + though typical, is after all, only a guise. If I were to put + such things inside myself, I might well become uneasy." + [ Rhialto the Marvellous, by Jack Vance ] +sasquatch + The name _Sasquatch_ doesn't really become important in Canada + until the 1930s, when it appeared in the works of J. W. Burns, + a British Columbian writer who used a great deal of Indian + lore in his stories. Burn's Sasquatch was a giant Indian who + lived in the wilderness. He was hairy only in the sense that + he had long hair on his head, and while this Sasquatch lived a + wild and primitive life, he was fully human. + Burns's character proved to be quite popular. There was a + Sasquatch Inn near the town of Harrison, British Columbia, and + Harrison even had a local celebration called "Sasquatch Days." + The celebration which had been dormant for years was revived + as part of British Columbia's centennial, and one of the + events was to be a Sasquatch hunt. The hunt never took place, + perhaps it was never supposed to, but the publicity about it + did bring out a number of people who said they had encountered + a Sasquatch -- not Burns's giant Indian, but the hairy apelike + creature that we have all come to know. + [ The Encyclopedia of Monsters, by Daniel Cohen ] +scalpel + A scalpel is a very sharp knife used for surgery ... Merely + touching a medical scalpel with bare hands to test it will + cut through the skin. ... Medical scalpel blades are gradually + curved for greater precision when cutting through tissue. + [ Wikipedia, the free encyclopedia ] +*sceptre of might + This mace was created aeons ago in some unknown cave, + and has been passed down from generation to generation of + cave dwellers. It is a very mighty mace indeed, and in + addition will protect anyone who wields it from magic + missile attacks. When invoked, it causes conflict in the + area around it. +scimitar + Oh, how handsome, how noble was the Vizier Ali Tebelin, + my father, as he stood there in the midst of the shot, his + scimitar in his hand, his face black with powder! How his + enemies fled before him! + [ The Count of Monte Cristo, by Alexandre Dumas ] +scorpio* + A sub-species of the spider (_Scorpionidae_), the scorpion + distinguishes itself from them by having a lower body that + ends in a long, jointed tail tapering to a poisonous stinger. + They have eight legs and pincers. + [ Van Dale's Groot Woordenboek der Nederlandse Taal ] +scorpius + Since early times, the Scorpion has represented death, darkness, + and evil. Scorpius is the reputed slayer of Orion the Hunter. + [...] The gods put both scorpion and hunter among the stars, but + on opposite sides of the sky so they would never fight again. + As Scorpius rises in the east, Orion sets in the west. + [ 365 Starry Nights, by Chet Raymo ] +scroll of punishment +punish* + It matters not how strait the gate, + How charged with punishments the scroll, + I am the master of my fate; + I am the captain of my soul. + [ Invictus, by William Ernest Henley ] +*scroll +scroll * + And I was gazing on the surges prone, + With many a scalding tear and many a groan, + When at my feet emerg'd an old man's hand, + Grasping this scroll, and this same slender wand. + I knelt with pain--reached out my hand--had grasp'd + Those treasures--touch'd the knuckles--they unclasp'd-- + I caught a finger: but the downward weight + O'erpowered me--it sank. Then 'gan abate + The storm, and through chill aguish gloom outburst + The comfortable sun. I was athirst + To search the book, and in the warming air + Parted its dripping leaves with eager care. + Strange matters did it treat of, and drew on + My soul page after page, till well-nigh won + Into forgetfulness; when, stupefied, + I read these words, and read again, and tried + My eyes against the heavens, and read again. + [ Endymion, by John Keats ] +set +seth + The ancient Egyptian god of chaos (Set), the embodiment of + hostility and even of outright evil. He is also a god of war, + deserts, storms, and foreign lands. ... In the Book of the + Dead, Seth is called "Lord of the Northern Sky" and is held + responsible for storms and cloudy weather. ... Seth was + portrayed as a man with the head of undeterminable origin, + although some see in it the head of an aardvark. He had a + curved snout, erect square-tipped ears and a long forked tail. + He was sometimes entirely in animal form with the body similar + to that of a greyhound. Animals sacred to this god were the + dog, the jackal, the gazelle, the donkey, the crocodile, the + hippopotamus, and the pig. + [ Encyclopedia Mythica, ed. M.F. Lindemans ] +shad* + For the shades--figures of jet black streaking across the + white-knobbed ground--were upon her. Strength was meaningless + against shades. They had no real substance. Only two things + mattered: moving quickly and not letting yourself be + frightened. Shades were dangerous, but so long as you had silver, + you could fight. [...] + + Her knife passed through the shade with a slight tugging feeling, + creating a shower of bright white sparks that sprayed out of the + shade. The shade pulled back, its black tendrils writhing about + one another. + + Silence spun on the other. The pitch sky let her see only the + thing's eyes, a horrid green, as it reached for her. She lunged. + + Its spectral hands were upon her, the icy cold of its fingers + gripping her arm below the elbow. She could feel it. Shade + fingers had substance; they could grab you, hold you back. Only + silver warded them away. Only with silver could you fight. + [ Shadows for Silence in the Forests of Hell, + by Brandon Sanderson ] +shaman karnov + Making his quarters in the Caves of the Ancestors, Shaman + Karnov unceasingly tries to shield his neanderthal people + from Tiamat's minions' harassments. +shan*lai*ching + The Chinese god of Mountains and Seas, also the name of an + old book (also Shan Hai Tjing), the book of mountains and + seas - which deals with the monster Kung Kung trying to + seize power from Yao, the fourth emperor. + [ Spectrum Atlas van de Mythologie ] +shark + As the shark moved, its dark top reflected virtually no + light. The denticles on its skin muted the whoosh of its + movements as the shark rose, driven by the power of the + great tail sweeping from side to side, like a scythe. + The fish exploded upward. + Charles Bruder felt a slight vacuum tug in the motion of + the sea, noted it as a passing current, the pull of a wave, + the tickle of undertow. He could not have heard the faint + sucking rush of water not far beneath him. He couldn't + have seen or heard what was hurtling from the murk at + astonishing speed, jaws unhinging, widening, for the + enormous first bite. It was the classic attack + that no other creature in nature could make -- a bomb from + the depths. + [ Close to Shore, by Michael Capuzzo ] +~uruk* +~white* +*shield + In his hands he took his shield, all glittering: no one ever + broke it with a blow or crushed it. And a wonder it was to see; + for its whole orb shimmered with enamel and white ivory and + electrum, and it glowed with shining gold; and there were zones + of cyanus drawn upon it. In the center was Fear worked in adamant, + unspeakable, staring backwards with eyes that glowed with fire. + His mouth was full of teeth in a white row, fearful and daunting, + and upon his grim brow hovered frightful Strife who arrays the + throng of men: pitiless she, for she took away the mind and senses + of poor wretches who made war against the son of Zeus. Their souls + passed beneath the earth and went down into the house of Hades; + but their bones, when the skin is rotted about them, crumble away + on the dark earth under parching Sirius. + [ Hesiod, The Homeric Hymns and Homerica, + translation by Hugh G. Evelyn-White ] +shito + A Japanese stabbing knife. +shopkeeper + There have been three general theories put forward to explain + the phenomenon of the wandering shops or, as they are + generically known, _tabernae vagantes._ + The first postulates that many thousands of years ago there + evolved somewhere in the multiverse a race whose single talent + was to buy cheap and sell dear. Soon they controlled a vast + galactic empire or, as they put it, Emporium, and the more + advanced members of the species found a way to equip their very + shops with unique propulsion units that could break the dark + walls of space itself and open up vast new markets. And long + after the worlds of the Emporium perished in the heat death of + their particular universe, after one last defiant fire sale, + the wandering starshops still ply their trade, eating their way + through the pages of spacetime like a worm through a three- + volume novel. + The second is that they are the creation of a sympathetic Fate, + charged with the role of supplying exactly the right thing + at the right time. + The third is that they are simply a very clever way of getting + around the various Sunday Closing acts. + All these theories, diverse as they are, have two things in + common. They explain the observed facts, and they are + completely and utterly wrong. + [ The Light Fantastic, by Terry Pratchett ] +shrieker + With a single, savage thrust of her spear, the warrior-woman + impaled the fungus, silencing it. However, it was too late: + the alarm had been raised[...] + Suddenly, a large, dark shape rose from the abyss before them, + its fetid bulk looming overhead... The monster was some kind of + great dark worm, but that was about all they were sure of. + [ The Adventurers, Epic IV, by Thomas A. Miller ] +throwing star +shuriken + You know, that's what I hate most about fighting against magic: + you never know what they're trying to do to you until it hits. + The sorceress knew what hit her, however. Two of the shuriken + got past whatever defenses she had. One caught her just below + the throat, the other in the middle of her chest. It wouldn't + kill her, but she wouldn't be fighting anyone for a while. + [ Jhereg, by Steven Brust ] +skeleton + A skeleton is a magically animated undead creature. Unlike + shades, only a humanoid creature can be used to create a + skeleton. No one knows why this is true, but it has become + an accepted fact amongst the practitioners of the black arts. +slasher + "That dog belonged to a settler who tried to build his cabin + on the bank of the river a few miles south of the fort," + grunted Conan. ... "We took him to the fort and dressed his + wounds, but after he recovered he took to the woods and turned + wild. -- What now, Slasher, are you hunting the men who + killed your master?" ... "Let him come," muttered Conan. + "He can smell the devils before we can see them." ... + Slasher cleared the timbers with a bound and leaped into the + bushes. They were violently shaken and then the dog slunk + back to Balthus' side, his jaws crimson. ... "He was a man," + said Conan. "I drink to his shade, and to the shade of the + dog, who knew no fear." He quaffed part of the wine, then + emptied the rest upon the floor, with a curious heathen + gesture, and smashed the goblet. "The heads of ten Picts + shall pay for this, and seven heads for the dog, who was a + better warrior than many a man." + [ Conan The Warrior, by Robert E Howard ] +*sleep + Sleep is a death; oh, make me try + By sleeping, what it is to die, + And as gently lay my head + On my grave, as now my bed. + [ Religio Medici, by Sir Thomas Browne ] +slime mold + Science fiction did not invent the slime molds, but it has + borrowed from them in using the idea of sheets of liquid, flowing + cytoplasm engulfing and dissolving every living thing they touch. + What fiction can only imagine, nature has produced, and only their + small size and dependence on coolness, moisture, and darkness has + kept the slime molds from ordinary observation, for they are common + enough. + [ Encyclopaedia Britannica, 1977 ] +sling + And it came to pass, when the Philistine arose, and came and + drew nigh to meet David, that David hasted, and ran toward + the army to meet the Philistine. + And David put his hand in his bag, and took thence a stone, + and slang it, and smote the Philistine in his forehead, that + the stone sunk into his forehead; and he fell upon his face + to the earth. + So David prevailed over the Philistine with a sling and with + a stone, and smote the Philistine, and slew him; but there + was no sword in the hand of David. + [ 1 Samuel 17:48-50 ] +*snake +serpent +water moccasin +pit viper + Now the serpent was more subtle than any beast of the field + which the Lord God had made. And he said unto the woman, Yea, + hath God said, Ye shall not eat of every tree of the garden? + And the woman said unto the serpent, We may eat of the fruit of + the trees of the garden: but of the fruit of the tree which is + in the midst of the garden, God hath said, Ye shall not eat of + it, neither shall ye touch it, lest ye die. And the serpent + said unto the woman, Ye shall not surely die: for God doth + know that in the day ye eat thereof, then your eyes shall be + opened, and ye shall be as gods, knowing good and evil. And + when the woman saw that the tree was good for food, and that it + was pleasant to the eyes, and a tree to be desired to make one + wise, she took of the fruit thereof, and did eat, and gave also + unto her husband with her; and he did eat. + + And the Lord God said unto the woman, What is this that thou + hast done? And the woman said, The serpent beguiled me, and I + did eat. And the Lord God said unto the serpent, Because thou + hast done this, thou art cursed above all cattle, and above + every beast of the field; upon thy belly shalt thou go, and + dust shalt thou eat all the days of thy life: And I will put + enmity between thee and the woman, and between thy seed and her + seed; it shall bruise thy head, and thou shalt bruise his heel. + [ Genesis 3:1-6,13-15 ] +snickersnee + Ah, never shall I forget the cry, + or the shriek that shrieked he, + As I gnashed my teeth, and from my sheath + I drew my Snickersnee! + --Koko, Lord high executioner of Titipu + [ The Mikado, by Sir W.S. Gilbert ] +sokoban + Sokoban (Japanese for "warehouse keeper") is a transport puzzle + in which the player pushes boxes around a maze, viewed from + above, and tries to put them in designated locations. Only one + box may be pushed at a time, not two, and boxes cannot be pulled. + As the puzzle would be extremely difficult to create physically, + it is usually implemented as a video game. + + Sokoban was created in 1982 by Hiroyuki Imabayashi, and was + published by Thinking Rabbit, a software house based in + Takarazuka, Japan. Thinking Rabbit also released three sequels: + Boxxle, Sokoban Perfect and Sokoban Revenge. + [ Wikipedia, the free encyclopedia ] +*soldier +sergeant +lieutenant +captain + The soldiers of Yendor are well-trained in the art of war, + many trained by the Wizard himself. Some say the soldiers + are explorers who were unfortunate enough to be captured, + and put under the Wizard's spell. Those who have survived + encounters with soldiers say they travel together in platoons, + and are fierce fighters. Because of the load of their combat + gear, however, one can usually run away from them, and doing + so is considered a wise thing. +*spear +javelin + - they come together with great random, and a spear is brast, + and one party brake his shield and the other one goes down, + horse and man, over his horse-tail and brake his neck, and + then the next candidate comes randoming in, and brast his + spear, and the other man brast his shield, and down he goes, + horse and man, over his horse-tail, and brake his neck, and + then there's another elected, and another and another and + still another, till the material is all used up; and when you + come to figure up results, you can't tell one fight from + another, nor who whipped; and as a picture of living, raging, + roaring battle, sho! why it's pale and noiseless - just + ghosts scuffling in a fog. Dear me, what would this barren + vocabulary get out of the mightiest spectacle? - the burning + of Rome in Nero's time, for instance? Why, it would merely + say 'Town burned down; no insurance; boy brast a window, + fireman brake his neck!' Why, that ain't a picture! + [ A Connecticut Yankee in King Arthur's Court, + by Mark Twain ] +*spellbook* + The Book of Three lay closed on the table. Taran had never + been allowed to read the volume for himself; now he was sure + it held more than Dallben chose to tell him. In the sun- + filled room, with Dallben still meditating and showing no + sign of stopping, Taran rose and moved through the shimmering + beams. From the forest came the monotonous tick of a beetle. + His hands reached for the cover. Taran gasped in pain and + snatched them away. They smarted as if each of his fingers + had been stung by hornets. He jumped back, stumbled against + the bench, and dropped to the floor, where he put his fingers + woefully into his mouth. + Dallben's eyes blinked open. He peered at Taran and yawned + slowly. "You had better see Coll about a lotion for those + hands," he advised. "Otherwise, I shouldn't be surprised if + they blistered." + [ The Book of Three, by Lloyd Alexander ] +*spider + Eight legged creature capable of spinning webs to trap prey. + [] + + "You mean you eat flies?" gasped Wilbur. + "Certainly. Flies, bugs, grasshoppers, choice beetles, + moths, butterflies, tasty cockroaches, gnats, midges, daddy + longlegs, centipedes, mosquitoes, crickets - anything that is + careless enough to get caught in my web. I have to live, + don't I?" + "Why, yes, of course," said Wilbur. + [ Charlotte's Web, by E.B. White ] +*spore +*sphere + The attack by those who want to die -- this is the attack + against which you cannot prepare a perfect defense. + --Human aphorism + [ The Dosadi Experiment, by Frank Herbert ] +squeaky board + A floorboard creaked. Galder had spent many hours tuning them, + always a wise precaution with an ambitious assistant who walked + like a cat. + D flat. That meant he was just to the right of the door. + "Ah, Trymon," he said, without turning, and noted with some + satisfaction the faint indrawing of breath behind him. "Good + of you to come. Shut the door, will you?" + [ The Light Fantastic, by Terry Pratchett ] +~*aesculapius +*staff + So they stood, each in his place, neither moving a finger's + breadth back, for one good hour, and many blows were given + and received by each in that time, till here and there were + sore bones and bumps, yet neither thought of crying "Enough," + or seemed likely to fall from off the bridge. Now and then + they stopped to rest, and each thought that he never had seen + in all his life before such a hand at quarterstaff. At last + Robin gave the stranger a blow upon the ribs that made his + jacket smoke like a damp straw thatch in the sun. So shrewd + was the stroke that the stranger came within a hair's breadth + of falling off the bridge; but he regained himself right + quickly, and, by a dexterous blow, gave Robin a crack on the + crown that caused the blood to flow. Then Robin grew mad + with anger, and smote with all his might at the other; but + the stranger warded the blow, and once again thwacked Robin, + and this time so fairly that he fell heels over head into the + water, as the queen pin falls in a game of bowls. + [ The Merry Adventures of Robin Hood, by Howard Pyle ] +*staff of aesculapius + This staff is considered sacred to all healers, as it truly + holds the powers of life and death. When wielded, it + protects its user from all life draining attacks, and + additionally gives the wielder the power of regeneration. + When invoked it performs healing magic. +stair* + Up he went -- very quickly at first -- then more slowly -- then + in a little while even more slowly than that -- and finally, + after many minutes of climbing up the endless stairway, one + weary foot was barely able to follow the other. Milo suddenly + realized that with all his effort he was no closer to the top + than when he began, and not a great deal further from the + bottom. But he struggled on for a while longer, until at last, + completely exhausted, he collapsed onto one of the steps. + "I should have known it," he mumbled, resting his tired legs + and filling his lungs with air. "This is just like the line + that goes on forever, and I'll never get there." + "You wouldn't like it much anyway," someone replied gently. + "Infinity is a dreadfully poor place. They can never manage to + make ends meet." + [ The Phantom Tollbooth, by Norton Juster ] + + Dr. Ray Stantz: Hey, where do those stairs go? + Dr. Peter Venkman: They go up. + [ Ghostbusters, directed by Ivan Reitman, + written by Dan Ackroyd and Harold Ramis ] +*stalker + "You don't understand," he said, "who I am or what I am. I'll show + you. By Heaven! I'll show you." Then he put his open palm over + his face and withdrew it. The centre of his face became a black + cavity. "Here," he said. He stepped forward and handed Mrs. Hall + something which she, staring at his metamorphosed face, accepted + automatically. Then, when she saw what it was, she screamed + loudly, dropped it, and staggered back. The nose--it was the + stranger's nose! pink and shining--rolled on the floor. + + Then he removed his spectacles, and everyone in the bar gasped. He + took off his hat, and with a violent gesture tore at his whiskers + and bandages. For a moment they resisted him. A flash of horrible + anticipation passed through the bar. "Oh, my Gard!" said some one. + Then off they came. + + It was worse than anything. Mrs. Hall, standing open-mouthed and + horror-struck, shrieked at what she saw, and made for the door of + the house. Everyone began to move. They were prepared for scars, + disfigurements, tangible horrors, but nothing! The bandages and + false hair flew across the passage into the bar, making a + hobbledehoy jump to avoid them. Everyone tumbled on everyone else + down the steps. For the man who stood there shouting some + incoherent explanation, was a solid gesticulating figure up to the + coat-collar of him, and then--nothingness, no visible thing at all! + [ The Invisible Man, by H.G. Wells ] +~statue trap +statue* + Then at last he began to wonder why the lion was standing so + still - for it hadn't moved one inch since he first set eyes + on it. Edmund now ventured a little nearer, still keeping in + the shadow of the arch as much as he could. He now saw from + the way the lion was standing that it couldn't have been + looking at him at all. ("But supposing it turns its head?" + thought Edmund.) In fact it was staring at something else - + namely a little dwarf who stood with his back to it about + four feet away. "Aha!" thought Edmund. "When it springs at + the dwarf then will be my chance to escape." But still the + lion never moved, nor did the dwarf. And now at last Edmund + remembered what the others had said about the White Witch + turning people into stone. Perhaps this was only a stone + lion. And as soon as he had thought of that he noticed that + the lion's back and the top of its head were covered with + snow. Of course it must be only a statue! + [ The Lion, the Witch and the Wardrobe, by C.S. Lewis ] +# the original stethoscope was a fixed tube open at both ends; subsequent +# early ones were adaptations of an 'earhorn' used by the hard of hearing, +# but players are unlikely to picture anything like that when they find one +stethoscope + Tool used to listen closely to adjacent sound, typically by + a medical practioner to listen to a patient's heart, lungs, + or pulse. +# joke suggested by stethoscope; a zillion things could be added but these +# ought to suffice +microscope +telescope +telephone +television +#tricorder +#phaser + Not invented yet. +sting + There was the usual dim grey light of the forest-day about + him when he came to his senses. The spider lay dead beside + him, and his sword-blade was stained black. Somehow the + killing of the giant spider, all alone and by himself in the + dark without the help of the wizard or the dwarves or of + anyone else, made a great difference to Mr. Baggins. He felt + a different person, and much fiercer and bolder in spite of + an empty stomach, as he wiped his sword on the grass and put + it back into its sheath. + + "I will give you a name," he said to it, "and I shall call + you Sting." + [ The Hobbit, by J.R.R. Tolkien ] +stormbringer + There were sounds in the distance, incongruent with the + sounds of even this nameless, timeless sea: thin sounds, + agonized and terrible, for all that they remained remote - + yet the ship followed them, as if drawn by them; they grew + louder - pain and despair were there, but terror was + predominant. + + Elric had heard such sounds echoing from his cousin Yyrkoon's + sardonically named 'Pleasure Chambers' in the days before he + had fled the responsibilities of ruling all that remained of + the old Melnibonean Empire. These were the voices of men + whose very souls were under siege; men to whom death meant + not mere extinction, but a continuation of existence, forever + in thrall to some cruel and supernatural master. He had + heard men cry so when his salvation and his nemesis, his + great black battle-blade Stormbringer, drank their souls. + [ The Lands Beyond the World, by Michael Moorcock ] +*strange object +strange +glorkum* + He walked for some time through a long narrow corridor + without finding any one and was just going to call out, + when suddenly in a dark corner between an old cupboard + and the door he caught sight of a strange object which + seemed to be alive. + [ Crime and Punishment, by Fyodor Dostoevsky ] +straw golem + Dorothy leaned her chin upon her hand and gazed thoughtfully + at the Scarecrow. Its head was a small sack stuffed with + straw, with eyes, nose, and mouth painted on it to represent + a face. An old, pointed blue hat, that had belonged to some + Munchkin, was perched on his head, and the rest of the figure + was a blue suit of clothes, worn and faded, which had also + been stuffed with straw. On the feet were some old boots with + blue tops, such as every man wore in this country, and the + figure was raised above the stalks of corn by means of the + pole stuck up its back. + [ The Wonderful Wizard of Oz, by L. Frank Baum ] +sunsword + What you seek is a blade of light, + a weapon for vengeance. + [ Expedition to Castle Ravenloft, + by Bruce Cordell and James Wyatt ] +susano*o + The Shinto chthonic and weather god and brother of the sun + goddess Amaterasu, he was born from the nose of the + primordial creator god Izanagi and represents the physical, + material world. He has been expelled from heaven and taken + up residence on earth. + [ Encyclopedia of Gods, by Michael Jordan ] +tanko + Samurai plate armor of the Yamato period (AD 300 - 710). +tengu + The tengu was the most troublesome creature of Japanese + legend. Part bird and part man, with red beak for a nose + and flashing eyes, the tengu was notorious for stirring up + feuds and prolonging enmity between families. Indeed, the + belligerent tengu were supposed to have been man's first + instructors in the use of arms. + [ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ] +thoth + The Egyptian god of the moon and wisdom, Thoth is the patron + deity of scribes and of knowledge, including scientific, + medical and mathematical writing, and is said to have given + mankind the art of hieroglyphic writing. He is important as + a mediator and counsellor amongst the gods and is the scribe + of the Heliopolis Ennead pantheon. According to mythology, + he was born from the head of the god Seth. He may be + depicted in human form with the head of an ibis, wholly as an + ibis, or as a seated baboon sometimes with its torso covered + in feathers. His attributes include a crown which consists + of a crescent moon surmounted by a moon disc. + Thoth is generally regarded as a benign deity. He is also + scrupulously fair and is responsible not only for entering + in the record the souls who pass to afterlife, but of + adjudicating in the Hall of the Two Truths. The Pyramid + Texts reveal a violent side of his nature by which he + decapitates the adversaries of truth and wrenches out their + hearts. + [ Encyclopedia of Gods, by Michael Jordan ] +thoth*amon + Men say that he [Thutothmes] has opposed Thoth-Amon, who is + master of all priests of Set, and dwells in Luxor, and that + Thutothmes seeks hidden power [The Heart of Ahriman] to + overthrow the Great One. + [ Conan the Conqueror, by Robert E. Howard ] +*throne + Methought I saw the footsteps of a throne + Which mists and vapours from mine eyes did shroud-- + Nor view of who might sit thereon allowed; + But all the steps and ground about were strown + With sights the ruefullest that flesh and bone + Ever put on; a miserable crowd, + Sick, hale, old, young, who cried before that cloud, + "Thou art our king, + O Death! to thee we groan." + Those steps I clomb; the mists before me gave + Smooth way; and I beheld the face of one + Sleeping alone within a mossy cave, + With her face up to heaven; that seemed to have + Pleasing remembrance of a thought foregone; + A lovely Beauty in a summer grave! + [ Sonnet, by William Wordsworth ] +thug + A worshipper of Kali, who practised _thuggee_, the strangling + of human victims in the name of the religion. Robbery of the + victim provided the means of livelihood. They were also + called _Phansigars_ (Noose operators) from the method employed. + Vigorous suppression was begun by Lord William Bentinck in + 1828, but the fraternity did not become completely extinct + for another 50 years or so. + In common parlance the word is used for any violent "tough". + [ Brewer's Concise Dictionary of Phrase and Fable ] +tiger + 1. A well-known tropical predator (_Felis tigris_): a + feline. It has a yellowish skin with darker spots or + stripes. 2. Figurative: _a paper tiger_, something that is + meant to scare, but has no really scaring effect whatsoever, + (after a statement by Mao Ze Dong, August 1946). + [ Van Dale's Groot Woordenboek der Nederlandse Taal ] + + Tyger! Tyger! burning bright + In the forests of the night, + What immortal hand or eye + Could frame thy fearful symmetry? + [ The Tyger, by William Blake ] +tin +tin of * +tinning kit + "You know salmon, Sarge," said Nobby. + "It is a fish of which I am aware, yes." + "You know they sell kind of slices of it in tins..." + "So I am given to understand, yes." + "Weell...how come all the tins are the same size? Salmon + gets thinner at both ends." + "Interesting point, Nobby. I think-" + [ Soul Music, by Terry Pratchett ] +tin opener + Less than thirty Cat tribes now survived, roaming the cargo + decks on their hind legs in a desperate search for food. + But the food had gone. + The supplies were finished. + Weak and ailing, they prayed at the supply hold's silver + mountains: huge towering acres of metal rocks which, in their + pagan way, the mutant Cats believed watched over them. + Amid the wailing and the screeching one Cat stood up and held + aloft the sacred icon. The icon which had been passed down + as holy, and one day would make its use known. + It was a piece of V-shaped metal with a revolving handle on + its head. + He took down a silver rock from the silver mountain, while + the other Cats cowered and screamed at the blasphemy. + He placed the icon on the rim of the rock, and turned the + handle. + And the handle turned. + And the rock opened. + And inside the rock was Alphabetti spaghetti in tomato sauce. + [ Red Dwarf, by Rob Grant and Doug Naylor ] +titan + Gaea, mother earth, arose from the Chaos and gave birth to + Uranus, heaven, who became her consort. Uranus hated all + their children, because he feared they might challenge his + own authority. Those children, the Titans, the Gigantes, + and the Cyclops, were banished to the nether world. Their + enraged mother eventually released the youngest titan, + Chronos (time), and encouraged him to castrate his father and + rule in his place. Later, he too was challenged by his own + son, Zeus, and he and his fellow titans were ousted from + Mount Olympus. + [ Greek Mythology, by Richard Patrick ] +topaz + Aluminum silicate mineral with either hydroxyl radicals or + fluorine, Al2SiO4(F,OH)2, used as a gem. It is commonly + colorless or some shade of pale yellow to wine-yellow; + ... The stone is transparent with a vitreous luster. It has + perfect cleavage on the basal pinacoid, but it is nevertheless + hard and durable. The brilliant cut is commonly used. Topaz + crystals, which are of the orthorhombic system, occur in highly + acid igneous rocks, e.g., granites and rhyolites, and in + metamorphic rocks, e.g., gneisses and schists. + [ The Columbia Encyclopedia, Sixth Edition ] +touch*stone + "Gold is tried by a touchstone, men by gold." + [ Chilon (c. 560 BC) ] +tourist +* tourist + The road from Ankh-Morpork to Chrim is high, white and + winding, a thirty-league stretch of potholes and half-buried + rocks that spirals around mountains and dips into cool green + valleys of citrus trees, crosses liana-webbed gorges on + creaking rope bridges and is generally more picturesque than + useful. + Picturesque. That was a new word to Rincewind the wizard + (BMgc, Unseen University [failed]). It was one of a number + he had picked up since leaving the charred ruins of + Ankh-Morpork. Quaint was another one. Picturesque meant -- + he decided after careful observation of the scenery that + inspired Twoflower to use the word -- that the landscape was + horribly precipitous. Quaint, when used to describe the + occasional village through which they passed, meant fever- + ridden and tumbledown. + Twoflower was a tourist, the first ever seen on the discworld. + Tourist, Rincewind had decided, meant "idiot". + [ The Colour of Magic, by Terry Pratchett ] +towel +wet towel +moist towel + The Hitchhiker's Guide to the Galaxy has a few things to say + on the subject of towels. + A towel, it says, is about the most massively useful thing + an interstellar hitchhiker can have. Partly it has great + practical value. You can wrap it around you for warmth as + you bound across the cold moons of Jaglan Beta; you can lie + on it on the brilliant marble-sanded beaches of Santraginus + V, inhaling the heady sea vapors; you can sleep under it + beneath the stars which shine so redly on the desert world + of Kakrafoon; use it to sail a miniraft down the slow heavy + River Moth; wet it for use in hand-to-hand combat; wrap it + round your head to ward off noxious fumes or avoid the gaze + of the Ravenous Bugblatter Beast of Traal (a mind-bogglingly + stupid animal, it assumes that if you can't see it, it can't + see you - daft as a brush, but very very ravenous); you can + wave your towel in emergencies as a distress signal, and of + course dry yourself off with it if it still seems to be clean + enough. + [ The Hitchhiker's Guide to the Galaxy, by Douglas Adams ] +*tower +*tower of darkness + Towers (_brooding_, _dark_) stand alone in Waste Areas and + almost always belong to Wizards. All are several stories high, + round, doorless, virtually windowless, and composed of smooth + blocks of masonry that make them very hard to climb. [...] + You will have to go to a Tower and then break into it at some + point towards the end of your Tour. + [ The Tough Guide to Fantasyland, by Diana Wynne Jones ] +trap*door + I knew my Erik too well to feel at all comfortable on jumping + into his house. I knew what he had made of a certain palace at + Mazenderan. From being the most honest building conceivable, he + soon turned it into a house of the very devil, where you could + not utter a word but it was overheard or repeated by an echo. + With his trap-doors the monster was responsible for endless + tragedies of all kinds. + [ The Phantom of the Opera, by Gaston Leroux ] +# takes "trapper or lurker above" when specifying 't' +trapper +trapper or lurker above + The trapper is a creature which has evolved a chameleon-like + ability to blend into the dungeon surroundings. It captures + its prey by remaining very still and blending into the + surrounding dungeon features, until an unsuspecting creature + passes by. It wraps itself around its prey and digests it. +tree + I think that I shall never see + A poem lovely as a tree. + A tree whose hungry mouth is prest + Against the earth's sweet flowing breast; + A tree that looks at God all day, + And lifts her leafy arms to pray; + A tree that may in Summer wear + A nest of robins in her hair; + Upon whose bosom snow has lain; + Who intimately lives with rain. + Poems are made by fools like me, + But only God can make a tree. + [ Trees, by Joyce Kilmer ] +tripe +tripe ration + If you start from scratch, cooking tripe is a long-drawn-out + affair. Fresh whole tripe calls for a minimum of 12 hours of + cooking, some time-honored recipes demanding as much as 24. + To prepare fresh tripe, trim if necessary. Wash it thoroughly, + soaking overnight, and blanch, for 1/2 hour in salted water. + Wash well again, drain and cut for cooking. When cooked, the + texture of tripe should be like that of soft gristle. More + often, alas, because the heat has not been kept low enough, + it has the consistency of wet shoe leather. + [ Joy of Cooking, by I Rombauer and M Becker ] +~water troll +*troll + The troll shambled closer. He was perhaps eight feet tall, + perhaps more. His forward stoop, with arms dangling past + thick claw-footed legs to the ground, made it hard to tell. + The hairless green skin moved upon his body. His head was a + gash of a mouth, a yard-long nose, and two eyes which drank + the feeble torchlight and never gave back a gleam. + [...] + Like a huge green spider, the troll's severed hand ran on its + fingers. Across the mounded floor, up onto a log with one + taloned forefinger to hook it over the bark, down again it + scrambled, until it found the cut wrist. And there it grew + fast. The troll's smashed head seethed and knit together. + He clambered back on his feet and grinned at them. The + waning faggot cast red light over his fangs. + [ Three Hearts and Three Lions, by Poul Anderson ] +*tsurugi of muramasa + This most ancient of swords has been passed down through the + leadership of the Samurai legions for hundreds of years. It + is said to grant luck to its wielder, but its main power is + terrible to behold. It has the capability to cut in half any + creature it is wielded against, instantly killing them. +~*muramasa +tsurugi + The tsurugi, also known as the long samurai sword, is an + extremely sharp, two-handed blade favored by the samurai. + It is made of hardened steel, and is manufactured using a + special process, causing it to never rust. The tsurugi is + rumored to be so sharp that it can occasionally cut + opponents in half! +~*spellbook +turquoise* + TUBAL: There came divers of Antonio's creditors in my company + to Venice that swear he cannot choose but break. + SHYLOCK: I am very glad of it; I'll plague him, I'll torture + him; I am glad of it. + TUBAL: One of them showed me a ring that he had of your + daughter for a monkey. + SHYLOCK: Out upon her! Thou torturest me, Tubal. It was my + turquoise; I had it of Leah when I was a bachelor; I would + not have given it for a wilderness of monkeys. + [ The Merchant of Venice, by William Shakespeare ] +twoflower +guide + "Rincewind!" + Twoflower sprang off the bed. The wizard jumped back, + wrenching his features into a smile. + "My dear chap, right on time! We'll just have lunch, and + then I'm sure you've got a wonderful programme lined up for + this afternoon!" + "Er --" + "That's great!" + Rincewind took a deep breath. "Look," he said desperately, + "let's eat somewhere else. There's been a bit of a fight + down below." + "A tavern brawl? Why didn't you wake me up?" + "Well, you see, I - _what_?" + "I thought I made myself clear this morning, Rincewind. I + want to see genuine Morporkian life - the slave market, the + Whore Pits, the Temple of Small Gods, the Beggar's Guild... + and a genuine tavern brawl." A faint note of suspicion + entered Twoflower's voice. "You _do_ have them, don't you? + You know, people swinging on chandeliers, swordfights over + the table, the sort of thing Hrun the Barbarian and the + Weasel are always getting involved in. You know -- + _excitement_." + [ The Colour of Magic, by Terry Pratchett ] +tyr + Yet remains that one of the Aesir who is called Tyr: + he is most daring, and best in stoutness of heart, and he + has much authority over victory in battle; it is good for + men of valor to invoke him. It is a proverb, that he is + Tyr-valiant, who surpasses other men and does not waver. + He is wise, so that it is also said, that he that is wisest + is Tyr-prudent. This is one token of his daring: when the + Aesir enticed Fenris-Wolf to take upon him the fetter Gleipnir, + the wolf did not believe them, that they would loose him, + until they laid Tyr's hand into his mouth as a pledge. But + when the Aesir would not loose him, then he bit off the hand + at the place now called 'the wolf's joint;' and Tyr is one- + handed, and is not called a reconciler of men. + [ The Prose Edda, by Snorri Sturluson ] +*hulk + Umber hulks are powerful subterranean predators whose + iron-like claws allow them to burrow through solid stone in + search of prey. They are tremendously strong; muscles bulge + beneath their thick, scaly hides and their powerful arms and + legs all end in great claws. +*unicorn +unicorn horn + Men have always sought the elusive unicorn, for the single + twisted horn which projected from its forehead was thought to + be a powerful talisman. It was said that the unicorn had + simply to dip the tip of its horn in a muddy pool for the water + to become pure. Men also believed that to drink from this horn + was a protection against all sickness, and that if the horn was + ground to a powder it would act as an antidote to all poisons. + Less than 200 years ago in France, the horn of a unicorn was + used in a ceremony to test the royal food for poison. + + Although only the size of a small horse, the unicorn is a very + fierce beast, capable of killing an elephant with a single + thrust from its horn. Its fleetness of foot also makes this + solitary creature difficult to capture. However, it can be + tamed and captured by a maiden. Made gentle by the sight of a + virgin, the unicorn can be lured to lay its head in her lap, and + in this docile mood, the maiden may secure it with a golden rope. + [ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ] + + Martin took a small sip of beer. "Almost ready," he said. + "You hold your beer awfully well." + Tlingel laughed. "A unicorn's horn is a detoxicant. Its + possession is a universal remedy. I wait until I reach the + warm glow stage, then I use my horn to burn off any excess and + keep me right there." + [ Unicorn Variations, by Roger Zelazny ] +unreconnoitered + Area of map which is beyond limited perception range when + underwater or engulfed by a monster. +uruk*hai shield +white-handed shield + They were armed with short broad-bladed swords, not with the + curved scimitars usual with Orcs: and they had bows of yew, + in length and shape like the bows of Men. Upon their shields + they bore a strange device: a small white hand in the centre + of a black field; on the front of their iron helms was set an + S-rune, wrought of some white metal. + [ The Two Towers, by J.R.R. Tolkien ] +valkyrie +* valkyrie + The Valkyries were the thirteen choosers of the slain, the + beautiful warrior-maids of Odin who rode through the air and + over the sea. They watched the progress of the battle and + selected the heroes who were to fall fighting. After they + were dead, the maidens rewarded the heroes by kissing them + and then led their souls to Valhalla, where the warriors + lived happily in an ideal existence, drinking and eating + without restraint and fighting over again the battles in + which they died and in which they had won their deathless + fame. + [ The Encyclopaedia of Myths and Legends of All Nations, + by Herbert Spencer Robinson and Knox Wilson ] +vampire +~vampire bat +vampire l* + He can transform himself to wolf, as we gather from the ship + arrival in Whitby, when he tear open the dog; he can be as + bat, as Madam Mina saw him on the window at Whitby, and as + friend John saw him fly from this so near house, and as my + friend Quincey saw him at the window of Miss Lucy. He can come + in mist which he create--that noble ship's captain proved him + of this; but, from what we know, the distance he can make this + mist is limited, and it can only be round himself. He come on + moonlight rays as elemental dust--as again Jonathan saw those + sisters in the castle of Dracula. He become so small--we + ourselves saw Miss Lucy, ere she was at peace, slip through a + hairbreadth space at the tomb door. + [ Dracula, by Bram Stoker ] + + The Oxford English Dictionary is quite unequivocal: + _vampire_ - "a preternatural being of a malignant nature (in + the original and usual form of the belief, a reanimated + corpse), supposed to seek nourishment, or do harm, by sucking + the blood of sleeping persons. ..." + [] +venus + Venus, the goddess of love and beauty, was the daughter of + Jupiter and Dione. Others say that Venus sprang from the + foam of the sea. The zephyr wafted her along the waves to + the Isle of Cyprus, where she was received and attired by + the Seasons, and then led to the assembly of the gods. All + were charmed with her beauty, and each one demanded her + for his wife. Jupiter gave her to Vulcan, in gratitude for + the service he had rendered in forging thunderbolts. So + the most beautiful of the goddesses became the wife of the + most ill-favoured of gods. + [ Bulfinch's Mythology, by Thomas Bulfinch ] +vlad* + Vlad Dracula the Impaler was a 15th-Century monarch of the + Birgau region of the Carpathian Mountains, in what is now + Romania. In Romanian history he is best known for two things. + One was his skilled handling of the Ottoman Turks, which kept + them from making further inroads into Christian Europe. The + other was the ruthless manner in which he ran his fiefdom. + He dealt with perceived challengers to his rule by impaling + them upright on wooden stakes. Visiting dignitaries who + failed to doff their hats had them nailed to their head. +*vortex +vortices + Swirling clouds of pure elemental energies, the vortices are + thought to be related to the larger elementals. They are + noted for being able to envelop unwary travellers. The + hapless fool thus swallowed by a vortex will soon perish from + exposure to the element the vortex is composed of. +vrock + The vrock is one of the weaker forms of demon. It resembles + a cross between a human being and a vulture and does physical + damage by biting and by using the claws on both its arms and + feet. It can also release a cloud of noxious gas to hide in. +wakizashi + A wakizashi was used as a samurai's weapon when the katana + was unavailable. When entering a building, a samurai would + leave his katana on a rack near the entrance. However, the + wakizashi would be worn at all times, and therefore, it made + a sidearm for the samurai (similar to a soldier's use of a + pistol). The samurai would have worn it from the time they + awoke to the time they went to sleep. In earlier periods, + and especially during times of civil wars, a tanto was worn + in place of a wakizashi. + [ Wikipedia, the free encyclopedia ] +# takes "wand or a wall" when specifying '/' +~*sleep +wand * +*wand + 'Saruman!' he cried, and his voice grew in power and authority. + 'Behold, I am not Gandalf the Grey, whom you betrayed. I am + Gandalf the White, who has returned from death. You have no + colour now, and I cast you from the order and from the Council.' + He raised his hand, and spoke slowly in a clear cold voice. + 'Saruman, your staff is broken.' There was a crack, and the + staff split asunder in Saruman's hand, and the head of it + fell down at Gandalf's feet. 'Go!' said Gandalf. With a cry + Saruman fell back and crawled away. + [ The Two Towers, by J.R.R. Tolkien ] +warg + Suddenly Aragorn leapt to his feet. "How the wind howls!" + he cried. "It is howling with wolf-voices. The Wargs have + come west of the Mountains!" + "Need we wait until morning then?" said Gandalf. "It is as I + said. The hunt is up! Even if we live to see the dawn, who + now will wish to journey south by night with the wild wolves + on his trail?" + "How far is Moria?" asked Boromir. + "There was a door south-west of Caradhras, some fifteen miles + as the crow flies, and maybe twenty as the wolf runs," + answered Gandalf grimly. + "Then let us start as soon as it is light tomorrow, if we can," + said Boromir. "The wolf that one hears is worse than the orc + that one fears." + "True!" said Aragorn, loosening his sword in its sheath. "But + where the warg howls, there also the orc prowls." + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +~mjollnir +war*hammer + They had come together at the ford of the Trident while the + battle crashed around them, Robert with his warhammer and his + great antlered helm, the Targaryen prince armored all in + black. On his breastplate was the three-headed dragon of his + House, wrought all in rubies that flashed like fire in the + sunlight. The waters of the Trident ran red around the + hooves of their destriers as they circled and clashed, again + and again, until at last a crushing blow from Robert's hammer + stove in the dragon and the chest behind it. When Ned had + finally come on the scene, Rhaegar lay dead in the stream, + while men of both armies scrambled in the swirling waters for + rubies knocked free of his armor. + [ A Game of Thrones, by George R.R. Martin ] +water + Day after day, day after day, + We stuck, nor breath nor motion; + As idle as a painted ship + Upon a painted ocean. + + Water, water, everywhere, + And all the boards did shrink; + Water, water, everywhere + Nor any drop to drink. + [ The Rime of the Ancient Mariner, by Samuel Taylor Coleridge ] +water demon + [ The monkey king ] walked along the bank, around the pond. + He examined the footprints of the animals that had gone into + the water, and saw that none came out again! So he realized + this pond must be possessed by a water demon. He said to the + 80,000 monkeys, "This pond is possessed by a water demon. Do + not let anybody go into it." + + After a little while, the water demon saw that none of the + monkeys went into the water to drink. So he rose out of the + middle of the pond, taking the shape of a frightening monster. + He had a big blue belly, a white face with bulging green eyes, + and red claws and feet. He said, "Why are you just sitting + around? Come into the pond and drink at once!" + + The monkey king said to the horrible monster, "Are you the + water demon who owns this pond?" "Yes, I am," said he. "Do + you eat whoever goes into the water?" asked the king. "Yes, + I do," he answered, "including even birds. I eat them all. + And when you are forced by your thirst to come into the pond + and drink, I will enjoy eating you, the biggest monkey, most + of all!" He grinned, and saliva dripped down his hairy chin. + [ Buddhist Tales for Young and Old, Vol. 1 ] +water troll + It wasn't that the troll was _horrifying_. Instead of the + rotting, betentacled monstrosity he had been expecting + Rincewind found himself looking at a rather squat but not + particularly ugly old man who would quite easily have passed + for normal on any city street, always provided that other + people on the street were used to seeing old men who were + apparently composed of water and very little else. It was as + if the ocean had decided to create life without going through + all that tedious business of evolution, and had simply formed + a part of itself into a biped and sent it walking squishily up + the beach. The troll was a pleasant translucent blue color. + As Rincewind stared a small shoal of silver fish flashed + across its chest. + [ The Colour of Magic, by Terry Pratchett ] +# axe and morning star and the umpteen polearms have their own entries; +# exclusion keys for broadsword and sunsword aren't really necessarily +# because their entries precede this one +weapon +club +flail +~*broadsword +~sunsword +*sword + A weapon is a device for making your enemy change his mind. + [ The Vor Game, by Lois McMaster Bujold ] +web + Oh what a tangled web we weave, + When first we practise to deceive! + [ Marmion, by Sir Walter Scott ] +# magic whistle deserves its own entry +*whistle + There were legends both on the front and on the back of the + whistle. The one read thus: + + FLA FUR BIS FLE The other: QUIS EST ISTE QUI VENIT + 'I ought to be able to make it out,' he thought; + 'but I suppose I am a little rusty in my Latin. + When I come to think of it, I don't believe I even + know the word for a whistle. The long one does seem + simple enough. It ought to mean, "Who is this who is coming?" + + Well, the best way to find out is evidently to whistle + for him.' + [Ghost Stories of an Antiquary, by Montague Rhodes James + 'Oh, Whistle, and I'll Come to You My Lad'] +# werecritter -- see "lycanthrope" +*wight + When he came to himself again, for a moment he could recall + nothing except a sense of dread. Then suddenly he knew that + he was imprisoned, caught hopelessly; he was in a barrow. A + Barrow-wight had taken him, and he was probably already under + the dreadful spells of the Barrow-wights about which whispered + tales spoke. He dared not move, but lay as he found himself: + flat on his back upon a cold stone with his hands on his + breast. + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +win +winner +winning + ... the rules of Brockian Ultra Cricket, as played in the higher + dimensions. A full set of rules is so massively complicated ... + A brief summary, however, follows: + ... + /Rule Six/: The winning team shall be the first team that wins. + [ Life, the Universe and Everything, by Douglas Adams ] +# note: need to convert player character "gnomish wizard" into just "wizard" +# in the lookup code to avoid conflict with the monster of that same name +~gnomish wizard +wizard +* wizard +apprentice + Ebenezum walked before me along the closest thing we could + find to a path in these overgrown woods. Every few paces he + would pause, so that I, burdened with a pack stuffed with + arcane and heavy paraphernalia, could catch up with his + wizardly strides. He, as usual, carried nothing, preferring, + as he often said, to keep his hands free for quick conjuring + and his mind free for the thoughts of a mage. + [ A Dealing with Demons, by Craig Shaw Gardner ] +wizard of yendor + No one knows how old this mighty wizard is, or from whence he + came. It is known that, having lived a span far greater than + any normal man's, he grew weary of lesser mortals; and so, + spurning all human company, he forsook the dwellings of men + and went to live in the depths of the Earth. He took with + him a dreadful artifact, the Book of the Dead, which is said + to hold great power indeed. Many have sought to find the + wizard and his treasure, but none have found him and lived to + tell the tale. Woe be to the incautious adventurer who + disturbs this mighty sorcerer! +wolf +*wolf +*wolf cub + The ancestors of the modern day domestic dog, wolves are + powerful muscular animals with bushy tails. Intelligent, + social animals, wolves live in family groups or packs made + up of multiple family units. These packs cooperate in hunting + down prey. +*wolfsbane + 1. Any of various, usually poisonous perennial herbs of the + genus Aconitum, having tuberous roots, palmately lobed leaves, + blue or white flowers with large hoodlike upper sepals, and an + aggregate of follicles. 2. The dried leaves and roots of + some of these plants, which yield a poisonous alkaloid that + was formerly used medicinally. In both senses also called + monkshood. + [ The American Heritage Dictionary of + the English Language, Fourth Edition. ] +wood golem + Come, old broomstick, you are needed, + Take these rags and wrap them round you! + Long my orders you have heeded, + By my wishes now I've bound you. + Have two legs and stand, + And a head for you. + Run, and in your hand + Hold a bucket too. + ... + See him, toward the shore he's racing + There, he's at the stream already, + Back like lightning he is chasing, + Pouring water fast and steady. + Once again he hastens! + How the water spills, + How the water basins + Brimming full he fills! + [ The Sorcerer's Apprentice, by Johann Wolfgang von Goethe, + translation by Edwin Zeydel ] +woodchuck + The Usenet Oracle requires an answer to this question! + + > How much wood could a woodchuck chuck if a woodchuck could + > chuck wood? + + "Oh, heck! I'll handle *this* one!" The Oracle spun the terminal + back toward himself, unlocked the ZOT-guard lock, and slid the + glass guard away from the ZOT key. "Ummmm....could you turn around + for a minute? ZOTs are too graphic for the uninitiated. Even *I* + get a little squeamish sometimes..." The neophyte turned around, + and heard the Oracle slam his finger on a computer key, followed + by a loud ZZZZOTTTTT and the smell of ozone. + [ Excerpted from Internet Oracularity 576.6 ] +*worm +long worm tail +worm tooth +crysknife + [The crysknife] is manufactured in two forms from teeth taken + from dead sandworms. The two forms are "fixed" and "unfixed". + An unfixed knife requires proximity to a human body's + electrical field to prevent disintegration. Fixed knives + are treated for storage. All are about 20 centimeters long. + [ Dune, by Frank Herbert ] +wraith +nazgul + Immediately, though everything else remained as before, dim + and dark, the shapes became terribly clear. He was able to + see beneath their black wrappings. There were five tall + figures: two standing on the lip of the dell, three advancing. + In their white faces burned keen and merciless eyes; under + their mantles were long grey robes; upon their grey hairs + were helms of silver; in their haggard hands were swords of + steel. Their eyes fell on him and pierced him, as they + rushed towards him. Desperate, he drew his own sword, and + it seemed to him that it flickered red, as if it was a + firebrand. Two of the figures halted. The third was taller + than the others: his hair was long and gleaming and on his + helm was a crown. In one hand he held a long sword, and in + the other a knife; both the knife and the hand that held it + glowed with a pale light. He sprang forward and bore down + on Frodo. + [ The Fellowship of the Ring, by J.R.R. Tolkien ] +*wumpus + The Wumpus, by the way, is not bothered by the hazards since + he has sucker feet and is too big for a bat to lift. If you + try to shoot him and miss, there's also a chance that he'll + up and move himself into another cave, though by nature the + Wumpus is a sedentary creature. + [ wump (6) -- "Hunt the Wumpus" ] + + _Wumpus yobgregorii_, in the flesh... + Later, all you will be able to remember are its eyes. They + are rich mud-brown, and they hold your own without effort. + [ Hunter, In Darkness, by Andrew Plotkin ] +xan + They sent their friend the mosquito [xan] ahead of them to + find out what lay ahead. "Since you are the one who sucks + the blood of men walking along paths," they told the mosquito, + "go and sting the men of Xibalba." The mosquito flew + down the dark road to the Underworld. Entering the house of + the Lords of Death, he stung the first person that he saw... + + The mosquito stung this man as well, and when he yelled, the + man next to him asked, "Gathered Blood, what's wrong?" So + he flew along the row stinging all the seated men until he + knew the names of all twelve. + [ Popul Vuh, as translated by Ralph Nelson ] +xorn + A distant cousin of the earth elemental, the xorn has the + ability to shift the cells of its body around in such a way + that it becomes porous to inert material. This gives it the + ability to pass through any obstacle that might be between it + and its next meal. +ya + The arrow of choice of the samurai, ya are made of very + straight bamboo, and are tipped with hardened steel. +yeenoghu + Yeenoghu, the demon lord of gnolls, still exists although + all his followers have been wiped off the face of the earth. + He casts magic projectiles at those close to him, and a mere + gaze into his piercing eyes may hopelessly confuse the + battle-weary adventurer. +yeti + The Abominable Snowman, or yeti, is one of the truly great + unknown animals of the twentieth century. It is a large hairy + biped that lives in the Himalayan region of Asia ... The story + of the Abominable Snowman is filled with mysteries great and + small, and one of the most difficult of all is how it got that + awful name. The creature is neither particularly abominable, + nor does it necessarily live in the snows. _Yeti_ is a Tibetan + word which may apply either to a real, but unknown animal of + the Himalayas, or to a mountain spirit or demon -- no one is + quite sure which. And after nearly half a century in which + Westerners have trampled around looking for the yeti, and + asking all sorts of questions, the original native traditions + concerning the creature have become even more muddled and + confused. + [ The Encyclopedia of Monsters, by Daniel Cohen ] +*yugake + Japanese leather archery gloves. Gloves made for use while + practicing had thumbs reinforced with horn. Those worn into + battle had thumbs reinforced with a double layer of leather. +yumi + The samurai is highly trained with a special type of bow, + the yumi. Like the ya, the yumi is made of bamboo. With + the yumi-ya, the bow and arrow, the samurai is an extremely + accurate and deadly warrior. +*zombi* + The zombi... is a soulless human corpse, still dead, but + taken from the grave and endowed by sorcery with a + mechanical semblance of life, -- it is a dead body which is + made to walk and act and move as if it were alive. + [ W.B. Seabrook ] +zruty + The zruty are wild and gigantic beings, living in the + wildernesses of the Tatra mountains. +## +# Rank titles for the various roles. Some of these keys won't reach here +# because they'll have matched entries above. The usual three letter role +# designation plus " ranks" should always find the set for that role. +# +arc* ranks +archeologist +digger +field worker +investigator +exhumer +excavator +spelunker +speleologist +collector +curator + Archeologist ranks + title level + Digger 1 to 2 + Field Worker 3 to 5 + Investigator 6 to 9 + Exhumer 10 to 13 + Excavator 14 to 17 + Spelunker 18 to 21 + Speleologist 22 to 25 + Collector 26 to 29 + Curator 30 +bar* ranks +barbarian +plunder?* +pillager +bandit +brigand +raider +reaver +slayer +chieftain* +conquer* + Barbarian ranks + title level + Plunderer, + Plunderess 1 to 2 + Pillager 3 to 5 + Bandit 6 to 9 + Brigand 10 to 13 + Raider 14 to 17 + Reaver 18 to 21 + Slayer 22 to 25 + Chieftain, + Chieftainess 26 to 29 + Conqueror, + Conqueress 30 +cav* ranks +caveman +cavewoman +cave dweller +troglodyte +aborigine +wanderer +vagrant +wayfarer +roamer +nomad +rover +pioneer + Caveman/Cavewoman/Cave Dweller ranks + title level + Troglodyte 1 to 2 + Aborigine 3 to 5 + Wanderer 6 to 9 + Vagrant 10 to 13 + Wayfarer 14 to 17 + Roamer 18 to 21 + Nomad 22 to 25 + Rover 26 to 29 + Pioneer 30 +hea* ranks +healer +rhizotomist +empiric +embalmer +dresser +medic* ossium +herbalist +magister +magistra +physician +chirurgeon + Healer ranks + title level + Rhizotomist 1 to 2 + Empiric 3 to 5 + Embalmer 6 to 9 + Dresser 10 to 13 + Medicus ossium, + Medica ossium 14 to 17 + Herbalist 18 to 21 + Magister, + Magistra 22 to 25 + Physician 26 to 29 + Chirurgeon 30 +kni* ranks +knight +gallant +esquire +bachelor +sergeant +knight +banneret +chevalier* +seignieur +dame +paladin + Knight ranks + title level + Gallant 1 to 2 + Esquire 3 to 5 + Bachelor 6 to 9 + Sergeant 10 to 13 + Knight 14 to 17 + Banneret 18 to 21 + Chevalier, + Chevaliere 22 to 25 + Seignieur, + Dame 26 to 29 + Paladin 30 +mon* ranks +monk +candidate +novice +initiate +student of stones +student of waters +student of metals +student of winds +student of fire +master + Monk ranks + title level + Candidate 1 to 2 + Novice 3 to 5 + Initiate 6 to 9 + Student + of Stones 10 to 13 + of Waters 14 to 17 + of Metals 18 to 21 + of Winds 22 to 25 + of Fire 26 to 29 + Master 30 +pri* ranks +priest* +aspirant +acolyte +adept +#priest* +curate +canon* +lama +?atriarch +high priest* + Priest/Priestess/Cleric ranks + title level + Aspirant 1 to 2 + Acolyte 3 to 5 + Adept 6 to 9 + Priest, + Priestess 10 to 13 + Curate 14 to 17 + Canon, + Canoness 18 to 21 + Lama 22 to 25 + Patriarch, + Matriarch 26 to 29 + High Priest, + High Priestess 30 +ran* ranks +ranger +tenderfoot +lookout +trailblazer +reconnoiter* +scout +arbalester +archer +sharpshooter +marks*man + Ranger ranks + title level + Tenderfoot 1 to 2 + Lookout 3 to 5 + Trailblazer 6 to 9 + Reconnoiterer, + Reconnoiteress 10 to 13 + Scout 14 to 17 + Arbalester 18 to 21 + Archer 22 to 25 + Sharpshooter 26 to 29 + Marksman, + Markswoman 30 +rog* ranks +rogue +footpad +cutpurse +rogue +pilferer +robber +burglar +filcher +mags*man +thief + Rogue ranks + title level + Footpad 1 to 2 + Cutpurse 3 to 5 + Rogue 6 to 9 + Pilferer 10 to 13 + Robber 14 to 17 + Burglar 18 to 21 + Filcher 22 to 25 + Magsman, + Magswoman 26 to 29 + Thief 30 +sam* ranks +samurai +hatamoto +ronin +ninja +kunoichi +joshu +ryoshu +kokushu +daimyo +kuge +shogun + Samurai ranks + title level + Hatamoto 1 to 2 + Ronin 3 to 5 + Ninja, + Kunoichi 6 to 9 + Joshu 10 to 13 + Ryoshu 14 to 17 + Kokushu 18 to 21 + Daimyo 22 to 25 + Kuge 26 to 29 + Shogun 30 +tou* ranks +tourist +rambler +sightseer +excursionist +peregrinat* +traveler +journeyer +voyager +explorer +adventurer + Tourist ranks + title level + Rambler 1 to 2 + Sightseer 3 to 5 + Excursionist 6 to 9 + Peregrinator, + Peregrinatrix 10 to 13 + Traveler 14 to 17 + Journeyer 18 to 21 + Voyager 22 to 25 + Explorer 26 to 29 + Adventurer 30 +val* ranks +valkyrie +stripling +skirmisher +fighter +*man-at-arms +warrior +swashbuckler +hero +heroine +champion +lord +lady + Valkyrie ranks + title level + Stripling 1 to 2 + Skirmisher 3 to 5 + Fighter 6 to 9 + Man-at-arms, + Woman-at-arms 10 to 13 + Warrior 14 to 17 + Swashbuckler 18 to 21 + Hero, + Heroine 22 to 25 + Champion 26 to 29 + Lord, + Lady 30 +wiz* ranks +wizard +evoker +conjurer +thaumaturge +magician +enchanter +enchantress +sorcerer +sorceress +necromancer +mage + Wizard ranks + title level + Evoker 1 to 2 + Conjurer 3 to 5 + Thaumaturge 6 to 9 + Magician 10 to 13 + Enchanter, + Enchantress 14 to 17 + Sorcerer, + Sorceress 18 to 21 + Necromancer 22 to 25 + Wizard 26 to 29 + Mage 30 +## +# list the titles for all the Discworld novels (3.6 tribute); +# the extra leading spaces are intentional--tty displays the whole list +# full screen flush-left (at least for 80 columns) and without them to +# give some indentation it doesn't look very good +# +novel +paperback book +discworld novel* + Discworld novel titles + by Sir Terry Pratchett + The Colour of Magic + The Light Fantastic + Equal Rites + Mort + Sourcery + Wyrd Sisters + Pyramids + Guards! Guards! + Eric + Moving Pictures + Reaper Man + Witches Abroad + Small Gods + Lords and Ladies + Men at Arms + Soul Music + Interesting Times + Maskerade + Feet of Clay + Hogfather + Jingo + The Last Continent + Carpe Jugulum + The Fifth Elephant + The Truth + Thief of Time + The Last Hero + The Amazing Maurice and His Educated Rodents + Night Watch + The Wee Free Men + Monstrous Regiment + A Hat Full of Sky + Going Postal + Thud! + Wintersmith + Making Money + Unseen Academicals + I Shall Wear Midnight + Snuff + Raising Steam + The Shepherd's Crown +# diff --git a/src/NetHack_3.7/dat/dungeon.lua b/src/NetHack_3.7/dat/dungeon.lua new file mode 100644 index 0000000..ff9e913 --- /dev/null +++ b/src/NetHack_3.7/dat/dungeon.lua @@ -0,0 +1,333 @@ +-- NetHack 3.6 dungeon dungeon.lua $NHDT-Date: 1652196135 2022/05/10 15:22:15 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $ +-- Copyright (c) 1990-95 by M. Stephenson +-- NetHack may be freely redistributed. See license for details. +-- +-- The dungeon description file. +dungeon = { + { + name = "The Dungeons of Doom", + bonetag = "D", + base = 25, + range = 5, + alignment = "unaligned", + themerooms = "themerms.lua", + branches = { + { + name = "The Gnomish Mines", + base = 2, + range = 3 + }, + { + name = "Sokoban", + chainlevel = "oracle", + base = 1, + direction = "up" + }, + { + name = "The Quest", + chainlevel = "oracle", + base = 6, + range = 2, + branchtype = "portal" + }, + { + name = "Fort Ludios", + base = 18, + range = 4, + branchtype = "portal" + }, + { + name = "Gehennom", + chainlevel = "castle", + base = 0, + branchtype = "no_down" + }, + { + name = "The Elemental Planes", + base = 1, + branchtype = "no_down", + direction = "up" + } + }, + levels = { + { + name = "rogue", + bonetag = "R", + base = 15, + range = 4, + flags = "roguelike", + }, + { + name = "oracle", + bonetag = "O", + base = 5, + range = 5, + alignment = "neutral" + }, + { + name = "bigrm", + bonetag = "B", + base = 10, + range = 3, + chance = 40, + nlevels = 11 + }, + { + name = "medusa", + base = -5, + range = 4, + nlevels = 4, + alignment = "chaotic" + }, + { + name = "castle", + base = -1 + } + } + }, + { + name = "Gehennom", + bonetag = "G", + base = 20, + range = 5, + flags = { "mazelike", "hellish" }, + lvlfill = "hellfill", + alignment = "noalign", + branches = { + { + name = "Vlad's Tower", + base = 9, + range = 5, + direction = "up" + } + }, + levels = { + { + name = "valley", + bonetag = "V", + base = 1 + }, + { + name = "sanctum", + base = -1 + }, + { + name = "juiblex", + bonetag = "J", + base = 4, + range = 4 + }, + { + name = "baalz", + bonetag = "B", + base = 6, + range = 4 + }, + { + name = "asmodeus", + bonetag = "A", + base = 2, + range = 6 + }, + { + name = "wizard1", + base = 11, + range = 6 + }, + { + name = "wizard2", + bonetag = "X", + chainlevel = "wizard1", + base = 1 + }, + { + name = "wizard3", + bonetag = "Y", + chainlevel = "wizard1", + base = 2 + }, + { + name = "orcus", + bonetag = "O", + base = 10, + range = 6 + }, + { + name = "fakewiz1", + bonetag = "F", + base = -6, + range = 4 + }, + { + name = "fakewiz2", + bonetag = "G", + base = -6, + range = 4 + }, + } + }, + { + name = "The Gnomish Mines", + bonetag = "M", + base = 8, + range = 2, + alignment = "lawful", + flags = { "mazelike" }, + lvlfill = "minefill", + levels = { + { + name = "minetn", + bonetag = "T", + base = 3, + range = 2, + nlevels = 7, + flags = "town" + }, + { + name = "minend", +-- 3.7.0: minend changed to no-bones to simplify achievement tracking +-- bonetag = "E" + base = -1, + nlevels = 3 + }, + } + }, + { + name = "The Quest", + bonetag = "Q", + base = 5, + range = 2, + levels = { + { + name = "x-strt", + base = 1, + range = 1 + }, + { + name = "x-loca", + bonetag = "L", + base = 3, + range = 1 + }, + { + name = "x-goal", + base = -1 + }, + } + }, + { + name = "Sokoban", + base = 4, + alignment = "neutral", + flags = { "mazelike" }, + entry = -1, + levels = { + { + name = "soko1", + base = 1, + nlevels = 2 + }, + { + name = "soko2", + base = 2, + nlevels = 2 + }, + { + name = "soko3", + base = 3, + nlevels = 2 + }, + { + name = "soko4", + base = 4, + nlevels = 2 + }, + } + }, + { + name = "Fort Ludios", + base = 1, + bonetag = "K", + flags = { "mazelike" }, + alignment = "unaligned", + levels = { + { + name = "knox", + bonetag = "K", + base = -1 + } + } + }, + { + name = "Vlad's Tower", + base = 3, + bonetag = "T", + protofile = "tower", + alignment = "chaotic", + flags = { "mazelike" }, + entry = -1, + levels = { + { + name = "tower1", + base = 1 + }, + { + name = "tower2", + base = 2 + }, + { + name = "tower3", + base = 3 + }, + } + }, + { + name = "The Elemental Planes", + bonetag = "E", + base = 6, + alignment = "unaligned", + flags = { "mazelike" }, + entry = -2, + levels = { + { + name = "astral", + base = 1 + }, + { + name = "water", + base = 2 + }, + { + name = "fire", + base = 3 + }, + { + name = "air", + base = 4 + }, + { + name = "earth", + base = 5 + }, + { + name = "dummy", + base = 6 + }, + } + }, + { + name = "The Tutorial", + base = 2, + flags = { "mazelike", "unconnected" }, + levels = { + { + name = "tut-1", + base = 1, + }, + { + name = "tut-2", + base = 2, + }, + } + }, +} diff --git a/src/NetHack_3.7/dat/earth.lua b/src/NetHack_3.7/dat/earth.lua new file mode 100644 index 0000000..4d7527e --- /dev/null +++ b/src/NetHack_3.7/dat/earth.lua @@ -0,0 +1,130 @@ +-- NetHack endgame earth.lua $NHDT-Date: 1652196025 2022/05/10 15:20:25 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- 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. +-- +-- +-- These are the ENDGAME levels: earth, air, fire, water, and astral. +-- The top-most level, the Astral Level, has 3 temples and shrines. +-- Players are supposed to sacrifice the Amulet of Yendor on the appropriate +-- shrine. + +des.level_init({ style = "solidfill", fg = " " }); + +des.level_flags("mazelevel", "noteleport", "hardfloor", "shortsighted") + +des.message("Well done, mortal!") +des.message("But now thou must face the final Test...") +des.message("Prove thyself worthy or perish!") + +-- The player lands, upon arrival, in the +-- lower-right cavern. The location of the +-- portal to the next level is randomly chosen. +-- This map has no visible outer boundary, and +-- is mostly diggable "rock". +des.map([[ + + ... + .... .. + ..... ... .. + .... .... ... + .... ... .... ... . + .. .. ....... . .. + .. ... . + . .. . ... + .. .. . .. . + .. ... . + ... ... + .. ... .. + .... .. + .. ... + .. ..... + ... ... + .... + .. + +]]); + +des.replace_terrain({ region={0,0, 75,19}, fromterrain=" ", toterrain=".", lit=0, chance=5 }) + +-- Since there are no stairs, this forces the hero's initial placement +des.teleport_region({region = {69,16,69,16} }) +des.levregion({ region = {0,0,75,19}, exclude = {65,13,75,19}, type="portal", name="air" }) +-- Some helpful monsters. Making sure a +-- pick axe and at least one wand of digging +-- are available. +des.monster("Elvenking", 67,16) +des.monster("minotaur", 67,14) +-- An assortment of earth-appropriate nasties +-- in each cavern. +des.monster({ id = "earth elemental", x = 52, y = 13, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 53, y = 13, peaceful = 0 }) +des.monster("rock troll", 53,12) +des.monster("stone giant", 54,12) +-- +des.monster("pit viper", 70,05) +des.monster("barbed devil", 69,06) +des.monster("stone giant", 69,08) +des.monster("stone golem", 71,08) +des.monster("pit fiend", 70,09) +des.monster({ id = "earth elemental", x = 70, y = 08, peaceful = 0 }) +-- +des.monster({ id = "earth elemental", x = 60, y = 03, peaceful = 0 }) +des.monster("stone giant", 61,04) +des.monster({ id = "earth elemental", x = 62, y = 04, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 61, y = 05, peaceful = 0 }) +des.monster("scorpion", 62,05) +des.monster("rock piercer", 63,05) +-- +des.monster("umber hulk", 40,05) +des.monster("dust vortex", 42,05) +des.monster("rock troll", 38,06) +des.monster({ id = "earth elemental", x = 39, y = 06, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 41, y = 06, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 38, y = 07, peaceful = 0 }) +des.monster("stone giant", 39,07) +des.monster({ id = "earth elemental", x = 43, y = 07, peaceful = 0 }) +des.monster("stone golem", 37,08) +des.monster("pit viper", 43,08) +des.monster("pit viper", 43,09) +des.monster("rock troll", 44,10) +-- +des.monster({ id = "earth elemental", x = 02, y = 01, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 03, y = 01, peaceful = 0 }) +des.monster("stone golem", 01,02) +des.monster({ id = "earth elemental", x = 02, y = 02, peaceful = 0 }) +des.monster("rock troll", 04,03) +des.monster("rock troll", 03,03) +des.monster("pit fiend", 03,04) +des.monster({ id = "earth elemental", x = 04, y = 05, peaceful = 0 }) +des.monster("pit viper", 05,06) +-- +des.monster({ id = "earth elemental", x = 21, y = 02, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 21, y = 03, peaceful = 0 }) +des.monster("minotaur", 21,04) +des.monster({ id = "earth elemental", x = 21, y = 05, peaceful = 0 }) +des.monster("rock troll", 22,05) +des.monster({ id = "earth elemental", x = 22, y = 06, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 23, y = 06, peaceful = 0 }) +-- +des.monster("pit viper", 14,08) +des.monster("barbed devil", 14,09) +des.monster({ id = "earth elemental", x = 13, y = 10, peaceful = 0 }) +des.monster("rock troll", 12,11) +des.monster({ id = "earth elemental", x = 14, y = 12, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 15, y = 13, peaceful = 0 }) +des.monster("stone giant", 17,13) +des.monster("stone golem", 18,13) +des.monster("pit fiend", 18,12) +des.monster({ id = "earth elemental", x = 18, y = 11, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 18, y = 10, peaceful = 0 }) +-- +des.monster("barbed devil", 02,16) +des.monster({ id = "earth elemental", x = 03, y = 16, peaceful = 0 }) +des.monster("rock troll", 02,17) +des.monster({ id = "earth elemental", x = 04, y = 17, peaceful = 0 }) +des.monster({ id = "earth elemental", x = 04, y = 18, peaceful = 0 }) + +des.object("boulder") + diff --git a/src/NetHack_3.7/dat/engrave.txt b/src/NetHack_3.7/dat/engrave.txt new file mode 100644 index 0000000..ff473b6 --- /dev/null +++ b/src/NetHack_3.7/dat/engrave.txt @@ -0,0 +1,93 @@ +# NetHack 3.7 engrave.txt $NHDT-Date: 1596498240 2020/08/03 23:44:00 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.5 $ +# Copyright (c) 2015 by Pasi Kallinen +# NetHack may be freely redistributed. See license for details. +# Random engravings on the floor +# +Elbereth +# trap engravings +Vlad was here +ad aerarium + +# take-offs and other famous engravings +Owlbreath +Galadriel +Kilroy was here +Frodo lives + +# Journey to the Center of the Earth +A.S. -> +<- A.S. +# Adventure +You won't get it up the steps +# Inferno +Lasciate ogni speranza o voi ch'entrate. +# Prisoner +Well Come +# God's Final Message to His Creation (from "So Long, and Thanks for All +# the Fish" by Douglas Adams): +We apologize for the inconvenience. +# Thriller +See you next Wednesday +# Smokey Stover +notary sojak + +For a good time call 8?7-5309 +# Various zoos around the world +Please don't feed the animals. +# A palindrome +Madam, in Eden, I'm Adam. +# Siskel & Ebert +Two thumbs up! +# The First C Program +Hello, World! +^?MAIL +# AOL +You've got mail! +^. +# Clueless +As if! +# 200x incarnation of Dr.Who +BAD WOLF + +# Gang tag +Arooo! Werewolves of Yendor! + +# Strategy and pun +Dig for Victory here + +# Pompeii +Gaius Julius Primigenius was here. Why are you late? + +# Helpful guiding +Don't go this way +Go left ---> +<--- Go right +X marks the spot +X <--- You are here. +Here be dragons +Save now, and do your homework! +There was a hole here. It's gone now. +The Vibrating Square +This is a pit! +This is not the dungeon you are looking for. +Watch out, there's a gnome with a wand of death behind that door! + +# Misc fun +This square deliberately left blank. + +# Viking graffiti +Haermund Hardaxe carved these runes + +# Advertising +Need a light? Come visit the Minetown branch of Izchak's Lighting Store! +Snakes on the Astral Plane - Soon in a dungeon near you +You are the one millionth visitor to this place! Please wait 200 turns for your wand of wishing. + +# DnD +Warning, Exploding runes! + +# "Whispers Underground" Ben Aaronovitch +If you can read these words then you are not only a nerd but probably dead. + +# Portal +The cake is a lie diff --git a/src/NetHack_3.7/dat/epitaph.txt b/src/NetHack_3.7/dat/epitaph.txt new file mode 100644 index 0000000..a8fbb32 --- /dev/null +++ b/src/NetHack_3.7/dat/epitaph.txt @@ -0,0 +1,399 @@ +# NetHack 3.7 epitaph.txt $NHDT-Date: 1596498241 2020/08/03 23:44:01 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.4 $ +# Copyright (c) 2015 by Pasi Kallinen +# NetHack may be freely redistributed. See license for details. +# Epitaphs for random headstones +# +# +Rest in peace +R.I.P. +Rest In Pieces +Note -- there are NO valuable items in this grave +1994-1995. The Longest-Lived Hacker Ever +The Grave of the Unknown Hacker +We weren't sure who this was, but we buried him here anyway +Sparky -- he was a very good dog +Beware of Electric Third Rail +Made in Taiwan +Og friend. Og good dude. Og died. Og now food. +Beetlejuice Beetlejuice Beetlejuice +Look out below! +Please don't dig me up. I'm perfectly happy down here. -- Resident +Postman, please note forwarding address: Gehennom, Asmodeus's Fortress, fifth lemure on the left +Mary had a little lamb/Its fleece was white as snow/When Mary was in trouble/The lamb was first to go +Be careful, or this could happen to you! +Soon you'll join this fellow in hell! -- the Wizard of Yendor +Caution! This grave contains toxic waste +Sum quod eris +Here lies an Atheist, all dressed up and no place to go +Here lies Ezekiel, age 102. The good die young. +Here lies my wife: Here let her lie! Now she's at rest and so am I. +Here lies Johnny Yeast. Pardon me for not rising. +He always lied while on the earth and now he's lying in it +I made an ash of myself +Soon ripe. Soon rotten. Soon gone. But not forgotten. +Here lies the body of Jonathan Blake. Stepped on the gas instead of the brake. +Go away! +Alas fair Death, 'twas missed in life - some peace and quiet from my wife +Applaud, my friends, the comedy is finished. +At last... a nice long sleep. +Audi Partem Alteram +Basil, assaulted by bears +Burninated +Confusion will be my epitaph +Do not open until Christmas +Don't be daft, they couldn't hit an elephant at this dist- +Don't forget to stop and smell the roses +Don't let this happen to you! +Dulce et decorum est pro patria mori +Et in Arcadia ego +Fatty and skinny went to bed. Fatty rolled over and skinny was dead. Skinny Smith 1983-2000. +Finally I am becoming stupider no more +Follow me to hell +...for famous men have the whole earth as their memorial +Game over, man. Game over. +Go away! I'm trying to take a nap in here! Bloody adventurers... +Gone fishin' +Good night, sweet prince: And flights of angels sing thee to thy rest! +Go Team Ant! +He farmed his way here +Here lies a programmer. Killed by a fatal error. +Here lies Bob - decided to try an acid blob +Here lies Dudley, killed by another %&#@#& newt. +Here lies Gregg, choked on an egg +Here lies Lies. It's True. +Here lies The Lady's maid, died of a Vorpal Blade +Here lies the left foot of Jack, killed by a land mine. Let us know if you find any more of him +He waited too long +I'd rather be sailing +If a man's deeds do not outlive him, of what value is a mark in stone? +I'm gonna make it! +I took both pills! +I will survive! +Killed by a black dragon -- This grave is empty +Let me out of here! +Lookin' good, Medusa. +Mrs. Smith, choked on an apple. She left behind grieving husband, daughter, and granddaughter. +Nobody believed her when she said her feet were killing her +No! I don't want to see my damn conduct! +One corpse, sans head +On the whole, I'd rather be in Minetown +On vacation +Oops. +Out to Lunch +SOLD +Someone set us up the bomb! +Take my stuff, I don't need it anymore +Taking a year dead for tax reasons +The reports of my demise are completely accurate +(This space for sale) +This was actually just a pit, but since there was a corpse, we filled it +This way to the crypt +Tu quoque, Brute? +VACANCY +Welcome! +Wish you were here! +Yea, it got me too +You should see the other guy +...and they made me engrave my own headstone too! +...but the blood has stopped pumping and I am left to decay... + +A masochist is never satisfied. +Ach, 'twas a wee monster in the loch +Adapt. Enjoy. Survive. +Adventure, hah! Excitement, hah! +After all, what are friends for... +After this, nothing will shock me +After three days, fish and guests stink +Age and treachery will always overcome youth and skill +Ageing is not so bad. The real killer is when you stop. +Ain't I a stinker? +Algernon +All else failed... +All hail RNG +All right, we'll call it a draw! +All's well that ends well +Alone at last! +Always attack a floating eye from behind! +Am I having fun yet? +And I can still crawl, I'm not dead yet! +And all I wanted was a free lunch +And all of the signs were right there on your face +And don't give me that innocent look either! +And everyone died. Boo hoo hoo. +And here I go again... +And nobody cares until somebody famous dies... +And so it ends? +And so... it begins. +And sometimes the bear eats you. +And then 'e nailed me 'ead to the floor! +And they said it couldn't be done! +And what do I look like? The living? +And yes, it was ALL his fault! +And you said it was pretty here... +Another lost soul +Any day above ground is a good day! +Any more of this and I'll die of a stroke before I'm 30. +Anybody seen my head? +Anyone for deathmatch? +Anything for a change. +Anything that kills you makes you ... well, dead +Anything worth doing is worth overdoing. +Are unicorns supposedly peaceful if you're a virgin? Hah! +Are we all being disintegrated, or is it just me? +At least I'm good at something +Attempted suicide +Auri sacra fames +Auribus teneo lupum +Be prepared +Beauty survives +Been Here. Now Gone. Had a Good Time. +Been through Hell, eh? What did you bring me? +Beg your pardon, didn't recognize you, I've changed a lot. +Being dead builds character +Beloved daughter, a treasure, buried here. +Best friends come and go.... Mine just die. +Better be dead than a fat slave +Better luck next time +Beware of Discordians bearing answers +Beware the ... +Bloody Hell... +Bloody barbarians! +Blown upward out of sight: He sought the leak by candlelight +Brains... Brains... Fresh human brains... +Buried the cat. Took an hour. Damn thing kept fighting. +But I disarmed the trap! +CONNECT 1964 - NO CARRIER 1994 +Call me if you need my phone number! +Can YOU fly? +Can you believe that thing is STILL moving? +Can you come up with some better ending for this? +Can you feel anything when I do this? +Can you give me mouth to mouth, you just took my breath away. +Can't I just have a LITTLE peril? +Can't eat, can't sleep, had to bury the husband here. +Can't you hit me?! +Chaos, panic and disorder. My work here is done. +Check enclosed. +Check this out! It's my brain! +Chivalry is only reasonably dead +Coffin for sale. Lifetime guarantee. +Come Monday, I'll be all right. +Come and see the violence inherent in the system +Come back here! I'll bite your bloody knees off! +Commodore Business Machines, Inc. Died for our sins. +Complain to one who can help you +Confess my sins to god? Which one? +Confusion will be my epitaph +Cooties? Ain't no cooties on me! +Could somebody get this noose off me? +Could you check again? My name MUST be there. +Could you please take a breath mint? +Couldn't I be sedated for this? +Courage is looking at your setbacks with serenity +Cover me, I'm going in! +Crash course in brain surgery +Cross my fingers for me. +Curse god and die +Cut to fit +De'Ath +Dead Again? Pardon me for not getting it right the first time! +Dead and loving every moment! +Dear wife of mine. Died of a broken heart, after I took it out of her. +Don't tread on me! +Dragon? What dragon? +Drawn and quartered +Either I'm dead or my watch has stopped. +Eliza -- Was I really alive, or did I just think I was? +Elvis +Enter not into the path of the wicked +Eris? I don't need Eris +Eternal Damnation, Come and stay a long while! +Even The Dead pay taxes (and they aren't Grateful). +Even a tomb stone will say good things when you're down! +Ever notice that live is evil backwards? +Every day is starting to look like Monday +Every day, in every way, I am getting better and better. +Every survival kit should include a sense of humor +Evil I did dwell; lewd did I live +Ex post fucto +Excellent day to have a rotten day. +Excuse me for not standing up. +Experience isn't everything. First, you've got to survive. +First shalt thou pull out the Holy Pin +For a Breath, I Tarry... +For recreational use only. +For sale: One soul, slightly used. Asking for 3 wishes. +For some moments in life, there are no words. +Forget Disney World, I'm going to Hell! +Forget about the dog, Beware of my wife. +Funeral - Real fun. +Gawd, it's depressing in here, isn't it? +Genuine Exploding Gravestone. (c)Acme Gravestones Inc. +Get back here! I'm not finished yet... +Go ahead, I dare you to! +Go ahead, it's either you or him. +Goldilocks -- This casket is just right +Gone But Not Forgotten +Gone Underground For Good +Gone away owin' more than he could pay. +Gone, but not forgiven +Got a life. Didn't know what to do with it. +Grave? But I was cremated! +Greetings from Hell - Wish you were here. +HELP! It's dark in here.... Oh, my eyes are closed - sorry +Ha! I NEVER pay income tax! +Have you come to raise the dead? +Having a good time can be deadly. +Having a great time. Where am I exactly?? +He died of the flux. +He died today.... May we rest in peace! +He got the upside, I got the downside. +He lost his face when he was beheaded. +He missed me first. +He's not dead, he just smells that way. +Help! I've fallen and I can't get up! +Help, I can't wake up! +Here lies Pinocchio +Here lies the body of John Round. Lost at sea and never found. +Here there be dragons +Hey, I didn't write this stuff! +Hodie mihi, cras tibi +Hold my calls +Home Sweet Hell +Humpty Dumpty, a Bad Egg. He was pushed off the wall. +I KNEW this would happen if I lived long enough. +I TOLD you I was sick! +I ain't broke but I am badly bent. +I ain't old. I'm chronologically advantaged. +I am NOT a vampire. I just like to bite..nibble, really! +I am here. Wish you were fine. +I am not dead yet, but watch for further reports. +I believe them bones are me. +I broke his brain. +I can feel it. My mind. It's going. I can feel it. +I can't go to Hell. They're afraid I'm gonna take over! +I can't go to hell, they don't want me. +I didn't believe in reincarnation the last time, either. +I didn't mean it when I said 'Bite me' +I died laughing +I disbelieved in reincarnation in my last life, too. +I hacked myself to death +I have all the time in the world +I knew I'd find a use for this gravestone! +I know my mind. And it's around here someplace. +I lied! I'll never be alright! +I like it better in the dark. +I like to be here when I can. +I may rise but I refuse to shine. +I never get any either. +I said hit HIM with the fireball, not me! +I told you I would never say goodbye. +I used to be amusing. Now I'm just disgusting. +I used up all my sick days, so now I'm calling in dead. +I was killed by +I was somebody. Who, is no business of yours. +I will not go quietly. +I'd give you a piece of my mind... but I can't find it. +I'd rather be breathing +I'll be back! +I'll be mellow when I'm dead. For now, let's PARTY! +I'm doing this only for tax purposes. +I'm not afraid of Death! What's he gonna do? Kill me? +I'm not getting enough money, so I'm not going to engrave anything useful here. +I'm not saying anything. +I'm weeth stupeed ---> +If you thought you had problems... +Ignorance kills daily. +Ignore me... I'm just here for my looks! +Ilene Toofar -- Fell off a cliff +Is that all? +Is there life before Death? +Is this a joke, or a grave matter? +It happens sometimes. People just explode. +It must be Thursday. I never could get the hang of Thursdays. +It wasn't a fair fight +It wasn't so easy. +It's Loot, Pillage and THEN Burn... +Just doing my job here +Killed by diarrhea of mouth and constipation of brain. +Let her RIP +Let it be; I am dead. +Let's play Hide the Corpse +Life is NOT a dream +Madge Ination -- It wasn't all in my head +Meet me in Heaven +Move on, there's nothing to see here. +Mr. Flintstone -- Yabba-dabba-done +My heart is not in this +No one ever died from it +No, you want room 12A, next door. +Nope. No trap on that chest. I swear. +Not again! +Not every soil can bear all things +Now I have a life +Now I lay thee down to sleep... wanna join me? +OK, here is a question: Where ARE your tanlines? +Obesa Cantavit +Oh! An untimely death. +Oh, by the way, how was my funeral? +"Oh, honey... I missed you!" she said, and fired again. +Ok, so the light does go off. Now let me out of here. +One stone brain +Ooh! Somebody STOP me! +Oops! +Out for the night. Leave a message. +Ow! Do that again! +Pardon my dust. +Part of me still works. +Please, not in front of those orcs! +Prepare to meet me in Heaven +R2D2 -- Rest, Tin Piece +Relax. Nothing ever happens on the first level. +Res omnia mea culpa est +Rest In Pieces +Rest, rest, perturbed spirit. +Rip Torn +She always said her feet were killing her but nobody believed her. +She died of a chest cold. +So let it be written, so let it be done! +So then I says, How do I know you're the real angel of death? +Some patients insist on dying. +Some people have it dead easy, don't they? +Some things are better left buried. +Sure, trust me, I'm a lawyer... +Thank God I wore my corset, because I think my sides have split. +That is all +The Gods DO have a sense of humor: I'm living proof! +The frog's dead. He Kermitted suicide. +This dungeon is a pushover +This elevator doesn't go to Heaven +This gravestone is shareware. To register, please send me 10 zorkmids +This gravestone provided by The Yendorian Grave Services Inc. +This is not an important part of my life. +This one's on me. +This side up +Tim Burr -- Smashed by a tree +Tone it down a bit, I'm trying to get some rest here. +Virtually Alive +We Will Meet Again. +Weep not, he is at rest +Welcome to Dante's. What level please? +Well, at least they listened to my sermon... +Went to be an angel. +What are you doing over there? +What are you smiling at? +What can you say, Death's got appeal...! +What health care? +What pit? +When the gods want to punish you, they answer your prayers. +Where e'er you be let your wind go free. Keeping it in was the death of me! +Where's my refund? +Will let you know for sure in a day or two... +Wizards are wimps +Worms at work, do not disturb! +Would you mind moving a bit? I'm short of breath down here. +Would you quit being evil over my shoulder? +Ya really had me going baby, but now I'm gone. +Yes Dear, just a few more minutes... +You said it wasn't poisonous! +You set my heart aflame. You gave me heartburn. diff --git a/src/NetHack_3.7/dat/fakewiz1.lua b/src/NetHack_3.7/dat/fakewiz1.lua new file mode 100644 index 0000000..abee299 --- /dev/null +++ b/src/NetHack_3.7/dat/fakewiz1.lua @@ -0,0 +1,44 @@ +-- NetHack yendor fakewiz1.lua $NHDT-Date: 1652196025 2022/05/10 15:20:25 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- 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"); + +local tmpbounds = selection.match("-"); +local bnds = tmpbounds:bounds(); +local bounds2 = selection.fillrect(bnds.lx, bnds.ly + 1, bnds.hx - 2, bnds.hy - 1); + +local fakewiz1 = des.map({ halign = "center", valign = "center", map = [[ +......... +.}}}}}}}. +.}}---}}. +.}--.--}. +.}|...|}. +.}--.--}. +.}}---}}. +.}}}}}}}. +......... +]], contents = function(rm) + des.levregion({ region={01,00,79,20}, region_islev=1, exclude={0,0,8,8}, type="stair-up" }) + des.levregion({ region={01,00,79,20}, region_islev=1, exclude={0,0,8,8}, type="stair-down" }) + des.levregion({ region={01,00,79,20}, region_islev=1, exclude={0,0,8,8}, type="branch" }); + des.teleport_region({ region={01,00,79,20}, region_islev=1,exclude={2,2,6,6} }) + des.levregion({ region={4,4,4,4}, type="portal", name="wizard3" }) + des.mazewalk(08,05,"east") + des.region({ region={04,03,06,06},lit=0,type="ordinary",irregular=1,arrival_room=true }) + des.monster("L",04,04) + des.monster("vampire lord",03,04) + des.monster("kraken",06,06) + -- And to make things a little harder. + des.trap("board",04,03) + des.trap("board",04,05) + des.trap("board",03,04) + des.trap("board",05,04) +end +}); + +local protected = bounds2:negate() | fakewiz1; +hell_tweaks(protected); diff --git a/src/NetHack_3.7/dat/fakewiz2.lua b/src/NetHack_3.7/dat/fakewiz2.lua new file mode 100644 index 0000000..4b81ae3 --- /dev/null +++ b/src/NetHack_3.7/dat/fakewiz2.lua @@ -0,0 +1,44 @@ +-- NetHack yendor fakewiz2.lua $NHDT-Date: 1652196026 2022/05/10 15:20:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.2 $ +-- 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"); + +local tmpbounds = selection.match("-"); +local bnds = tmpbounds:bounds(); +local bounds2 = selection.fillrect(bnds.lx, bnds.ly + 1, bnds.hx - 2, bnds.hy - 1); + +local fakewiz2 = des.map({ halign = "center", valign = "center", map = [[ +......... +.}}}}}}}. +.}}---}}. +.}--.--}. +.}|...|}. +.}--.--}. +.}}---}}. +.}}}}}}}. +......... +]], contents = function(rm) + des.levregion({ region={01,00,79,20}, region_islev=1, exclude={0,0,8,8}, type="stair-up" }) + des.levregion({ region={01,00,79,20}, region_islev=1, exclude={0,0,8,8}, type="stair-down" }) + des.levregion({ region={01,00,79,20}, region_islev=1, exclude={0,0,8,8}, type="branch" }); + des.teleport_region({ region={01,00,79,20}, region_islev=1,exclude={2,2,6,6} }) + des.mazewalk(08,05,"east") + des.monster("L",04,04) + des.monster("vampire lord",03,04) + des.monster("kraken",06,06) + -- And to make things a little harder. + des.trap("board",04,03) + des.trap("board",04,05) + des.trap("board",03,04) + des.trap("board",05,04) + -- treasures + des.object("\"",04,04) +end +}); + +local protected = bounds2:negate() | fakewiz2; +hell_tweaks(protected); diff --git a/src/NetHack_3.7/dat/fire.lua b/src/NetHack_3.7/dat/fire.lua new file mode 100644 index 0000000..c97973c --- /dev/null +++ b/src/NetHack_3.7/dat/fire.lua @@ -0,0 +1,156 @@ +-- NetHack endgame fire.lua $NHDT-Date: 1652196026 2022/05/10 15:20:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.1 $ +-- 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", "shortsighted", "hot", "fumaroles") +-- The player lands, upon arrival, in the +-- lower-right. The location of the +-- portal to the next level is randomly chosen. +-- This map has no visible outer boundary, and +-- is mostly open area, with lava lakes and bunches of fire traps. +des.map([[ +............................................................................ +....LLLLLLLL............L.......................LLL......................... +...LL...................L......................LLLL................LL....... +...L.............LLLL...LL....LL...............LLLLL.............LLL........ +.LLLL..............LL....L.....LLL..............LLLL..............LLLL...... +..........LLLL...LLLL...LLL....LLL......L........LLLL....LL........LLL...... +........LLLLLLL...LL.....L......L......LL.........LL......LL........LL...L.. +........LL..LLL..LL......LL......LLLL..L.........LL......LLL............LL.. +....L..LL....LLLLL.................LLLLLLL.......L......LL............LLLLLL +....L..L.....LL.LLLL.......L............L........LLLLL.LL......LL.........LL +....LL........L...LL......LL.............LLL.....L...LLL.......LLL.........L +.....LLLLLL........L.......LLL.............L....LL...L.LLL......LLLLLLL..... +..........LLLL............LL.L.............L....L...LL.........LLL..LLL..... +...........................LLLLL...........LL...L...L........LLLL..LLLLLL... +.....LLLL.............LL....LL.......LLL...LL.......L..LLL....LLLLLLL....... +.......LLL.........LLLLLLLLLLL......LLLLL...L...........LL...LL...LL........ +.........LL.......LL.........LL.......LLL....L..LLL....LL.........LL........ +..........LLLLLLLLL...........LL....LLL.......LLLLL.....LL........LL........ +.................L.............LLLLLL............LL...LLLL.........LL....... +.................................LL....................LL................... +]]); +des.teleport_region({ region = {69,16,69,16} }) +des.levregion({ region = {0,0,75,19}, exclude = {65,13,75,19}, type="portal", name="water" }) + +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +des.trap("fire") +-- An assortment of fire-appropriate nasties +des.monster("red dragon") +des.monster("balrog") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("fire vortex") +des.monster("hell hound") +-- +des.monster("fire giant") +des.monster("barbed devil") +des.monster("hell hound") +des.monster("stone golem") +des.monster("pit fiend") +des.monster({ id = "fire elemental", peaceful = 0 }) +-- +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("hell hound") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("scorpion") +des.monster("fire giant") +-- +des.monster("hell hound") +des.monster("dust vortex") +des.monster("fire vortex") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("hell hound") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("stone golem") +des.monster("pit viper") +des.monster("pit viper") +des.monster("fire vortex") +-- +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("fire giant") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("fire vortex") +des.monster("fire vortex") +des.monster("pit fiend") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("pit viper") +-- +des.monster({ id = "salamander", peaceful = 0 }) +des.monster({ id = "salamander", peaceful = 0 }) +des.monster("minotaur") +des.monster({ id = "salamander", peaceful = 0 }) +des.monster("steam vortex") +des.monster({ id = "salamander", peaceful = 0 }) +des.monster({ id = "salamander", peaceful = 0 }) +-- +des.monster("fire giant") +des.monster("barbed devil") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("fire vortex") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster("hell hound") +des.monster("fire giant") +des.monster("pit fiend") +des.monster({ id = "fire elemental", peaceful = 0 }) +des.monster({ id = "fire elemental", peaceful = 0 }) +-- +des.monster("barbed devil") +des.monster({ id = "salamander", peaceful = 0 }) +des.monster("steam vortex") +des.monster({ id = "salamander", peaceful = 0 }) +des.monster({ id = "salamander", peaceful = 0 }) + +des.object("boulder") +des.object("boulder") +des.object("boulder") +des.object("boulder") +des.object("boulder") + diff --git a/src/NetHack_3.7/dat/hellfill.lua b/src/NetHack_3.7/dat/hellfill.lua new file mode 100644 index 0000000..45f1f73 --- /dev/null +++ b/src/NetHack_3.7/dat/hellfill.lua @@ -0,0 +1,422 @@ +-- NetHack 3.7 hellfill.des $NHDT-Date: 1432512783 2015/05/25 00:13:03 $ $NHDT-Branch: master $:$NHDT-Revision: 1.25 $ +-- Copyright (c) 2022 by Pasi Kallinen +-- NetHack may be freely redistributed. See license for details. +-- +-- + +-- The "fill" level for gehennom. +-- +-- This level is used to fill out any levels not occupied by +-- specific levels. +-- + +function hellobjects() + local objclass = { "(", "/", "=", "+", ")", "[", "?", "*", "%" }; + shuffle(objclass); + + des.object(objclass[1]); + des.object(objclass[1]); + des.object(objclass[2]); + des.object(objclass[3]); + des.object(objclass[4]); + des.object(objclass[5]); + des.object() + des.object() +end + +-- + +function hellmonsters() + local monclass = { "V", "D", " ", "&", "Z" }; + shuffle(monclass); + + des.monster({ class = monclass[1], peaceful = 0 }); + des.monster({ class = monclass[1], peaceful = 0 }); + des.monster({ class = monclass[2], peaceful = 0 }); + des.monster({ class = monclass[2], peaceful = 0 }); + des.monster({ class = monclass[3], peaceful = 0 }); + des.monster({ class = monclass[4], peaceful = 0 }); + des.monster({ peaceful = 0 }); + des.monster({ class = "H", peaceful = 0 }); +end + +-- + +function helltraps() + for i = 1, 12 do + des.trap() + end +end + +-- + +function populatemaze() + for i = 1, math.random(8) + 11 do + if (percent(50)) then + des.object("*"); + else + des.object(); + end + end + + for i = 1, math.random(10) + 2 do + des.object("`"); + end + + for i = 1, math.random(3) do + des.monster({ id = "minotaur", peaceful = 0 }); + end + + for i = 1, math.random(5) + 7 do + des.monster({ peaceful = 0 }); + end + + for i = 1, math.random(6) + 7 do + des.gold(); + end + + for i = 1, math.random(6) + 7 do + des.trap(); + end +end + +-- + +function rnd_halign() + local aligns = { "half-left", "center", "half-right" }; + return aligns[math.random(1, #aligns)]; +end + +function rnd_valign() + local aligns = { "top", "center", "bottom" }; + return aligns[math.random(1, #aligns)]; +end + +-- the prefab maps must have contents-function, or populatemaze() +-- puts the stuff only inside the prefab map. +-- contains either a function, or an object with "repeatable" and "contents". +-- function alone implies not repeatable. +local hell_prefabs = { + { + repeatable = true, + contents = function () + des.map({ halign = rnd_halign(), valign = "center", map = [[ +...... +...... +...... +...... +...... +...... +...... +...... +...... +...... +...... +...... +...... +...... +...... +......]], contents = function() end }); + end + }, + { + repeatable = true, + contents = function () + des.map({ halign = rnd_halign(), valign = "center", map = [[ +xxxxxx.....xxxxxx +xxxx.........xxxx +xx.............xx +xx.............xx +x...............x +x...............x +................. +................. +................. +................. +................. +x...............x +x...............x +xx.............xx +xx.............xx +xxxx.........xxxx +xxxxxx.....xxxxxx +]], contents = function() end }); + end + }, + function (coldhell) + des.map({ halign = rnd_halign(), valign = rnd_valign(), map = [[ +xxxxxx.xxxxxx +xLLLLLLLLLLLx +xL---------Lx +xL|.......|Lx +xL|.......|Lx +.L|.......|L. +xL|.......|Lx +xL|.......|Lx +xL---------Lx +xLLLLLLLLLLLx +xxxxxx.xxxxxx +]], contents = function() + des.non_diggable(selection.area(2,2, 10,8)); + des.region(selection.area(4,4, 8,6), "lit"); + des.exclusion({ type = "teleport", region = { 2,2, 10,8 } }); + if (coldhell) then + des.replace_terrain({ region = {1,1, 11,9}, fromterrain="L", toterrain="P" }); + end + local dblocs = { + { x = 1, y = 5, dir="east", state="closed" }, + { x = 11, y = 5, dir="west", state="closed" }, + { x = 6, y = 1, dir="south", state="closed" }, + { x = 6, y = 9, dir="north", state="closed" } + } + shuffle(dblocs); + for i = 1, math.random(1, #dblocs) do + des.drawbridge(dblocs[i]); + end + local mons = { "H", "T", "@" }; + shuffle(mons); + for i = 1, 3 + math.random(1, 5) do + des.monster(mons[1], 6, 5); + end + end }); + end, + { + repeatable = true, + contents = function () + des.map({ halign = "center", valign = "center", map = [[ +.............................................................. +.............................................................. +.............................................................. +.............................................................. +..............................................................]], contents = function() end }); + end + }, + { + repeatable = true, + contents = function () + des.map({ halign = rnd_halign(), valign = rnd_valign(), lit = true, map = [[ +x.....x +....... +....... +....... +....... +....... +x.....x]], contents = function() end }); + end + }, + function () + des.map({ halign = rnd_halign(), valign = rnd_valign(), map = [[ +BBBBBBB +B.....B +B.....B +B.....B +B.....B +B.....B +BBBBBBB]], contents = function() + des.region({ region={2,2, 2,2}, type="temple", filled=1, irregular=1 }); + des.altar({ x=3, y=3, align="noalign", type=percent(75) and "altar" or "shrine" }); + end }); + end, + function () + des.map({ halign = rnd_halign(), valign = rnd_valign(), map = [[ +.......... +.......... +.......... +...FFFF... +...F..F... +...F..F... +...FFFF... +.......... +.......... +..........]], contents = function() + des.exclusion({ type = "teleport", region = { 4,4, 5,5 } }); + local mons = { "Angel", "D", "H", "L" }; + des.monster(mons[math.random(1, #mons)], 4,4); + end }); + end, + + function () + des.map({ halign = rnd_halign(), valign = rnd_valign(), map = [[ +......... +.}}}}}}}. +.}}---}}. +.}--.--}. +.}|...|}. +.}--.--}. +.}}---}}. +.}}}}}}}. +......... +]], contents = function(rm) + des.exclusion({ type = "teleport", region = { 3,3, 5,5 } }); + des.monster("L",04,04) + end }) + end, + function () + local mapstr = percent(30) and [[ +..... +.LLL. +.LZL. +.LLL. +.....]] or [[ +..... +.PPP. +.PWP. +.PPP. +.....]]; + for dx = 1, 5 do + des.map({ x = dx*14 - 4, y = math.random(3, 15), + map = mapstr, contents = function() end }) + end + end, + { + repeatable = true, + contents = function () + local mapstr = [[ +... +... +... +... +... +... +... +... +... +... +... +... +... +... +... +... +...]]; + for dx = 1, 3 do + des.map({ x = math.random(3, 75), y = 3, + map = mapstr, contents = function() end }) + end + end + }, +}; + +function rnd_hell_prefab(coldhell) + local dorepeat = true; + local nloops = 0; + repeat + nloops = nloops + 1; + local pf = math.random(1, #hell_prefabs); + local fab = hell_prefabs[pf]; + local fabtype = type(fab); + + if (fabtype == "function") then + fab(coldhell); + dorepeat = false; + elseif (fabtype == "table") then + fab.contents(coldhell); + dorepeat = not (fab.repeatable and math.random(0, nloops * 2) == 0); + end + until ((not dorepeat) or (nloops > 5)); +end + +hells = { + -- 1: "mines" style with lava + function () + des.level_init({ style = "solidfill", fg = " ", lit = 0 }); + des.level_flags("mazelevel", "noflip"); + des.level_init({ style="mines", fg=".", smoothed=true ,joined=true, lit=0, walled=true }); + des.replace_terrain({ fromterrain = " ", toterrain = "L" }); + des.replace_terrain({ fromterrain = ".", toterrain = "L", chance = 5 }); + des.replace_terrain({ mapfragment = [[w]], toterrain = "L", chance = 20 }); + des.replace_terrain({ mapfragment = [[w]], toterrain = ".", chance = 15 }); + end, + + -- 2: mazes like original, with some hell_tweaks + function () + des.level_init({ style = "solidfill", fg = " ", lit = 0 }); + des.level_flags("mazelevel", "noflip"); + des.level_init({ style = "mazegrid", bg = "-" }); + des.mazewalk({ coord = {01,10}, dir = "east", stocked = false}); + local tmpbounds = selection.match("-"); + local bnds = tmpbounds:bounds(); + local protected_area = selection.fillrect(bnds.lx, bnds.ly + 1, bnds.hx - 2, bnds.hy - 1); + hell_tweaks(protected_area:negate()); + if (percent(25)) then + rnd_hell_prefab(false); + end + end, + + -- 3: mazes, style 1: wall thick = 1, random wid corr + function () + des.level_init({ style = "solidfill", fg = " ", lit = 0 }); + des.level_flags("mazelevel", "noflip"); + des.level_init({ style = "maze", wallthick = 1 }); + end, + + -- 4: mazes, style 2: replace wall with iron bars or lava + function () + local cwid = math.random(4); + des.level_init({ style = "solidfill", fg = " ", lit = 0 }); + des.level_flags("mazelevel", "noflip"); + des.level_init({ style = "maze", wallthick = 1, corrwid = cwid }); + local outside_walls = selection.match(" "); + local wallterrain = { "F", "L" }; + shuffle(wallterrain); + des.replace_terrain({ mapfragment = "w", toterrain = wallterrain[1] }); + if (cwid == 1) then + if (wallterrain[1] == "F" and percent(80)) then + -- replace some horizontal iron bars walls with floor + des.replace_terrain({ mapfragment = ".\nF\n.", toterrain = ".", chance = 25 * math.random(4) }); + elseif (percent(25)) then + rnd_hell_prefab(false); + end + end + des.terrain(outside_walls, " "); -- return the outside back to solid wall + end, + + -- 5: mazes, thick walls, occasionally lava instead of walls + function () + des.level_init({ style = "solidfill", fg = " ", lit = 0 }); + des.level_flags("mazelevel", "noflip"); + des.level_init({ style = "maze", wallthick = 1 + math.random(2), corrwid = math.random(2) }); + if (percent(50)) then + local outside_walls = selection.match(" "); + des.replace_terrain({ mapfragment = "w", toterrain = "L" }); + des.terrain(outside_walls, " "); -- return the outside back to solid wall + end + end, + + -- 6: cold maze, with ice and water + function () + local cwid = math.random(4); + des.level_init({ style = "solidfill", fg = " ", lit = 0 }); + des.level_flags("mazelevel", "noflip", "cold"); + des.level_init({ style = "maze", wallthick = 1, corrwid = cwid }); + local outside_walls = selection.match(" "); + local icey = selection.negate():percentage(10):grow():filter_mapchar("."); + des.terrain(icey, "I"); + if (cwid > 1) then + -- turn some ice into wall of water + des.terrain(icey:percentage(1), "W"); + end + des.terrain(icey:percentage(5), "P"); + if (percent(25)) then + des.terrain(selection.match("w"), "W"); -- walls of water + end + if (cwid == 1 and percent(25)) then + rnd_hell_prefab(true); + end + des.terrain(outside_walls, " "); -- return the outside back to solid wall + end, +}; + +local hellno = math.random(1, #hells); +hells[hellno](); + +-- + +des.stair("up") +if (u.invocation_level) then + des.trap("vibrating square"); +else + des.stair("down") +end + +populatemaze(); diff --git a/src/NetHack_3.7/dat/help b/src/NetHack_3.7/dat/help new file mode 100644 index 0000000..eb500b0 --- /dev/null +++ b/src/NetHack_3.7/dat/help @@ -0,0 +1,214 @@ + Welcome to NetHack! ( description of version 3.6 ) + + NetHack is a Dungeons and Dragons like game where you (the adventurer) +descend into the depths of the dungeon in search of the Amulet of Yendor, +reputed to be hidden somewhere below the twentieth level. You begin your +adventure with a pet that can help you in many ways, and can be trained +to do all sorts of things. On the way you will find useful (or useless) +items, quite possibly with magic properties, and assorted monsters. You can +attack a monster by trying to move onto the space a monster is on (but often +it is much wiser to leave it alone). + + Unlike most adventure games, which give you a verbal description of +your location, NetHack gives you a visual image of the dungeon level you are +on. + + NetHack uses the following symbols: + + - and | The walls of a room, possibly also open doors or a grave. + . The floor of a room or a doorway. + # A corridor, or iron bars, or a tree, or possibly a kitchen + sink (if your dungeon has sinks), or a drawbridge. + > Stairs down: a way to the next level. + < Stairs up: a way to the previous level. + @ You (usually), or another human. + ) A weapon of some sort. + [ A suit or piece of armor. + % Something edible (not necessarily healthy). + / A wand. + = A ring. + ? A scroll. + ! A potion. + ( Some other useful object (pick-axe, key, lamp...) + $ A pile of gold. + * A gem or rock (possibly valuable, possibly worthless). + + A closed door, or a spellbook containing a spell + you can learn. + ^ A trap (once you detect it). + " An amulet, or a spider web. + 0 An iron ball. + _ An altar, or an iron chain. + { A fountain. + } A pool of water or moat or a pool of lava. + \ An opulent throne. + ` A boulder or statue. + A to Z, a to z, and several others: Monsters. + I Invisible or unseen monster's last known location + + You can find out what a symbol represents by typing + '/' and following the directions to move the cursor + to the symbol in question. For instance, a 'd' may + turn out to be a dog. + + +y k u 7 8 9 Move commands: + \|/ \|/ yuhjklbn: go one step in specified direction +h-.-l 4-.-6 YUHJKLBN: go in specified direction until you + /|\ /|\ hit a wall or run into something +b j n 1 2 3 g: run in direction until something + numberpad interesting is seen + G, same, except a branching corridor isn't + < up ^: considered interesting (the ^ in this + case means the Control key, not a caret) + > down m: move without picking up objects + F: fight even if you don't sense a monster + If the number_pad option is set, the number keys move instead. + Depending on the platform, Shift number (on the numberpad), + Meta number, or Alt number will invoke the YUHJKLBN commands. + Control may or may not work when number_pad is enabled, + depending on the platform's capabilities. + Digit '5' acts as 'G' prefix, unless number_pad is set to 2 + in which case it acts as 'g' instead. + If number_pad is set to 3, the roles of 1,2,3 and 7,8,9 are + reversed; when set to 4, behaves same as 3 combined with 2. + If number_pad is set to -1, alphabetic movement commands are + used but 'y' and 'z' are swapped. + +Commands: + NetHack knows the following commands: + ? Help menu. + / What-is, tell what a symbol represents. You may choose to + specify a location or give a symbol argument. Enabling the + autodescribe option will give information about the symbol + at each location you move the cursor onto. + & Tell what a command does. + < Go up a staircase (if you are standing on it). + > Go down a staircase (if you are standing on it). + . Rest, do nothing for one turn. + _ Travel via a shortest-path algorithm to a point on the map. + a Apply (use) a tool (pick-axe, key, lamp...). + A Remove all armor. + ^A Redo the previous command. + c Close a door. + C Call (name) monster, individual object, or type of object. + d Drop something. d7a: drop seven items of object a. + D Drop multiple items. This command is implemented in two + different ways. One way is: + "D" displays a list of all of your items, from which you can + pick and choose what to drop. A "+" next to an item means + that it will be dropped, a "-" means that it will not be + dropped. Toggle an item to be selected/deselected by typing + the letter adjacent to its description. Select all items + with "+", deselect all items with "=". The moves + you from one page of the listing to the next. + The other way is: + "D" will ask the question "What kinds of things do you want + to drop? [!%= au]". You should type zero or more object + symbols possibly followed by 'a' and/or 'u'. + Da - drop all objects, without asking for confirmation. + Du - drop only unpaid objects (when in a shop). + D%u - drop only unpaid food. + ^D Kick (for doors, usually). + e Eat food. + E Engrave a message on the floor. + E- - write in the dust with your fingers. + f Fire ammunition from quiver. + F Followed by direction, fight a monster (even if you don't + sense it). + i Display your inventory. + I Display selected parts of your inventory, as in + I* - list all gems in inventory. + Iu - list all unpaid items. + Ix - list all used up items that are on your shopping bill. + I$ - count your money. + o Open a door. + O Review current options and possibly change them. + A menu displaying the option settings will be displayed + and most can be changed by simply selecting their entry. + Options are usually set before the game with NETHACKOPTIONS + environment variable or via a configuration file (defaults.nh, + NetHack Defaults, nethack.cnf, ~/.nethackrc, etc.) rather + than with the 'O' command. + p Pay your shopping bill. + P Put on an accessory (ring, amulet, etc). + ^P Repeat last message (subsequent ^P's repeat earlier messages). + The behavior can be varied via the msg_window option. + q Drink (quaff) something (potion, water, etc). + Q Select ammunition for quiver. + #quit Exit the program without saving the current game. + r Read a scroll or spellbook. + R Remove an accessory (ring, amulet, etc). + ^R Redraw the screen. + s Search for secret doors and traps around you. + S Save the game. Also exits the program. + [To restore, just play again and use the same character name.] + [There is no "save current data but keep playing" capability.] + t Throw an object or shoot a projectile. + T Take off armor. + ^T Teleport, if you are able. + v Displays the version number. + V Display a longer identification of the version, including the + history of the game. + w Wield weapon. w- means wield nothing, use bare hands. + W Wear armor. + x Swap wielded and secondary weapons. + X Toggle two-weapon combat. + ^X Show your attributes. + #explore Switch to Explore Mode (aka Discovery Mode) where dying and + deleting the save file during restore can both be overridden. + z Zap a wand. (Use y instead of z if number_pad is -1.) + Z Cast a spell. (Use Y instead of Z if number_pad is -1.) + ^Z Suspend the game. (^Y instead of ^Z if number_pad is -1.) + [To resume, use the shell command 'fg'.] + : Look at what is here. + ; Look at what is somewhere else. + , Pick up some things. + @ Toggle the pickup option. + ^ Ask for the type of a trap you found earlier. + ) Tell what weapon you are wielding. + [ Tell what armor you are wearing. + = Tell what rings you are wearing. + " Tell what amulet you are wearing. + ( Tell what tools you are using. + * Tell what equipment you are using; combines the preceding five. + $ Count your gold pieces. + + List the spells you know; also rearrange them if desired. + \ Show what types of objects have been discovered. + ` Show discovered types for one class of objects. + ! Escape to a shell, if supported in your version and OS. + [To resume play, terminate the shell subprocess via 'exit'.] + # Introduces one of the "extended" commands. To get a list of + the commands you can use with "#" type "#?". The extended + commands you can use depends upon what options the game was + compiled with, along with your class and what type of monster + you most closely resemble at a given moment. If your keyboard + has a meta key (which, when pressed in combination with another + key, modifies it by setting the 'meta' (8th, or 'high') bit), + these extended commands can be invoked by meta-ing the first + letter of the command. An alt key may have a similar effect. + + If the "number_pad" option is on, some additional letter commands + are available: + + h displays the help menu, like '?' + j Jump to another location. + k Kick (for doors, usually). + l Loot a box on the floor. + n followed by number of times to repeat the next command. + N Name a monster, an individual object, or a type of object. + u Untrap a trapped object or door. + + You can put a number before a command to repeat it that many times, + as in "40." or "20s". If you have the number_pad option set, you + must type 'n' to prefix the count, as in "n40." or "n20s". + + + Some information is displayed on the bottom line or perhaps in a + box, depending on the platform you are using. You see your + attributes, your alignment, what dungeon level you are on, how many + hit points you have now (and will have when fully recovered), what + your armor class is (the lower the better), your experience level, + and the state of your stomach. Optionally, you may or may not see + other information such as spell points, how much gold you have, etc. + + Have Fun, and Happy Hacking! diff --git a/src/NetHack_3.7/dat/hh b/src/NetHack_3.7/dat/hh new file mode 100644 index 0000000..951e914 --- /dev/null +++ b/src/NetHack_3.7/dat/hh @@ -0,0 +1,160 @@ +y k u 7 8 9 Move commands: + \|/ \|/ yuhjklbn: go one step in specified direction +h-.-l 4-.-6 YUHJKLBN: go in specified direction until you + /|\ /|\ hit a wall or run into something +b j n 1 2 3 g: run in direction until something + numberpad interesting is seen + G, same, except a branching corridor isn't + < up ^: considered interesting (the ^ in this + case means the Control key, not a caret) + > down m: move without picking up objects/fighting + F: fight even if you don't sense a monster + If the number_pad option is set, the digit keys move instead. + Depending on the platform, Shift digit (on the numberpad), + Meta digit, or Alt digit will invoke the YUHJKLBN commands. + Control may or may not work when number_pad is enabled, + depending on the platform's capabilities. + Digit '5' acts as 'G' prefix, unless number_pad is set to 2 + in which case it acts as 'g' instead. + If number_pad is set to 3, the roles of 1,2,3 and 7,8,9 are + reversed; when set to 4, behaves same as 3 combined with 2. + If number_pad is set to -1, alphabetic movement commands are + used but 'y' and 'z' are swapped. + +General commands: +? help display one of several informative texts +#quit quit end the game without saving current game +S save save the game (to be continued later) and exit + [to restore, play again and use the same character name; + use #quit to quit without saving] +! sh escape to some SHELL (if allowed; 'exit' to resume play) +^Z suspend suspend the game (independent of your current suspend char) + [on UNIX(tm)-based systems, use the 'fg' command to resume] +O options set options +/ what-is tell what a map symbol represents +\ known display list of what's been discovered +| perminv interact with persistent inventory window instead of hero+map +v version display version number +V history display game history +^A again redo the previous command +^R redraw redraw the screen +^P prevmsg repeat previous message (consecutive ^P's repeat earlier ones) +# introduces an extended command (#? for a list of them) +& what-does describe the command a keystroke invokes + +Control characters are depicted as '^' followed by a letter. Depress Ctrl +or Control like a shift key then type the letter. Control characters are +case-insensitive; ^D is the same as ^d, Ctrl+d is same as Ctrl+Shift+d. +There are a few non-letter control characters; nethack uses ^[ as a synonym +for Escape (or vice versa) and ^_ for #retravel but none of the others. + +Game commands: +^D kick kick (a door, or something else) +^T Tport teleport (if you can) +^X show show your attributes +a apply apply or use a tool (pick-axe, key, camera, etc.) +A takeoffall choose multiple items of armor, accessories, and weapons + to take off, remove, unwield (uses same amount of game time + as removing them individually with T,R,w- would take) +c close close a door +C call name a monster, an individual object, or a type of object +d drop drop an object. d7a: drop seven items of object 'a' +D Drop drop selected types of objects +e eat eat something +E engrave write a message in the dust on the floor (E- use fingers) +f fire fire ammunition from quiver +F fight followed by direction, fight a monster +i invent list your inventory (all objects you are carrying) +I Invent list selected parts of your inventory; for example + I( list all tools, or I" list all amulets + IB list all items known to be blessed + IU uncursed, or IC cursed, or IX unknown bless state + Iu when in a shop, list unpaid objects being carried + Ix in a shop, list any fees and used-up shop-owned items +o open open a door +p pay pay your bill (in a shop) +P puton put on an accessory (ring, amulet, etc; can be used to wear + armor too, but armor items aren't listed as likely candidates) +q quaff drink something (potion, water, etc) +Q quiver select ammunition for quiver (use '#quit' to quit) +r read read a scroll or spellbook +R remove remove an accessory (ring, amulet, etc; can be used to take + off armor too) +s search search for secret doors, hidden traps and monsters +t throw throw or shoot a weapon +T takeoff take off some armor; can be used to remove accessories too, + but those aren't listed as likely candidates) +w wield wield a weapon (w- wield nothing to unwield current weapon) +W wear wear an item of armor; can be used to put on accessories too, + but those aren't listed as likely candidates) +x xchange swap wielded and secondary weapons +X twoweapon toggle two-weapon combat if role allows that +z zap zap a wand (use y instead of z if number_pad is -1) +Z Zap cast a spell (use Y instead of Z if number_pad is -1) +< up go up the stairs +> down go down the stairs +^ trap_id identify a previously found trap +),[,=,",( show current items of specified symbol in use +* show combination of ),[,=,",( all at once +$ gold count your gold ++ spells list the spells you know; also rearrange them if desired +` classkn display known items for one class of objects +_ travel move via a shortest-path algorithm to a point on the map +^_ retravel resume travelling toward previously specified destination +. rest wait a moment +, pickup pick up all you can carry +@ toggle "pickup" (auto pickup) option on and off +: look look at what is here +; farlook look at what is somewhere else by selecting a map location + (for a monster on top of one or more objects, only describes + that monster; for a pile of objects, only describes top one) + +Keyboards that have a meta key (some use Alt for that, so typing Alt as a +shift plus 'e' would generate 'M-e') can also use these extended commands +via the meta modifier as an alternative to using the # prefix. Unlike +control characters, meta characters are case-sensitive so M-a is different +from M-A. Type the latter with two keys used as shifts, Meta+Shift+a. + +M-? display extended command help (if the platform allows this) +M-2 twoweapon toggle two-weapon combat (unless number_pad is enabled) +M-a adjust adjust inventory letters +M-A annotate add a one-line note to the current dungeon level (see M-O) +M-c chat talk to someone +M-C conduct view optional challenges +M-d dip dip an object into something +M-e enhance show weapon and spell skills, can improve them if eligible +M-f force force a lock +M-g genocided list genocided and extinct monster types, if any +M-i invoke invoke an object's special powers +M-j jump jump to another location +M-l loot loot a box on the floor +M-m monster when polymorphed, use monster's special ability +M-n name name a monster, an individual object, or a type of object +M-N name synonym for M-n (both are the same as C) +M-o offer offer a sacrifice to the gods +M-O overview display information about visited levels and annotations +M-p pray pray to the gods for help +M-q quit stop playing without saving game (use S to save and exit) +M-r rub rub a lamp or a stone +M-R ride mount or dismount saddled steed +M-s sit sit down +M-t turn turn undead if role allows that +M-T tip upend a container to dump out its contents +M-u untrap untrap something +M-V vanquished list number and type of vanquished monsters +M-v version print compile time options for this version +M-w wipe wipe off your face +M-X explore switch from regular play to non-scoring explore mode + +If the 'number_pad' option is on, keys usually used for movement can be +used for various commands: + +n followed by number of times to repeat the next command +h help display one of several informative texts, like '?' +j jump jump to another location +k kick kick something (usually a door) +l loot loot a box on the floor +N name name an item or type of object +u untrap untrap something (usually a trapped object) + +Additional commands are available in debug mode (also known as wizard mode). diff --git a/src/NetHack_3.7/dat/history b/src/NetHack_3.7/dat/history new file mode 100644 index 0000000..8617e2f --- /dev/null +++ b/src/NetHack_3.7/dat/history @@ -0,0 +1,333 @@ +NetHack History file for release 3.7 + +Behold, mortal, the origins of NetHack... + +Jay Fenlason wrote the original Hack, with help from Kenny Woodland, +Mike Thome, and Jon Payne. + +Andries Brouwer did a major re-write while at Stichting Mathematisch Centrum +(now Centrum Wiskunde & Informatica), transforming Hack into a very different +game. He published the Hack source code for use on UNIX(tm) systems by +posting that to Usenet newsgroup net.sources (later renamed comp.sources) +releasing version 1.0 in December of 1984, then versions 1.0.1, 1.0.2, and +finally 1.0.3 in July of 1985. Usenet newsgroup net.games.hack (later +renamed rec.games.hack, eventually replaced by rec.games.roguelike.nethack) +was created for discussing it. + +Don G. Kneller ported Hack 1.0.3 to Microsoft(tm) C and MS-DOS(tm), producing +PC HACK 1.01e, added support for DEC Rainbow graphics in version 1.03g, and +went on to produce at least four more versions (3.0, 3.2, 3.51, and 3.6; +note that these are old Hack version numbers, not contemporary NetHack ones). + +R. Black ported PC HACK 3.51 to Lattice(tm) C and the Atari 520/1040ST, +producing ST Hack 1.03. + +Mike Stephenson merged these various versions back together, incorporating +many of the added features, and produced NetHack version 1.4 in 1987. He +then coordinated a cast of thousands in enhancing and debugging NetHack 1.4 +and released NetHack versions 2.2 and 2.3. Like Hack, they were released by +posting their source code to Usenet where they remained available in various +archives accessible via ftp and uucp after expiring from the newsgroup. + +Later, Mike coordinated a major re-write of the game, heading a team which +included Ken Arromdee, Jean-Christophe Collet, Steve Creps, Eric Hendrickson, +Izchak Miller, Eric S. Raymond, John Rupley, Mike Threepoint, and Janet Walz, +to produce NetHack 3.0c. + +NetHack 3.0 was ported to the Atari by Eric R. Smith, to OS/2 by Timo +Hakulinen, and to VMS by David Gentzel. The three of them and Kevin Darcy +later joined the main NetHack Development Team to produce subsequent +revisions of 3.0. + +Olaf Seibert ported NetHack 2.3 and 3.0 to the Amiga. Norm Meluch, Stephen +Spackman and Pierre Martineau designed overlay code for PC NetHack 3.0. +Johnny Lee ported NetHack 3.0 to the Macintosh. Along with various other +Dungeoneers, they continued to enhance the PC, Macintosh, and Amiga ports +through the later revisions of 3.0. + +Version 3.0 went through ten relatively rapidly released "patch-level" +revisions. Versions at the time were known as 3.0 for the base release +and variously as "3.0a" through "3.0j", "3.0 patchlevel 1" through +"3.0 patchlevel 10", or "3.0pl1" through "3.0pl10" rather than 3.0.0 and +3.0.1 through 3.0.10; the three component numbering scheme began to be used +with 3.1.0. + +Headed by Mike Stephenson and coordinated by Izchak Miller and Janet Walz, +the NetHack Development Team which now included Ken Arromdee, David Cohrs, +Jean-Christophe Collet, Kevin Darcy, Matt Day, Timo Hakulinen, Steve Linhart, +Dean Luick, Pat Rankin, Eric Raymond, and Eric Smith undertook a radical +revision of 3.0. They re-structured the game's design, and re-wrote major +parts of the code. They added multiple dungeons, a new display, special +individual character quests, a new endgame and many other new features, and +produced NetHack 3.1. Version 3.1.0 was released in January of 1993. + +Ken Lorber, Gregg Wonderly and Greg Olson, with help from Richard Addison, +Mike Passaretti, and Olaf Seibert, developed NetHack 3.1 for the Amiga. + +Norm Meluch and Kevin Smolkowski, with help from Carl Schelin, Stephen +Spackman, Steve VanDevender, and Paul Winner, ported NetHack 3.1 to the PC. + +Jon W{tte and Hao-yang Wang, with help from Ross Brown, Mike Engber, David +Hairston, Michael Hamel, Jonathan Handler, Johnny Lee, Tim Lennan, Rob Menke, +and Andy Swanson, developed NetHack 3.1 for the Macintosh, porting it for +MPW. Building on their development, Bart House added a Think C port. + +Timo Hakulinen ported NetHack 3.1 to OS/2. Eric Smith ported NetHack 3.1 +to the Atari. Pat Rankin, with help from Joshua Delahunty, was responsible +for the VMS version of NetHack 3.1. Michael Allison ported NetHack 3.1 to +Windows NT. + +Dean Luick, with help from David Cohrs, developed NetHack 3.1 for X11. +It drew the map as text rather than graphically but included nh10.bdf, an +optionally used custom X11 font which has tiny images in place of letters and +punctuation, a precursor of tiles. Those images don't extend to individual +monster and object types, just replacements for monster and object classes +(so one custom image for all "a" insects and another for all "[" armor and +so forth, not separate images for beetles and ants or for cloaks and boots). + +Warwick Allison wrote a graphically displayed version of NetHack for the +Atari where the tiny pictures were described as "icons" and were distinct +for specific types of monsters and objects rather than just their classes. +He contributed them to the NetHack Development Team which rechristened them +"tiles", original usage which has subsequently been picked up by various +other games. NetHack's tiles support was then implemented on other platforms +(initially MS-DOS but eventually Windows, Qt, and X11 too). + +The 3.2 NetHack Development Team, comprised of Michael Allison, Ken Arromdee, +David Cohrs, Jessie Collet, Steve Creps, Kevin Darcy, Timo Hakulinen, Steve +Linhart, Dean Luick, Pat Rankin, Eric Smith, Mike Stephenson, Janet Walz, +and Paul Winner, released version 3.2.0 in April of 1996. + +Version 3.2 marked the tenth anniversary of the formation of the development +team. In a testament to their dedication to the game, all thirteen members +of the original NetHack Development Team remained on the team at the start +of work on that release. During the interval between the release of 3.1.3 +and 3.2.0, one of the founding members of the NetHack Development Team, +Dr. Izchak Miller, was diagnosed with cancer and passed away. That release +of the game was dedicated to him by the development and porting teams. + +Version 3.2 proved to be more stable than previous versions. Many bugs +were fixed, abuses eliminated, and game features tuned for better game +play. + +During the lifespan of NetHack 3.1 and 3.2, several enthusiasts of the game +added their own modifications to the game and made these "variants" publicly +available: + +Tom Proudfoot and Yuval Oren created NetHack++, which was quickly renamed +NetHack-- when some people incorrectly assumed that it was a conversion +of the C source code to C++. Working independently, Stephen White wrote +NetHack Plus. Tom Proudfoot later merged NetHack Plus and his own NetHack-- +to produce SLASH. Larry Stewart-Zerba and Warwick Allison improved the +spell casting system with the Wizard Patch. Warwick Allison also ported +NetHack to use the Qt interface. + +Warren Cheung combined SLASH with the Wizard Patch to produce Slash'EM, and +with the help of Kevin Hugo, added more features. Kevin later joined the +NetHack Development Team and incorporated the best of these ideas into +NetHack 3.3. + +The final update to 3.2 was the bug fix release 3.2.3, which was released +simultaneously with 3.3.0 in December 1999 just in time for the Year 2000. +Because of the newer version, 3.2.3 was released as a source code patch only, +without any ready-to-play distribution for systems that usually had such. + +(To anyone considering resurrecting an old version: all versions before +3.2.3 had a Y2K bug. The high scores file and the log file contained dates +which were formatted using a two-digit year, and 1999's year 99 was followed +by 2000's year 100. That got written out successfully but it unintentionally +introduced an extra column in the file layout which prevented score entries +from being read back in correctly, interfering with insertion of new high +scores and with retrieval of old character names to use for random ghost and +statue names in the current game.) + +The 3.3 NetHack Development Team, consisting of Michael Allison, Ken Arromdee, +David Cohrs, Jessie Collet, Steve Creps, Kevin Darcy, Timo Hakulinen, +Kevin Hugo, Steve Linhart, Ken Lorber, Dean Luick, Pat Rankin, Eric Smith, +Mike Stephenson, Janet Walz, and Paul Winner, released 3.3.0 in +December 1999 and 3.3.1 in August of 2000. + +Version 3.3 offered many firsts. It was the first version to separate race +and profession. The Elf class was removed in preference to an elf race, +and the races of dwarves, gnomes, and orcs made their first appearance in +the game alongside the familiar human race. Monk and Ranger roles joined +Archeologists, Barbarians, Cavemen, Healers, Knights, Priests, Rogues, +Samurai, Tourists, Valkyries and of course, Wizards. It was also the first +version to allow you to ride a steed, and was the first version to have a +publicly available web-site listing all the bugs that had been discovered. +Despite that constantly growing bug list, 3.3 proved stable enough to last +for more than a year and a half. + +The 3.4 NetHack Development Team initially consisted of Michael Allison, +Ken Arromdee, David Cohrs, Jessie Collet, Kevin Hugo, Ken Lorber, Dean Luick, +Pat Rankin, Mike Stephenson, Janet Walz, and Paul Winner, with Warwick Allison +joining just before the release of NetHack 3.4.0 in March 2002. + +As with version 3.3, various people contributed to the game as a whole as +well as supporting ports on the different platforms that NetHack runs on: + +Pat Rankin maintained 3.4 for VMS. + +Michael Allison maintained NetHack 3.4 for the MS-DOS platform. +Paul Winner and Yitzhak Sapir provided encouragement. + +Dean Luick, Mark Modrall, and Kevin Hugo maintained and enhanced the +Macintosh port of 3.4. + +Michael Allison, David Cohrs, Alex Kompel, Dion Nicolaas, and Yitzhak Sapir +maintained and enhanced 3.4 for the Microsoft Windows platform. Alex Kompel +contributed a new graphical interface for the Windows port. Alex Kompel also +contributed a Windows CE port for 3.4.1. + +Ron Van Iwaarden maintained 3.4 for OS/2. + +Janne Salmijarvi and Teemu Suikki maintained and enhanced the +Amiga port of 3.4 after Janne Salmijarvi resurrected it for 3.3.1. + +Christian "Marvin" Bressler maintained 3.4 for the Atari after he +resurrected it for 3.3.1. + +The release of NetHack 3.4.3 in December 2003 marked the beginning of a +long release hiatus. 3.4.3 proved to be a remarkably stable version that +provided continued enjoyment by the community for more than a decade. The +NetHack Development Team slowly and quietly continued to work on the game +behind the scenes during the tenure of 3.4.3. It was during that same +period that several new variants emerged within the NetHack community. +Notably sporkhack by Derek S. Ray, unnethack by Patric Mueller, nitrohack +and its successors originally by Daniel Thaler and then by Alex Smith, and +Dynahack by Tung Nguyen. Some of those variants continue to be developed, +maintained, and enjoyed by the community to this day. + +In September 2014, an interim snapshot of the code under development was +released publicly by other parties. Since that code was a work-in-progress +and had not gone through the process of debugging it as a suitable release, +it was decided that the version numbers present on that code snapshot would +be retired and never used in an official NetHack release. An announcement +was posted on the NetHack Development Team's official nethack.org website +to that effect, stating that there would never be a 3.4.4, 3.5, or 3.5.0 +official release version. + +In January 2015, preparation began for the release of NetHack 3.6. + +At the beginning of development for what would eventually get released +as 3.6.0, the NetHack Development Team consisted of Warwick Allison, +Michael Allison, Ken Arromdee, David Cohrs, Jessie Collet, Ken Lorber, +Dean Luick, Pat Rankin, Mike Stephenson, Janet Walz, and Paul Winner. +In early 2015, ahead of the release of 3.6.0, new members Sean Hunt, +Pasi Kallinen, and Derek S. Ray joined the NetHack Development Team. + +Near the end of the development of 3.6.0, one of the significant inspirations +for many of the humorous and fun features found in the game, author +Terry Pratchett, passed away. NetHack 3.6.0 introduced a tribute to him. + +3.6.0 was released in December 2015, and merged work done by the development +team since the release of 3.4.3 with some of the beloved community patches. +Many bugs were fixed and some code was restructured. + +The NetHack Development Team, as well as Steve VanDevender and +Kevin Smolkowski, ensured that NetHack 3.6 continued to operate on various +UNIX flavors and maintained the X11 interface. + +Ken Lorber, Haoyang Wang, Pat Rankin, and Dean Luick maintained the port +of NetHack 3.6 for Mac OSX. + +Michael Allison, David Cohrs, Bart House, Pasi Kallinen, Alex Kompel, +Dion Nicolaas, Derek S. Ray and Yitzhak Sapir maintained the port of +NetHack 3.6 for Microsoft Windows. + +Pat Rankin attempted to keep the VMS port running for NetHack 3.6, +hindered by limited access. Kevin Smolkowski has updated and tested it +for the most recent version of OpenVMS (V8.4 as of this writing) on Alpha +and Integrity (aka Itanium aka IA64) but not VAX. + +Ray Chason resurrected the MS-DOS port for 3.6 and contributed the +necessary updates to the community at large. + +In late April 2018, several hundred bug fixes for 3.6.0 and some new +features were assembled and released as NetHack 3.6.1. +The NetHack Development Team at the time of release of 3.6.1 consisted of +Warwick Allison, Michael Allison, Ken Arromdee, David Cohrs, Jessie Collet, +Pasi Kallinen, Ken Lorber, Dean Luick, Patric Mueller, Pat Rankin, +Derek S. Ray, Alex Smith, Mike Stephenson, Janet Walz, and Paul Winner. + +In early May 2019, another 320 bug fixes along with some enhancements and +the adopted curses window port, were released as 3.6.2. + +Bart House, who had contributed to the game as a porting team participant +for decades, joined the NetHack Development Team in late May 2019. + +NetHack 3.6.3 was released on December 5, 2019 containing over 190 bug +fixes to NetHack 3.6.2. + +NetHack 3.6.4 was released on December 18, 2019 containing a security +fix and a few bug fixes. + +NetHack 3.6.5 was released on January 27, 2020 containing some security fixes +and a small number of bug fixes. + +NetHack 3.6.6 was released on March 8, 2020 containing a security fix and +some bug fixes. + +NetHack 3.6.7 was released on February 16, 2023 containing a security fix and +some bug fixes. + +The official NetHack web site is maintained by Ken Lorber at +https://www.nethack.org/. + +On behalf of the NetHack community, thank you very much once again to +M. Drew Streib and Pasi Kallinen for providing a public NetHack server +at nethack.alt.org. Thanks to Keith Simpson and Andy Thomson for +hardfought.org. Thanks to all those unnamed dungeoneers who invest their +time and effort into annual NetHack tournaments such as Junethack, +The November NetHack Tournament, and in days past, devnull.net (gone for +now, but not forgotten). + + - - - - - - - - - - + +From time to time, some depraved individual out there in netland sends a +particularly intriguing modification to help out with the game. The +NetHack Development Team sometimes makes note of the names of the worst +of these miscreants in this, the list of Dungeoneers: + + Adam Aronow J. Ali Harlow Mikko Juola + Alex Kompel Janet Walz Nathan Eady + Alex Smith Janne Salmijarvi Norm Meluch + Andreas Dorn Jean-Christophe Collet Olaf Seibert + Andy Church Jeff Bailey Pasi Kallinen + Andy Swanson Jochen Erwied Pat Rankin + Andy Thomson John Kallen Patric Mueller + Ari Huttunen John Rupley Paul Winner + Bart House John S. Bien Pierre Martineau + Benson I. Margulies Johnny Lee Ralf Brown + Bill Dyer Jon W{tte Ray Chason + Boudewijn Waijers Jonathan Handler Richard Addison + Bruce Cox Joshua Delahunty Richard Beigel + Bruce Holloway Karl Garrison Richard P. Hughey + Bruce Mewborne Keizo Yamamoto Rob Menke + Carl Schelin Keith Simpson Robin Bandy + Chris Russo Ken Arnold Robin Johnson + David Cohrs Ken Arromdee Roderick Schertler + David Damerell Ken Lorber Roland McGrath + David Gentzel Ken Washikita Ron Van Iwaarden + David Hairston Kevin Darcy Ronnen Miller + Dean Luick Kevin Hugo Ross Brown + Del Lamb Kevin Sitze Sascha Wostmann + Derek S. Ray Kevin Smolkowski Scott Bigham + Deron Meranda Kevin Sweet Scott R. Turner + Dion Nicolaas Lars Huttar Sean Hunt + Dylan O'Donnell Leon Arnott Stephen Spackman + Eric Backus M. Drew Streib Stefan Thielscher + Eric Hendrickson Malcolm Ryan Stephen White + Eric R. Smith Mark Gooderum Steve Creps + Eric S. Raymond Mark Modrall Steve Linhart + Erik Andersen Marvin Bressler Steve VanDevender + Fredrik Ljungdahl Matthew Day Teemu Suikki + Frederick Roeber Merlyn LeRoy Tim Lennan + Gil Neiger Michael Allison Timo Hakulinen + Greg Laskin Michael Feir Tom Almy + Greg Olson Michael Hamel Tom West + Gregg Wonderly Michael Sokolov Warren Cheung + Hao-yang Wang Mike Engber Warwick Allison + Helge Hafting Mike Gallop Yitzhak Sapir + Irina Rempt-Drijfhout Mike Passaretti + Izchak Miller Mike Stephenson diff --git a/src/NetHack_3.7/dat/juiblex.lua b/src/NetHack_3.7/dat/juiblex.lua new file mode 100644 index 0000000..56c02f9 --- /dev/null +++ b/src/NetHack_3.7/dat/juiblex.lua @@ -0,0 +1,122 @@ +-- NetHack gehennom juiblex.lua $NHDT-Date: 1652196026 2022/05/10 15:20:26 $ $NHDT-Branch: NetHack-3.7 $:$NHDT-Revision: 1.5 $ +-- 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_flags("mazelevel", "shortsighted", "noflip", "temperate") +-- des.level_init(mines,'.','}',true,true,unlit,false) +des.level_init({ style = "swamp", lit = 0 }); +-- guarantee at least one open spot to ensure successful stair placement +des.map({ halign = "left", valign = "bottom", map = [[ +xxxxxxxx +xx...xxx +xxx...xx +xxxx.xxx +xxxxxxxx +]] }); +des.object("boulder") +des.map({ halign = "right", valign = "top", map = [[ +xxxxxxxx +xxxx.xxx +xxx...xx +xx...xxx +xxxxxxxx +]] }); +des.object("boulder") +-- lair +des.map([[ +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxx +xxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxx +xxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxx +xxxxxxxxxxxxxxxxxxxxxxxx}}}xxxxxxxxxxxxxxx}}}}}xxxx +xxxxxxxxxxxxxxxxxxxxxxx}}}}}xxxxxxxxxxxxx}.....}xxx +xxxxxxxxxxxxxxxxxxxxxx}}...}}xxxxxxxxxxx}..P.P..}xx +xxxxxxxxxxxxxxxxxxxxx}}..P..}}xxxxxxxxxxx}.....}xxx +xxxxxxxxxxxxxxxxxxxxx}}.P.P.}}xxxxxxxxxxxx}...}xxxx +xxxxxxxxxxxxxxxxxxxxx}}..P..}}xxxxxxxxxxxx}...}xxxx +xxxxxxxxxxxxxxxxxxxxxx}}...}}xxxxxxxxxxxxxx}}}xxxxx +xxxxxxxxxxxxxxxxxxxxxxx}}}}}xxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxx}}}xxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxx +xxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxx +xxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +]]); +-- Random registers +local monster = { "j","b","P","F" } +shuffle(monster) + +local place = selection.new(); +place:set(04,02); +place:set(46,02); +place:set(04,15); +place:set(46,15); + +-- Dungeon description +des.region({ region={00,00,50,17}, lit=0, type="swamp", filled=2 }) +des.levregion({ region = {01,00,11,20}, region_islev=1, exclude={0,0,50,17}, type="stair-down" }); +des.levregion({ region = {69,00,79,20}, region_islev=1, exclude={0,0,50,17}, type="stair-up" }); +des.levregion({ region = {01,00,11,20}, region_islev=1, exclude={0,0,50,17}, type="branch" }); +des.teleport_region({ region = {01,00,11,20}, region_islev=1, exclude={0,0,50,17},dir="up" }) +des.teleport_region({ region = {69,00,79,20}, region_islev=1, exclude={0,0,50,17},dir="down" }) +des.feature("fountain", place:rndcoord(1)) +des.monster({ id = "giant mimic", coord = place:rndcoord(1), appear_as = "ter:fountain" }) +des.monster({ id = "giant mimic", coord = place:rndcoord(1), appear_as = "ter:fountain" }) +des.monster({ id = "giant mimic", coord = place:rndcoord(1), appear_as = "ter:fountain" }) +-- The demon of the swamp +des.monster("Juiblex",25,08) +-- And a couple demons +des.monster("lemure",43,08) +des.monster("lemure",44,08) +des.monster("lemure",45,08) +-- Some liquids and gems +des.object("*",43,06) +des.object("*",45,06) +des.object("!",43,09) +des.object("!",44,09) +des.object("!",45,09) +-- And lots of blobby monsters +des.monster(monster[4],25,06) +des.monster(monster[1],24,07) +des.monster(monster[2],26,07) +des.monster(monster[3],23,08) +des.monster(monster[3],27,08) +des.monster(monster[2],24,09) +des.monster(monster[1],26,09) +des.monster(monster[4],25,10) +des.monster("j") +des.monster("j") +des.monster("j") +des.monster("j") +des.monster("P") +des.monster("P") +des.monster("P") +des.monster("P") +des.monster("b") +des.monster("b") +des.monster("b") +des.monster("F") +des.monster("F") +des.monster("F") +des.monster("m") +des.monster("m") +des.monster("jellyfish") +des.monster("jellyfish") +-- Some random objects +des.object("!") +des.object("!") +des.object("!") +des.object("%") +des.object("%") +des.object("%") +des.object("boulder") +-- Some traps +des.trap("sleep gas") +des.trap("sleep gas") +des.trap("anti magic") +des.trap("anti magic") +des.trap("magic") +des.trap("magic") diff --git a/src/NetHack_3.7/dat/keyhelp b/src/NetHack_3.7/dat/keyhelp new file mode 100644 index 0000000..00a2095 --- /dev/null +++ b/src/NetHack_3.7/dat/keyhelp @@ -0,0 +1,58 @@ + Depending upon hardware or operating system or NetHack's interface, + some keystrokes may be off-limits. + + For example, ^S and ^Q are often used for XON/XOFF flow-control, + meaning that ^S suspends output and subsequent ^Q resumes suspended + output. When that is the case, neither of those characters will + reach NetHack when it is waiting for a command keystroke. So they + aren't used as commands, but 'whatdoes' might not be able to tell + you that if they don't get passed through to NetHack. + + ^M or or is likely to be transformed into ^J or + or 'newline' before being passed to NetHack for handling. + So it isn't used as a command, and 'whatdoes' might seem as if it + is reporting the wrong character but will be operating correctly if + it describes ^J when you type ^M. + + A NUL character, which is typed as ^ on some keyboards, + ^@ on others, and maybe not typeable at all on yet others, is not + used as a command, and will be converted into ESC before reaching + 'whatdoes'. Unlike ^M, this transformation is performed within + NetHack. But like ^M, if you type NUL and get feedback about ESC, + the situation is expected. + + ESC itself is a synonym for ^[, and is another source of oddity. + Various function keys, including cursor arrow keys, may transmit + an "escape sequence" of ESC + [ + other stuff, confusing NetHack + as to what command was intended since the ESC will be processed + and then whatever follows will seem to NetHack like--and be used + as--something typed by the user. (If you press a function key and + a menu of the armor your hero is wearing appears, what happened + was that an escape sequence was sent to NetHack, its ESC aborted + any pending key operation, its '[' was then treated as a command + to show worn armor, and the "other stuff" probably got silently + discarded as invalid choices while you dismissed the menu.) + + If you have NetHack's 'altmeta' option enabled, meaning that the + or