From 8b6403164380ecbc2a0a16b15757fd2cdce548eb Mon Sep 17 00:00:00 2001 From: dshaligram Date: Thu, 5 Apr 2007 16:46:35 +0000 Subject: Merge trunk back into 0.2 for 0.2.2. git-svn-id: https://crawl-ref.svn.sourceforge.net/svnroot/crawl-ref/branches/stone_soup-0.2@1227 c06c8d41-db1a-0410-9941-cceddc491573 --- crawl-ref/INSTALL | 291 ++++++---- crawl-ref/docs/crawl_options.txt | 8 +- crawl-ref/source/AppHdr.h | 2 + crawl-ref/source/abl-show.cc | 4 +- crawl-ref/source/acr.cc | 6 +- crawl-ref/source/beam.cc | 20 +- crawl-ref/source/chardump.cc | 15 +- crawl-ref/source/dat/splev.des | 543 +++++++++--------- crawl-ref/source/dat/tricky.des | 139 +++-- crawl-ref/source/dat/vaults.des | 1087 +++++++++++++++++++++---------------- crawl-ref/source/direct.cc | 13 +- crawl-ref/source/dungeon.cc | 3 + crawl-ref/source/enum.h | 24 +- crawl-ref/source/externs.h | 4 + crawl-ref/source/fight.cc | 8 +- crawl-ref/source/hiscores.cc | 4 +- crawl-ref/source/initfile.cc | 2 +- crawl-ref/source/libutil.cc | 6 +- crawl-ref/source/libutil.h | 3 +- crawl-ref/source/makefile.dos | 2 +- crawl-ref/source/makefile.mgw | 2 +- crawl-ref/source/makefile.unix | 2 +- crawl-ref/source/mapdef.cc | 7 +- crawl-ref/source/message.cc | 82 ++- crawl-ref/source/mon-data.h | 15 +- crawl-ref/source/mon-util.cc | 55 +- crawl-ref/source/mon-util.h | 2 +- crawl-ref/source/monstuff.cc | 129 +++-- crawl-ref/source/mstuff2.cc | 34 +- crawl-ref/source/mutation.cc | 2 +- crawl-ref/source/newgame.cc | 2 +- crawl-ref/source/player.cc | 21 +- crawl-ref/source/religion.cc | 35 +- crawl-ref/source/religion.h | 3 +- crawl-ref/source/spells1.cc | 4 +- crawl-ref/source/spells3.cc | 22 +- crawl-ref/source/spells3.h | 5 +- crawl-ref/source/spells4.cc | 18 +- crawl-ref/source/spells4.h | 2 +- crawl-ref/source/spl-cast.cc | 32 +- crawl-ref/source/spl-cast.h | 4 +- crawl-ref/source/spl-data.h | 10 +- crawl-ref/source/spl-util.cc | 3 +- crawl-ref/source/stuff.cc | 8 + crawl-ref/source/util/levcomp.ypp | 2 +- crawl-ref/source/version.h | 2 +- crawl-ref/source/view.cc | 8 + 47 files changed, 1529 insertions(+), 1166 deletions(-) diff --git a/crawl-ref/INSTALL b/crawl-ref/INSTALL index d97284265b..b29dfb85e5 100644 --- a/crawl-ref/INSTALL +++ b/crawl-ref/INSTALL @@ -4,62 +4,70 @@ Install instructions for Dungeon Crawl Stone Soup (DCSS) Building Dungeon Crawl Stone Soup --------------------------------- -Crawl Stone Soup is known to compile successfully on the following platforms as -of version 0.1: -- Any Unix with a recent gcc (and g++), GNU make and libncurses, including - Linux and Mac OS X. -- Microsoft Windows NT/2000/XP. The game will also run on Windows 9X and ME. - DOS binaries can also be compiled on Windows NT+. +Crawl Stone Soup is known to compile successfully on the following +platforms as of version 0.2: -The only supported compiler is gcc (available on almost all Unixes, and as djgpp -for DOS, and MinGW for Windows). +- Any Unix with a recent gcc (and g++), GNU make and libncurses, + including Linux and Mac OS X. "Recent" is defined as gcc 3.3 or + newer. +- Microsoft Windows NT/2000/XP. The game will also run on Windows 9X + and ME. DOS binaries can also be compiled on Windows NT+. -Other platforms are unsupported, but you should be able to build Crawl on -pretty much any operating system with a modern C++ compiler (full support for -the standard C++ library, in particular , the collection classes and - is necessary) and the curses library. +The only supported compiler is gcc (available on almost all Unixes, +and as djgpp for DOS, and MinGW for Windows). + +Other platforms are unsupported, but you should be able to build Crawl +on pretty much any operating system with a modern C++ compiler (full +support for the standard C++ library, in particular , the +collection classes and is necessary) and the curses +library. Optional libraries ------------------ + Crawl can be built with some optional features: + * Sounds * Regular expressions * Lua support Crawl Stone Soup also uses a level compiler to compile special level -definitions; to make changes to the level compiler, you'll need the flex and -bison/byacc tools (Other lex/yaccs may also work). More details are available -below. +definitions; to make changes to the level compiler, you'll need the +flex and bison/byacc tools (Other lex/yaccs may also work). More +details are available below. -Sounds must be enabled by editing AppHdr.h (uncomment SOUND_PLAY_COMMAND on -Unixes or WINMM_PLAY_SOUNDS on Windows). +Sounds must be enabled by editing AppHdr.h (uncomment +SOUND_PLAY_COMMAND on Unixes or WINMM_PLAY_SOUNDS on Windows). -Regular expressions require libpcre on non-Unix operating systems. On Unixes, -the standard POSIX regular expression support is adequate for Crawl's needs. +Regular expressions require libpcre on non-Unix operating systems. On +Unixes, the standard POSIX regular expression support is adequate for +Crawl's needs. -Lua support requires liblua, which you can build by downloading the sources from -www.lua.org. On most Unixes, you can also use the native package management -system to easily install lua. +Lua support requires liblua, which you can build by downloading the +sources from www.lua.org. On most Unixes, you can also use the native +package management system to easily install lua. Makefile system --------------- -Crawl uses a selector makefile (under source/makefile) to control what platform -it's building for. Your first step in building Crawl should be to edit -source/makefile and point it at the correct platform makefile. For instance, if -you're building for Windows, you'd use MAKEFILE=makefile.mgw to build with MinGW -for Windows (# is used for comments in makefiles). -Consult the operating-system specific sections for detailed information on -building Crawl. +Crawl uses a selector makefile (under source/makefile) to control what +platform it's building for. Your first step in building Crawl should +be to edit source/makefile and point it at the correct platform +makefile. For instance, if you're building for Windows, you'd use +MAKEFILE=makefile.mgw to build with MinGW for Windows (# is used for +comments in makefiles). + +Consult the operating-system specific sections for detailed +information on building Crawl. Building on Unix (Linux, *BSD, Solaris, etc.) --------------------------------------------- -* Prerequisites: +Prerequisites: GNU gcc and g++, GNU make, libncurses or libcurses. You need the development headers for ncurses - they may not be installed by default @@ -68,75 +76,98 @@ on some Unixes. flex and bison are optional but highly recommended. Recent versions of byacc are also fine (edit your makefile appropriately). -* Building: +Building: * cd to the source directory (you can safely ignore the dolinks.sh and domake.sh scripts). -* Edit makefile and make sure that MAKEFILE=makefile.unix is uncommented and - all other MAKEFILE= lines are commented out. - -* Edit AppHdr.h and check that SAVE_DIR_PATH, SAVE_PACKAGE_CMD and - LOAD_UNPACKAGE_CMD are set correctly for your system. If you do not want your - saves packaged in a zip archive, it's safe to comment out SAVE_PACKAGE_CMD and - LOAD_UNPACKAGE_CMD. - -* If you don't have flex or bison, edit makefile.unix and set DOYACC := n. If - you want to use byacc instead of bison, edit makefile.unix and set YACC := - byacc. On some Linuxes you may not have lex symlinked to flex, in which case - you'll have to set LEX := flex in makefile.unix. - -* Run make to build the normal (non-wizard) Crawl. On systems such as Solaris, - you may have to use gmake for GNU make. Make sure your make identifies itself - as GNU make when you do make --version. +* Edit makefile and make sure that MAKEFILE=makefile.unix is + uncommented and all other MAKEFILE= lines are commented out. + +* If you want to install Crawl for multiple users, edit makefile.unix + and set SAVEDIR and DATADIR to appropriate directories. This is not + necessary if only one user is going to play Crawl. Also check + INSTALLDIR and change it if necessary. + +* Edit AppHdr.h and check that SAVE_PACKAGE_CMD and LOAD_UNPACKAGE_CMD + are set correctly for your system. If you do not want your saves + packaged in a zip archive, it's safe to comment out SAVE_PACKAGE_CMD + and LOAD_UNPACKAGE_CMD. + +* If you don't have (or don't want to use) flex or bison, edit + makefile.unix and set DOYACC := n. If you want to use byacc instead + of bison, edit makefile.unix and set YACC := byacc. On some Unixes, + you may not have flex (but have some other lex), in which case + you'll have to set LEX := lex in makefile.unix. + +* Run make to build the normal (non-wizard) Crawl. On systems such as + Solaris, you may have to use gmake for GNU make. Make sure your make + identifies itself as GNU make when you do make --version. + +* If you're installing Crawl for multiple users, run make install. + Crawl will be copied into the directory specified by INSTALLDIR. The + save and data directories will be created if necessary, and the + level layout (.des) and help files will be copied to the data + directory. * If you have Lua, you can edit AppHdr.h and uncomment // #define CLUA_BINDINGS - then add -llua to your LIB = line in makefile.unix, and rebuild to compile with - Lua support. + then add -llua to your LIB = line in makefile.unix, and rebuild to + compile with Lua support. See the section on Lua (below) for more + information. Building on Mac OS X -------------------- -You can follow the Linux instructions to build Crawl (but note you still need to -install Xcode to get gcc and make), or alternatively you can use Xcode. -* Crawl has been tested with Xcode 2.4 under OS X 10.4.7 on both PPC and Intel - machines, but is likely to be buildable with earlier versions. +You can follow the Unix instructions to build Crawl (but note you +still need to install Xcode to get gcc and make), or alternatively you +can use Xcode. -* Make sure Xcode is installed. Xcode should be available on the OS X install - DVD if you haven't already installed it. +Note that the Unix instructions will build Crawl assuming that your +terminal can display 16 colours. If you're planning to use +Terminal.app (which supports only 8 colours), you should follow the +Mac build instructions below. -* Open the Xcode project (Crawl.xcodeproj) under the "source" directory. +* Crawl has been tested with Xcode 2.4 under OS X 10.4.7 on both PPC + and Intel machines, but is likely to be buildable with earlier + versions. + +* Make sure Xcode is installed. Xcode should be available on the OS X + install DVD if you haven't already installed it. + +* Open the Xcode project (Crawl.xcodeproj) under the "source" + directory. * Hit Build in Xcode. -* The default build configuration, Release, will build a ppc/i386 Universal - binary suitable for play on all OS X 10.3.9 or newer systems. The other build - configurations are intended for development and may not result in a binary - that can be distributed to others. +* The default build configuration, Release, will build a ppc/i386 + Universal binary suitable for play on all OS X 10.3.9 or newer + systems. The other build configurations are intended for development + and may not result in a binary that can be distributed to others. * You can also use makefile.osx, which will run xcodebuild from the command line. -* If you have Lua installed, you can add your lua headers and liblua library to - the 'Crawl' target in the Xcode project, uncomment the '#define CLUA_BINDINGS' - line in AppHdr.h, and rebuild to compile with Lua support. - +* If you have Lua installed, you can add your lua headers and liblua + library to the 'Crawl' target in the Xcode project, uncomment the + '#define CLUA_BINDINGS' line in AppHdr.h, and rebuild to compile + with Lua support. -Building on Windows -------------------- -NOTE: Building for Windows+MinGW on Windows 9x/ME may work, but we've not tested -it. You may be better off using the DOS build instructions if you're on 9x/ME. +Building on Windows (MinGW) +--------------------------- -We've also not tested or updated the makefile for Borland C++. We strongly -recommend using MinGW if possible. +NOTE: You cannot build Windows binaries on Windows 9x/ME using the +MinGW makefile supplied. If you're on 9x/ME, you can choose to use the +Cygwin build instructions, or build a binary on a Windows NT/2k/XP +system (the binary will run on 9x), or build a DOS binary. -* Install MinGW from http://www.mingw.org. The MinGW 5.0.2 installer is best so - you don't have to fiddle with individual packages (you can mess with the - individual packages if you like to, of course). If you want to edit the level - compiler, also get the flex and bison packages (available from the GnuWin32 - project on Sourceforge: http://gnuwin32.sourceforge.net/). +* Install MinGW from http://www.mingw.org. The MinGW 5.0.2 installer + is best so you don't have to fiddle with individual packages (you + can mess with the individual packages if you like to, of course). If + you want to edit the level compiler, also get the flex and bison + packages (available from the GnuWin32 project on Sourceforge: + http://gnuwin32.sourceforge.net/). * Make sure you have g++ and mingw32-make in your path. @@ -150,8 +181,8 @@ recommend using MinGW if possible. // #define CLUA_BINDINGS and // #define REGEX_PCRE - Note that there are multiple // #define REGEX_PCRE lines in AppHdr.h - find - the one in the Windows-specific section. + Note that there are multiple // #define REGEX_PCRE lines in AppHdr.h + - find the one in the Windows-specific section. * If you have flex and bison, edit makefile.mgw and set DOYACC := y. @@ -159,22 +190,39 @@ recommend using MinGW if possible. LIB = -lwinmm -static -llua -lpcre and build Crawl to include Lua and regex support. -* When you're done, you should have crawl.exe under a "rel" subdirectory. +* When you're done, you should have crawl.exe under a "rel" + subdirectory. -Building on DOS ---------------- +Building on Windows (cygwin) +---------------------------- + +* Get Cygwin from http://www.cygwin.com/. When installing, ensure that + the following packages are selected: gcc, g++, make, flex, bison. If + you'd like to build from svn, install the svn client. You may also + want to install diff and patch if you'd like to apply third party + patches, or create your own. + +* Once Cygwin is installed, open a Cygwin bash shell (use the Start + menu, do not double-click bash.exe in Explorer). cd to the Crawl + source directory. -* Install djgpp from http://www.delorie.com/djgpp/. Don't forget to include C++ - support when the Zip picker asks for what you want. You may also have to - download GNU make as a separate package. It's important to follow the install - instructions carefully, because bad installs can produce rather confusing - error messages. +* Follow the Linux build instructions to build Crawl. + + +Building for DOS (djgpp) +------------------------ + +* Install djgpp from http://www.delorie.com/djgpp/. Don't forget to + include C++ support when the Zip picker asks for what you want. You + may also have to download GNU make as a separate package. It's + important to follow the install instructions carefully, because bad + installs can produce rather confusing error messages. * Make sure gxx and make are in your PATH. -* If you want to modify the level compiler, install the djgpp flex, bison and m4 - packages and set DOYACC := y in makefile.dos. +* If you want to modify the level compiler, install the djgpp flex, + bison and m4 packages and set DOYACC := y in makefile.dos. * cd to the Crawl source directory. @@ -202,8 +250,9 @@ the source/dat directory. If you're using one of the standard makefiles, the steps described in this section are performed automatically: -The level compiler source is in the source/util directory (levcomp.lpp and -levcomp.ypp). The steps involved in building the level compiler are: +The level compiler source is in the source/util directory (levcomp.lpp +and levcomp.ypp). The steps involved in building the level compiler +are: * Run flex on levcomp.lpp to produce the levcomp.lex.cc lexer. * Run bison on levcomp.ypp to produce the levcomp.tab.cc parser and @@ -217,17 +266,19 @@ provided with the Crawl source distribution will use these pre-generated files automatically if flex/bison is not available. ***************************************************************************** -Optional Libraries ------------------- +Optional Libraries (Lua and PCRE) +--------------------------------- Lua --- -NOTE: When linking in Lua, the makefile LIB line usually looks like this: + +NOTE: When linking in Lua, the makefile LIB line usually looks like +this: LIB = -llua -If you're using Lua older than 5.1, though, the Lua library comprises of *two* -libraries: liblua and liblualib (yes, confusing), so you need +If you're using Lua older than 5.1, though, the Lua library comprises +of *two* libraries: liblua and liblualib (yes, confusing), so you need LIB = -llua -llualib @@ -235,35 +286,55 @@ This also depends on how you install Lua - some package management systems build just the plain old liblua.so even for pre 5.1 Lua. If in doubt, try both "-llua -llualib" and "-llua". -On many Linuxes, the package management system installs Lua libraries -including the version number, so the linker option becomes something -like: +On many Linuxes (Debian, for instance), the package management system +installs Lua libraries including the version number, so the linker +option becomes something like: LIB = -llua50 +Lua include path: + +On Unix, Lua headers may be installed in /usr/include (unlikely), or +in a subdirectory of /usr/include (such as /usr/include/lua50/). If +the headers are in a subdirectory, you need to add this directory to +the include path in your makefile.unix: + +INCLUDES = -I/usr/include/ncurses -I/usr/include/lua50 + +On other platforms, the Lua headers should usually be installed in +your compiler's include directory, or a subdirectory. If it's in a +subdirectory, you'll need to add the full directory path to your +includes line. + + Getting Lua: -On Unixes your package management system is the best way to get Lua. Make -sure to install the development headers and not just the naked library. +On Unixes your package management system is the best way to get Lua. +Make sure to install the development headers and not just the naked +library. -On Windows, Lua binaries are available on luaforge.net. You should find links to -get binaries from www.lua.org. +On Windows, Lua binaries are available on luaforge.net. You should +find links to get binaries from www.lua.org. -On DOS, you get the joy of compiling Lua yourself. It's not hard, and you can -use the existing Windows support in the Lua makefiles with some minor -modifications, but you may be better served using the official Crawl Stone Soup -binaries if you want Lua with your Crawl and don't want to compile Lua. +On DOS, you get the joy of compiling Lua yourself. It's not hard, and +you can use the existing Windows support in the Lua makefiles with +some minor modifications, but you may be better served using the +official Crawl Stone Soup binaries if you want Lua with your Crawl and +don't want to compile Lua. PCRE ---- -On Unixes, you're better served by the existing POSIX regular expression -support. If you want PCRE, your package management system is again your best -bet. Remember to install development headers, not just the plain library. + +On Unixes, you're better served by the existing POSIX regular +expression support. If you want PCRE, your package management system +is again your best bet. Remember to install development headers, not +just the plain library. On Windows, PCRE binaries are available from http://gnuwin32.sourceforge.net/packages/pcre.htm -On DOS you get the joy of building PCRE yourself. It's a little more annoying -than building Lua (you have to roll your own makefile), but not by much. +On DOS you get the joy of building PCRE yourself. It's a little more +annoying than building Lua (you have to roll your own makefile), but +not by much. diff --git a/crawl-ref/docs/crawl_options.txt b/crawl-ref/docs/crawl_options.txt index 549c2c4e5c..4b264d8df3 100644 --- a/crawl-ref/docs/crawl_options.txt +++ b/crawl-ref/docs/crawl_options.txt @@ -260,7 +260,7 @@ autopickup_exceptions = don't-pickup-regex, ... autopickup_exceptions = decay, degeneration You can use multiple autopickup_exceptions lines. Some examples: - autopickup_exceptions = degeneration, decay, confusion, + autopickup_exceptions = degeneration, decay, potions? of confusion, autopickup_exceptions = potions? of slowing, potions? of paralysis autopickup_exceptions = potions? of strong poison,potions? of poison autopickup_exceptions = inaccuracy @@ -524,7 +524,9 @@ explore_stop = items,stairs,shops,altars runrest_ignore_message = This only works if runrest.lua has been sourced already in init.txt. Any message containing the string will *not* stop your run. E.g. - runrest_ignore_message = prayer ends + runrest_ignore_message = offer a prayer,prayer is over + runrest_ignore_message = pleased with you,exalted + (useful in conjunction with autoprayer.) runrest_ignore_poison = : This only works if runrest.lua has been sourced already in init.txt. @@ -724,6 +726,8 @@ message_colour = :[:] message_colour = yellow:LOW HITPOINT WARNING You can also narrow the message match to a specific channel: message_colour = lightred:god:xom + If you don't want to see a message at all, you can mute it: + message_colour = mute:You start resting increasing_skill_progress = true This affects the appearance of the skills screen ('m'). With the diff --git a/crawl-ref/source/AppHdr.h b/crawl-ref/source/AppHdr.h index 511013e01d..8bad5c10e4 100644 --- a/crawl-ref/source/AppHdr.h +++ b/crawl-ref/source/AppHdr.h @@ -225,6 +225,8 @@ // Record where players are currently. #define DGL_WHEREIS + // Uses -macro.txt as the macro file if uncommented. + // #define DGL_NAMED_MACRO_FILE // Uses Options.macro_dir as the full path to the macro file. Mutually // exclusive with DGL_NAMED_MACRO_FILE. diff --git a/crawl-ref/source/abl-show.cc b/crawl-ref/source/abl-show.cc index 01eb25959d..98090b2818 100644 --- a/crawl-ref/source/abl-show.cc +++ b/crawl-ref/source/abl-show.cc @@ -955,7 +955,9 @@ bool activate_ability(void) break; case ABIL_TSO_SMITING: - cast_smiting( (2 + skill_bump(SK_INVOCATIONS)) * 6 ); + if (your_spells( SPELL_SMITING, (2 + skill_bump(SK_INVOCATIONS)) * 6, + false ) == SPRET_ABORT) + return (false); exercise( SK_INVOCATIONS, (coinflip()? 3 : 2) ); break; diff --git a/crawl-ref/source/acr.cc b/crawl-ref/source/acr.cc index d293ea9066..d083f087c8 100644 --- a/crawl-ref/source/acr.cc +++ b/crawl-ref/source/acr.cc @@ -2873,9 +2873,6 @@ static bool initialise(void) cio_init(); - // Load macros - macro_init(); - // system initialisation stuff: textbackground(0); @@ -2891,6 +2888,9 @@ static bool initialise(void) if (!newc) restore_game(); + + // Load macros + macro_init(); game_has_started = true; diff --git a/crawl-ref/source/beam.cc b/crawl-ref/source/beam.cc index c9c77dbb2a..1cf809f8e5 100644 --- a/crawl-ref/source/beam.cc +++ b/crawl-ref/source/beam.cc @@ -540,7 +540,7 @@ static void zappy( char z_type, int power, struct bolt &pbolt ) pbolt.colour = LIGHTMAGENTA; pbolt.range = random2(5) + 8; pbolt.damage = dice_def( 1, 3 + power / 5 ); // 25: 1d8 - pbolt.hit = 1500; // hits always + pbolt.hit = AUTOMATIC_HIT; // hits always pbolt.type = SYM_ZAP; pbolt.flavour = BEAM_MMISSILE; // unresistable pbolt.obvious_effect = true; @@ -1292,8 +1292,11 @@ void fire_beam( struct bolt &pbolt, item_def *item ) if ( pbolt.chose_ray ) ray = pbolt.ray; else + { + ray.fullray_idx = -1; // to quiet valgrind find_ray( pbolt.source_x, pbolt.source_y, pbolt.target_x, pbolt.target_y, true, ray); + } if ( !pbolt.aimed_at_feet ) ray.advance(); @@ -1572,6 +1575,15 @@ int mons_adjust_flavoured( struct monsters *monster, struct bolt &pbolt, } break; + case BEAM_ACID: + if (mons_res_acid(monster)) + { + if (doFlavouredEffects) + simple_monster_message(monster, " appears unharmed."); + + hurted = 0; + } + break; case BEAM_POISON: if (mons_res_poison(monster) > 0) @@ -3800,10 +3812,16 @@ static int affect_monster_enchantment(struct bolt &beam, struct monsters *mon) if (mons_holiness(mon) != MH_NATURAL) // no unnatural return (MON_UNAFFECTED); + // Cold res monsters resist hibernation (for consistency + // with mass sleep). + if (mons_res_cold(mon) > 0) + return (MON_UNAFFECTED); + if (simple_monster_message(mon, " looks drowsy...")) beam.obvious_effect = true; mon->behaviour = BEH_SLEEP; + mon->add_ench(ENCH_SLEEPY); mon->add_ench(ENCH_SLEEP_WARY); return (MON_AFFECTED); diff --git a/crawl-ref/source/chardump.cc b/crawl-ref/source/chardump.cc index ab31941d55..3319e307ad 100644 --- a/crawl-ref/source/chardump.cc +++ b/crawl-ref/source/chardump.cc @@ -549,18 +549,9 @@ static void sdump_religion(const std::string &, std::string & text) if (!player_under_penance()) { - if (you.religion != GOD_XOM) - { // Xom doesn't care - text += god_name(you.religion); - text += " is "; - text += ((you.piety <= 5) ? "displeased" : - (you.piety <= 20) ? "noncommittal" : - (you.piety <= 40) ? "pleased with you" : - (you.piety <= 70) ? "most pleased with you" : - (you.piety <= 100) ? "greatly pleased with you" : - (you.piety <= 130) ? "extremely pleased with you" - : "exalted by your worship"); - text += "."; + if (you.religion != GOD_XOM) // Xom doesn't care + { + text += god_prayer_reaction(); text += "\n"; } } diff --git a/crawl-ref/source/dat/splev.des b/crawl-ref/source/dat/splev.des index e833e32cd7..fd5725fb40 100644 --- a/crawl-ref/source/dat/splev.des +++ b/crawl-ref/source/dat/splev.des @@ -188,14 +188,15 @@ # does the same thing - whitespace is not significant. # SUBST: ? = T:20 U V # makes T twice as likely to be used as U or V (the default weight -# is 10). Note that there has to be at least one space after T:20 -# and that whitespace in T:20 is not permitted. +# is 10). Note that there has to be at least one space before and after +# T:20 and that whitespace in T:20 is not permitted. # SUBST: ? : TUV # replaces occurrences of ? with one of TUV, and guarantees that all # occurrences of ? will get the same replacement symbol. -# The placeholder symbol can be any non-space, printable character apart from -# : and =. The replacement symbols can be any non-space printable character, -# including : and = ("SUBST: ? = +=:123def" is valid). +# +# The placeholder and replacement symbols can be any non-space, printable +# character, including : and =, apart from commas - "SUBST: = = +=:123def" is +# valid. # # SUBST: lines can safely replace symbols with themselves: # @@ -1156,18 +1157,13 @@ KFEAT: Z = weight:2 teleport trap / . KFEAT: z = teleport trap MONS: naga / nothing, greater naga / nothing, guardian naga / nothing MONS: naga warrior / nothing, naga mage / nothing -SHUFFLE: 123 -SHUFFLE: 45 -SUBST: ' : ' x -SUBST: " : " x +SUBST: ':'x, ":"x SUBST: ' = .:250 1 2 3 4:15 5:5 SUBST: " = .:250 1 2 3 4:5 5:15 -SUBST: X = x c + . -SUBST: Y = x c + -SUBST: T : T U V .:30 b -SUBST: _ : ! . -SUBST: ! : ! . x -SUBST: ! = x .:2 +SUBST: X=xc.+, Y=xc+ +SUBST: T : T U V .:30 b +SUBST: _:.!, !:!.x, !=x .:2 +SHUFFLE: 123, 45 MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -1210,40 +1206,40 @@ ENDMAP ############################################################################ # snake_pit +# now slightly randomised (dp) - changes welcome -NAME: snake_pit -PLACE: Snake:5 +NAME: snake_pit +PLACE: Snake:5 ORIENT: southwest - -# Rotation makes this look really bad if the console font is not square. -FLAGS: no_rotate - -# Hey, this looks a bit like a face ... - +FLAGS: no_rotate +MONS: greater naga / nothing, naga, naga mage / nothing, naga warrior / nothing +SUBST: c = c .:1 +SUBST: v = v .:1 +SUBST: v = x MAP xxxxxxxxxxxxxxxxxxxxxxx..@.xxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxx.............xxxxxxxx -xxxxxxxxxxxxxx....x.............x..xxxxx -xxxxxxxxxxxx....2.x.............x.2..xxx -xxxxxxxxxxx.....2.x....x.....x..x..3.xxx -xxxxxxxxxxx.....22x.............xx.2..xx -xxxxxxxxxxx.......xx..x........xx..3..xx -xxxxxxxxxx.....x23.xx....T...xxx.44...xx -xxxxxxxxxx......4.4.x.........x.333....x -xxxxxxxxxx......3.x4...x.......4x4.....x -xxxxxxxxxx.......3.......x.............x -xxxxxxxxxx..c......3.........x.......c.x -xxxxxxxxx...cc...................3..cc.x -xxxxxxxxx...cc..........4.4.........cc.x -xxxxxxxxx...cc...3...x........2.....cc.x +xxxxxxxxxxxxxx....v.............v..xxxxx +xxxxxxxxxxxx....2.v.............v.2..xxx +xxxxxxxxxxx.....2.v....v.....v..v.33.xxx +xxxxxxxxxxx.....22v.............vv.2..xx +xxxxxxxxxxx.......vv..v........vv.33..xx +xxxxxxxxxx.....x233vv....T...vvv4444..xx +xxxxxxxxxx......4444v.........v.333....x +xxxxxxxxxx......33v4...v.......4x4.....x +xxxxxxxxxx.......334.....v.....4333....x +xxxxxxxxxx..c......3.3..4.4..v.......c.x +xxxxxxxxx...cc.....1...1.1.1...133..cc.x +xxxxxxxxx...cc....3.....4.4.........cc.x +xxxxxxxxx...cc...3...v........2.....cc.x xxxxxxxxx...cc.........1...1.......cc..x xxxxxxxxxx..cc.....1.....1.....1..ccc.xx -xxxxxxxxxx...ccc..................cc..xx +xxxxxxxxxx...ccc......3333333.....cc..xx xxxxxxxxxx....cccc....3333333.....cc..xx -xxxxxxxxxx.....ccccccc...........cc...xx -xxxxxxxxxx........cccccccO...ccccc....xx +xxxxxxxxxx.....cccccc............cc...xx +xxxxxxxxxx........ccccc..O....cccc....xx xxxxxxxxxxx........cccccccccccccc....xxx -xxxxxxxxxxx.........cccccccccccc.....xxx +xxxxxxxxxxx..........ccccccccccc.....xxx xxxxxxxxxxxxx.......................xxxx xxxxxxxxxxxxxxxx..................xxxxxx xxxxxxxxxxxxxxxxxxxxx.......xxxxxxxxxxxx @@ -1257,17 +1253,27 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ENDMAP -MONS: greater naga, naga, naga mage, naga warrior -MONS: random, random, random ############################################################################ # elf_hall +# now slightly randomised (dp) - changes welcome -NAME: elf_hall -PLACE: Elf:7 -ORIENT: northwest -FLAGS: no_rotate - +NAME: elf_hall +PLACE: Elf:7 +ORIENT: northwest +FLAGS: no_rotate +MONS: deep elf high priest, deep elf demonologist, deep elf annihilator +MONS: deep elf sorcerer, deep elf death mage +SUBST: 1=1., 2=2., 3=3., 4=4., 5=5. +SHUFFLE: 23, 45 +KMONS: $ = weight:450 nothing / deep elf sorcerer / deep elf annihilator +KMONS: * = weight:300 nothing / deep elf annihilator / deep elf death mage +KMONS: | = weight:600 nothing / deep elf demonologist / deep elf death mage +SUBST: v = v .:2 +SUBST: v : xvb +SUBST: | = | *:2 +SUBST: $ = $:20 *:4 |:1 +SUBST: * = * |:3 MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -1281,36 +1287,32 @@ xxxxxxxxxxxxxxxxxcc*|*|*|**|||||c$ccxxxx xxxxxxxxxxxxxxxxcc*$*|*|*|*|||||c$$ccxxx xxxxxxxxxxxxxxxcc*$|*$***$$|||||c|$$ccxx xxxxxxxxxxxxxxcc*$*|**ccccccccccc$$$$ccx -xxxxxxxxxxxxxxc*|*$*$ccc.....2..c+$|$$cx +xxxxxxxxxxxxxxc*|*$*$ccc..2..2..c+$|$$cx xxxxxxxxxxxxxxc$*$*ccc...........c$$$$cx -xxxxxxxxxxxxxxc||**cc...5.......4cc$|$cx -xxxxxxxxxxxxxxc*$$cc........3..ccccccccx +xxxxxxxxxxxxxxc||**cc...5.5...4.4cc$|$cx +xxxxxxxxxxxxxxc*$$cc..3.....3..ccccccccx xxxxxxxxxxxxxxc$+ccc.....2....cc.....5cx -xxxxxxxxxxxxxxc$c....5.......cc.......cx +xxxxxxxxxxxxxxc$c....5.....5.cc....5..cx xxxxxxxxxxxxxxccc......5....cc..2....ccx -xxxxxxxxxxxxxxxxc..........cc.......ccxx -xxxxxxxxxxxxxxxcc..1..U..........4..ccxx +xxxxxxxxxxxxxxxxc....5...2.cc.......ccxx +xxxxxxxxxxxxxxxcc..1..U.....3.4..4..ccxx xxxxxxxxxxxxxxcc.....................ccx -xxxxxxxxxxxxxxc...........3...........cx -xxxxxxxxxxxxxxc.......2.......3.......cx +xxxxxxxxxxxxxxc..2........3........5..cx +xxxxxxxxxxxxxxc.......2..2....3.......cx xxxxxxxxxxxxxxc..2................2..5cx -xxxxxxxxxxxxxxc......x.........x......cx -xxxxxxxxxxxxxxc.....xx.........xx.....cx -xxxxxxxxxxxxxxc2...xxx....1....xxx.4..cx -xxxxxxxxxxxxxxc..xxxx...........xxxx..cx -xxxxxxxxxxxxxxc.xxx.....cc.cc.....xxx.cx -xxxxxxxxxxxxxxc.x.....cccc.cccc.....x.cx -xxxxxxxxxxxxxxc.3...cccxxc.cxxccc.3...cx +xxxxxxxxxxxxxxc......v.........v..2...cx +xxxxxxxxxxxxxxc..2..vv..1...1..vv.....cx +xxxxxxxxxxxxxxc2...vvv....1....vvv.4.4cx +xxxxxxxxxxxxxxc..vvvv...........vvvv..cx +xxxxxxxxxxxxxxc.vvv.....cc.cc.....vvv.cx +xxxxxxxxxxxxxxc.v.3...cccc.cccc.3...v.cx +xxxxxxxxxxxxxxc.3...cccxxc.cxxccc.3.3.cx xxxxxxxxxxxxxxc...cccxxxxc.cxxxxccc...cx xxxxxxxxxxxxxxc.cccxxxxxxc.cxxxxxxccc.cx xxxxxxxxxxxxxxcccxxxxxxxxc.cxxxxxxxxcccx xxxxxxxxxxxxxxxxxxxxxxxxxx@xxxxxxxxxxxxx ENDMAP -MONS: deep elf high priest, deep elf demonologist -MONS: deep elf annihilator, deep elf sorcerer -MONS: deep elf death mage -MONS: random, random ############################################################################ ## alternative elf halls: gauntlets (David) @@ -1400,9 +1402,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ~ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$ce**|||**eccccccce%*%%%*%ec$$ccccxc @@ -1444,9 +1444,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$ce%*%%%%%ecccccc=e**|||**ec$$ccccxc @@ -1488,9 +1486,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$ce%%%%%*%eccccccce**|||**ec$$=cccxc @@ -1532,9 +1528,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$ce%*%%%%%eccccccce**|||**ec$$ccccxc @@ -1576,9 +1570,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$cd%%%%%%%dc==c===e%%%%%%%ec$$ccccxc @@ -1620,9 +1612,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$ce%%%%%%%eccccccce**|||**ec$$ccccxc @@ -1664,9 +1654,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$cd|*|||**dcccccccd*||*|**dc$$ccccxc @@ -1708,9 +1696,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$ce*|||||*ec==ccc=e*|||||*ec$$ccccxc @@ -1752,9 +1738,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxcccc$$=e**|||**eccccccce%%|%|%%e=$$ccccxc @@ -1796,9 +1780,7 @@ MONS: deep elf death mage MONS: deep elf conjurer / deep elf fighter / deep elf summoner / deep elf knight / nothing MONS: curse skull / curse toe SUBST: ~ = ^ .:30 -SUBST: ! = 1 5 -SUBST: ? = . ? -SUBST: ? : 2 3 +SUBST: !=15, ?=.?, ?:23 MAP ccccccccccccccccccccccccccccccccccccccccccc cxccc====ccccc=======cccc====ccccccccccccxc @@ -1830,78 +1812,80 @@ ENDMAP ############################################################################## # slime_pit - -NAME: slime_pit -PLACE: Slime:$ -ORIENT: encompass - -# Slime pit take is reduced pending an increase in difficulty of this -# subdungeon. -- bwr - -MAP -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx..xxxx.........xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxx....................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxx......................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxx..........................x.xxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxx............................xxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxx.............................xxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxx.................................xxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxx..................................xxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxx....(................................xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxx......................................xxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxx..........................................xxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxx..........................................xxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxx............................................xxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxx............................................xxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxx.....................ccc..ccc............]......xxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxx...................cccc2ccccc...................xxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxx...................cc*cc..cc*cc....................xxxxxxxxxxxxxxx -xxxxxxxxxxxxxx..................cc***cc4c***cc..................xxxxxxxxxxxxxxxx -xxxxxxxxxxxxx..................cc*|*cc..cc*|*cc..................xxxxxxxxxxxxxxx -xxxxxxxxxxxxx.................cc*|P|*c4cc*|P|*cc.................xxxxxxxxxxxxxxx -xxxxxxxxxxxxx.................cc**|*cc..cc*|**cc....................xxxxxxxxxxxx -xxxxxxxxxxxx..................ccc**c|cc4c|c**ccc...................xxxxxxxxxxxxx -xxxxxxxxxxxx..................cccccccc..cccccccc....................xxxxxxxxxxxx -xxxxxxxxxxx...................c.4.c.4.1..4.c.4.c.....................xxxxxxxxxxx -xxxxxxxxxxx...................2.c.4.c..3.c.4.c.2.....................xxxxxxxxxxx -xxxxxxxxxxx..........)........cccccccc..cccccccc.....................xxxxxxxxxxx -xxxxxxxxxxx...................ccc**c|cc4c|c**ccc.....................xxxxxxxxxxx -xxxxxxxxxx....................cc**|*cc..cc*|**cc....................xxxxxxxxxxxx -xxxxxxxxxx....................cc*|P|*c4cc*|P|*cc....................xxxxxxxxxxxx -xxxxxxxxxx.....................cc*|*cc..cc*|*cc....................xxxxxxxxxxxxx -xxxxxxxxxxx.....................cc***cc4c***cc.....................xxxxxxxxxxxxx -xxxxxxxxxxxx.....................cc*cc..cc*cc......................xxxxxxxxxxxxx -xxxxxxxxxxxxx.....................cccc2ccccc......................xxxxxxxxxxxxxx -xxxxxxxxxxxxxx.....................ccc..ccc.......................xxxxxxxxxxxxxx -xxxxxxxxxxxxxx...........................................[.........xxxxxxxxxxxxx -xxxxxxxxxxxxx......................................................xxxxxxxxxxxxx -xxxxxxxxxxxxx..............................................xxxxx...xxxxxxxxxxxxx -xxxxxxxxxxxxxx...........................................xxxxxxxx.xxxxxxxxxxxxxx -xxxxxxxxxxxxxx..........................................xxxxxxxxx.xxxxxxxxxxxxxx -xxxxxxxxxxxxxxxx........................................xxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxx.........................................xxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxx.......................................xxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxx......................................xxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxx......................................xxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx.....................................xxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx.............................}......xxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxx.................................xxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxx..............................xxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxx..............................xxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxx............................xxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxx...........{........xxx..xxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.........xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +# now slightly randomised (dp) - changes welcome + +NAME: slime_pit +PLACE: Slime:$ +ORIENT: encompass +MONS: royal jelly, acid blob, great orb of eyes / nothing +SUBST: ' : ' .:1, ' : ' x:1, ' = .x +SUBST: " : " .:3, " = .c +SHUFFLE: ([{ +# of what use are the exits? +MAP +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''xxxx''''...''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxx'''..'''''........'''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxx'.....................'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxx'.......................''x'xxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxx'..........................'.xxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxx'............................'xxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxx'.............................'''xxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxx'...............................''xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx''..(..............................''xxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxx'''....................................''xxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxx'.........................................'xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxx''.........................................'xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx'...........................................'xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxx''xx'..........................................'xxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxx'..''................""""."""""...........]....''xxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxx'x.................."cccc2ccccc".................'xxxxxxxxxxxxxxxxx +xxxxxxxxxxxxx'.'................"cc*cc..cc*cc".................''xxxxxxxxxxxxxxx +xxxxxxxxxxxxx'................."cc***cc4c***cc".................xxxxxxxxxxxxxxxx +xxxxxxxxxxxxx'................"cc*|*cc..cc*|*cc"................'xxxxxxxxxxxxxxx +xxxxxxxxxxxx''..............."cc*|P|*c4cc*|P|*cc"...............'xxxxxxxxxxxxxxx +xxxxxxxxxxxx'................"cc**|*cc..cc*|**cc"................'''xxxxxxxxxxxx +xxxxxxxxxxxx'................"ccc**c|cc4c|c**ccc"..................xxxxxxxxxxxxx +xxxxxxxxxxx'................."cccccccc.3cccccccc"..................'xxxxxxxxxxxx +xxxxxxxxxxx'................."c.4.c.4.1..4.c.4.c"..................''xxxxxxxxxxx +xxxxxxxxxxx'..................2.c.4.c....c.4.c.2....................'xxxxxxxxxxx +xxxxxxxxxx'..........)......."cccccccc3.cccccccc"...................'xxxxxxxxxxx +xxxxxxxxxx'.................."ccc**c|cc4c|c**ccc"...................'xxxxxxxxxxx +xxxxxxxxxx'.................."cc**|*cc..cc*|**cc"..................'xxxxxxxxxxxx +xxxxxxxxx'..................."cc*|P|*c4cc*|P|*cc"..................'xxxxxxxxxxxx +xxxxxxxxx''..................."cc*|*cc..cc*|*cc"..................'xxxxxxxxxxxxx +xxxxxxxxxxx'..................."cc***cc4c***cc"...................'xxxxxxxxxxxxx +xxxxxxxxxxxx'..................."cc*cc..cc*cc"....................'xxxxxxxxxxxxx +xxxxxxxxxxxx'...................."cccc2ccccc"....................'xxxxxxxxxxxxxx +xxxxxxxxxxxxx'...................."""".""""".....................'xxxxxxxxxxxxxx +xxxxxxxxxxxxx'...........................................[........'xxxxxxxxxxxxx +xxxxxxxxxxxx''..............................................'''....'xxxxxxxxxxxx +xxxxxxxxxxxx'.............................................''xxx''.'xxxxxxxxxxxxx +xxxxxxxxxxxxx'..........................................''xxxxxxx.xxxxxxxxxxxxxx +xxxxxxxxxxxxx'''.......................................'xxxxxxxxx.xxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx'......................................'xxxxxxxxx'xxxxxxxxxxxxxx +xxxxxxxxxxxxxxxx'.......................................'xxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxx''.....................................'xxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxx'.....................................'xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxx''....................................'xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxx'...................................'xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxx'............................}......'xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx''................................'xxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxx'.............................''xxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxx'.............................'xxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxx'......................''...'xxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxx'''''........{.......'xx'..xxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'''............'xxxx''xxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''....'....'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''x...''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx''''xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -1911,9 +1895,6 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ENDMAP -MONS: royal jelly, acid blob, great orb of eyes -MONS: random, random, random, random - ############################################################################## # The Hall of Blades @@ -1921,7 +1902,8 @@ MONS: random, random, random, random NAME: hall_of_blades PLACE: Blade ORIENT: north - +MONS: dancing weapon +SHUFFLE: cvx MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -1961,8 +1943,6 @@ xxxxxxxxcccc.............................cccccccccccccccccccccccccccccccxxxxxxxx xxxxxxxxcccccccccccccccccccccccccccccc.@.cccccccccccccccccccccccccccccccxxxxxxxx ENDMAP -MONS: dancing weapon -MONS: random, random, random, random, random, random ############################################################################## # hall_of_Zot @@ -2504,35 +2484,37 @@ MONS: random, random ############################################################################# # Swamp:5 +# now slightly randomised (dp) - changes welcome -NAME: swamp -PLACE: Swamp:5 -ORIENT: southeast -FLAGS: no_rotate - +NAME: swamp +PLACE: Swamp:5 +ORIENT: southeast +FLAGS: no_rotate +MONS: swamp dragon / nothing, swamp drake / nothing, hydra / nothing +SHUFFLE: 12 +SUBST: ' = xc # NB - most of the 'x's here will be set to water in dungeon.cc - MAP xxxxxxxxxxx@xxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx2xxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxx2xxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxx2x.xxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxx2x2xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxcc.ccxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxcc...ccxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxcc3.2..ccxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxcc.1.3.2.ccxxxxxxxxxxxxxxxxxxxxxxx -xxxxxccc....1.1cccxxxxxxxxxxxxxxxxxxxxxx -xxxxxcc.1.32....ccxxxxxxxxxxxxxxxxxxxxxx -xxxxxcc...3..1.3ccxxxxxxxxxxxxxxxxxxxxxx -xxxxxcc2.1.3..2.ccxxxxxxxxxxxxxxxxxxxxxx -xxxxxccc33..1..cccxxxxxxxxxxxxxxxxxxxxxx -xxxxxxcccc3O3ccccxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxcccccccccxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxcccccccxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxcccxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxcc3.2ccxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxx'c3.2.3c'xxxxxxxxxxxxxxxxxxxxxxxx +xxxxxx'c11.3322c''xxxxxxxxxxxxxxxxxxxxxx +xxxxx'cc...21.1cccxxxxxxxxxxxxxxxxxxxxxx +xxxxx'c.13321.1.cc'xxxxxxxxxxxxxxxxxxxxx +xxxx'cc31333.113cc'xxxxxxxxxxxxxxxxxxxxx +xxxx'cc22113.223ccxxxxxxxxxxxxxxxxxxxxxx +xxxxx'cc3333113cc'xxxxxxxxxxxxxxxxxxxxxx +xxxxx'cccc3O3ccc'xxxxxxxxxxxxxxxxxxxxxxx +xxxxxx'cccccccc'xxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxx''ccccc'xxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxx''cc'xxxxxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxx'xxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -2549,8 +2531,37 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ENDMAP -MONS: swamp dragon, swamp drake, hydra -MONS: random, random, random, random +############################################################################# +# Swamp:5 alternative (dp) + +NAME: swamp_alternative +PLACE: Swamp:5 +ORIENT: float +MONS: swamp dragon, swamp drake, hydra, firedrake +ITEM: nothing +SUBST: 1=1., 2=2., 3=3., 4=4. +SHUFFLE: Od, 123 +SUBST: l=l .:2, '=.x, "=cx, _=c. +# NB - most of the 'x's here will be set to water in dungeon.cc +MAP +xxx@xxxxxxx@xxxxxxxxxxx +xxx1'xxxxxxx2'xxxxxxxxx +xxxx1xxxxxx2'xxxxxxxxxx +xxxx.xxxxxx.xxxxxxxxxxx +xx'2x3.x''3xxxxxxxxxxxx +xx''x"c..1""""xxxxxxxxx +xxxx""c".ccccc""xxx'3xx +xxx"cc_.2lll.ccc""2.'3x +xx"cc..33ll..2._c1'xxx@ +x"cc.1..lll...1..""xxxx +x"c....llllll.1.2c"xxxx +x"cc..l4llllll..cc"xxxx +xx"ccll.llll.4lcc"xxxxx +xxx"cccO.lld.ccc"xxxxxx +xxxx""cccccccc""xxxxxxx +xxxxxx""""""""xxxxxxxxx +ENDMAP + ############################################################################## # Portal vaults @@ -2590,7 +2601,7 @@ NAME: david_orc_1_choice TAGS: orc_entry MONS: orc, warg / orc priest / orc warrior, orc warrior / orc ITEM: % / scroll of teleport / scroll of remove curse / scroll of identify -ITEM: % / weight:2 * / scroll of blinking / scroll of recharging / scroll of fear +ITEM: % / w:2 * / scroll of blinking / scroll of recharging / scroll of fear SHUFFLE: %1 ORIENT: float MAP @@ -2708,7 +2719,7 @@ NAME: david_orc_5 TAGS: orc_entry ORIENT: float KFEAT: C = altar of Yredelemnul / altar of Makhleb / altar of Trog -MONS: orc priest, orc / weight:5 orc warrior / weight:1 orc knight +MONS: orc priest / nothing, orc / w:5 orc warrior / w:1 orc knight SUBST: x : cxv SUBST: ( = ( . SUBST: ) = ) . @@ -2730,7 +2741,7 @@ NAME: erik_orc_1 TAGS: orc_entry MONS: orc, orc priest/orc wizard, weight:50 orc warrior/ogre, swamp drake # The drake's name is Bobby. Since you did ask. -KITEM: 1 = sausage / nothing / animal skin / potion of confusion / potion of paralysis / potion of slowing / potion of degeneration / weight:2 potion of speed / weight:2 potion of might +KITEM: 1 = sausage / nothing / animal skin / potion of confusion / potion of paralysis / potion of slowing / potion of degeneration / w:2 potion of speed / w:2 potion of might ITEM: club, potion of confusion, slice of pizza, sausage / weight:40 nothing ITEM: potion of confusion / potion of water SHUFFLE: defO @@ -2866,16 +2877,17 @@ MONS: weight:20 nothing / weight:30 human / necromancer / wizard ORIENT: float SHUFFLE: != SUBST: ! = x +SUBST: ' : cxv MAP -xxxxx.@.xxxxx -x...+...x...x -x...x...x...x -x!x=x111x...x -@.x.x111+.O.x -x.x.x111x...x -x.x.x...x...x -x.+.x...x...x -xxxxx.@.xxxxx +xxxxx.@.''''' +x...+...'...' +x...x...'...' +x!x=x111'...' +@.x.x111+.O.' +x.x.x111'...' +x.x.x...'...' +x.+.x...'...' +xxxxx.@.''''' ENDMAP ############################################################################## @@ -2927,7 +2939,7 @@ ENDMAP NAME: david_vaults_4 TAGS: vault_entry ORIENT: float -SHUFFLE: 12345 +SHUFFLE: 123456 MONS: dragon / golden dragon / ice dragon / iron dragon / shadow dragon / storm dragon MONS: freezing wraith / shadow wraith / wight / wraith MONS: deep troll / iron troll / rock troll / troll @@ -2935,13 +2947,8 @@ MONS: cyclops / ettin / fire giant / frost giant / hill giant / stone giant / ti MONS: necromancer / shapeshifter / vault guard / wizard MONS: nothing MONS: shapeshifter / weight:30 nothing -SUBST: 1 = 1 . -SUBST: 2 = 2 . -SUBST: 3 = 3 . -SUBST: 4 = 4 . -SUBST: 5 = 5 . -SUBST: * : * % . - +SUBST: 1=.1, 2=.2, 3=.3, 4=.4, 5=.5, *:*.% +SUBST: x : xcv MAP @..........@ .xxxxxxxxxx. @@ -2985,7 +2992,7 @@ NAME: erik_vaults_1 TAGS: vault_entry MONS: dancing weapon ORIENT: float - +SHUFFLE: vc MAP ............. ............. @@ -3006,7 +3013,7 @@ NAME: erik_vaults_2 TAGS: vault_entry MONS: vault guard ORIENT: float - +SHUFFLE: vx MAP vvvvvv.vvvvvv vvvvvv.vvvvvv @@ -3036,17 +3043,17 @@ ENDMAP # NAME: david_lair_1 TAGS: lair_entry -MONS: giant lizard, giant snail / elephant slug -MONS: yak / weight:2 death yak, plant / fungus +MONS: giant lizard / sheep, giant snail / elephant slug / nothing +MONS: nothing / yak / weight:2 death yak, plant / fungus / w:20 nothing SHUFFLE: 12 ORIENT: float MAP xxxx..@..xxxx xx.........xx -x...2...44..x -...4..1...... +x..42...44..x +..44..1...... @....1O3....@ -..........4.. +...4......4.. x...4..2....x xx.........xx xxxx..@..xxxx @@ -3055,19 +3062,20 @@ ENDMAP ############################################################################## # Shrubbed Lair entry # -NAME: david_lair_2 -TAGS: lair_entry -MONS: plant, firedrake +NAME: david_lair_2 +TAGS: lair_entry +MONS: plant, firedrake +SUBST: ' = 1. ORIENT: float MAP xxxxxxxxxxxxx xx111111111xx -x112..111111x -x11.O..111... -x11...111...@ -x111111...... -x1..11......x -xx.........xx +x112.'111111x +x11.O.'111''. +x11'..111'..@ +x111111''.... +x1''11......x +xx.''..'...xx xxxx..@..xxxx ENDMAP @@ -3076,11 +3084,11 @@ ENDMAP # NAME: david_lair_3 TAGS: lair_entry -MONS: weight:50 nothing / weight:30 giant slug / weight:30 giant snail -MONS: weight:100 nothing / weight:40 yak / sheep / death yak -MONS: weight:100 nothing / weight:20 giant iguana / weight:20 giant lizard / gila monster / komodo dragon +MONS: w:50 nothing / w:30 giant slug / w:30 giant snail +MONS: w:100 nothing / w:40 yak / sheep / death yak +MONS: w:100 nothing / w:20 giant iguana / w:20 giant lizard / gila monster / komodo dragon MONS: green rat / grey rat / orange rat / quokka / rat -MONS: weight:90 nothing / weight:30 giant frog / blink frog / giant brown frog / spiny frog +MONS: w:90 nothing / w:30 giant frog / blink frog / giant brown frog / spiny frog SHUFFLE: 12345 ORIENT: float MAP @@ -3161,17 +3169,17 @@ ENDMAP # NAME: erik_lair_3 TAGS: lair_entry -MONS: weight:50 troll / Snorg, weight:30 hound / jackal / weight:20 war dog +MONS: w:50 troll / Snorg, w:30 hound / jackal / w:20 war dog ORIENT: float SUBST: ? = w. MAP -.@........ww?www?..... +.@........wwwwww?..... ..?.?.?..wwwwwww.?..?. ..??w..wwwwwwwww?.??.. -...??w.wwwwwww??www?.. -...wwwwwwwwwwwwwww??.. -..wwwwww?wwwww2wwww..@ -..wwwwwwww....wwww???. +...??w.wwwwwwww?www?.. +...wwww?wwwwwwwwww??.. +..wwwwww??w??w2wwww..@ +..wwwwww??....wwww???. ......1..2.2O2.wwww... ..?wwwww???2.2www.ww?. .....wwww2..w.2www.... @@ -3187,8 +3195,8 @@ ENDMAP # NAME: erik_lair_4 TAGS: lair_entry -MONS: steam dragon/mottled dragon/swamp drake -MONS: weight:20 giant iguana/komodo dragon/giant gecko/giant lizard +MONS: steam dragon / mottled dragon / swamp drake +MONS: w:20 giant iguana / komodo dragon / giant gecko / giant lizard / nothing FLAGS: no_rotate SUBST: ? = x.c SHUFFLE: %*RO @@ -3196,9 +3204,9 @@ ORIENT: float MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxx?xxx?x?xx?x.2xx??xx?x*?xxx?.2.xxxx +xxxxxxxxxxxxxxx?xxx?x?xx?x.2xx?xxx?x*?xxx?.2.xxxx xxxxxxxxxxxxxxx.2.......?xx.x.?xxx?.??xxxx?x.?xxx -xxxxxxxxxxxxx?....xxx...2....??????..??x?x..%xxxx +xxxxxxxxxxxxx?....xxx...2....??????..????x..%xxxx xx?xx???xxxxx..xx??xx??..........?...???..??x=.?x @......xxx.2.xx?xxxxxx?x?x??.......1...2.x.xxx.?x xxx?xxx...xxxxxxxxxxxx?xxxx.??.2...?......?xxx$xx @@ -3267,7 +3275,7 @@ ENDMAP # Hive monsters near stair # NAME: david_hive_2 -TAGS: hive_entry +TAGS: hive_entry generate_awake MONS: nothing / killer bee / killer bee larva MONS: queen bee ORIENT: float @@ -3294,14 +3302,8 @@ MONS: killer bee larva / killer bee, queen bee MONS: giant ant / soldier ant, queen ant MONS: yellow wasp / nothing, red wasp / yellow wasp MONS: bumblebee -SHUFFLE: XY -SHUFFLE: VW -SHUFFLE: defgOR -SHUFFLE: 34 / 56 -SUBST: V = = -SUBST: W = a -SUBST: X = = -SUBST: Y = a +SHUFFLE: XY, VW, defgOR, 34/56 +SUBST: V==, W=a, X==, Y=a SUBST: ? = a .:20 SUBST: 1 : 1 7:2 SUBST: 7 = 7 . @@ -3325,21 +3327,21 @@ ENDMAP # NAME: erik_hive_1 TAGS: hive_entry -MONS: weight:200 bear/polar bear, grizzly bear, black bear +MONS: w:200 bear / polar bear, grizzly bear, black bear MONS: killer bee, queen bee, killer bee larva ITEM: honeycomb, royal jelly -SHUFFLE: 123 -SHUFFLE: deO +SUBST: ? = a. +SHUFFLE: 123, deO ORIENT: float MAP ....................... -.............aaa....... +............?aaa???.... ...........aaa4aaaaa... -...........a4e6d564a... -......2....a6.4.4O6a... -............a64aa4a.... -....1.......aaaaaa..... -.......3............... +..........?a4e6d564a?.. +......2...?a6?4?4O6a?.. +...........?a64?a4a.... +....1......?aaaaaa?.... +.......3.....????...... ....................... ENDMAP @@ -3377,17 +3379,18 @@ ENDMAP NAME: erik_hive_3 TAGS: hive_entry MONS: killer bee larva, killer bee, queen bee, firedrake -SUBST: l = l. +SHUFFLE: UVWXYZ +SUBST: l=.l, U==, V=a, W=a, X=a, Y=a, Z=a ORIENT: float MAP .................. ...aaaaa.......... ..aaRa....a...a... -..a2.a.aaa=.aa.... -.aa.1aaa.1aaa...a. +..a2.Y.aaaX.aa.... +.aV.1aaa.1aaa...a. ..aa21.2O2aaa4.aa. -...aaa2131aaaaa... -..aaaaaRaaa..aa... +...Zaa2131Waaaa... +..aaaaaRaUa..aa... ..aa.4aaa.a...a... .aa...aaa.aa...... .a..aaaa.......... diff --git a/crawl-ref/source/dat/tricky.des b/crawl-ref/source/dat/tricky.des index 39a8a386b1..d8993fc894 100644 --- a/crawl-ref/source/dat/tricky.des +++ b/crawl-ref/source/dat/tricky.des @@ -190,17 +190,17 @@ NAME: lemuel_trickyentry_002_batcave TAGS: entry ORIENT: float SHUFFLE: {[( -MONS: giant bat +MONS: giant bat / nothing MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x{x[x(xxxxxxxxxxx.........%xxxx x.x.x.xxxxxxxx...............xx -x.x.x.xxxxxx..................x -x.x.x.xxxx....1.1.1.1.1......%x +x.x.x.xxxxxx...1.1.1..........x +x.x.x.xxxx....1.1.1.1.1.1....%x x.x.x.xx.......1.1.1.1.1....%xx -x.....+.......1.1.1.1.1.....%xx +x.....+.......1.1.1.1.1.1...%xx xxx.xxx........1.1.1.1.1....xxx -xxx.xxxx.................xxxxxx +xxx.xxxx..........1.1.1..xxxxxx xxx.xxxxx.............xxxxxxxxx @...xxxxxxx.......xxxxxxxxxxxxx xxx.xxxxxxxxx...xxxxxxxxxxxxxxx @@ -215,11 +215,8 @@ ENDMAP NAME: lemuel_trickyentry_river TAGS: entry no_monster_gen ORIENT: float -SHUFFLE: {[( -SHUFFLE: ABC -SUBST: A = = -SUBST: B = x -SUBST: C = x +SHUFFLE: {[(, ABC +SUBST: A:=, B:x, C:x CHANCE: 1 MAP xxxxxxxxxxxxxxxxxxx @@ -277,8 +274,7 @@ NAME: david_trickyentry_002_a TAGS: entry no_monster_gen no_pool_fixup ORIENT: float CHANCE: 2 -SHUFFLE: {[( -SHUFFLE: wWl +SHUFFLE: {[(, wWl MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -301,8 +297,7 @@ NAME: david_trickyentry_002_b TAGS: entry no_monster_gen no_pool_fixup ORIENT: float CHANCE: 2 -SHUFFLE: {[( -SHUFFLE: wWl +SHUFFLE: {[(, wWl MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -325,8 +320,7 @@ NAME: david_trickyentry_002_c TAGS: entry no_monster_gen no_pool_fixup ORIENT: float CHANCE: 2 -SHUFFLE: {[( -SHUFFLE: wWl +SHUFFLE: {[(, wWl MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx=.....=xxxx @@ -349,8 +343,7 @@ NAME: david_trickyentry_002_d TAGS: entry no_monster_gen no_pool_fixup ORIENT: float CHANCE: 2 -SHUFFLE: {[( -SHUFFLE: wWl +SHUFFLE: {[(, wWl MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxx=.....=xxxx @@ -373,8 +366,7 @@ NAME: david_trickyentry_002_e TAGS: entry no_monster_gen no_pool_fixup ORIENT: float CHANCE: 2 -SHUFFLE: {[( -SHUFFLE: wWl +SHUFFLE: {[(, wWl MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -424,42 +416,24 @@ ENDMAP ############################################################################## # Evil foreboding -NAME: david_trickyentry_004_a +NAME: david_trickyentry_004 TAGS: entry no_monster_gen -MONS: troll +MONS: troll / w:40 giant bat ORIENT: float -CHANCE: 2 SHUFFLE: {[(< +SUBST: ?:?.l, ?=l. MAP {...............[ -......lll........ -...lll.lll....... -..l.llll.llll..l. -...lll]..1lllll.. -..ll.ll...ll..... -.....lll.ll...... -....ll.lll....... +....?.lll?....... +...lll?lll??..... +..l.llll.llll?.l. +..?lll]..1lllll?. +.?ll?ll...ll.??.. +...?.lll.ll??.... +....ll.lll?...... <...............( ENDMAP -NAME: david_trickyentry_004_b -TAGS: entry no_monster_gen -MONS: giant bat -ORIENT: float -CHANCE: 8 -SHUFFLE: {[(< -MAP -{...............< -......lll........ -...lll.lll....... -..l.l.lllllll..l. -...lll].11lllll.. -..ll.ll.11ll..... -.....lll.ll...... -....ll.lll....... -[...............( -ENDMAP - ############################################################################## # The pits are prepared @@ -540,19 +514,18 @@ ENDMAP NAME: david_trickyentry_006 TAGS: entry -MONS: weight:30 nothing / worm -MONS: weight:30 nothing / ooze / weight:2 jelly -MONS: weight:30 nothing / jackal / rat +MONS: w:30 nothing / worm +MONS: w:30 nothing / ooze / weight:2 jelly +MONS: w:30 nothing / jackal / rat FLAGS: no_rotate ORIENT: float SUBST: ?=Gx -SHUFFLE: xc -SHUFFLE: 123 +SHUFFLE: xc, 123 MAP ................. .xxxxxxxxxxxxxxx. -.x123132>332213x. -.x2312132211321x. +.x1231321332212x. +.x2312132211323x. .x3123213123132x. .x?????G+G?????x. .x.............x. @@ -604,8 +577,7 @@ NAME: david_trickyentry_008 TAGS: entry ITEM: nothing ORIENT: float -SHUFFLE: [{( -SHUFFLE: GIcbv= +SHUFFLE: [{(, GIcbv=, Iw, Gl MAP xxxxxxxxxxxxx x[....{....(x @@ -631,7 +603,7 @@ TAGS: entry no_monster_gen no_pool_fixup FLAGS: no_rotate CHANCE: 1 MONS: plant, plant / nothing -ITEM: bread ration / weight:20 meat ration, weight:20 any food / nothing +ITEM: bread ration / w:20 meat ration, w:20 any food / nothing ORIENT: float SHUFFLE: {[( SHUFFLE: lw @@ -666,14 +638,15 @@ ENDMAP NAME: david_trickyentry_010 TAGS: entry no_monster_gen no_pool_fixup MONS: nothing / hobgoblin / warg / war dog / hog / hound / wolf -MONS: nothing / giant gecko / giant iguana / giant lizard / giant newt -MONS: nothing / orc / generate_awake orc priest / generate_awake orc warrior / generate_awake orc wizard -MONS: nothing / generate_awake brain worm / generate_awake lava worm / generate_awake swamp worm / worm +MONS: giant gecko / giant iguana / giant lizard / giant newt +MONS: orc / generate_awake orc priest / generate_awake orc warrior / generate_awake orc wizard +MONS: generate_awake brain worm / generate_awake lava worm / generate_awake swamp worm / worm ITEM: any food ORIENT: float -SHUFFLE: {[( -SHUFFLE: lw -SHUFFLE: 1234d +SUBST: 2 = 2:40 . +SUBST: 3 = 3:40 . +SUBST: 4 = 4:40 . +SHUFFLE: {[(, lw, 1234d MAP xxxxxx@xxxxxx x...........x @@ -786,12 +759,14 @@ ENDMAP ############################################################################## # Being Mean Is Cool - +# (Has anyone a good guess on proper CHANCEs?) + NAME: erik_trickyentry_004_a TAGS: entry ORIENT: float -CHANCE: 5 -ITEM: scroll of curse armour, scroll of teleportation +CHANCE: 10 +ITEM: scroll of curse armour +ITEM: scroll of teleportation MAP xxxxx xxexx @@ -803,15 +778,35 @@ ENDMAP NAME: erik_trickyentry_004_b TAGS: entry ORIENT: float -CHANCE: 5 -ITEM: scroll of curse armour / scroll of random uselessness / scroll of identify -ITEM: scroll of curse armour / scroll of fear / scroll of teleportation +CHANCE: 10 +ITEM: scroll of curse armour, scroll of random uselessness, scroll of identify +ITEM: scroll of curse armour, scroll of fear, scroll of teleportation +SHUFFLE: def, ghi MAP @.....@ .xx=xx. -.xxexx. -.=d{e=. +.xxgxx. +.=d{g=. .xxdxx. .xx=xx. @.....@ ENDMAP + +NAME: erik_trickyentry_004_c +TAGS: entry +ORIENT: float +CHANCE: 10 +SHUFFLE: uU / vV / wW / zZ +SUBST: u==, v==, V=~, w=x, W=x, z==, Z=~. +ITEM: scroll of curse armour, scroll of random uselessness, scroll of identify +ITEM: scroll of curse armour, scroll of fear, scroll of teleportation +KFEAT: U = teleport trap +MAP +xxxxxxx +xZxxxWx +xxzgwxx +xxd{gxx +xxudvxx +xUxxxVx +xxxxxxx +ENDMAP diff --git a/crawl-ref/source/dat/vaults.des b/crawl-ref/source/dat/vaults.des index 0e1536f342..f9e60b91f6 100644 --- a/crawl-ref/source/dat/vaults.des +++ b/crawl-ref/source/dat/vaults.des @@ -188,14 +188,15 @@ # does the same thing - whitespace is not significant. # SUBST: ? = T:20 U V # makes T twice as likely to be used as U or V (the default weight -# is 10). Note that there has to be at least one space after T:20 -# and that whitespace in T:20 is not permitted. +# is 10). Note that there has to be at least one space before and after +# T:20 and that whitespace in T:20 is not permitted. # SUBST: ? : TUV # replaces occurrences of ? with one of TUV, and guarantees that all # occurrences of ? will get the same replacement symbol. -# The placeholder symbol can be any non-space, printable character apart from -# : and =. The replacement symbols can be any non-space printable character, -# including : and = ("SUBST: ? = +=:123def" is valid). +# +# The placeholder and replacement symbols can be any non-space, printable +# character, including : and =, apart from commas - "SUBST: = = +=:123def" is +# valid. # # SUBST: lines can safely replace symbols with themselves: # @@ -434,11 +435,8 @@ NAME: lemuel_entry_005_b TAGS: entry no_monster_gen ORIENT: float CHANCE: 5 -SHUFFLE: {[( -SHUFFLE: XYZ -SUBST: X = W -SUBST: Y = w -SUBST: Z = w +SHUFFLE: {[(, XYZ +SUBST: X=W, Y=w, Z=w MAP xxxxxxxxxxxxxxxxxxx xxxxx{...(...[xxxxx @@ -466,25 +464,26 @@ ENDMAP NAME: lemuel_entry_006_tunnels TAGS: entry no_monster_gen ORIENT: float +SUBST: ? = x. SHUFFLE: {[( MAP xxxxxxxxxxxxxxxxxxx x{xxxxxxxxxxxxxxxxx -x..xxxxxxxxxxxx[xxx -xx.xxxxxx(xxxxx...x -xx..xxxx..xxxxxxx.x -x...xx...xxxxxxxx.x -x.xxx..xxxxxx.....x -x..xx.xxxxxxx.xxxxx -xx..x.xxxxxx..xxxxx -xxx...xxxxx..xxxxxx +x..xxxxxxxxxxxx[x?x +xx.?xxxxx(xxxx?...x +x?..xxxx..xxxx???.x +x..?x?..?xxxx?x??.x +x.?xx..xxxxx?.....x +x.?xx.?xxxx?x.x???x +xx..?.xxxx??..xxxxx +xxx...?x??x..xxxxxx xxxxx.xx....xxxxxxx -xxxxx..x.xxxxxxxxxx -xxxxxx.x.xxxxxxxxxx -xxxxxx...xxxxxxxxxx -xxxxxxxx.xxxxxxxxxx -xxxxxxxx.xxxxxxxxxx -xxxxxxxx...xxxxxxxx +xxxxx..x.??xxxxxxxx +xxxxxx.?.xxxxxxxxxx +xxxxxx..??xxxxxxxxx +xxxxxx?x.xxxxxxxxxx +xxxxxxx?.?xxxxxxxxx +xxxxxxxx..?xxxxxxxx xxxxxxxxxx.xxxxxxxx ENDMAP @@ -494,16 +493,17 @@ ENDMAP NAME: lemuel_entry_007_funnel TAGS: entry no_monster_gen ORIENT: float +SUBST: c : x. MAP xxxxxxxxxxxxxxx x{.....(.....[x x.............x -xx...........xx -xx...........xx -xxx.........xxx -xxx.........xxx -xxxx.......xxxx -xxxx.......xxxx +xx...ccccc...xx +xx...ccccc...xx +xxx...ccc...xxx +xxx...ccc...xxx +xxxx...c...xxxx +xxxx...c...xxxx xxxxx.....xxxxx xxxxx.....xxxxx xxxxxx...xxxxxx @@ -520,22 +520,23 @@ NAME: lemuel_entry_008_muddy TAGS: entry no_monster_gen ORIENT: float SHUFFLE: {[( +SUBST: ? = w. MONS: nothing / plant, nothing / fungus MAP xxxxxxxxxxxxxxxxxxx xxxxx{..1..(.1ww.[x xxxxx1...1...11ww.x -xxxxxx..w.11....1.x -xxxxxx........2.1.x -xxxxxw..11......w.x -xxxxxw...........xx -xxxxx.11..22.2....x -xxxxx11.....w2....x -xxxxx....1.......xx -xxxxxx..1.......xxx -xxxxxx.....2....xxx -xxxxxx...2......xxx -xxxxx.....2.....xxx +xxxx?x..w.11..??1.x +xxx??x........2.1.x +xxx?ww..11.....?w.x +xxxxww?..........xx +xxx?w?11?.22.2....x +xxx?w11?....w2....x +xxxx???..1..???..xx +xxxxx?..1??..??.xxx +xxxx?x.....2?...xxx +xxxx?x...2......xxx +xxxx?w....2.....xxx xxxxx.22w......xxxx xxxxxxx..2.....xxxx xxxxxxx..2..22xxxxx @@ -553,28 +554,55 @@ NAME: lemuel_entry_009_a TAGS: entry ORIENT: float SHUFFLE: {[( +SUBST: ? : xcvG. CHANCE: 4 MAP xxxxxxxxxxx x{...(...[x x.........x -x.x.....x.x +x.?.....?.x x.........x x.........x -x.x.....x.x +x.?.....?.x x.........x x.........x -x.x.....x.x +x.?.....?.x x.........x x.........x -x.x.....x.x +x.?.....?.x x.........x x@...@...@x ENDMAP +NAME: lemuel_entry_009_b +TAGS: entry +ORIENT: float +SUBST: ? : xcvG. +ITEM: meat ration / bread ration / beef jerky / spear / potion of water / apple / club / hammer / knife +SHUFFLE: {[( +CHANCE: 3 +MAP +xxxxxxxxxxxx +x{...(...[xx +x.........xx +x.?.....?.xx +x.........xx +x.........xx +x.?.....?.xx +x.........xx +x.........xxxxxx +x.?.....?.xxxddx +x.........=..ddx +x.........xxxxxx +x.?.....?.xx +x.........xx +x@...@...@xx +ENDMAP + NAME: lemuel_entry_009_c TAGS: entry ORIENT: float +SUBST: ? : xcvG. ITEM: meat ration / bread ration / beef jerky / spear / potion of water / apple / club / hammer / knife SHUFFLE: {[( CHANCE: 3 @@ -582,27 +610,29 @@ MAP xxxxxxxxxxxx x{...(...[xx x.........xx -x.x.....x.xx +x.?.....?.xx x.........xx x.........xxxxxx -x.x.....x.xxxddx +x.?.....?.xxxddx x.........=..ddx x.........xxxxxx -x.x.....x.xx +x.?.....?.xx x.........xx x.........xx -x.x.....x.xx +x.?.....?.xx x.........xx x@...@...@xx ENDMAP ################################### -# behind the green door +# behind the door -NAME: lemuel_entry_010_green +NAME: lemuel_entry_010_a TAGS: entry +CHANCE: 5 ORIENT: float SHUFFLE: {( +SUBST: b : bcv MAP xxxxxxxxxxx x{...(...[x @@ -617,6 +647,22 @@ xbbbb+bbbbx x....@....x ENDMAP +NAME: lemuel_entry_010_b +TAGS: entry +CHANCE: 5 +ORIENT: float +SHUFFLE: {( +SUBST: b : bcv +MAP +xxxxxxxxxxx +x{...(...[x +x.........x +x.........x +x.........x +xbbbb+bbbbx +x....@....x +ENDMAP + ############################# # lemuel_lava_pool @@ -624,6 +670,7 @@ NAME: lemuel_entry_011_lava_pool TAGS: entry no_monster_gen ORIENT: float SHUFFLE: {[ +SUBST: l = l .:3 MAP xxxxxxxxxxxxxxx xxxxx..{..xxxxx @@ -648,10 +695,11 @@ ENDMAP # David's entry vaults ############################################################################## -NAME: david_entry_001 +NAME: david_entry_001_a TAGS: entry FLAGS: no_rotate ORIENT: float +CHANCE: 5 SHUFFLE: {[( MAP xxxxxxxxxxx@xxxxxxxxxxx @@ -674,6 +722,37 @@ xxxxx.............xxxxx xxxxxxxxxxxxxxxxxxxxxxx ENDMAP +NAME: david_entry_001_b +TAGS: entry +FLAGS: no_rotate +ORIENT: float +CHANCE: 5 +SHUFFLE: {[ +MAP +xxxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxx...xxxxxxxxxx +xxxxxxxxx..{..xxxxxxxxx +xxxxxxxxx.....xxxxxxxxx +xxxx...xxx...xxx...xxxx +xx.......xx+xx.......xx +x.........x.x.........x +x....[....+.+....(....x +x.........x.x.........x +xx.......xx+xx.......xx +xxxx...xxxx.xxxx...xxxx +xxxxxxxx.......xxxxxxxx +xxxxx.............xxxxx +xxxx...............xxxx +xxx.................xxx +xxx........T........xxx +xxx.......TTT.......xxx +xxx.................xxx +xxxx...............xxxx +xxxxx.............xxxxx +xxxxxxxx.......xxxxxxxx +xxxxxxxxxxx@xxxxxxxxxxx +ENDMAP + ############################################################################## # Three discs @@ -681,6 +760,9 @@ NAME: david_entry_002 TAGS: entry FLAGS: no_rotate ORIENT: float +SUBST: . : ?. +SUBST: ? = .:1000 % ~ +SUBST: ' = .x MAP xxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxx...xxxx @@ -693,11 +775,11 @@ x.........xxxxxx...xxxx xx.......xxxxxx.xxxxxxx xxxx...xxxxxx...xxxxxxx xxxxxxxxxxx.......xxxxx -xxx...x............xxxx -xx..x...xx....[....xxxx -xx.xxxxxxx.........xxxx -xx...x...xx.......xxxxx -xxxx...x..xxx...xxxxxxx +xxx...''...........xxxx +x'.''...xx....[....xxxx +x'.'xx'xxx.........xxxx +x'..''...xx.......xxxxx +xx''..''..xxx...xxxxxxx xxxxxxxxx@xxxxxxxxxxxxx ENDMAP @@ -709,6 +791,7 @@ TAGS: entry FLAGS: no_rotate ORIENT: float SHUFFLE: {[(< +SUBST: v:vx, c:vxc CHANCE: 2 MAP xxxxxxxxxxxxxxx@xxxxxxxxxxxxxxx @@ -734,6 +817,7 @@ TAGS: entry FLAGS: no_rotate ORIENT: float SHUFFLE: {[(< +SUBST: v:vx, c:vxc CHANCE: 2 MAP xxxxxxxxxxxxxxx@xxxxxxxxxxxxxxx @@ -759,6 +843,7 @@ TAGS: entry FLAGS: no_rotate ORIENT: float SHUFFLE: {[(< +SUBST: v:vx, c:vxc CHANCE: 2 MAP xxxxxxxxxxxxxxx@xxxxxxxxxxxxxxx @@ -784,6 +869,7 @@ TAGS: entry FLAGS: no_rotate ORIENT: float SHUFFLE: {[(< +SUBST: v:vx, c:vxc CHANCE: 2 MAP xxxxxxxxxxxxxxx@xxxxxxxxxxxxxxx @@ -809,6 +895,7 @@ TAGS: entry FLAGS: no_rotate ORIENT: float SHUFFLE: {[(< +SUBST: v:vx, c:vxc CHANCE: 2 MAP xxxxxxxxxxxxxxx@xxxxxxxxxxxxxxx @@ -962,36 +1049,32 @@ ccccccccccc@ccccccccccc ENDMAP ############################################################################## -# the imperial orb +# Moving archways NAME: david_entry_009 -TAGS: entry -FLAGS: no_rotate -ORIENT: float -SHUFFLE: {[ -MAP -xxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxx...xxxxxxxxxx -xxxxxxxxx..{..xxxxxxxxx -xxxxxxxxx.....xxxxxxxxx -xxxx...xxx...xxx...xxxx -xx.......xx+xx.......xx -x.........x.x.........x -x....[....+.+....(....x -x.........x.x.........x -xx.......xx+xx.......xx -xxxx...xxxx.xxxx...xxxx -xxxxxxxx.......xxxxxxxx -xxxxx.............xxxxx -xxxx...............xxxx -xxx.................xxx -xxx........T........xxx -xxx.......TTT.......xxx -xxx.................xxx -xxxx...............xxxx -xxxxx.............xxxxx -xxxxxxxx.......xxxxxxxx -xxxxxxxxxxx@xxxxxxxxxxx +TAGS: entry no_monster_gen +ORIENT: float +MONS: plant / fungus / nothing +SHUFFLE: _wl' +SUBST: l:wxl, _:xw~_, ':., +:+. +SUBST: ~ = ~:2 . +SUBST: _ = 1 . %:1 +SUBST: w = w W:3 +MAP +xxx.......@.......xxx +xxxx+xxx+xxx+xxx+xxxx +xxx___xwwwxlllx'''xxx +xxx___xwwwxlllx'''xxx +xxx___xwwwxlllx'''xxx +xxx___xwwwxlllx'''xxx +xxx___xwwwxlllx'''xxx +xxx___xwwwxlllx'''xxx +xxxx+xxx+xxx+xxx+xxxx +xxx...............xxx +xxxx.............xxxx +xxxxxxx.......xxxxxxx +xxxxxxxxx[{(xxxxxxxxx +xxxxxxxxxxxxxxxxxxxxx ENDMAP ############################################################################## @@ -1207,32 +1290,33 @@ TAGS: entry no_monster_gen ORIENT: float FLAGS: no_rotate MONS: fungus -SHUFFLE: {[( +SHUFFLE: {[(, b:bcv, UVW, XYZ +SUBST: '=.x, U==, V=x, W=x, X==, Y=x, Z=x MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxx..xxxxxxxxxxxxxxxxx%xxxxxxxxxxxxx -xxx...x.....x...xxxxxxxxxxx.0%%xxxxxxxxxxx -xx..(....xx...x..xxxxxxxxxx.x.xxxxxxxxxxxx -xx.....xxx..xxx..xxxxxxxxxx...xxxxxxxxxxxx -xxx...xxxx=xxxxx..xx...xxxxx0xxxxxxxxxxxxx -xxxxxxxxx=xxxxxx..x..x..xxx.xxxxxxxxxxxx.. -xxxxxxx....xxxxxx...xx..xxxx..xxxxxxx..... -xxxxx...xx..xxxxxxxxx..xxxxxxx.xxxx....... -xxxx..xxxx..xxxxxxxx..xxxxxxx0xxxx........ -xxxx..xxxxx..xxxxxx.....xxxx.xxxx......... -xxxxx...xxxx..xxxx.......xxx0xxxx......... -xxxx.....xxx..xxx...bbb...x=xxxx.......... -xxxx..{..xx..xxxx..bbbbb....xx...........@ -xxxxx...xxx..xxx...bbbbb..x....x.......... -xxxxxxxxxxxx..x.....bbb...xxx=xxx......... -xxxxxxxxxxxxx....x.......xxx.xxxx......... -xxxxxxxxxxxxxxx.xxx.....xxx..xxxxx........ +xxxxxxxxx''xxxxxxxxxxxxxxxxx%xxxxxxxxxxxxx +xxx...x''...x...xxxxxxxxxxx.0%%xxxxxxxxxxx +xx..(....xx..''..xxxxxxxxxx.x.xxxxxxxxxxxx +xx.....xxx'.xxx..xxxx''xxxx...xxxxxxxxxxxx +xxx...xxxx=xxxxx.'xx'..'xxxx0xxxxxxxxxxxxx +xxxxxxx'x=xxxxxx'.x..x.'xxx.xxxxxxxxxxxx.. +xxxxx''...'xxxxxx'..xx..'xxx..xxxxxxx..... +xxxxx'..x'..xxxxxx'x'..x'xxxxx.xxxx....... +xxxx..'xxx..'xxxxxxx'.xxxxxxx0x.Wx........ +xxxx..xxxxx..'xxxxx.....xxxx.xxxx......... +xxxxx...xx'x..'xxx.......xxx0xxxx......... +xxxx.....x'x..'xx...bbb...xUxVxx.......... +xxxx..{..xx..x''x..bbbbb....x'...........@ +xxxxx...xx''.xxx...bbbbb..x....x.......... +xxxxxxxxxxxx.'x.....bbb...xxxYxxx......... +xxxxxxxxxxxxx....x.......xXx.xxxx......... +xxxxxxxxxxxxxxx'xxx.....xxx..xxxxx........ xxxxxxxxxxxxxx=xxxxxx..xxx..xxxxxxx....... -xxxxxxxxxxxxx=xxxxxx..xxxx.xxxxxxxxxx..... -xx...x..xxxxx..xxxxx...xx1.xxxxxxxxxxxxx.. -x..[.......x....xxxxx..xxx..xxxxxwxxwwxxxx -x.....xxx....xx..xxx..xxxxx1...wwwwwxxwxxx -xx...xxxxxxxxxxx.....xxxxxxxxx.wwwxxxxxxxx +xxxxxx'xxxxxx=xxxxxx.''xxx.xxxxxxxxxx..... +xx...x.'xxxxx'.xxxxx'...Z1.xxxxxxxxxxxxx.. +x..[.......'...'x'xxx..'xx..xxxxxwxxwwxxxx +x.....xxx...'x'..xxx..'xxxx1...wwwwwxxwxxx +xx...xxxx''x'xxx'..'.xxxxxxxxx.wwwxxxxxxxx xxxxxxxxxxxxxxxxxx..xxxxxxxxxxwwxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ENDMAP @@ -1598,7 +1682,7 @@ ENDMAP NAME: david_entry_016_chase TAGS: entry no_monster_gen no_pool_fixup -MONS: kobold, hobgoblin +MONS: kobold, hobgoblin / goblin / giant bat ITEM: stone, dart ORIENT: float FLAGS: no_rotate @@ -1625,6 +1709,7 @@ NAME: david_entry_017_fractal TAGS: entry no_monster_gen ORIENT: float FLAGS: no_rotate +KFEAT: X = teleport trap SHUFFLE: {[( MAP xxxxx+xxxxx+xxxxxxxxxxx@x @@ -1649,8 +1734,8 @@ xx+xxx..................x xx.xx...................x x..x....................x xxx.....................x -xx......................x -@.......................x +xx....................G.x +@......................Xx xxxxxxxxxxxxxxxxxxxxxxxxx ENDMAP @@ -1726,7 +1811,7 @@ ENDMAP NAME: david_021_tetris TAGS: entry ORIENT: float -SHUFFLE: {[( +SHUFFLE: {[(, bcvx MAP xxxxxxxxxxx.@.xxxxxxxxxxx xxxxxxxxxxx...xxxxxxxxxxx @@ -1759,9 +1844,9 @@ ENDMAP NAME: david_022_central TAGS: entry -MONS: gnoll +MONS: gnoll, jackal, worm ORIENT: float -SHUFFLE: {[(< +SHUFFLE: {[(<, 123 MAP xxxxxxxxxxxxxxxx@xxxxxxxxxxxxxxxx xxxxxxxxxxx...........xxxxxxxxxxx @@ -1881,8 +1966,7 @@ MONS: worm / giant beetle ITEM: nothing / ring of hunger / protection from fire / protection from cold ITEM: nothing / choko / pear / apple / sausage / banana / any scroll CHANCE: 2 -SHUFFLE: {( -SHUFFLE: cv +SHUFFLE: {(, cvx MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxvxvx...............xvxvxxxxxx @@ -1921,8 +2005,7 @@ MONS: worm / giant beetle ITEM: nothing / ring of hunger / protection from fire / protection from cold ITEM: nothing / choko / pear / apple / sausage / banana / any scroll CHANCE: 2 -SHUFFLE: {( -SHUFFLE: cv +SHUFFLE: {(, cvx MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxvxvx...............xvxvxxxxxx @@ -1961,8 +2044,7 @@ MONS: worm / giant beetle ITEM: nothing / ring of hunger / protection from fire / protection from cold ITEM: nothing / choko / pear / apple / sausage / banana / any scroll CHANCE: 2 -SHUFFLE: {( -SHUFFLE: cv +SHUFFLE: {(, cvx MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxvxvx...............xvxvxxxxxx @@ -2001,8 +2083,7 @@ MONS: worm / giant beetle ITEM: nothing / ring of hunger / protection from fire / protection from cold ITEM: nothing / choko / pear / apple / sausage / banana / any scroll CHANCE: 2 -SHUFFLE: {( -SHUFFLE: cv +SHUFFLE: {(, cvx MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxvxvx...............xvxvxxxxxx @@ -2040,8 +2121,7 @@ FLAGS: no_rotate MONS: worm / giant beetle ITEM: nothing / ring of hunger / protection from fire / protection from cold CHANCE: 1 -SHUFFLE: {( -SHUFFLE: cv +SHUFFLE: {(, cvx MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxvxvx...............xvxvxxxxxx @@ -2079,8 +2159,7 @@ FLAGS: no_rotate MONS: worm / giant beetle ITEM: nothing / choko / pear / apple / sausage / banana / any scroll CHANCE: 1 -SHUFFLE: {( -SHUFFLE: cv +SHUFFLE: {(, cvx MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxvxvx...............xvxvxxxxxx @@ -2119,6 +2198,7 @@ TAGS: entry no_monster_gen MONS: generate_awake jelly ITEM: dart ORIENT: float +KFEAT: X = teleport trap SHUFFLE: {[( MAP xxxxxxxxxxxxxxxxxxxxx....@..... @@ -2126,10 +2206,10 @@ xxxxx......xxxxxxxxxx.........@ xxx............xxxxxx.......... xx................xxxxxxxxxxxxx xx....vvvv.......xx.....xxxxxxx -.....vv1dvv......x...{.....xxxx -@....vddd>v..................xx -.....vvddvv....x....vvv.......x -xxx...vvvv....xx...vvvvv..(...x +.....vv1dvvv.....x...{.....xxxx +@....vddd+Xvv................xx +.....vvddvvv...x....vvv.......x +xxx...vvvvv...xx...vvvvv..(...x xxx..........xx....vvvvv.....xx xxx..........xx.....vvv......xx xxxx........xx..............xxx @@ -2145,11 +2225,12 @@ NAME: david_028_sounds_drone TAGS: entry no_monster_gen MONS: generate_awake boring beetle FLAGS: no_rotate +KFEAT: X = teleport trap ORIENT: float SHUFFLE: {[(< MAP xxx.....@....ccccc....@.....xxx -xx...........cx>xc...........xx +xx...........cxXxc...........xx x............cxxxc............x .............cxxxc............. .............cxxxc............. @@ -2157,7 +2238,7 @@ x............cxxxc............x .............cxxxc............. ccccccccccccccxxxcccccccccccccc cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc -c>xxxxxxxxxxxxx1xxxxxxxxxxxxx>c +cXxxxxxxxxxxxxx1xxxxxxxxxxxxxXc cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxc ccccccccccccccxxxcccccccccccccc .............cxxxc............. @@ -2165,7 +2246,7 @@ ccccccccccccccxxxcccccccccccccc .............cxxxc............. .............cxxxc............. x............cxxxc............x -xx...........cx>xc...........xx +xx...........cxXxc...........xx xxx.....@....ccccc....@.....xxx ENDMAP @@ -2176,25 +2257,26 @@ NAME: david_entry_029 TAGS: entry ORIENT: float SHUFFLE: [{ +SUBST: ':'.x, '=.x MAP xxxxxxxxxxxxxxxxxxxxx -xxxxx..xx......xx..xx -xxxx.......xxx..x...x -xxxx..{...xx........x -xxx......x....[....xx -xxx...............xxx -xxx............xxxxxx -xx..........xxxxxxxxx -xx.........xxxxxxxxx. -x.......xxxxxxxxxxx.. -x.....xxxxxxxxxxxxx.@ -x..xxxxxxxxxxxxxx.... -x...xxxxxx....x...xxx -x.......x..xx...xxxxx -x...........xxxxxxxxx -xx...(.xxx.......xxxx -xxx.....xxxx.......xx -xxxxxx...xxxxx......x +xxxxx''xx''''''xx''xx +xxxx''..'..xxx.'x..'x +xxxx'.{...xx'......'x +xxx'.....x''..[...'xx +xxx'....'.......''xxx +xxx'.........''xxxxxx +xx'........'xxxxxxxxx +xx'......''xxxxxxxxx. +x'.....'xxxxxxxxxxx.. +x...''xxxxxxxxxxxxx.@ +x.'xxxxxxxxxxxxxx.... +x..'xxxxxx''.'x..'xxx +x'...'''x'.xx..'xxxxx +x'..........xxxxxxxxx +xx'..(.xxx'....''xxxx +xxx'....xxxx''...''xx +xxxxxx'''xxxxx''...'x xxxxxxxxxxxxxxx..@..x ENDMAP @@ -2205,23 +2287,24 @@ NAME: david_entry_030 TAGS: entry ORIENT: float SHUFFLE: {[( -MAP -xxxxxxx..@..xxxxx -xxxxxx........xxx -xxxx....xxxx..xxx -xxx....xxxxx...xx -xxx.(..xxxxxx..xx -xx......xxxxx...x -xx.......xxxxx... -x....xx....xx...@ -...xxxxx........x -@..xxxx......[..x -....x..........xx -x......{..xxx...x -xx.......xxxx..xx -xxxxx..xxxxxxx.xx -xxxxx.x.xxxxx..xx -xxxx...@..xx.@..x +SUBST: ':'.x, '=.x +MAP +xxxxxxx'.@.'xxxxx +xxxxxx'..'...'xxx +xxxx'...xxxx..xxx +xxx...'xxxxx'.'xx +xxx.(.'xxxxxx..xx +xx'....'xxxxx'..x +xx...'...xxxxx'.' +x..''xx'..'xx...@ +..'xxxxx.'.'...'x +@.'xxxx'.....[.'x +'..'x'....''...xx +x'.....{.'xxx'.'x +xx'''....xxxx'.xx +xxxxx.'xxxxxxx.xx +xxxxx.x'xxxxx.'xx +xxxx'..@''xx.@.'x ENDMAP ############################################################################## @@ -2232,23 +2315,24 @@ TAGS: entry no_monster_gen ORIENT: float MONS: goblin, rat, giant bat SHUFFLE: {[( +SUBST: ?:?.w, ?=.w, ':'.x, '=.x MAP xxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxx.xx1..xxxxxxxx..33x -xxxx.....xxx.xxx.x.x..xxxx -xx....w...........x..xxx.x -x...www.....www..xx...2x.. -x..www....w.wwww......xx.@ -xx......wwww.www..ww..x... -xxx....wwww...wwwww..xx.xx -..xx...www.[({.www..xx.xxx -@..xx.wwwww...wwwww...xx.x -..xx...wwwww.wwwww...x..xx -x..xxx...wwww.ww......xxxx -xx..x......www......xxxx.x -xxx............xx..x.....x -xxxx.....xxxxxxx......x.2x -xxx..xxxxx...xxxxxx..xx1xx +xxxxxxx?xx1.'xxxxxxxx'.33x +xxxx'.??.xxx.xxx.x.x..xxxx +xx'..?w.....?.....x..xxx'x +x'.?www?.?.?www?.xx...2x.' +x'?www?.??w.wwww?...?.xx.@ +xx.???.?wwww.www.?ww..x..' +xxx'..?wwww??.wwwww?.xx.xx +''xx..?www?[({?www?.xx.xxx +@..xx?wwwww???wwwww?..xx'x +..xx..?wwwww.wwwww?..x..xx +x'.xxx.??wwww.ww.??...xxxx +xx..x....??www.??...xxxx'x +xxx...??....??.xx?.x.....x +xxxx'...'xxxxxxx''...'x.2x +xxx'.xxxxx'''xxxxxx''xx1xx xxxxxxxxxx.@.xxxxxxxxxxxxx ENDMAP @@ -2259,20 +2343,21 @@ NAME: david_entry_032 TAGS: entry no_monster_gen ORIENT: float SHUFFLE: {[( +SUBST: ?:?.w, ?=.w, ':'.x, '=.x MAP xxxxxxxxxxxxxxxxxxxxxxxxxxx -xwwwwwwwww................. -xwwwwww......w............. -xwww......w.www......x..... -xww......ww.w.ww....xx..... -xw......ww[www..w.......... -xw..(..wwwwwwwww..........@ -xw.....ww{wwww..w.....x.... -xww......wwww..ww.....x.... -xww.........wwww...x....... -xwww..............x....xx.. -xwwwwwwww.................. -xxxxxxxxxxxxxxxxx..@....... +xwwwwwwwww?......'''....''. +xwwwwww??...?w?......'..... +xwww??....w.www??...'x'..'. +xww??...?ww.w.ww.?..xx..... +xw?....?ww[www..w.?..'..... +xw?.(.?wwwwwwwww......'...@ +xw?....ww{wwww..w....'x.'.. +xww??...?wwww?.ww?....x.''. +xwww??.....?wwww...x..'.... +xwwwwww??....???..'x....xx' +xwwwwwwww??''...........''' +xxxxxxxxxxxxxxxxx..@....''' ENDMAP ############################################################################## @@ -2326,18 +2411,19 @@ ENDMAP NAME: david_entry_034 TAGS: entry ORIENT: float -SHUFFLE: {[( +SHUFFLE: {[(, +' +SUBST: ':'x+, '=x+ MAP xxxxxxx.@.xxxxxxx x.....x...x.....x -x..(..x...+..[..x +x..(..'...+..[..x x.....xx.xx.....x -xxx+xxxx.xxxxxxxx +xxx+xxxx.xxxx'xxx @....xx...xx....@ .....xx...xx..... xxx+xxxx.xxxx+xxx x.....xx.xx.....x -x..{..x...x..]..x +x..{..'...'..]..x x.....x...x.....x xxxxxxx.@.xxxxxxx ENDMAP @@ -2609,14 +2695,15 @@ NAME: david_entry_039 TAGS: entry ORIENT: float SHUFFLE: {[( +SUBST: '=cx., "=+.= MAP xxxxxxxxxxxxxxxxxxxx xccccccx.......x..c. -xccccccc..ccx..x..x. -xcc.(..c.....c..x... -xcc.[..+..c..+.x...@ -xcc.{..c..cxxc....x. -xccccccc..x.....xx.. +xccccccc..ccx'.x..x. +xcc.(..c..'..c.'=''. +xcc.[..+..c..+.x.."@ +xcc.{..c..cxxc.'..x. +xccccccc..x....'xx'. xcccccxxc...cc...... xxxxxxxxxxxxxxxxxxxx ENDMAP @@ -2647,19 +2734,21 @@ ENDMAP NAME: david_entry_041 TAGS: entry ORIENT: float -SHUFFLE: {[( +SHUFFLE: {[(, vcx +SUBST: ? = x= +SUBST: ' = x. MAP xxxxxxxxxxxxxxxx.@ -@...xxxxxx..xx.=.. -xxx..xxxx.xx..xx.. -xxxx..xxx=xxxxxx.. +@...xxxxxx.'xx.?.. +xxx'.xxxx.xx..xx.. +xxxx.'xxx?xxxxxx.. xxxxx.xxx.xxxxxx.. xx[x.......xxxxx.. -xx...vvvv...xxxx.. -x..vvvvvvv....xx.. -x..vvvvvv..xx..x.. -xx..vv....xxxx.x.. -x(x....xx{xxxx.=.. +xx...vvvv..'xxxx.. +x'.vvvvvvv....xx.. +x..vvvvvv..xx'.x.. +xx..vv....xxxx'x.. +x(x'...xx{xxxx.?.. xxxxxxxxxxxxxxxxxx ENDMAP @@ -2670,22 +2759,23 @@ NAME: david_entry_042 TAGS: entry ORIENT: float SHUFFLE: {[( +SUBST: ':'.x, '=x. MAP xxxx@xxxxxxxxx xxxx.xxxx...xx -xx....xx..x..@ -x...x.......xx -x.........xxxx -x.........xxxx -x..........xxx -xx...xxx....xx -xx..xxxxxx..xx -xx..xxxxxxx..x -xxx..xxxxxx..x +xx'...xx..x..@ +x'..x..'....xx +x'.......'xxxx +x'........xxxx +x'...''....xxx +xx..'xxx'...xx +xx.'xxxxxx..xx +xx..xxxxxxx.'x +xxx.'xxxxxx..x xxx..xxxxxx.{x xxxx..xxxx..xx -xxxxx...xx..xx -xxxxxxx.(.[.xx +xxxxx...xx.'xx +xxxxxxx.(.['xx xxxxxxxxxxxxxx ENDMAP @@ -2696,18 +2786,19 @@ NAME: david_entry_043 TAGS: entry ORIENT: float SHUFFLE: {[( +SUBST: ':'.x, '=x., ":".c, "=.c MAP xxxxxxxxxxxxxxxxxxxxxxxx xxxxx.....xxxxxxxxxxxxxx -xxx..........xxxxxxxxxxx -xx....ccc..[.....xxxxxxx -x...cccccc....cc...xxx.@ -x.{.ccccc.......cc..x.x. -x....cc.....xx...c...xx. -xx......(..xxxx......xx. -xx........xxxxxxxx..xxx. -xx.....xxxxxxxxxxxx.xxx. -xxx..xxxxxxxxxxxxxx.xxx. +xxx'.."""....xxxxxxxxxxx +xx'.."ccc".[.....xxxxxxx +x...cccccc"...cc...xxx.@ +x.{.ccccc"..'.."cc..x.x. +x....cc....'xx.."c".'xx. +xx......(.'xxxx'....'xx. +xx'..''...xxxxxxxx.'xxx. +xx'..''xxxxxxxxxxxx.xxx. +xxx''xxxxxxxxxxxxxx.xxx. xxxxxxxxxxxxxxxxxxx@...@ ENDMAP @@ -2779,7 +2870,7 @@ ORIENT: float SHUFFLE: {[( MAP xx.(..x..xx. -xx...xx...x. +xx...xx...=. .....xxx..xx ....xxx...x. x...xx....x. @@ -2797,7 +2888,7 @@ ENDMAP NAME: david_entry_047 TAGS: entry ORIENT: float -SHUFFLE: {[( +SHUFFLE: {[(, TVG MAP xxxxx.@.xxxxx x...........x @@ -2821,8 +2912,7 @@ TAGS: entry no_monster_gen FLAGS: no_rotate ORIENT: float CHANCE: 5 -SHUFFLE: {[( -SHUFFLE: cvba +SHUFFLE: {[(, cvba MAP xxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx...xxxx..xxxxxx @@ -2840,8 +2930,7 @@ TAGS: entry no_monster_gen FLAGS: no_rotate ORIENT: float CHANCE: 5 -SHUFFLE: {[( -SHUFFLE: cvba +SHUFFLE: {[(, cvba MAP xxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxx...xxxx..xxxxxx @@ -2860,8 +2949,7 @@ ENDMAP NAME: david_entry_049 TAGS: entry ORIENT: float -SHUFFLE: {[( -SHUFFLE: cv +SHUFFLE: {[(, cv MAP xxxxxxxxxxxxxxxxxxxxxxxxxx xcxcxcxcxcxcxcxcxcxcxcxxcx @@ -2881,22 +2969,23 @@ ENDMAP NAME: david_entry_050 TAGS: entry ORIENT: float -SHUFFLE: {[( +SHUFFLE: {[(, TcGv, XY +SUBST: ':.x, X=+=x, Y=+=x MAP xxxxxxxxxxxxxxxxxx..@ -x.......xxxxxxxxxx... -x.......xxxx...xxx... -x..x+x.xxx...T...x... -x..x.x.[xx.......x... -xxxx.xxxxx..x+x..x... -xxxx.xxxxxxxx.xxxxxxx +x'''''''xxxxxxxxxx... +x'.....'xxxx...xxx... +x'.x+x.xxx'..T..'x... +x..x.x.[xx.......Y... +xxxx.xxxxx''x+x''x... +xxxx.xxxxxxxx.xxxxxXx @...................@ xxxxxx.xxxxxxxxxxx.xx -xxxxxx+xxxxxx....x.xx -xxxx.....xxxx.c..x.xx -xxx.......xxx.{..+.xx -xxx..xxx..xxx.c..xxxx -xxxx..(..xxxx....xxxx +xxxxxx+xxxxxx...'x.xx +xxxx''.''xxxx.c..x.xx +xxx'.....'xxx.{..+.xx +xxx'.xxx.'xxx.c..xxxx +xxxx..(..xxxx...'xxxx xxxxxxxxxxxxxxxxxxxxx ENDMAP @@ -2979,6 +3068,7 @@ NAME: david_entry_051_d TAGS: entry no_monster_gen ORIENT: float CHANCE: 1 +SHUFFLE: cvb MAP xxxxxxxxxxxxxxxxxxxx...@ xxxxxxx.......xxx[.=.... @@ -3004,8 +3094,10 @@ ENDMAP NAME: david_entry_052 TAGS: entry -MONS: rat +MONS: rat, goblin, giant bat ORIENT: float +SHUFFLE: [{( +SUBST: X = x= MAP xxxxxxxxxxxx..@ xx.1.%1xxxxx... @@ -3013,7 +3105,7 @@ x%.1.....xxx(.. x1........xx... xxx...xx..xx... xxxxxxxxx.1x... -xxxxxxxxxx+x=xx +xxxxxxxxxx+xXxx ..[.xxxxxx....x ....xxxxxx.{..x @...xxxxxxxx@xx @@ -3024,9 +3116,10 @@ ENDMAP NAME: david_entry_053 TAGS: entry no_monster_gen -MONS: jackal +MONS: jackal / worm ORIENT: float SHUFFLE: {( +SUBST: l = l. MAP xxxxxxxxxxxxxxxxx@xxx @.xx...xx..xx..xx.xxx @@ -3051,6 +3144,7 @@ ENDMAP NAME: david_entry_054 TAGS: entry ORIENT: float +SUBST: c:xc, T:TGv., %:%.T MAP ..................... ..................... @@ -3072,11 +3166,11 @@ ENDMAP # Just another circle NAME: david_entry_055_a -TAGS: entry +TAGS: entry no_monster_gen ORIENT: float FLAGS: no_rotate CHANCE: 5 -SHUFFLE: {[( +SHUFFLE: {[(, lw MAP xxxxxxxxxxxxxxxxxxxxxxx xxxxxxx.........xxxxxxx @@ -3098,10 +3192,10 @@ xxxxxxxxxxxxxxxxxxxxxxx ENDMAP NAME: david_entry_055_b -TAGS: entry +TAGS: entry no_monster_gen ORIENT: float CHANCE: 5 -SHUFFLE: {[( +SHUFFLE: {[(, lw MAP xxxxxxxxxxx@xxxxxxxxxxx xxxxxxx.........xxxxxxx @@ -3131,8 +3225,7 @@ ORIENT: float CHANCE: 5 FLAGS: no_rotate ITEM: nothing, nothing, nothing -SHUFFLE: cbv -SHUFFLE: def} +SHUFFLE: cbvx, def} MAP .............................. ...............cc............. @@ -3160,7 +3253,7 @@ TAGS: entry ORIENT: float CHANCE: 5 FLAGS: no_rotate -SHUFFLE: cbv +SHUFFLE: cbvx MAP .......................... ............cc............ @@ -3320,9 +3413,7 @@ NAME: david_entry_059 TAGS: entry ORIENT: float ITEM: nothing, nothing -SHUFFLE: =+ -SHUFFLE: TV -SHUFFLE: {[ +SHUFFLE: =+, TVG, {[ MAP xx@...@xxxxxxxx xx+xxx+xxxxxxxx @@ -3345,10 +3436,7 @@ NAME: david_entry_060 TAGS: entry ORIENT: float ITEM: nothing, nothing -SHUFFLE: =+ -SHUFFLE: cx -SHUFFLE: de/{( -SHUFFLE: {[( +SHUFFLE: =+, cx, de/{(, {[( MAP @.............@ .....xx+xx..... @@ -3371,50 +3459,54 @@ TAGS: entry no_monster_gen ORIENT: northwest SUBST: ?=l. CHANCE: 6 +KFEAT: X = teleport trap SHUFFLE: Cc MAP -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxClllllllll?...@ -xxxxxxllllllll??..... -xxxxxxlllllllll...... -xxxxxxlllllllll...... -xxxxxxlllllllll...... -xxxxxxllllllll?...... -xxxxxxllllllll....... -xxxxxxlllllll?....... -xxxxxx?ll?ll?.....{.. -xxxxxxl.??........... -xxxxxx..............@ +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxXlllllllllll.... +xxxxxxlClllllllll?...@ +xxxxxxlllllllll??..... +xxxxxxllllllllll...... +xxxxxxllllllllll...... +xxxxxxllllllllll...... +xxxxxxlllllllll?...... +xxxxxxlllllllll....... +xxxxxxllllllll?....... +xxxxxxl?ll?ll?.....{.. +xxxxxxll.??........... +xxxxxxl..............@ ENDMAP NAME: david_entry_061_b_altar TAGS: entry no_monster_gen ORIENT: northwest CHANCE: 4 +KFEAT: X = teleport trap SHUFFLE: Cc MAP -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxxxxxxxxxxx -xxxxxxCwwwwwwwwwww..@ -xxxxxxwwwwwwwwwww.... -xxxxxxwwwwwwwwwww.... -xxxxxxwwwwwwwwww..... -xxxxxxwwwwwwwwww..... -xxxxxxwwwwwwwww...... -xxxxxxwwwwwwwww...... -xxxxxxwwwwwwww....... -xxxxxxwwwwwww.....{.. -xxxxxxwwwww.......... -xxxxxx..............@ +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxxxxxxxxxxxxxxxxx +xxxxxxXwwwwwwwwwwwwww. +xxxxxxwCwwwwwwwwwww..@ +xxxxxxwwwwwwwwwwww.... +xxxxxxwwwwwwwwwwww.... +xxxxxxwwwwwwwwwww..... +xxxxxxwwwwwwwwwww..... +xxxxxxwwwwwwwwww...... +xxxxxxwwwwwwwwww...... +xxxxxxwwwwwwwww....... +xxxxxxwwwwwwww.....{.. +xxxxxxwwwwww.......... +xxxxxxw..............@ ENDMAP ############################################################################## @@ -3423,7 +3515,7 @@ ENDMAP NAME: david_entry_062 TAGS: entry no_monster_gen no_pool_fixup ORIENT: float -SHUFFLE: {[ +SHUFFLE: {[, lw MAP .......xxxxxx@0 @+xlllxx......@ @@ -3628,6 +3720,7 @@ TAGS: entry ORIENT: float CHANCE: 1 SHUFFLE: {[( +SUBST: X : x:20 G:4 l:1 MAP cccccccccccccccccccccccccccccccccccccccc c[c..c...cc......c.....................c @@ -3637,12 +3730,12 @@ c..cccc.cc..c..cc.......c..............c c.cc...c.c..c......c...c....xxxxxxxx...c cc.c.ccc..c...c..cc...c....xxxxT9T.x...c ccc.ccc.c.c..c...c..c.....xxxxx....x...c -c{ccc..cc.cc......cc......G.x$x.C..x...@ -c.c...c.cc.c..cc............+0x..9.x...c +c{ccc..cc.cc......cc......G.x$X.C9.x...@ +c.c...c.cc.c..cc............+0x....x...c cc.cccccc.c...c..c..cc......+0x....x...c -cccc.c...c..c...c.........G.x$x.C.>x...c +cccc.c...c..c...c.........G.x$X.C..x...c c.cc..ccc.c.......c...c...xxxxx....x...c -c..cc.c.c...cc...ccc...cc..xxxxT.T.x...c +c..cc.c.c...cc...ccc...cc..xxxxT.T>x...c cc..cc.cc.cc....c....c......xxxxxxxx...c c(.c..c.cc...c......c..................c cccccccccccccccccccccccccccccccccccccccc @@ -3666,9 +3759,9 @@ ccc.ccc.c.c..c...c..c.....xxxxx1...x...c c{ccc..cc.cc......cc......G.x$x.V..x...@ c.c...c.cc.c..cc............+0x....x...c cc.cccccc.c...c..c..cc......+0x.1..x...c -cccc.c...c..c...c.........G.x$x.V.>x...c +cccc.c...c..c...c.........G.x$x.V..x...c c.cc..ccc.c.......c...c...xxxxx....x...c -c..cc.c.c...cc...ccc...cc..xxxxT.T.x...c +c..cc.c.c...cc...ccc...cc..xxxxT.T>x...c cc..cc.cc.cc....c....c......xxxxxxxx...c c(.c..c.cc...c......c..................c cccccccccccccccccccccccccccccccccccccccc @@ -3718,9 +3811,9 @@ ccc.ccc.c.c..c...c..c.....xxxxx....x...c c{ccc..cc.cc......cc......G.x$x.V..x...@ c.c...c.cc.c..cc............+0x...1x...c cc.cccccc.c...c..c..cc......+0x1...x...c -cccc.c...c..c...c.........G.x$x.V.>x...c +cccc.c...c..c...c.........G.x$x.V..x...c c.cc..ccc.c.......c...c...xxxxx....x...c -c..cc.c.c...cc...ccc...cc..xxxxT.T.x...c +c..cc.c.c...cc...ccc...cc..xxxxT.T>x...c cc..cc.cc.cc....c....c......xxxxxxxx...c c(.c..c.cc...c......c..................c cccccccccccccccccccccccccccccccccccccccc @@ -4035,7 +4128,7 @@ ENDMAP NAME: matt_entry_002 TAGS: entry ORIENT: float -SHUFFLE: {[ +SHUFFLE: {[, TU MAP xxxxxxxxxx@xxxxxxxxxx x..x.............x..x @@ -4063,22 +4156,23 @@ NAME: matt_entry_003 TAGS: entry no_monster_gen ORIENT: float SHUFFLE: {[( +SUBST: ':x., ":x., ?:x., _:x. MAP xxxxxxxxxx@xxxxxxxxxx -xx.................xx -x.x........x......x.x +xx..........'......xx +x.x......_.x......x.x x..x......x......x..x -x...x....x.x....x...x +x...x....x.x."..x...x x....x..x...x..x....x -x.....xx.....xx.....x +x.....xx...".xx.....x x.....x...x...x.....x -x..x.x...x.....x....@ +x..x.x.?.x.....x....@ @...x...x.(.[.x.x...x -x....x...x.{.x......x -x.....x...x.x.x.....x +x..'.x.".x.{.x..._..x +x.'...x...x.x.x.....x x....x.x...x...x....x x...x...x...x...x...x -x..x.....x.......x..x +x..x.....x...?...x..x x.x.......x.......x.x xx.................xx xxxxxxxxxx@xxxxxxxxxx @@ -4091,27 +4185,28 @@ NAME: matt_entry_004 TAGS: entry ORIENT: float SHUFFLE: {[( +SUBST: ':'.x, '=x. MAP xxxxxxx@xxxxxxxxxxxxx@xxxxxxx -x....x....x.................x -x.....xxxx............x.....x -x.................xx..x.....x -x........x..........xx.xx...x -x....x.......x.x.....x......x -x...x.x..............x......x -x....x.......x.x.........x..x -x........xxx..{...x......x..x -@........................x..x -x........xxx...xx........x..x -x....x........xx.x...[....x.@ -x........x....x.xx........x.x -x.....x.......x.x........x..x -x............xx.x...x....x..x -x..x.....(...x.xx........x..x -x......x.........xx......x..x +x....x..'.x.................x +x...'.xxxx...........'x.....x +x'..''.''.........xx..x'....x +x'...'...x'...'....'xx.xx...x +x'...x'......x.x.....x..''..x +x'.'x'x'.......'....'x......x +x'..'x.......x'x.....''..x..x +x'...'...xxx..{...x'....'x'.x +@''.......'.....'....'..'x'.x +x''......xxx...xx........x..x +x....x.......'xx.x...[....x.@ +x...'....x''..x.xx........x.x +x'....x....'..x'x..'''...x..x +x...'.'....'.xx.x...x...'x.'x +x..x.....(...x.xx.......'x.'x +x..'..'x.........xx.....'x..x x...x...........xx.x..x..x..x -x........x......x.xx........x -x................xx.........x +x.......'x.'''..x.xx........x +x.........'......xx.........x xxxxxxxxxxx@xxxxxxxxxxxxxxxxx ENDMAP @@ -4245,6 +4340,7 @@ TAGS: entry ORIENT: northwest FLAGS: no_rotate SHUFFLE: [({ +SUBST: ':'.x, '=x. MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -4252,18 +4348,18 @@ xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -xxxxxxxxxxxx....xxxxxxxxxxxxxxx....xx..xxx...x.xxx...xxx..xxxxxxxxx -xxxxxxxxxx..........xx.................................xx...xx...xx -xxxxxxxx.....ccccc...xxx.....ccccc...........ccccc.............x..x -xxxxxx....cccc...cccc.....cccc...cccc.....cccc...cccc.........xxx.@ -xxxxxx..ccc.........ccc+ccc.........ccc+ccc.........ccc........xxxx -xxxxxx..c......{......+.+......[......+.+......(......c.........xxx -xxxxxx..ccc.........ccc+ccc.........ccc+ccc.........ccc........xxxx -xxxxxx....cccc...cccc.....cccc...cccc.....cccc...cccc...........xxx -xxxxxx.......ccccc...........ccccc...........ccccc............xxxxx -xxxxxx....................xx..........xxxx....................xxxxx -xxxxxx.....xxx.............xx...xx.xxxxxxxxxx.x..........xxx...xxxx -xxxxxx.xxxxxxxxxxxxxx..xxx.xxx...xxxxxxxxxxxxxxxxxx....xxxxxx...xxx +xxxxxxxxxxxx....xxxxxxxxxxxxxxx....xx..xxx.''x.xxx..'xxx..xxxxxxxxx +xxxxxxxxxx''........xx...''.........''...'.............xx...xx...xx +xxxxxxxx'....ccccc...xxx.....ccccc......'....ccccc.............x..x +xxxxxx....cccc...cccc.....cccc...cccc.....cccc...cccc.....''..xxx.@ +xxxxxx..ccc.........ccc+ccc.........ccc+ccc.........ccc....''..xxxx +xxxxxx'.c......{......+.+......[......+.+......(......c...'.....xxx +xxxxxx'.ccc.........ccc+ccc.........ccc+ccc.........ccc...''...xxxx +xxxxxx....cccc...cccc.....cccc...cccc.....cccc...cccc......'..'.xxx +xxxxxx.......ccccc......'....ccccc...........ccccc......'.....xxxxx +xxxxxx'................'..xx..........xxxx..........'....'....xxxxx +xxxxxx.''..xxx...''.....'..xx...xx.xxxxxxxxxx.x..'''..''.xxx''.xxxx +xxxxxx'xxxxxxxxxxxxxx..xxx.xxx...xxxxxxxxxxxxxxxxxx....xxxxxx...xxx xxxxxxxxxxxxxxxxxxxxxx@xxxxxxxx@xxxxxxxxxxxxxxxxxxxxxx@xxxxxxxx@xxx ENDMAP @@ -4275,9 +4371,7 @@ ORIENT: west FLAGS: MONS: rat, goblin, giant bat, kobold ITEM: sausage / beef jerky, nothing, nothing -SHUFFLE: {[( -SHUFFLE: 234 -SHUFFLE: ef~ +SHUFFLE: {[(, 234, ef~ MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxx.xxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxx+xxxxxxxxxxxx @@ -4343,43 +4437,71 @@ ENDMAP NAME: entry_elethiomel_004 TAGS: entry no_monster_gen ORIENT: float +SHUFFLE: {[(, WXYZ +SUBST: W=., X=X., X=x=., Y=Y., Y=x=., Z=Z., Z=x=. MAP -xx.xxxxxxxxxxxxxxxxxxxxxxxxxx +xx@xxxxxxxxxxxxxxxxxxxxxxxxxx xx.x.......xxxxx...xx......xx -xx.x.xxxxx.xxxxx.x.xxxxxxx.xx -xx...x{..x...x...x...x(xxx... +xx.xXxxxxx.xxxxx.x.xxxxxxx.xx +xx...x{..x...x...x...x(xxx..@ xxxx.xxx.x.x.x.xxxxx.x.xxx.xx -...x...x...x.....xxx...x...xx +@..x...x...x.....xxx...x...xx xx.xxx.xxxxxxxxx.xxxxxxx.xxxx -xx.....xxxxx.x.....x.....x... +xx.....xxxxx.x.....x.W...x..@ xxxx.xxxxxxx.x.xxx.x.xxxxx.xx -xx...xxxxxxx...xxx...x.....xx +xx...xxxxxxx...xxx...x...Z.xx xx.xxxxxxxxx.x.xxx.xxx.xxx.xx xx...xxxxx...x.....x...x...xx xxxx.x[xxx.xxxxxxxxx.xxx.xxxx -xxxx.................xxx...xx -xxxxxxxxxxxxxxxxxxxxxxxxxx.xx +xxxx.....Y...........xxx...xx +xxxxxxxxxxxxxxxxxxxxxxxxxx@xx ENDMAP ############################################################## # It's quiet. Too quiet.... -NAME: entry_elethiomel_005 +NAME: entry_elethiomel_005_a TAGS: entry no_monster_gen ORIENT: float -MONS: rat, hobgoblin, goblin -SHUFFLE: {[( +MONS: rat / nothing, hobgoblin / goblin / nothing +SHUFFLE: {[(, '"/AB, !?/CD +SUBST: ':., ":=, A:x, B:x, !:., ?:=, C:x, D:x MAP xxxxxxxxxx@xxxxxxxxxx xxxxxxxxxx.xxxxxxxxxx xxxxxxxccc+cccxxxxxxx xxxxxxxc.G.G.cxxxxxxx xxcccccc.....ccccccxx -xc%.3.cc.....cc11.$cx +xc%.2.cc.....cc11.$cx xc%.2.=..G.G..=11..cx xc%...cc.....cc11.$cx xxcccccc.....ccccccxx -......=..G.G..=...... +''''''"..G.G..?!!!!!! +xxcccccc.....ccccccxx +xxxxxxcG.....Gcxxxxxx +xxxxxxc.[.{.(.cxxxxxx +xxxxxxcccccccccxxxxxx +xxxxxxxxxxxxxxxxxxxxx +ENDMAP + +NAME: entry_elethiomel_005_b +TAGS: entry no_monster_gen +ORIENT: float +MONS: rat / nothing, hobgoblin / goblin / nothing +SHUFFLE: {[(, '"/AB, !?/CD +SUBST: ':., ":=, A:x, B:x, !:., ?:=, C:x, D:x +KFEAT: X = teleport trap +MAP +xxxxxxxxxx@xxxxxxxxxx +xxxxxxxxxx.xxxxxxxxxx +xxxxxxxccc+cccxxxxxxx +xxxxxxxc.G.G.cxxxxxxx +xxcccccc.....ccccccxx +xc%.2.cc.....cc11.$cx +xcX.2.c..G.G..c11.Xcx +xc%...cc.....cc11.$cx +xxcccccc.....ccccccxx +''''''"..G.G..?!!!!!! xxcccccc.....ccccccxx xxxxxxcG.....Gcxxxxxx xxxxxxc.[.{.(.cxxxxxx @@ -4393,7 +4515,9 @@ ENDMAP NAME: entry_elethiomel_006 TAGS: entry ORIENT: float -SHUFFLE: {[( +SHUFFLE: {[(, XY/AB +KFEAT: X = teleport trap +SUBST: Y=x, A=., B== MAP xxxxxxx.xxxxxxx...xxxxxxx xxxxxxx.xxxxxx...xxxxxxxx @@ -4401,7 +4525,7 @@ xxxxxxx.xxxxx...xxxxxxxxx xxxxx...xxxx...xxxxxxxxxx xxxxx{....x...xxxxxxxxxxx xxxxx........xxxxxxxxxxxx -x]..=........xxxxxxxxxxxx +x].XY........xxxxxxxxxxxx xxxxx.[.................. xxxxx.......(.xxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxx @@ -4414,6 +4538,7 @@ NAME: entry_elethiomel_007 TAGS: entry ORIENT: float SHUFFLE: {[( +SUBST: ~ = ~ .:5 # Too bad there isn't a "rolling boulder" trap. MAP xxxxxxxxxx.xxxxxxxxxxxxxxx @@ -4422,7 +4547,7 @@ xxxxxxxxxx.xxxxxxxxxxxxxxx xxxxxxxxxx.xxxxxxxxxxxxxxx xxxxxxxxxx.xxxxxxx.....xxx xxxxxxx.......xx...~~~..xx -.........{[(.....G.~%~...x +.........{[(...+.G.~%~...x xxxxxxx.......xx...~~~..xx xxxxxxxxxx.xxxxxxx.....xxx xxxxxxxxxx.xxxxxxxxxxxxxxx @@ -4502,10 +4627,8 @@ DEPTH: 1-11 # Vaults tagged "dummy" are no-ops when the dungeon builder is looking for maps # by depth. TAGS: dummy - ORIENT: float CHANCE: 100 - MAP x ENDMAP @@ -4566,30 +4689,30 @@ ENDMAP ############################################################################## # Rubicon -NAME: erik_rubicon_a -DEPTH: 10-16 -ORIENT: float -FLAGS: no_rotate -CHANCE: 6 -ITEM: ring of levitation / potion of levitation / nothing, potion of levitation -ITEM: nothing, nothing, nothing -SHUFFLE: {[( -SHUFFLE: wl -SHUFFLE: )gh -MAP -xxxxccccccccwwwww.@wwww.@wwwwwww...@wwwwwww.@wwww@..wccccxxxxxx -ccccwwwwwwwww..wwwww.wwwwwwww.wwwwwww.wwwwwwwwwwwwwwwwwwccccccc +NAME: erik_rubicon_a +DEPTH: 10-16 +ORIENT: float +FLAGS: no_rotate +TAGS: no_pool_fixup +CHANCE: 6 +ITEM: ring of levitation / potion of levitation / nothing, potion of levitation +ITEM: nothing, nothing, nothing +SHUFFLE: {[(, )gh +SUBST: ?:?.w, ?=w., w:lw, ':'.c, '=cx. +MAP +xxxxcccccccc????w.@??ww.@www???w...@???wwww.@ww??@..?ccccxxxxxx +ccccwwwwwwwww..wwwww.wwwwwwww.wwwwwww.wwwwwwwwwwww??wwwwccccccc cwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwc cwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwc ccwwwwwwwwwwwwwwwwwwwcccwwwwwwwwwcwwwwwwwwwwwwwwwwwwwwwwcccwccc cwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwc cwwwwwwwwwwwwwwwwwwwwwccwwwwwwwwwcwcwwwwwwwwwwwwwwwwwwwwwwccccc cwwwwwwwwwwwwxwwwwwwwwwwwwwwwwwwwcwwwww.wwwwwwwwwwwwwwwwwwwwwwc -ccwcwwwwwwwwwwwwwwwxwwwwwwwwwwwwwwwwwwwwwwwwwwwwww.wwwwwwwccccc -ccccccwwwwwww.wwwwwxwwwwww...wwwwwwwwwwwwwwwwwwwwwwwwwwcccccxxx -xxxxcxx.........w..xx........wwwww...c......ww.....www..cxccxxx -xxxxcx..(cc[......xx...x....x..wxx.xcc..cxcx...xxx.....chxxcxxx -xxxxcx..cc{c..xx.....xx...cc..xx....xcc......xxx..x.xxc...cxxxx +ccwcwwwwwwwwwwwwwwwxwwwwww???wwwwwwwww???wwwwwwwww.wwwwwwwccccc +cccccc????w??.w????xw??w??...?wwww???w????w?w???w???w??cccccxxx +xxxxcxx...''....?..xx........??w??...c''....??.....???..cxccxxx +xxxxcx..(cc[.''..'xx...x.''.x..?xx.xcc..cxcx...xxx.'...chxxcxxx +xxxxcx..cc{c..xx.....xx...cc..xx....xcc....''xxx..x.xxc...cxxxx xxxxccx....e.xx....x..x.....c....cx..x...x......c......cxcxxxxx xxxxxcxexxx.x.x.xx.x.xx.xcc.xx.xccxx....xx.x.xxxccxx.xcccxxxxxx xxxxxccx.gxxx..x..xdx..x.xxxx.x...xx.xx...xx.xxxx)..xxcxxxxxxxx @@ -4597,31 +4720,29 @@ xxxxxxcxxxxxxxx...xxxxxxxxxccccccc..xxxxccccccccxxxccccxxxxxxxx xxxxxxcccccccccccccccccccccccccccccccccccxxxxxcccccccxxxxxxxxxx ENDMAP -NAME: erik_rubicon_b -DEPTH: 10-16 -TAGS: no_pool_fixup -ORIENT: float -FLAGS: no_rotate -CHANCE: 4 -ITEM: ring of levitation / potion of levitation / nothing, potion of levitation -ITEM: nothing, nothing, nothing, nothing -SHUFFLE: {[( -SHUFFLE: fgW -SHUFFLE: )hi +NAME: erik_rubicon_b +DEPTH: 10-16 +ORIENT: float +FLAGS: no_rotate +CHANCE: 4 +ITEM: ring of levitation / potion of levitation / nothing, potion of levitation +ITEM: nothing, nothing, nothing, nothing +SHUFFLE: {[(, fgW, )hi +SUBST: ?:?.wW, ?=wW., ':'.c, '=c. MAP -xxxxccccccccwgwwf.@wgfw.@wwwgwfw...@gwfwwww.@wwww@..wccccxxxxxx -ccccwwwwwwwww..fwwww.wwwwwwww.wwwwwww.wwwwwwwwwwwffggwwwccccccc -cwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwc +xxxxcccccccc?gw?f.@wgf?.@w??g?fw...@gwfw???.@wwww@..?ccccxxxxxx +ccccwwwwwww??..f????.ww???www.???ww??.wwwwwwwwwwwffgg?wwccccccc +cwwwwwwwwwwww??wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww??wwwwwwwwwc cwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwc ccwwwwwwwwwwwwwwwgwwwcccwwwfwwwwwcwwwwgwwwwwwwwwwwwwwwwwcccwccc cwwwwwwwwwwwwwwgwwwwwwwwwwwwfwwwwwwwwwwwwwfwwwwwwwwwwwwwwwwwwwc -cwwwwwwwwwwwwwwwwwwwwwccwwwwwwwwwcwcwwwwwwwwwwwwwwwwwwwwwwccccc +cwwwwwwwwwwwwwwwwwwwwwccwwwwwwwwwcwcwwww?wwwwwwwwwwwwwwwwwccccc cwwwwwwwwwwwwxwwwwwwwwwwwwwwwwwwwcwwwww.wwwwwwwwwwwwwwwwwwwwwwc -ccwcwwwwwgwwwwfwwwwxwwwwwwwwwwwwwwwwwwwfgwwwgwwwww.wwwwwwwccccc -ccccccwffwgwwfwwwwgxwwwwww...wwwwwwwwwfwgwwfwgwwwfgwwwgcccccxxx -xxxxcxx.........w..xx........wwwww...c......ww.....wgg.xcxccxxx -xxxxcx..(cc[.....xx....x....x..w...xcc..cxcx.x..x......cxhxcxxx -xxxxxcc..c{c..x.x...c.xxx.x.xx....xx..cc..c.xx...cc..xxx...xxxx +ccwcwwwwwg?wwwfwwwwxwwwwwwwwwwwwwwwwwwwfgwwwgwwwww.wwwwwwwccccc +ccccccwffwg??fw?ww?gx??ww?..??wwwww??w?fwgw?fwgw??fg??gcccccxxx +xxxxcxx...'''...?..xx.....''.?ww??...c.'....??...'.?gg.xcxccxxx +xxxxcx..(cc[.'.'.xx..'.x.'..x..?...xcc..cxcx.x..x..''..cxhxcxxx +xxxxxcc..c{c..x.x...c.xxx.x.xx.'.'xx..cc..c.xx''.cc..xxx...xxxx xxxxccx....e.xx...x...x.....c...c....cc....x...x....x....cxxxxx xxxxxcxexxxxx.x.xxxx.x..xcc.xx..cc.x....xx.x.x.xccxx.xcccxxxxxx xxxxxccx..xi.x.x.xxdxxxx...x..xx..xxxxx...x).xx..xc.xxcxxxxxxxx @@ -4635,7 +4756,7 @@ ENDMAP NAME: erik_ogre DEPTH: 4-9 ORIENT: float -MONS: ogre / iron devil +MONS: ogre / iron devil / w:5 nothing ITEM: potion of heal wounds / speed / berserk rage SHUFFLE: {( MAP @@ -4666,44 +4787,49 @@ ENDMAP ################################### # Hellmouth (Lemuel) # note that other than the imps, the demons here cannot fly -NAME: hellmouth_1 -FLAGS: no_rotate -MONS: imp / quasit / shadow imp, hellion / rotting devil / iron devil / hairy devil / hell hound -ITEM: good_item demon blade / good_item demon whip / good_item demon trident / wand of draining / wand of fire / ring of fire / Necronomicon / book of demonology / scroll of torment +NAME: hellmouth_1 +FLAGS: no_rotate +MONS: imp / quasit / shadow imp, hellion / rotting devil / iron devil / hairy devil / hell hound +ITEM: good_item demon blade / good_item demon whip / good_item demon trident / wand of draining +ITEM: wand of fire / ring of fire / Necronomicon / book of demonology / scroll of torment ORIENT: float +SUBST: d=de, ?:?.l, ?=l. MAP xxxxxxxxxxxxxxxxxxx xxxxxxxxlllxxxxxxxx xxxxxxlllAlllxxxxxx -xxxlllll.d.llll.xxx -xlllllll121lllll..x -x.lllllll1llll....x -x...llllllll......x -x....llllll.......x -x.....lllll.......x -xxx....lll......xxx -xxxx...lll.....xxxx -xxxxx..ll.....xxxxx -xxxxx.lll.....xxxxx -xxxxxxlll....xxxxxx +xxxlllll.d.llll?xxx +xlllllll121lllll?.x +x?lllllll1llll?...x +x.??llllllll?.....x +x...?llllll?......x +x....?lllll.......x +xxx...?lll?.....xxx +xxxx...lll?....xxxx +xxxxx.?ll?....xxxxx +xxxxx?lll.....xxxxx +xxxxxxlll?...xxxxxx xxxxxxxlll...xxxxxx -xxxxxxxxll..xxxxxxx -xxxxxxxxll..xxxxxxx -xxxxxxxxl.@xxxxxxxx +xxxxxxxxll?.xxxxxxx +xxxxxxxxll?.xxxxxxx +xxxxxxxxl?@xxxxxxxx ENDMAP ################################### # Hellmouth 2 (Lemuel) # note that other than the imps, the demons here cannot fly -NAME: hellmouth_2 -TAGS: no_monster_gen -FLAGS: no_rotate -MONS: imp / quasit / shadow imp / manes / lemure -MONS: hellion / rotting devil / iron devil / hairy devil / hell hound -ITEM: good_item demon blade / good_item demon whip / good_item demon trident / wand of draining / wand of fire / ring of fire / Necronomicon / book of demonology / scroll of torment -ITEM: good_item demon blade / good_item demon whip / good_item demon trident +NAME: hellmouth_2 +TAGS: no_monster_gen +FLAGS: no_rotate +MONS: imp / quasit / shadow imp / manes / lemure +MONS: hellion / rotting devil / iron devil / hairy devil / hell hound +ITEM: good_item demon blade / good_item demon whip / good_item demon trident / wand of draining +ITEM: wand of fire / ring of fire / Necronomicon / book of demonology / scroll of torment +ITEM: good_item demon blade / good_item demon whip / good_item demon trident / w:30 nothing ORIENT: float +SUBST: d=de, ?:?.l, ?=l. +SUBST: b : b:30 c v . MAP .......bbbbbbbbbbbb....... @@ -4711,15 +4837,15 @@ MAP ..bbb....llllllll....bbb.. .bb....llllllllllll....bb. .b....llllllllllllll....b. -.b....llllll..llllll....b. -.b....lll........lll....b. -.b....ll....111...ll....b. -.+....l....11211d..l....b. -.+....l....12A21|e.l....b. -.b....ll...11211d.ll....b. -.b....lll...111..lll....b. -.b....llll......llll....b. -.b....llllll..llllll....b. +.b....llllll??llllll....b. +.b...?lll??.....?lll?...b. +.b...?ll?...111...ll?...b. +.+...?l?...11211d..l?...b. +.+...?l?...12A21|f.l?...b. +.b...?ll...11211d.ll?...b. +.b...?lll?..111..lll?...b. +.b....llll?.....llll....b. +.b....llllll??llllll....b. .bb....llllllllllll....bb. ..bbb....llllllll....bbb.. ....bbbb..........bbbb.... @@ -4728,28 +4854,28 @@ ENDMAP ################################### # Hellmouth 3 (Lemuel) -NAME: hellmouth_3 -MONS: weight:50 imp / quasit / shadow imp / manes / lemure, hell hound -ITEM: good_item demon blade / good_item demon whip / good_item demon trident +NAME: hellmouth_3 +MONS: weight:50 imp / quasit / shadow imp / manes / lemure, hell hound +ITEM: good_item demon blade / good_item demon whip / good_item demon trident / nothing ORIENT: float - +SUBST: ?:?.l, ?=l. MAP ................l............. .............................. -................l............. -....ll..........l............. -...lll..........l............. -....l..........l.............. -.............lll.............. -..........lllllll............. -........llllllllll............ -.......lll111111llll.......... -.......llll12Ad1lll........... -........lll11111ll............ -.........lllll1ll............. -...........llllll............. -............llll......ll...... -.............ll........ll..... +....??..........l?............ +...?ll?........?l?............ +..?lll?.........l............. +...?l........??l?............. +...........??lll?............. +.........?lllllll?............ +.......?llllllllll??.......... +......?lll111111llll?......... +......?llll12Ad1lll........... +.......?lll11111ll?........... +........?lllll1ll?............ +.........??llllll......?...... +...........?llll?.....ll?..... +............?ll?.......ll?.... .............................. ...................l.......... ENDMAP @@ -4759,7 +4885,9 @@ ENDMAP NAME: RatsNest ORIENT: float DEPTH: 4-8 - +SHUFFLE: 23, 34 +MONS: rat / nothing, grey rat / nothing +MONS: green rat / nothing, orange rat / nothing MAP xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxx...xxxxxxxxxxxxxxxxxxxxxxxxxxx @@ -4785,14 +4913,15 @@ xxxxxxxxxxxxxxxxx.xxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx@xxxxxxxxxxxxxxxxxxxxxx ENDMAP -MONS: rat, grey rat, green rat, orange rat ############################################################################## # Beware the mummy's curse (Lemuel) NAME: MiniTomb ORIENT: float DEPTH: 10-26 - +MONS: large zombie / nothing, mummy, guardian mummy, greater mummy, large zombie +MONS: mummy / nothing +SHUFFLE: 2F, cbv MAP xxxxcccccxxxx xxxxc$|$cxxxx @@ -4808,7 +4937,7 @@ xxcccc=ccccxx xxc.......cxx xxc.......cxx x$=.12321.=$x -x$c.......c$x +x$c..666..c$x x3c.......c3x xxcccc+ccccxx xxxxxc.cxxxxx @@ -4816,15 +4945,13 @@ xxxxxc.cxxxxx xxxxxc.cxxxxx xxxx.=.=.xxxx xxxx$c.c$xxxx -xxxx2c1c2xxxx +xxxx6c1c6xxxx xxxxxc1cxxxxx xxxccc1cccxxx xxccFc+cFccxx xxcc@c@c@ccxx ENDMAP -MONS: large zombie, mummy, guardian mummy, greater mummy -MONS: large zombie ############################################################################# @@ -5615,9 +5742,8 @@ ENDMAP NAME: david_greed DEPTH: 10-26 -ITEM: nothing -SHUFFLE: d| -SHUFFLE: HS +ITEM: nothing / any good_item +SHUFFLE: d|, HS MAP xxxxxxxxx xbbbbbbbx @@ -5636,16 +5762,16 @@ ENDMAP ############################################################################## # Defended altar -NAME: david_defended_altar -DEPTH: 6-20 -ITEM: nothing -MONS: orc priest, deep elf priest / nothing -SUBST: 1 : 1 2 +NAME: david_defended_altar +DEPTH: 7-20 +ITEM: nothing +SHUFFLE: 1I/2T +MONS: orc priest, deep elf priest / w:30 nothing MAP ......... .ccccc... .c1..c... -.c1C.+.T. +.c1C.+.I. .c1..c... .ccccc... ......... @@ -6351,7 +6477,7 @@ NAME: fake_naga_vault # room, and being hit by multiple mimics is un-fun. DEPTH: 15-26 - +MONS: mimic, guardian naga MAP xxxxxxxxx x1111111x @@ -6361,7 +6487,6 @@ x11.2.11x xxxx+xxxx ENDMAP -MONS: mimic, guardian naga ############################################################################# # Pandemonium lesser demon vaults diff --git a/crawl-ref/source/direct.cc b/crawl-ref/source/direct.cc index 6cbc6a4120..b260f14dc7 100644 --- a/crawl-ref/source/direct.cc +++ b/crawl-ref/source/direct.cc @@ -103,7 +103,9 @@ static command_type read_direction_key(bool just_looking = false) { flush_input_buffer( FLUSH_BEFORE_COMMAND ); - int key = unmangle_direction_keys(getchm(KC_TARGETING),KC_TARGETING); + const int key = + unmangle_direction_keys( + getchm(KC_TARGETING), KC_TARGETING, false, false); switch ( key ) { @@ -131,9 +133,9 @@ static command_type read_direction_key(bool just_looking = false) case 'p': case 'f': case 't': return CMD_TARGET_PREV_TARGET; case '-': return CMD_TARGET_CYCLE_BACK; - case '+': case '=': return CMD_TARGET_CYCLE_FORWARD; - case ';': case '/': return CMD_TARGET_OBJ_CYCLE_BACK; - case '*': return CMD_TARGET_OBJ_CYCLE_FORWARD; + case '+': case '=': return CMD_TARGET_CYCLE_FORWARD; + case ';': case '/': return CMD_TARGET_OBJ_CYCLE_BACK; + case '*': case '\'': return CMD_TARGET_OBJ_CYCLE_FORWARD; case 'b': return CMD_TARGET_DOWN_LEFT; case 'h': return CMD_TARGET_LEFT; @@ -1398,6 +1400,9 @@ static void describe_mons_enchantment(const monsters &mons, case ENCH_POISON: strcat(info, " is poisoned."); break; + case ENCH_SICK: + strcat(info, " is sick."); + break; case ENCH_ROT: strcat(info, " is rotting away."); //jmf: "covered in sores"? break; diff --git a/crawl-ref/source/dungeon.cc b/crawl-ref/source/dungeon.cc index caaea6892d..e45c2b5686 100644 --- a/crawl-ref/source/dungeon.cc +++ b/crawl-ref/source/dungeon.cc @@ -421,6 +421,9 @@ static void build_dungeon_level(int level_number, int level_type) reset_level(); build_layout_skeleton(level_number, level_type, sr); + if (you.level_type == LEVEL_LABYRINTH) + return; + // Try to place minivaults that really badly want to be placed. Still // no guarantees, seeing this is a minivault. place_special_minivaults(level_number, level_type); diff --git a/crawl-ref/source/enum.h b/crawl-ref/source/enum.h index 4223245ab6..af55054702 100644 --- a/crawl-ref/source/enum.h +++ b/crawl-ref/source/enum.h @@ -1185,6 +1185,8 @@ enum enchant_type ENCH_SUBMERGED, ENCH_SHORT_LIVED, ENCH_PARALYSIS, // 20 + ENCH_SICK, + ENCH_SLEEPY, // Monster can't wake until this wears off. NUM_ENCHANTMENTS }; @@ -1807,6 +1809,7 @@ enum mons_class_flags M_NO_EXP_GAIN = (1<<31) // worth 0 xp }; +// now saved in an unsigned long. enum mon_resist_flags { MR_NO_FLAGS = 0, @@ -1822,22 +1825,23 @@ enum mon_resist_flags MR_RES_HELLFIRE = (1<< 3), MR_RES_COLD = (1<< 4), MR_RES_ASPHYX = (1<< 5), + MR_RES_ACID = (1<< 6), // vulnerabilities - MR_VUL_ELEC = (1<< 6), - MR_VUL_POISON = (1<< 7), - MR_VUL_FIRE = (1<< 8), - MR_VUL_COLD = (1<< 9), + MR_VUL_ELEC = (1<< 7), + MR_VUL_POISON = (1<< 8), + MR_VUL_FIRE = (1<< 9), + MR_VUL_COLD = (1<<10), // melee armour resists/vulnerabilities // XXX: how to do combos (bludgeon/slice, bludgeon/pierce) - MR_RES_PIERCE = (1<<10), - MR_RES_SLICE = (1<<11), - MR_RES_BLUDGEON = (1<<12), + MR_RES_PIERCE = (1<<11), + MR_RES_SLICE = (1<<12), + MR_RES_BLUDGEON = (1<<13), - MR_VUL_PIERCE = (1<<13), - MR_VUL_SLICE = (1<<14), - MR_VUL_BLUDGEON = (1<<15) + MR_VUL_PIERCE = (1<<14), + MR_VUL_SLICE = (1<<15), + MR_VUL_BLUDGEON = (1<<16) }; enum targ_mode_type diff --git a/crawl-ref/source/externs.h b/crawl-ref/source/externs.h index 0f74a1a22b..e5ab195f50 100644 --- a/crawl-ref/source/externs.h +++ b/crawl-ref/source/externs.h @@ -149,6 +149,7 @@ public: virtual void blink() = 0; virtual void teleport(bool right_now = false, bool abyss_shift = false) = 0; virtual void poison(actor *attacker, int amount = 1) = 0; + virtual void sicken(int amount) = 0; virtual void paralyse(int strength) = 0; virtual void slow_down(int strength) = 0; virtual void confuse(int strength) = 0; @@ -757,6 +758,7 @@ public: int hunger_level() const { return hunger_state; } void make_hungry(int nutrition, bool silent = true); void poison(actor *agent, int amount = 1); + void sicken(int amount); void paralyse(int str); void slow_down(int str); void confuse(int strength); @@ -941,6 +943,7 @@ public: bool alive() const; coord_def pos() const; bool swimming() const; + bool can_drown() const; bool floundering() const; size_type body_size(int psize = PSIZE_TORSO, bool base = false) const; int damage_type(int attk = -1); @@ -986,6 +989,7 @@ public: int melee_evasion(const actor *attacker) const; void poison(actor *agent, int amount = 1); + void sicken(int strength); void paralyse(int str); void slow_down(int str); void confuse(int strength); diff --git a/crawl-ref/source/fight.cc b/crawl-ref/source/fight.cc index 05cd73127c..dc5c27120a 100644 --- a/crawl-ref/source/fight.cc +++ b/crawl-ref/source/fight.cc @@ -2727,8 +2727,7 @@ void melee_attack::mons_apply_attack_flavour(const mon_attack_def &attk) break; case AF_DISEASE: - if (defender->atype() == ACT_PLAYER) - disease_player( 50 + random2(100) ); + defender->sicken( 50 + random2(100) ); break; case AF_FIRE: @@ -2768,10 +2767,11 @@ void melee_attack::mons_apply_attack_flavour(const mon_attack_def &attk) special_damage = special_damage * 2 / 3; if (needs_message && special_damage) - mprf("%s %s %s!", + mprf("%s %s %s%s", attacker->name(DESC_CAP_THE).c_str(), attacker->conj_verb("shock").c_str(), - defender->name(DESC_NOCAP_THE).c_str()); + defender->name(DESC_NOCAP_THE).c_str(), + special_attack_punctuation().c_str()); #ifdef DEBUG_DIAGNOSTICS mprf(MSGCH_DIAGNOSTICS, "Shock damage: %d", special_damage); diff --git a/crawl-ref/source/hiscores.cc b/crawl-ref/source/hiscores.cc index 1ef0bb6e19..cd28adc53e 100644 --- a/crawl-ref/source/hiscores.cc +++ b/crawl-ref/source/hiscores.cc @@ -942,8 +942,8 @@ void scorefile_entry::init_death_cause(int dam, int dsrc, { const monsters *monster = &menv[death_source]; - if (monster->type > 0 || monster->type <= NUM_MONSTERS) - { + if (monster->type >= 0 && monster->type < NUM_MONSTERS) + { death_source = monster->type; mon_num = monster->number; diff --git a/crawl-ref/source/initfile.cc b/crawl-ref/source/initfile.cc index 5eff2da5c6..b948c557e8 100644 --- a/crawl-ref/source/initfile.cc +++ b/crawl-ref/source/initfile.cc @@ -1296,7 +1296,7 @@ void game_options::add_message_colour_mapping(const std::string &field) if (cmap.size() != 2) return; - const int col = str_to_colour( cmap[0] ); + const int col = (cmap[0]=="mute") ? MSGCOL_MUTED : str_to_colour(cmap[0]); if (col == -1) return; diff --git a/crawl-ref/source/libutil.cc b/crawl-ref/source/libutil.cc index c7e057a9e0..010602dfca 100644 --- a/crawl-ref/source/libutil.cc +++ b/crawl-ref/source/libutil.cc @@ -58,7 +58,7 @@ static keycode_type numpad2vi(keycode_type key) } #endif -int unmangle_direction_keys(int keyin, int km) +int unmangle_direction_keys(int keyin, int km, bool fake_ctrl, bool fake_shift) { const KeymapContext keymap = static_cast(km); #ifdef UNIX @@ -69,13 +69,13 @@ int unmangle_direction_keys(int keyin, int km) // will hopefully be easy. /* can we say yuck? -- haranp */ - if (keyin == '*') + if (fake_ctrl && keyin == '*') { keyin = getchm(keymap); // return control-key keyin = CONTROL(toupper(numpad2vi(keyin))); } - else if (keyin == '/') + else if (fake_shift && keyin == '/') { keyin = getchm(keymap); // return shift-key diff --git a/crawl-ref/source/libutil.h b/crawl-ref/source/libutil.h index c790705b7d..3cd5c6c5c9 100644 --- a/crawl-ref/source/libutil.h +++ b/crawl-ref/source/libutil.h @@ -24,7 +24,8 @@ void cursorxy(int x, int y); // Converts a key to a direction key, converting keypad and other sequences // to vi key sequences (shifted/control key directions are also handled). Non // direction keys (hopefully) pass through unmangled. -int unmangle_direction_keys(int keyin, int keymap = 0); +int unmangle_direction_keys(int keyin, int keymap = 0, + bool fake_ctrl = true, bool fake_shift = true); void lowercase(std::string &s); void uppercase(std::string &s); diff --git a/crawl-ref/source/makefile.dos b/crawl-ref/source/makefile.dos index f56ea91ed8..4535c7df19 100644 --- a/crawl-ref/source/makefile.dos +++ b/crawl-ref/source/makefile.dos @@ -1,4 +1,4 @@ -# Make file for Dungeon Crawl (dos) +# -*- Makefile -*- for Dungeon Crawl (dos) # # Modified for Crawl Reference by $Author$ on $Date$ diff --git a/crawl-ref/source/makefile.mgw b/crawl-ref/source/makefile.mgw index 074f8783ae..f1bc19f861 100644 --- a/crawl-ref/source/makefile.mgw +++ b/crawl-ref/source/makefile.mgw @@ -1,4 +1,4 @@ -# Make file for Dungeon Crawl (Win32, MinGW) +# -*- Makefile -*- for Dungeon Crawl (Win32, MinGW) # makefile.obj includes a list of object files needed to build Crawl. include makefile.obj diff --git a/crawl-ref/source/makefile.unix b/crawl-ref/source/makefile.unix index 95a50e7659..e1516fb05e 100644 --- a/crawl-ref/source/makefile.unix +++ b/crawl-ref/source/makefile.unix @@ -63,7 +63,7 @@ YCFLAGS := $(INCLUDES) $(CFOTHERS) UTIL = util/ -LEX := lex +LEX := flex YACC := bison -y YTABC := levcomp.tab.c diff --git a/crawl-ref/source/mapdef.cc b/crawl-ref/source/mapdef.cc index b97ec2ea87..6a8a79802a 100644 --- a/crawl-ref/source/mapdef.cc +++ b/crawl-ref/source/mapdef.cc @@ -97,8 +97,8 @@ static std::string split_key_item(const std::string &s, std::string *arg) { std::string::size_type - norm = s.find("="), - fixe = s.find(":"); + norm = s.find("=", 1), + fixe = s.find(":", 1); const std::string::size_type sep = norm < fixe? norm : fixe; if (sep == std::string::npos) @@ -468,6 +468,9 @@ void map_lines::apply_transforms() { for (int i = 0, size = transforms.size(); i < size; ++i) transforms[i]->apply_transform(*this); + + // Release the transforms so we don't try them again. + release_transforms(); } void map_lines::normalise(char fillch) diff --git a/crawl-ref/source/message.cc b/crawl-ref/source/message.cc index 8872f7b226..5b4285a21f 100644 --- a/crawl-ref/source/message.cc +++ b/crawl-ref/source/message.cc @@ -310,7 +310,8 @@ void mpr(const char *inf, int channel, int param) // checks whether a given message contains patterns relevant for // notes, stop_running or sounds and handles these cases -static void mpr_check_patterns(std::string message, int channel, int param) +static void mpr_check_patterns(const std::string& message, int channel, + int param) { for (unsigned i = 0; i < Options.note_messages.size(); ++i) { @@ -354,7 +355,8 @@ static void mpr_check_patterns(std::string message, int channel, int param) } // adds a given message to the message history -static void mpr_store_messages(std::string message, int channel, int param) +static void mpr_store_messages(const std::string& message, + int channel, int param) { const int num_lines = get_message_window_height(); @@ -374,7 +376,7 @@ static void mpr_store_messages(std::string message, int channel, int param) if (channel != MSGCH_EQUIPMENT) { // Put the message into Store_Message, and move the '---' line forward - Store_Message[ Next_Message ].text = message.c_str(); + Store_Message[ Next_Message ].text = message; Store_Message[ Next_Message ].channel = channel; Store_Message[ Next_Message ].param = param; Next_Message++; @@ -385,42 +387,50 @@ static void mpr_store_messages(std::string message, int channel, int param) } static bool need_prefix = false; -static void base_mpr(const char *inf, int channel, int param) + +// Does the work common to base_mpr and formatted_mpr. +// Returns the default colour of the message, or MSGCOL_MUTED if +// the message should be suppressed. +static int prepare_message(const std::string& imsg, int channel, int param) { if (suppress_messages) - return; + return MSGCOL_MUTED; int colour = channel_to_colour( channel, param ); - if (colour == MSGCOL_MUTED) - return; - std::string imsg = inf; - - mpr_check_patterns(imsg, channel, param); - - if (!Options.message_colour_mappings.empty()) + const std::vector& mcm = + Options.message_colour_mappings; + typedef std::vector::const_iterator mcmci; + + for ( mcmci ci = mcm.begin(); ci != mcm.end(); ++ci ) { - std::string message = inf; - for (int i = 0, size = Options.message_colour_mappings.size(); - i < size; ++i) + if (ci->message.is_filtered(channel, imsg)) { - const message_colour_mapping &m = - Options.message_colour_mappings[i]; - if (m.message.is_filtered(channel, message)) - { - colour = m.colour; - break; - } + colour = ci->colour; + break; } } - flush_input_buffer( FLUSH_ON_MESSAGE ); - - const int num_lines = get_message_window_height(); + if ( colour != MSGCOL_MUTED ) + { + mpr_check_patterns(imsg, channel, param); + flush_input_buffer( FLUSH_ON_MESSAGE ); + const int num_lines = get_message_window_height(); - if (New_Message_Count == num_lines - 1) - more(); + if (New_Message_Count == num_lines - 1) + more(); + } + return colour; +} + +static void base_mpr(const char *inf, int channel, int param) +{ + const std::string imsg = inf; + const int colour = prepare_message( imsg, channel, param ); + if ( colour == MSGCOL_MUTED ) + return; + if (need_prefix) { message_out( Message_Line, colour, "-", 1, false ); @@ -472,26 +482,12 @@ static void mpr_formatted_output(formatted_string fs, int colour) // way to do this. void formatted_mpr(const formatted_string& fs, int channel, int param) { - if (suppress_messages) - return; - - int colour = channel_to_colour( channel, param ); + const std::string imsg = fs.tostring(); + const int colour = prepare_message(imsg, channel, param); if (colour == MSGCOL_MUTED) return; - const std::string imsg = fs.tostring(); - - mpr_check_patterns(imsg, channel, param); - - flush_input_buffer( FLUSH_ON_MESSAGE ); - - const int num_lines = get_message_window_height(); - - if (New_Message_Count == num_lines - 1) - more(); - mpr_formatted_output(fs, colour); - mpr_store_messages(imsg, channel, param); } diff --git a/crawl-ref/source/mon-data.h b/crawl-ref/source/mon-data.h index ab8fdbfc3e..bf3d0b56a9 100644 --- a/crawl-ref/source/mon-data.h +++ b/crawl-ref/source/mon-data.h @@ -556,7 +556,7 @@ { MONS_JELLY, 'J', LIGHTRED, "jelly", M_SEE_INVIS | M_SPLITS | M_AMPHIBIOUS | M_ACID_SPLASH, - MR_RES_POISON | MR_RES_ASPHYX, + MR_RES_POISON | MR_RES_ASPHYX | MR_RES_ACID, 0, 13, MONS_JELLY, MONS_JELLY, MH_NATURAL, -3, { {AT_HIT, AF_ACID, 8}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, { 3, 5, 5, 0 }, @@ -2876,7 +2876,7 @@ { MONS_BROWN_OOZE, 'J', BROWN, "brown ooze", M_NO_SKELETON | M_SEE_INVIS | M_ACID_SPLASH, - MR_RES_POISON | MR_RES_ASPHYX, + MR_RES_POISON | MR_RES_ASPHYX | MR_RES_ACID, 0, 11, MONS_JELLY, MONS_BROWN_OOZE, MH_NATURAL, -7, { {AT_HIT, AF_ACID, 25}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, { 7, 3, 5, 0 }, @@ -2888,7 +2888,8 @@ { MONS_AZURE_JELLY, 'J', LIGHTBLUE, "azure jelly", M_NO_SKELETON | M_SEE_INVIS, - MR_RES_POISON | MR_RES_COLD | MR_VUL_FIRE | MR_RES_ELEC | MR_RES_ASPHYX, + MR_RES_POISON | MR_RES_COLD | MR_VUL_FIRE | MR_RES_ELEC | MR_RES_ASPHYX + | MR_RES_ACID, 0, 11, MONS_JELLY, MONS_AZURE_JELLY, MH_NATURAL, -4, { {AT_HIT, AF_COLD, 12}, {AT_HIT, AF_COLD, 12}, {AT_HIT, AF_PLAIN, 12}, {AT_HIT, AF_PLAIN, 12} }, { 15, 3, 5, 0 }, @@ -2900,7 +2901,7 @@ { MONS_DEATH_OOZE, 'J', DARKGREY, "death ooze", M_NO_SKELETON | M_SEE_INVIS | M_EVIL, - MR_RES_POISON | MR_RES_COLD | MR_RES_ASPHYX, + MR_RES_POISON | MR_RES_COLD | MR_RES_ASPHYX | MR_RES_ACID, 0, 13, MONS_JELLY, MONS_DEATH_OOZE, MH_UNDEAD, -8, { {AT_HIT, AF_ROT, 32}, {AT_HIT, AF_PLAIN, 32}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, { 11, 3, 3, 0 }, @@ -2912,7 +2913,7 @@ { MONS_ACID_BLOB, 'J', LIGHTGREEN, "acid blob", M_NO_SKELETON | M_SEE_INVIS | M_SPECIAL_ABILITY | M_ACID_SPLASH, - MR_RES_POISON | MR_RES_ASPHYX, + MR_RES_POISON | MR_RES_ASPHYX | MR_RES_ACID, 0, 12, MONS_JELLY, MONS_ACID_BLOB, MH_NATURAL, -7, { {AT_HIT, AF_ACID, 42}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, { 18, 3, 5, 0 }, @@ -2924,7 +2925,7 @@ { MONS_ROYAL_JELLY, 'J', YELLOW, "royal jelly", M_NO_SKELETON | M_SEE_INVIS | M_ACID_SPLASH, - MR_RES_POISON | MR_RES_ASPHYX, + MR_RES_POISON | MR_RES_ASPHYX | MR_RES_ACID, 0, 20, MONS_JELLY, MONS_ROYAL_JELLY, MH_NATURAL, -7, { {AT_HIT, AF_ACID, 50}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, { 21, 0, 0, 111 }, @@ -3393,7 +3394,7 @@ { MONS_OOZE, 'J', LIGHTGREY, "ooze", M_NO_SKELETON | M_SEE_INVIS, - MR_RES_POISON | MR_RES_ASPHYX, + MR_RES_POISON | MR_RES_ASPHYX | MR_RES_ACID, 0, 5, MONS_JELLY, MONS_OOZE, MH_NATURAL, -6, { {AT_HIT, AF_PLAIN, 5}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0}, {AT_NONE, AF_PLAIN, 0} }, { 3, 3, 5, 0 }, diff --git a/crawl-ref/source/mon-util.cc b/crawl-ref/source/mon-util.cc index bb5e894e17..3b3415b31f 100644 --- a/crawl-ref/source/mon-util.cc +++ b/crawl-ref/source/mon-util.cc @@ -700,7 +700,7 @@ int mons_resist_magic( const monsters *mon ) // negative values get multiplied with mhd if (u < 0) - u = mon->hit_dice * -u; + u = mon->hit_dice * -u * 4 / 3; u += scan_mon_inv_randarts( mon, RAP_MAGIC ); @@ -796,11 +796,17 @@ bool mons_res_asphyx( const monsters *mon ) || mons_resist(mon, MR_RES_ASPHYX)); } +int mons_res_acid( const monsters *mon ) +{ + const unsigned long f = get_mons_resists(mon); + return ((f & MR_RES_ACID) != 0); +} + int mons_res_poison( const monsters *mon ) { int mc = mon->type; - int u = 0, f = get_mons_resists(mon); + unsigned long u = 0, f = get_mons_resists(mon); if (f & MR_RES_POISON) u++; @@ -2415,7 +2421,8 @@ monsters::monsters(const monsters &mon) monsters &monsters::operator = (const monsters &mon) { - init_with(mon); + if (this != &mon) + init_with(mon); return (*this); } @@ -2471,6 +2478,11 @@ bool monsters::floundering() const && !mons_flies(this)); } +bool monsters::can_drown() const +{ + return (!mons_res_asphyx(this)); +} + size_type monsters::body_size(int /* psize */, bool /* base */) const { const monsterentry *e = seekmonster(type); @@ -3275,6 +3287,7 @@ void monsters::timeout_enchantments(int levels) case ENCH_STICKY_FLAME: case ENCH_ABJ: case ENCH_SHORT_LIVED: case ENCH_SLOW: case ENCH_HASTE: case ENCH_FEAR: case ENCH_INVIS: case ENCH_CHARM: case ENCH_SLEEP_WARY: + case ENCH_SICK: case ENCH_SLEEPY: lose_ench_levels(*cur, levels); break; @@ -3289,6 +3302,9 @@ void monsters::timeout_enchantments(int levels) default: break; } + + if (!alive()) + break; } } @@ -3340,6 +3356,14 @@ void monsters::apply_enchantment(mon_enchant me, int spd) } break; + case ENCH_SICK: + { + const int lost = !spd? 1 : div_rand_round(10, spd); + if (lost > 0) + lose_ench_levels(me, lost); + break; + } + case ENCH_SUBMERGED: { // not even air elementals unsubmerge into clouds @@ -3561,6 +3585,10 @@ void monsters::apply_enchantment(mon_enchant me, int spd) del_ench(ENCH_SLEEP_WARY); break; + case ENCH_SLEEPY: + del_ench(ENCH_SLEEPY); + break; + default: break; } @@ -3585,6 +3613,21 @@ kill_category monsters::kill_alignment() const return (attitude == ATT_FRIENDLY? KC_FRIENDLY : KC_OTHER); } +void monsters::sicken(int amount) +{ + if (holiness() != MH_NATURAL || (amount /= 2) < 1) + return; + + if (!has_ench(ENCH_SICK) + && mons_near(this) && player_monster_visible(this)) + { + // Yes, could be confused with poisoning. + mprf("%s looks sick.", name(DESC_CAP_THE).c_str()); + } + + add_ench(mon_enchant(ENCH_SICK, amount)); +} + ///////////////////////////////////////////////////////////////////////// // mon_enchant @@ -3593,7 +3636,7 @@ static const char *enchant_names[] = "none", "slow", "haste", "fear", "conf", "inv", "pois", "bers", "rot", "summon", "abj", "backlit", "charm", "fire", "gloshifter", "shifter", "tp", "wary", "submerged", - "short lived", "paralysis", "bug" + "short lived", "paralysis", "sick", "sleep", "bug" }; const char *mons_enchantment_name(enchant_type ench) @@ -3628,6 +3671,10 @@ void mon_enchant::merge_killer(kill_category k) void mon_enchant::cap_degree() { + // Sickness is not capped. + if (ench == ENCH_SICK) + return; + // Hard cap to simulate old enum behaviour, we should really throw this // out entirely. const int max = ench == ENCH_ABJ? 6 : 4; diff --git a/crawl-ref/source/mon-util.h b/crawl-ref/source/mon-util.h index f35f9cce2f..1317bf983a 100644 --- a/crawl-ref/source/mon-util.h +++ b/crawl-ref/source/mon-util.h @@ -271,7 +271,7 @@ int mons_res_fire( const monsters *mon ); * called from: beam - monstuff - spells4 * *********************************************************************** */ int mons_res_poison( const monsters *mon ); - +int mons_res_acid( const monsters *mon ); int mons_res_negative_energy( const monsters *mon ); bool mons_res_asphyx( const monsters *mon ); diff --git a/crawl-ref/source/monstuff.cc b/crawl-ref/source/monstuff.cc index d4e3e67354..f299b36fed 100644 --- a/crawl-ref/source/monstuff.cc +++ b/crawl-ref/source/monstuff.cc @@ -384,6 +384,20 @@ void monster_die(monsters *monster, char killer, int i, bool silent) #ifdef DGL_MILESTONES check_kill_milestone(monster, killer, i); #endif + + // Take note! + if (killer != KILL_RESET && killer != KILL_DISMISSED) + { + if ( MONST_INTERESTING(monster) || + // XXX yucky hack + monster->type == MONS_PLAYER_GHOST || + monster->type == MONS_PANDEMONIUM_DEMON ) + { + take_note(Note(NOTE_KILL_MONSTER, monster->type, 0, + ptr_monam(monster, DESC_NOCAP_A, true))); + } + } + // From time to time Trog gives you a little bonus if (killer == KILL_YOU && you.berserker) @@ -784,15 +798,6 @@ void monster_die(monsters *monster, char killer, int i, bool silent) if (killer != KILL_RESET && killer != KILL_DISMISSED) { - if ( MONST_INTERESTING(monster) || - // XXX yucky hack - monster->type == MONS_PLAYER_GHOST || - monster->type == MONS_PANDEMONIUM_DEMON ) - { - take_note(Note(NOTE_KILL_MONSTER, monster->type, 0, - ptr_monam(monster, DESC_NOCAP_A, true))); - } - you.kills.record_kill(monster, killer, pet_kill); if (monster->has_ench(ENCH_ABJ)) @@ -2403,7 +2408,8 @@ static bool handle_potion(struct monsters *monster, bolt & beem) { bool imbibed = false; - switch (mitm[monster->inv[MSLOT_POTION]].sub_type) + const int potion_type = mitm[monster->inv[MSLOT_POTION]].sub_type; + switch (potion_type) { case POT_HEALING: case POT_HEAL_WOUNDS: @@ -2423,6 +2429,14 @@ static bool handle_potion(struct monsters *monster, bolt & beem) heal_monster(monster, 10 + random2avg(28, 3), false); } + if (potion_type == POT_HEALING) + { + monster->del_ench(ENCH_POISON); + monster->del_ench(ENCH_SICK); + monster->del_ench(ENCH_CONFUSION); + monster->del_ench(ENCH_ROT); + } + imbibed = true; } break; @@ -3273,9 +3287,15 @@ static bool handle_throw(struct monsters *monster, bolt & beem) // ok, we'll try it. setup_generic_throw( monster, beem ); + // set fake damage for the tracer. + beem.damage = dice_def(10, 10); + // fire tracer fire_tracer( monster, beem ); + // clear fake damage (will be set correctly in mons_throw). + beem.damage = 0; + // good idea? if (mons_should_fire( beem )) { @@ -3319,6 +3339,16 @@ static void monster_add_energy(monsters *monster) // Do natural regeneration for monster. static void monster_regenerate(monsters *monster) { + if (monster->has_ench(ENCH_SICK)) + return; + + // Water/lava creatures out of their element cannot regenerate. + if (monster_habitat(monster->type) != DNGN_FLOOR + && !monster_habitable_grid(monster, grd(monster->pos()))) + { + return; + } + // regenerate: if (monster_descriptor(monster->type, MDSC_REGENERATES) @@ -3714,6 +3744,43 @@ void handle_monsters(void) } } // end handle_monster() +static bool monster_wants_weapon(const monsters *monster, const item_def &weap) +{ + if (is_fixed_artefact( weap )) + return (false); + + if (is_random_artefact( weap )) + return (false); + + // wimpy monsters (Kob, gob) shouldn't pick up halberds etc + // of course, this also block knives {dlb}: + if ((mons_species(monster->type) == MONS_KOBOLD + || mons_species(monster->type) == MONS_GOBLIN) + && property( weap, PWPN_HIT ) <= 0) + { + return (false); + } + + // Nobody picks up giant clubs: + if (weap.sub_type == WPN_GIANT_CLUB + || weap.sub_type == WPN_GIANT_SPIKED_CLUB) + { + return (false); + } + + const int brand = get_weapon_brand(weap); + const int holiness = monster->holiness(); + if (brand == SPWPN_DISRUPTION && holiness == MH_UNDEAD) + return (false); + + if (brand == SPWPN_HOLY_WRATH + && (holiness == MH_DEMONIC || holiness == MH_UNDEAD)) + { + return (false); + } + + return (true); +} //--------------------------------------------------------------- // @@ -3836,28 +3903,9 @@ static bool handle_pickup(struct monsters *monster) if (monster->inv[MSLOT_WEAPON] != NON_ITEM) return (false); - if (is_fixed_artefact( mitm[item] )) + if (!monster_wants_weapon(monster, mitm[item])) return (false); - if (is_random_artefact( mitm[item] )) - return (false); - - // wimpy monsters (Kob, gob) shouldn't pick up halberds etc - // of course, this also block knives {dlb}: - if ((mons_species(monster->type) == MONS_KOBOLD - || mons_species(monster->type) == MONS_GOBLIN) - && property( mitm[item], PWPN_HIT ) <= 0) - { - return (false); - } - - // Nobody picks up giant clubs: - if (mitm[item].sub_type == WPN_GIANT_CLUB - || mitm[item].sub_type == WPN_GIANT_SPIKED_CLUB) - { - return (false); - } - monster->inv[MSLOT_WEAPON] = item; if (get_weapon_brand(mitm[monster->inv[MSLOT_WEAPON]]) == SPWPN_PROTECTION) @@ -4224,7 +4272,7 @@ void mons_check_pool(monsters *mons, int killer) if (lev == 2 || (lev && !mons->paralysed())) return; - const int grid = grd(mons->pos()); + int grid = grd(mons->pos()); if ((grid == DNGN_LAVA || grid == DNGN_DEEP_WATER) && !monster_habitable_grid(mons, grid)) { @@ -4237,9 +4285,12 @@ void mons_check_pool(monsters *mons, int killer) ptr_monam(mons, DESC_CAP_THE), (grid == DNGN_LAVA ? "lava" : "water")); + if (grid == DNGN_LAVA && mons_res_fire(mons) > 0) + grid = DNGN_DEEP_WATER; + // Even fire resistant monsters perish in lava, but undead can survive // deep water. - if (grid == DNGN_LAVA || mons->holiness() != MH_UNDEAD) + if (grid == DNGN_LAVA || mons->can_drown()) { if (message) { @@ -4270,7 +4321,15 @@ static void monster_move(struct monsters *monster) if (monster->confused()) { if (mmov_x || mmov_y || one_chance_in(15)) - do_move_monster(monster, mmov_x, mmov_y); + { + coord_def newpos = monster->pos() + coord_def(mmov_x, mmov_y); + if (in_bounds(newpos) + && (monster_habitat(monster->type) == DNGN_FLOOR + || monster_habitable_grid(monster, grd(newpos)))) + { + do_move_monster(monster, mmov_x, mmov_y); + } + } return; } @@ -5044,9 +5103,9 @@ bool message_current_target() if (mons_near(montarget) && player_monster_visible(montarget)) { - mprf( MSGCH_PROMPT, "You are currently targeting %s " + mprf( MSGCH_PROMPT, "Current target: %s " "(use p/t/f to fire at it again.)", - ptr_monam(montarget, DESC_NOCAP_THE) ); + ptr_monam(montarget, DESC_PLAIN) ); return (true); } diff --git a/crawl-ref/source/mstuff2.cc b/crawl-ref/source/mstuff2.cc index 9c52cb784d..9eafee035f 100644 --- a/crawl-ref/source/mstuff2.cc +++ b/crawl-ref/source/mstuff2.cc @@ -595,6 +595,9 @@ void mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cast) break; case MS_CANTRIP: + { + const bool friendly = mons_friendly(monster); + bool need_friendly_stub = false; // Monster spell of uselessness, just prints a message. // This spell exists so that some monsters with really strong // spells (ie orc priest) can be toned down a bit. -- bwr @@ -607,10 +610,16 @@ void mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cast) MSGCH_MONSTER_ENCHANT ); break; case 1: - mpr( "You feel troubled." ); + if (friendly) + need_friendly_stub = true; + else + mpr( "You feel troubled." ); break; case 2: - mpr( "You feel a wave of unholy energy pass over you." ); + if (friendly) + need_friendly_stub = true; + else + mpr( "You feel a wave of unholy energy pass over you." ); break; case 3: simple_monster_message( monster, " looks stronger.", @@ -626,14 +635,22 @@ void mons_cast(struct monsters *monster, struct bolt &pbolt, int spell_cast) break; case 6: default: - if (one_chance_in(20)) + if (friendly) + need_friendly_stub = true; + else if (one_chance_in(20)) mpr( "You resist (whatever that was supposed to do)." ); else mpr( "You resist." ); break; } + + if (need_friendly_stub) + simple_monster_message(monster, " shimmers for a moment.", + MSGCH_MONSTER_ENCHANT); + return; } + } fire_beam( pbolt ); } // end mons_cast() @@ -834,8 +851,7 @@ void setup_dragon(struct monsters *monster, struct bolt &pbolt) ? draco_subspecies( monster ) : monster->type; int scaling = 100; - pbolt.name = ptr_monam( monster, DESC_PLAIN ); - + pbolt.name.clear(); switch (type) { case MONS_FIREDRAKE: @@ -843,21 +859,21 @@ void setup_dragon(struct monsters *monster, struct bolt &pbolt) case MONS_DRAGON: case MONS_LINDWURM: case MONS_XTAHUA: - pbolt.name += "'s blast of flame"; + pbolt.name += "blast of flame"; pbolt.flavour = BEAM_FIRE; pbolt.colour = RED; pbolt.aux_source = "blast of fiery breath"; break; case MONS_ICE_DRAGON: - pbolt.name += "'s blast of cold"; + pbolt.name += "blast of cold"; pbolt.flavour = BEAM_COLD; pbolt.colour = WHITE; pbolt.aux_source = "blast of icy breath"; break; case MONS_RED_DRACONIAN: - pbolt.name += "'s searing breath"; + pbolt.name += "searing blast"; #ifdef DEBUG_DIAGNOSTICS mprf( MSGCH_DIAGNOSTICS, "bolt name: '%s'", pbolt.name.c_str() ); #endif @@ -868,7 +884,7 @@ void setup_dragon(struct monsters *monster, struct bolt &pbolt) break; case MONS_WHITE_DRACONIAN: - pbolt.name += "'s chilling breath"; + pbolt.name += "chilling blast"; #ifdef DEBUG_DIAGNOSTICS mprf( MSGCH_DIAGNOSTICS, "bolt name: '%s'", pbolt.name.c_str() ); #endif diff --git a/crawl-ref/source/mutation.cc b/crawl-ref/source/mutation.cc index 89f5ca9f7e..77e5a28acb 100644 --- a/crawl-ref/source/mutation.cc +++ b/crawl-ref/source/mutation.cc @@ -967,8 +967,8 @@ formatted_string describe_mutations() if (you.experience_level > 14) result += " continuously"; result += "." EOL; - have_any = true; } + have_any = true; break; case SP_MUMMY: diff --git a/crawl-ref/source/newgame.cc b/crawl-ref/source/newgame.cc index 958086967a..196bf9e142 100644 --- a/crawl-ref/source/newgame.cc +++ b/crawl-ref/source/newgame.cc @@ -1792,7 +1792,7 @@ static void give_basic_mutations(unsigned char speci) you.mutation[MUT_SLOW_METABOLISM] = 3; break; case SP_CENTAUR: - you.mutation[MUT_FAST] = 1; + you.mutation[MUT_FAST] = 2; you.mutation[MUT_DEFORMED] = 1; you.mutation[MUT_FAST_METABOLISM] = 2; break; diff --git a/crawl-ref/source/player.cc b/crawl-ref/source/player.cc index 22f3339a03..abf7f089e0 100644 --- a/crawl-ref/source/player.cc +++ b/crawl-ref/source/player.cc @@ -4424,14 +4424,7 @@ void dec_haste_player( void ) void disease_player( int amount ) { - if (you.is_undead || amount <= 0) - return; - - mpr( "You feel ill." ); - - const int tmp = you.disease + amount; - you.disease = (tmp > 210) ? 210 : tmp; - learned_something_new(TUT_YOU_SICK); + you.sicken(amount); } void dec_disease_player( void ) @@ -5214,3 +5207,15 @@ kill_category player::kill_alignment() const { return (KC_YOU); } + +void player::sicken(int amount) +{ + if (is_undead || amount <= 0) + return; + + mpr( "You feel ill." ); + + const int tmp = disease + amount; + disease = (tmp > 210) ? 210 : tmp; + learned_something_new(TUT_YOU_SICK); +} diff --git a/crawl-ref/source/religion.cc b/crawl-ref/source/religion.cc index 14909991a0..d185ed1733 100644 --- a/crawl-ref/source/religion.cc +++ b/crawl-ref/source/religion.cc @@ -603,7 +603,26 @@ static void do_god_gift() } // end of gift giving } -void pray(void) +std::string god_prayer_reaction() +{ + std::string result; + result += god_name(you.religion); + result += " is "; + + result += + (you.piety > 130) ? "exalted by your worship" : + (you.piety > 100) ? "extremely pleased with you" : + (you.piety > 70) ? "greatly pleased with you" : + (you.piety > 40) ? "most pleased with you" : + (you.piety > 20) ? "pleased with you" : + (you.piety > 5) ? "noncommittal" + : "displeased"; + + result += "."; + return result; +} + +void pray() { const bool was_praying = (you.duration[DUR_PRAYER] != 0); @@ -677,19 +696,7 @@ void pray(void) simple_god_message(" demands penance!"); else { - strcpy(info, god_name(you.religion)); - strcat(info, " is "); - - strcat(info, (you.piety > 130) ? "exalted by your worship" : - (you.piety > 100) ? "extremely pleased with you" : - (you.piety > 70) ? "greatly pleased with you" : - (you.piety > 40) ? "most pleased with you" : - (you.piety > 20) ? "pleased with you" : - (you.piety > 5) ? "noncommittal" - : "displeased"); - - strcat(info, "."); - mpr( info, MSGCH_PRAY, you.religion ); + mpr( god_prayer_reaction().c_str(), MSGCH_PRAY, you.religion ); if (you.piety > 130) you.duration[DUR_PRAYER] *= 3; diff --git a/crawl-ref/source/religion.h b/crawl-ref/source/religion.h index 0a8d565cca..5272a1383e 100644 --- a/crawl-ref/source/religion.h +++ b/crawl-ref/source/religion.h @@ -28,7 +28,8 @@ void gain_piety(char pgn); void god_speaks( int god, const char *mesg ); void lose_piety(char pgn); void offer_corpse(int corpse); -void pray(void); +std::string god_prayer_reaction(); +void pray(); void handle_god_time(void); char god_colour(char god); void god_pitch(unsigned char which_god); diff --git a/crawl-ref/source/spells1.cc b/crawl-ref/source/spells1.cc index 72c2748123..54062c881d 100644 --- a/crawl-ref/source/spells1.cc +++ b/crawl-ref/source/spells1.cc @@ -66,9 +66,7 @@ int blink(void) // query for location {dlb}: for (;;) { - mpr("Blink to where?", MSGCH_PROMPT); - - direction(beam, DIR_TARGET, TARG_ANY); + direction(beam, DIR_TARGET, TARG_ANY, false, "Blink to where?"); if (!beam.isValid || coord_def(beam.tx, beam.ty) == you.pos()) { diff --git a/crawl-ref/source/spells3.cc b/crawl-ref/source/spells3.cc index b5a19d385c..7d450a8f7d 100644 --- a/crawl-ref/source/spells3.cc +++ b/crawl-ref/source/spells3.cc @@ -187,21 +187,10 @@ bool detect_curse(bool suppress_msg) return (success); } // end detect_curse() -int cast_smiting(int power) +int cast_smiting(int power, dist &beam) { bool success = false; - struct dist beam; - struct monsters *monster = 0; // NULL {dlb} - - mpr("Smite whom?", MSGCH_PROMPT); - - direction( beam, DIR_TARGET, TARG_ENEMY ); - - if (!beam.isValid) - { - canned_msg(MSG_OK); - return (-1); - } + monsters *monster = 0; // NULL {dlb} if (mgrd[beam.tx][beam.ty] == NON_MONSTER || beam.isMe) @@ -276,11 +265,9 @@ int airstrike(int power, dist &beam) return (success); } // end airstrike() -int cast_bone_shards(int power) +int cast_bone_shards(int power, bolt &beam) { bool success = false; - struct bolt beam; - struct dist spelld; if (you.equip[EQ_WEAPON] == -1 || you.inv[you.equip[EQ_WEAPON]].base_type != OBJ_CORPSES) @@ -291,9 +278,6 @@ int cast_bone_shards(int power) mpr("The corpse collapses into a mass of pulpy flesh."); else { - if (spell_direction(spelld, beam) == -1) - return (-1); - // practical max of 100 * 15 + 3000 = 4500 // actual max of 200 * 15 + 3000 = 6000 power *= 15; diff --git a/crawl-ref/source/spells3.h b/crawl-ref/source/spells3.h index 8d8a77e1b0..067117f979 100644 --- a/crawl-ref/source/spells3.h +++ b/crawl-ref/source/spells3.h @@ -14,6 +14,7 @@ struct dist; +struct bolt; // updated 24may2000 {dlb} /* *********************************************************************** @@ -33,7 +34,7 @@ int airstrike(int power, dist &beam); /* *********************************************************************** * called from: spell * *********************************************************************** */ -int cast_bone_shards(int power); +int cast_bone_shards(int power, bolt &); // updated 24may2000 {dlb} @@ -61,7 +62,7 @@ bool cast_selective_amnesia(bool force); /* *********************************************************************** * called from: ability - spell * *********************************************************************** */ -int cast_smiting(int power); +int cast_smiting(int power, dist &); // updated 24may2000 {dlb} diff --git a/crawl-ref/source/spells4.cc b/crawl-ref/source/spells4.cc index a57bdb0245..19a2ff0f22 100644 --- a/crawl-ref/source/spells4.cc +++ b/crawl-ref/source/spells4.cc @@ -866,6 +866,7 @@ static int sleep_monsters(int x, int y, int pow, int garbage) if (menv[mnstr].has_ench(ENCH_SLEEP_WARY)) return 0; menv[mnstr].behaviour = BEH_SLEEP; + menv[mnstr].add_ench(ENCH_SLEEPY); menv[mnstr].add_ench(ENCH_SLEEP_WARY); if (mons_class_flag( menv[mnstr].type, M_COLD_BLOOD ) && coinflip()) @@ -2356,6 +2357,7 @@ void cast_fragmentation(int pow) // jmf: ripped idea from airstrike blast.set_target(beam); blast.is_tracer = false; blast.flavour = BEAM_FRAG; + blast.hit = AUTOMATIC_HIT; // Number of dice vary... 3 is easy/common, but it can get as high as 6. blast.damage = dice_def( 0, 5 + pow / 10 ); @@ -2972,11 +2974,9 @@ int cast_apportation(int pow) return (done); } -void cast_sandblast(int pow) +void cast_sandblast(int pow, bolt &beam) { bool big = true; - struct dist spd; - struct bolt beam; // this type of power manipulation should be done with the others, // currently over in it_use2.cc (ack) -- bwr @@ -2988,19 +2988,11 @@ void cast_sandblast(int pow) { int wep = you.equip[EQ_WEAPON]; if (you.inv[wep].base_type == OBJ_MISSILES - && (you.inv[wep].sub_type == MI_STONE || you.inv[wep].sub_type == MI_LARGE_ROCK)) + && (you.inv[wep].sub_type == MI_STONE + || you.inv[wep].sub_type == MI_LARGE_ROCK)) big = true; } - if (spell_direction(spd, beam) == -1) - return; - - if (spd.isMe) - { - canned_msg(MSG_UNTHINKING_ACT); - return; - } - if (big) { dec_inv_item_quantity( you.equip[EQ_WEAPON], 1 ); diff --git a/crawl-ref/source/spells4.h b/crawl-ref/source/spells4.h index 92cc3ae0ae..d76921f82a 100644 --- a/crawl-ref/source/spells4.h +++ b/crawl-ref/source/spells4.h @@ -39,7 +39,7 @@ void cast_intoxicate(int pow); void cast_mass_sleep(int pow); void cast_passwall(int pow); void cast_rotting(int pow); -void cast_sandblast(int powc); +void cast_sandblast(int powc, bolt &beam); void cast_see_invisible(int pow); void cast_shatter(int pow); diff --git a/crawl-ref/source/spl-cast.cc b/crawl-ref/source/spl-cast.cc index eb39ad7953..03efe0b96c 100644 --- a/crawl-ref/source/spl-cast.cc +++ b/crawl-ref/source/spl-cast.cc @@ -668,7 +668,7 @@ bool cast_a_spell(void) random_uselessness( 2 + random2(7), 0 ); else { - const int cast_result = your_spells( spell ); + const spret_type cast_result = your_spells( spell ); if (cast_result == SPRET_ABORT) return (false); @@ -852,7 +852,7 @@ static bool spell_is_uncastable(int spell) // returns SPRET_SUCCESS if spell is successfully cast for purposes of // exercising, SPRET_FAIL otherwise, or SPRET_ABORT if the player canceled // the casting. -int your_spells( int spc2, int powc, bool allow_fail ) +spret_type your_spells( int spc2, int powc, bool allow_fail ) { int dem_hor = 0; int dem_hor2 = 0; @@ -880,11 +880,11 @@ int your_spells( int spc2, int powc, bool allow_fail ) testbits( flags, SPFLAG_GRID ) ? DIR_TARGET : testbits( flags, SPFLAG_DIR ) ? DIR_DIR : DIR_NONE); + const char *prompt = get_spell_target_prompt(spc2); if (dir == DIR_DIR) - mpr("Which direction? ", MSGCH_PROMPT); + mpr(prompt? prompt : "Which direction? ", MSGCH_PROMPT); - if (spell_direction( spd, beam, dir, targ, - get_spell_target_prompt(spc2) ) == -1) + if (spell_direction( spd, beam, dir, targ, prompt ) == -1) return (SPRET_ABORT); if (testbits( flags, SPFLAG_NOT_SELF ) && spd.isMe) @@ -939,7 +939,7 @@ int your_spells( int spc2, int powc, bool allow_fail ) && you.piety >= 100 && random2(150) <= you.piety)) { canned_msg(MSG_NOTHING_HAPPENS); - return (0); + return SPRET_FAIL; } unsigned int sptype = 0; @@ -1194,8 +1194,7 @@ int your_spells( int spc2, int powc, bool allow_fail ) break; case SPELL_SMITING: - if (cast_smiting(powc) == -1) - return (SPRET_ABORT); + cast_smiting(powc, spd); break; case SPELL_REPEL_UNDEAD: @@ -1416,8 +1415,7 @@ int your_spells( int spc2, int powc, bool allow_fail ) break; case SPELL_BONE_SHARDS: - if (cast_bone_shards(powc) == -1) - return (SPRET_ABORT); + cast_bone_shards(powc, beam); break; case SPELL_BANISHMENT: @@ -1710,8 +1708,16 @@ int your_spells( int spc2, int powc, bool allow_fail ) break; case SPELL_SLEEP: - zapping(ZAP_SLEEP, powc, beam); + { + const int sleep_power = + stepdown_value( powc * 9 / 10, 5, 35, 45, 50 ); +#ifdef DEBUG_DIAGNOSTICS + mprf(MSGCH_DIAGNOSTICS, "Sleep power stepdown: %d -> %d", + powc, sleep_power); +#endif + zapping(ZAP_SLEEP, sleep_power, beam); break; + } case SPELL_MASS_SLEEP: cast_mass_sleep(powc); @@ -1796,7 +1802,7 @@ int your_spells( int spc2, int powc, bool allow_fail ) break; case SPELL_SANDBLAST: - cast_sandblast(powc); + cast_sandblast(powc, beam); break; case SPELL_ROTTING: @@ -1853,7 +1859,7 @@ int your_spells( int spc2, int powc, bool allow_fail ) spellcasting_side_effects(spc2); - return (true); + return (SPRET_SUCCESS); } // end you_spells() void exercise_spell( int spell, bool spc, bool success ) diff --git a/crawl-ref/source/spl-cast.h b/crawl-ref/source/spl-cast.h index 30f5a49c2e..04557a95d7 100644 --- a/crawl-ref/source/spl-cast.h +++ b/crawl-ref/source/spl-cast.h @@ -14,6 +14,8 @@ #ifndef SPL_CAST_H #define SPL_CAST_H +#include "enum.h" + char list_spells( void ); int spell_fail( int spell ); int calc_spell_power( int spell, bool apply_intel, bool fail_rate_chk = false ); @@ -37,7 +39,7 @@ bool cast_a_spell( void ); /* *********************************************************************** * called from: ability - debug - it_use3 - spell * *********************************************************************** */ -int your_spells( int spc2, int powc = 0, bool allow_fail = true ); +spret_type your_spells( int spc2, int powc = 0, bool allow_fail = true ); // last updated 12may2000 {dlb} /* *********************************************************************** diff --git a/crawl-ref/source/spl-data.h b/crawl-ref/source/spl-data.h index 758514fe91..f588cbdae8 100644 --- a/crawl-ref/source/spl-data.h +++ b/crawl-ref/source/spl-data.h @@ -291,7 +291,7 @@ }, { - SPELL_PARALYZE, "Paralyze", + SPELL_PARALYZE, "Paralyse", SPTYP_ENCHANTMENT, SPFLAG_DIR_OR_TARGET, 4, @@ -469,9 +469,9 @@ { SPELL_SMITING, "Smiting", SPTYP_HOLY, - SPFLAG_NONE, + SPFLAG_TARGET | SPFLAG_NOT_SELF, 4, - NULL + "Smite whom?" }, { @@ -677,7 +677,7 @@ 1, NULL }, - + { SPELL_VAMPIRIC_DRAINING, "Vampiric Draining", SPTYP_NECROMANCY, @@ -873,7 +873,7 @@ { SPELL_BONE_SHARDS, "Bone Shards", SPTYP_NECROMANCY, - SPFLAG_NONE, + SPFLAG_DIR_OR_TARGET, 3, NULL }, diff --git a/crawl-ref/source/spl-util.cc b/crawl-ref/source/spl-util.cc index fc16f70628..b0465fb75c 100644 --- a/crawl-ref/source/spl-util.cc +++ b/crawl-ref/source/spl-util.cc @@ -685,7 +685,8 @@ char spell_direction( struct dist &spelld, struct bolt &pbolt, targeting_type restrict, int mode, const char *prompt ) { - message_current_target(); + if (restrict != DIR_DIR) + message_current_target(); direction( spelld, restrict, mode, false, prompt ); diff --git a/crawl-ref/source/stuff.cc b/crawl-ref/source/stuff.cc index 31aa0de613..74c9250bdd 100644 --- a/crawl-ref/source/stuff.cc +++ b/crawl-ref/source/stuff.cc @@ -376,6 +376,14 @@ void end(int exit_code, bool print_error, const char *format, ...) error += "\n"; fprintf(stderr, "%s", error.c_str()); } + +#if defined(WIN32CONSOLE) || defined(DOS) + if (exit_code) + { + fprintf(stderr, "Hit Enter to continue...\n"); + getchar(); + } +#endif exit(exit_code); } diff --git a/crawl-ref/source/util/levcomp.ypp b/crawl-ref/source/util/levcomp.ypp index 83ae14bf5e..f917ad37e6 100644 --- a/crawl-ref/source/util/levcomp.ypp +++ b/crawl-ref/source/util/levcomp.ypp @@ -31,7 +31,7 @@ void yyerror(const char *e) { fprintf(stderr, "%s:%d: %s\n", lc_desfile.c_str(), yylineno, e); // Bail bail bail. - exit(1); + end(1); } %} diff --git a/crawl-ref/source/version.h b/crawl-ref/source/version.h index 0ba1443422..19b3b2deb7 100644 --- a/crawl-ref/source/version.h +++ b/crawl-ref/source/version.h @@ -37,7 +37,7 @@ #define CRAWL "Dungeon Crawl Stone Soup" -#define VER_NUM "0.2.1" +#define VER_NUM "0.2.2" #define VER_QUAL "" // last updated 07august2001 {mv} diff --git a/crawl-ref/source/view.cc b/crawl-ref/source/view.cc index 7542bb1428..9e1c719c5f 100644 --- a/crawl-ref/source/view.cc +++ b/crawl-ref/source/view.cc @@ -450,6 +450,9 @@ unsigned short dos_brand( unsigned short colour, screen_buffer_t colour_code_map( int x, int y, bool item_colour, bool travel_colour ) { + if (!is_terrain_known(x + 1, y + 1)) + return (BLACK); + // XXX: Yes, the map array and the grid array are off by one. -- bwr const unsigned short map_flags = env.map[x][y]; const int grid_value = grd[x + 1][y + 1]; @@ -697,6 +700,11 @@ bool check_awaken(int mons_aw) struct monsters *monster = &menv[mons_aw]; const int mon_holy = mons_holiness(monster); + // Monsters put to sleep by ensorcelled hibernation will sleep + // at least one turn. + if (monster->has_ench(ENCH_SLEEPY)) + return (false); + // berserkers aren't really concerned about stealth if (you.berserker) return (true); -- cgit v1.2.3-54-g00ecf