Merge branch 'master' into win32-x64-working
* master: (354 commits) Add missing protos a warning bout lc_error Add S_poisoncloud to Guidebooks ... Conflicts: .gitattributes dat/.gitattributes doc/.gitattributes doc/Guidebook.mn include/config.h include/decl.h include/extern.h include/flag.h include/hack.h include/ntconf.h include/sys.h include/wceconf.h src/apply.c src/attrib.c src/bones.c src/botl.c src/dbridge.c src/dig.c src/do.c src/do_name.c src/dog.c src/dungeon.c src/eat.c src/end.c src/files.c src/fountain.c src/hack.c src/invent.c src/light.c src/makemon.c src/mhitu.c src/mklev.c src/mkmaze.c src/mkobj.c src/mkroom.c src/mon.c src/objnam.c src/options.c src/pager.c src/pickup.c src/potion.c src/pray.c src/questpgr.c src/read.c src/restore.c src/rnd.c src/role.c src/rumors.c src/save.c src/shk.c src/sit.c src/sp_lev.c src/sys.c src/teleport.c src/trap.c src/u_init.c src/uhitm.c src/wield.c src/worn.c src/zap.c sys/amiga/.gitattributes sys/mac/.gitattributes sys/msdos/.gitattributes sys/msdos/pctiles.c sys/msdos/vidvga.c sys/os2/.gitattributes sys/share/.gitattributes sys/share/pcmain.c sys/unix/.gitattributes sys/unix/hints/.gitattributes sys/unix/sysconf sys/unix/unixmain.c sys/vms/.gitattributes sys/wince/.gitattributes sys/wince/mhstatus.c sys/winnt/.gitattributes sys/winnt/Makefile.msc sys/winnt/nhsetup.bat util/lev_comp.l util/makedefs.c win/X11/winmenu.c win/X11/winstat.c win/gnome/gnstatus.c win/share/tilemap.c win/tty/termcap.c win/tty/topl.c win/tty/wintty.c
This commit is contained in:
4
.gitattributes
vendored
4
.gitattributes
vendored
@@ -1,5 +1,5 @@
|
||||
*.[ch] filter=NHtext merge=NHsubst
|
||||
*.sh filter=NHtext merge=NHsubst
|
||||
*.[ch] NHSUBST
|
||||
*.sh NHSUBST
|
||||
* text=auto
|
||||
*.hqx -text
|
||||
*.sln -text
|
||||
|
||||
6
DEVEL/.gitattributes
vendored
6
DEVEL/.gitattributes
vendored
@@ -1,4 +1,4 @@
|
||||
Developer.txt filter=NHtext merge=NHsubst
|
||||
nhgitset.pl filter=NHtext merge=NHsubst
|
||||
hookdir/* filter=NHtext merge=NHsubst
|
||||
Developer.txt NHSUBST
|
||||
nhgitset.pl NHSUBST
|
||||
hooksdir/* NHSUBST
|
||||
* text=auto
|
||||
|
||||
@@ -136,9 +136,9 @@ B. Enabling variable expansion
|
||||
Variable expansion is controlled by the .gitattributes file.
|
||||
|
||||
To enable variable expansion:
|
||||
pattern filter=NHtext merge=NHsubst
|
||||
pattern NHSUBST
|
||||
To disable variable expansion:
|
||||
pattern -filter
|
||||
pattern -NHSUBST
|
||||
|
||||
More information: "git help gitattributes"
|
||||
|
||||
@@ -147,8 +147,8 @@ C. Oddities
|
||||
instead of "git add" or "git commit." Nothing terrible will happen if you
|
||||
use the wrong one, but the values will not be updated.
|
||||
|
||||
Due to the way this abuses git filters, the updated values are not visible
|
||||
in your working tree.
|
||||
Variable expansion modifies the files in the work tree - your editor or
|
||||
IDE may or may not be happy with this.
|
||||
|
||||
D. Using your own hooks
|
||||
You can use your own hooks - put them in .git/hooks as usual BUT name them
|
||||
|
||||
83
DEVEL/code_features.txt
Normal file
83
DEVEL/code_features.txt
Normal file
@@ -0,0 +1,83 @@
|
||||
$NHDT-Date: 1426969026 2015/03/21 20:17:06 $ $NHDT-Branch: master $:$NHDT-Revision: 1.137 $
|
||||
code_features.txt
|
||||
|
||||
Developer-useful info about code features, assumptions, purpose,
|
||||
rationale, etc.
|
||||
|
||||
==============================================
|
||||
FEATURE_NOTICE Alerts for a Release
|
||||
|
||||
There is a code mechanism for alterting players to a change in behavior
|
||||
over prior versions of the game.
|
||||
|
||||
Here's how to do it:
|
||||
o Where the change in behavior needs to alert the player,
|
||||
- Add an 'if statement' to invoke the alert behavior
|
||||
if the condition is met, for example
|
||||
if (flags.suppress_alert < FEATURE_NOTICE_VER(3.6.0))
|
||||
pline("Note: and explain the change here.");
|
||||
- The example above will alert the users for a new feature
|
||||
added in 3.6.0 via a one-liner via pline(), but you
|
||||
could get more elaborate (just make sure it is all done
|
||||
in the 'if' code block..
|
||||
|
||||
Once the user finds the alert no longer useful, or becoming
|
||||
annoying, they can set the "suppress_alert" option.
|
||||
- The user can only set the suppress_alert to the current
|
||||
version, not future versions. That restriction is done
|
||||
so that the feature can be used for new things in new
|
||||
releases.
|
||||
- The suppression can be done interactively mid game with
|
||||
the 'O' command, or via
|
||||
OPTIONS=suppress_alert:3.6.0
|
||||
in the user's config file.
|
||||
|
||||
==============================================
|
||||
PREFIXES_IN_USE and NOCWD_ASSUMPTIONS
|
||||
|
||||
Those provide a storage mechanism for holding the paths to various different
|
||||
types of files. Those paths are stored in the fqn_prefix[] array. They are a
|
||||
mechanism for enabling separation of the different files that NetHack needs.
|
||||
|
||||
The prefixes are added to the beginning of file names by various routines in
|
||||
files.c immediately prior to opening one of the types of files that the game
|
||||
uses.
|
||||
|
||||
They aren't about config file options (although config file options would be
|
||||
one way to set non-default values for some of the paths in the fqn_prefix[]
|
||||
array). Obviously the very first path needed (now sysconfdir, previously
|
||||
configdir) isn't viable for setting via config file options, but the game
|
||||
still needs to hunt it down "someplace." When the "someplace" is figured
|
||||
out, that place (path) would be stored in fqn_prefix[SYSCONPREFIX]. How it
|
||||
gets stored in fqn_prefix[SYSCONPREFIX] is up to us as developers.
|
||||
|
||||
Any of the fqn_prefix[] entries can be set somehow. It could be done in port
|
||||
startup code; in options processing; in config file processing; by
|
||||
translating a system environment variable such as USERPROFILE; whatever
|
||||
you/we want. The point is that NOCWD_ASSUMPTIONS and PREFIXES_IN_USE are
|
||||
there to ensure that there is a place to store that path information. The
|
||||
code to *utilize* the information is already in files.c (see fqname()).
|
||||
|
||||
There is a fqn_prefix[] entry for holding the path to each of the following:
|
||||
PREFIX NAME
|
||||
0 HACKPREFIX hackdir
|
||||
1 LEVELPREFIX leveldir location to create level files
|
||||
2 SAVEPREFIX savedir location to create/read saved games
|
||||
3 BONESPREFIX bonesir location to create/read bones
|
||||
4 DATAPREFIX datadir location to read data.base etc.
|
||||
5 SCOREPREFIX scoredir location to read/write scorefile
|
||||
6 LOCKPREFIX lockdir location to create/read lock files
|
||||
7 SYSCONFPREFIX sysconfdir location to read SYSCF_FILE
|
||||
8 CONFIGPREFIX configdir location to read user configuration file
|
||||
9 TROUBLEPREFIX troubledir location to place panic files etc.
|
||||
|
||||
To recap, they are about enabling "different paths for different things", and
|
||||
separation of:
|
||||
- read-only stuff from read-write stuff.
|
||||
- sysadmin stuff from user-writeable stuff.
|
||||
etc.
|
||||
|
||||
=================== NEXT FEATURE ==========================
|
||||
|
||||
|
||||
|
||||
198
DEVEL/git_recipes.txt
Normal file
198
DEVEL/git_recipes.txt
Normal file
@@ -0,0 +1,198 @@
|
||||
Git has a messy learning curve. This file is an attempt to serve as a quick
|
||||
reference for basic tasks while you get up to speed.
|
||||
|
||||
------------------------
|
||||
|
||||
[*] git checkout [-f] (branch)
|
||||
|
||||
Switch your local repository to be at the most recent commit of (branch).
|
||||
Including -f will discard changes made in the working directory.
|
||||
|
||||
|
||||
[*] git status [-uall | -uno]
|
||||
|
||||
Shows all changed files in your local repository and also a list of the ones
|
||||
you have staged for commit.
|
||||
Including -uall will also show you all untracked files in all subdirectories.
|
||||
Including -uno will show you _no_ untracked files.
|
||||
|
||||
|
||||
[*] git log [-NUM]
|
||||
[*] git log <commit1> <commit2>
|
||||
[*] git log [--pretty=one]
|
||||
[*] git log (branch)
|
||||
|
||||
For a full explanation of all the arguments you can pass to 'log', please see
|
||||
the manual; there are a lot and these are just a few of the common ones. For
|
||||
our purposes, git log will show you all the commits according to criteria
|
||||
you specify:
|
||||
|
||||
-NUM: The last NUM commits in this branch
|
||||
<commit1> <commit2>: all commits between commit1 and commit2
|
||||
-pretty=one: format output as a single line for each entry
|
||||
(branch): show the commits from (branch) instead of the current one
|
||||
|
||||
[*] git log --pretty=one --decorate --graph --all
|
||||
|
||||
(This is best explained by executing and looking at the output.)
|
||||
|
||||
|
||||
[*] git add (filename)
|
||||
[*] git nhadd (filename)
|
||||
|
||||
Adds the changes you've made in (filename) to the pre-commit staging area.
|
||||
(also referred to as the 'index')
|
||||
OR
|
||||
Make a new file be tracked by git.
|
||||
|
||||
"nhadd" is the preferred syntax and will automatically update the source file
|
||||
headers with the latest date, branch, and version. See Developer.txt for
|
||||
details.
|
||||
|
||||
|
||||
[*] git commit [-a] [-m "text"]
|
||||
[*] git nhcommit [-a] [-m "text"]
|
||||
|
||||
Commits all staged changes (in the index) to this branch in your local repo
|
||||
from your current position.
|
||||
Including -a will 'git add' all eligible files before doing so.
|
||||
Including -m will use "text" as the commit message instead of opening an
|
||||
editor window for you to create one.
|
||||
|
||||
"nhcommit" is the preferred syntax and will automatically update the source file
|
||||
headers with the latest date, branch, and version. See Developer.txt for
|
||||
details.
|
||||
|
||||
|
||||
[*] git push [--all] [-u origin (branch)]
|
||||
|
||||
Sends all your commits for the current branch to the centralized repo.
|
||||
Including --all will send the commits for _all_ branches.
|
||||
Specifying -u is only needed the first time you push (branch) that you
|
||||
created; it establishes the connection between local and remote for that
|
||||
branch.
|
||||
|
||||
|
||||
[*] git reset [--hard] (filename)
|
||||
|
||||
Without any parameters, unstages the changes for (filename) from the index;
|
||||
does not change the working tree. This is the equivalent of the command
|
||||
git reset --mixed (filename); git reset --soft (filename) has no effect.
|
||||
|
||||
With --hard, unstages (filename) from the index and reverts (filename) in
|
||||
the working tree to the most recent commit.
|
||||
|
||||
*** WARNING *** --hard _will_ throw away your changes.
|
||||
|
||||
|
||||
[DSR: I'm hesitant about including this command because you can trash stuff
|
||||
with it. But at the same time, for people who are adapting to a commit not
|
||||
also automatically being a send, it's nice for them to know how to undo one in
|
||||
case they do something wrong. thoughts?]
|
||||
|
||||
[*] git reset [--soft | --mixed | --hard] HEAD~1
|
||||
|
||||
*** WARNING *** Never, EVER do this to a commit that you have already pushed;
|
||||
you will be rewriting history on other people's machines and this will
|
||||
generally turn out very poorly.
|
||||
|
||||
With --soft, undoes the most recent 'git commit' action, but leaves the
|
||||
changes in the index and in the working directory.
|
||||
|
||||
With --mixed, does everything --soft does but also unstages the changes from
|
||||
the index. If you don't specify one of the three, reset will assume this.
|
||||
|
||||
With --hard, does everything --mixed does but also reverts the working tree to
|
||||
the prior commit.
|
||||
|
||||
*** WARNING *** --hard will effectively delete a commit and "lose" the changes.
|
||||
[/end area-of-concern]
|
||||
|
||||
|
||||
[*] git fetch [--all]
|
||||
|
||||
Retrieve commits from the remote repository to your machine.
|
||||
Including --all will get commits for all branches.
|
||||
Does NOT merge them into your local repository.
|
||||
|
||||
|
||||
[*] git pull
|
||||
|
||||
Incorporate any fetched commits for the current branch into your repository
|
||||
and update your position accordingly. This will create a merge commit (noting
|
||||
that you merged a branch into itself).
|
||||
|
||||
|
||||
[*] git rebase [no-arguments version ONLY]
|
||||
|
||||
Incorporate fetched commits for the current branch into your repository, and
|
||||
replay any local commits and changes afterwards on top.
|
||||
|
||||
Quality picture-pages ASCII art:
|
||||
|
||||
E---F---G---H (remote changes)
|
||||
/
|
||||
/
|
||||
(branch 'frog') A---B---C---D---E'---F' (your local changes)
|
||||
|
||||
After 'git fetch' and 'git rebase', it will look like this:
|
||||
|
||||
--- (remote HEAD)
|
||||
|
|
||||
V
|
||||
(branch 'frog') A---B---C---D---E---F---G---H---E'---F'
|
||||
^ ^
|
||||
| |
|
||||
-------- (to be pushed)
|
||||
|
||||
|
||||
[*] git branch (branch)
|
||||
|
||||
Creates a new branch from the current commit you're pointed to.
|
||||
Does not automatically checkout (switch to) the branch.
|
||||
|
||||
|
||||
[*] git checkout -b (branch)
|
||||
|
||||
Creates a new branch from the current commit you're pointed to, and
|
||||
automatically checks out that branch.
|
||||
|
||||
|
||||
[*] git branch <pattern> --list | [--all | -a] | [--remotes | -r]
|
||||
|
||||
Lists all branches matching <pattern>.
|
||||
With --all instead, lists all branches (including remotely tracked ones).
|
||||
With --remotes instead, lists only remote branches.
|
||||
|
||||
|
||||
[*] git merge (branch) [--no-commit]
|
||||
|
||||
Merges all the changes from (branch) since it last diverged from a common
|
||||
ancestor into your current branch.
|
||||
|
||||
With --no-commit, does not automatically create a merge entry in the log but
|
||||
leaves all the merged files in your working directory; to complete the merge
|
||||
you must commit them manually later (likely after you have edited them). This
|
||||
more accurately mimics the merge behavior of svn [and cvs?]
|
||||
|
||||
|
||||
[*] git stash [save | apply | list] <stashname>
|
||||
|
||||
save: Takes all changes in your working directory and 'stashes' them in a temporary
|
||||
holding area. Convenient if the command you're trying to run won't go unless
|
||||
you have a clean working dir; also convenient to move experimental changes
|
||||
between branches without needing to commit them.
|
||||
|
||||
apply: Replays the named stash onto your current working directory as though
|
||||
it were a patch. Does not delete the stash from the list.
|
||||
|
||||
list: Lists all of your stashed code blobs.
|
||||
|
||||
|
||||
|
||||
=======================================
|
||||
Typical workflows for common activities
|
||||
=======================================
|
||||
|
||||
{To be added in near future: DSR 3/15}
|
||||
|
||||
9
DEVEL/hooksdir/NHadd
Executable file → Normal file
9
DEVEL/hooksdir/NHadd
Executable file → Normal file
@@ -1,14 +1,19 @@
|
||||
#!/usr/bin/perl
|
||||
# wrapper for nhadd and nhcommit aliases
|
||||
# $NHDT-Date$
|
||||
# $NHDT-Date: 1427408239 2015/03/26 22:17:19 $
|
||||
|
||||
%ok = map { $_ => 1 } ('add', 'commit');
|
||||
|
||||
die "Bad subcommand '$ARGV[0]'" unless $ok{$ARGV[0]};
|
||||
|
||||
# we won't fail on a failure, so just system()
|
||||
$rv = system('.git/hooks/nhsub',"--$ARGV[0]",@ARGV[1..$#ARGV]);
|
||||
if($rv){
|
||||
print "warning: nhsub failed: $rv $!\n";
|
||||
}
|
||||
|
||||
if(length $ENV{GIT_PREFIX}){
|
||||
chdir($ENV{GIT_PREFIX}) or die "Can't chdir $ENV{GIT_PREFIX}: $!";
|
||||
}
|
||||
|
||||
$ENV{NHMODE} = 1;
|
||||
exec "git", @ARGV or die "Can't exec git: $!";
|
||||
|
||||
@@ -13,7 +13,8 @@ my $rawin = 0; # feed diff to stdin for testing (do NOT set $debug=1)
|
||||
# this first block because it's expensive and dumpfile() hangs with $rawin.
|
||||
my $sink = ($^O eq "MSWin32") ? "NUL" : "/dev/null";
|
||||
my $dbgfile = ($^O eq "MSWin32") ? "$ENV{TEMP}.$$" : "/tmp/trace.$$";
|
||||
open TRACE, ">>", ($debug==0)? $sink : $dbgfile;
|
||||
open TRACE, ">>", $rawin?"/dev/tty":(($debug==0)? $sink : $dbgfile);
|
||||
print TRACE "TEST TRACE\n";
|
||||
if($debug){
|
||||
print TRACE "START CLIENT ARGV:\n";
|
||||
print TRACE "[0] $0\n";
|
||||
@@ -233,7 +234,7 @@ sub merge_one_line_maybe {
|
||||
$theirval = $1;
|
||||
}
|
||||
}
|
||||
|
||||
print TRACE "MID: $ourstype/$oursval $theirtype/$theirval\n";
|
||||
# are we done?
|
||||
if(pos($ours)==length $ours && pos($theirs) == length $theirs){
|
||||
$more = 0;
|
||||
@@ -245,6 +246,12 @@ sub merge_one_line_maybe {
|
||||
# now see if ours and their match or can be resolved
|
||||
# text
|
||||
if($ourstype == 3 && $theirtype == 3){
|
||||
#mismatch is \s vs \s\s - where is this coming from?
|
||||
# HACK - hopefully temporary
|
||||
if($oursval =~ m/^\s+$/ && $theirval =~ m/^\s+$/){
|
||||
$out .= $oursval;
|
||||
next;
|
||||
}
|
||||
if($oursval eq $theirval){
|
||||
$out .= $oursval;
|
||||
next;
|
||||
@@ -273,6 +280,7 @@ sub merge_one_line_maybe {
|
||||
# return undef if we can't merge the values; $NAME: VALUE $ or $NAME$ (as appropriate) if we can.
|
||||
sub merge_one_var_maybe {
|
||||
my($varname, $oursval, $theirval) = @_;
|
||||
print TRACE "MVM: -$varname-$oursval-$theirval-\n";
|
||||
my $resolvedas;
|
||||
{
|
||||
no strict;
|
||||
@@ -309,12 +317,28 @@ sub Date {
|
||||
|
||||
sub Branch {
|
||||
my($PREFIX, $varname, $mine, $theirs) = @_;
|
||||
return "\$$PREFIX-$varname: $mine \$";
|
||||
$mine =~ s/^\s+//; $mine =~ s/\s+$//;
|
||||
$theirs =~ s/^\s+//; $theirs =~ s/\s+$//;
|
||||
return "\$$PREFIX-$varname: $mine \$" if(length $mine);
|
||||
return "\$$PREFIX-$varname: $theirs \$" if(length $theirs);
|
||||
return "\$$PREFIX-$varname\$" if(length $theirs);
|
||||
}
|
||||
|
||||
sub Revision {
|
||||
my($PREFIX, $varname, $mine, $theirs) = @_;
|
||||
return "\$$PREFIX-$varname: $mine \$";
|
||||
my($m) = ($mine =~ m/1.(\d+)/);
|
||||
my($t) = ($theirs =~ m/1.(\d+)/);
|
||||
if($m > 0 && $t > 0){
|
||||
my $q = ($m > $t) ? $m : $t;
|
||||
return "\$$PREFIX-$varname: 1.$q \$";
|
||||
}
|
||||
if($m > 0){
|
||||
return "\$$PREFIX-$varname: 1.$m \$";
|
||||
}
|
||||
if($t > 0){
|
||||
return "\$$PREFIX-$varname: 1.$t \$";
|
||||
}
|
||||
return "\$$PREFIX-$varname\$";
|
||||
}
|
||||
__END__
|
||||
|
||||
@@ -364,3 +388,10 @@ $TEST-Branch: mine $
|
||||
===
|
||||
$TEST-Branch: theirs $
|
||||
>>> d3
|
||||
|
||||
TEST 8:
|
||||
<<< d1
|
||||
/* NetHack 3.5 objnam.c $TEST-Date$ $TEST-Branch$:$TEST-Revision$ */
|
||||
===
|
||||
/* NetHack 3.5 objnam.c $TEST-Date: 1426977394 2015/03/21 22:36:34 $ $TEST-Branch: master $:$TEST-Revision: 1.108 $ */
|
||||
>>> d3
|
||||
|
||||
@@ -5,30 +5,37 @@
|
||||
# clean/smudge filter for handling substitutions
|
||||
use strict;
|
||||
|
||||
my $debug = 0; # save trace to file
|
||||
my $debug2 = 0; # annotate output when running from command line
|
||||
#my $debug = 0; # save trace to file
|
||||
#my $debug2 = 0; # annotate output when running from command line
|
||||
|
||||
my $sink = ($^O eq "MSWin32")? "NUL" :"/dev/null";
|
||||
my $dbgfile = ($^O eq "MSWin32") ? "$ENV{TEMP}.$$" : "/tmp/trace.$$";
|
||||
open TRACE, ">>", ($debug==0)? $sink : $dbgfile;
|
||||
print TRACE "START CLIENT ARGV:\n";
|
||||
print TRACE "[0] $0\n";
|
||||
my $x1;
|
||||
for(my $x=0;$x<scalar @ARGV;$x++){
|
||||
$x1 = $x+1;
|
||||
print TRACE "[$x1] $ARGV[$x]\n";
|
||||
}
|
||||
print TRACE "ENV:\n";
|
||||
foreach my $k (sort keys %ENV){
|
||||
next unless ($k =~ m/^(GIT_|NH)/);
|
||||
print TRACE " $k => $ENV{$k}\n";
|
||||
}
|
||||
print TRACE "CWD: " . `pwd`;
|
||||
print TRACE "END\n";
|
||||
#my $sink = ($^O eq "MSWin32")? "NUL" :"/dev/null";
|
||||
#my $dbgfile = ($^O eq "MSWin32") ? "$ENV{TEMP}.$$" : "/tmp/trace.$$";
|
||||
#open TRACE, ">>", ($debug==0)? $sink : $dbgfile;
|
||||
|
||||
sub git_config {
|
||||
my($section, $var) = @_;
|
||||
local($_);
|
||||
# Sigh. Without GIT_DIR we have to do it the slow way, and sometimes we don't
|
||||
# have GIT_DIR.
|
||||
if(0 == length($ENV{GIT_DIR})){
|
||||
my $raw = `git config --local --get $section.$var`;
|
||||
chomp($raw);
|
||||
return $raw
|
||||
}
|
||||
open(CONFIG, "<", "$ENV{GIT_DIR}/config") or die "Missing .git/config: $!";
|
||||
while(<CONFIG>){
|
||||
m/^\[$section]/ && do {
|
||||
while(<CONFIG>){
|
||||
m/^\s+$var\s+=\s+(.*)/ && do {
|
||||
return $1;
|
||||
};
|
||||
}
|
||||
};
|
||||
}
|
||||
die "Missing config var: [$section] $var\n";
|
||||
}
|
||||
# pick up the prefix for substitutions in this repo
|
||||
my $PREFIX = `git config --local --get nethack.substprefix`;
|
||||
chomp($PREFIX);
|
||||
my $PREFIX = &git_config('nethack','substprefix');
|
||||
|
||||
my $submode = 0; # ok to make non-cleaning changes to file
|
||||
my $mode;
|
||||
@@ -37,7 +44,7 @@ if($ARGV[0] eq "--clean"){
|
||||
$mode = "c";
|
||||
if(0 == 0+$ENV{NHMODE}){
|
||||
$submode = 1; # do NOT add extra changes to the file
|
||||
print TRACE "SKIPPING\n";
|
||||
# print TRACE "SKIPPING\n";
|
||||
}
|
||||
} elsif($ARGV[0] eq "--smudge"){
|
||||
$mode = "s";
|
||||
@@ -51,27 +58,30 @@ if($ARGV[0] eq "--clean"){
|
||||
#XXX
|
||||
#git check-attr -a $ARGV[1]
|
||||
|
||||
# process stdin to stdout
|
||||
# Process stdin to stdout.
|
||||
# For speed we read in the entire file then do the substitutions.
|
||||
|
||||
while(<STDIN>){
|
||||
print TRACE "IN: $_";
|
||||
# $1 - var and value (including trailing space but not $)
|
||||
# $2 - var
|
||||
# $4 - value or undef
|
||||
# s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\N{DOLLAR SIGN}]+))?)\$/&handlevar($2,$4)/eg;
|
||||
s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\x24]+))?)\$/&handlevar($2,$4)/eg;
|
||||
if($debug2){
|
||||
chomp;
|
||||
print "XX: |$_|\n";
|
||||
} else {
|
||||
print;
|
||||
}
|
||||
print TRACE "OT: X${_}X\n";
|
||||
local($_) = '';
|
||||
my $len;
|
||||
while(1){
|
||||
# On at least some systems we only get 64K.
|
||||
my $len = sysread(STDIN, $_, 999999, length($_));
|
||||
last if($len == 0);
|
||||
die "read failed: $!" unless defined($len);
|
||||
}
|
||||
|
||||
# $1 - var and value (including trailing space but not $)
|
||||
# $2 - var
|
||||
# $4 - value or undef
|
||||
# s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\N{DOLLAR SIGN}]+))?)\$/&handlevar($2,$4)/eg;
|
||||
s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\x24]+))?)\$/&handlevar($2,$4)/ego;
|
||||
|
||||
die "write failed: $!" unless defined syswrite(STDOUT, $_);
|
||||
exit 0;
|
||||
|
||||
sub handlevar {
|
||||
my($var, $val) = @_;
|
||||
print "HIT '$var' '$val'\n" if($debug2);
|
||||
# print "HIT '$var' '$val'\n" if($debug2);
|
||||
|
||||
my $subname = "PREFIX::$var";
|
||||
if(defined &$subname){
|
||||
@@ -114,16 +124,17 @@ sub Date {
|
||||
#sub Author {
|
||||
#}
|
||||
|
||||
# NB: the standard-ish Revision line isn't enough - you need Branch/Revision -
|
||||
# NB: the standard-ish Revision line isn't enough - you need Branch:Revision -
|
||||
# but we split it into 2 so we can use the standard processing code on Revision
|
||||
# and just slip Branch in.
|
||||
sub Branch {
|
||||
my($val, $mode, $submode) = @_;
|
||||
if($mode eq "c"){
|
||||
if($submode==0){
|
||||
$val = `git branch --no-color --contains`;
|
||||
$val = `git symbolic-ref -q --short HEAD`;
|
||||
$val =~ s/[\n\r]*$//;
|
||||
$val =~ s/^\*\s*//;
|
||||
$val = "(unknown)" unless($val =~ m/^[[:print:]]+$/);
|
||||
}
|
||||
}
|
||||
# if($mode eq "s"){
|
||||
@@ -147,4 +158,3 @@ sub Revision {
|
||||
return $val;
|
||||
}
|
||||
|
||||
__END__
|
||||
|
||||
386
DEVEL/hooksdir/nhsub
Normal file
386
DEVEL/hooksdir/nhsub
Normal file
@@ -0,0 +1,386 @@
|
||||
#!/usr/bin/perl
|
||||
# nhsub
|
||||
# $NHDT-Date: 1427913635 2015/04/01 18:40:35 $
|
||||
|
||||
# Note: was originally called nhdate; the rename is not reflected in the code.
|
||||
|
||||
use strict;
|
||||
my %opt; #cmd v n f F (other single char, but we don't care)
|
||||
my $mode; # a c d f (add, commit, date, date -f)
|
||||
|
||||
if(length $ENV{GIT_PREFIX}){
|
||||
chdir($ENV{GIT_PREFIX}) or die "Can't chdir $ENV{GIT_PREFIX}: $!";
|
||||
}
|
||||
|
||||
#SO how do we know if a file has changed?
|
||||
#(git status: git status --porcelain --ignored -- FILES.
|
||||
#maybe + -z but it's a question of rename operations - probably doesn't
|
||||
# matter, but need to experiment.
|
||||
|
||||
# key: [dacf] first character of opt{cmd} (f if nhsub -f or add -f)
|
||||
# first 2 chars of "git status --porcelain --ignored"
|
||||
# (see "git help status" for table)
|
||||
# No default. Undef means something unexpected happened.
|
||||
my %codes = (
|
||||
'f M'=>1, 'f D'=>1, # [MD] not updated
|
||||
'a M'=>0, 'a D'=>0,
|
||||
'd M'=>0, 'd D'=>0,
|
||||
'c M'=>0, 'c D'=>0,
|
||||
|
||||
# M [ MD] updated in index
|
||||
|
||||
'dA '=>1, 'dAM'=>1, 'dAD'=>1,
|
||||
'aA '=>1, 'aAM'=>1, 'aAD'=>1,
|
||||
'cA '=>1, 'cAM'=>1, 'cAD'=>1,
|
||||
'fA '=>1, 'fAM'=>1, 'fAD'=>1,
|
||||
# A [ MD] added to index
|
||||
|
||||
'dD '=>0, 'dDM'=>0,
|
||||
'aD '=>1, 'aDM'=>1,
|
||||
'cD '=>0, 'cDM'=>0,
|
||||
'fD '=>1, 'fDM'=>1,
|
||||
# D [ M] deleted from index
|
||||
|
||||
# R [ MD] renamed in index
|
||||
|
||||
# C [ MD] copied in index
|
||||
|
||||
'aM '=>1, 'aA '=>1, 'aR '=>1, 'aC '=>1,
|
||||
'fM '=>1, 'fA '=>1, 'fR '=>1, 'fC '=>1,
|
||||
# [MARC] index and work tree matches
|
||||
|
||||
'd M'=>1, 'dMM'=>1, 'dAM'=>1, 'dRM'=>1, 'dCM'=>1,
|
||||
'a M'=>1, 'aMM'=>1, 'aAM'=>1, 'aRM'=>1, 'aCM'=>1,
|
||||
'c M'=>1, 'cMM'=>1, 'cAM'=>1, 'cRM'=>1, 'cCM'=>1,
|
||||
'f M'=>1, 'fMM'=>1, 'fAM'=>1, 'fRM'=>1, 'fCM'=>1,
|
||||
# [ MARC] M work tree changed since index
|
||||
|
||||
'd D'=>0, 'dMD'=>0, 'dAD'=>0, 'dRD'=>0, 'dCD'=>0,
|
||||
'a D'=>0, 'aMD'=>0, 'aAD'=>0, 'aRD'=>0, 'aCD'=>0,
|
||||
'c D'=>0, 'cMD'=>0, 'cAD'=>0, 'cRD'=>0, 'cCD'=>0,
|
||||
'f D'=>0, 'fMD'=>0, 'fAD'=>0, 'fRD'=>0, 'fCD'=>0,
|
||||
# [ MARC] D deleted in work tree
|
||||
|
||||
# -------------------------------------------------
|
||||
# DD unmerged, both deleted
|
||||
# AU unmerged, added by us
|
||||
# UD unmerged, deleted by them
|
||||
# UA unmerged, added by them
|
||||
# DU unmerged, deleted by us
|
||||
# AA unmerged, both added
|
||||
# UU unmerged, both modified
|
||||
# -------------------------------------------------
|
||||
'a??'=>1, 'f??'=>1, # ?? untracked
|
||||
'd??'=>0, 'c??'=>0,
|
||||
|
||||
'f!!'=>1, # !! ignored
|
||||
'a!!'=>0, 'd!!'=>0, 'c!!'=>0,
|
||||
|
||||
'f@@'=>1, # @@ internal ignored
|
||||
'a@@'=>0, 'd@@'=>0, 'c@@'=>0
|
||||
);
|
||||
|
||||
# OS hackery
|
||||
my $PDS = '/';
|
||||
if ($^O eq "MSWin32")
|
||||
{
|
||||
$PDS = '\\';
|
||||
}
|
||||
|
||||
# pick up the prefix for substitutions in this repo
|
||||
my $PREFIX = &git_config('nethack','substprefix');
|
||||
print "PREFIX: '$PREFIX'\n" if($opt{v});
|
||||
|
||||
my @rawlist = &cmdparse(@ARGV);
|
||||
push(@rawlist,'.') if($#rawlist == -1);
|
||||
|
||||
while(@rawlist){
|
||||
my $raw = shift @rawlist;
|
||||
if(-f $raw){
|
||||
&schedule_work($raw);
|
||||
next;
|
||||
}
|
||||
if(-d $raw){
|
||||
if($raw =~ m!$PDS.git$!o){
|
||||
print "SKIP $raw\n" if($opt{v}>=2);
|
||||
next;
|
||||
}
|
||||
opendir RDIR,$raw or die "Can't opendir: $raw";
|
||||
local($_); # needed until perl 5.11.2
|
||||
while($_ = readdir RDIR){
|
||||
next if(m/^\.\.?$/);
|
||||
if(m/^\./ && $opt{f}){
|
||||
print " IGNORE-f: $raw$PDS$_\n" if($opt{v}>=2);
|
||||
next;
|
||||
}
|
||||
push(@rawlist, $raw.$PDS.$_);
|
||||
}
|
||||
closedir RDIR;
|
||||
}
|
||||
# ignore other file types
|
||||
if(! -e $raw){
|
||||
print "warning: missing file $raw\n";
|
||||
}
|
||||
}
|
||||
|
||||
# XXX could batch things up - later
|
||||
|
||||
sub schedule_work {
|
||||
my($file) = @_;
|
||||
print "CHECK: '$file'\n" if($opt{v}>=2);
|
||||
local($_) = `git status --porcelain --ignored -- $file`;
|
||||
my $key = $mode . join('',(m/^(.)(.)/));
|
||||
if(length $key == 1){
|
||||
# Hack. An unmodified, tracked file produces no output from
|
||||
# git status. Treat as another version of 'ignored'.
|
||||
$key .= '@@';
|
||||
}
|
||||
$key =~ s/-/ /g; # for Keni's locally mod'ed git
|
||||
if(!exists $codes{$key}){
|
||||
die "I'm lost.\nK='$key' F=$file\nST=$_";
|
||||
}
|
||||
if($codes{$key}==0){
|
||||
if($opt{v}>=2){
|
||||
print " IGNORE: $_" if(length);
|
||||
print " IGNORE: !! $file\n" if(!length);
|
||||
}
|
||||
return;
|
||||
}
|
||||
if($opt{F}){
|
||||
my $ign = `git check-ignore $file`;
|
||||
if($ign !~ m/^\s*$/){
|
||||
print " IGNORE-F: $ign" if($opt{v}>=2);
|
||||
return;
|
||||
}
|
||||
}
|
||||
# FALLTHROUGH and continue
|
||||
#print "ACCEPT TEST\n"; # XXXXXXXXXX TEST
|
||||
#return;
|
||||
|
||||
my $attr = `git check-attr NHSUBST -- $file`;
|
||||
if($attr =~ m/NHSUBST:\s+(.*)/){
|
||||
# XXX this is a bug in git. What if the value of an attribute is the
|
||||
# string "unset"? Sigh.
|
||||
if(! $opt{F}){
|
||||
if($1 eq "unset" || $1 eq "unspecified"){
|
||||
print " NOATTR: $attr" if($opt{v}>=2);
|
||||
return;
|
||||
}
|
||||
}
|
||||
&process_file($file);
|
||||
return;
|
||||
}
|
||||
die "Can't parse check-attr return: $attr\n";
|
||||
}
|
||||
|
||||
sub process_file {
|
||||
my($file) = @_;
|
||||
print "DOFIL: $file\n" if($opt{v}>=1);
|
||||
|
||||
# For speed we read in the entire file then do the substitutions.
|
||||
local($_) = '';
|
||||
my $len;
|
||||
open INFILE, "<", $file or die "Can't open $file: $!";
|
||||
while(1){
|
||||
# On at least some systems we only get 64K.
|
||||
my $len = sysread(INFILE, $_, 999999, length($_));
|
||||
last if($len == 0);
|
||||
die "read failed: $!" unless defined($len);
|
||||
}
|
||||
close INFILE;
|
||||
|
||||
local $::current_file = $file; # used under handlevar
|
||||
# $1 - var and value (including trailing space but not $)
|
||||
# $2 - var
|
||||
# $4 - value or undef
|
||||
#s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\N{DOLLAR SIGN}]+))?)\$/&handlevar($2,$4)/eg;
|
||||
my $count = s/\$$PREFIX-(([A-Za-z][A-Za-z0-9_]*)(: ([^\x24]+))?)\$/&handlevar($2,$4)/eg;
|
||||
# XXX had o modifier, why?
|
||||
return unless($count>0);
|
||||
return if($opt{n});
|
||||
|
||||
my $ofile = $file . ".nht";
|
||||
open(TOUT, ">", $ofile) or die "Can't open $ofile";
|
||||
die "write failed: $!" unless defined syswrite(TOUT, $_);
|
||||
close TOUT or die "Can't close $ofile";
|
||||
rename $ofile, $file or die "Can't rename $ofile to $file";
|
||||
}
|
||||
|
||||
sub cmdparse {
|
||||
my(@in) = @_;
|
||||
|
||||
# What are we doing?
|
||||
$opt{cmd} = 'date'; # really nhsub
|
||||
if($in[0] eq '--add'){
|
||||
$opt{cmd} = 'add';
|
||||
shift @in;
|
||||
}
|
||||
if($in[0] eq '--commit'){
|
||||
$opt{cmd} = 'commit';
|
||||
shift @in;
|
||||
}
|
||||
|
||||
# add: -n -v
|
||||
# commit: --dry-run -v
|
||||
# nhsub: -n -v
|
||||
while($in[0] =~ m/^-/){
|
||||
local($_) = $in[0];
|
||||
if($_ eq '--'){
|
||||
shift @in;
|
||||
last;
|
||||
}
|
||||
if(m/^--/){
|
||||
if($opt{cmd} eq 'commit' && $_ eq '--dry-run'){
|
||||
$opt{'n'} = 1;
|
||||
}
|
||||
shift @in;
|
||||
next;
|
||||
}
|
||||
if(m/^-(.*)/){
|
||||
foreach my $single ( split(//,$1) ){
|
||||
# don't do -v here from add/commit
|
||||
if($single ne 'v'){
|
||||
$opt{$single}++;
|
||||
} elsif($opt{cmd} eq 'date'){
|
||||
$opt{$single}++;
|
||||
}
|
||||
}
|
||||
}
|
||||
shift @in;
|
||||
}
|
||||
|
||||
($mode) = ($opt{cmd} =~ m/^(.)/);
|
||||
$mode = 'f' if($opt{cmd} eq 'date' && ($opt{f}||$opt{F}));
|
||||
$mode = 'f' if($opt{cmd} eq 'add' && $opt{f});
|
||||
|
||||
return @in; # this is our file list
|
||||
}
|
||||
|
||||
sub git_config {
|
||||
my($section, $var) = @_;
|
||||
my $raw = `git config --local --get $section.$var`;
|
||||
$raw =~ s/[\r\n]*$//g;
|
||||
return $raw if(length $raw);
|
||||
die "Missing config var: [$section] $var\n";
|
||||
}
|
||||
|
||||
sub handlevar {
|
||||
my($var, $val) = @_;
|
||||
# print "HIT '$var' '$val'\n" if($debug2);
|
||||
|
||||
my $subname = "PREFIX::$var";
|
||||
if(defined &$subname){
|
||||
no strict;
|
||||
print " SUBIN: $var '$val'\n" if($opt{v}>=3);
|
||||
$val =~ s/\s+$//;
|
||||
$val = &$subname($val);
|
||||
print " SUBOT: $var '$val'\n" if($opt{v}>=3);
|
||||
} else {
|
||||
warn "No handler for \$$PREFIX-$var\n";
|
||||
}
|
||||
|
||||
if(length $val){
|
||||
return "\$$PREFIX-$var: $val \$";
|
||||
} else {
|
||||
return "\$$PREFIX-$var\$";
|
||||
}
|
||||
}
|
||||
|
||||
package PREFIX;
|
||||
use POSIX qw(strftime);
|
||||
|
||||
# On push, put in the current date because we changed the file.
|
||||
# On pull, keep the current value so we can see the last change date.
|
||||
sub Date {
|
||||
my($val) = @_;
|
||||
# we add this to make merge easier for now XXX
|
||||
my $now = time; # not %s below - may not be portable
|
||||
# YYYY/MM/DD HH:MM:SS
|
||||
$val = "$now " . strftime("%Y/%m/%d %H:%M:%S", gmtime($now));
|
||||
return $val;
|
||||
}
|
||||
|
||||
#sub Header {
|
||||
#}
|
||||
#sub Author {
|
||||
#}
|
||||
|
||||
# NB: the standard-ish Revision line isn't enough - you need Branch:Revision -
|
||||
# but we split it into 2 so we can use the standard processing code on Revision
|
||||
# and just slip Branch in.
|
||||
sub Branch {
|
||||
my($val) = @_;
|
||||
$val = `git symbolic-ref -q --short HEAD`;
|
||||
$val =~ s/[\n\r]*$//;
|
||||
$val =~ s/^\*\s*//;
|
||||
$val = "(unknown)" unless($val =~ m/^[[:print:]]+$/);
|
||||
return $val;
|
||||
}
|
||||
|
||||
sub Revision {
|
||||
my($val) = @_;
|
||||
my @val = `git log --follow --oneline $::current_file`;
|
||||
my $ver = 0+$#val;
|
||||
$ver = 0 if($ver < 0);
|
||||
$val = "1.$ver";
|
||||
return $val;
|
||||
}
|
||||
__END__
|
||||
|
||||
=head1 NAME
|
||||
|
||||
C<nhsub> - NetHack git command for substitution variables
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
C<git nhsub [-v[v[v]] [-n] [-f|-F] [--] [file...]>
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
C<nhsub> rewrites the specified files by doing variable substitution for
|
||||
variables starting with the prefix specified in the repository's
|
||||
C<nethack.substprefix> configuration variable. C<nhsub> is also invoked
|
||||
internally from the implementation of the C<nhadd> and C<nhcommit>
|
||||
commands.
|
||||
|
||||
The program re-writes those files listed on the command line; if the file
|
||||
is actually a directory, the program recurses into that directory tree.
|
||||
Not all files found are re-written; some are ignored and those with no
|
||||
substitution variables are not re-written. Unless changed by the options,
|
||||
files that have not changed are not affected.
|
||||
|
||||
If no files are listed on the command line, the current directory is
|
||||
checked as if specified as C<.>.
|
||||
Files listed directly on the command line are always checked.
|
||||
The C<.git> directory is never processed.
|
||||
|
||||
The following command line options are available:
|
||||
|
||||
=over
|
||||
|
||||
=item C<-v[v[v]]>
|
||||
|
||||
Verbose output; may be (usefully) specified up to 3 times. Not available
|
||||
when invoked as part of C<nhadd> or C<nhcommit>.
|
||||
|
||||
=item C<-n>
|
||||
|
||||
Do not write any files.
|
||||
|
||||
=item C<-f>
|
||||
|
||||
Force, version 1:
|
||||
Perform substitution even if the file has not changed,
|
||||
except no dot files are processed unless listed directly on the command line.
|
||||
This prevents accidents with editor temprorary files while recursing. Note
|
||||
that this overloads the C<-f> option of C<git add> and C<git commit>.
|
||||
|
||||
=item C<-F>
|
||||
|
||||
Force, version 2:
|
||||
Perform substitution even if the file has not changed,
|
||||
even if the NHSUBST attribute is not set for the
|
||||
file, and only if the file is not ignored by git. Not available
|
||||
when invoked as part of C<nhadd> or C<nhcommit>.
|
||||
|
||||
=back
|
||||
@@ -3,7 +3,7 @@
|
||||
|
||||
# value of nethack.setupversion we will end up with when this is done
|
||||
# version 1 is reserved for repos checked out before versioning was added
|
||||
my $version_new = 2;
|
||||
my $version_new = 3;
|
||||
my $version_old = 0; # current version, if any (0 is no entry ergo new repo)
|
||||
|
||||
use Cwd;
|
||||
@@ -100,16 +100,29 @@ print STDERR "Installing aliases\n" if($opt_v);
|
||||
$addpath = catfile(curdir(),'.git','hooks','NHadd');
|
||||
&add_alias('nhadd', "!$addpath add");
|
||||
&add_alias('nhcommit', "!$addpath commit");
|
||||
my $nhsub = catfile(curdir(),'.git','hooks','nhsub');
|
||||
&add_alias('nhsub', "!$nhsub");
|
||||
|
||||
print STDERR "Installing filter/merge\n" if($opt_v);
|
||||
|
||||
if($^O eq "MSWin32"){
|
||||
$cmd = '.git\\\\hooks\\\\NHtext';
|
||||
} else {
|
||||
$cmd = catfile(curdir(),'.git','hooks','NHtext');
|
||||
# XXXX need it in NHadd to find nhsub???
|
||||
# removed at version 3
|
||||
#if($^O eq "MSWin32"){
|
||||
# $cmd = '.git\\\\hooks\\\\NHtext';
|
||||
#} else {
|
||||
# $cmd = catfile(curdir(),'.git','hooks','NHtext');
|
||||
#}
|
||||
#&add_config('filter.NHtext.clean', "$cmd --clean %f");
|
||||
#&add_config('filter.NHtext.smudge', "$cmd --smudge %f");
|
||||
if($version_old == 1 or $version_old == 2){
|
||||
print STDERR "Removing filter.NHtext\n" if($opt_v);
|
||||
system('git','config','--unset','filter.NHtext.clean') unless($opt_n);
|
||||
system('git','config','--unset','filter.NHtext.smudge') unless($opt_n);
|
||||
system('git','config','--remove-section','filter.NHtext') unless($opt_n);
|
||||
|
||||
print STDERR "Removing NHtext\n" if($opt_v);
|
||||
unlink catfile(curdir(),'.git','hooks','NHtext') unless($opt_n);
|
||||
}
|
||||
&add_config('filter.NHtext.clean', "$cmd --clean %f");
|
||||
&add_config('filter.NHtext.smudge', "$cmd --smudge %f");
|
||||
|
||||
$cmd = catfile(curdir(),'.git','hooks','NHsubst');
|
||||
&add_config('merge.NHsubst.name', 'NetHack Keyword Substitution');
|
||||
|
||||
168
README
168
README
@@ -1,18 +1,27 @@
|
||||
NetHack 3.5.0 -- General information
|
||||
NetHack 3.6.0 -- General information
|
||||
|
||||
NetHack 3.5 is an enhancement to the dungeon exploration game NetHack.
|
||||
NetHack 3.6 is an enhancement to the dungeon exploration game NetHack.
|
||||
It is a distant descendent of Rogue and Hack, and a direct descendent of
|
||||
NetHack 3.4.
|
||||
NetHack 3.4. In order to avoid confusion with interim development code
|
||||
that was posted online in 2014 by others, there is no NetHack 3.5 release.
|
||||
|
||||
NetHack 3.5.0 has many new features.
|
||||
* List new features here
|
||||
NetHack 3.6.0 contains some code reorganization, new features, and bugfixes.
|
||||
|
||||
A fuller list of changes for this release can be found in the file
|
||||
doc/fixes35.0 in the source distribution. The text in there was written
|
||||
for the development team's own use and is provided "as is", so please do
|
||||
not ask us to further explain the entries in that file.
|
||||
The file doc/fixes36.0 in the source distribution has a full list of each.
|
||||
The text in there was written for the development team's own use and is
|
||||
provided "as is", so please do not ask us to further explain the entries
|
||||
in that file. Some entries might be considered "spoilers", particularly
|
||||
in the "new features" section.
|
||||
|
||||
Here are some additional general notes that are not considered spoilers:
|
||||
* Some code paths and long-established game features have been made
|
||||
part of the base build and no longer conditional on compile settings.
|
||||
* Save files and bones files should be compatible across platforms and
|
||||
machine architectures <FIXME>.
|
||||
* The following treasured NetHack community patches, or a variation of
|
||||
them, have been rolled in to the base NetHack source tree: menucolors,
|
||||
pickup thrown, statue glyphs, <FIXME>.
|
||||
|
||||
If you are a developer, please see the file DEVEL/Developer.txt.
|
||||
- - - - - - - - - - -
|
||||
|
||||
Please read items (1), (2) and (3) BEFORE doing anything with your new code.
|
||||
@@ -21,64 +30,28 @@ Please read items (1), (2) and (3) BEFORE doing anything with your new code.
|
||||
directory as the 'Top' directory. It makes no difference what you
|
||||
call it.
|
||||
|
||||
2. If there is no flaw in the packaging, many sub-directories will be
|
||||
automatically created, and files will be deposited in them:
|
||||
2. Having unpacked, you should have a file called 'Files' in your Top
|
||||
directory.
|
||||
|
||||
a. A 'dat' directory, which contains a variety of data files.
|
||||
b. A 'doc' directory, which contains various documentation.
|
||||
c. An 'include' directory, which contains *.h files.
|
||||
d. A 'src' directory, which contains game *.c files used by all versions.
|
||||
e. A 'util' directory, which contains files for utility programs.
|
||||
f. A 'sys' directory, which contains subdirectories for files that
|
||||
are operating-system specific.
|
||||
g. A 'sys/share' subdirectory, which contains files shared by some OSs.
|
||||
h. A 'sys/share/sounds' subsubdirectory, which contains sound files
|
||||
shared by some OSs.
|
||||
i. A 'sys/amiga' subdirectory, which contains files specific to AmigaDOS.
|
||||
j. A 'sys/atari' subdirectory, which contains files specific to TOS.
|
||||
k. A 'sys/be' subdirectory, which contains files specific to Be OS.
|
||||
l. A 'sys/mac' subdirectory, which contains files specific to MacOS.
|
||||
m. A 'sys/msdos' subdirectory, which contains files specific to MS-DOS.
|
||||
n. A 'sys/os2' subdirectory, which contains files specific to OS/2.
|
||||
o. A 'sys/unix' subdirectory, which contains files specific to UNIX.
|
||||
p. A 'sys/vms' subdirectory, which contains files specific to VMS.
|
||||
q. A 'sys/wince' subdirectory, which contains files specific to Windows CE.
|
||||
r. A 'sys/wince/ceinc' subdirectory; header files for Windows CE
|
||||
s. A 'sys/wince/ceinc/sys' subdirectory; ditto
|
||||
t. A 'sys/winnt' subdirectory, which contains files specific to Windows NT.
|
||||
u. A 'win' directory, which contains subdirectories for files that
|
||||
are windowing-system specific (but not operating-system specific).
|
||||
v. A 'win/share' subdirectory, which contains files shared by some
|
||||
windowing systems.
|
||||
w. A 'win/Qt' subdirectory, which contains files specific to Qt.
|
||||
x. A 'win/X11' subdirectory, which contains files specific to X11.
|
||||
y. A 'win/gem' subdirectory, which contains files specific to GEM.
|
||||
z. A 'win/gnome' subdirectory, which contains files specific to GNOME.
|
||||
A. A 'win/tty' subdirectory, which contains files specific to ttys.
|
||||
B. A 'win/win32' subdirectory, which contains files specific to the
|
||||
Windows Win32 API.
|
||||
C. A 'DEVEL' directory, which contains files for NetHack developers.
|
||||
|
||||
The names of these directories should not be changed unless you are
|
||||
ready to go through the makefiles and the makedefs program and change
|
||||
all the directory references in them.
|
||||
|
||||
3. Having unpacked, you should have a file called 'Files' in your Top
|
||||
directory. This file contains the list of all the files you now SHOULD
|
||||
This file contains the list of all the files you now SHOULD
|
||||
have in each directory. Please check the files in each directory
|
||||
against this list to make sure that you have a complete set.
|
||||
|
||||
4. Before you do anything else, please read carefully the file called
|
||||
This file also contains a list of what files are created during
|
||||
the build process.
|
||||
|
||||
The names of the directories listed should not be changed unless you
|
||||
are ready to go through the makefiles and the makedefs program and change
|
||||
all the directory references in them.
|
||||
|
||||
3. Before you do anything else, please read carefully the file called
|
||||
"license" in the 'dat' subdirectory. It is expected that you comply
|
||||
with the terms of that license, and we are very serious about it.
|
||||
|
||||
5. If everything is in order, you can now turn to trying to get the program
|
||||
4. If everything is in order, you can now turn to trying to get the program
|
||||
to compile and run on your particular system. It is worth mentioning
|
||||
that the default configuration is SysV/Sun/Solaris2.x (simply because
|
||||
the code was housed on such a system). It is also worth mentioning
|
||||
here that NetHack 3.5 is a huge program. If you intend to run it on a
|
||||
small machine, you'll have to make hard choices among the options
|
||||
available in config.h.
|
||||
the code was housed on such a system).
|
||||
|
||||
The files sys/*/Install.* were written to guide you in configuring the
|
||||
program for your operating system. The files win/*/Install.* are
|
||||
@@ -86,17 +59,16 @@ Please read items (1), (2) and (3) BEFORE doing anything with your new code.
|
||||
for particular windowing environments. Reading them, and the man pages,
|
||||
should answer most of your questions.
|
||||
|
||||
At the time of this release, NetHack 3.5 is known to run/compile on:
|
||||
At the time of this release, NetHack 3.6 has been tested to run/compile on:
|
||||
|
||||
Intel 80386 or greater (or clone) boxes running Linux, BSDI, or
|
||||
Windows NT/XP/2000/2003/2008
|
||||
Intel Pentium or better (or clone) running BeOS 4.5
|
||||
Sun SPARC based machine running SunOS 4.x, Solaris 2.x, or Solaris 7
|
||||
Intel Pentium or better (or clone) running Linux, BSDI, or
|
||||
Windows (XP through 8.1)
|
||||
Intel 80386 or greater (or clone) boxes running Linux, or BSDI
|
||||
Mac OS X 10.9
|
||||
|
||||
|
||||
Previous versions of NetHack were tested on the following systems,
|
||||
and with a little work we expect that NetHack 3.5 will work on them
|
||||
as well:
|
||||
Previous versions of NetHack were tested and known to run on the
|
||||
following systems, but it is unknown if they can still build and
|
||||
execute NetHack 3.6:
|
||||
|
||||
Apple Macintosh running MacOS 7.5 or higher, LinuxPPC, BeOS 4.0
|
||||
Atari ST/TT/Falcon running TOS (or MultiTOS) with GCC
|
||||
@@ -116,73 +88,73 @@ Please read items (1), (2) and (3) BEFORE doing anything with your new code.
|
||||
Gould NP1 running UTX 3/2
|
||||
HP 9000s300 running HP-UX
|
||||
HP 9000s700 running HP-UX 9.x, 10.x, 11.x
|
||||
H/PC Pro devices running Windows CE 2.11 and higher.
|
||||
IBM PC/RT and RS/6000 running AIX 3.x
|
||||
IBM PS/2 and AT compatibles running OS/2 - 2.0 and up with GCC emx
|
||||
IBM PS/2 and AT compatibles running OS/2 1.1 - 2.0 (and probably
|
||||
Warp) with Microsoft 6.0, and OS/2 2.0 and up with IBM CSet++ 2.0.
|
||||
Intel 80386 or greater (or clone) running 386BSD
|
||||
Intel 80386 or greater (or clone) boxes running MS-DOS with DPMI.
|
||||
Intel x86 running a version of Windows prior to XP.
|
||||
Mips M2000 running RiscOS 4.1
|
||||
NeXT running Mach (using BSD configuration)
|
||||
Palm Size PC 1.1 devices running Windows CE 2.11
|
||||
Pocket PC devices running Windows CE 3.0 and higher
|
||||
Pyramid 9820x running OSx 4.4c
|
||||
SGI Iris running IRIX
|
||||
Stardent Vistra 800 running SysV R4.0
|
||||
Stride 460 running UniStride 2.1
|
||||
Sun-3s, -4s, and -386is running SunOS 3.x
|
||||
Sun-3s and -386is running SunOS 4.x
|
||||
Sun SPARC based machine running SunOS 4.x, Solaris 2.x, or Solaris 7
|
||||
Valid Logic Systems SCALD-System
|
||||
|
||||
Previous versions, using a cross-compiler hosted on another platform, such as
|
||||
win32, could also build the following from source:
|
||||
Pocket PC devices running Windows CE 3.0 and higher
|
||||
H/PC Pro devices running Windows CE 2.11 and higher
|
||||
Palm Size PC 1.1 devices running Windows CE 2.11
|
||||
|
||||
Unless otherwise mentioned, the compiler used was the OS-vendor's
|
||||
C compiler.
|
||||
|
||||
NetHack 3.5 may also run on the following, but a cross-compiler hosted
|
||||
on another platform, such as win32, would be required to build from
|
||||
source.
|
||||
|
||||
Pocket PC devices running Windows CE 3.0 and higher
|
||||
H/PC Pro devices running Windows CE 2.11 and higher.
|
||||
Palm Size PC 1.1 devices running Windows CE 2.11
|
||||
|
||||
The sources necessary to build an 80286 DOS "real mode" overlaid version
|
||||
are still included in the source distribution, so if someone has access
|
||||
to a real-mode compiler and lots of spare time on their hands, you may
|
||||
be able to get things working. Of course you do so at your own risk.
|
||||
|
||||
- - - - - - - - - - -
|
||||
|
||||
If you have problems building the game, or you find bugs in it, we recommend
|
||||
filing a bug report from our "Contact Us" web page at:
|
||||
http://www.nethack.org/
|
||||
|
||||
A public repository of the latest NetHack code that we've made
|
||||
available can be obtained via git here:
|
||||
<FIXME>
|
||||
|
||||
When sending correspondence, please observe the following:
|
||||
o Please be sure to include your machine type, OS, and patchlevel.
|
||||
o Never send us binary files (e.g. save files or bones files). Whichever
|
||||
platform you are using, only a small minority of the development team has
|
||||
access to it, and you will rapidly annoy the others. If you have found
|
||||
a bug and think that your save file would aid in solving the problem,
|
||||
send us a description in words of the problem, your machine type, your
|
||||
operating system, and the version of NetHack. Tell us that you have a
|
||||
save file, but do not actually send it.
|
||||
In the rare case that we think your save file would be helpful, you will
|
||||
be contacted by a member of the development team with the address of a
|
||||
specific person to send the save file to.
|
||||
o Please avoid sending us binary files (e.g. save files or bones files).
|
||||
If you have found a bug and think that your save file would aid in solving
|
||||
the problem, send us a description in words of the problem, your machine
|
||||
type, your operating system, and the version of NetHack. Tell us that you
|
||||
have a save file, but do not actually send it.
|
||||
You may then be contacted by a member of the development team with the
|
||||
address of a specific person to send the save file to.
|
||||
o Though we make an effort to reply to each bug report, it may take some
|
||||
time before you receive feedback. This is especially true during the
|
||||
period immediately after a new release, when we get the most bug reports.
|
||||
o We don't give hints for playing the game.
|
||||
o Don't bother to ask when the next version will be out. You will not get
|
||||
a reply.
|
||||
o Don't bother to ask when the next version will be out or you can expect
|
||||
to receive a stock answer.
|
||||
|
||||
If you don't have access to the world wide web, or if you want to submit
|
||||
a patch for the NetHack source code via email directly, you can direct it
|
||||
to this address:
|
||||
If you want to submit a patch for the NetHack source code via email directly,
|
||||
you can direct it to this address:
|
||||
nethack-bugs (at) nethack.org
|
||||
|
||||
If a feature is not accepted you are free, of course, to post the patches
|
||||
to the net yourself and let the marketplace decide their worth.
|
||||
|
||||
All of this amounts to the following: If you decide to apply a free-lanced
|
||||
patch to your 3.5 code, you are on your own. In our own patches, we will
|
||||
assume that your code is synchronized with ours.
|
||||
patch to your 3.6 code, you are welcome to do so, of course, but we won't
|
||||
be able to provide support or receive bug reports for it.
|
||||
|
||||
In our own patches, we will assume that your code is synchronized with ours.
|
||||
|
||||
-- Good luck, and happy Hacking --
|
||||
|
||||
6
dat/.gitattributes
vendored
6
dat/.gitattributes
vendored
@@ -1,3 +1,3 @@
|
||||
*.def filter=NHtext merge=NHsubst
|
||||
*.des filter=NHtext merge=NHsubst
|
||||
*.txt filter=NHtext merge=NHsubst
|
||||
*.def NHSUBST
|
||||
*.des NHSUBST
|
||||
*.txt NHSUBST
|
||||
|
||||
4
dat/.gitignore
vendored
4
dat/.gitignore
vendored
@@ -5,6 +5,9 @@ rip.xpm
|
||||
pet_mark.xbm
|
||||
quest.dat
|
||||
rumors
|
||||
bogusmon
|
||||
engrave
|
||||
epitaph
|
||||
x11tiles
|
||||
*.lev
|
||||
spec_levs
|
||||
@@ -17,3 +20,4 @@ nhdat
|
||||
dlb.lst
|
||||
guioptions
|
||||
porthelp
|
||||
NetHack.ad
|
||||
|
||||
356
dat/Arch.des
356
dat/Arch.des
@@ -70,25 +70,25 @@ DOOR:locked,(24,14)
|
||||
DOOR:closed,(31,14)
|
||||
DOOR:locked,(49,14)
|
||||
# Lord Carnarvon
|
||||
MONSTER:'@',"Lord Carnarvon",(25,10)
|
||||
MONSTER:('@',"Lord Carnarvon"),(25,10)
|
||||
# The treasure of Lord Carnarvon
|
||||
OBJECT:'(',"chest",(25,10)
|
||||
OBJECT:('(',"chest"),(25,10)
|
||||
# student guards for the audience chamber
|
||||
MONSTER:'@',"student",(26,09)
|
||||
MONSTER:'@',"student",(27,09)
|
||||
MONSTER:'@',"student",(28,09)
|
||||
MONSTER:'@',"student",(26,10)
|
||||
MONSTER:'@',"student",(28,10)
|
||||
MONSTER:'@',"student",(26,11)
|
||||
MONSTER:'@',"student",(27,11)
|
||||
MONSTER:'@',"student",(28,11)
|
||||
MONSTER:('@',"student"),(26,09)
|
||||
MONSTER:('@',"student"),(27,09)
|
||||
MONSTER:('@',"student"),(28,09)
|
||||
MONSTER:('@',"student"),(26,10)
|
||||
MONSTER:('@',"student"),(28,10)
|
||||
MONSTER:('@',"student"),(26,11)
|
||||
MONSTER:('@',"student"),(27,11)
|
||||
MONSTER:('@',"student"),(28,11)
|
||||
# city watch guards in the antechambers
|
||||
MONSTER:'@',"watchman",(50,06)
|
||||
MONSTER:'@',"watchman",(50,14)
|
||||
MONSTER:('@',"watchman"),(50,06)
|
||||
MONSTER:('@',"watchman"),(50,14)
|
||||
# Eels in the moat
|
||||
MONSTER:';',"giant eel",(20,10)
|
||||
MONSTER:';',"giant eel",(45,04)
|
||||
MONSTER:';',"giant eel",(33,16)
|
||||
MONSTER:(';',"giant eel"),(20,10)
|
||||
MONSTER:(';',"giant eel"),(45,04)
|
||||
MONSTER:(';',"giant eel"),(33,16)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Random traps
|
||||
@@ -99,18 +99,18 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 'S',random,(60,09)
|
||||
MONSTER: 'M',random,(60,10)
|
||||
MONSTER: 'S',random,(60,11)
|
||||
MONSTER: 'S',random,(60,12)
|
||||
MONSTER: 'M',random,(60,13)
|
||||
MONSTER: 'S',random,(61,10)
|
||||
MONSTER: 'S',random,(61,11)
|
||||
MONSTER: 'S',random,(61,12)
|
||||
MONSTER: 'S',random,(30,03)
|
||||
MONSTER: 'M',random,(20,17)
|
||||
MONSTER: 'S',random,(67,02)
|
||||
MONSTER: 'S',random,(10,19)
|
||||
MONSTER: 'S',(60,09)
|
||||
MONSTER: 'M',(60,10)
|
||||
MONSTER: 'S',(60,11)
|
||||
MONSTER: 'S',(60,12)
|
||||
MONSTER: 'M',(60,13)
|
||||
MONSTER: 'S',(61,10)
|
||||
MONSTER: 'S',(61,11)
|
||||
MONSTER: 'S',(61,12)
|
||||
MONSTER: 'S',(30,03)
|
||||
MONSTER: 'M',(20,17)
|
||||
MONSTER: 'S',(67,02)
|
||||
MONSTER: 'S',(10,19)
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -151,13 +151,13 @@ REGION:(25,09,28,11),unlit,"temple"
|
||||
REGION:(25,13,28,16),lit,"temple"
|
||||
REGION:(30,04,30,16),lit,"ordinary"
|
||||
REGION:(32,04,32,16),unlit,"ordinary"
|
||||
REGION:(33,04,53,04),unlit,"ordinary",unfilled,true
|
||||
REGION:(33,04,53,04),unlit,"ordinary",unfilled,irregular
|
||||
REGION:(36,10,37,10),unlit,"ordinary"
|
||||
REGION:(39,09,39,11),unlit,"ordinary"
|
||||
REGION:(36,06,42,08),unlit,"ordinary",unfilled,true
|
||||
REGION:(36,12,42,14),unlit,"ordinary",unfilled,true
|
||||
REGION:(36,06,42,08),unlit,"ordinary",unfilled,irregular
|
||||
REGION:(36,12,42,14),unlit,"ordinary",unfilled,irregular
|
||||
REGION:(46,06,51,09),unlit,"ordinary"
|
||||
REGION:(46,11,49,11),unlit,"ordinary",unfilled,true
|
||||
REGION:(46,11,49,11),unlit,"ordinary",unfilled,irregular
|
||||
REGION:(48,13,51,14),unlit,"ordinary"
|
||||
# Doors
|
||||
DOOR:closed,(31,04)
|
||||
@@ -186,21 +186,21 @@ ALTAR:(26,15),align[2],altar
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Treasure?
|
||||
ENGRAVING:random,engrave,"X marks the spot."
|
||||
ENGRAVING:random,engrave,"X marks the spot."
|
||||
@@ -231,33 +231,33 @@ TRAP:"dart",random
|
||||
TRAP:"rolling boulder",(32,10)
|
||||
TRAP:"rolling boulder",(40,16)
|
||||
# Random monsters.
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'M',random,random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',random,random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'M',random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:'M',random
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -323,21 +323,21 @@ NON_DIGGABLE:(00,00,75,19)
|
||||
# The altar of Huhetotl. Unattended.
|
||||
ALTAR:(50,14),chaos,altar
|
||||
# Objects
|
||||
OBJECT:'(',"crystal ball",(50,14),blessed,5,"The Orb of Detection"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('(',"crystal ball"),(50,14),blessed,5,name:"The Orb of Detection"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -347,34 +347,34 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:"rolling boulder",(46,14)
|
||||
# Random monsters.
|
||||
MONSTER:'&',"Minion of Huhetotl",(50,14)
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'S',random,random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',"human mummy",random
|
||||
MONSTER:'M',random,random
|
||||
MONSTER:('&',"Minion of Huhetotl"),(50,14)
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:'S',random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:('M',"human mummy"),random
|
||||
MONSTER:'M',random
|
||||
|
||||
#
|
||||
# The "fill" levels for the quest.
|
||||
@@ -387,76 +387,88 @@ MONSTER:'M',random,random
|
||||
|
||||
LEVEL: "Arc-fila"
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'S', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: 'S', random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'S', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'S', random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'S', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'S', random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random, random
|
||||
MONSTER: 'M', "human mummy", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random
|
||||
MONSTER: ('M', "human mummy"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
LEVEL: "Arc-filb"
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'M', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: 'M', random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'M', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'M', random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'M', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'M', random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random, random
|
||||
MONSTER: 'M', "human mummy", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random
|
||||
MONSTER: ('M', "human mummy"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'S', random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
292
dat/Barb.des
292
dat/Barb.des
@@ -60,38 +60,38 @@ DOOR:open,(23,13)
|
||||
DOOR:open,(25,10)
|
||||
DOOR:open,(28,05)
|
||||
# Elder
|
||||
MONSTER:'@',"Pelias",(10,07)
|
||||
MONSTER:('@',"Pelias"),(10,07)
|
||||
# The treasure of Pelias
|
||||
OBJECT:'(',"chest",(09,05)
|
||||
OBJECT:('(',"chest"),(09,05)
|
||||
# chieftain guards for the audience chamber
|
||||
MONSTER:'@',"chieftain",(10,05)
|
||||
MONSTER:'@',"chieftain",(10,09)
|
||||
MONSTER:'@',"chieftain",(11,05)
|
||||
MONSTER:'@',"chieftain",(11,09)
|
||||
MONSTER:'@',"chieftain",(14,05)
|
||||
MONSTER:'@',"chieftain",(14,09)
|
||||
MONSTER:'@',"chieftain",(16,05)
|
||||
MONSTER:'@',"chieftain",(16,09)
|
||||
MONSTER:('@',"chieftain"),(10,05)
|
||||
MONSTER:('@',"chieftain"),(10,09)
|
||||
MONSTER:('@',"chieftain"),(11,05)
|
||||
MONSTER:('@',"chieftain"),(11,09)
|
||||
MONSTER:('@',"chieftain"),(14,05)
|
||||
MONSTER:('@',"chieftain"),(14,09)
|
||||
MONSTER:('@',"chieftain"),(16,05)
|
||||
MONSTER:('@',"chieftain"),(16,09)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# One trap to keep the ogres at bay.
|
||||
TRAP:"spiked pit",(37,07)
|
||||
# Eels in the river
|
||||
MONSTER:';',"giant eel",(36,01)
|
||||
MONSTER:';',"giant eel",(37,09)
|
||||
MONSTER:';',"giant eel",(39,15)
|
||||
MONSTER:(';',"giant eel"),(36,01)
|
||||
MONSTER:(';',"giant eel"),(37,09)
|
||||
MONSTER:(';',"giant eel"),(39,15)
|
||||
# Monsters on siege duty.
|
||||
MONSTER:'O',"ogre",(40,08),hostile
|
||||
MONSTER:'O',"ogre",(41,06),hostile
|
||||
MONSTER:'O',"ogre",(41,07),hostile
|
||||
MONSTER:'O',"ogre",(41,08),hostile
|
||||
MONSTER:'O',"ogre",(41,09),hostile
|
||||
MONSTER:'O',"ogre",(41,10),hostile
|
||||
MONSTER:'O',"ogre",(42,06),hostile
|
||||
MONSTER:'O',"ogre",(42,07),hostile
|
||||
MONSTER:'O',"ogre",(42,08),hostile
|
||||
MONSTER:'O',"ogre",(42,09),hostile
|
||||
MONSTER:'O',"ogre",(42,10),hostile
|
||||
MONSTER:('O',"ogre"),(40,08),hostile
|
||||
MONSTER:('O',"ogre"),(41,06),hostile
|
||||
MONSTER:('O',"ogre"),(41,07),hostile
|
||||
MONSTER:('O',"ogre"),(41,08),hostile
|
||||
MONSTER:('O',"ogre"),(41,09),hostile
|
||||
MONSTER:('O',"ogre"),(41,10),hostile
|
||||
MONSTER:('O',"ogre"),(42,06),hostile
|
||||
MONSTER:('O',"ogre"),(42,07),hostile
|
||||
MONSTER:('O',"ogre"),(42,08),hostile
|
||||
MONSTER:('O',"ogre"),(42,09),hostile
|
||||
MONSTER:('O',"ogre"),(42,10),hostile
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -148,21 +148,21 @@ DOOR:locked,(55,06)
|
||||
STAIR:(05,02),up
|
||||
STAIR:(70,13),down
|
||||
# Objects
|
||||
OBJECT:random,random,(42,03)
|
||||
OBJECT:random,random,(42,03)
|
||||
OBJECT:random,random,(42,03)
|
||||
OBJECT:random,random,(41,03)
|
||||
OBJECT:random,random,(41,03)
|
||||
OBJECT:random,random,(41,03)
|
||||
OBJECT:random,random,(41,03)
|
||||
OBJECT:random,random,(41,08)
|
||||
OBJECT:random,random,(41,08)
|
||||
OBJECT:random,random,(42,08)
|
||||
OBJECT:random,random,(42,08)
|
||||
OBJECT:random,random,(42,08)
|
||||
OBJECT:random,random,(71,13)
|
||||
OBJECT:random,random,(71,13)
|
||||
OBJECT:random,random,(71,13)
|
||||
OBJECT:random,(42,03)
|
||||
OBJECT:random,(42,03)
|
||||
OBJECT:random,(42,03)
|
||||
OBJECT:random,(41,03)
|
||||
OBJECT:random,(41,03)
|
||||
OBJECT:random,(41,03)
|
||||
OBJECT:random,(41,03)
|
||||
OBJECT:random,(41,08)
|
||||
OBJECT:random,(41,08)
|
||||
OBJECT:random,(42,08)
|
||||
OBJECT:random,(42,08)
|
||||
OBJECT:random,(42,08)
|
||||
OBJECT:random,(71,13)
|
||||
OBJECT:random,(71,13)
|
||||
OBJECT:random,(71,13)
|
||||
# Random traps
|
||||
TRAP:"spiked pit",(10,13)
|
||||
TRAP:"spiked pit",(21,07)
|
||||
@@ -173,33 +173,33 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'O',"ogre",(12,09),hostile
|
||||
MONSTER:'O',"ogre",(18,11),hostile
|
||||
MONSTER:'O',"ogre",(45,05),hostile
|
||||
MONSTER:'O',"ogre",(45,06),hostile
|
||||
MONSTER:'O',"ogre",(47,05),hostile
|
||||
MONSTER:'O',"ogre",(46,05),hostile
|
||||
MONSTER:'O',"ogre",(56,03),hostile
|
||||
MONSTER:'O',"ogre",(56,04),hostile
|
||||
MONSTER:'O',"ogre",(56,05),hostile
|
||||
MONSTER:'O',"ogre",(56,06),hostile
|
||||
MONSTER:'O',"ogre",(57,03),hostile
|
||||
MONSTER:'O',"ogre",(57,04),hostile
|
||||
MONSTER:'O',"ogre",(57,05),hostile
|
||||
MONSTER:'O',"ogre",(57,06),hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',random,random,hostile
|
||||
MONSTER:'T',random,random,hostile
|
||||
MONSTER:'T',"rock troll",(46,06),hostile
|
||||
MONSTER:'T',"rock troll",(47,06),hostile
|
||||
MONSTER:'T',"rock troll",(56,07),hostile
|
||||
MONSTER:'T',"rock troll",(57,07),hostile
|
||||
MONSTER:'T',"rock troll",(70,13),hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',random,random,hostile
|
||||
MONSTER:('O',"ogre"),(12,09),hostile
|
||||
MONSTER:('O',"ogre"),(18,11),hostile
|
||||
MONSTER:('O',"ogre"),(45,05),hostile
|
||||
MONSTER:('O',"ogre"),(45,06),hostile
|
||||
MONSTER:('O',"ogre"),(47,05),hostile
|
||||
MONSTER:('O',"ogre"),(46,05),hostile
|
||||
MONSTER:('O',"ogre"),(56,03),hostile
|
||||
MONSTER:('O',"ogre"),(56,04),hostile
|
||||
MONSTER:('O',"ogre"),(56,05),hostile
|
||||
MONSTER:('O',"ogre"),(56,06),hostile
|
||||
MONSTER:('O',"ogre"),(57,03),hostile
|
||||
MONSTER:('O',"ogre"),(57,04),hostile
|
||||
MONSTER:('O',"ogre"),(57,05),hostile
|
||||
MONSTER:('O',"ogre"),(57,06),hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:'O',random,hostile
|
||||
MONSTER:'T',random,hostile
|
||||
MONSTER:('T',"rock troll"),(46,06),hostile
|
||||
MONSTER:('T',"rock troll"),(47,06),hostile
|
||||
MONSTER:('T',"rock troll"),(56,07),hostile
|
||||
MONSTER:('T',"rock troll"),(57,07),hostile
|
||||
MONSTER:('T',"rock troll"),(70,13),hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:'T',random,hostile
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -244,21 +244,21 @@ STAIR:(36,05),up
|
||||
ALTAR:(63,04),noncoaligned,altar
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Objects
|
||||
OBJECT:'*',"luckstone",(63,04),blessed,0,"The Heart of Ahriman"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('*',"luckstone"),(63,04),blessed,0,name:"The Heart of Ahriman"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -267,34 +267,34 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'@',"Thoth Amon",(63,04),hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',"ogre",random,hostile
|
||||
MONSTER:'O',random,random,hostile
|
||||
MONSTER:'O',random,random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',"rock troll",random,hostile
|
||||
MONSTER:'T',random,random,hostile
|
||||
MONSTER:('@',"Thoth Amon"),(63,04),hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:('O',"ogre"),random,hostile
|
||||
MONSTER:'O',random,hostile
|
||||
MONSTER:'O',random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:('T',"rock troll"),random,hostile
|
||||
MONSTER:'T',random,hostile
|
||||
WALLIFY
|
||||
|
||||
#
|
||||
@@ -307,64 +307,64 @@ WALLIFY
|
||||
#
|
||||
|
||||
MAZE: "Bar-fila" , ' '
|
||||
INIT_MAP: '.' , '.' , true , true , unlit , false
|
||||
INIT_MAP: mines, '.' , '.' , true , true , unlit , false
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
#
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', random, random, hostile
|
||||
MONSTER: 'T', "rock troll", random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: 'O', random, hostile
|
||||
MONSTER: ('T', "rock troll"), random, hostile
|
||||
|
||||
MAZE: "Bar-filb" , ' '
|
||||
INIT_MAP: '.' , ' ' , true , true , unlit , true
|
||||
INIT_MAP: mines, '.' , ' ' , true , true , unlit , true
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
#
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', "ogre", random, hostile
|
||||
MONSTER: 'O', random , random, hostile
|
||||
MONSTER: 'T', "rock troll", random, hostile
|
||||
MONSTER: 'T', "rock troll", random, hostile
|
||||
MONSTER: 'T', "rock troll", random, hostile
|
||||
MONSTER: 'T', random , random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: ('O', "ogre"), random, hostile
|
||||
MONSTER: 'O' , random, hostile
|
||||
MONSTER: ('T', "rock troll"), random, hostile
|
||||
MONSTER: ('T', "rock troll"), random, hostile
|
||||
MONSTER: ('T', "rock troll"), random, hostile
|
||||
MONSTER: 'T' , random, hostile
|
||||
|
||||
254
dat/Caveman.des
254
dat/Caveman.des
@@ -37,14 +37,14 @@ MAP
|
||||
ENDMAP
|
||||
# Dungeon Description
|
||||
REGION:(00,00,75,19),unlit,"ordinary"
|
||||
REGION:(13,01,40,05),lit,"temple",unfilled,true
|
||||
REGION:(13,01,40,05),lit,"temple",unfilled,irregular
|
||||
# The occupied rooms.
|
||||
REGION:(02,01,08,03),lit,"ordinary",unfilled,true
|
||||
REGION:(01,11,06,14),lit,"ordinary",unfilled,true
|
||||
REGION:(13,08,18,10),lit,"ordinary",unfilled,true
|
||||
REGION:(05,17,14,18),lit,"ordinary",unfilled,true
|
||||
REGION:(17,16,23,18),lit,"ordinary",unfilled,true
|
||||
REGION:(35,16,44,18),lit,"ordinary",unfilled,true
|
||||
REGION:(02,01,08,03),lit,"ordinary",unfilled,irregular
|
||||
REGION:(01,11,06,14),lit,"ordinary",unfilled,irregular
|
||||
REGION:(13,08,18,10),lit,"ordinary",unfilled,irregular
|
||||
REGION:(05,17,14,18),lit,"ordinary",unfilled,irregular
|
||||
REGION:(17,16,23,18),lit,"ordinary",unfilled,irregular
|
||||
REGION:(35,16,44,18),lit,"ordinary",unfilled,irregular
|
||||
# Stairs
|
||||
STAIR:(02,03),down
|
||||
# Portal arrival point
|
||||
@@ -54,18 +54,18 @@ DOOR:locked,(19,06)
|
||||
# The temple altar (this will force a priest(ess) to be created)
|
||||
ALTAR:(36,02),coaligned,shrine
|
||||
# Shaman Karnov
|
||||
MONSTER:'@',"Shaman Karnov",(35,02)
|
||||
MONSTER:('@',"Shaman Karnov"),(35,02)
|
||||
# The treasure of Shaman Karnov
|
||||
OBJECT:'(',"chest",(34,02)
|
||||
OBJECT:('(',"chest"),(34,02)
|
||||
# neanderthal guards for the audience chamber
|
||||
MONSTER:'@',"neanderthal",(20,03)
|
||||
MONSTER:'@',"neanderthal",(20,02)
|
||||
MONSTER:'@',"neanderthal",(20,01)
|
||||
MONSTER:'@',"neanderthal",(21,03)
|
||||
MONSTER:'@',"neanderthal",(21,02)
|
||||
MONSTER:'@',"neanderthal",(21,01)
|
||||
MONSTER:'@',"neanderthal",(22,01)
|
||||
MONSTER:'@',"neanderthal",(26,09)
|
||||
MONSTER:('@',"neanderthal"),(20,03)
|
||||
MONSTER:('@',"neanderthal"),(20,02)
|
||||
MONSTER:('@',"neanderthal"),(20,01)
|
||||
MONSTER:('@',"neanderthal"),(21,03)
|
||||
MONSTER:('@',"neanderthal"),(21,02)
|
||||
MONSTER:('@',"neanderthal"),(21,01)
|
||||
MONSTER:('@',"neanderthal"),(22,01)
|
||||
MONSTER:('@',"neanderthal"),(26,09)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Random traps
|
||||
@@ -76,18 +76,18 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters on siege duty (in the outer caves).
|
||||
MONSTER: 'h',"bugbear",(47,02),hostile
|
||||
MONSTER: 'h',"bugbear",(48,03),hostile
|
||||
MONSTER: 'h',"bugbear",(49,04),hostile
|
||||
MONSTER: 'h',"bugbear",(67,03),hostile
|
||||
MONSTER: 'h',"bugbear",(69,04),hostile
|
||||
MONSTER: 'h',"bugbear",(51,13),hostile
|
||||
MONSTER: 'h',"bugbear",(53,14),hostile
|
||||
MONSTER: 'h',"bugbear",(55,15),hostile
|
||||
MONSTER: 'h',"bugbear",(63,10),hostile
|
||||
MONSTER: 'h',"bugbear",(65,09),hostile
|
||||
MONSTER: 'h',"bugbear",(67,10),hostile
|
||||
MONSTER: 'h',"bugbear",(69,11),hostile
|
||||
MONSTER: ('h',"bugbear"),(47,02),hostile
|
||||
MONSTER: ('h',"bugbear"),(48,03),hostile
|
||||
MONSTER: ('h',"bugbear"),(49,04),hostile
|
||||
MONSTER: ('h',"bugbear"),(67,03),hostile
|
||||
MONSTER: ('h',"bugbear"),(69,04),hostile
|
||||
MONSTER: ('h',"bugbear"),(51,13),hostile
|
||||
MONSTER: ('h',"bugbear"),(53,14),hostile
|
||||
MONSTER: ('h',"bugbear"),(55,15),hostile
|
||||
MONSTER: ('h',"bugbear"),(63,10),hostile
|
||||
MONSTER: ('h',"bugbear"),(65,09),hostile
|
||||
MONSTER: ('h',"bugbear"),(67,10),hostile
|
||||
MONSTER: ('h',"bugbear"),(69,11),hostile
|
||||
WALLIFY
|
||||
|
||||
#
|
||||
@@ -124,7 +124,7 @@ MAP
|
||||
ENDMAP
|
||||
# Dungeon Description
|
||||
REGION:(00,00,75,19),unlit,"ordinary"
|
||||
REGION:(52,06,73,15),lit,"ordinary",unfilled,true
|
||||
REGION:(52,06,73,15),lit,"ordinary",unfilled,irregular
|
||||
# Doors
|
||||
DOOR:locked,(28,11)
|
||||
# Stairs
|
||||
@@ -133,21 +133,21 @@ STAIR:(73,10),down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -156,33 +156,33 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'h',"bugbear",(02,10),hostile
|
||||
MONSTER:'h',"bugbear",(03,11),hostile
|
||||
MONSTER:'h',"bugbear",(04,12),hostile
|
||||
MONSTER:'h',"bugbear",(02,11),hostile
|
||||
MONSTER:'h',"bugbear",(16,16),hostile
|
||||
MONSTER:'h',"bugbear",(17,17),hostile
|
||||
MONSTER:'h',"bugbear",(18,18),hostile
|
||||
MONSTER:'h',"bugbear",(19,16),hostile
|
||||
MONSTER:'h',"bugbear",(30,06),hostile
|
||||
MONSTER:'h',"bugbear",(31,07),hostile
|
||||
MONSTER:'h',"bugbear",(32,08),hostile
|
||||
MONSTER:'h',"bugbear",(33,06),hostile
|
||||
MONSTER:'h',"bugbear",(34,07),hostile
|
||||
MONSTER:'h',"bugbear",random,hostile
|
||||
MONSTER:'h',"bugbear",random,hostile
|
||||
MONSTER:'h',"bugbear",random,hostile
|
||||
MONSTER:'h',"bugbear",random,hostile
|
||||
MONSTER:'h',random,random,hostile
|
||||
MONSTER:'H',random,random,hostile
|
||||
MONSTER:'H',"hill giant",(03,12),hostile
|
||||
MONSTER:'H',"hill giant",(20,17),hostile
|
||||
MONSTER:'H',"hill giant",(35,08),hostile
|
||||
MONSTER:'H',"hill giant",random,hostile
|
||||
MONSTER:'H',"hill giant",random,hostile
|
||||
MONSTER:'H',"hill giant",random,hostile
|
||||
MONSTER:'H',"hill giant",random,hostile
|
||||
MONSTER:'H',random,random,hostile
|
||||
MONSTER:('h',"bugbear"),(02,10),hostile
|
||||
MONSTER:('h',"bugbear"),(03,11),hostile
|
||||
MONSTER:('h',"bugbear"),(04,12),hostile
|
||||
MONSTER:('h',"bugbear"),(02,11),hostile
|
||||
MONSTER:('h',"bugbear"),(16,16),hostile
|
||||
MONSTER:('h',"bugbear"),(17,17),hostile
|
||||
MONSTER:('h',"bugbear"),(18,18),hostile
|
||||
MONSTER:('h',"bugbear"),(19,16),hostile
|
||||
MONSTER:('h',"bugbear"),(30,06),hostile
|
||||
MONSTER:('h',"bugbear"),(31,07),hostile
|
||||
MONSTER:('h',"bugbear"),(32,08),hostile
|
||||
MONSTER:('h',"bugbear"),(33,06),hostile
|
||||
MONSTER:('h',"bugbear"),(34,07),hostile
|
||||
MONSTER:('h',"bugbear"),random,hostile
|
||||
MONSTER:('h',"bugbear"),random,hostile
|
||||
MONSTER:('h',"bugbear"),random,hostile
|
||||
MONSTER:('h',"bugbear"),random,hostile
|
||||
MONSTER:'h',random,hostile
|
||||
MONSTER:'H',random,hostile
|
||||
MONSTER:('H',"hill giant"),(03,12),hostile
|
||||
MONSTER:('H',"hill giant"),(20,17),hostile
|
||||
MONSTER:('H',"hill giant"),(35,08),hostile
|
||||
MONSTER:('H',"hill giant"),random,hostile
|
||||
MONSTER:('H',"hill giant"),random,hostile
|
||||
MONSTER:('H',"hill giant"),random,hostile
|
||||
MONSTER:('H',"hill giant"),random,hostile
|
||||
MONSTER:'H',random,hostile
|
||||
WALLIFY
|
||||
|
||||
#
|
||||
@@ -224,26 +224,26 @@ STAIR:random,up
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Objects
|
||||
OBJECT:')',"mace",(23,10),blessed,0,"The Sceptre of Might"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:(')',"mace"),(23,10),blessed,0,name:"The Sceptre of Might"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# monsters.
|
||||
MONSTER:'D',"Chromatic Dragon",(23,10),asleep
|
||||
MONSTER:'F',"shrieker",(26,13)
|
||||
MONSTER:'F',"shrieker",(25,8)
|
||||
MONSTER:'F',"shrieker",(45,11)
|
||||
MONSTER:('D',"Chromatic Dragon"),(23,10),asleep
|
||||
MONSTER:('F',"shrieker"),(26,13)
|
||||
MONSTER:('F',"shrieker"),(25,8)
|
||||
MONSTER:('F',"shrieker"),(45,11)
|
||||
WALLIFY
|
||||
|
||||
#
|
||||
@@ -256,63 +256,63 @@ WALLIFY
|
||||
#
|
||||
|
||||
MAZE: "Cav-fila" , ' '
|
||||
INIT_MAP: '.' , ' ' , true , true , random , true
|
||||
INIT_MAP: mines, '.' , ' ' , true , true , random , true
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
#
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', random, random, hostile
|
||||
MONSTER: 'H', "hill giant", random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: 'h', random, hostile
|
||||
MONSTER: ('H', "hill giant"), random, hostile
|
||||
|
||||
MAZE: "Cav-filb" , ' '
|
||||
INIT_MAP: '.' , ' ' , true , true , random , true
|
||||
INIT_MAP: mines, '.' , ' ' , true , true , random , true
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
#
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', "bugbear", random, hostile
|
||||
MONSTER: 'h', random, random, hostile
|
||||
MONSTER: 'h', random, random, hostile
|
||||
MONSTER: 'H', "hill giant", random, hostile
|
||||
MONSTER: 'H', "hill giant", random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: ('h', "bugbear"), random, hostile
|
||||
MONSTER: 'h', random, hostile
|
||||
MONSTER: 'h', random, hostile
|
||||
MONSTER: ('H', "hill giant"), random, hostile
|
||||
MONSTER: ('H', "hill giant"), random, hostile
|
||||
|
||||
370
dat/Healer.des
370
dat/Healer.des
@@ -57,18 +57,18 @@ DOOR:closed,(47,08)
|
||||
DOOR:closed,(48,12)
|
||||
DOOR:locked,(50,10)
|
||||
# Hippocrates
|
||||
MONSTER:'@',"Hippocrates",(37,10)
|
||||
MONSTER:('@',"Hippocrates"),(37,10)
|
||||
# The treasure of Hippocrates
|
||||
OBJECT:'(',"chest",(37,10)
|
||||
OBJECT:('(',"chest"),(37,10)
|
||||
# intern guards for the audience chamber
|
||||
MONSTER:'@',"attendant",(29,08)
|
||||
MONSTER:'@',"attendant",(29,09)
|
||||
MONSTER:'@',"attendant",(29,10)
|
||||
MONSTER:'@',"attendant",(29,11)
|
||||
MONSTER:'@',"attendant",(40,09)
|
||||
MONSTER:'@',"attendant",(40,10)
|
||||
MONSTER:'@',"attendant",(40,11)
|
||||
MONSTER:'@',"attendant",(40,13)
|
||||
MONSTER:('@',"attendant"),(29,08)
|
||||
MONSTER:('@',"attendant"),(29,09)
|
||||
MONSTER:('@',"attendant"),(29,10)
|
||||
MONSTER:('@',"attendant"),(29,11)
|
||||
MONSTER:('@',"attendant"),(40,09)
|
||||
MONSTER:('@',"attendant"),(40,10)
|
||||
MONSTER:('@',"attendant"),(40,11)
|
||||
MONSTER:('@',"attendant"),(40,13)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Random traps
|
||||
@@ -79,29 +79,29 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: 'r',"rabid rat",random
|
||||
MONSTER: ';',"giant eel",random
|
||||
MONSTER: ';',"shark",random
|
||||
MONSTER: ';', random, random
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: ('r',"rabid rat"),random
|
||||
MONSTER: (';',"giant eel"),random
|
||||
MONSTER: (';',"shark"),random
|
||||
MONSTER: ';', random
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
#
|
||||
@@ -112,7 +112,7 @@ MONSTER: 'S',random,random,hostile
|
||||
MAZE: "Hea-loca",' '
|
||||
FLAGS: hardfloor
|
||||
#
|
||||
INIT_MAP: '.' , 'P', true , true , lit , false
|
||||
INIT_MAP: mines, '.' , 'P', true , true , lit , false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
PPPPPPPPPPPPP.......PPPPPPPPPPP
|
||||
@@ -142,21 +142,21 @@ NON_DIGGABLE:(11,02,21,07)
|
||||
# Altar in the temple.
|
||||
ALTAR:(13,05), chaos, shrine
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -165,41 +165,41 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',random,random,hostile
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"shark",random
|
||||
MONSTER:';',"shark",random
|
||||
MONSTER:';',random, random,hostile
|
||||
MONSTER:';',random, random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:'r',random,hostile
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"shark"),random
|
||||
MONSTER:(';',"shark"),random
|
||||
MONSTER:';', random,hostile
|
||||
MONSTER:';', random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -211,7 +211,7 @@ MONSTER: 'S',random,random,hostile
|
||||
|
||||
MAZE: "Hea-goal", 'P'
|
||||
#
|
||||
INIT_MAP: '.' , 'P' , false , true , lit , false
|
||||
INIT_MAP: mines, '.' , 'P' , false , true , lit , false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
.P....................................PP.
|
||||
@@ -234,22 +234,22 @@ STAIR:(39,10),up
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,40,11)
|
||||
# Objects
|
||||
OBJECT:')',"quarterstaff",(20,06),blessed,0,"The Staff of Aesculapius"
|
||||
OBJECT:'/',"lightning",(20,06)
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:(')',"quarterstaff"),(20,06),blessed,0,name:"The Staff of Aesculapius"
|
||||
OBJECT:('/',"lightning"),(20,06)
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -258,38 +258,38 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'H',"Cyclops",(20,06),hostile
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',"rabid rat",random
|
||||
MONSTER:'r',random,random,hostile
|
||||
MONSTER:'r',random,random,hostile
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"shark",random
|
||||
MONSTER:';',"shark",random
|
||||
MONSTER:';',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER:('H',"Cyclops"),(20,06),hostile
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:('r',"rabid rat"),random
|
||||
MONSTER:'r',random,hostile
|
||||
MONSTER:'r',random,hostile
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"shark"),random
|
||||
MONSTER:(';',"shark"),random
|
||||
MONSTER:';',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
|
||||
#
|
||||
# The "fill" levels for the quest.
|
||||
@@ -301,34 +301,34 @@ MONSTER: 'S',random,random,hostile
|
||||
#
|
||||
|
||||
MAZE: "Hea-fila" , 'P'
|
||||
INIT_MAP: '.' , 'P' , false , true , lit , false
|
||||
INIT_MAP: mines, '.' , 'P' , false , true , lit , false
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
MONSTER: 'r', "rabid rat", random
|
||||
MONSTER: 'r', random, random,hostile
|
||||
MONSTER: 'r', random, random,hostile
|
||||
MONSTER: ';', "giant eel", random
|
||||
MONSTER: ';', "giant eel", random
|
||||
MONSTER: ';', "electric eel", random
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: ('r', "rabid rat"), random
|
||||
MONSTER: 'r', random,hostile
|
||||
MONSTER: 'r', random,hostile
|
||||
MONSTER: (';', "giant eel"), random
|
||||
MONSTER: (';', "giant eel"), random
|
||||
MONSTER: (';', "electric eel"), random
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
@@ -336,42 +336,42 @@ TRAP: random, random
|
||||
TRAP: random, random
|
||||
|
||||
MAZE: "Hea-filb" , 'P'
|
||||
INIT_MAP: '.' , 'P' , false , true , lit , false
|
||||
INIT_MAP: mines, '.' , 'P' , false , true , lit , false
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
MONSTER: 'r', "rabid rat", random
|
||||
MONSTER: 'r', "rabid rat", random
|
||||
MONSTER: 'r', random, random,hostile
|
||||
MONSTER: 'r', random, random,hostile
|
||||
MONSTER: ';', "giant eel", random
|
||||
MONSTER: ';', "giant eel", random
|
||||
MONSTER: ';', "giant eel", random
|
||||
MONSTER: ';', "giant eel", random
|
||||
MONSTER: ';', "giant eel", random
|
||||
MONSTER: ';', "electric eel", random
|
||||
MONSTER: ';', "electric eel", random
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'D',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: 'S',random,random,hostile
|
||||
MONSTER: ('r', "rabid rat"), random
|
||||
MONSTER: ('r', "rabid rat"), random
|
||||
MONSTER: 'r', random,hostile
|
||||
MONSTER: 'r', random,hostile
|
||||
MONSTER: (';', "giant eel"), random
|
||||
MONSTER: (';', "giant eel"), random
|
||||
MONSTER: (';', "giant eel"), random
|
||||
MONSTER: (';', "giant eel"), random
|
||||
MONSTER: (';', "giant eel"), random
|
||||
MONSTER: (';', "electric eel"), random
|
||||
MONSTER: (';', "electric eel"), random
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'D',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
MONSTER: 'S',random,hostile
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
|
||||
306
dat/Knight.des
306
dat/Knight.des
@@ -13,7 +13,7 @@
|
||||
MAZE: "Kni-strt",'.'
|
||||
FLAGS: noteleport,hardfloor
|
||||
# This is a kludge to init the level as a lit field.
|
||||
INIT_MAP: '.' , '.' , false , false , lit , false
|
||||
INIT_MAP: mines, '.' , '.' , false , false , lit , false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
..................................................
|
||||
@@ -62,21 +62,21 @@ DOOR:closed,(45,03)
|
||||
DOOR:closed,(04,12)
|
||||
DOOR:closed,(45,12)
|
||||
# King Arthur
|
||||
MONSTER:'@',"King Arthur",(09,07)
|
||||
MONSTER:('@',"King Arthur"),(09,07)
|
||||
# The treasure of King Arthur
|
||||
OBJECT:'(',"chest",(09,07)
|
||||
OBJECT:('(',"chest"),(09,07)
|
||||
# knight guards for the watchrooms
|
||||
MONSTER:'@',"knight",(04,02),peaceful
|
||||
MONSTER:'@',"knight",(04,13),peaceful
|
||||
MONSTER:'@',"knight",(45,02),peaceful
|
||||
MONSTER:'@',"knight",(45,13),peaceful
|
||||
MONSTER:('@',"knight"),(04,02),peaceful
|
||||
MONSTER:('@',"knight"),(04,13),peaceful
|
||||
MONSTER:('@',"knight"),(45,02),peaceful
|
||||
MONSTER:('@',"knight"),(45,13),peaceful
|
||||
# page guards for the audience chamber
|
||||
MONSTER:'@',"page",(16,06)
|
||||
MONSTER:'@',"page",(18,06)
|
||||
MONSTER:'@',"page",(20,06)
|
||||
MONSTER:'@',"page",(16,09)
|
||||
MONSTER:'@',"page",(18,09)
|
||||
MONSTER:'@',"page",(20,09)
|
||||
MONSTER:('@',"page"),(16,06)
|
||||
MONSTER:('@',"page"),(18,06)
|
||||
MONSTER:('@',"page"),(20,06)
|
||||
MONSTER:('@',"page"),(16,09)
|
||||
MONSTER:('@',"page"),(18,09)
|
||||
MONSTER:('@',"page"),(20,09)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,49,15)
|
||||
# Random traps
|
||||
@@ -87,18 +87,18 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 'i',"quasit",(14,00),hostile
|
||||
MONSTER: 'i',"quasit",(16,00),hostile
|
||||
MONSTER: 'i',"quasit",(18,00),hostile
|
||||
MONSTER: 'i',"quasit",(20,00),hostile
|
||||
MONSTER: 'i',"quasit",(22,00),hostile
|
||||
MONSTER: 'i',"quasit",(24,00),hostile
|
||||
MONSTER: 'i',"quasit",(26,00),hostile
|
||||
MONSTER: 'i',"quasit",(28,00),hostile
|
||||
MONSTER: 'i',"quasit",(30,00),hostile
|
||||
MONSTER: 'i',"quasit",(32,00),hostile
|
||||
MONSTER: 'i',"quasit",(34,00),hostile
|
||||
MONSTER: 'i',"quasit",(36,00),hostile
|
||||
MONSTER: ('i',"quasit"),(14,00),hostile
|
||||
MONSTER: ('i',"quasit"),(16,00),hostile
|
||||
MONSTER: ('i',"quasit"),(18,00),hostile
|
||||
MONSTER: ('i',"quasit"),(20,00),hostile
|
||||
MONSTER: ('i',"quasit"),(22,00),hostile
|
||||
MONSTER: ('i',"quasit"),(24,00),hostile
|
||||
MONSTER: ('i',"quasit"),(26,00),hostile
|
||||
MONSTER: ('i',"quasit"),(28,00),hostile
|
||||
MONSTER: ('i',"quasit"),(30,00),hostile
|
||||
MONSTER: ('i',"quasit"),(32,00),hostile
|
||||
MONSTER: ('i',"quasit"),(34,00),hostile
|
||||
MONSTER: ('i',"quasit"),(36,00),hostile
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -109,7 +109,7 @@ MONSTER: 'i',"quasit",(36,00),hostile
|
||||
|
||||
MAZE: "Kni-loca",' '
|
||||
FLAGS: hardfloor
|
||||
INIT_MAP: '.' , 'P' , false , true , lit , false
|
||||
INIT_MAP: mines, '.' , 'P' , false , true , lit , false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
...PPP.........PPPP..............PPPP...
|
||||
@@ -136,21 +136,21 @@ STAIR:(18,05),down
|
||||
# The altar atop the Tor and its attendant (creating altar makes the priest).
|
||||
ALTAR:(17,05),neutral,shrine
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
# All of the avenues are guarded by magic except for the East.
|
||||
# South
|
||||
@@ -210,33 +210,33 @@ TRAP:"anti magic",random
|
||||
TRAP:"anti magic",random
|
||||
TRAP:"anti magic",random
|
||||
# Random monsters.
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'j',random,random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',random,random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'j',random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:'j',random,hostile
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -278,28 +278,28 @@ STAIR:(03,08),up
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Objects
|
||||
OBJECT:'(',"mirror",(50,06),blessed,0,"The Magic Mirror of Merlin"
|
||||
OBJECT:random,random,(33,01)
|
||||
OBJECT:random,random,(33,02)
|
||||
OBJECT:random,random,(33,03)
|
||||
OBJECT:random,random,(33,04)
|
||||
OBJECT:random,random,(33,05)
|
||||
OBJECT:random,random,(34,01)
|
||||
OBJECT:random,random,(34,02)
|
||||
OBJECT:random,random,(34,03)
|
||||
OBJECT:random,random,(34,04)
|
||||
OBJECT:random,random,(34,05)
|
||||
OBJECT:random,random,(35,01)
|
||||
OBJECT:random,random,(35,02)
|
||||
OBJECT:random,random,(35,03)
|
||||
OBJECT:random,random,(35,04)
|
||||
OBJECT:random,random,(35,05)
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('(',"mirror"),(50,06),blessed,0,name:"The Magic Mirror of Merlin"
|
||||
OBJECT:random,(33,01)
|
||||
OBJECT:random,(33,02)
|
||||
OBJECT:random,(33,03)
|
||||
OBJECT:random,(33,04)
|
||||
OBJECT:random,(33,05)
|
||||
OBJECT:random,(34,01)
|
||||
OBJECT:random,(34,02)
|
||||
OBJECT:random,(34,03)
|
||||
OBJECT:random,(34,04)
|
||||
OBJECT:random,(34,05)
|
||||
OBJECT:random,(35,01)
|
||||
OBJECT:random,(35,02)
|
||||
OBJECT:random,(35,03)
|
||||
OBJECT:random,(35,04)
|
||||
OBJECT:random,(35,05)
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:"spiked pit",(13,07)
|
||||
TRAP:"spiked pit",(12,08)
|
||||
@@ -310,34 +310,34 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'D',"Ixoth",(50,06),hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',"quasit",random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',"ochre jelly",random,hostile
|
||||
MONSTER:'j',random,random,hostile
|
||||
MONSTER:('D',"Ixoth"),(50,06),hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:('i',"quasit"),random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:('j',"ochre jelly"),random,hostile
|
||||
MONSTER:'j',random,hostile
|
||||
|
||||
#
|
||||
# The "fill" levels for the quest.
|
||||
@@ -349,27 +349,27 @@ MONSTER:'j',random,random,hostile
|
||||
#
|
||||
|
||||
MAZE: "Kni-fila" , '.'
|
||||
INIT_MAP: '.' , 'P' , false , true , lit , false
|
||||
INIT_MAP: mines, '.' , 'P' , false , true , lit , false
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
MONSTER: 'i', "quasit", random, hostile
|
||||
MONSTER: 'i', "quasit", random, hostile
|
||||
MONSTER: 'i', "quasit", random, hostile
|
||||
MONSTER: 'i', "quasit", random, hostile
|
||||
MONSTER: 'i', random, random, hostile
|
||||
MONSTER: 'j', "ochre jelly", random, hostile
|
||||
MONSTER: ('i', "quasit"), random, hostile
|
||||
MONSTER: ('i', "quasit"), random, hostile
|
||||
MONSTER: ('i', "quasit"), random, hostile
|
||||
MONSTER: ('i', "quasit"), random, hostile
|
||||
MONSTER: 'i', random, hostile
|
||||
MONSTER: ('j', "ochre jelly"), random, hostile
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
@@ -377,32 +377,32 @@ TRAP: random, random
|
||||
TRAP: random, random
|
||||
|
||||
MAZE: "Kni-filb" , '.'
|
||||
INIT_MAP: '.' , 'P' , false , true , lit , false
|
||||
INIT_MAP: mines, '.' , 'P' , false , true , lit , false
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
MONSTER: 'i', "quasit", random, hostile
|
||||
MONSTER: 'i', "quasit", random, hostile
|
||||
MONSTER: 'i', "quasit", random, hostile
|
||||
MONSTER: 'i', "quasit", random, hostile
|
||||
MONSTER: 'i', random, random, hostile
|
||||
MONSTER: 'j', "ochre jelly", random, hostile
|
||||
MONSTER: 'j', "ochre jelly", random, hostile
|
||||
MONSTER: 'j', "ochre jelly", random, hostile
|
||||
MONSTER: ('i', "quasit"), random, hostile
|
||||
MONSTER: ('i', "quasit"), random, hostile
|
||||
MONSTER: ('i', "quasit"), random, hostile
|
||||
MONSTER: ('i', "quasit"), random, hostile
|
||||
MONSTER: 'i', random, hostile
|
||||
MONSTER: ('j', "ochre jelly"), random, hostile
|
||||
MONSTER: ('j', "ochre jelly"), random, hostile
|
||||
MONSTER: ('j', "ochre jelly"), random, hostile
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
|
||||
332
dat/Monk.des
332
dat/Monk.des
@@ -64,17 +64,17 @@ DOOR:closed,(52,14)
|
||||
# Unattended Altar - unaligned due to conflict - player must align it.
|
||||
ALTAR:(28,09),noalign,altar
|
||||
# The Grand Master
|
||||
MONSTER:'@',"Grand Master",(28,10)
|
||||
MONSTER:('@',"Grand Master"),(28,10)
|
||||
# No treasure chest!
|
||||
# guards for the audience chamber
|
||||
MONSTER:'@',"abbot",(32,07)
|
||||
MONSTER:'@',"abbot",(32,08)
|
||||
MONSTER:'@',"abbot",(32,11)
|
||||
MONSTER:'@',"abbot",(32,12)
|
||||
MONSTER:'@',"abbot",(33,07)
|
||||
MONSTER:'@',"abbot",(33,08)
|
||||
MONSTER:'@',"abbot",(33,11)
|
||||
MONSTER:'@',"abbot",(33,12)
|
||||
MONSTER:('@',"abbot"),(32,07)
|
||||
MONSTER:('@',"abbot"),(32,08)
|
||||
MONSTER:('@',"abbot"),(32,11)
|
||||
MONSTER:('@',"abbot"),(32,12)
|
||||
MONSTER:('@',"abbot"),(33,07)
|
||||
MONSTER:('@',"abbot"),(33,08)
|
||||
MONSTER:('@',"abbot"),(33,11)
|
||||
MONSTER:('@',"abbot"),(33,12)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Random traps
|
||||
@@ -85,18 +85,18 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 'E',"earth elemental",(37,01)
|
||||
MONSTER: 'E',"earth elemental",(37,18)
|
||||
MONSTER: 'E',"earth elemental",(03,03)
|
||||
MONSTER: 'E',"earth elemental",(65,04)
|
||||
MONSTER: 'E',"earth elemental",(12,11)
|
||||
MONSTER: 'E',"earth elemental",(60,12)
|
||||
MONSTER: 'E',"earth elemental",(14,08)
|
||||
MONSTER: 'E',"earth elemental",(55,00)
|
||||
MONSTER: 'X',"xorn",(18,18)
|
||||
MONSTER: 'X',"xorn",(59,10)
|
||||
MONSTER: 'X',"xorn",(13,09)
|
||||
MONSTER: 'X',"xorn",(01,17)
|
||||
MONSTER: ('E',"earth elemental"),(37,01)
|
||||
MONSTER: ('E',"earth elemental"),(37,18)
|
||||
MONSTER: ('E',"earth elemental"),(03,03)
|
||||
MONSTER: ('E',"earth elemental"),(65,04)
|
||||
MONSTER: ('E',"earth elemental"),(12,11)
|
||||
MONSTER: ('E',"earth elemental"),(60,12)
|
||||
MONSTER: ('E',"earth elemental"),(14,08)
|
||||
MONSTER: ('E',"earth elemental"),(55,00)
|
||||
MONSTER: ('X',"xorn"),(18,18)
|
||||
MONSTER: ('X',"xorn"),(59,10)
|
||||
MONSTER: ('X',"xorn"),(13,09)
|
||||
MONSTER: ('X',"xorn"),(01,17)
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -133,7 +133,9 @@ MAP
|
||||
------------------------------------------ ------
|
||||
ENDMAP
|
||||
# Random Monsters
|
||||
RANDOM_MONSTERS: 'E', 'X'
|
||||
$monster = monster: { 'E', 'X' }
|
||||
SHUFFLE: $monster
|
||||
|
||||
# Dungeon Description
|
||||
REGION:(00,00,75,20),lit,"ordinary"
|
||||
# Stairs
|
||||
@@ -142,21 +144,21 @@ STAIR:random,down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,20)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -165,29 +167,29 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -198,7 +200,7 @@ MONSTER: 'X',"xorn",random
|
||||
#
|
||||
|
||||
MAZE: "Mon-goal", ' '
|
||||
INIT_MAP: 'L' , '.' , false , false , unlit , false
|
||||
INIT_MAP: mines, 'L' , '.' , false , false , unlit , false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
.L......L.LLL.......LL....
|
||||
@@ -214,26 +216,28 @@ LL........................
|
||||
.........LLL.........L....
|
||||
ENDMAP
|
||||
# Dungeon Description
|
||||
RANDOM_PLACES:(14,04),(13,07)
|
||||
$place = { (14,04),(13,07) }
|
||||
SHUFFLE: $place
|
||||
|
||||
REGION:(00,00,25,10),unlit,"ordinary"
|
||||
# Stairs
|
||||
STAIR:(20,05),up
|
||||
# Objects
|
||||
OBJECT:'(',"lenses",place[0],blessed,0,"The Eyes of the Overworld"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('(',"lenses"),$place[0],blessed,0,name:"The Eyes of the Overworld"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:"fire",random
|
||||
TRAP:"fire",random
|
||||
@@ -242,26 +246,26 @@ TRAP:"fire",random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'@',"Master Kaen",place[0]
|
||||
ALTAR:place[0],noalign,altar
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'E',"earth elemental",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER: 'X',"xorn",random
|
||||
MONSTER:('@',"Master Kaen"),$place[0]
|
||||
ALTAR:$place[0],noalign,altar
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('E',"earth elemental"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
MONSTER: ('X',"xorn"),random
|
||||
|
||||
#
|
||||
# The "fill" levels for the quest.
|
||||
@@ -274,82 +278,98 @@ MONSTER: 'X',"xorn",random
|
||||
|
||||
LEVEL: "Mon-fila"
|
||||
# Random Monsters
|
||||
RANDOM_MONSTERS: 'E', 'X'
|
||||
$monster = monster: { 'E', 'X' }
|
||||
SHUFFLE: $monster
|
||||
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'E', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: 'E', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'E', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'E', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'X', "xorn", random
|
||||
MONSTER: 'E', "earth elemental", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: ('X', "xorn"), random
|
||||
MONSTER: ('E', "earth elemental"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'E', random, random, hostile
|
||||
MONSTER: 'E', "earth elemental", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'E', random, hostile
|
||||
MONSTER: ('E', "earth elemental"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'X', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'X', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'E', "earth elemental", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('E', "earth elemental"), random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
LEVEL: "Mon-filb"
|
||||
# Random Monsters
|
||||
RANDOM_MONSTERS: 'E', 'X'
|
||||
$monster = monster: { 'E', 'X' }
|
||||
SHUFFLE: $monster
|
||||
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'X', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: 'X', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'X', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'X', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'E', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'E', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'E', random, random, hostile
|
||||
MONSTER: 'E', "earth elemental", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'E', random, hostile
|
||||
MONSTER: ('E', "earth elemental"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'X', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'X', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'E', "earth elemental", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('E', "earth elemental"), random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
|
||||
290
dat/Priest.des
290
dat/Priest.des
@@ -64,18 +64,18 @@ DOOR:closed,(52,14)
|
||||
# Unattended Altar - unaligned due to conflict - player must align it.
|
||||
ALTAR:(28,09),noalign,altar
|
||||
# High Priest
|
||||
MONSTER:'@',"Arch Priest",(28,10)
|
||||
MONSTER:('@',"Arch Priest"),(28,10)
|
||||
# The treasure of High Priest
|
||||
OBJECT:'(',"chest",(27,10)
|
||||
OBJECT:('(',"chest"),(27,10)
|
||||
# knight guards for the audience chamber
|
||||
MONSTER:'@',"acolyte",(32,07)
|
||||
MONSTER:'@',"acolyte",(32,08)
|
||||
MONSTER:'@',"acolyte",(32,11)
|
||||
MONSTER:'@',"acolyte",(32,12)
|
||||
MONSTER:'@',"acolyte",(33,07)
|
||||
MONSTER:'@',"acolyte",(33,08)
|
||||
MONSTER:'@',"acolyte",(33,11)
|
||||
MONSTER:'@',"acolyte",(33,12)
|
||||
MONSTER:('@',"acolyte"),(32,07)
|
||||
MONSTER:('@',"acolyte"),(32,08)
|
||||
MONSTER:('@',"acolyte"),(32,11)
|
||||
MONSTER:('@',"acolyte"),(32,12)
|
||||
MONSTER:('@',"acolyte"),(33,07)
|
||||
MONSTER:('@',"acolyte"),(33,08)
|
||||
MONSTER:('@',"acolyte"),(33,11)
|
||||
MONSTER:('@',"acolyte"),(33,12)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Random traps
|
||||
@@ -86,18 +86,18 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 'Z',"human zombie",(37,01)
|
||||
MONSTER: 'Z',"human zombie",(37,18)
|
||||
MONSTER: 'Z',"human zombie",(03,03)
|
||||
MONSTER: 'Z',"human zombie",(65,04)
|
||||
MONSTER: 'Z',"human zombie",(12,11)
|
||||
MONSTER: 'Z',"human zombie",(60,12)
|
||||
MONSTER: 'Z',"human zombie",(14,08)
|
||||
MONSTER: 'Z',"human zombie",(55,00)
|
||||
MONSTER: 'Z',"human zombie",(18,18)
|
||||
MONSTER: 'Z',"human zombie",(59,10)
|
||||
MONSTER: 'Z',"human zombie",(13,09)
|
||||
MONSTER: 'Z',"human zombie",(01,17)
|
||||
MONSTER: ('Z',"human zombie"),(37,01)
|
||||
MONSTER: ('Z',"human zombie"),(37,18)
|
||||
MONSTER: ('Z',"human zombie"),(03,03)
|
||||
MONSTER: ('Z',"human zombie"),(65,04)
|
||||
MONSTER: ('Z',"human zombie"),(12,11)
|
||||
MONSTER: ('Z',"human zombie"),(60,12)
|
||||
MONSTER: ('Z',"human zombie"),(14,08)
|
||||
MONSTER: ('Z',"human zombie"),(55,00)
|
||||
MONSTER: ('Z',"human zombie"),(18,18)
|
||||
MONSTER: ('Z',"human zombie"),(59,10)
|
||||
MONSTER: ('Z',"human zombie"),(13,09)
|
||||
MONSTER: ('Z',"human zombie"),(01,17)
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -109,7 +109,7 @@ MONSTER: 'Z',"human zombie",(01,17)
|
||||
MAZE: "Pri-loca",' '
|
||||
FLAGS: hardfloor
|
||||
# This is a kludge to init the level as a lit field.
|
||||
INIT_MAP: '.' , '.' , false , false , lit , false
|
||||
INIT_MAP: mines, '.' , '.' , false , false , lit , false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
........................................
|
||||
@@ -132,10 +132,10 @@ REGION:(00,00,09,13),unlit,"morgue"
|
||||
REGION:(09,00,30,01),unlit,"morgue"
|
||||
REGION:(09,12,30,13),unlit,"morgue"
|
||||
REGION:(31,00,39,13),unlit,"morgue"
|
||||
REGION:(11,03,29,10),lit,"temple",filled,true
|
||||
REGION:(11,03,29,10),lit,"temple",filled,irregular
|
||||
# The altar inside the temple
|
||||
ALTAR:(20,07),noalign,shrine
|
||||
MONSTER:'@',"aligned priest",(20,07),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(20,07),noalign,hostile
|
||||
# Doors
|
||||
DOOR:locked,(10,06)
|
||||
DOOR:locked,(10,07)
|
||||
@@ -150,21 +150,21 @@ STAIR:(20,06),down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(10,02,30,13)
|
||||
# Objects (inside the antechambers).
|
||||
OBJECT:random,random,(14,03)
|
||||
OBJECT:random,random,(15,03)
|
||||
OBJECT:random,random,(16,03)
|
||||
OBJECT:random,random,(14,10)
|
||||
OBJECT:random,random,(15,10)
|
||||
OBJECT:random,random,(16,10)
|
||||
OBJECT:random,random,(17,10)
|
||||
OBJECT:random,random,(24,03)
|
||||
OBJECT:random,random,(25,03)
|
||||
OBJECT:random,random,(26,03)
|
||||
OBJECT:random,random,(27,03)
|
||||
OBJECT:random,random,(24,10)
|
||||
OBJECT:random,random,(25,10)
|
||||
OBJECT:random,random,(26,10)
|
||||
OBJECT:random,random,(27,10)
|
||||
OBJECT:random,(14,03)
|
||||
OBJECT:random,(15,03)
|
||||
OBJECT:random,(16,03)
|
||||
OBJECT:random,(14,10)
|
||||
OBJECT:random,(15,10)
|
||||
OBJECT:random,(16,10)
|
||||
OBJECT:random,(17,10)
|
||||
OBJECT:random,(24,03)
|
||||
OBJECT:random,(25,03)
|
||||
OBJECT:random,(26,03)
|
||||
OBJECT:random,(27,03)
|
||||
OBJECT:random,(24,10)
|
||||
OBJECT:random,(25,10)
|
||||
OBJECT:random,(26,10)
|
||||
OBJECT:random,(27,10)
|
||||
# Random traps
|
||||
TRAP:random,(15,04)
|
||||
TRAP:random,(25,04)
|
||||
@@ -183,7 +183,7 @@ TRAP:random,random
|
||||
#
|
||||
|
||||
MAZE: "Pri-goal", ' '
|
||||
INIT_MAP: 'L' , '.' , false , false , unlit , false
|
||||
INIT_MAP: mines, 'L' , '.' , false , false , unlit , false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
.L......L.LLL.......LL....
|
||||
@@ -199,26 +199,28 @@ LL........................
|
||||
.........LLL.........L....
|
||||
ENDMAP
|
||||
# Dungeon Description
|
||||
RANDOM_PLACES:(14,04),(13,07)
|
||||
$place = { (14,04),(13,07) }
|
||||
SHUFFLE: $place
|
||||
|
||||
REGION:(00,00,25,10),unlit,"ordinary"
|
||||
# Stairs
|
||||
STAIR:(20,05),up
|
||||
# Objects
|
||||
OBJECT:'[',"helm of brilliance",place[0],blessed,0,"The Mitre of Holiness"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('[',"helm of brilliance"),$place[0],blessed,0,name:"The Mitre of Holiness"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:"fire",random
|
||||
TRAP:"fire",random
|
||||
@@ -227,34 +229,34 @@ TRAP:"fire",random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'&',"Nalzok",place[0]
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',random,random
|
||||
MONSTER:'Z',random,random
|
||||
MONSTER:'W',"wraith",random
|
||||
MONSTER:'W',"wraith",random
|
||||
MONSTER:'W',"wraith",random
|
||||
MONSTER:'W',"wraith",random
|
||||
MONSTER:'W',"wraith",random
|
||||
MONSTER:'W',"wraith",random
|
||||
MONSTER:'W',"wraith",random
|
||||
MONSTER:'W',"wraith",random
|
||||
MONSTER:'W',random,random
|
||||
MONSTER:('&',"Nalzok"),$place[0]
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:'Z',random
|
||||
MONSTER:'Z',random
|
||||
MONSTER:('W',"wraith"),random
|
||||
MONSTER:('W',"wraith"),random
|
||||
MONSTER:('W',"wraith"),random
|
||||
MONSTER:('W',"wraith"),random
|
||||
MONSTER:('W',"wraith"),random
|
||||
MONSTER:('W',"wraith"),random
|
||||
MONSTER:('W',"wraith"),random
|
||||
MONSTER:('W',"wraith"),random
|
||||
MONSTER:'W',random
|
||||
|
||||
#
|
||||
# The "fill" levels for the quest.
|
||||
@@ -267,73 +269,85 @@ MONSTER:'W',random,random
|
||||
|
||||
LEVEL: "Pri-fila"
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'Z', "human zombie", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: ('Z', "human zombie"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'Z', "human zombie", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: ('Z', "human zombie"), random
|
||||
}
|
||||
|
||||
ROOM: "morgue" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
ROOM: "morgue" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'W', "wraith", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('W', "wraith"), random
|
||||
}
|
||||
|
||||
ROOM: "morgue" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
ROOM: "morgue" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
LEVEL: "Pri-filb"
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'Z', "human zombie", random
|
||||
MONSTER: 'W', "wraith", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: ('Z', "human zombie"), random
|
||||
MONSTER: ('W', "wraith"), random
|
||||
}
|
||||
|
||||
ROOM: "morgue" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
ROOM: "morgue" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'Z', "human zombie", random
|
||||
MONSTER: 'W', "wraith", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: ('Z', "human zombie"), random
|
||||
MONSTER: ('W', "wraith"), random
|
||||
}
|
||||
|
||||
ROOM: "morgue" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
ROOM: "morgue" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'Z', "human zombie", random
|
||||
MONSTER: 'W', "wraith", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('Z', "human zombie"), random
|
||||
MONSTER: ('W', "wraith"), random
|
||||
}
|
||||
|
||||
ROOM: "morgue" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
ROOM: "morgue" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
292
dat/Ranger.des
292
dat/Ranger.des
@@ -12,7 +12,7 @@
|
||||
#
|
||||
MAZE: "Ran-strt",'.'
|
||||
FLAGS: noteleport,hardfloor,arboreal
|
||||
INIT_MAP:'.','.',true,true,lit,false
|
||||
INIT_MAP:mines,'.','.',true,true,lit,false
|
||||
GEOMETRY:left,center
|
||||
#1234567890123456789012345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -45,18 +45,18 @@ STAIR:(10,10),down
|
||||
# Portal arrival point; just about anywhere on the right hand side of the map
|
||||
BRANCH:levregion(51,2,77,18),(0,0,40,20)
|
||||
# Orion
|
||||
MONSTER:'@',"Orion",(20,10)
|
||||
MONSTER:('@',"Orion"),(20,10)
|
||||
# The treasure of Orion
|
||||
OBJECT:'(',"chest",(20,10)
|
||||
OBJECT:('(',"chest"),(20,10)
|
||||
# Guards for the audience chamber
|
||||
MONSTER:'@',"hunter",(19,09)
|
||||
MONSTER:'@',"hunter",(20,09)
|
||||
MONSTER:'@',"hunter",(21,09)
|
||||
MONSTER:'@',"hunter",(19,10)
|
||||
MONSTER:'@',"hunter",(21,10)
|
||||
MONSTER:'@',"hunter",(19,11)
|
||||
MONSTER:'@',"hunter",(20,11)
|
||||
MONSTER:'@',"hunter",(21,11)
|
||||
MONSTER:('@',"hunter"),(19,09)
|
||||
MONSTER:('@',"hunter"),(20,09)
|
||||
MONSTER:('@',"hunter"),(21,09)
|
||||
MONSTER:('@',"hunter"),(19,10)
|
||||
MONSTER:('@',"hunter"),(21,10)
|
||||
MONSTER:('@',"hunter"),(19,11)
|
||||
MONSTER:('@',"hunter"),(20,11)
|
||||
MONSTER:('@',"hunter"),(21,11)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,40,20)
|
||||
# Traps
|
||||
@@ -67,33 +67,33 @@ TRAP:"spiked pit",random
|
||||
TRAP:"bear",random
|
||||
TRAP:"bear",random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 'H',"minotaur",(33,09),hostile,asleep
|
||||
MONSTER: 'C',"forest centaur",(19,03),hostile
|
||||
MONSTER: 'C',"forest centaur",(19,04),hostile
|
||||
MONSTER: 'C',"forest centaur",(19,05),hostile
|
||||
MONSTER: 'C',"forest centaur",(21,03),hostile
|
||||
MONSTER: 'C',"forest centaur",(21,04),hostile
|
||||
MONSTER: 'C',"forest centaur",(21,05),hostile
|
||||
MONSTER: 'C',"forest centaur",(01,09),hostile
|
||||
MONSTER: 'C',"forest centaur",(02,09),hostile
|
||||
MONSTER: 'C',"forest centaur",(03,09),hostile
|
||||
MONSTER: 'C',"forest centaur",(01,11),hostile
|
||||
MONSTER: 'C',"forest centaur",(02,11),hostile
|
||||
MONSTER: 'C',"forest centaur",(03,11),hostile
|
||||
MONSTER: 'C',"forest centaur",(19,15),hostile
|
||||
MONSTER: 'C',"forest centaur",(19,16),hostile
|
||||
MONSTER: 'C',"forest centaur",(19,17),hostile
|
||||
MONSTER: 'C',"forest centaur",(21,15),hostile
|
||||
MONSTER: 'C',"forest centaur",(21,16),hostile
|
||||
MONSTER: 'C',"forest centaur",(21,17),hostile
|
||||
MONSTER: 'C',"plains centaur",random,hostile
|
||||
MONSTER: 'C',"plains centaur",random,hostile
|
||||
MONSTER: 'C',"plains centaur",random,hostile
|
||||
MONSTER: 'C',"plains centaur",random,hostile
|
||||
MONSTER: 'C',"plains centaur",random,hostile
|
||||
MONSTER: 'C',"plains centaur",random,hostile
|
||||
MONSTER: 's',"scorpion",random,hostile
|
||||
MONSTER: 's',"scorpion",random,hostile
|
||||
MONSTER: ('H',"minotaur"),(33,09),hostile,asleep
|
||||
MONSTER: ('C',"forest centaur"),(19,03),hostile
|
||||
MONSTER: ('C',"forest centaur"),(19,04),hostile
|
||||
MONSTER: ('C',"forest centaur"),(19,05),hostile
|
||||
MONSTER: ('C',"forest centaur"),(21,03),hostile
|
||||
MONSTER: ('C',"forest centaur"),(21,04),hostile
|
||||
MONSTER: ('C',"forest centaur"),(21,05),hostile
|
||||
MONSTER: ('C',"forest centaur"),(01,09),hostile
|
||||
MONSTER: ('C',"forest centaur"),(02,09),hostile
|
||||
MONSTER: ('C',"forest centaur"),(03,09),hostile
|
||||
MONSTER: ('C',"forest centaur"),(01,11),hostile
|
||||
MONSTER: ('C',"forest centaur"),(02,11),hostile
|
||||
MONSTER: ('C',"forest centaur"),(03,11),hostile
|
||||
MONSTER: ('C',"forest centaur"),(19,15),hostile
|
||||
MONSTER: ('C',"forest centaur"),(19,16),hostile
|
||||
MONSTER: ('C',"forest centaur"),(19,17),hostile
|
||||
MONSTER: ('C',"forest centaur"),(21,15),hostile
|
||||
MONSTER: ('C',"forest centaur"),(21,16),hostile
|
||||
MONSTER: ('C',"forest centaur"),(21,17),hostile
|
||||
MONSTER: ('C',"plains centaur"),random,hostile
|
||||
MONSTER: ('C',"plains centaur"),random,hostile
|
||||
MONSTER: ('C',"plains centaur"),random,hostile
|
||||
MONSTER: ('C',"plains centaur"),random,hostile
|
||||
MONSTER: ('C',"plains centaur"),random,hostile
|
||||
MONSTER: ('C',"plains centaur"),random,hostile
|
||||
MONSTER: ('s',"scorpion"),random,hostile
|
||||
MONSTER: ('s',"scorpion"),random,hostile
|
||||
|
||||
|
||||
#
|
||||
@@ -137,14 +137,14 @@ STAIR:(27,18),down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,54,19)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:"spiked pit",random
|
||||
TRAP:"spiked pit",random
|
||||
@@ -153,29 +153,29 @@ TRAP:"teleport",random
|
||||
TRAP:"arrow",random
|
||||
TRAP:"arrow",random
|
||||
# Random monsters.
|
||||
MONSTER:'q',"wumpus",(27,18),hostile,asleep
|
||||
MONSTER:'B',"giant bat",random,hostile
|
||||
MONSTER:'B',"giant bat",random,hostile
|
||||
MONSTER:'B',"giant bat",random,hostile
|
||||
MONSTER:'B',"giant bat",random,hostile
|
||||
MONSTER:'C',"forest centaur",random,hostile
|
||||
MONSTER:'C',"forest centaur",random,hostile
|
||||
MONSTER:'C',"forest centaur",random,hostile
|
||||
MONSTER:'C',"forest centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'s',"scorpion",random,hostile
|
||||
MONSTER:'s',"scorpion",random,hostile
|
||||
MONSTER:'s',"scorpion",random,hostile
|
||||
MONSTER:'s',"scorpion",random,hostile
|
||||
MONSTER:'s',random,random,hostile
|
||||
MONSTER:'s',random,random,hostile
|
||||
MONSTER:('q',"wumpus"),(27,18),hostile,asleep
|
||||
MONSTER:('B',"giant bat"),random,hostile
|
||||
MONSTER:('B',"giant bat"),random,hostile
|
||||
MONSTER:('B',"giant bat"),random,hostile
|
||||
MONSTER:('B',"giant bat"),random,hostile
|
||||
MONSTER:('C',"forest centaur"),random,hostile
|
||||
MONSTER:('C',"forest centaur"),random,hostile
|
||||
MONSTER:('C',"forest centaur"),random,hostile
|
||||
MONSTER:('C',"forest centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('s',"scorpion"),random,hostile
|
||||
MONSTER:('s',"scorpion"),random,hostile
|
||||
MONSTER:('s',"scorpion"),random,hostile
|
||||
MONSTER:('s',"scorpion"),random,hostile
|
||||
MONSTER:'s',random,hostile
|
||||
MONSTER:'s',random,hostile
|
||||
|
||||
|
||||
#
|
||||
@@ -217,21 +217,21 @@ STAIR:(19,10),up
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Objects
|
||||
OBJECT:')',"bow",(37,10),blessed,0,"The Longbow of Diana"
|
||||
OBJECT:'(',"chest",(37,10)
|
||||
OBJECT:random,random,(36,09)
|
||||
OBJECT:random,random,(36,10)
|
||||
OBJECT:random,random,(36,11)
|
||||
OBJECT:random,random,(37,09)
|
||||
OBJECT:random,random,(37,11)
|
||||
OBJECT:random,random,(38,09)
|
||||
OBJECT:random,random,(38,10)
|
||||
OBJECT:random,random,(38,11)
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:(')',"bow"),(37,10),blessed,0,name:"The Longbow of Diana"
|
||||
OBJECT:('(',"chest"),(37,10)
|
||||
OBJECT:random,(36,09)
|
||||
OBJECT:random,(36,10)
|
||||
OBJECT:random,(36,11)
|
||||
OBJECT:random,(37,09)
|
||||
OBJECT:random,(37,11)
|
||||
OBJECT:random,(38,09)
|
||||
OBJECT:random,(38,10)
|
||||
OBJECT:random,(38,11)
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -255,34 +255,34 @@ DOOR:closed,(51,10)
|
||||
DOOR:locked,(53,08)
|
||||
DOOR:closed,(65,05)
|
||||
# Random monsters.
|
||||
MONSTER:'s',"Scorpius",(37,10),hostile
|
||||
MONSTER:'C',"forest centaur",(36,09),hostile
|
||||
MONSTER:'C',"forest centaur",(36,10),hostile
|
||||
MONSTER:'C',"forest centaur",(36,11),hostile
|
||||
MONSTER:'C',"forest centaur",(37,09),hostile
|
||||
MONSTER:'C',"forest centaur",(37,11),hostile
|
||||
MONSTER:'C',"forest centaur",(38,09),hostile
|
||||
MONSTER:'C',"mountain centaur",(38,10),hostile
|
||||
MONSTER:'C',"mountain centaur",(38,11),hostile
|
||||
MONSTER:'C',"mountain centaur",(02,02),hostile
|
||||
MONSTER:'C',"mountain centaur",(71,02),hostile
|
||||
MONSTER:'C',"mountain centaur",(02,16),hostile
|
||||
MONSTER:'C',"mountain centaur",(71,16),hostile
|
||||
MONSTER:'C',"forest centaur",random,hostile
|
||||
MONSTER:'C',"forest centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',"mountain centaur",random,hostile
|
||||
MONSTER:'C',random,random,hostile
|
||||
MONSTER:'C',random,random,hostile
|
||||
MONSTER:'s',"scorpion",(03,02),hostile
|
||||
MONSTER:'s',"scorpion",(72,02),hostile
|
||||
MONSTER:'s',"scorpion",(03,17),hostile
|
||||
MONSTER:'s',"scorpion",(72,17),hostile
|
||||
MONSTER:'s',"scorpion",(41,10),hostile
|
||||
MONSTER:'s',"scorpion",(33,09),hostile
|
||||
MONSTER:'s',"scorpion",random,hostile
|
||||
MONSTER:'s',"scorpion",random,hostile
|
||||
MONSTER:'s',random,random,hostile
|
||||
MONSTER:('s',"Scorpius"),(37,10),hostile
|
||||
MONSTER:('C',"forest centaur"),(36,09),hostile
|
||||
MONSTER:('C',"forest centaur"),(36,10),hostile
|
||||
MONSTER:('C',"forest centaur"),(36,11),hostile
|
||||
MONSTER:('C',"forest centaur"),(37,09),hostile
|
||||
MONSTER:('C',"forest centaur"),(37,11),hostile
|
||||
MONSTER:('C',"forest centaur"),(38,09),hostile
|
||||
MONSTER:('C',"mountain centaur"),(38,10),hostile
|
||||
MONSTER:('C',"mountain centaur"),(38,11),hostile
|
||||
MONSTER:('C',"mountain centaur"),(02,02),hostile
|
||||
MONSTER:('C',"mountain centaur"),(71,02),hostile
|
||||
MONSTER:('C',"mountain centaur"),(02,16),hostile
|
||||
MONSTER:('C',"mountain centaur"),(71,16),hostile
|
||||
MONSTER:('C',"forest centaur"),random,hostile
|
||||
MONSTER:('C',"forest centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:('C',"mountain centaur"),random,hostile
|
||||
MONSTER:'C',random,hostile
|
||||
MONSTER:'C',random,hostile
|
||||
MONSTER:('s',"scorpion"),(03,02),hostile
|
||||
MONSTER:('s',"scorpion"),(72,02),hostile
|
||||
MONSTER:('s',"scorpion"),(03,17),hostile
|
||||
MONSTER:('s',"scorpion"),(72,17),hostile
|
||||
MONSTER:('s',"scorpion"),(41,10),hostile
|
||||
MONSTER:('s',"scorpion"),(33,09),hostile
|
||||
MONSTER:('s',"scorpion"),random,hostile
|
||||
MONSTER:('s',"scorpion"),random,hostile
|
||||
MONSTER:'s',random,hostile
|
||||
|
||||
WALLIFY
|
||||
|
||||
@@ -296,62 +296,62 @@ WALLIFY
|
||||
#
|
||||
|
||||
MAZE: "Ran-fila" , ' '
|
||||
INIT_MAP: '.' , 'T', true, true, random, true
|
||||
INIT_MAP: mines, '.' , 'T', true, true, random, true
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
#
|
||||
MONSTER: 'C', "mountain centaur", random, hostile
|
||||
MONSTER: 'C', "mountain centaur", random, hostile
|
||||
MONSTER: 'C', "forest centaur", random, hostile
|
||||
MONSTER: 'C', "forest centaur", random, hostile
|
||||
MONSTER: 'C', "forest centaur", random, hostile
|
||||
MONSTER: 'C', random, random, hostile
|
||||
MONSTER: 's', "scorpion", random, hostile
|
||||
MONSTER: ('C', "mountain centaur"), random, hostile
|
||||
MONSTER: ('C', "mountain centaur"), random, hostile
|
||||
MONSTER: ('C', "forest centaur"), random, hostile
|
||||
MONSTER: ('C', "forest centaur"), random, hostile
|
||||
MONSTER: ('C', "forest centaur"), random, hostile
|
||||
MONSTER: 'C', random, hostile
|
||||
MONSTER: ('s', "scorpion"), random, hostile
|
||||
|
||||
MAZE: "Ran-filb" , ' '
|
||||
INIT_MAP: '.' , ' ', true, true, random, true
|
||||
INIT_MAP: mines, '.' , ' ', true, true, random, true
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
#
|
||||
MONSTER: 'C', "mountain centaur", random, hostile
|
||||
MONSTER: 'C', "mountain centaur", random, hostile
|
||||
MONSTER: 'C', "mountain centaur", random, hostile
|
||||
MONSTER: 'C', "mountain centaur", random, hostile
|
||||
MONSTER: 'C', random, random, hostile
|
||||
MONSTER: 's', "scorpion", random, hostile
|
||||
MONSTER: 's', "scorpion", random, hostile
|
||||
MONSTER: ('C', "mountain centaur"), random, hostile
|
||||
MONSTER: ('C', "mountain centaur"), random, hostile
|
||||
MONSTER: ('C', "mountain centaur"), random, hostile
|
||||
MONSTER: ('C', "mountain centaur"), random, hostile
|
||||
MONSTER: 'C', random, hostile
|
||||
MONSTER: ('s', "scorpion"), random, hostile
|
||||
MONSTER: ('s', "scorpion"), random, hostile
|
||||
|
||||
|
||||
436
dat/Rogue.des
436
dat/Rogue.des
@@ -41,11 +41,13 @@ ENDMAP
|
||||
#REGION:(00,00,75,20),lit,"ordinary"
|
||||
# The down stairs is at one of the 4 "exits". The others are mimics,
|
||||
# mimicing stairwells.
|
||||
RANDOM_PLACES: (33,0), (0,12), (25,20), (75,05)
|
||||
STAIR:place[0],down
|
||||
MONSTER:'m',"giant mimic", place[1], m_feature "staircase down"
|
||||
MONSTER:'m',"large mimic", place[2], m_feature "staircase down"
|
||||
MONSTER:'m',"small mimic", place[3], m_feature "staircase down"
|
||||
$place = { (33,0), (0,12), (25,20), (75,05) }
|
||||
SHUFFLE: $place
|
||||
|
||||
STAIR:$place[0],down
|
||||
MONSTER:('m',"giant mimic"), $place[1], m_feature "staircase down"
|
||||
MONSTER:('m',"large mimic"), $place[2], m_feature "staircase down"
|
||||
MONSTER:('m',"small mimic"), $place[3], m_feature "staircase down"
|
||||
# Portal arrival point
|
||||
BRANCH:(19,09,19,09),(0,0,0,0)
|
||||
# Doors (secret)
|
||||
@@ -98,21 +100,21 @@ DOOR: closed, ( 6,18)
|
||||
DOOR: closed, (65,18)
|
||||
DOOR: closed, (68,18)
|
||||
# Master of Thieves
|
||||
MONSTER:'@',"Master of Thieves",(36,11)
|
||||
MONSTER:('@',"Master of Thieves"),(36,11)
|
||||
# The treasure of Master of Thieves
|
||||
OBJECT:'(',"chest",(36,11)
|
||||
OBJECT:('(',"chest"),(36,11)
|
||||
# thug guards, room #1
|
||||
MONSTER:'@',"thug",(28,10)
|
||||
MONSTER:'@',"thug",(29,11)
|
||||
MONSTER:'@',"thug",(30,09)
|
||||
MONSTER:'@',"thug",(31,07)
|
||||
MONSTER:('@',"thug"),(28,10)
|
||||
MONSTER:('@',"thug"),(29,11)
|
||||
MONSTER:('@',"thug"),(30,09)
|
||||
MONSTER:('@',"thug"),(31,07)
|
||||
# thug guards, room #2
|
||||
MONSTER:'@',"thug",(31,13)
|
||||
MONSTER:'@',"thug",(33,14)
|
||||
MONSTER:'@',"thug",(30,15)
|
||||
MONSTER:('@',"thug"),(31,13)
|
||||
MONSTER:('@',"thug"),(33,14)
|
||||
MONSTER:('@',"thug"),(30,15)
|
||||
#thug guards, room #3
|
||||
MONSTER:'@',"thug",(35,09)
|
||||
MONSTER:'@',"thug",(36,13)
|
||||
MONSTER:('@',"thug"),(35,09)
|
||||
MONSTER:('@',"thug"),(36,13)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,20)
|
||||
# Random traps
|
||||
@@ -136,37 +138,37 @@ TRAP:random,random
|
||||
# Monsters to get in the way.
|
||||
#
|
||||
# West exit
|
||||
MONSTER: 'l',"leprechaun",(01,12),hostile
|
||||
MONSTER: 'n',"water nymph",(02,12),hostile
|
||||
MONSTER: ('l',"leprechaun"),(01,12),hostile
|
||||
MONSTER: ('n',"water nymph"),(02,12),hostile
|
||||
# North exit
|
||||
MONSTER: 'n',"water nymph",(33,01),hostile
|
||||
MONSTER: 'l',"leprechaun",(33,02),hostile
|
||||
MONSTER: ('n',"water nymph"),(33,01),hostile
|
||||
MONSTER: ('l',"leprechaun"),(33,02),hostile
|
||||
# East exit
|
||||
MONSTER: 'n',"water nymph",(74,05),hostile
|
||||
MONSTER: 'l',"leprechaun",(74,04),hostile
|
||||
MONSTER: ('n',"water nymph"),(74,05),hostile
|
||||
MONSTER: ('l',"leprechaun"),(74,04),hostile
|
||||
# South exit
|
||||
MONSTER: 'l',"leprechaun",(25,19),hostile
|
||||
MONSTER: 'n',"water nymph",(25,18),hostile
|
||||
MONSTER: ('l',"leprechaun"),(25,19),hostile
|
||||
MONSTER: ('n',"water nymph"),(25,18),hostile
|
||||
# Wandering the streets. What I'd really like for this is a random
|
||||
# location, but make sure we're on a given type, e.g. street (if they
|
||||
# existed, of course).
|
||||
MONSTER: 'n',"water nymph",(07,05),hostile
|
||||
MONSTER: 'l',"leprechaun",(28,06),hostile
|
||||
MONSTER: 'n',"water nymph",(38,07),hostile
|
||||
MONSTER: 'l',"leprechaun",(45,01),hostile
|
||||
MONSTER: 'n',"water nymph",(59,07),hostile
|
||||
MONSTER: 'l',"leprechaun",(62,14),hostile
|
||||
MONSTER: 'n',"water nymph",(71,14),hostile
|
||||
MONSTER: 'l',"leprechaun",(39,13),hostile
|
||||
MONSTER: 'n',"water nymph",(18,14),hostile
|
||||
MONSTER: ':',"chameleon",(19,08),hostile
|
||||
MONSTER: ':',"chameleon",(22,08),hostile
|
||||
MONSTER: ':',"chameleon",(16,08),hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ('n',"water nymph"),(07,05),hostile
|
||||
MONSTER: ('l',"leprechaun"),(28,06),hostile
|
||||
MONSTER: ('n',"water nymph"),(38,07),hostile
|
||||
MONSTER: ('l',"leprechaun"),(45,01),hostile
|
||||
MONSTER: ('n',"water nymph"),(59,07),hostile
|
||||
MONSTER: ('l',"leprechaun"),(62,14),hostile
|
||||
MONSTER: ('n',"water nymph"),(71,14),hostile
|
||||
MONSTER: ('l',"leprechaun"),(39,13),hostile
|
||||
MONSTER: ('n',"water nymph"),(18,14),hostile
|
||||
MONSTER: (':',"chameleon"),(19,08),hostile
|
||||
MONSTER: (':',"chameleon"),(22,08),hostile
|
||||
MONSTER: (':',"chameleon"),(16,08),hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -212,21 +214,21 @@ STAIR:random,down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,20)
|
||||
# Objects
|
||||
OBJECT:'?',"teleportation",(11,18),cursed,0
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('?',"teleportation"),(11,18),cursed,0
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -235,39 +237,39 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',random,random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',random,random,hostile
|
||||
MONSTER:'N',random,random,hostile
|
||||
MONSTER:'N',random,random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:'l',random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:'N',random,hostile
|
||||
MONSTER:'N',random,hostile
|
||||
MONSTER:'N',random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
|
||||
#
|
||||
# The "goal" level for the quest. Teleportation and digging are
|
||||
@@ -315,21 +317,21 @@ NON_DIGGABLE:(00,00,75,20)
|
||||
# One trap to keep the gnomes at bay.
|
||||
TRAP:"spiked pit",(37,07)
|
||||
# Objects
|
||||
OBJECT:'(',"skeleton key",(38,10),blessed,0,"The Master Key of Thievery"
|
||||
OBJECT:'%',"tin",(26,12),"chameleon",0
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('(',"skeleton key"),(38,10),blessed,0,name:"The Master Key of Thievery"
|
||||
OBJECT:('%',"tin"),(26,12),montype:"chameleon"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -343,45 +345,45 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'@',"Master Assassin",(38,10),hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',"leprechaun",random,hostile
|
||||
MONSTER:'l',random,random,hostile
|
||||
MONSTER:'l',random,random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',"guardian naga",random,hostile
|
||||
MONSTER:'N',random,random,hostile
|
||||
MONSTER:'N',random,random,hostile
|
||||
MONSTER:'N',random,random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER: ':',"chameleon",random,hostile
|
||||
MONSTER:';',"shark",(51,14),hostile
|
||||
MONSTER:';',"shark",(53,09),hostile
|
||||
MONSTER:';',"shark",(55,15),hostile
|
||||
MONSTER:';',"shark",(58,10),hostile
|
||||
MONSTER:('@',"Master Assassin"),(38,10),hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:('l',"leprechaun"),random,hostile
|
||||
MONSTER:'l',random,hostile
|
||||
MONSTER:'l',random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:('N',"guardian naga"),random,hostile
|
||||
MONSTER:'N',random,hostile
|
||||
MONSTER:'N',random,hostile
|
||||
MONSTER:'N',random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER: (':',"chameleon"),random,hostile
|
||||
MONSTER:(';',"shark"),(51,14),hostile
|
||||
MONSTER:(';',"shark"),(53,09),hostile
|
||||
MONSTER:(';',"shark"),(55,15),hostile
|
||||
MONSTER:(';',"shark"),(58,10),hostile
|
||||
|
||||
#
|
||||
# The "fill" level for the quest.
|
||||
@@ -391,45 +393,51 @@ MONSTER:';',"shark",(58,10),hostile
|
||||
#
|
||||
LEVEL: "Rog-fila"
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'l', "leprechaun", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: ('l', "leprechaun"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'l', "leprechaun", random, hostile
|
||||
MONSTER: 'N', "guardian naga", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: ('l', "leprechaun"), random, hostile
|
||||
MONSTER: ('N', "guardian naga"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'n', "water nymph", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: ('n', "water nymph"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'l', random, random, hostile
|
||||
MONSTER: 'N', "guardian naga", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'l', random, hostile
|
||||
MONSTER: ('N', "guardian naga"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'l', "leprechaun", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('l', "leprechaun"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'l', "leprechaun", random, hostile
|
||||
MONSTER: 'n', "water nymph", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('l', "leprechaun"), random, hostile
|
||||
MONSTER: ('n', "water nymph"), random, hostile
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
@@ -438,44 +446,50 @@ RANDOM_CORRIDORS
|
||||
#
|
||||
LEVEL: "Rog-filb"
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'l', "leprechaun", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: ('l', "leprechaun"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'l', "leprechaun", random, hostile
|
||||
MONSTER: 'N', "guardian naga", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: ('l', "leprechaun"), random, hostile
|
||||
MONSTER: ('N', "guardian naga"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'n', "water nymph", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: ('n', "water nymph"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'l', random, random, hostile
|
||||
MONSTER: 'N', "guardian naga", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'l', random, hostile
|
||||
MONSTER: ('N', "guardian naga"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'l', "leprechaun", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('l', "leprechaun"), random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'l', "leprechaun", random, hostile
|
||||
MONSTER: 'n', "water nymph", random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('l', "leprechaun"), random, hostile
|
||||
MONSTER: ('n', "water nymph"), random, hostile
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
332
dat/Samurai.des
332
dat/Samurai.des
@@ -54,18 +54,18 @@ DOOR:locked,(39,08)
|
||||
DOOR:closed,(50,04)
|
||||
DOOR:closed,(50,06)
|
||||
# Lord Sato
|
||||
MONSTER:'@',"Lord Sato",(20,04)
|
||||
MONSTER:('@',"Lord Sato"),(20,04)
|
||||
# The treasure of Lord Sato
|
||||
OBJECT:'(',"chest",(20,04)
|
||||
OBJECT:('(',"chest"),(20,04)
|
||||
# roshi guards for the audience chamber
|
||||
MONSTER:'@',"roshi",(18,04)
|
||||
MONSTER:'@',"roshi",(18,05)
|
||||
MONSTER:'@',"roshi",(18,06)
|
||||
MONSTER:'@',"roshi",(18,07)
|
||||
MONSTER:'@',"roshi",(26,04)
|
||||
MONSTER:'@',"roshi",(26,05)
|
||||
MONSTER:'@',"roshi",(26,06)
|
||||
MONSTER:'@',"roshi",(26,07)
|
||||
MONSTER:('@',"roshi"),(18,04)
|
||||
MONSTER:('@',"roshi"),(18,05)
|
||||
MONSTER:('@',"roshi"),(18,06)
|
||||
MONSTER:('@',"roshi"),(18,07)
|
||||
MONSTER:('@',"roshi"),(26,04)
|
||||
MONSTER:('@',"roshi"),(26,05)
|
||||
MONSTER:('@',"roshi"),(26,06)
|
||||
MONSTER:('@',"roshi"),(26,07)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Random traps
|
||||
@@ -76,19 +76,19 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: '@',"ninja",(64,00),hostile
|
||||
MONSTER: 'd',"wolf",(65,01)
|
||||
MONSTER: '@',"ninja",(67,02),hostile
|
||||
MONSTER: '@',"ninja",(69,05),hostile
|
||||
MONSTER: '@',"ninja",(69,06),hostile
|
||||
MONSTER: 'd',"wolf",(69,07)
|
||||
MONSTER: '@',"ninja",(70,06),hostile
|
||||
MONSTER: '@',"ninja",(70,07),hostile
|
||||
MONSTER: '@',"ninja",(72,01),hostile
|
||||
MONSTER: 'd',"wolf",(75,09)
|
||||
MONSTER: '@',"ninja",(73,05),hostile
|
||||
MONSTER: '@',"ninja",(68,02),hostile
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER: ('@',"ninja"),(64,00),hostile
|
||||
MONSTER: ('d',"wolf"),(65,01)
|
||||
MONSTER: ('@',"ninja"),(67,02),hostile
|
||||
MONSTER: ('@',"ninja"),(69,05),hostile
|
||||
MONSTER: ('@',"ninja"),(69,06),hostile
|
||||
MONSTER: ('d',"wolf"),(69,07)
|
||||
MONSTER: ('@',"ninja"),(70,06),hostile
|
||||
MONSTER: ('@',"ninja"),(70,07),hostile
|
||||
MONSTER: ('@',"ninja"),(72,01),hostile
|
||||
MONSTER: ('d',"wolf"),(75,09)
|
||||
MONSTER: ('@',"ninja"),(73,05),hostile
|
||||
MONSTER: ('@',"ninja"),(68,02),hostile
|
||||
MONSTER:('E',"stalker"),random
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -155,41 +155,41 @@ STAIR:(25,14),down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Objects
|
||||
OBJECT:'*',random,(25,05)
|
||||
OBJECT:'*',random,(26,05)
|
||||
OBJECT:'*',random,(27,05)
|
||||
OBJECT:'*',random,(28,05)
|
||||
OBJECT:'*',random,(25,06)
|
||||
OBJECT:'*',random,(26,06)
|
||||
OBJECT:'*',random,(27,06)
|
||||
OBJECT:'*',random,(28,06)
|
||||
OBJECT:'*',(25,05)
|
||||
OBJECT:'*',(26,05)
|
||||
OBJECT:'*',(27,05)
|
||||
OBJECT:'*',(28,05)
|
||||
OBJECT:'*',(25,06)
|
||||
OBJECT:'*',(26,06)
|
||||
OBJECT:'*',(27,06)
|
||||
OBJECT:'*',(28,06)
|
||||
#
|
||||
OBJECT:'[',random,(40,05)
|
||||
OBJECT:'[',random,(41,05)
|
||||
OBJECT:'[',random,(42,05)
|
||||
OBJECT:'[',random,(43,05)
|
||||
OBJECT:'[',random,(40,06)
|
||||
OBJECT:'[',random,(41,06)
|
||||
OBJECT:'[',random,(42,06)
|
||||
OBJECT:'[',random,(43,06)
|
||||
OBJECT:'[',(40,05)
|
||||
OBJECT:'[',(41,05)
|
||||
OBJECT:'[',(42,05)
|
||||
OBJECT:'[',(43,05)
|
||||
OBJECT:'[',(40,06)
|
||||
OBJECT:'[',(41,06)
|
||||
OBJECT:'[',(42,06)
|
||||
OBJECT:'[',(43,06)
|
||||
#
|
||||
OBJECT:')',random,(27,13)
|
||||
OBJECT:')',random,(28,13)
|
||||
OBJECT:')',random,(29,13)
|
||||
OBJECT:')',random,(30,13)
|
||||
OBJECT:')',random,(27,14)
|
||||
OBJECT:')',random,(28,14)
|
||||
OBJECT:')',random,(29,14)
|
||||
OBJECT:')',random,(30,14)
|
||||
OBJECT:')',(27,13)
|
||||
OBJECT:')',(28,13)
|
||||
OBJECT:')',(29,13)
|
||||
OBJECT:')',(30,13)
|
||||
OBJECT:')',(27,14)
|
||||
OBJECT:')',(28,14)
|
||||
OBJECT:')',(29,14)
|
||||
OBJECT:')',(30,14)
|
||||
#
|
||||
OBJECT:'(',random,(37,13)
|
||||
OBJECT:'(',random,(38,13)
|
||||
OBJECT:'(',random,(39,13)
|
||||
OBJECT:'(',random,(40,13)
|
||||
OBJECT:'(',random,(37,14)
|
||||
OBJECT:'(',random,(38,14)
|
||||
OBJECT:'(',random,(39,14)
|
||||
OBJECT:'(',random,(40,14)
|
||||
OBJECT:'(',(37,13)
|
||||
OBJECT:'(',(38,13)
|
||||
OBJECT:'(',(39,13)
|
||||
OBJECT:'(',(40,13)
|
||||
OBJECT:'(',(37,14)
|
||||
OBJECT:'(',(38,14)
|
||||
OBJECT:'(',(39,14)
|
||||
OBJECT:'(',(40,14)
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -198,40 +198,40 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'@',"ninja",(15,05),hostile
|
||||
MONSTER:'@',"ninja",(16,05),hostile
|
||||
MONSTER:'d',"wolf",(17,05)
|
||||
MONSTER:'d',"wolf",(18,05)
|
||||
MONSTER:'@',"ninja",(19,05),hostile
|
||||
MONSTER:'d',"wolf",(15,14)
|
||||
MONSTER:'d',"wolf",(16,14)
|
||||
MONSTER:'@',"ninja",(17,14),hostile
|
||||
MONSTER:'@',"ninja",(18,14),hostile
|
||||
MONSTER:'d',"wolf",(56,05)
|
||||
MONSTER:'@',"ninja",(57,05),hostile
|
||||
MONSTER:'d',"wolf",(58,05)
|
||||
MONSTER:'d',"wolf",(59,05)
|
||||
MONSTER:'@',"ninja",(56,14),hostile
|
||||
MONSTER:'d',"wolf",(57,14)
|
||||
MONSTER:'@',"ninja",(58,14),hostile
|
||||
MONSTER:'d',random,(59,14)
|
||||
MONSTER:'d',"wolf",(60,14)
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:('@',"ninja"),(15,05),hostile
|
||||
MONSTER:('@',"ninja"),(16,05),hostile
|
||||
MONSTER:('d',"wolf"),(17,05)
|
||||
MONSTER:('d',"wolf"),(18,05)
|
||||
MONSTER:('@',"ninja"),(19,05),hostile
|
||||
MONSTER:('d',"wolf"),(15,14)
|
||||
MONSTER:('d',"wolf"),(16,14)
|
||||
MONSTER:('@',"ninja"),(17,14),hostile
|
||||
MONSTER:('@',"ninja"),(18,14),hostile
|
||||
MONSTER:('d',"wolf"),(56,05)
|
||||
MONSTER:('@',"ninja"),(57,05),hostile
|
||||
MONSTER:('d',"wolf"),(58,05)
|
||||
MONSTER:('d',"wolf"),(59,05)
|
||||
MONSTER:('@',"ninja"),(56,14),hostile
|
||||
MONSTER:('d',"wolf"),(57,14)
|
||||
MONSTER:('@',"ninja"),(58,14),hostile
|
||||
MONSTER:'d',(59,14)
|
||||
MONSTER:('d',"wolf"),(60,14)
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
# "guards" for the central courtyard.
|
||||
MONSTER:'@',"samurai",(30,05),hostile
|
||||
MONSTER:'@',"samurai",(31,05),hostile
|
||||
MONSTER:'@',"samurai",(32,05),hostile
|
||||
MONSTER:'@',"samurai",(32,14),hostile
|
||||
MONSTER:'@',"samurai",(33,14),hostile
|
||||
MONSTER:'@',"samurai",(34,14),hostile
|
||||
MONSTER:('@',"samurai"),(30,05),hostile
|
||||
MONSTER:('@',"samurai"),(31,05),hostile
|
||||
MONSTER:('@',"samurai"),(32,05),hostile
|
||||
MONSTER:('@',"samurai"),(32,14),hostile
|
||||
MONSTER:('@',"samurai"),(33,14),hostile
|
||||
MONSTER:('@',"samurai"),(34,14),hostile
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -267,7 +267,9 @@ MAP
|
||||
.......................
|
||||
ENDMAP
|
||||
# Dungeon Description
|
||||
RANDOM_PLACES:(02,11),(42,09)
|
||||
$place = { (02,11),(42,09) }
|
||||
SHUFFLE: $place
|
||||
|
||||
REGION:(00,00,44,19),unlit,"ordinary"
|
||||
# Doors
|
||||
DOOR:closed,(19,10)
|
||||
@@ -275,25 +277,25 @@ DOOR:closed,(22,08)
|
||||
DOOR:closed,(22,12)
|
||||
DOOR:closed,(25,10)
|
||||
# Stairs
|
||||
STAIR:place[0],up
|
||||
STAIR:$place[0],up
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,44,19)
|
||||
# Objects
|
||||
OBJECT:')',"tsurugi",(22,10),blessed,0,"The Tsurugi of Muramasa"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:(')',"tsurugi"),(22,10),blessed,0,name:"The Tsurugi of Muramasa"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
#
|
||||
TRAP:"board",(22,09)
|
||||
TRAP:"board",(24,10)
|
||||
@@ -306,32 +308,32 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'@',"Ashikaga Takauji",(22,10)
|
||||
MONSTER:'@',"samurai",random,hostile
|
||||
MONSTER:'@',"samurai",random,hostile
|
||||
MONSTER:'@',"samurai",random,hostile
|
||||
MONSTER:'@',"samurai",random,hostile
|
||||
MONSTER:'@',"samurai",random,hostile
|
||||
MONSTER:'@',"ninja",random,hostile
|
||||
MONSTER:'@',"ninja",random,hostile
|
||||
MONSTER:'@',"ninja",random,hostile
|
||||
MONSTER:'@',"ninja",random,hostile
|
||||
MONSTER:'@',"ninja",random,hostile
|
||||
MONSTER:'d',"wolf",random
|
||||
MONSTER:'d',"wolf",random
|
||||
MONSTER:'d',"wolf",random
|
||||
MONSTER:'d',"wolf",random
|
||||
MONSTER:'d',random,random
|
||||
MONSTER:'d',random,random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:'E',"stalker",random
|
||||
MONSTER:('@',"Ashikaga Takauji"),(22,10)
|
||||
MONSTER:('@',"samurai"),random,hostile
|
||||
MONSTER:('@',"samurai"),random,hostile
|
||||
MONSTER:('@',"samurai"),random,hostile
|
||||
MONSTER:('@',"samurai"),random,hostile
|
||||
MONSTER:('@',"samurai"),random,hostile
|
||||
MONSTER:('@',"ninja"),random,hostile
|
||||
MONSTER:('@',"ninja"),random,hostile
|
||||
MONSTER:('@',"ninja"),random,hostile
|
||||
MONSTER:('@',"ninja"),random,hostile
|
||||
MONSTER:('@',"ninja"),random,hostile
|
||||
MONSTER:('d',"wolf"),random
|
||||
MONSTER:('d',"wolf"),random
|
||||
MONSTER:('d',"wolf"),random
|
||||
MONSTER:('d',"wolf"),random
|
||||
MONSTER:'d',random
|
||||
MONSTER:'d',random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
MONSTER:('E',"stalker"),random
|
||||
|
||||
|
||||
#
|
||||
@@ -344,29 +346,29 @@ MONSTER:'E',"stalker",random
|
||||
#
|
||||
|
||||
MAZE: "Sam-fila", ' '
|
||||
INIT_MAP: '.' , 'P', true, true, random, true
|
||||
INIT_MAP: mines, '.' , 'P', true, true, random, true
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
MONSTER: 'd', random, random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'E', "stalker", random
|
||||
MONSTER: 'd', random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('E', "stalker"), random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
@@ -403,24 +405,24 @@ DOOR:closed,(43,08)
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
MONSTER: 'd', random, random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'd', "wolf", random
|
||||
MONSTER: 'E', "stalker", random
|
||||
MONSTER: 'E', "stalker", random
|
||||
MONSTER: 'E', "stalker", random
|
||||
MONSTER: 'd', random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('d', "wolf"), random
|
||||
MONSTER: ('E', "stalker"), random
|
||||
MONSTER: ('E', "stalker"), random
|
||||
MONSTER: ('E', "stalker"), random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
|
||||
328
dat/Tourist.des
328
dat/Tourist.des
@@ -72,54 +72,54 @@ DOOR:open,(16,17)
|
||||
DOOR:locked,(35,07)
|
||||
DOOR:locked,(36,07)
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',"giant spider",random
|
||||
MONSTER: 's',random,random
|
||||
MONSTER: 's',random,random
|
||||
MONSTER: 'C',"forest centaur",random
|
||||
MONSTER: 'C',"forest centaur",random
|
||||
MONSTER: 'C',"forest centaur",random
|
||||
MONSTER: 'C',"forest centaur",random
|
||||
MONSTER: 'C',"forest centaur",random
|
||||
MONSTER: 'C',"forest centaur",random
|
||||
MONSTER: 'C',"forest centaur",random
|
||||
MONSTER: 'C',"forest centaur",random
|
||||
MONSTER: 'C',random,random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: ('s',"giant spider"),random
|
||||
MONSTER: 's',random
|
||||
MONSTER: 's',random
|
||||
MONSTER: ('C',"forest centaur"),random
|
||||
MONSTER: ('C',"forest centaur"),random
|
||||
MONSTER: ('C',"forest centaur"),random
|
||||
MONSTER: ('C',"forest centaur"),random
|
||||
MONSTER: ('C',"forest centaur"),random
|
||||
MONSTER: ('C',"forest centaur"),random
|
||||
MONSTER: ('C',"forest centaur"),random
|
||||
MONSTER: ('C',"forest centaur"),random
|
||||
MONSTER: 'C',random
|
||||
# Twoflower
|
||||
MONSTER:'@',"Twoflower",(64,03)
|
||||
MONSTER:('@',"Twoflower"),(64,03)
|
||||
# The treasure of Twoflower
|
||||
OBJECT:'(',"chest",(64,03)
|
||||
OBJECT:('(',"chest"),(64,03)
|
||||
# guides for the audience chamber
|
||||
MONSTER:'@',"guide",(29,03)
|
||||
MONSTER:'@',"guide",(32,04)
|
||||
MONSTER:'@',"guide",(35,02)
|
||||
MONSTER:'@',"guide",(38,03)
|
||||
MONSTER:'@',"guide",(45,03)
|
||||
MONSTER:'@',"guide",(48,02)
|
||||
MONSTER:'@',"guide",(49,04)
|
||||
MONSTER:'@',"guide",(51,03)
|
||||
MONSTER:'@',"guide",(57,03)
|
||||
MONSTER:'@',"guide",(62,04)
|
||||
MONSTER:'@',"guide",(66,04)
|
||||
MONSTER:('@',"guide"),(29,03)
|
||||
MONSTER:('@',"guide"),(32,04)
|
||||
MONSTER:('@',"guide"),(35,02)
|
||||
MONSTER:('@',"guide"),(38,03)
|
||||
MONSTER:('@',"guide"),(45,03)
|
||||
MONSTER:('@',"guide"),(48,02)
|
||||
MONSTER:('@',"guide"),(49,04)
|
||||
MONSTER:('@',"guide"),(51,03)
|
||||
MONSTER:('@',"guide"),(57,03)
|
||||
MONSTER:('@',"guide"),(62,04)
|
||||
MONSTER:('@',"guide"),(66,04)
|
||||
# path guards
|
||||
MONSTER:'@',"watchman",(35,08)
|
||||
MONSTER:'@',"watchman",(36,08)
|
||||
MONSTER:('@',"watchman"),(35,08)
|
||||
MONSTER:('@',"watchman"),(36,08)
|
||||
# river monsters
|
||||
MONSTER:';',"giant eel",(62,12)
|
||||
MONSTER:';',"piranha",(47,10)
|
||||
MONSTER:';',"piranha",(29,11)
|
||||
MONSTER:';',"kraken",(34,09)
|
||||
MONSTER:';',"kraken",(37,09)
|
||||
MONSTER:(';',"giant eel"),(62,12)
|
||||
MONSTER:(';',"piranha"),(47,10)
|
||||
MONSTER:(';',"piranha"),(29,11)
|
||||
MONSTER:(';',"kraken"),(34,09)
|
||||
MONSTER:(';',"kraken"),(37,09)
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -244,23 +244,23 @@ DOOR:closed,(60,16)
|
||||
DOOR:closed,(73,16)
|
||||
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Toilet paper
|
||||
OBJECT:'?',"blank paper",(71,12)
|
||||
OBJECT:'?',"blank paper",(71,12)
|
||||
OBJECT:('?',"blank paper"),(71,12)
|
||||
OBJECT:('?',"blank paper"),(71,12)
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -272,24 +272,24 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',random,random
|
||||
MONSTER:'s',random,random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:'s',random
|
||||
MONSTER:'s',random
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -386,21 +386,21 @@ DOOR:random,(51,15)
|
||||
DOOR:open,(59,14)
|
||||
DOOR:open,(59,17)
|
||||
# Objects
|
||||
OBJECT:'(',"credit card",(04,01),blessed,0,"The Platinum Yendorian Express Card"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('(',"credit card"),(04,01),blessed,0,name:"The Platinum Yendorian Express Card"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -409,47 +409,47 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'@',"Master of Thieves",(04,01),hostile
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',"giant spider",random
|
||||
MONSTER:'s',random,random
|
||||
MONSTER:'s',random,random
|
||||
MONSTER:('@',"Master of Thieves"),(04,01),hostile
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:('s',"giant spider"),random
|
||||
MONSTER:'s',random
|
||||
MONSTER:'s',random
|
||||
# ladies of the evening
|
||||
MONSTER:'&',"succubus",(02,08)
|
||||
MONSTER:'&',"succubus",(08,08)
|
||||
MONSTER:'&',"incubus",(02,14)
|
||||
MONSTER:'&',"incubus",(08,14)
|
||||
MONSTER:'&',"incubus",(02,17)
|
||||
MONSTER:'&',"incubus",(08,17)
|
||||
MONSTER:('&',"succubus"),(02,08)
|
||||
MONSTER:('&',"succubus"),(08,08)
|
||||
MONSTER:('&',"incubus"),(02,14)
|
||||
MONSTER:('&',"incubus"),(08,14)
|
||||
MONSTER:('&',"incubus"),(02,17)
|
||||
MONSTER:('&',"incubus"),(08,17)
|
||||
# Police station (with drunken prisoners)
|
||||
MONSTER:'K',"Kop Kaptain",(24,09),hostile
|
||||
MONSTER:'K',"Kop Lieutenant",(20,09),hostile
|
||||
MONSTER:'K',"Kop Lieutenant",(22,11),hostile
|
||||
MONSTER:'K',"Kop Lieutenant",(22,07),hostile
|
||||
MONSTER:'K',"Keystone Kop",(19,07),hostile
|
||||
MONSTER:'K',"Keystone Kop",(19,08),hostile
|
||||
MONSTER:'K',"Keystone Kop",(22,09),hostile
|
||||
MONSTER:'K',"Keystone Kop",(24,11),hostile
|
||||
MONSTER:'K',"Keystone Kop",(19,11),hostile
|
||||
MONSTER:'@',"prisoner",(19,13)
|
||||
MONSTER:'@',"prisoner",(21,13)
|
||||
MONSTER:'@',"prisoner",(24,13)
|
||||
MONSTER:('K',"Kop Kaptain"),(24,09),hostile
|
||||
MONSTER:('K',"Kop Lieutenant"),(20,09),hostile
|
||||
MONSTER:('K',"Kop Lieutenant"),(22,11),hostile
|
||||
MONSTER:('K',"Kop Lieutenant"),(22,07),hostile
|
||||
MONSTER:('K',"Keystone Kop"),(19,07),hostile
|
||||
MONSTER:('K',"Keystone Kop"),(19,08),hostile
|
||||
MONSTER:('K',"Keystone Kop"),(22,09),hostile
|
||||
MONSTER:('K',"Keystone Kop"),(24,11),hostile
|
||||
MONSTER:('K',"Keystone Kop"),(19,11),hostile
|
||||
MONSTER:('@',"prisoner"),(19,13)
|
||||
MONSTER:('@',"prisoner"),(21,13)
|
||||
MONSTER:('@',"prisoner"),(24,13)
|
||||
#
|
||||
MONSTER:'@',"watchman",(33,10),hostile
|
||||
MONSTER:('@',"watchman"),(33,10),hostile
|
||||
|
||||
WALLIFY
|
||||
|
||||
@@ -461,61 +461,61 @@ WALLIFY
|
||||
#
|
||||
|
||||
MAZE: "Tou-fila" , ' '
|
||||
INIT_MAP: '.' , ' ', true, true, random, true
|
||||
INIT_MAP: mines, '.' , ' ', true, true, random, true
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
#
|
||||
MONSTER: '@', "soldier", random, hostile
|
||||
MONSTER: '@', "soldier", random, hostile
|
||||
MONSTER: '@', "soldier", random, hostile
|
||||
MONSTER: '@', "soldier", random, hostile
|
||||
MONSTER: '@', "soldier", random, hostile
|
||||
MONSTER: 'H', random, random, hostile
|
||||
MONSTER: 'C', random, random, hostile
|
||||
MONSTER: ('@', "soldier"), random, hostile
|
||||
MONSTER: ('@', "soldier"), random, hostile
|
||||
MONSTER: ('@', "soldier"), random, hostile
|
||||
MONSTER: ('@', "soldier"), random, hostile
|
||||
MONSTER: ('@', "soldier"), random, hostile
|
||||
MONSTER: 'H', random, hostile
|
||||
MONSTER: 'C', random, hostile
|
||||
|
||||
MAZE: "Tou-filb" , ' '
|
||||
INIT_MAP: '.' , ' ', true, true, random, true
|
||||
INIT_MAP: mines, '.' , ' ', true, true, random, true
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
#
|
||||
MONSTER: '@', "soldier", random, hostile
|
||||
MONSTER: '@', "captain", random, hostile
|
||||
MONSTER: '@', "captain", random, hostile
|
||||
MONSTER: 'H', random, random, hostile
|
||||
MONSTER: 'H', random, random, hostile
|
||||
MONSTER: 'C', random, random, hostile
|
||||
MONSTER: 's', random, random
|
||||
MONSTER: ('@', "soldier"), random, hostile
|
||||
MONSTER: ('@', "captain"), random, hostile
|
||||
MONSTER: ('@', "captain"), random, hostile
|
||||
MONSTER: 'H', random, hostile
|
||||
MONSTER: 'H', random, hostile
|
||||
MONSTER: 'C', random, hostile
|
||||
MONSTER: 's', random
|
||||
|
||||
282
dat/Valkyrie.des
282
dat/Valkyrie.des
@@ -11,8 +11,7 @@
|
||||
# and receive your quest assignment.
|
||||
#
|
||||
MAZE: "Val-strt",' '
|
||||
FLAGS: noteleport,hardfloor
|
||||
INIT_MAP: '.', 'I', true, true, lit, false, true
|
||||
FLAGS: noteleport,hardfloor,icedpools
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
IIIIIIPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
|
||||
@@ -48,18 +47,18 @@ FOUNTAIN:(53,02)
|
||||
DOOR:locked,(26,10)
|
||||
DOOR:locked,(43,10)
|
||||
# Norn
|
||||
MONSTER:'@',"Norn",(35,10)
|
||||
MONSTER:('@',"Norn"),(35,10)
|
||||
# The treasure of the Norn
|
||||
OBJECT:'(',"chest",(36,10)
|
||||
OBJECT:('(',"chest"),(36,10)
|
||||
# valkyrie guards for the audience chamber
|
||||
MONSTER:'@',"warrior",(27,08)
|
||||
MONSTER:'@',"warrior",(27,09)
|
||||
MONSTER:'@',"warrior",(27,11)
|
||||
MONSTER:'@',"warrior",(27,12)
|
||||
MONSTER:'@',"warrior",(42,08)
|
||||
MONSTER:'@',"warrior",(42,09)
|
||||
MONSTER:'@',"warrior",(42,11)
|
||||
MONSTER:'@',"warrior",(42,12)
|
||||
MONSTER:('@',"warrior"),(27,08)
|
||||
MONSTER:('@',"warrior"),(27,09)
|
||||
MONSTER:('@',"warrior"),(27,11)
|
||||
MONSTER:('@',"warrior"),(27,12)
|
||||
MONSTER:('@',"warrior"),(42,08)
|
||||
MONSTER:('@',"warrior"),(42,09)
|
||||
MONSTER:('@',"warrior"),(42,11)
|
||||
MONSTER:('@',"warrior"),(42,12)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(26,07,43,13)
|
||||
# Random traps
|
||||
@@ -70,18 +69,18 @@ TRAP:"fire",random
|
||||
TRAP:"fire",random
|
||||
TRAP:"fire",random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 'a',"fire ant",(04,12)
|
||||
MONSTER: 'a',"fire ant",(08,08)
|
||||
MONSTER: 'a',"fire ant",(14,04)
|
||||
MONSTER: 'a',"fire ant",(17,11)
|
||||
MONSTER: 'a',"fire ant",(24,10)
|
||||
MONSTER: 'a',"fire ant",(45,10)
|
||||
MONSTER: 'a',"fire ant",(54,02)
|
||||
MONSTER: 'a',"fire ant",(55,07)
|
||||
MONSTER: 'a',"fire ant",(58,14)
|
||||
MONSTER: 'a',"fire ant",(63,17)
|
||||
MONSTER: 'H',"fire giant",(18,01),hostile
|
||||
MONSTER: 'H',"fire giant",(10,16),hostile
|
||||
MONSTER: ('a',"fire ant"),(04,12)
|
||||
MONSTER: ('a',"fire ant"),(08,08)
|
||||
MONSTER: ('a',"fire ant"),(14,04)
|
||||
MONSTER: ('a',"fire ant"),(17,11)
|
||||
MONSTER: ('a',"fire ant"),(24,10)
|
||||
MONSTER: ('a',"fire ant"),(45,10)
|
||||
MONSTER: ('a',"fire ant"),(54,02)
|
||||
MONSTER: ('a',"fire ant"),(55,07)
|
||||
MONSTER: ('a',"fire ant"),(58,14)
|
||||
MONSTER: ('a',"fire ant"),(63,17)
|
||||
MONSTER: ('H',"fire giant"),(18,01),hostile
|
||||
MONSTER: ('H',"fire giant"),(10,16),hostile
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -91,8 +90,8 @@ MONSTER: 'H',"fire giant",(10,16),hostile
|
||||
#
|
||||
|
||||
MAZE: "Val-loca",' '
|
||||
FLAGS: hardfloor
|
||||
INIT_MAP: '.', 'I', true, true, lit, false, true
|
||||
FLAGS: hardfloor,icedpools
|
||||
INIT_MAP: mines, '.', 'I', true, true, lit, false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
PPPP.... ....PPPPP.
|
||||
@@ -117,21 +116,21 @@ STAIR:(20,06),down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,39,12)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:"fire",random
|
||||
TRAP:"fire",random
|
||||
@@ -140,33 +139,33 @@ TRAP:"fire",random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',random,random
|
||||
MONSTER:'H',random,random,hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',random,random,hostile
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:'a',random
|
||||
MONSTER:'H',random,hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:'H',random,hostile
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -177,7 +176,8 @@ MONSTER:'H',random,random,hostile
|
||||
#
|
||||
|
||||
MAZE: "Val-goal", 'L'
|
||||
INIT_MAP: '.', 'L', true, true, lit, false, true
|
||||
FLAGS: icedpools
|
||||
INIT_MAP: mines, '.', 'L', true, true, lit, false
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
.L............................LLLLL
|
||||
@@ -209,21 +209,21 @@ NON_DIGGABLE:(00,00,34,16)
|
||||
DRAWBRIDGE:(17,02),south,random
|
||||
DRAWBRIDGE:(17,14),north,open
|
||||
# Objects
|
||||
OBJECT:'(',"crystal ball",(17,08),blessed,5,"The Orb of Fate"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('(',"crystal ball"),(17,08),blessed,5,name:"The Orb of Fate"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Traps
|
||||
TRAP:"board",(13,08)
|
||||
TRAP:"board",(21,08)
|
||||
@@ -236,26 +236,26 @@ TRAP:"board",random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'H',"Lord Surtur",(17,08)
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',"fire ant",random
|
||||
MONSTER:'a',random,random
|
||||
MONSTER:'a',random,random
|
||||
MONSTER:'H',"fire giant",(10,06),hostile
|
||||
MONSTER:'H',"fire giant",(10,07),hostile
|
||||
MONSTER:'H',"fire giant",(10,08),hostile
|
||||
MONSTER:'H',"fire giant",(10,09),hostile
|
||||
MONSTER:'H',"fire giant",(10,10),hostile
|
||||
MONSTER:'H',"fire giant",(24,06),hostile
|
||||
MONSTER:'H',"fire giant",(24,07),hostile
|
||||
MONSTER:'H',"fire giant",(24,08),hostile
|
||||
MONSTER:'H',"fire giant",(24,09),hostile
|
||||
MONSTER:'H',"fire giant",(24,10),hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',"fire giant",random,hostile
|
||||
MONSTER:'H',random,random,hostile
|
||||
MONSTER:('H',"Lord Surtur"),(17,08)
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:('a',"fire ant"),random
|
||||
MONSTER:'a',random
|
||||
MONSTER:'a',random
|
||||
MONSTER:('H',"fire giant"),(10,06),hostile
|
||||
MONSTER:('H',"fire giant"),(10,07),hostile
|
||||
MONSTER:('H',"fire giant"),(10,08),hostile
|
||||
MONSTER:('H',"fire giant"),(10,09),hostile
|
||||
MONSTER:('H',"fire giant"),(10,10),hostile
|
||||
MONSTER:('H',"fire giant"),(24,06),hostile
|
||||
MONSTER:('H',"fire giant"),(24,07),hostile
|
||||
MONSTER:('H',"fire giant"),(24,08),hostile
|
||||
MONSTER:('H',"fire giant"),(24,09),hostile
|
||||
MONSTER:('H',"fire giant"),(24,10),hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:('H',"fire giant"),random,hostile
|
||||
MONSTER:'H',random,hostile
|
||||
|
||||
#
|
||||
# The "fill" levels for the quest.
|
||||
@@ -267,29 +267,30 @@ MONSTER:'H',random,random,hostile
|
||||
#
|
||||
|
||||
MAZE: "Val-fila" , 'I'
|
||||
INIT_MAP: '.', 'I', true, true, lit, false, true
|
||||
FLAGS: icedpools
|
||||
INIT_MAP: mines, '.', 'I', true, true, lit, false
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
MONSTER: 'a', "fire ant", random
|
||||
MONSTER: 'a', "fire ant", random
|
||||
MONSTER: 'a', "fire ant", random
|
||||
MONSTER: 'a', "fire ant", random
|
||||
MONSTER: 'a', "fire ant", random
|
||||
MONSTER: 'a', random, random
|
||||
MONSTER: 'H', "fire giant", random, hostile
|
||||
MONSTER: ('a', "fire ant"), random
|
||||
MONSTER: ('a', "fire ant"), random
|
||||
MONSTER: ('a', "fire ant"), random
|
||||
MONSTER: ('a', "fire ant"), random
|
||||
MONSTER: ('a', "fire ant"), random
|
||||
MONSTER: 'a', random
|
||||
MONSTER: ('H', "fire giant"), random, hostile
|
||||
#
|
||||
TRAP: random, random
|
||||
TRAP: random, random
|
||||
@@ -300,31 +301,32 @@ TRAP: random, random
|
||||
TRAP: random, random
|
||||
|
||||
MAZE: "Val-filb" , 'L'
|
||||
INIT_MAP: '.', 'L', true, true, lit, false, true
|
||||
FLAGS: icedpools
|
||||
INIT_MAP: mines, '.', 'L', true, true, lit, false
|
||||
NOMAP
|
||||
#
|
||||
STAIR: random, up
|
||||
STAIR: random, down
|
||||
#
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
#
|
||||
MONSTER: 'a', "fire ant", random
|
||||
MONSTER: 'a', "fire ant", random
|
||||
MONSTER: 'a', "fire ant", random
|
||||
MONSTER: 'a', random, random
|
||||
MONSTER: 'H', "fire giant", random, hostile
|
||||
MONSTER: 'H', "fire giant", random, hostile
|
||||
MONSTER: 'H', "fire giant", random, hostile
|
||||
MONSTER: ('a', "fire ant"), random
|
||||
MONSTER: ('a', "fire ant"), random
|
||||
MONSTER: ('a', "fire ant"), random
|
||||
MONSTER: 'a', random
|
||||
MONSTER: ('H', "fire giant"), random, hostile
|
||||
MONSTER: ('H', "fire giant"), random, hostile
|
||||
MONSTER: ('H', "fire giant"), random, hostile
|
||||
#
|
||||
TRAP: "fire", random
|
||||
TRAP: "fire", random
|
||||
|
||||
370
dat/Wizard.des
370
dat/Wizard.des
@@ -38,7 +38,7 @@ ENDMAP
|
||||
REGION:(00,00,75,19),lit,"ordinary"
|
||||
REGION:(35,00,49,03),unlit,"ordinary"
|
||||
REGION:(43,12,49,16),unlit,"ordinary"
|
||||
REGION:(19,11,33,15),unlit,"ordinary",unfilled,true
|
||||
REGION:(19,11,33,15),unlit,"ordinary",unfilled,irregular
|
||||
REGION:(30,10,31,10),unlit,"ordinary"
|
||||
# Stairs
|
||||
STAIR:(30,10),down
|
||||
@@ -54,22 +54,22 @@ DOOR:closed,(15,10)
|
||||
DOOR:locked,(19,10)
|
||||
DOOR:locked,(20,10)
|
||||
# Neferet the Green, the quest leader
|
||||
MONSTER:'@',"Neferet the Green",(23,05)
|
||||
MONSTER:('@',"Neferet the Green"),(23,05)
|
||||
# The treasure of the quest leader
|
||||
OBJECT:'(',"chest",(24,05)
|
||||
OBJECT:('(',"chest"),(24,05)
|
||||
# apprentice guards for the audience chamber
|
||||
MONSTER:'@',"apprentice",(30,07)
|
||||
MONSTER:'@',"apprentice",(24,06)
|
||||
MONSTER:'@',"apprentice",(15,06)
|
||||
MONSTER:'@',"apprentice",(15,12)
|
||||
MONSTER:'@',"apprentice",(26,11)
|
||||
MONSTER:'@',"apprentice",(27,11)
|
||||
MONSTER:'@',"apprentice",(19,09)
|
||||
MONSTER:'@',"apprentice",(20,09)
|
||||
MONSTER:('@',"apprentice"),(30,07)
|
||||
MONSTER:('@',"apprentice"),(24,06)
|
||||
MONSTER:('@',"apprentice"),(15,06)
|
||||
MONSTER:('@',"apprentice"),(15,12)
|
||||
MONSTER:('@',"apprentice"),(26,11)
|
||||
MONSTER:('@',"apprentice"),(27,11)
|
||||
MONSTER:('@',"apprentice"),(19,09)
|
||||
MONSTER:('@',"apprentice"),(20,09)
|
||||
# Eels in the pond
|
||||
MONSTER:';',"giant eel",(62,14)
|
||||
MONSTER:';',"giant eel",(69,15)
|
||||
MONSTER:';',"giant eel",(67,17)
|
||||
MONSTER:(';',"giant eel"),(62,14)
|
||||
MONSTER:(';',"giant eel"),(69,15)
|
||||
MONSTER:(';',"giant eel"),(67,17)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Random traps
|
||||
@@ -80,21 +80,21 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters on siege duty.
|
||||
MONSTER: 'B',random,(60,09),hostile
|
||||
MONSTER: 'W',random,(60,10),hostile
|
||||
MONSTER: 'B',random,(60,11),hostile
|
||||
MONSTER: 'B',random,(60,12),hostile
|
||||
MONSTER: 'i',random,(60,13),hostile
|
||||
MONSTER: 'B',random,(61,10),hostile
|
||||
MONSTER: 'B',random,(61,11),hostile
|
||||
MONSTER: 'B',random,(61,12),hostile
|
||||
MONSTER: 'B',random,(35,03),hostile
|
||||
MONSTER: 'i',random,(35,17),hostile
|
||||
MONSTER: 'B',random,(36,17),hostile
|
||||
MONSTER: 'B',random,(34,16),hostile
|
||||
MONSTER: 'i',random,(34,17),hostile
|
||||
MONSTER: 'W',random,(67,02),hostile
|
||||
MONSTER: 'B',random,(10,19),hostile
|
||||
MONSTER: 'B',(60,09),hostile
|
||||
MONSTER: 'W',(60,10),hostile
|
||||
MONSTER: 'B',(60,11),hostile
|
||||
MONSTER: 'B',(60,12),hostile
|
||||
MONSTER: 'i',(60,13),hostile
|
||||
MONSTER: 'B',(61,10),hostile
|
||||
MONSTER: 'B',(61,11),hostile
|
||||
MONSTER: 'B',(61,12),hostile
|
||||
MONSTER: 'B',(35,03),hostile
|
||||
MONSTER: 'i',(35,17),hostile
|
||||
MONSTER: 'B',(36,17),hostile
|
||||
MONSTER: 'B',(34,16),hostile
|
||||
MONSTER: 'i',(34,17),hostile
|
||||
MONSTER: 'W',(67,02),hostile
|
||||
MONSTER: 'B',(10,19),hostile
|
||||
|
||||
#
|
||||
# The "locate" level for the quest.
|
||||
@@ -153,21 +153,21 @@ STAIR:(48,10),down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,20)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:"spiked pit",(24,02)
|
||||
TRAP:"spiked pit",(07,10)
|
||||
@@ -191,33 +191,33 @@ TRAP:"dart",random
|
||||
TRAP:"dart",random
|
||||
TRAP:"dart",random
|
||||
# Random monsters.
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:'i',random,hostile
|
||||
|
||||
#
|
||||
# The "goal" level for the quest.
|
||||
@@ -293,21 +293,21 @@ NON_DIGGABLE:(00,00,75,19)
|
||||
# The altar. This is not a shrine.
|
||||
ALTAR:(16,11),noncoaligned,altar
|
||||
# Objects
|
||||
OBJECT:'"',"amulet of ESP",(16,11),blessed,0,"The Eye of the Aethiopica"
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:('"',"amulet of ESP"),(16,11),blessed,0,name:"The Eye of the Aethiopica"
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -316,43 +316,43 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:'@',"Dark One",(16,11)
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'B',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'i',random,random,hostile
|
||||
MONSTER:('@',"Dark One"),(16,11)
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'B',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:'i',random,hostile
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:'i',random,hostile
|
||||
# Captive Monsters in the dungeon
|
||||
MONSTER:'@',"rogue",(35,06),peaceful,"Pug"
|
||||
MONSTER:'Y',"owlbear",(47,06),peaceful,asleep
|
||||
MONSTER:'@',"wizard",(32,11),peaceful,asleep,"Newt"
|
||||
MONSTER:'@',"Grey-elf",(44,11),peaceful
|
||||
MONSTER:'H',"hill giant",(47,11),peaceful,asleep
|
||||
MONSTER:'G',"gnomish wizard",(38,06),peaceful
|
||||
MONSTER:'@',"prisoner",(35,11),peaceful
|
||||
MONSTER:'@',"prisoner",(41,11),peaceful,asleep
|
||||
MONSTER:('@',"rogue"),(35,06),peaceful,"Pug"
|
||||
MONSTER:('Y',"owlbear"),(47,06),peaceful,asleep
|
||||
MONSTER:('@',"wizard"),(32,11),peaceful,asleep,"Newt"
|
||||
MONSTER:('@',"Grey-elf"),(44,11),peaceful
|
||||
MONSTER:('H',"hill giant"),(47,11),peaceful,asleep
|
||||
MONSTER:('G',"gnomish wizard"),(38,06),peaceful
|
||||
MONSTER:('@',"prisoner"),(35,11),peaceful
|
||||
MONSTER:('@',"prisoner"),(41,11),peaceful,asleep
|
||||
|
||||
#
|
||||
# The "fill" levels for the quest.
|
||||
@@ -365,77 +365,89 @@ MONSTER:'@',"prisoner",(41,11),peaceful,asleep
|
||||
|
||||
LEVEL: "Wiz-fila"
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'i', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: 'i', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'i', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'i', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'B', "vampire bat", random
|
||||
MONSTER: 'B', "vampire bat", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: ('B', "vampire bat"), random
|
||||
MONSTER: ('B', "vampire bat"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'i', random, random, hostile
|
||||
MONSTER: 'B', "vampire bat", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'i', random, hostile
|
||||
MONSTER: ('B', "vampire bat"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'i', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'i', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'B', "vampire bat", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('B', "vampire bat"), random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
LEVEL: "Wiz-filb"
|
||||
#
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'X', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
MONSTER: 'X', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'i', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'i', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random,random
|
||||
MONSTER: 'X', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
OBJECT: random,random
|
||||
MONSTER: 'X', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'i', random, random, hostile
|
||||
MONSTER: 'B', "vampire bat", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'i', random, hostile
|
||||
MONSTER: ('B', "vampire bat"), random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'i', random, random, hostile
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'i', random, hostile
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: 'B', "vampire bat", random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: ('B', "vampire bat"), random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
430
dat/bigroom.des
430
dat/bigroom.des
@@ -38,21 +38,21 @@ STAIR:random,down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,74,17)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -61,34 +61,34 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
|
||||
# Here, just play with the lighting...
|
||||
|
||||
@@ -130,21 +130,21 @@ STAIR:random,down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,74,17)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -153,34 +153,34 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
|
||||
# Now, let's get fancy...
|
||||
|
||||
@@ -214,21 +214,21 @@ STAIR:random,down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,74,17)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -237,34 +237,34 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:random,random,(01,01)
|
||||
MONSTER:random,random,(13,01)
|
||||
MONSTER:random,random,(25,01)
|
||||
MONSTER:random,random,(37,01)
|
||||
MONSTER:random,random,(49,01)
|
||||
MONSTER:random,random,(61,01)
|
||||
MONSTER:random,random,(73,01)
|
||||
MONSTER:random,random,(07,07)
|
||||
MONSTER:random,random,(13,07)
|
||||
MONSTER:random,random,(25,07)
|
||||
MONSTER:random,random,(37,07)
|
||||
MONSTER:random,random,(49,07)
|
||||
MONSTER:random,random,(61,07)
|
||||
MONSTER:random,random,(67,07)
|
||||
MONSTER:random,random,(07,09)
|
||||
MONSTER:random,random,(13,09)
|
||||
MONSTER:random,random,(25,09)
|
||||
MONSTER:random,random,(37,09)
|
||||
MONSTER:random,random,(49,09)
|
||||
MONSTER:random,random,(61,09)
|
||||
MONSTER:random,random,(67,09)
|
||||
MONSTER:random,random,(01,16)
|
||||
MONSTER:random,random,(13,16)
|
||||
MONSTER:random,random,(25,16)
|
||||
MONSTER:random,random,(37,16)
|
||||
MONSTER:random,random,(49,16)
|
||||
MONSTER:random,random,(61,16)
|
||||
MONSTER:random,random,(73,16)
|
||||
MONSTER:random,(01,01)
|
||||
MONSTER:random,(13,01)
|
||||
MONSTER:random,(25,01)
|
||||
MONSTER:random,(37,01)
|
||||
MONSTER:random,(49,01)
|
||||
MONSTER:random,(61,01)
|
||||
MONSTER:random,(73,01)
|
||||
MONSTER:random,(07,07)
|
||||
MONSTER:random,(13,07)
|
||||
MONSTER:random,(25,07)
|
||||
MONSTER:random,(37,07)
|
||||
MONSTER:random,(49,07)
|
||||
MONSTER:random,(61,07)
|
||||
MONSTER:random,(67,07)
|
||||
MONSTER:random,(07,09)
|
||||
MONSTER:random,(13,09)
|
||||
MONSTER:random,(25,09)
|
||||
MONSTER:random,(37,09)
|
||||
MONSTER:random,(49,09)
|
||||
MONSTER:random,(61,09)
|
||||
MONSTER:random,(67,09)
|
||||
MONSTER:random,(01,16)
|
||||
MONSTER:random,(13,16)
|
||||
MONSTER:random,(25,16)
|
||||
MONSTER:random,(37,16)
|
||||
MONSTER:random,(49,16)
|
||||
MONSTER:random,(61,16)
|
||||
MONSTER:random,(73,16)
|
||||
MAZE:"bigrm-4",' '
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
@@ -300,21 +300,21 @@ FOUNTAIN:(05,15)
|
||||
FOUNTAIN:(69,02)
|
||||
FOUNTAIN:(69,15)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -323,34 +323,34 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
|
||||
# Try an oval room...
|
||||
|
||||
@@ -385,21 +385,21 @@ STAIR:random,down
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,72,18)
|
||||
# Objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -408,31 +408,31 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Random monsters.
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
|
||||
484
dat/bogusmon.txt
Normal file
484
dat/bogusmon.txt
Normal file
@@ -0,0 +1,484 @@
|
||||
# Hallucinatory monsters
|
||||
#
|
||||
#
|
||||
# prefix codes:
|
||||
# dash - female, personal name
|
||||
# underscore _ female, general name
|
||||
# plus + male, personal name
|
||||
# vertical bar | male, general name
|
||||
# equals = gender not specified, personal name
|
||||
|
||||
# misc.
|
||||
jumbo shrimp
|
||||
giant pigmy
|
||||
gnu
|
||||
killer penguin
|
||||
giant cockroach
|
||||
giant slug
|
||||
maggot
|
||||
pterodactyl
|
||||
tyrannosaurus rex
|
||||
basilisk
|
||||
beholder
|
||||
nightmare
|
||||
efreeti
|
||||
marid
|
||||
rot grub
|
||||
bookworm
|
||||
master lichen
|
||||
shadow
|
||||
hologram
|
||||
jester
|
||||
attorney
|
||||
sleazoid
|
||||
killer tomato
|
||||
amazon
|
||||
robot
|
||||
battlemech
|
||||
rhinovirus
|
||||
harpy
|
||||
lion-dog
|
||||
rat-ant
|
||||
Y2K bug
|
||||
angry mariachi
|
||||
arch-pedant
|
||||
bluebird of happiness
|
||||
cardboard golem
|
||||
duct tape golem
|
||||
diagonally moving grid bug
|
||||
evil overlord
|
||||
newsgroup troll
|
||||
ninja pirate zombie robot
|
||||
octarine dragon
|
||||
gonzo journalist
|
||||
lag monster
|
||||
loan shark
|
||||
possessed waffle iron
|
||||
poultrygeist
|
||||
stuffed raccoon puppet
|
||||
viking
|
||||
wee green blobbie
|
||||
wereplatypus
|
||||
hag of bolding
|
||||
blancmange
|
||||
raging nerd
|
||||
spelling bee
|
||||
land octopus
|
||||
frog prince
|
||||
pigasus
|
||||
_Semigorgon
|
||||
conventioneer
|
||||
large microbat
|
||||
small megabat
|
||||
uberhulk
|
||||
tofurkey
|
||||
+Dudley
|
||||
|
||||
# Quendor (Zork, &c.)
|
||||
grue
|
||||
Christmas-tree monster
|
||||
luck sucker
|
||||
paskald
|
||||
brogmoid
|
||||
dornbeast
|
||||
|
||||
# Moria
|
||||
Ancient Multi-Hued Dragon
|
||||
+Evil Iggy
|
||||
|
||||
# Rogue V5 http://rogue.rogueforge.net/vade-mecum/
|
||||
rattlesnake
|
||||
ice monster
|
||||
phantom
|
||||
quagga
|
||||
aquator
|
||||
griffin
|
||||
emu
|
||||
kestrel
|
||||
xeroc
|
||||
venus flytrap
|
||||
|
||||
# Wizardry
|
||||
creeping coins
|
||||
|
||||
# Greek legend
|
||||
hydra
|
||||
siren
|
||||
|
||||
# Monty Python
|
||||
killer bunny
|
||||
|
||||
# The Princess Bride
|
||||
rodent of unusual size
|
||||
|
||||
# Wallace & Gromit
|
||||
were-rabbit
|
||||
|
||||
# "Only you can prevent forest fires!
|
||||
+Smokey Bear
|
||||
|
||||
# Discworld
|
||||
Luggage
|
||||
|
||||
# Lord of the Rings
|
||||
Ent
|
||||
|
||||
# Xanth
|
||||
tangle tree
|
||||
nickelpede
|
||||
wiggle
|
||||
|
||||
# Lewis Carroll
|
||||
white rabbit
|
||||
snark
|
||||
|
||||
# Dr. Dolittle
|
||||
pushmi-pullyu
|
||||
|
||||
# The Smurfs
|
||||
smurf
|
||||
|
||||
# Star Trek
|
||||
tribble
|
||||
Klingon
|
||||
Borg
|
||||
|
||||
# Star Wars
|
||||
Ewok
|
||||
|
||||
# Tonari no Totoro
|
||||
Totoro
|
||||
|
||||
# Nausicaa
|
||||
ohmu
|
||||
|
||||
# Sailor Moon
|
||||
youma
|
||||
|
||||
# Pokemon (Meowth)
|
||||
nyaasu
|
||||
|
||||
# monster movies
|
||||
-Godzilla
|
||||
+King Kong
|
||||
|
||||
# old L of SH
|
||||
earthquake beast
|
||||
|
||||
# Robotech
|
||||
Invid
|
||||
|
||||
# The Terminator
|
||||
Terminator
|
||||
|
||||
# Bubblegum Crisis
|
||||
boomer
|
||||
|
||||
# Dr. Who ("Exterminate!")
|
||||
Dalek
|
||||
|
||||
# HGttG
|
||||
microscopic space fleet
|
||||
Ravenous Bugblatter Beast of Traal
|
||||
|
||||
# TMNT
|
||||
teenage mutant ninja turtle
|
||||
|
||||
# Usagi Yojimbo
|
||||
samurai rabbit
|
||||
|
||||
# Cerebus
|
||||
aardvark
|
||||
|
||||
# Little Shop of Horrors
|
||||
=Audrey II
|
||||
|
||||
# 50's rock 'n' roll
|
||||
witch doctor
|
||||
one-eyed one-horned flying purple people eater
|
||||
|
||||
# saccharine kiddy TV
|
||||
+Barney the dinosaur
|
||||
|
||||
# Angband
|
||||
+Morgoth
|
||||
|
||||
# Babylon 5
|
||||
Vorlon
|
||||
|
||||
# King Arthur
|
||||
questing beast
|
||||
|
||||
# Movie
|
||||
Predator
|
||||
|
||||
# common pest
|
||||
mother-in-law
|
||||
|
||||
# Actual creatures
|
||||
praying mantis
|
||||
beluga whale
|
||||
chicken
|
||||
coelacanth
|
||||
star-nosed mole
|
||||
lungfish
|
||||
slow loris
|
||||
sea cucumber
|
||||
tapeworm
|
||||
liger
|
||||
velociraptor
|
||||
corpulent porpoise
|
||||
|
||||
# european cryptids
|
||||
wolpertinger
|
||||
elwedritsche
|
||||
skvader
|
||||
+Nessie
|
||||
tatzelwurm
|
||||
dahu
|
||||
|
||||
# fictitious beasts
|
||||
dropbear
|
||||
wild haggis
|
||||
jackalope
|
||||
flying pig
|
||||
hippocampus
|
||||
hippogriff
|
||||
kelpie
|
||||
catoblepas
|
||||
phoenix
|
||||
amphisbaena
|
||||
|
||||
# Unusually animate body parts
|
||||
bouncing eye
|
||||
floating nose
|
||||
wandering eye
|
||||
|
||||
# Computerese
|
||||
buffer overflow
|
||||
dangling pointer
|
||||
walking disk drive
|
||||
floating point
|
||||
regex engine
|
||||
netsplit
|
||||
wiki
|
||||
peer
|
||||
COBOL
|
||||
|
||||
# bugs
|
||||
bohrbug
|
||||
mandelbug
|
||||
schroedinbug
|
||||
heisenbug
|
||||
|
||||
# DooM
|
||||
cacodemon
|
||||
scrag
|
||||
|
||||
# MST3K
|
||||
+Crow T. Robot
|
||||
|
||||
# Items and stuff
|
||||
chess pawn
|
||||
chocolate pudding
|
||||
ooblecks
|
||||
terracotta warrior
|
||||
hearse
|
||||
roomba
|
||||
miniature blimp
|
||||
dust speck
|
||||
|
||||
# DnD monster
|
||||
gazebo
|
||||
|
||||
# SciFi elements
|
||||
gray goo
|
||||
magnetic monopole
|
||||
first category perpetual motion device
|
||||
|
||||
# Ultima
|
||||
+Lord British
|
||||
|
||||
# They Might Be Giants
|
||||
particle man
|
||||
|
||||
# Robot Finds Kitten
|
||||
kitten prospecting robot
|
||||
|
||||
# Typography
|
||||
guillemet
|
||||
solidus
|
||||
obelus
|
||||
|
||||
# Their actual character
|
||||
apostrophe golem
|
||||
voluptuous ampersand
|
||||
|
||||
# Web comics and animation
|
||||
+Bob the angry flower
|
||||
+Strong Bad
|
||||
+Magical Trevor
|
||||
|
||||
# KoL
|
||||
one-winged dewinged stab-bat
|
||||
|
||||
# deities
|
||||
Invisible Pink Unicorn
|
||||
Flying Spaghetti Monster
|
||||
|
||||
# Monkey Island
|
||||
three-headed monkey
|
||||
+El Pollo Diablo
|
||||
|
||||
# modern folklore
|
||||
little green man
|
||||
|
||||
# Portal
|
||||
weighted Companion Cube
|
||||
|
||||
# /b/
|
||||
/b/tard
|
||||
|
||||
# South Park
|
||||
manbearpig
|
||||
|
||||
# internet memes
|
||||
bonsai-kitten
|
||||
tie-thulu
|
||||
+Domo-kun
|
||||
looooooooooooong cat
|
||||
nyan cat
|
||||
|
||||
# the Internet is made for cat pix
|
||||
ceiling cat
|
||||
basement cat
|
||||
monorail cat
|
||||
|
||||
# POWDER
|
||||
tridude
|
||||
|
||||
# Radomir Dopieralski
|
||||
orcus cosmicus
|
||||
|
||||
# Angband
|
||||
yeek
|
||||
quylthulg
|
||||
Greater Hell Beast
|
||||
|
||||
# Souljazz
|
||||
+Vendor of Yizard
|
||||
|
||||
# Dungeon Crawl Stone Soup
|
||||
+Sigmund
|
||||
lernaean hydra
|
||||
+Ijyb
|
||||
+Gloorx Vloq
|
||||
+Blork the orc
|
||||
|
||||
# Wil Wheaton, John Scalzi
|
||||
unicorn pegasus kitten
|
||||
|
||||
# Minecraft
|
||||
enderman
|
||||
|
||||
# Pun
|
||||
wight supremacist
|
||||
|
||||
# Starcraft 2
|
||||
zergling
|
||||
|
||||
# Feelings
|
||||
existential angst
|
||||
figment of your imagination
|
||||
flash of insight
|
||||
|
||||
# Fish
|
||||
ghoti
|
||||
|
||||
# Roald Dahl
|
||||
vermicious knid
|
||||
|
||||
# Carcassonne
|
||||
meeple
|
||||
|
||||
# The Wombles
|
||||
womble
|
||||
|
||||
# Fraggle Rock
|
||||
fraggle
|
||||
|
||||
# soundex and typos of monsters
|
||||
gloating eye
|
||||
flush golem
|
||||
martyr orc
|
||||
mortar orc
|
||||
acid blog
|
||||
acute blob
|
||||
aria elemental
|
||||
aliasing priest
|
||||
aligned parasite
|
||||
aligned parquet
|
||||
aligned proctor
|
||||
baby balky dragon
|
||||
baby blues dragon
|
||||
baby caricature
|
||||
baby crochet
|
||||
baby grainy dragon
|
||||
baby bong worm
|
||||
baby long word
|
||||
baby parable worm
|
||||
barfed devil
|
||||
beer wight
|
||||
boor wight
|
||||
brawny mold
|
||||
rave spider
|
||||
clue golem
|
||||
bust vortex
|
||||
errata elemental
|
||||
elastic eel
|
||||
electrocardiogram eel
|
||||
fir elemental
|
||||
tire elemental
|
||||
flamingo sphere
|
||||
fallacy golem
|
||||
frizzed centaur
|
||||
forest centerfold
|
||||
fierceness sphere
|
||||
frosted giant
|
||||
geriatric snake
|
||||
gnat ant
|
||||
giant bath
|
||||
grant beetle
|
||||
grind bug
|
||||
giant mango
|
||||
glossy golem
|
||||
gnome laureate
|
||||
gnome dummy
|
||||
gooier ooze
|
||||
green slide
|
||||
guardian nacho
|
||||
hell hound pun
|
||||
high purist
|
||||
hairnet devil
|
||||
ice trowel
|
||||
killer beet
|
||||
feather golem
|
||||
lounge worm
|
||||
mountain lymph
|
||||
pager golem
|
||||
pie fiend
|
||||
prophylactic worm
|
||||
sock mole
|
||||
rogue piercer
|
||||
seesawing sphere
|
||||
simile mimic
|
||||
moldier ant
|
||||
stain vortex
|
||||
scone giant
|
||||
umbrella hulk
|
||||
vampire mace
|
||||
verbal jabberwock
|
||||
water lemon
|
||||
water melon
|
||||
winged grizzly
|
||||
yellow wight
|
||||
245
dat/castle.des
245
dat/castle.des
@@ -42,9 +42,15 @@ MAP
|
||||
ENDMAP
|
||||
|
||||
# Random registers initialisation
|
||||
RANDOM_OBJECTS:'[',')','*','%'
|
||||
RANDOM_PLACES:(04,02),(58,02),(04,14),(58,14)
|
||||
RANDOM_MONSTERS:'L','N','E','H','M','O','R','T','X','Z'
|
||||
$object = object: { '[',')','*','%' }
|
||||
SHUFFLE: $object
|
||||
|
||||
$place = { (04,02),(58,02),(04,14),(58,14) }
|
||||
SHUFFLE: $place
|
||||
|
||||
$monster = monster: { 'L','N','E','H','M','O','R','T','X','Z' }
|
||||
SHUFFLE: $monster
|
||||
|
||||
|
||||
TELEPORT_REGION:levregion(01,00,10,20),(1,1,61,15),down
|
||||
TELEPORT_REGION:levregion(69,00,79,20),(1,1,61,15),up
|
||||
@@ -72,72 +78,73 @@ DOOR:closed,(55,13)
|
||||
# The drawbridge
|
||||
DRAWBRIDGE:(05,08),east,closed
|
||||
# Storeroom number 1
|
||||
OBJECT:object[0],random,(39,05)
|
||||
OBJECT:object[0],random,(40,05)
|
||||
OBJECT:object[0],random,(41,05)
|
||||
OBJECT:object[0],random,(42,05)
|
||||
OBJECT:object[0],random,(43,05)
|
||||
OBJECT:object[0],random,(44,05)
|
||||
OBJECT:object[0],random,(45,05)
|
||||
OBJECT:object[0],random,(39,06)
|
||||
OBJECT:object[0],random,(40,06)
|
||||
OBJECT:object[0],random,(41,06)
|
||||
OBJECT:object[0],random,(42,06)
|
||||
OBJECT:object[0],random,(43,06)
|
||||
OBJECT:object[0],random,(44,06)
|
||||
OBJECT:object[0],random,(45,06)
|
||||
OBJECT:$object[0],(39,05)
|
||||
OBJECT:$object[0],(40,05)
|
||||
OBJECT:$object[0],(41,05)
|
||||
OBJECT:$object[0],(42,05)
|
||||
OBJECT:$object[0],(43,05)
|
||||
OBJECT:$object[0],(44,05)
|
||||
OBJECT:$object[0],(45,05)
|
||||
OBJECT:$object[0],(39,06)
|
||||
OBJECT:$object[0],(40,06)
|
||||
OBJECT:$object[0],(41,06)
|
||||
OBJECT:$object[0],(42,06)
|
||||
OBJECT:$object[0],(43,06)
|
||||
OBJECT:$object[0],(44,06)
|
||||
OBJECT:$object[0],(45,06)
|
||||
# Storeroom number 2
|
||||
OBJECT:object[1],random,(49,05)
|
||||
OBJECT:object[1],random,(50,05)
|
||||
OBJECT:object[1],random,(51,05)
|
||||
OBJECT:object[1],random,(52,05)
|
||||
OBJECT:object[1],random,(53,05)
|
||||
OBJECT:object[1],random,(54,05)
|
||||
OBJECT:object[1],random,(55,05)
|
||||
OBJECT:object[1],random,(49,06)
|
||||
OBJECT:object[1],random,(50,06)
|
||||
OBJECT:object[1],random,(51,06)
|
||||
OBJECT:object[1],random,(52,06)
|
||||
OBJECT:object[1],random,(53,06)
|
||||
OBJECT:object[1],random,(54,06)
|
||||
OBJECT:object[1],random,(55,06)
|
||||
OBJECT:$object[1],(49,05)
|
||||
OBJECT:$object[1],(50,05)
|
||||
OBJECT:$object[1],(51,05)
|
||||
OBJECT:$object[1],(52,05)
|
||||
OBJECT:$object[1],(53,05)
|
||||
OBJECT:$object[1],(54,05)
|
||||
OBJECT:$object[1],(55,05)
|
||||
OBJECT:$object[1],(49,06)
|
||||
OBJECT:$object[1],(50,06)
|
||||
OBJECT:$object[1],(51,06)
|
||||
OBJECT:$object[1],(52,06)
|
||||
OBJECT:$object[1],(53,06)
|
||||
OBJECT:$object[1],(54,06)
|
||||
OBJECT:$object[1],(55,06)
|
||||
# Storeroom number 3
|
||||
OBJECT:object[2],random,(39,10)
|
||||
OBJECT:object[2],random,(40,10)
|
||||
OBJECT:object[2],random,(41,10)
|
||||
OBJECT:object[2],random,(42,10)
|
||||
OBJECT:object[2],random,(43,10)
|
||||
OBJECT:object[2],random,(44,10)
|
||||
OBJECT:object[2],random,(45,10)
|
||||
OBJECT:object[2],random,(39,11)
|
||||
OBJECT:object[2],random,(40,11)
|
||||
OBJECT:object[2],random,(41,11)
|
||||
OBJECT:object[2],random,(42,11)
|
||||
OBJECT:object[2],random,(43,11)
|
||||
OBJECT:object[2],random,(44,11)
|
||||
OBJECT:object[2],random,(45,11)
|
||||
OBJECT:$object[2],(39,10)
|
||||
OBJECT:$object[2],(40,10)
|
||||
OBJECT:$object[2],(41,10)
|
||||
OBJECT:$object[2],(42,10)
|
||||
OBJECT:$object[2],(43,10)
|
||||
OBJECT:$object[2],(44,10)
|
||||
OBJECT:$object[2],(45,10)
|
||||
OBJECT:$object[2],(39,11)
|
||||
OBJECT:$object[2],(40,11)
|
||||
OBJECT:$object[2],(41,11)
|
||||
OBJECT:$object[2],(42,11)
|
||||
OBJECT:$object[2],(43,11)
|
||||
OBJECT:$object[2],(44,11)
|
||||
OBJECT:$object[2],(45,11)
|
||||
# Storeroom number 4
|
||||
OBJECT:object[3],random,(49,10)
|
||||
OBJECT:object[3],random,(50,10)
|
||||
OBJECT:object[3],random,(51,10)
|
||||
OBJECT:object[3],random,(52,10)
|
||||
OBJECT:object[3],random,(53,10)
|
||||
OBJECT:object[3],random,(54,10)
|
||||
OBJECT:object[3],random,(55,10)
|
||||
OBJECT:object[3],random,(49,11)
|
||||
OBJECT:object[3],random,(50,11)
|
||||
OBJECT:object[3],random,(51,11)
|
||||
OBJECT:object[3],random,(52,11)
|
||||
OBJECT:object[3],random,(53,11)
|
||||
OBJECT:object[3],random,(54,11)
|
||||
OBJECT:object[3],random,(55,11)
|
||||
OBJECT:$object[3],(49,10)
|
||||
OBJECT:$object[3],(50,10)
|
||||
OBJECT:$object[3],(51,10)
|
||||
OBJECT:$object[3],(52,10)
|
||||
OBJECT:$object[3],(53,10)
|
||||
OBJECT:$object[3],(54,10)
|
||||
OBJECT:$object[3],(55,10)
|
||||
OBJECT:$object[3],(49,11)
|
||||
OBJECT:$object[3],(50,11)
|
||||
OBJECT:$object[3],(51,11)
|
||||
OBJECT:$object[3],(52,11)
|
||||
OBJECT:$object[3],(53,11)
|
||||
OBJECT:$object[3],(54,11)
|
||||
OBJECT:$object[3],(55,11)
|
||||
# THE WAND OF WISHING in 1 of the 4 towers
|
||||
CONTAINER:'(',"chest",place[0]
|
||||
OBJECT:'/',"wishing",contained
|
||||
CONTAINER:('(',"chest"),$place[0] {
|
||||
OBJECT:('/',"wishing")
|
||||
}
|
||||
# Prevent monsters from eating it. (@'s never eat objects)
|
||||
ENGRAVING:place[0],burn,"Elbereth"
|
||||
ENGRAVING:$place[0],burn,"Elbereth"
|
||||
# The treasure of the lord
|
||||
OBJECT:'(',"chest",(37,08)
|
||||
OBJECT:('(',"chest"),(37,08)
|
||||
# Traps
|
||||
TRAP:"trap door",(40,08)
|
||||
TRAP:"trap door",(44,08)
|
||||
@@ -145,66 +152,66 @@ TRAP:"trap door",(48,08)
|
||||
TRAP:"trap door",(52,08)
|
||||
TRAP:"trap door",(55,08)
|
||||
# Soldiers guarding the entry hall
|
||||
MONSTER:'@',"soldier",(08,06)
|
||||
MONSTER:'@',"soldier",(09,05)
|
||||
MONSTER:'@',"soldier",(11,05)
|
||||
MONSTER:'@',"soldier",(12,06)
|
||||
MONSTER:'@',"soldier",(08,10)
|
||||
MONSTER:'@',"soldier",(09,11)
|
||||
MONSTER:'@',"soldier",(11,11)
|
||||
MONSTER:'@',"soldier",(12,10)
|
||||
MONSTER:'@',"lieutenant",(09,08)
|
||||
MONSTER:('@',"soldier"),(08,06)
|
||||
MONSTER:('@',"soldier"),(09,05)
|
||||
MONSTER:('@',"soldier"),(11,05)
|
||||
MONSTER:('@',"soldier"),(12,06)
|
||||
MONSTER:('@',"soldier"),(08,10)
|
||||
MONSTER:('@',"soldier"),(09,11)
|
||||
MONSTER:('@',"soldier"),(11,11)
|
||||
MONSTER:('@',"soldier"),(12,10)
|
||||
MONSTER:('@',"lieutenant"),(09,08)
|
||||
# Soldiers guarding the towers
|
||||
MONSTER:'@',"soldier",(03,02)
|
||||
MONSTER:'@',"soldier",(05,02)
|
||||
MONSTER:'@',"soldier",(57,02)
|
||||
MONSTER:'@',"soldier",(59,02)
|
||||
MONSTER:'@',"soldier",(03,14)
|
||||
MONSTER:'@',"soldier",(05,14)
|
||||
MONSTER:'@',"soldier",(57,14)
|
||||
MONSTER:'@',"soldier",(59,14)
|
||||
MONSTER:('@',"soldier"),(03,02)
|
||||
MONSTER:('@',"soldier"),(05,02)
|
||||
MONSTER:('@',"soldier"),(57,02)
|
||||
MONSTER:('@',"soldier"),(59,02)
|
||||
MONSTER:('@',"soldier"),(03,14)
|
||||
MONSTER:('@',"soldier"),(05,14)
|
||||
MONSTER:('@',"soldier"),(57,14)
|
||||
MONSTER:('@',"soldier"),(59,14)
|
||||
# The four dragons that are guarding the storerooms
|
||||
MONSTER:'D',random,(47,05)
|
||||
MONSTER:'D',random,(47,06)
|
||||
MONSTER:'D',random,(47,10)
|
||||
MONSTER:'D',random,(47,11)
|
||||
MONSTER:'D',(47,05)
|
||||
MONSTER:'D',(47,06)
|
||||
MONSTER:'D',(47,10)
|
||||
MONSTER:'D',(47,11)
|
||||
# Sea monsters in the moat
|
||||
MONSTER:';',"giant eel",(05,07)
|
||||
MONSTER:';',"giant eel",(05,09)
|
||||
MONSTER:';',"giant eel",(57,07)
|
||||
MONSTER:';',"giant eel",(57,09)
|
||||
MONSTER:';',"shark",(05,00)
|
||||
MONSTER:';',"shark",(05,16)
|
||||
MONSTER:';',"shark",(57,00)
|
||||
MONSTER:';',"shark",(57,16)
|
||||
MONSTER:(';',"giant eel"),(05,07)
|
||||
MONSTER:(';',"giant eel"),(05,09)
|
||||
MONSTER:(';',"giant eel"),(57,07)
|
||||
MONSTER:(';',"giant eel"),(57,09)
|
||||
MONSTER:(';',"shark"),(05,00)
|
||||
MONSTER:(';',"shark"),(05,16)
|
||||
MONSTER:(';',"shark"),(57,00)
|
||||
MONSTER:(';',"shark"),(57,16)
|
||||
# The throne room and the court monsters
|
||||
MONSTER:monster[0],random,(27,05)
|
||||
MONSTER:monster[1],random,(30,05)
|
||||
MONSTER:monster[2],random,(33,05)
|
||||
MONSTER:monster[3],random,(36,05)
|
||||
MONSTER:monster[4],random,(28,06)
|
||||
MONSTER:monster[5],random,(31,06)
|
||||
MONSTER:monster[6],random,(34,06)
|
||||
MONSTER:monster[7],random,(37,06)
|
||||
MONSTER:monster[8],random,(27,07)
|
||||
MONSTER:monster[9],random,(30,07)
|
||||
MONSTER:monster[0],random,(33,07)
|
||||
MONSTER:monster[1],random,(36,07)
|
||||
MONSTER:monster[2],random,(28,08)
|
||||
MONSTER:monster[3],random,(31,08)
|
||||
MONSTER:monster[4],random,(34,08)
|
||||
MONSTER:monster[5],random,(27,09)
|
||||
MONSTER:monster[6],random,(30,09)
|
||||
MONSTER:monster[7],random,(33,09)
|
||||
MONSTER:monster[8],random,(36,09)
|
||||
MONSTER:monster[9],random,(28,10)
|
||||
MONSTER:monster[0],random,(31,10)
|
||||
MONSTER:monster[1],random,(34,10)
|
||||
MONSTER:monster[2],random,(37,10)
|
||||
MONSTER:monster[3],random,(27,11)
|
||||
MONSTER:monster[4],random,(30,11)
|
||||
MONSTER:monster[5],random,(33,11)
|
||||
MONSTER:monster[6],random,(36,11)
|
||||
MONSTER:$monster[0],(27,05)
|
||||
MONSTER:$monster[1],(30,05)
|
||||
MONSTER:$monster[2],(33,05)
|
||||
MONSTER:$monster[3],(36,05)
|
||||
MONSTER:$monster[4],(28,06)
|
||||
MONSTER:$monster[5],(31,06)
|
||||
MONSTER:$monster[6],(34,06)
|
||||
MONSTER:$monster[7],(37,06)
|
||||
MONSTER:$monster[8],(27,07)
|
||||
MONSTER:$monster[9],(30,07)
|
||||
MONSTER:$monster[0],(33,07)
|
||||
MONSTER:$monster[1],(36,07)
|
||||
MONSTER:$monster[2],(28,08)
|
||||
MONSTER:$monster[3],(31,08)
|
||||
MONSTER:$monster[4],(34,08)
|
||||
MONSTER:$monster[5],(27,09)
|
||||
MONSTER:$monster[6],(30,09)
|
||||
MONSTER:$monster[7],(33,09)
|
||||
MONSTER:$monster[8],(36,09)
|
||||
MONSTER:$monster[9],(28,10)
|
||||
MONSTER:$monster[0],(31,10)
|
||||
MONSTER:$monster[1],(34,10)
|
||||
MONSTER:$monster[2],(37,10)
|
||||
MONSTER:$monster[3],(27,11)
|
||||
MONSTER:$monster[4],(30,11)
|
||||
MONSTER:$monster[5],(33,11)
|
||||
MONSTER:$monster[6],(36,11)
|
||||
# MazeWalks
|
||||
MAZEWALK:(00,10),west
|
||||
MAZEWALK:(62,06),east
|
||||
|
||||
@@ -69,7 +69,7 @@ V Show long version and game history
|
||||
w Wield (put in use) a weapon
|
||||
W Wear a piece of armor
|
||||
x Swap wielded and secondary weapons
|
||||
X Enter explore (discovery) mode (only if defined)
|
||||
X Toggle two-weapon combat
|
||||
y Go northwest 1 space
|
||||
Y Go northwest until you are on top of something
|
||||
^Y Go northwest until you are near something
|
||||
|
||||
@@ -429,6 +429,7 @@ barbed devil
|
||||
Barbed devils lack any real special abilities, though they
|
||||
are quite difficult to kill.
|
||||
# takes "bat or bird" when specifying 'B'
|
||||
~combat
|
||||
*bat
|
||||
bat or bird
|
||||
A bat, flitting in the darkness outside, took the wrong turn
|
||||
@@ -511,7 +512,6 @@ blind io
|
||||
own. Several were currently hovering above the table.
|
||||
[ The Colour of Magic, by Terry Pratchett ]
|
||||
* blob
|
||||
gelatinous cube
|
||||
ooze
|
||||
* ooze
|
||||
*pudding
|
||||
@@ -548,6 +548,7 @@ candelabrum*
|
||||
Because it is Saint Peter's holy day.
|
||||
(Enter all the Friars to sing the dirge)
|
||||
[ Doctor Faustus and Other Plays, by Christopher Marlowe ]
|
||||
~*jack*boot*
|
||||
*boot*
|
||||
In Fantasyland these are remarkable in that they seldom or
|
||||
never wear out and are suitable for riding or walking in
|
||||
@@ -1101,7 +1102,7 @@ cyclops
|
||||
Proceeding from the heat-oppressed brain?
|
||||
I see thee yet, in form as palpable
|
||||
As this which now I draw.
|
||||
[ Macbeth, by William Shakespeare ]
|
||||
[ Macbeth, by William Shakespeare ]
|
||||
dark one
|
||||
... But he ruled rather by force and fear, if they might
|
||||
avail; and those who perceived his shadow spreading over the
|
||||
@@ -1570,6 +1571,12 @@ eyes of the overworld
|
||||
Usually, there is nothing to be seen. However, the wearer
|
||||
is also able to look back and see the area around herself,
|
||||
much like looking on a map. Why anyone would want to ...
|
||||
fedora
|
||||
Some hats can only be worn if you're willing to be jaunty, to set
|
||||
them at an angle and to walk beneath them with a spring in your
|
||||
stride as if you're only a step away from dancing. They demand a
|
||||
lot of you.
|
||||
[ Anansi Boys, by Neil Gaiman ]
|
||||
figurine*
|
||||
Then it appeared in Paris at just about the time that Paris
|
||||
was full of Carlists who had to get out of Spain. One of
|
||||
@@ -2767,6 +2774,12 @@ lance
|
||||
evil plight.
|
||||
[ Don Quixote of La Mancha, by Miquel de
|
||||
Cervantes Saavedra ]
|
||||
land mine
|
||||
Your heart is intact, your brain is not badly damaged, but the rest
|
||||
of your injuries are comparable to stepping on a land mine. You'd
|
||||
never walk again, and you'd be in great pain. You would come to
|
||||
wish you had not survived.
|
||||
[ Steel Beach, by John Varley ]
|
||||
*lantern
|
||||
While pretending to be a fancy safety lamp, it is in fact
|
||||
battery powered. A discreet little switch is marked "on/off"
|
||||
@@ -4502,6 +4515,15 @@ shrieker
|
||||
its fetid bulk looming overhead... The monster was some kind of
|
||||
great dark worm, but that was about all they were sure of.
|
||||
[ The Adventurers, Epic IV, by Thomas A. Miller ]
|
||||
throwing star
|
||||
shuriken
|
||||
You know, that's what I hate most about fighting against magic:
|
||||
you never know what they're trying to do to you until it hits.
|
||||
The sorceress knew what hit her, however. Two of the shuriken
|
||||
got past whatever defenses she had. One caught her just below
|
||||
the throat, the other in the middle of her chest. It wouldn't
|
||||
kill her, but she wouldn't be fighting anyone for a while.
|
||||
[ Jhereg, by Steven Brust ]
|
||||
skeleton
|
||||
A skeleton is a magically animated undead creature. Unlike
|
||||
shades, only a humanoid creature can be used to create a
|
||||
@@ -5157,7 +5179,7 @@ valkyrie
|
||||
Nations, by Herbert Robinson and Knox
|
||||
Wilson ]
|
||||
vampire
|
||||
vampire bat
|
||||
~vampire bat
|
||||
vampire lord
|
||||
The Oxford English Dictionary is quite unequivocal:
|
||||
_vampire_ - "a preternatural being of a malignant nature (in
|
||||
@@ -5299,6 +5321,22 @@ web
|
||||
Oh what a tangled web we weave,
|
||||
When first we practise to deceive!
|
||||
[ Marmion, by Sir Walter Scott ]
|
||||
whistle
|
||||
There were legends both on the front and on the back of the
|
||||
whistle. The one read thus:
|
||||
|
||||
FLA FUR BIS FLE The other: QUIS EST ISTE QUI VENIT
|
||||
'I ought to be able to make it out,' he thought;
|
||||
'but I suppose I am a little rusty in my Latin.
|
||||
When I come to think of it, I don't believe I even
|
||||
know the word for a whistle. The long one does seem
|
||||
simple enough. It ought to mean, "Who is this who is coming?"
|
||||
|
||||
Well, the best way to find out is evidently to whistle
|
||||
for him.'
|
||||
|
||||
[Ghost Stories of an Antiquary, by Montague Rhodes James
|
||||
'Oh, Whistle, and I'll Come to You My Lad']
|
||||
# werecritter -- see "lycanthrope"
|
||||
*wight
|
||||
When he came to himself again, for a moment he could recall
|
||||
|
||||
662
dat/endgame.des
662
dat/endgame.des
@@ -51,79 +51,79 @@ PORTAL:(0,0,75,19),(65,13,75,19),"air"
|
||||
# Some helpful monsters. Making sure a
|
||||
# pick axe and at least one wand of digging
|
||||
# are available.
|
||||
MONSTER:'@',"Elvenking",(67,16)
|
||||
MONSTER:'H',"minotaur",(67,14)
|
||||
MONSTER:('@',"Elvenking"),(67,16)
|
||||
MONSTER:('H',"minotaur"),(67,14)
|
||||
# An assortment of earth-appropriate nasties
|
||||
# in each cavern.
|
||||
MONSTER:'E',"earth elemental",(52,13),hostile
|
||||
MONSTER:'E',"earth elemental",(53,13),hostile
|
||||
MONSTER:'T',"rock troll",(53,12)
|
||||
MONSTER:'H',"stone giant",(54,12)
|
||||
MONSTER:('E',"earth elemental"),(52,13),hostile
|
||||
MONSTER:('E',"earth elemental"),(53,13),hostile
|
||||
MONSTER:('T',"rock troll"),(53,12)
|
||||
MONSTER:('H',"stone giant"),(54,12)
|
||||
#
|
||||
MONSTER:'S',"pit viper",(70,05)
|
||||
MONSTER:'&',"barbed devil",(69,06)
|
||||
MONSTER:'H',"stone giant",(69,08)
|
||||
MONSTER:''',"stone golem",(71,08)
|
||||
MONSTER:'&',"pit fiend",(70,09)
|
||||
MONSTER:'E',"earth elemental",(70,08),hostile
|
||||
MONSTER:('S',"pit viper"),(70,05)
|
||||
MONSTER:('&',"barbed devil"),(69,06)
|
||||
MONSTER:('H',"stone giant"),(69,08)
|
||||
MONSTER:(''',"stone golem"),(71,08)
|
||||
MONSTER:('&',"pit fiend"),(70,09)
|
||||
MONSTER:('E',"earth elemental"),(70,08),hostile
|
||||
#
|
||||
MONSTER:'E',"earth elemental",(60,03),hostile
|
||||
MONSTER:'H',"stone giant",(61,04)
|
||||
MONSTER:'E',"earth elemental",(62,04),hostile
|
||||
MONSTER:'E',"earth elemental",(61,05),hostile
|
||||
MONSTER:'s',"scorpion",(62,05)
|
||||
MONSTER:'p',"rock piercer",(63,05)
|
||||
MONSTER:('E',"earth elemental"),(60,03),hostile
|
||||
MONSTER:('H',"stone giant"),(61,04)
|
||||
MONSTER:('E',"earth elemental"),(62,04),hostile
|
||||
MONSTER:('E',"earth elemental"),(61,05),hostile
|
||||
MONSTER:('s',"scorpion"),(62,05)
|
||||
MONSTER:('p',"rock piercer"),(63,05)
|
||||
#
|
||||
MONSTER:'U',"umber hulk",(40,05)
|
||||
MONSTER:'v',"dust vortex",(42,05)
|
||||
MONSTER:'T',"rock troll",(38,06)
|
||||
MONSTER:'E',"earth elemental",(39,06),hostile
|
||||
MONSTER:'E',"earth elemental",(41,06),hostile
|
||||
MONSTER:'E',"earth elemental",(38,07),hostile
|
||||
MONSTER:'H',"stone giant",(39,07)
|
||||
MONSTER:'E',"earth elemental",(43,07),hostile
|
||||
MONSTER:''',"stone golem",(37,08)
|
||||
MONSTER:'S',"pit viper",(43,08)
|
||||
MONSTER:'S',"pit viper",(43,09)
|
||||
MONSTER:'T',"rock troll",(44,10)
|
||||
MONSTER:('U',"umber hulk"),(40,05)
|
||||
MONSTER:('v',"dust vortex"),(42,05)
|
||||
MONSTER:('T',"rock troll"),(38,06)
|
||||
MONSTER:('E',"earth elemental"),(39,06),hostile
|
||||
MONSTER:('E',"earth elemental"),(41,06),hostile
|
||||
MONSTER:('E',"earth elemental"),(38,07),hostile
|
||||
MONSTER:('H',"stone giant"),(39,07)
|
||||
MONSTER:('E',"earth elemental"),(43,07),hostile
|
||||
MONSTER:(''',"stone golem"),(37,08)
|
||||
MONSTER:('S',"pit viper"),(43,08)
|
||||
MONSTER:('S',"pit viper"),(43,09)
|
||||
MONSTER:('T',"rock troll"),(44,10)
|
||||
#
|
||||
MONSTER:'E',"earth elemental",(02,01),hostile
|
||||
MONSTER:'E',"earth elemental",(03,01),hostile
|
||||
MONSTER:''',"stone golem",(01,02)
|
||||
MONSTER:'E',"earth elemental",(02,02),hostile
|
||||
MONSTER:'T',"rock troll",(04,03)
|
||||
MONSTER:'T',"rock troll",(03,03)
|
||||
MONSTER:'&',"pit fiend",(03,04)
|
||||
MONSTER:'E',"earth elemental",(04,05),hostile
|
||||
MONSTER:'S',"pit viper",(05,06)
|
||||
MONSTER:('E',"earth elemental"),(02,01),hostile
|
||||
MONSTER:('E',"earth elemental"),(03,01),hostile
|
||||
MONSTER:(''',"stone golem"),(01,02)
|
||||
MONSTER:('E',"earth elemental"),(02,02),hostile
|
||||
MONSTER:('T',"rock troll"),(04,03)
|
||||
MONSTER:('T',"rock troll"),(03,03)
|
||||
MONSTER:('&',"pit fiend"),(03,04)
|
||||
MONSTER:('E',"earth elemental"),(04,05),hostile
|
||||
MONSTER:('S',"pit viper"),(05,06)
|
||||
#
|
||||
MONSTER:'E',"earth elemental",(21,02),hostile
|
||||
MONSTER:'E',"earth elemental",(21,03),hostile
|
||||
MONSTER:'H',"minotaur",(21,04)
|
||||
MONSTER:'E',"earth elemental",(21,05),hostile
|
||||
MONSTER:'T',"rock troll",(22,05)
|
||||
MONSTER:'E',"earth elemental",(22,06),hostile
|
||||
MONSTER:'E',"earth elemental",(23,06),hostile
|
||||
MONSTER:('E',"earth elemental"),(21,02),hostile
|
||||
MONSTER:('E',"earth elemental"),(21,03),hostile
|
||||
MONSTER:('H',"minotaur"),(21,04)
|
||||
MONSTER:('E',"earth elemental"),(21,05),hostile
|
||||
MONSTER:('T',"rock troll"),(22,05)
|
||||
MONSTER:('E',"earth elemental"),(22,06),hostile
|
||||
MONSTER:('E',"earth elemental"),(23,06),hostile
|
||||
#
|
||||
MONSTER:'S',"pit viper",(14,08)
|
||||
MONSTER:'&',"barbed devil",(14,09)
|
||||
MONSTER:'E',"earth elemental",(13,10),hostile
|
||||
MONSTER:'T',"rock troll",(12,11)
|
||||
MONSTER:'E',"earth elemental",(14,12),hostile
|
||||
MONSTER:'E',"earth elemental",(15,13),hostile
|
||||
MONSTER:'H',"stone giant",(17,13)
|
||||
MONSTER:''',"stone golem",(18,13)
|
||||
MONSTER:'&',"pit fiend",(18,12)
|
||||
MONSTER:'E',"earth elemental",(18,11),hostile
|
||||
MONSTER:'E',"earth elemental",(18,10),hostile
|
||||
MONSTER:('S',"pit viper"),(14,08)
|
||||
MONSTER:('&',"barbed devil"),(14,09)
|
||||
MONSTER:('E',"earth elemental"),(13,10),hostile
|
||||
MONSTER:('T',"rock troll"),(12,11)
|
||||
MONSTER:('E',"earth elemental"),(14,12),hostile
|
||||
MONSTER:('E',"earth elemental"),(15,13),hostile
|
||||
MONSTER:('H',"stone giant"),(17,13)
|
||||
MONSTER:(''',"stone golem"),(18,13)
|
||||
MONSTER:('&',"pit fiend"),(18,12)
|
||||
MONSTER:('E',"earth elemental"),(18,11),hostile
|
||||
MONSTER:('E',"earth elemental"),(18,10),hostile
|
||||
#
|
||||
MONSTER:'&',"barbed devil",(02,16)
|
||||
MONSTER:'E',"earth elemental",(03,16),hostile
|
||||
MONSTER:'T',"rock troll",(02,17)
|
||||
MONSTER:'E',"earth elemental",(04,17),hostile
|
||||
MONSTER:'E',"earth elemental",(04,18),hostile
|
||||
MONSTER:('&',"barbed devil"),(02,16)
|
||||
MONSTER:('E',"earth elemental"),(03,16),hostile
|
||||
MONSTER:('T',"rock troll"),(02,17)
|
||||
MONSTER:('E',"earth elemental"),(04,17),hostile
|
||||
MONSTER:('E',"earth elemental"),(04,18),hostile
|
||||
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:('`',"boulder"),random
|
||||
|
||||
|
||||
MAZE:"air",' '
|
||||
@@ -139,26 +139,26 @@ GEOMETRY:center,center
|
||||
# This map has no visible outer boundary, and
|
||||
# is all "air".
|
||||
MAP
|
||||
AAAAAAAAAAAAAAAAAAAAAAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAACCCCCCAAAAAAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAACCAACCCCCAAAAAACCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAACCACCCCCCCAAAAACCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAACCCCCCCCCCAAAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAACCCCAAACCAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAACCCCAAAAAACCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAACCCCCCCAAAACCACCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAACCCCAAAAAAACCACAACCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACCCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACCCCAAACCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACACCCCCAAACCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACCCCCCCAAAACCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACCCCCCCCAAACCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCCCCCCCCCAACCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACACCCCCCCCCCACCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACCCCCCAAACCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAACCAAAAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
ENDMAP
|
||||
# Use up and down regions to partition the level into three parts;
|
||||
# teleportation can't cross from one part into another.
|
||||
@@ -168,63 +168,63 @@ TELEPORT_REGION:levregion(01,00,24,20),levregion(25,00,79,20),up
|
||||
TELEPORT_REGION:levregion(56,00,79,20),levregion(01,00,55,20),down
|
||||
PORTAL:levregion(57,01,78,19),(0,0,0,0),"fire"
|
||||
REGION:(00,00,75,19),lit,"ordinary"
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:'E',"air elemental",random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
MONSTER:('E',"air elemental"),random,hostile
|
||||
|
||||
MONSTER:'e',"floating eye",random,hostile
|
||||
MONSTER:'e',"floating eye",random,hostile
|
||||
MONSTER:'e',"floating eye",random,hostile
|
||||
MONSTER:('e',"floating eye"),random,hostile
|
||||
MONSTER:('e',"floating eye"),random,hostile
|
||||
MONSTER:('e',"floating eye"),random,hostile
|
||||
|
||||
MONSTER:'y',"yellow light",random,hostile
|
||||
MONSTER:'y',"yellow light",random,hostile
|
||||
MONSTER:'y',"yellow light",random,hostile
|
||||
MONSTER:('y',"yellow light"),random,hostile
|
||||
MONSTER:('y',"yellow light"),random,hostile
|
||||
MONSTER:('y',"yellow light"),random,hostile
|
||||
|
||||
MONSTER:'A',"couatl",random
|
||||
MONSTER:('A',"couatl"),random
|
||||
|
||||
MONSTER:'D',random,random
|
||||
MONSTER:'D',random,random
|
||||
MONSTER:'D',random,random
|
||||
MONSTER:'D',random,random
|
||||
MONSTER:'D',random,random
|
||||
MONSTER:'D',random
|
||||
MONSTER:'D',random
|
||||
MONSTER:'D',random
|
||||
MONSTER:'D',random
|
||||
MONSTER:'D',random
|
||||
|
||||
MONSTER:'E',random,random
|
||||
MONSTER:'E',random,random
|
||||
MONSTER:'E',random,random
|
||||
MONSTER:'J',random,random
|
||||
MONSTER:'J',random,random
|
||||
MONSTER:'E',random
|
||||
MONSTER:'E',random
|
||||
MONSTER:'E',random
|
||||
MONSTER:'J',random
|
||||
MONSTER:'J',random
|
||||
|
||||
MONSTER:'&',"djinni",random,hostile
|
||||
MONSTER:'&',"djinni",random,hostile
|
||||
MONSTER:'&',"djinni",random,hostile
|
||||
MONSTER:('&',"djinni"),random,hostile
|
||||
MONSTER:('&',"djinni"),random,hostile
|
||||
MONSTER:('&',"djinni"),random,hostile
|
||||
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"fog cloud",random,hostile
|
||||
MONSTER:'v',"energy vortex",random,hostile
|
||||
MONSTER:'v',"energy vortex",random,hostile
|
||||
MONSTER:'v',"energy vortex",random,hostile
|
||||
MONSTER:'v',"energy vortex",random,hostile
|
||||
MONSTER:'v',"energy vortex",random,hostile
|
||||
MONSTER:'v',"steam vortex",random,hostile
|
||||
MONSTER:'v',"steam vortex",random,hostile
|
||||
MONSTER:'v',"steam vortex",random,hostile
|
||||
MONSTER:'v',"steam vortex",random,hostile
|
||||
MONSTER:'v',"steam vortex",random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"fog cloud"),random,hostile
|
||||
MONSTER:('v',"energy vortex"),random,hostile
|
||||
MONSTER:('v',"energy vortex"),random,hostile
|
||||
MONSTER:('v',"energy vortex"),random,hostile
|
||||
MONSTER:('v',"energy vortex"),random,hostile
|
||||
MONSTER:('v',"energy vortex"),random,hostile
|
||||
MONSTER:('v',"steam vortex"),random,hostile
|
||||
MONSTER:('v',"steam vortex"),random,hostile
|
||||
MONSTER:('v',"steam vortex"),random,hostile
|
||||
MONSTER:('v',"steam vortex"),random,hostile
|
||||
MONSTER:('v',"steam vortex"),random,hostile
|
||||
|
||||
|
||||
MAZE:"fire",' '
|
||||
@@ -301,81 +301,81 @@ TRAP:"fire",random
|
||||
TRAP:"fire",random
|
||||
TRAP:"fire",random
|
||||
# An assortment of fire-appropriate nasties
|
||||
MONSTER:'D',"red dragon",random
|
||||
MONSTER:'&',"balrog",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'v',"fire vortex",random
|
||||
MONSTER:'d',"hell hound",random
|
||||
MONSTER:('D',"red dragon"),random
|
||||
MONSTER:('&',"balrog"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('v',"fire vortex"),random
|
||||
MONSTER:('d',"hell hound"),random
|
||||
#
|
||||
MONSTER:'H',"fire giant",random
|
||||
MONSTER:'&',"barbed devil",random
|
||||
MONSTER:'d',"hell hound",random
|
||||
MONSTER:''',"stone golem",random
|
||||
MONSTER:'&',"pit fiend",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:('H',"fire giant"),random
|
||||
MONSTER:('&',"barbed devil"),random
|
||||
MONSTER:('d',"hell hound"),random
|
||||
MONSTER:(''',"stone golem"),random
|
||||
MONSTER:('&',"pit fiend"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
#
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'d',"hell hound",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'s',"scorpion",random
|
||||
MONSTER:'H',"fire giant",random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('d',"hell hound"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('s',"scorpion"),random
|
||||
MONSTER:('H',"fire giant"),random
|
||||
#
|
||||
MONSTER:'d',"hell hound",random
|
||||
MONSTER:'v',"dust vortex",random
|
||||
MONSTER:'v',"fire vortex",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'d',"hell hound",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:''',"stone golem",random
|
||||
MONSTER:'S',"pit viper",random
|
||||
MONSTER:'S',"pit viper",random
|
||||
MONSTER:'v',"fire vortex",random
|
||||
MONSTER:('d',"hell hound"),random
|
||||
MONSTER:('v',"dust vortex"),random
|
||||
MONSTER:('v',"fire vortex"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('d',"hell hound"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:(''',"stone golem"),random
|
||||
MONSTER:('S',"pit viper"),random
|
||||
MONSTER:('S',"pit viper"),random
|
||||
MONSTER:('v',"fire vortex"),random
|
||||
#
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'H',"fire giant",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'v',"fire vortex",random
|
||||
MONSTER:'v',"fire vortex",random
|
||||
MONSTER:'&',"pit fiend",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'S',"pit viper",random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('H',"fire giant"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('v',"fire vortex"),random
|
||||
MONSTER:('v',"fire vortex"),random
|
||||
MONSTER:('&',"pit fiend"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('S',"pit viper"),random
|
||||
#
|
||||
MONSTER:':',"salamander",random,hostile
|
||||
MONSTER:':',"salamander",random,hostile
|
||||
MONSTER:'H',"minotaur",random
|
||||
MONSTER:':',"salamander",random,hostile
|
||||
MONSTER:'v',"steam vortex",random
|
||||
MONSTER:':',"salamander",random,hostile
|
||||
MONSTER:':',"salamander",random,hostile
|
||||
MONSTER:(':',"salamander"),random,hostile
|
||||
MONSTER:(':',"salamander"),random,hostile
|
||||
MONSTER:('H',"minotaur"),random
|
||||
MONSTER:(':',"salamander"),random,hostile
|
||||
MONSTER:('v',"steam vortex"),random
|
||||
MONSTER:(':',"salamander"),random,hostile
|
||||
MONSTER:(':',"salamander"),random,hostile
|
||||
#
|
||||
MONSTER:'H',"fire giant",random
|
||||
MONSTER:'&',"barbed devil",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'v',"fire vortex",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'d',"hell hound",random
|
||||
MONSTER:'H',"fire giant",random
|
||||
MONSTER:'&',"pit fiend",random
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:'E',"fire elemental",random,hostile
|
||||
MONSTER:('H',"fire giant"),random
|
||||
MONSTER:('&',"barbed devil"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('v',"fire vortex"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('d',"hell hound"),random
|
||||
MONSTER:('H',"fire giant"),random
|
||||
MONSTER:('&',"pit fiend"),random
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
MONSTER:('E',"fire elemental"),random,hostile
|
||||
#
|
||||
MONSTER:'&',"barbed devil",random
|
||||
MONSTER:':',"salamander",random,hostile
|
||||
MONSTER:'v',"steam vortex",random
|
||||
MONSTER:':',"salamander",random,hostile
|
||||
MONSTER:':',"salamander",random,hostile
|
||||
MONSTER:('&',"barbed devil"),random
|
||||
MONSTER:(':',"salamander"),random,hostile
|
||||
MONSTER:('v',"steam vortex"),random
|
||||
MONSTER:(':',"salamander"),random,hostile
|
||||
MONSTER:(':',"salamander"),random,hostile
|
||||
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:('`',"boulder"),random
|
||||
OBJECT:('`',"boulder"),random
|
||||
OBJECT:('`',"boulder"),random
|
||||
OBJECT:('`',"boulder"),random
|
||||
OBJECT:('`',"boulder"),random
|
||||
|
||||
|
||||
MAZE:"water",' '
|
||||
@@ -412,67 +412,67 @@ ENDMAP
|
||||
TELEPORT_REGION:(0,0,25,19),(0,0,0,0)
|
||||
PORTAL:(51,0,75,19),(0,0,0,0),"astral"
|
||||
# A fisherman's dream...
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"giant eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"electric eel",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"kraken",random
|
||||
MONSTER:';',"shark",random
|
||||
MONSTER:';',"shark",random
|
||||
MONSTER:';',"shark",random
|
||||
MONSTER:';',"shark",random
|
||||
MONSTER:';',"piranha",random
|
||||
MONSTER:';',"piranha",random
|
||||
MONSTER:';',"piranha",random
|
||||
MONSTER:';',"piranha",random
|
||||
MONSTER:';',"jellyfish",random
|
||||
MONSTER:';',"jellyfish",random
|
||||
MONSTER:';',"jellyfish",random
|
||||
MONSTER:';',"jellyfish",random
|
||||
MONSTER:';',random,random
|
||||
MONSTER:';',random,random
|
||||
MONSTER:';',random,random
|
||||
MONSTER:';',random,random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"giant eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"electric eel"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"kraken"),random
|
||||
MONSTER:(';',"shark"),random
|
||||
MONSTER:(';',"shark"),random
|
||||
MONSTER:(';',"shark"),random
|
||||
MONSTER:(';',"shark"),random
|
||||
MONSTER:(';',"piranha"),random
|
||||
MONSTER:(';',"piranha"),random
|
||||
MONSTER:(';',"piranha"),random
|
||||
MONSTER:(';',"piranha"),random
|
||||
MONSTER:(';',"jellyfish"),random
|
||||
MONSTER:(';',"jellyfish"),random
|
||||
MONSTER:(';',"jellyfish"),random
|
||||
MONSTER:(';',"jellyfish"),random
|
||||
MONSTER:';',random
|
||||
MONSTER:';',random
|
||||
MONSTER:';',random
|
||||
MONSTER:';',random
|
||||
# These guys feel like home here
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:'E',"water elemental",random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
MONSTER:('E',"water elemental"),random,hostile
|
||||
|
||||
|
||||
MAZE:"astral",' '
|
||||
@@ -504,13 +504,15 @@ MAP
|
||||
-----------------
|
||||
ENDMAP
|
||||
# Rider locations
|
||||
RANDOM_PLACES:(23,9),(37,14),(51,9)
|
||||
$place = { (23,9),(37,14),(51,9) }
|
||||
SHUFFLE: $place
|
||||
|
||||
# Where the player will land on arrival
|
||||
TELEPORT_REGION:(29,15,45,15),(30,15,44,15)
|
||||
# Lit courts
|
||||
REGION:(01,05,16,14),lit,"ordinary",filled,true
|
||||
REGION:(31,01,44,10),lit,"ordinary",filled,true
|
||||
REGION:(61,05,74,14),lit,"ordinary",filled,true
|
||||
REGION:(01,05,16,14),lit,"ordinary",filled,irregular
|
||||
REGION:(31,01,44,10),lit,"ordinary",filled,irregular
|
||||
REGION:(61,05,74,14),lit,"ordinary",filled,irregular
|
||||
# A Sanctum for each alignment
|
||||
# The shrines' alignments are shuffled for
|
||||
# each game
|
||||
@@ -535,29 +537,29 @@ NON_DIGGABLE:(00,00,74,19)
|
||||
NON_PASSWALL:(00,00,74,19)
|
||||
# Moloch's horde
|
||||
# West round room
|
||||
MONSTER:'@',"aligned priest",(18,09),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(19,08),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(19,09),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(19,10),noalign,hostile
|
||||
MONSTER:'A',"Angel",(20,09),noalign,hostile
|
||||
MONSTER:'A',"Angel",(20,10),noalign,hostile
|
||||
MONSTER:'&',"Pestilence",place[0],hostile
|
||||
MONSTER:('@',"aligned priest"),(18,09),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(19,08),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(19,09),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(19,10),noalign,hostile
|
||||
MONSTER:('A',"Angel"),(20,09),noalign,hostile
|
||||
MONSTER:('A',"Angel"),(20,10),noalign,hostile
|
||||
MONSTER:('&',"Pestilence"),$place[0],hostile
|
||||
# South-central round room
|
||||
MONSTER:'@',"aligned priest",(36,12),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(37,12),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(38,12),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(36,13),noalign,hostile
|
||||
MONSTER:'A',"Angel",(38,13),noalign,hostile
|
||||
MONSTER:'A',"Angel",(37,13),noalign,hostile
|
||||
MONSTER:'&',"Death",place[1],hostile
|
||||
MONSTER:('@',"aligned priest"),(36,12),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(37,12),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(38,12),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(36,13),noalign,hostile
|
||||
MONSTER:('A',"Angel"),(38,13),noalign,hostile
|
||||
MONSTER:('A',"Angel"),(37,13),noalign,hostile
|
||||
MONSTER:('&',"Death"),$place[1],hostile
|
||||
# East round room
|
||||
MONSTER:'@',"aligned priest",(56,09),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(55,08),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(55,09),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(55,10),noalign,hostile
|
||||
MONSTER:'A',"Angel",(54,09),noalign,hostile
|
||||
MONSTER:'A',"Angel",(54,10),noalign,hostile
|
||||
MONSTER:'&',"Famine",place[2],hostile
|
||||
MONSTER:('@',"aligned priest"),(56,09),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(55,08),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(55,09),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(55,10),noalign,hostile
|
||||
MONSTER:('A',"Angel"),(54,09),noalign,hostile
|
||||
MONSTER:('A',"Angel"),(54,10),noalign,hostile
|
||||
MONSTER:('&',"Famine"),$place[2],hostile
|
||||
#
|
||||
# The aligned horde
|
||||
#
|
||||
@@ -567,52 +569,52 @@ MONSTER:'&',"Famine",place[2],hostile
|
||||
# but a place holder.
|
||||
#
|
||||
# West court
|
||||
MONSTER:'@',"aligned priest",(12,07),chaos,hostile
|
||||
MONSTER:'@',"aligned priest",(13,07),chaos,peaceful
|
||||
MONSTER:'@',"aligned priest",(14,07),law,hostile
|
||||
MONSTER:'@',"aligned priest",(12,11),law,peaceful
|
||||
MONSTER:'@',"aligned priest",(13,11),neutral,hostile
|
||||
MONSTER:'@',"aligned priest",(14,11),neutral,peaceful
|
||||
MONSTER:'A',"Angel",(11,05),chaos,hostile
|
||||
MONSTER:'A',"Angel",(12,05),chaos,peaceful
|
||||
MONSTER:'A',"Angel",(13,05),law,hostile
|
||||
MONSTER:'A',"Angel",(11,13),law,peaceful
|
||||
MONSTER:'A',"Angel",(12,13),neutral,hostile
|
||||
MONSTER:'A',"Angel",(13,13),neutral,peaceful
|
||||
MONSTER:('@',"aligned priest"),(12,07),chaos,hostile
|
||||
MONSTER:('@',"aligned priest"),(13,07),chaos,peaceful
|
||||
MONSTER:('@',"aligned priest"),(14,07),law,hostile
|
||||
MONSTER:('@',"aligned priest"),(12,11),law,peaceful
|
||||
MONSTER:('@',"aligned priest"),(13,11),neutral,hostile
|
||||
MONSTER:('@',"aligned priest"),(14,11),neutral,peaceful
|
||||
MONSTER:('A',"Angel"),(11,05),chaos,hostile
|
||||
MONSTER:('A',"Angel"),(12,05),chaos,peaceful
|
||||
MONSTER:('A',"Angel"),(13,05),law,hostile
|
||||
MONSTER:('A',"Angel"),(11,13),law,peaceful
|
||||
MONSTER:('A',"Angel"),(12,13),neutral,hostile
|
||||
MONSTER:('A',"Angel"),(13,13),neutral,peaceful
|
||||
# Central court
|
||||
MONSTER:'@',"aligned priest",(32,09),chaos,hostile
|
||||
MONSTER:'@',"aligned priest",(33,09),chaos,peaceful
|
||||
MONSTER:'@',"aligned priest",(34,09),law,hostile
|
||||
MONSTER:'@',"aligned priest",(40,09),law,peaceful
|
||||
MONSTER:'@',"aligned priest",(41,09),neutral,hostile
|
||||
MONSTER:'@',"aligned priest",(42,09),neutral,peaceful
|
||||
MONSTER:'A',"Angel",(31,08),chaos,hostile
|
||||
MONSTER:'A',"Angel",(32,08),chaos,peaceful
|
||||
MONSTER:'A',"Angel",(31,09),law,hostile
|
||||
MONSTER:'A',"Angel",(42,08),law,peaceful
|
||||
MONSTER:'A',"Angel",(43,08),neutral,hostile
|
||||
MONSTER:'A',"Angel",(43,09),neutral,peaceful
|
||||
MONSTER:('@',"aligned priest"),(32,09),chaos,hostile
|
||||
MONSTER:('@',"aligned priest"),(33,09),chaos,peaceful
|
||||
MONSTER:('@',"aligned priest"),(34,09),law,hostile
|
||||
MONSTER:('@',"aligned priest"),(40,09),law,peaceful
|
||||
MONSTER:('@',"aligned priest"),(41,09),neutral,hostile
|
||||
MONSTER:('@',"aligned priest"),(42,09),neutral,peaceful
|
||||
MONSTER:('A',"Angel"),(31,08),chaos,hostile
|
||||
MONSTER:('A',"Angel"),(32,08),chaos,peaceful
|
||||
MONSTER:('A',"Angel"),(31,09),law,hostile
|
||||
MONSTER:('A',"Angel"),(42,08),law,peaceful
|
||||
MONSTER:('A',"Angel"),(43,08),neutral,hostile
|
||||
MONSTER:('A',"Angel"),(43,09),neutral,peaceful
|
||||
# East court
|
||||
MONSTER:'@',"aligned priest",(60,07),chaos,hostile
|
||||
MONSTER:'@',"aligned priest",(61,07),chaos,peaceful
|
||||
MONSTER:'@',"aligned priest",(62,07),law,hostile
|
||||
MONSTER:'@',"aligned priest",(60,11),law,peaceful
|
||||
MONSTER:'@',"aligned priest",(61,11),neutral,hostile
|
||||
MONSTER:'@',"aligned priest",(62,11),neutral,peaceful
|
||||
MONSTER:'A',"Angel",(61,05),chaos,hostile
|
||||
MONSTER:'A',"Angel",(62,05),chaos,peaceful
|
||||
MONSTER:'A',"Angel",(63,05),law,hostile
|
||||
MONSTER:'A',"Angel",(61,13),law,peaceful
|
||||
MONSTER:'A',"Angel",(62,13),neutral,hostile
|
||||
MONSTER:'A',"Angel",(63,13),neutral,peaceful
|
||||
MONSTER:('@',"aligned priest"),(60,07),chaos,hostile
|
||||
MONSTER:('@',"aligned priest"),(61,07),chaos,peaceful
|
||||
MONSTER:('@',"aligned priest"),(62,07),law,hostile
|
||||
MONSTER:('@',"aligned priest"),(60,11),law,peaceful
|
||||
MONSTER:('@',"aligned priest"),(61,11),neutral,hostile
|
||||
MONSTER:('@',"aligned priest"),(62,11),neutral,peaceful
|
||||
MONSTER:('A',"Angel"),(61,05),chaos,hostile
|
||||
MONSTER:('A',"Angel"),(62,05),chaos,peaceful
|
||||
MONSTER:('A',"Angel"),(63,05),law,hostile
|
||||
MONSTER:('A',"Angel"),(61,13),law,peaceful
|
||||
MONSTER:('A',"Angel"),(62,13),neutral,hostile
|
||||
MONSTER:('A',"Angel"),(63,13),neutral,peaceful
|
||||
#
|
||||
# Assorted nasties
|
||||
MONSTER:'L',random,random,hostile
|
||||
MONSTER:'L',random,random,hostile
|
||||
MONSTER:'L',random,random,hostile
|
||||
MONSTER:'V',random,random,hostile
|
||||
MONSTER:'V',random,random,hostile
|
||||
MONSTER:'V',random,random,hostile
|
||||
MONSTER:'D',random,random,hostile
|
||||
MONSTER:'D',random,random,hostile
|
||||
MONSTER:'D',random,random,hostile
|
||||
MONSTER:'L',random,hostile
|
||||
MONSTER:'L',random,hostile
|
||||
MONSTER:'L',random,hostile
|
||||
MONSTER:'V',random,hostile
|
||||
MONSTER:'V',random,hostile
|
||||
MONSTER:'V',random,hostile
|
||||
MONSTER:'D',random,hostile
|
||||
MONSTER:'D',random,hostile
|
||||
MONSTER:'D',random,hostile
|
||||
|
||||
82
dat/engrave.txt
Normal file
82
dat/engrave.txt
Normal file
@@ -0,0 +1,82 @@
|
||||
# Random engravings on the floor
|
||||
#
|
||||
Elbereth
|
||||
# trap engravings
|
||||
Vlad was here
|
||||
ad aerarium
|
||||
|
||||
# take-offs and other famous engravings
|
||||
Owlbreath
|
||||
Galadriel
|
||||
Kilroy was here
|
||||
|
||||
# Journey to the Center of the Earth
|
||||
A.S. ->
|
||||
<- A.S.
|
||||
# Adventure
|
||||
You won't get it up the steps
|
||||
# Inferno
|
||||
Lasciate ogni speranza o voi ch'entrate.
|
||||
# Prisoner
|
||||
Well Come
|
||||
# So Long...
|
||||
We apologize for the inconvenience.
|
||||
# Thriller
|
||||
See you next Wednesday
|
||||
# Smokey Stover
|
||||
notary sojak
|
||||
|
||||
For a good time call 8?7-5309
|
||||
# Various zoos around the world
|
||||
Please don't feed the animals.
|
||||
# A palindrome
|
||||
Madam, in Eden, I'm Adam.
|
||||
# Siskel & Ebert
|
||||
Two thumbs up!
|
||||
# The First C Program
|
||||
Hello, World!
|
||||
^?MAIL
|
||||
# AOL
|
||||
You've got mail!
|
||||
^.
|
||||
# Clueless
|
||||
As if!
|
||||
# 200x incarnation of Dr.Who
|
||||
BAD WOLF
|
||||
|
||||
# Gang tag
|
||||
Arooo! Werewolves of Yendor!
|
||||
|
||||
# Strategy and pun
|
||||
Dig for Victory here
|
||||
|
||||
# Pompeii
|
||||
Gaius Julius Primigenius was here. Why are you late?
|
||||
|
||||
# Helpful guiding
|
||||
Don't go this way
|
||||
Go left --->
|
||||
<--- Go right
|
||||
X marks the spot
|
||||
X <--- You are here.
|
||||
Here be dragons
|
||||
Save now, and do your homework!
|
||||
There was a hole here. It's gone now.
|
||||
The Vibrating Square
|
||||
This is a pit!
|
||||
This is not the dungeon you are looking for.
|
||||
Watch out, there's a gnome with a wand of death behind that door!
|
||||
|
||||
# Misc fun
|
||||
This square deliberately left blank.
|
||||
|
||||
# Viking graffiti
|
||||
Haermund Hardaxe carved these runes
|
||||
|
||||
# Advertising
|
||||
Need a light? Come visit the Minetown branch of Izchak's Lighting Store!
|
||||
Snakes on the Astral Plane - Soon in a dungeon near you
|
||||
You are the one millionth visitor to this place! Please wait 200 turns for your wand of wishing.
|
||||
|
||||
# DnD
|
||||
Warning, Exploding runes!
|
||||
396
dat/epitaph.txt
Normal file
396
dat/epitaph.txt
Normal file
@@ -0,0 +1,396 @@
|
||||
# Epitaphs for random headstones
|
||||
#
|
||||
#
|
||||
Rest in peace
|
||||
R.I.P.
|
||||
Rest In Pieces
|
||||
Note -- there are NO valuable items in this grave
|
||||
1994-1995. The Longest-Lived Hacker Ever
|
||||
The Grave of the Unknown Hacker
|
||||
We weren't sure who this was, but we buried him here anyway
|
||||
Sparky -- he was a very good dog
|
||||
Beware of Electric Third Rail
|
||||
Made in Taiwan
|
||||
Og friend. Og good dude. Og died. Og now food
|
||||
Beetlejuice Beetlejuice Beetlejuice
|
||||
Look out below!
|
||||
Please don't dig me up. I'm perfectly happy down here. -- Resident
|
||||
Postman, please note forwarding address: Gehennom, Asmodeus's Fortress, fifth lemure on the left
|
||||
Mary had a little lamb/Its fleece was white as snow/When Mary was in trouble/The lamb was first to go
|
||||
Be careful, or this could happen to you!
|
||||
Soon you'll join this fellow in hell! -- the Wizard of Yendor
|
||||
Caution! This grave contains toxic waste
|
||||
Sum quod eris
|
||||
Here lies an Atheist, all dressed up and no place to go
|
||||
Here lies Ezekiel, age 102. The good die young.
|
||||
Here lies my wife: Here let her lie! Now she's at rest and so am I.
|
||||
Here lies Johnny Yeast. Pardon me for not rising.
|
||||
He always lied while on the earth and now he's lying in it
|
||||
I made an ash of myself
|
||||
Soon ripe. Soon rotten. Soon gone. But not forgotten.
|
||||
Here lies the body of Jonathan Blake. Stepped on the gas instead of the brake.
|
||||
Go away!
|
||||
Alas fair Death, 'twas missed in life - some peace and quiet from my wife
|
||||
Applaud, my friends, the comedy is finished.
|
||||
At last... a nice long sleep.
|
||||
Audi Partem Alteram
|
||||
Basil, assaulted by bears
|
||||
Burninated
|
||||
Confusion will be my epitaph
|
||||
Do not open until Christmas
|
||||
Don't be daft, they couldn't hit an elephant at this dist-
|
||||
Don't forget to stop and smell the roses
|
||||
Don't let this happen to you!
|
||||
Dulce et decorum est pro patria mori
|
||||
Et in Arcadia ego
|
||||
Fatty and skinny went to bed. Fatty rolled over and skinny was dead. Skinny Smith 1983-2000.
|
||||
Finally I am becoming stupider no more
|
||||
Follow me to hell
|
||||
...for famous men have the whole earth as their memorial
|
||||
Game over, man. Game over.
|
||||
Go away! I'm trying to take a nap in here! Bloody adventurers...
|
||||
Gone fishin'
|
||||
Good night, sweet prince: And flights of angels sing thee to thy rest!
|
||||
Go Team Ant!
|
||||
He farmed his way here
|
||||
Here lies a programmer. Killed by a fatal error.
|
||||
Here lies Bob - decided to try an acid blob
|
||||
Here lies Dudley, killed by another %&#@#& newt.
|
||||
Here lies Gregg, choked on an egg
|
||||
Here lies Lies. It's True
|
||||
Here lies The Lady's maid, died of a Vorpal Blade
|
||||
Here lies the left foot of Jack, killed by a land mine. Let us know if you find any more of him
|
||||
He waited too long
|
||||
I'd rather be sailing
|
||||
If a man's deeds do not outlive him, of what value is a mark in stone?
|
||||
I'm gonna make it!
|
||||
I took both pills!
|
||||
I will survive!
|
||||
Killed by a black dragon -- This grave is empty
|
||||
Let me out of here!
|
||||
Lookin' good, Medusa.
|
||||
Mrs. Smith, choked on an apple. She left behind grieving husband, daughter, and granddaughter.
|
||||
Nobody believed her when she said her feet were killing her
|
||||
No! I don't want to see my damn conduct!
|
||||
One corpse, sans head
|
||||
On the whole, I'd rather be in Minetown
|
||||
On vacation
|
||||
Oops.
|
||||
Out to Lunch
|
||||
SOLD
|
||||
Someone set us up the bomb!
|
||||
Take my stuff, I don't need it anymore
|
||||
Taking a year dead for tax reasons
|
||||
The reports of my demise are completely accurate
|
||||
(This space for sale)
|
||||
This was actually just a pit, but since there was a corpse, we filled it
|
||||
This way to the crypt
|
||||
Tu quoque, Brute?
|
||||
VACANCY
|
||||
Welcome!
|
||||
Wish you were here!
|
||||
Yea, it got me too
|
||||
You should see the other guy
|
||||
...and they made me engrave my own headstone too!
|
||||
...but the blood has stopped pumping and I am left to decay...
|
||||
<Expletive Deleted>
|
||||
A masochist is never satisfied.
|
||||
Ach, 'twas a wee monster in the loch
|
||||
Adapt. Enjoy. Survive.
|
||||
Adventure, hah! Excitement, hah!
|
||||
After all, what are friends for...
|
||||
After this, nothing will shock me
|
||||
After three days, fish and guests stink
|
||||
Age and treachery will always overcome youth and skill
|
||||
Ageing is not so bad. The real killer is when you stop.
|
||||
Ain't I a stinker?
|
||||
Algernon
|
||||
All else failed...
|
||||
All hail RNG
|
||||
All right, we'll call it a draw!
|
||||
All's well that end well
|
||||
Alone at last!
|
||||
Always attack a floating eye from behind!
|
||||
Am I having fun yet?
|
||||
And I can still crawl, I'm not dead yet!
|
||||
And all I wanted was a free lunch
|
||||
And all of the signs were right there on your face
|
||||
And don't give me that innocent look either!
|
||||
And everyone died. Boo hoo hoo.
|
||||
And here I go again...
|
||||
And nobody cares until somebody famous dies...
|
||||
And so it ends?
|
||||
And so... it begins.
|
||||
And sometimes the bear eats you.
|
||||
And then 'e nailed me 'ead to the floor!
|
||||
And they said it couldn't be done!
|
||||
And what do I look like? The living?
|
||||
And yes, it was ALL his fault!
|
||||
And you said it was pretty here...
|
||||
Another lost soul
|
||||
Any day above ground is a good day!
|
||||
Any more of this and I'll die of a stroke before I'm 30.
|
||||
Anybody seen my head?
|
||||
Anyone for deathmatch?
|
||||
Anything for a change.
|
||||
Anything that kills you makes you ... well, dead
|
||||
Anything worth doing is worth overdoing.
|
||||
Are unicorns supposedly peaceful if you're a virgin? Hah!
|
||||
Are we all being disintegrated, or is it just me?
|
||||
At least I'm good at something
|
||||
Attempted suicide
|
||||
Auri sacra fames
|
||||
Auribus teneo lupum
|
||||
Be prepared
|
||||
Beauty survives
|
||||
Been Here. Now Gone. Had a Good Time.
|
||||
Been through Hell, eh? What did you bring me?
|
||||
Beg your pardon, didn't recognize you, I've changed a lot.
|
||||
Being dead builds character
|
||||
Beloved daughter, a treasure, buried here.
|
||||
Best friends come and go... Mine just die.
|
||||
Better be dead than a fat slave
|
||||
Better luck next time
|
||||
Beware of Discordians bearing answers
|
||||
Beware the ...
|
||||
Bloody Hell...
|
||||
Bloody barbarians!
|
||||
Blown upward out of sight: He sought the leak by candlelight
|
||||
Brains... Brains... Fresh human brains...
|
||||
Buried the cat. Took an hour. Damn thing kept fighting.
|
||||
But I disarmed the trap!
|
||||
CONNECT 1964 - NO CARRIER 1994
|
||||
Call me if you need my phone number!
|
||||
Can YOU fly?
|
||||
Can you believe that thing is STILL moving?
|
||||
Can you come up with some better ending for this?
|
||||
Can you feel anything when I do this?
|
||||
Can you give me mouth to mouth, you just took my breath away.
|
||||
Can't I just have a LITTLE peril?
|
||||
Can't eat, can't sleep, had to bury the husband here.
|
||||
Can't you hit me?!
|
||||
Chaos, panic and disorder. My work here is done.
|
||||
Check enclosed.
|
||||
Check this out! It's my brain!
|
||||
Chivalry is only reasonably dead
|
||||
Coffin for sale. Lifetime guarantee.
|
||||
Come Monday, I'll be all right.
|
||||
Come and see the violence inherent in the system
|
||||
Come back here! I'll bite your bloody knees off!
|
||||
Commodore Business Machines, Inc. Died for our sins.
|
||||
Complain to one who can help you
|
||||
Confess my sins to god? Which one?
|
||||
Confusion will be my epitaph
|
||||
Cooties? Ain't no cooties on me!
|
||||
Could somebody get this noose off me?
|
||||
Could you check again? My name MUST be there.
|
||||
Could you please take a breath mint?
|
||||
Couldn't I be sedated for this?
|
||||
Courage is looking at your setbacks with serenity
|
||||
Cover me, I'm going in!
|
||||
Crash course in brain surgery
|
||||
Cross my fingers for me.
|
||||
Curse god and die
|
||||
Cut to fit
|
||||
De'Ath
|
||||
Dead Again? Pardon me for not getting it right the first time!
|
||||
Dead and loving every moment!
|
||||
Dear wife of mine. Died of a broken heart, after I took it out of her.
|
||||
Don't tread on me!
|
||||
Dragon? What dragon?
|
||||
Drawn and quartered
|
||||
Either I'm dead or my watch has stopped.
|
||||
Eliza -- Was I really alive, or did I just think I was?
|
||||
Elvis
|
||||
Enter not into the path of the wicked
|
||||
Eris? I don't need Eris
|
||||
Eternal Damnation, Come and stay a long while!
|
||||
Even The Dead pay taxes (and they aren't Grateful).
|
||||
Even a tomb stone will say good things when you're down!
|
||||
Ever notice that live is evil backwards?
|
||||
Every day is starting to look like Monday
|
||||
Every day, in every way, I am getting better and better.
|
||||
Every survival kit should include a sense of humor
|
||||
Evil I did dwell; lewd did I live
|
||||
Ex post fucto
|
||||
Excellent day to have a rotten day.
|
||||
Excuse me for not standing up.
|
||||
Experience isn't everything. First, You've got to survive
|
||||
First shalt thou pull out the Holy Pin
|
||||
For a Breath, I Tarry...
|
||||
For recreational use only.
|
||||
For sale: One soul, slightly used. Asking for 3 wishes.
|
||||
For some moments in life, there are no words.
|
||||
Forget Disney World, I'm going to Hell!
|
||||
Forget about the dog, Beware of my wife.
|
||||
Funeral - Real fun.
|
||||
Gawd, it's depressing in here, isn't it?
|
||||
Genuine Exploding Gravestone. (c)Acme Gravestones Inc.
|
||||
Get back here! I'm not finished yet...
|
||||
Go ahead, I dare you to!
|
||||
Go ahead, it's either you or him.
|
||||
Goldilocks -- This casket is just right
|
||||
Gone But Not Forgotten
|
||||
Gone Underground For Good
|
||||
Gone away owin' more than he could pay.
|
||||
Gone, but not forgiven
|
||||
Got a life. Didn't know what to do with it.
|
||||
Grave? But I was cremated!
|
||||
Greetings from Hell - Wish you were here.
|
||||
HELP! It's dark in here... Oh, my eyes are closed - sorry
|
||||
Ha! I NEVER pay income tax!
|
||||
Have you come to raise the dead?
|
||||
Having a good time can be deadly.
|
||||
Having a great time. Where am I exactly??
|
||||
He died of the flux.
|
||||
He died today... May we rest in peace!
|
||||
He got the upside, I got the downside.
|
||||
He lost his face when he was beheaded.
|
||||
He missed me first.
|
||||
He's not dead, he just smells that way.
|
||||
Help! I've fallen and I can't get up!
|
||||
Help, I can't wake up!
|
||||
Here lies Pinocchio
|
||||
Here lies the body of John Round. Lost at sea and never found.
|
||||
Here there be dragons
|
||||
Hey, I didn't write this stuff!
|
||||
Hodie mihi, cras tibi
|
||||
Hold my calls
|
||||
Home Sweet Hell
|
||||
Humpty Dumpty, a Bad Egg. He was pushed off the wall.
|
||||
I KNEW this would happen if I lived long enough.
|
||||
I TOLD you I was sick!
|
||||
I ain't broke but I am badly bent.
|
||||
I ain't old. I'm chronologically advantaged.
|
||||
I am NOT a vampire. I just like to bite..nibble, really!
|
||||
I am here. Wish you were fine.
|
||||
I am not dead yet, but watch for further reports.
|
||||
I believe them bones are me.
|
||||
I broke his brain.
|
||||
I can feel it. My mind. It's going. I can feel it.
|
||||
I can't go to Hell. They're afraid I'm gonna take over!
|
||||
I can't go to hell, they don't want me.
|
||||
I didn't believe in reincarnation the last time, either.
|
||||
I didn't mean it when I said 'Bite me'
|
||||
I died laughing
|
||||
I disbelieved in reincarnation in my last life, too.
|
||||
I hacked myself to death
|
||||
I have all the time in the world
|
||||
I knew I'd find a use for this gravestone!
|
||||
I know my mind. And it's around here someplace.
|
||||
I lied! I'll never be alright!
|
||||
I like it better in the dark.
|
||||
I like to be here when I can.
|
||||
I may rise but I refuse to shine.
|
||||
I never get any either.
|
||||
I said hit HIM with the fireball, not me!
|
||||
I told you I would never say goodbye.
|
||||
I used to be amusing. Now I'm just disgusting.
|
||||
I used up all my sick days, so now I'm calling in dead.
|
||||
I was killed by <illegible scrawl>
|
||||
I was somebody. Who, is no business of yours.
|
||||
I will not go quietly.
|
||||
I'd give you a piece of my mind... but I can't find it.
|
||||
I'd rather be breathing
|
||||
I'll be back!
|
||||
I'll be mellow when I'm dead. For now, let's PARTY!
|
||||
I'm doing this only for tax purposes.
|
||||
I'm not afraid of Death! What's he gonna do? Kill me?
|
||||
I'm not getting enough money, so I'm not going to engrave anything useful here.
|
||||
I'm not saying anything.
|
||||
I'm weeth stupeed --->
|
||||
If you thought you had problems...
|
||||
Ignorance kills daily.
|
||||
Ignore me... I'm just here for my looks!
|
||||
Ilene Toofar -- Fell off a cliff
|
||||
Is that all?
|
||||
Is there life before Death?
|
||||
Is this a joke, or a grave matter?
|
||||
It happens sometimes. People just explode.
|
||||
It must be Thursday. I never could get the hang of Thursdays.
|
||||
It wasn't a fair fight
|
||||
It wasn't so easy.
|
||||
It's Loot, Pillage and THEN Burn...
|
||||
Just doing my job here
|
||||
Killed by diarrhea of mouth and constipation of brain.
|
||||
Let her RIP
|
||||
Let it be; I am dead.
|
||||
Let's play Hide the Corpse
|
||||
Life is NOT a dream
|
||||
Madge Ination -- It wasn't all in my head
|
||||
Meet me in Heaven
|
||||
Move on, there's nothing to see here.
|
||||
Mr. Flintstone -- Yabba-dabba-done
|
||||
My heart is not in this
|
||||
No one ever died from it
|
||||
No, you want room 12A, next door.
|
||||
Nope. No trap on that chest. I swear.
|
||||
Not again!
|
||||
Not every soil can bear all things
|
||||
Now I have a life
|
||||
Now I lay thee down to sleep... wanna join me?
|
||||
OK, here is a question: Where ARE your tanlines?
|
||||
Obesa Cantavit
|
||||
Oh! An untimely death.
|
||||
Oh, by the way, how was my funeral?
|
||||
Oh, honey..I missed you! She said, and fired again.
|
||||
Ok, so the light does go off. Now let me out of here.
|
||||
One stone brain
|
||||
Ooh! Somebody STOP me!
|
||||
Oops!
|
||||
Out for the night. Leave a message.
|
||||
Ow! Do that again!
|
||||
Pardon my dust.
|
||||
Part of me still works.
|
||||
Please, not in front of those orcs!
|
||||
Prepare to meet me in Heaven
|
||||
R2D2 -- Rest, Tin Piece
|
||||
Relax. Nothing ever happens on the first level.
|
||||
Res omnia mea culpa est
|
||||
Rest In Pieces
|
||||
Rest, rest, perturbed spirit.
|
||||
Rip Torn
|
||||
She always said her feet were killing her but nobody believed her.
|
||||
She died of a chest cold.
|
||||
So let it be written, so let it be done!
|
||||
So then I says, How do I know you're the real angel of death?
|
||||
Some patients insist on dying.
|
||||
Some people have it dead easy, don't they?
|
||||
Some things are better left buried.
|
||||
Sure, trust me, I'm a lawyer...
|
||||
Thank God I wore my corset, because I think my sides have split.
|
||||
That is all
|
||||
The Gods DO have a sense of humor: I'm living proof!
|
||||
The frog's dead. He Kermitted suicide.
|
||||
This dungeon is a pushover
|
||||
This elevator doesn't go to Heaven
|
||||
This gravestone is shareware. To register, please send me 10 zorkmids
|
||||
This gravestone provided by The Yendorian Grave Services Inc.
|
||||
This is not an important part of my life.
|
||||
This one's on me.
|
||||
This side up
|
||||
Tim Burr -- Smashed by a tree
|
||||
Tone it down a bit, I'm trying to get some rest here.
|
||||
Virtually Alive
|
||||
We Will Meet Again.
|
||||
Weep not, he is at rest
|
||||
Welcome to Dante's. What level please?
|
||||
Well, at least they listened to my sermon...
|
||||
Went to be an angel.
|
||||
What are you doing over there?
|
||||
What are you smiling at?
|
||||
What can you say, Death's got appeal...!
|
||||
What health care?
|
||||
What pit?
|
||||
When the gods want to punish you, they answer your prayers.
|
||||
Where e'er you be let your wind go free. Keeping it in was the death of me!
|
||||
Where's my refund?
|
||||
Will let you know for sure in a day or two...
|
||||
Wizards are wimps
|
||||
Worms at work, do not disturb!
|
||||
Would you mind moving a bit? I'm short of breath down here.
|
||||
Would you quit being evil over my shoulder?
|
||||
Ya really had me going baby, but now I'm gone.
|
||||
Yes Dear, just a few more minutes...
|
||||
You said it wasn't poisonous!
|
||||
You set my heart aflame. You gave me heartburn.
|
||||
538
dat/gehennom.des
538
dat/gehennom.des
@@ -35,9 +35,9 @@ ENDMAP
|
||||
# The shrine to Moloch.
|
||||
REGION:(01,06,05,14),lit,"temple"
|
||||
# The Morgues
|
||||
REGION:(19,01,24,08),unlit,"morgue",filled,true
|
||||
REGION:(09,14,16,18),unlit,"morgue",filled,true
|
||||
REGION:(37,09,43,14),unlit,"morgue",filled,true
|
||||
REGION:(19,01,24,08),unlit,"morgue",filled,irregular
|
||||
REGION:(09,14,16,18),unlit,"morgue",filled,irregular
|
||||
REGION:(37,09,43,14),unlit,"morgue",filled,irregular
|
||||
# Stairs
|
||||
STAIR:(01,01),down
|
||||
# Branch location
|
||||
@@ -60,60 +60,60 @@ NON_DIGGABLE:(00,00,75,19)
|
||||
# note: no priest(esse)s or monks - maybe Moloch has a *special*
|
||||
# fate reserved for members of *those* classes.
|
||||
#
|
||||
OBJECT:'%',"corpse",random,"archeologist",0
|
||||
OBJECT:'%',"corpse",random,"archeologist",0
|
||||
OBJECT:'%',"corpse",random,"barbarian",0
|
||||
OBJECT:'%',"corpse",random,"barbarian",0
|
||||
OBJECT:'%',"corpse",random,"caveman",0
|
||||
OBJECT:'%',"corpse",random,"cavewoman",0
|
||||
OBJECT:'%',"corpse",random,"healer",0
|
||||
OBJECT:'%',"corpse",random,"healer",0
|
||||
OBJECT:'%',"corpse",random,"knight",0
|
||||
OBJECT:'%',"corpse",random,"knight",0
|
||||
OBJECT:'%',"corpse",random,"ranger",0
|
||||
OBJECT:'%',"corpse",random,"ranger",0
|
||||
OBJECT:'%',"corpse",random,"rogue",0
|
||||
OBJECT:'%',"corpse",random,"rogue",0
|
||||
OBJECT:'%',"corpse",random,"samurai",0
|
||||
OBJECT:'%',"corpse",random,"samurai",0
|
||||
OBJECT:'%',"corpse",random,"tourist",0
|
||||
OBJECT:'%',"corpse",random,"tourist",0
|
||||
OBJECT:'%',"corpse",random,"valkyrie",0
|
||||
OBJECT:'%',"corpse",random,"valkyrie",0
|
||||
OBJECT:'%',"corpse",random,"wizard",0
|
||||
OBJECT:'%',"corpse",random,"wizard",0
|
||||
OBJECT:('%',"corpse"),random,montype:"archeologist"
|
||||
OBJECT:('%',"corpse"),random,montype:"archeologist"
|
||||
OBJECT:('%',"corpse"),random,montype:"barbarian"
|
||||
OBJECT:('%',"corpse"),random,montype:"barbarian"
|
||||
OBJECT:('%',"corpse"),random,montype:"caveman"
|
||||
OBJECT:('%',"corpse"),random,montype:"cavewoman"
|
||||
OBJECT:('%',"corpse"),random,montype:"healer"
|
||||
OBJECT:('%',"corpse"),random,montype:"healer"
|
||||
OBJECT:('%',"corpse"),random,montype:"knight"
|
||||
OBJECT:('%',"corpse"),random,montype:"knight"
|
||||
OBJECT:('%',"corpse"),random,montype:"ranger"
|
||||
OBJECT:('%',"corpse"),random,montype:"ranger"
|
||||
OBJECT:('%',"corpse"),random,montype:"rogue"
|
||||
OBJECT:('%',"corpse"),random,montype:"rogue"
|
||||
OBJECT:('%',"corpse"),random,montype:"samurai"
|
||||
OBJECT:('%',"corpse"),random,montype:"samurai"
|
||||
OBJECT:('%',"corpse"),random,montype:"tourist"
|
||||
OBJECT:('%',"corpse"),random,montype:"tourist"
|
||||
OBJECT:('%',"corpse"),random,montype:"valkyrie"
|
||||
OBJECT:('%',"corpse"),random,montype:"valkyrie"
|
||||
OBJECT:('%',"corpse"),random,montype:"wizard"
|
||||
OBJECT:('%',"corpse"),random,montype:"wizard"
|
||||
#
|
||||
# Some random weapons and armor.
|
||||
#
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:'[',random
|
||||
OBJECT:'[',random
|
||||
OBJECT:'[',random
|
||||
OBJECT:'[',random
|
||||
OBJECT:')',random
|
||||
OBJECT:')',random
|
||||
OBJECT:')',random
|
||||
OBJECT:')',random
|
||||
#
|
||||
# Some random loot.
|
||||
#
|
||||
OBJECT:'*',"ruby",random
|
||||
OBJECT:'*',random,random
|
||||
OBJECT:'*',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'+',random,random
|
||||
OBJECT:'+',random,random
|
||||
OBJECT:'(',random,random
|
||||
OBJECT:'(',random,random
|
||||
OBJECT:'(',random,random
|
||||
OBJECT:('*',"ruby"),random
|
||||
OBJECT:'*',random
|
||||
OBJECT:'*',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'/',random
|
||||
OBJECT:'/',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'+',random
|
||||
OBJECT:'+',random
|
||||
OBJECT:'(',random
|
||||
OBJECT:'(',random
|
||||
OBJECT:'(',random
|
||||
|
||||
# (Not so) Random traps.
|
||||
TRAP:"spiked pit", (05,02)
|
||||
@@ -130,36 +130,36 @@ TRAP:"magic", random
|
||||
|
||||
# Random monsters.
|
||||
# The ghosts.
|
||||
MONSTER:' ',"ghost",random
|
||||
MONSTER:' ',"ghost",random
|
||||
MONSTER:' ',"ghost",random
|
||||
MONSTER:' ',"ghost",random
|
||||
MONSTER:' ',"ghost",random
|
||||
MONSTER:' ',"ghost",random
|
||||
MONSTER:(' ',"ghost"),random
|
||||
MONSTER:(' ',"ghost"),random
|
||||
MONSTER:(' ',"ghost"),random
|
||||
MONSTER:(' ',"ghost"),random
|
||||
MONSTER:(' ',"ghost"),random
|
||||
MONSTER:(' ',"ghost"),random
|
||||
# Add a few bats for atmosphere.
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:'B',"vampire bat",random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
MONSTER:('B',"vampire bat"),random
|
||||
# And a lich for good measure.
|
||||
MONSTER:'L',random,random
|
||||
MONSTER:'L',random
|
||||
# Some undead nasties for good measure
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'Z',random,random
|
||||
MONSTER:'Z',random,random
|
||||
MONSTER:'Z',random,random
|
||||
MONSTER:'Z',random,random
|
||||
MONSTER:'M',random,random
|
||||
MONSTER:'M',random,random
|
||||
MONSTER:'M',random,random
|
||||
MONSTER:'M',random,random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'Z',random
|
||||
MONSTER:'Z',random
|
||||
MONSTER:'Z',random
|
||||
MONSTER:'Z',random
|
||||
MONSTER:'M',random
|
||||
MONSTER:'M',random
|
||||
MONSTER:'M',random
|
||||
MONSTER:'M',random
|
||||
#
|
||||
# The Juiblex level
|
||||
#
|
||||
MAZE:"juiblex",' '
|
||||
FLAGS:noteleport,shortsighted
|
||||
INIT_MAP:'.','}',true,true,unlit,false
|
||||
INIT_MAP:mines,'.','}',true,true,unlit,false
|
||||
# guarantee at least one open spot to ensure successful stair placement
|
||||
GEOMETRY:left,bottom
|
||||
MAP
|
||||
@@ -169,7 +169,7 @@ MAP
|
||||
}}}}.}}}
|
||||
}}}}}}}}
|
||||
ENDMAP
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:('`',"boulder"),random
|
||||
GEOMETRY:right,top
|
||||
MAP
|
||||
}}}}}}}}
|
||||
@@ -178,7 +178,7 @@ MAP
|
||||
}}...}}}
|
||||
}}}}}}}}
|
||||
ENDMAP
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:('`',"boulder"),random
|
||||
# lair
|
||||
GEOMETRY:center,center
|
||||
MAP
|
||||
@@ -202,8 +202,12 @@ MAP
|
||||
..}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}..
|
||||
ENDMAP
|
||||
# Random registers
|
||||
RANDOM_MONSTERS:'j','b','P','F'
|
||||
RANDOM_PLACES:(04,02),(46,02),(04,15),(46,15)
|
||||
$monster = monster: { 'j','b','P','F' }
|
||||
SHUFFLE: $monster
|
||||
|
||||
$place = { (04,02),(46,02),(04,15),(46,15) }
|
||||
SHUFFLE: $place
|
||||
|
||||
# Dungeon description
|
||||
REGION:(00,00,50,17),unlit,"swamp"
|
||||
MAZEWALK:(00,09),west
|
||||
@@ -213,57 +217,57 @@ STAIR:levregion(69,00,79,20),(0,0,50,17),up
|
||||
BRANCH:levregion(01,00,11,20),(0,0,50,17)
|
||||
TELEPORT_REGION:levregion(01,00,11,20),(0,0,50,17),up
|
||||
TELEPORT_REGION:levregion(69,00,79,20),(0,0,50,17),down
|
||||
FOUNTAIN:place[0]
|
||||
MONSTER:'m',"giant mimic",place[1],m_feature "fountain"
|
||||
MONSTER:'m',"giant mimic",place[2],m_feature "fountain"
|
||||
MONSTER:'m',"giant mimic",place[3],m_feature "fountain"
|
||||
FOUNTAIN:$place[0]
|
||||
MONSTER:('m',"giant mimic"),$place[1],m_feature "fountain"
|
||||
MONSTER:('m',"giant mimic"),$place[2],m_feature "fountain"
|
||||
MONSTER:('m',"giant mimic"),$place[3],m_feature "fountain"
|
||||
# The demon of the swamp
|
||||
MONSTER:'&',"Juiblex",(25,08)
|
||||
MONSTER:('&',"Juiblex"),(25,08)
|
||||
# And a couple demons
|
||||
MONSTER:'i',"lemure",(43,08)
|
||||
MONSTER:'i',"lemure",(44,08)
|
||||
MONSTER:'i',"lemure",(45,08)
|
||||
MONSTER:('i',"lemure"),(43,08)
|
||||
MONSTER:('i',"lemure"),(44,08)
|
||||
MONSTER:('i',"lemure"),(45,08)
|
||||
# Some liquids and gems
|
||||
OBJECT:'*',random,(43,06)
|
||||
OBJECT:'*',random,(45,06)
|
||||
OBJECT:'!',random,(43,09)
|
||||
OBJECT:'!',random,(44,09)
|
||||
OBJECT:'!',random,(45,09)
|
||||
OBJECT:'*',(43,06)
|
||||
OBJECT:'*',(45,06)
|
||||
OBJECT:'!',(43,09)
|
||||
OBJECT:'!',(44,09)
|
||||
OBJECT:'!',(45,09)
|
||||
# And lots of blobby monsters
|
||||
MONSTER:monster[0],random,(25,06)
|
||||
MONSTER:monster[1],random,(24,07)
|
||||
MONSTER:monster[2],random,(26,07)
|
||||
MONSTER:monster[3],random,(23,08)
|
||||
MONSTER:monster[3],random,(27,08)
|
||||
MONSTER:monster[2],random,(24,09)
|
||||
MONSTER:monster[1],random,(26,09)
|
||||
MONSTER:monster[0],random,(25,10)
|
||||
MONSTER:'j',random,random
|
||||
MONSTER:'j',random,random
|
||||
MONSTER:'j',random,random
|
||||
MONSTER:'j',random,random
|
||||
MONSTER:'P',random,random
|
||||
MONSTER:'P',random,random
|
||||
MONSTER:'P',random,random
|
||||
MONSTER:'P',random,random
|
||||
MONSTER:'b',random,random
|
||||
MONSTER:'b',random,random
|
||||
MONSTER:'b',random,random
|
||||
MONSTER:'F',random,random
|
||||
MONSTER:'F',random,random
|
||||
MONSTER:'F',random,random
|
||||
MONSTER:'m',random,random
|
||||
MONSTER:'m',random,random
|
||||
MONSTER:';',"jellyfish",random
|
||||
MONSTER:';',"jellyfish",random
|
||||
MONSTER:$monster[0],(25,06)
|
||||
MONSTER:$monster[1],(24,07)
|
||||
MONSTER:$monster[2],(26,07)
|
||||
MONSTER:$monster[3],(23,08)
|
||||
MONSTER:$monster[3],(27,08)
|
||||
MONSTER:$monster[2],(24,09)
|
||||
MONSTER:$monster[1],(26,09)
|
||||
MONSTER:$monster[0],(25,10)
|
||||
MONSTER:'j',random
|
||||
MONSTER:'j',random
|
||||
MONSTER:'j',random
|
||||
MONSTER:'j',random
|
||||
MONSTER:'P',random
|
||||
MONSTER:'P',random
|
||||
MONSTER:'P',random
|
||||
MONSTER:'P',random
|
||||
MONSTER:'b',random
|
||||
MONSTER:'b',random
|
||||
MONSTER:'b',random
|
||||
MONSTER:'F',random
|
||||
MONSTER:'F',random
|
||||
MONSTER:'F',random
|
||||
MONSTER:'m',random
|
||||
MONSTER:'m',random
|
||||
MONSTER:(';',"jellyfish"),random
|
||||
MONSTER:(';',"jellyfish"),random
|
||||
# Some random objects
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'`',"boulder",random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:('`',"boulder"),random
|
||||
# Some traps
|
||||
TRAP:"sleep gas",random
|
||||
TRAP:"sleep gas",random
|
||||
@@ -305,30 +309,30 @@ STAIR:levregion(01,00,12,20),levregion(20,01,70,20),up
|
||||
BRANCH:levregion(01,00,12,20),levregion(20,01,70,20)
|
||||
TELEPORT_REGION:levregion(01,00,12,20),levregion(20,01,70,20)
|
||||
# Wall "ruins"
|
||||
OBJECT:'`',"boulder",(19,02)
|
||||
OBJECT:'`',"boulder",(20,02)
|
||||
OBJECT:'`',"boulder",(21,02)
|
||||
OBJECT:'`',"boulder",(36,02)
|
||||
OBJECT:'`',"boulder",(36,03)
|
||||
OBJECT:'`',"boulder",(06,04)
|
||||
OBJECT:'`',"boulder",(05,05)
|
||||
OBJECT:'`',"boulder",(06,05)
|
||||
OBJECT:'`',"boulder",(07,05)
|
||||
OBJECT:'`',"boulder",(39,05)
|
||||
OBJECT:'`',"boulder",(08,08)
|
||||
OBJECT:'`',"boulder",(09,08)
|
||||
OBJECT:'`',"boulder",(10,08)
|
||||
OBJECT:'`',"boulder",(11,08)
|
||||
OBJECT:'`',"boulder",(06,10)
|
||||
OBJECT:'`',"boulder",(05,11)
|
||||
OBJECT:'`',"boulder",(06,11)
|
||||
OBJECT:'`',"boulder",(07,11)
|
||||
OBJECT:'`',"boulder",(21,11)
|
||||
OBJECT:'`',"boulder",(21,12)
|
||||
OBJECT:'`',"boulder",(13,13)
|
||||
OBJECT:'`',"boulder",(14,13)
|
||||
OBJECT:'`',"boulder",(15,13)
|
||||
OBJECT:'`',"boulder",(14,14)
|
||||
OBJECT:('`',"boulder"),(19,02)
|
||||
OBJECT:('`',"boulder"),(20,02)
|
||||
OBJECT:('`',"boulder"),(21,02)
|
||||
OBJECT:('`',"boulder"),(36,02)
|
||||
OBJECT:('`',"boulder"),(36,03)
|
||||
OBJECT:('`',"boulder"),(06,04)
|
||||
OBJECT:('`',"boulder"),(05,05)
|
||||
OBJECT:('`',"boulder"),(06,05)
|
||||
OBJECT:('`',"boulder"),(07,05)
|
||||
OBJECT:('`',"boulder"),(39,05)
|
||||
OBJECT:('`',"boulder"),(08,08)
|
||||
OBJECT:('`',"boulder"),(09,08)
|
||||
OBJECT:('`',"boulder"),(10,08)
|
||||
OBJECT:('`',"boulder"),(11,08)
|
||||
OBJECT:('`',"boulder"),(06,10)
|
||||
OBJECT:('`',"boulder"),(05,11)
|
||||
OBJECT:('`',"boulder"),(06,11)
|
||||
OBJECT:('`',"boulder"),(07,11)
|
||||
OBJECT:('`',"boulder"),(21,11)
|
||||
OBJECT:('`',"boulder"),(21,12)
|
||||
OBJECT:('`',"boulder"),(13,13)
|
||||
OBJECT:('`',"boulder"),(14,13)
|
||||
OBJECT:('`',"boulder"),(15,13)
|
||||
OBJECT:('`',"boulder"),(14,14)
|
||||
# Doors
|
||||
DOOR:closed,(23,02)
|
||||
DOOR:open,(31,03)
|
||||
@@ -361,56 +365,56 @@ TRAP:"fire", random
|
||||
TRAP:"magic", random
|
||||
TRAP:"magic", random
|
||||
# Some random objects
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# The resident nasty
|
||||
MONSTER:'&',"Orcus",(33,15)
|
||||
MONSTER:('&',"Orcus"),(33,15)
|
||||
# And its preferred companions
|
||||
MONSTER:'Z',"human zombie",(32,15)
|
||||
MONSTER:' ',"shade",(32,14)
|
||||
MONSTER:' ',"shade",(32,16)
|
||||
MONSTER:'V',"vampire",(35,16)
|
||||
MONSTER:'V',"vampire",(35,14)
|
||||
MONSTER:'V',"vampire lord",(36,14)
|
||||
MONSTER:'V',"vampire lord",(36,15)
|
||||
MONSTER:('Z',"human zombie"),(32,15)
|
||||
MONSTER:(' ',"shade"),(32,14)
|
||||
MONSTER:(' ',"shade"),(32,16)
|
||||
MONSTER:('V',"vampire"),(35,16)
|
||||
MONSTER:('V',"vampire"),(35,14)
|
||||
MONSTER:('V',"vampire lord"),(36,14)
|
||||
MONSTER:('V',"vampire lord"),(36,15)
|
||||
# Randomly placed companions
|
||||
MONSTER:'Z',"skeleton",random
|
||||
MONSTER:'Z',"skeleton",random
|
||||
MONSTER:'Z',"skeleton",random
|
||||
MONSTER:'Z',"skeleton",random
|
||||
MONSTER:'Z',"skeleton",random
|
||||
MONSTER:' ',"shade",random
|
||||
MONSTER:' ',"shade",random
|
||||
MONSTER:' ',"shade",random
|
||||
MONSTER:' ',"shade",random
|
||||
MONSTER:'Z',"giant zombie",random
|
||||
MONSTER:'Z',"giant zombie",random
|
||||
MONSTER:'Z',"giant zombie",random
|
||||
MONSTER:'Z',"ettin zombie",random
|
||||
MONSTER:'Z',"ettin zombie",random
|
||||
MONSTER:'Z',"ettin zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'Z',"human zombie",random
|
||||
MONSTER:'V',"vampire",random
|
||||
MONSTER:'V',"vampire",random
|
||||
MONSTER:'V',"vampire",random
|
||||
MONSTER:'V',"vampire lord",random
|
||||
MONSTER:'V',"vampire lord",random
|
||||
MONSTER:('Z',"skeleton"),random
|
||||
MONSTER:('Z',"skeleton"),random
|
||||
MONSTER:('Z',"skeleton"),random
|
||||
MONSTER:('Z',"skeleton"),random
|
||||
MONSTER:('Z',"skeleton"),random
|
||||
MONSTER:(' ',"shade"),random
|
||||
MONSTER:(' ',"shade"),random
|
||||
MONSTER:(' ',"shade"),random
|
||||
MONSTER:(' ',"shade"),random
|
||||
MONSTER:('Z',"giant zombie"),random
|
||||
MONSTER:('Z',"giant zombie"),random
|
||||
MONSTER:('Z',"giant zombie"),random
|
||||
MONSTER:('Z',"ettin zombie"),random
|
||||
MONSTER:('Z',"ettin zombie"),random
|
||||
MONSTER:('Z',"ettin zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('Z',"human zombie"),random
|
||||
MONSTER:('V',"vampire"),random
|
||||
MONSTER:('V',"vampire"),random
|
||||
MONSTER:('V',"vampire"),random
|
||||
MONSTER:('V',"vampire lord"),random
|
||||
MONSTER:('V',"vampire lord"),random
|
||||
# A few more for the party
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
#
|
||||
# The Asmodeus Level
|
||||
#
|
||||
@@ -447,18 +451,18 @@ NON_DIGGABLE:(00,00,20,11)
|
||||
# Entire main area
|
||||
REGION:(01,01,20,10),unlit,"ordinary"
|
||||
# The fellow in residence
|
||||
MONSTER:'&',"Asmodeus",(12,07)
|
||||
MONSTER:('&',"Asmodeus"),(12,07)
|
||||
# Some random weapons and armor.
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:'*',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'[',random
|
||||
OBJECT:'[',random
|
||||
OBJECT:')',random
|
||||
OBJECT:')',random
|
||||
OBJECT:'*',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
# Some traps.
|
||||
TRAP:"spiked pit", (05,02)
|
||||
TRAP:"fire", (08,06)
|
||||
@@ -468,13 +472,13 @@ TRAP:"fire", random
|
||||
TRAP:"magic", random
|
||||
TRAP:"magic", random
|
||||
# Random monsters.
|
||||
MONSTER:' ',"ghost",(11,07)
|
||||
MONSTER:'&',"horned devil",(10,05)
|
||||
MONSTER:'L',random,random
|
||||
MONSTER:(' ',"ghost"),(11,07)
|
||||
MONSTER:('&',"horned devil"),(10,05)
|
||||
MONSTER:'L',random
|
||||
# Some Vampires for good measure
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'V',random
|
||||
# Second part
|
||||
GEOMETRY:half-right,center
|
||||
MAP
|
||||
@@ -488,9 +492,9 @@ MAZEWALK:(32,02),east
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,32,04)
|
||||
DOOR:closed,(32,02)
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'&',random
|
||||
MONSTER:'&',random
|
||||
MONSTER:'&',random
|
||||
TRAP:"anti magic", random
|
||||
TRAP:"fire", random
|
||||
TRAP:"magic", random
|
||||
@@ -523,18 +527,18 @@ NON_DIGGABLE:(00,00,46,12)
|
||||
MAZEWALK:(00,06),west
|
||||
STAIR:(44,06),down
|
||||
# The fellow in residence
|
||||
MONSTER:'&',"Baalzebub",(35,06)
|
||||
MONSTER:('&',"Baalzebub"),(35,06)
|
||||
# Some random weapons and armor.
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:'*',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'[',random
|
||||
OBJECT:'[',random
|
||||
OBJECT:')',random
|
||||
OBJECT:')',random
|
||||
OBJECT:'*',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
# Some traps.
|
||||
TRAP:"spiked pit", random
|
||||
TRAP:"fire", random
|
||||
@@ -544,14 +548,14 @@ TRAP:"fire", random
|
||||
TRAP:"magic", random
|
||||
TRAP:"magic", random
|
||||
# Random monsters.
|
||||
MONSTER:' ',"ghost",(37,07)
|
||||
MONSTER:'&',"horned devil",(32,05)
|
||||
MONSTER:'&',"barbed devil",(38,07)
|
||||
MONSTER:'L',random,random
|
||||
MONSTER:(' ',"ghost"),(37,07)
|
||||
MONSTER:('&',"horned devil"),(32,05)
|
||||
MONSTER:('&',"barbed devil"),(38,07)
|
||||
MONSTER:'L',random
|
||||
# Some Vampires for good measure
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'V',random
|
||||
#
|
||||
# The Sanctum Level
|
||||
#
|
||||
@@ -582,7 +586,7 @@ MAP
|
||||
ENDMAP
|
||||
REGION:(15,07,21,10),lit,"temple"
|
||||
ALTAR:(18,08),noalign,sanctum
|
||||
REGION:(41,06,48,11),unlit,"morgue",filled,true
|
||||
REGION:(41,06,48,11),unlit,"morgue",filled,irregular
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(00,00,75,19)
|
||||
# Invisible barrier separating the left & right halves of the level
|
||||
@@ -635,44 +639,44 @@ TRAP:"anti magic", random
|
||||
TRAP:"fire", random
|
||||
TRAP:"magic", random
|
||||
# Some random objects
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:'[',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:')',random,random
|
||||
OBJECT:'*',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'[',random
|
||||
OBJECT:'[',random
|
||||
OBJECT:'[',random
|
||||
OBJECT:'[',random
|
||||
OBJECT:')',random
|
||||
OBJECT:')',random
|
||||
OBJECT:'*',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
# Some monsters.
|
||||
MONSTER:'&',"horned devil",(14,12),hostile
|
||||
MONSTER:'&',"barbed devil",(18,08),hostile
|
||||
MONSTER:'&',"erinys",(10,04),hostile
|
||||
MONSTER:'&',"marilith",(07,09),hostile
|
||||
MONSTER:'&',"nalfeshnee",(27,08),hostile
|
||||
MONSTER:('&',"horned devil"),(14,12),hostile
|
||||
MONSTER:('&',"barbed devil"),(18,08),hostile
|
||||
MONSTER:('&',"erinys"),(10,04),hostile
|
||||
MONSTER:('&',"marilith"),(07,09),hostile
|
||||
MONSTER:('&',"nalfeshnee"),(27,08),hostile
|
||||
# Moloch's horde
|
||||
MONSTER:'@',"aligned priest",(20,03),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(15,04),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(11,05),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(11,07),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(11,09),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(11,12),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(15,13),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(17,13),noalign,hostile
|
||||
MONSTER:'@',"aligned priest",(21,13),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(20,03),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(15,04),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(11,05),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(11,07),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(11,09),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(11,12),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(15,13),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(17,13),noalign,hostile
|
||||
MONSTER:('@',"aligned priest"),(21,13),noalign,hostile
|
||||
# A few nasties
|
||||
MONSTER:'L',random,random
|
||||
MONSTER:'L',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'V',random,random
|
||||
MONSTER:'L',random
|
||||
MONSTER:'L',random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'V',random
|
||||
MONSTER:'V',random
|
||||
STAIR:(63,15),up
|
||||
# Teleporting to this level is allowed after the invocation creates its
|
||||
# entrance. Force arrival in that case to be on rightmost third of level.
|
||||
|
||||
2
dat/help
2
dat/help
@@ -147,7 +147,7 @@ Commands:
|
||||
w Wield weapon. w- means wield nothing, use bare hands.
|
||||
W Wear armor.
|
||||
x Swap wielded and secondary weapons.
|
||||
X Switch the game to explore (discovery) mode.
|
||||
X Toggle two-weapon combat.
|
||||
^X Show your attributes.
|
||||
z Zap a wand. (Use y instead of z if number_pad is -1.)
|
||||
Z Cast a spell. (Use Y instead of Z if number_pad is -1.)
|
||||
|
||||
2
dat/hh
2
dat/hh
@@ -32,7 +32,6 @@ O options set options
|
||||
\ known display list of what's been discovered
|
||||
v version display version number
|
||||
V history display game history
|
||||
X explore switch the game to explore (discovery) mode
|
||||
^A again redo the previous command (^A denotes the keystroke CTRL-A)
|
||||
^R redraw redraw the screen
|
||||
^P prevmsg repeat previous message (subsequent ^P's repeat earlier ones)
|
||||
@@ -70,6 +69,7 @@ T takeoff take off some armor
|
||||
w wield wield a weapon (w- wield nothing)
|
||||
W wear put on some armor
|
||||
x xchange swap wielded and secondary weapons
|
||||
X twoweapon toggle two-weapon combat
|
||||
z zap zap a wand (use y instead of z if number_pad is -1)
|
||||
Z Zap cast a spell (use Y instead of Z if number_pad is -1)
|
||||
< up go up the stairs
|
||||
|
||||
114
dat/history
114
dat/history
@@ -1,4 +1,4 @@
|
||||
NetHack History file for release 3.4
|
||||
NetHack History file for release 3.6
|
||||
|
||||
Behold, mortal, the origins of NetHack...
|
||||
|
||||
@@ -120,7 +120,6 @@ publicly available web-site listing all the bugs that had been discovered.
|
||||
Despite that constantly growing bug list, 3.3 proved stable enough to last
|
||||
for more than a year and a half.
|
||||
|
||||
|
||||
The 3.4 development team initially consisted of Michael Allison, Ken Arromdee,
|
||||
David Cohrs, Jessie Collet, Kevin Hugo, Ken Lorber, Dean Luick, Pat Rankin,
|
||||
Mike Stephenson, Janet Walz, and Paul Winner, with Warwick Allison joining
|
||||
@@ -129,20 +128,20 @@ just before the release of NetHack 3.4.0 in March 2002.
|
||||
As with version 3.3, various people contributed to the game as a whole as
|
||||
well as supporting ports on the different platforms that NetHack runs on:
|
||||
|
||||
Pat Rankin maintained 3.5 for VMS.
|
||||
Pat Rankin maintained 3.4 for VMS.
|
||||
|
||||
Michael Allison maintained NetHack 3.5 for the MS-DOS platform.
|
||||
Michael Allison maintained NetHack 3.4 for the MS-DOS platform.
|
||||
Paul Winner and Yitzhak Sapir provided encouragement.
|
||||
|
||||
Dean Luick, Mark Modrall, and Kevin Hugo maintained and enhanced the
|
||||
Macintosh port of 3.4.
|
||||
|
||||
Michael Allison, David Cohrs, Alex Kompel, Dion Nicolaas, and Yitzhak Sapir
|
||||
maintained and enhanced 3.5 for the Microsoft Windows platform. Alex Kompel
|
||||
maintained and enhanced 3.4 for the Microsoft Windows platform. Alex Kompel
|
||||
contributed a new graphical interface for the Windows port. Alex Kompel also
|
||||
contributed a Windows CE port for 3.4.1.
|
||||
|
||||
Ron Van Iwaarden maintained 3.5 for OS/2.
|
||||
Ron Van Iwaarden maintained 3.4 for OS/2.
|
||||
|
||||
Janne Salmijarvi and Teemu Suikki maintained and enhanced the
|
||||
Amiga port of 3.5 after Janne Salmijarvi resurrected it for 3.3.1.
|
||||
@@ -150,7 +149,70 @@ Amiga port of 3.5 after Janne Salmijarvi resurrected it for 3.3.1.
|
||||
Christian `Marvin' Bressler maintained 3.5 for the Atari after he
|
||||
resurrected it for 3.3.1.
|
||||
|
||||
There is a NetHack web site maintained by Ken Lorber at http://www.nethack.org/.
|
||||
The release of NetHack 3.4.3 in December 2003 marked the beginning of a
|
||||
long release hiatus. 3.4.3 proved to be a remarkably stable version that
|
||||
provided continued enjoyment by the community for more than a decade. The
|
||||
devteam slowly and quietly continued to work on the game behind the scenes
|
||||
during the tenure of 3.4.3. It was during that same period that several new
|
||||
variants emerged within the NetHack community. Notably sporkhack by
|
||||
Derek S. Ray, unnethack by Patric Mueller, nitrohack and its successors
|
||||
originally by Daniel Thaler and then by Alex Smith, and
|
||||
Dynahack by Tung Nguyen. Some of those variants continue to be developed,
|
||||
maintained, and enjoyed by the community to this day.
|
||||
|
||||
In September 2014, an interim snapshot of the code under development was
|
||||
released publicly by other parties. Since that code was a work-in-progress
|
||||
and had not gone through a period of debugging, it was decided that the
|
||||
version numbers present on that code snapshot would be retired and never
|
||||
used in an official NetHack release. An announcement was posted on the
|
||||
devteam's official nethack.org website to that effect, stating that there
|
||||
would never be a 3.4.4, 3.5, or 3.5.0 official release version.
|
||||
|
||||
In January 2015, preparation began for the release of NetHack 3.6.
|
||||
|
||||
At the beginning of development for what would eventually get released
|
||||
as 3.6.0, the development team consisted of Michael Allison,
|
||||
Warwick Allison, Ken Arromdee, David Cohrs, Jessie Collet, Ken Lorber,
|
||||
Dean Luick, Pat Rankin, Mike Stephenson, Janet Walz, and Paul Winner.
|
||||
Leading up to the release of 3.6.0 in early 2015, new members Sean Hunt,
|
||||
Pasi Kallinen, and Derek S. Ray joined the NetHack development team.
|
||||
|
||||
3.6.0 <FIXME> - insert apprpriate description of 3.6.0 here
|
||||
|
||||
The development team, as well as Steve VanDevender and Kevin Smolkowski
|
||||
ensured that NetHack 3.6.0 continued to operate on various Unix flavors
|
||||
as well as maintaining the X11 interface.
|
||||
|
||||
Ken Lorber, Haoyang Wang, Pat Rankin, and Dean Luick maintained the port
|
||||
of NetHack 3.6.0 for Mac.
|
||||
|
||||
Michael Allison, Derek S. Ray, Yitzhak Sapir, Alex Kompel, and David Cohrs
|
||||
maintained the port of NetHack 3.6.0 for Microsoft Windows.
|
||||
|
||||
Jeff Bailey created and maintained a port of NetHack 3.6.0 for Chrome.
|
||||
|
||||
Alex Kompel maintained a port of NetHack 3.6.0 to Windows Phone. <FIXME>?
|
||||
|
||||
This version of the game is special in a particular way. Near the end of
|
||||
the development of 3.6, one of the significant inspirations for many of the
|
||||
humorous and fun features found in the game, author Terry Pratchett,
|
||||
passed away. This version of the game is dedicated to <FIXME>
|
||||
|
||||
|
||||
An official NetHack web site continues to be maintained by Ken Lorber at
|
||||
http://www.nethack.org/.
|
||||
|
||||
--
|
||||
SHOUT-OUTS
|
||||
|
||||
The devteam would like to give a special "shout-out" to thank the generous
|
||||
people primarily responsible for the public NetHack servers available for
|
||||
playing the game at nethack.alt.org and devnull.net. In addition to providing
|
||||
a way for the public to play a game of NetHack from almost anywhere, they
|
||||
have hosted annual NetHack tournaments for many, many years.
|
||||
|
||||
On behalf of the NetHack community, thank you very much to
|
||||
M. Drew Streib, Pasi Kallinen and Robin Bandy.
|
||||
|
||||
- - - - - - - - - -
|
||||
|
||||
@@ -159,20 +221,20 @@ particularly intriguing modification to help out with the game. The Gods of
|
||||
the Dungeon sometimes make note of the names of the worst of these miscreants
|
||||
in this, the list of Dungeoneers:
|
||||
|
||||
Adam Aronow Izchak Miller Mike Passaretti
|
||||
Alex Kompel J. Ali Harlow Mike Stephenson
|
||||
Andreas Dorn Janet Walz Norm Meluch
|
||||
Andy Church Janne Salmijarvi Olaf Seibert
|
||||
Andy Swanson Jean-Christophe Collet Pasi Kallinen
|
||||
Ari Huttunen Jochen Erwied Pat Rankin
|
||||
Barton House John Kallen Paul Winner
|
||||
Benson I. Margulies John Rupley Pierre Martineau
|
||||
Bill Dyer John S. Bien Ralf Brown
|
||||
Boudewijn Waijers Johnny Lee Ray Chason
|
||||
Bruce Cox Jon W{tte Richard Addison
|
||||
Bruce Holloway Jonathan Handler Richard Beigel
|
||||
Bruce Mewborne Joshua Delahunty Richard P. Hughey
|
||||
Carl Schelin Keizo Yamamoto Rob Menke
|
||||
Adam Aronow J. Ali Harlow Mike Stephenson
|
||||
Alex Kompel Janet Walz Norm Meluch
|
||||
Andreas Dorn Janne Salmijarvi Olaf Seibert
|
||||
Andy Church Jean-Christophe Collet Pasi Kallinen
|
||||
Andy Swanson Jeff Bailey Pat Rankin
|
||||
Ari Huttunen Jochen Erwied Paul Winner
|
||||
Barton House John Kallen Pierre Martineau
|
||||
Benson I. Margulies John Rupley Ralf Brown
|
||||
Bill Dyer John S. Bien Ray Chason
|
||||
Boudewijn Waijers Johnny Lee Richard Addison
|
||||
Bruce Cox Jon W{tte Richard Beigel
|
||||
Bruce Holloway Jonathan Handler Richard P. Hughey
|
||||
Bruce Mewborne Joshua Delahunty Rob Menke
|
||||
Carl Schelin Keizo Yamamoto Robin Bandy
|
||||
Chris Russo Ken Arnold Robin Johnson
|
||||
David Cohrs Ken Arromdee Roderick Schertler
|
||||
David Damerell Ken Lorber Roland McGrath
|
||||
@@ -180,10 +242,11 @@ in this, the list of Dungeoneers:
|
||||
David Hairston Kevin Darcy Ronnen Miller
|
||||
Dean Luick Kevin Hugo Ross Brown
|
||||
Del Lamb Kevin Sitze Sascha Wostmann
|
||||
Deron Meranda Kevin Smolkowski Scott Bigham
|
||||
Dion Nicolaas Kevin Sweet Scott R. Turner
|
||||
Dylan O'Donnell Lars Huttar Stephen Spackman
|
||||
Eric Backus Leon Arnott Stephen White
|
||||
Derek S. Ray Kevin Smolkowski Scott Bigham
|
||||
Deron Meranda Kevin Sweet Scott R. Turner
|
||||
Dion Nicolaas Lars Huttar Sean Hunt
|
||||
Dylan O'Donnell Leon Arnott Stephen Spackman
|
||||
Eric Backus M. Drew Streib Stephen White
|
||||
Eric Hendrickson Malcolm Ryan Steve Creps
|
||||
Eric R. Smith Mark Gooderum Steve Linhart
|
||||
Eric S. Raymond Mark Modrall Steve VanDevender
|
||||
@@ -196,4 +259,5 @@ in this, the list of Dungeoneers:
|
||||
Hao-yang Wang Michael Sokolov Warwick Allison
|
||||
Helge Hafting Mike Engber Yitzhak Sapir
|
||||
Irina Rempt-Drijfhout Mike Gallop
|
||||
Izchak Miller Mike Passaretti
|
||||
|
||||
|
||||
80
dat/knox.des
80
dat/knox.des
@@ -39,7 +39,7 @@ TELEPORT_REGION:(06,16,09,17),(0,0,0,0),up
|
||||
TELEPORT_REGION:(06,16,09,17),(0,0,0,0),down
|
||||
# Throne room, with Croesus on the throne
|
||||
REGION:(37,08,46,11),lit,"throne"
|
||||
MONSTER:'@',"Croesus",(43,10),hostile
|
||||
MONSTER:('@',"Croesus"),(43,10),hostile
|
||||
# The Vault
|
||||
# Using unfilled morgue for
|
||||
# identification in mkmaze.c
|
||||
@@ -50,12 +50,12 @@ REGION:(46,06,48,06),lit,"ordinary"
|
||||
REGION:(19,13,21,13),lit,"ordinary"
|
||||
REGION:(46,13,48,13),lit,"ordinary"
|
||||
# A welcoming committee
|
||||
REGION:(03,10,07,13),lit,"zoo",filled,true
|
||||
REGION:(03,10,07,13),lit,"zoo",filled,irregular
|
||||
# arrival chamber; needs to be a real room to control migrating monsters,
|
||||
# and `unfilled' is a kludge to force an ordinary room to remain a room
|
||||
REGION:(06,15,09,16),unlit,"ordinary",unfilled
|
||||
# Barracks
|
||||
REGION:(62,03,71,04),lit,"barracks",filled,true
|
||||
REGION:(62,03,71,04),lit,"barracks",filled,irregular
|
||||
# Doors
|
||||
DOOR:closed,(06,14)
|
||||
DOOR:closed,(09,03)
|
||||
@@ -67,43 +67,43 @@ DOOR:open,(68,11)
|
||||
DOOR:closed,(63,14)
|
||||
DOOR:closed,(66,14)
|
||||
# Soldiers guarding the fort
|
||||
MONSTER:'@',"soldier",(12,14)
|
||||
MONSTER:'@',"soldier",(12,13)
|
||||
MONSTER:'@',"soldier",(11,10)
|
||||
MONSTER:'@',"soldier",(13,02)
|
||||
MONSTER:'@',"soldier",(14,03)
|
||||
MONSTER:'@',"soldier",(20,02)
|
||||
MONSTER:'@',"soldier",(30,02)
|
||||
MONSTER:'@',"soldier",(40,02)
|
||||
MONSTER:'@',"soldier",(30,16)
|
||||
MONSTER:'@',"soldier",(32,16)
|
||||
MONSTER:'@',"soldier",(40,16)
|
||||
MONSTER:'@',"soldier",(54,16)
|
||||
MONSTER:'@',"soldier",(54,14)
|
||||
MONSTER:'@',"soldier",(54,13)
|
||||
MONSTER:'@',"soldier",(57,10)
|
||||
MONSTER:'@',"soldier",(57,09)
|
||||
MONSTER:'@',"lieutenant",(15,08)
|
||||
MONSTER:('@',"soldier"),(12,14)
|
||||
MONSTER:('@',"soldier"),(12,13)
|
||||
MONSTER:('@',"soldier"),(11,10)
|
||||
MONSTER:('@',"soldier"),(13,02)
|
||||
MONSTER:('@',"soldier"),(14,03)
|
||||
MONSTER:('@',"soldier"),(20,02)
|
||||
MONSTER:('@',"soldier"),(30,02)
|
||||
MONSTER:('@',"soldier"),(40,02)
|
||||
MONSTER:('@',"soldier"),(30,16)
|
||||
MONSTER:('@',"soldier"),(32,16)
|
||||
MONSTER:('@',"soldier"),(40,16)
|
||||
MONSTER:('@',"soldier"),(54,16)
|
||||
MONSTER:('@',"soldier"),(54,14)
|
||||
MONSTER:('@',"soldier"),(54,13)
|
||||
MONSTER:('@',"soldier"),(57,10)
|
||||
MONSTER:('@',"soldier"),(57,09)
|
||||
MONSTER:('@',"lieutenant"),(15,08)
|
||||
# Four dragons guarding each side
|
||||
MONSTER:'D',random,(18,09)
|
||||
MONSTER:'D',random,(49,10)
|
||||
MONSTER:'D',random,(33,05)
|
||||
MONSTER:'D',random,(33,14)
|
||||
MONSTER:'D',(18,09)
|
||||
MONSTER:'D',(49,10)
|
||||
MONSTER:'D',(33,05)
|
||||
MONSTER:'D',(33,14)
|
||||
# Eels in the moat
|
||||
MONSTER:';',"giant eel",(17,08)
|
||||
MONSTER:';',"giant eel",(17,11)
|
||||
MONSTER:';',"giant eel",(48,08)
|
||||
MONSTER:';',"giant eel",(48,11)
|
||||
MONSTER:(';',"giant eel"),(17,08)
|
||||
MONSTER:(';',"giant eel"),(17,11)
|
||||
MONSTER:(';',"giant eel"),(48,08)
|
||||
MONSTER:(';',"giant eel"),(48,11)
|
||||
# The corner rooms treasures
|
||||
OBJECT:'*',"diamond",(19,06)
|
||||
OBJECT:'*',"diamond",(20,06)
|
||||
OBJECT:'*',"diamond",(21,06)
|
||||
OBJECT:'*',"emerald",(19,13)
|
||||
OBJECT:'*',"emerald",(20,13)
|
||||
OBJECT:'*',"emerald",(21,13)
|
||||
OBJECT:'*',"ruby",(46,06)
|
||||
OBJECT:'*',"ruby",(47,06)
|
||||
OBJECT:'*',"ruby",(48,06)
|
||||
OBJECT:'*',"amethyst",(46,13)
|
||||
OBJECT:'*',"amethyst",(47,13)
|
||||
OBJECT:'*',"amethyst",(48,13)
|
||||
OBJECT:('*',"diamond"),(19,06)
|
||||
OBJECT:('*',"diamond"),(20,06)
|
||||
OBJECT:('*',"diamond"),(21,06)
|
||||
OBJECT:('*',"emerald"),(19,13)
|
||||
OBJECT:('*',"emerald"),(20,13)
|
||||
OBJECT:('*',"emerald"),(21,13)
|
||||
OBJECT:('*',"ruby"),(46,06)
|
||||
OBJECT:('*',"ruby"),(47,06)
|
||||
OBJECT:('*',"ruby"),(48,06)
|
||||
OBJECT:('*',"amethyst"),(46,13)
|
||||
OBJECT:('*',"amethyst"),(47,13)
|
||||
OBJECT:('*',"amethyst"),(48,13)
|
||||
|
||||
196
dat/medusa.des
196
dat/medusa.des
@@ -55,28 +55,29 @@ BRANCH:levregion(01,00,79,20),(30,06,46,13)
|
||||
# Non diggable walls
|
||||
NON_DIGGABLE:(30,06,46,13)
|
||||
# Objects
|
||||
CONTAINER:'`',"statue",(36,10),uncursed,"knight",3,"Perseus"
|
||||
OBJECT[75%]:'[',"shield of reflection",contained,cursed,+0
|
||||
OBJECT[25%]:'[',"levitation boots",contained,random,+0
|
||||
OBJECT[50%]:')',"scimitar",contained,blessed,+2
|
||||
OBJECT[50%]:'(',"sack",contained
|
||||
CONTAINER:('`',"statue"),(36,10),uncursed,montype:"knight",3,name:"Perseus" {
|
||||
[75%]: OBJECT:('[',"shield of reflection"),cursed,+0
|
||||
[25%]: OBJECT:('[',"levitation boots"),+0
|
||||
[50%]: OBJECT:(')',"scimitar"),blessed,+2
|
||||
[50%]: OBJECT:('(',"sack")
|
||||
}
|
||||
# These aren't really containers, but specifying CONTAINER forces them to be
|
||||
# empty, since CONTAINERs contain only what is explicitly specified.
|
||||
CONTAINER:'`',"statue",random
|
||||
CONTAINER:'`',"statue",random
|
||||
CONTAINER:'`',"statue",random
|
||||
CONTAINER:'`',"statue",random
|
||||
CONTAINER:'`',"statue",random
|
||||
CONTAINER:'`',"statue",random
|
||||
CONTAINER:'`',"statue",random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
CONTAINER:('`',"statue"),random { }
|
||||
CONTAINER:('`',"statue"),random { }
|
||||
CONTAINER:('`',"statue"),random { }
|
||||
CONTAINER:('`',"statue"),random { }
|
||||
CONTAINER:('`',"statue"),random { }
|
||||
CONTAINER:('`',"statue"),random { }
|
||||
CONTAINER:('`',"statue"),random { }
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Random traps
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
@@ -86,27 +87,27 @@ TRAP:random,random
|
||||
TRAP:"board",(38,07)
|
||||
TRAP:"board",(38,12)
|
||||
# Random monsters
|
||||
MONSTER:'@',"Medusa",(36,10),asleep
|
||||
MONSTER:';',"giant eel",(11,06)
|
||||
MONSTER:';',"giant eel",(23,13)
|
||||
MONSTER:';',"giant eel",(29,02)
|
||||
MONSTER:';',"jellyfish",(02,02)
|
||||
MONSTER:';',"jellyfish",(00,08)
|
||||
MONSTER:';',"jellyfish",(04,18)
|
||||
MONSTER:'T',"water troll",(51,03)
|
||||
MONSTER:'T',"water troll",(64,11)
|
||||
MONSTER:'S',random,(38,07)
|
||||
MONSTER:'S',random,(38,12)
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:('@',"Medusa"),(36,10),asleep
|
||||
MONSTER:(';',"giant eel"),(11,06)
|
||||
MONSTER:(';',"giant eel"),(23,13)
|
||||
MONSTER:(';',"giant eel"),(29,02)
|
||||
MONSTER:(';',"jellyfish"),(02,02)
|
||||
MONSTER:(';',"jellyfish"),(00,08)
|
||||
MONSTER:(';',"jellyfish"),(04,18)
|
||||
MONSTER:('T',"water troll"),(51,03)
|
||||
MONSTER:('T',"water troll"),(64,11)
|
||||
MONSTER:'S',(38,07)
|
||||
MONSTER:'S',(38,12)
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
|
||||
MAZE:"medusa-2",' '
|
||||
FLAGS: noteleport
|
||||
@@ -136,7 +137,7 @@ ENDMAP
|
||||
# Dungeon Description
|
||||
REGION:(00,00,74,19),lit,"ordinary"
|
||||
REGION:(02,03,05,16),unlit,"ordinary"
|
||||
REGION:(61,03,72,16),unlit,"ordinary",unfilled,true
|
||||
REGION:(61,03,72,16),unlit,"ordinary",unfilled,irregular
|
||||
REGION:(71,08,72,11),unlit,"ordinary"
|
||||
REGION:(67,08,69,11),lit,"ordinary"
|
||||
# Teleport: down to up stairs island, up to Medusa's island
|
||||
@@ -153,28 +154,29 @@ BRANCH:levregion(01,00,79,20),(59,01,73,17)
|
||||
NON_DIGGABLE:(01,02,06,17)
|
||||
NON_DIGGABLE:(60,02,73,17)
|
||||
# Objects
|
||||
CONTAINER:'`',"statue",(68,10),uncursed,"knight",3,"Perseus"
|
||||
OBJECT[25%]:'[',"shield of reflection",contained,cursed,+0
|
||||
OBJECT[75%]:'[',"levitation boots",contained,random,+0
|
||||
OBJECT[50%]:')',"scimitar",contained,blessed,+2
|
||||
OBJECT[50%]:'(',"sack",contained
|
||||
CONTAINER:'`',"statue",(64,08)
|
||||
CONTAINER:'`',"statue",(65,08)
|
||||
CONTAINER:'`',"statue",(64,09)
|
||||
CONTAINER:'`',"statue",(65,09)
|
||||
CONTAINER:'`',"statue",(64,10)
|
||||
CONTAINER:'`',"statue",(65,10)
|
||||
CONTAINER:'`',"statue",(64,11)
|
||||
CONTAINER:'`',"statue",(65,11)
|
||||
OBJECT:'`',"boulder",(04,04)
|
||||
OBJECT:'/',random,(52,09)
|
||||
OBJECT:'`',"boulder",(52,09)
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
OBJECT:random,random,random
|
||||
CONTAINER:('`',"statue"),(68,10),uncursed,montype:"knight",3,name:"Perseus" {
|
||||
[25%]: OBJECT:('[',"shield of reflection"),cursed,+0
|
||||
[75%]: OBJECT:('[',"levitation boots"),+0
|
||||
[50%]: OBJECT:(')',"scimitar"),blessed,+2
|
||||
[50%]: OBJECT:('(',"sack")
|
||||
}
|
||||
CONTAINER:('`',"statue"),(64,08) { }
|
||||
CONTAINER:('`',"statue"),(65,08) { }
|
||||
CONTAINER:('`',"statue"),(64,09) { }
|
||||
CONTAINER:('`',"statue"),(65,09) { }
|
||||
CONTAINER:('`',"statue"),(64,10) { }
|
||||
CONTAINER:('`',"statue"),(65,10) { }
|
||||
CONTAINER:('`',"statue"),(64,11) { }
|
||||
CONTAINER:('`',"statue"),(65,11) { }
|
||||
OBJECT:('`',"boulder"),(04,04)
|
||||
OBJECT:'/',(52,09)
|
||||
OBJECT:('`',"boulder"),(52,09)
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
OBJECT:random,random
|
||||
# Traps
|
||||
TRAP:"magic",(03,12)
|
||||
TRAP:random,random
|
||||
@@ -182,36 +184,36 @@ TRAP:random,random
|
||||
TRAP:random,random
|
||||
TRAP:random,random
|
||||
# Monsters.
|
||||
MONSTER:'@',"Medusa",(68,10),asleep
|
||||
MONSTER:'g',"gremlin",(02,14)
|
||||
MONSTER:'H',"titan",(02,05)
|
||||
MONSTER:';',"electric eel",(10,13)
|
||||
MONSTER:';',"electric eel",(11,13)
|
||||
MONSTER:';',"electric eel",(10,14)
|
||||
MONSTER:';',"electric eel",(11,14)
|
||||
MONSTER:';',"electric eel",(10,15)
|
||||
MONSTER:';',"electric eel",(11,15)
|
||||
MONSTER:';',"jellyfish",(01,01)
|
||||
MONSTER:';',"jellyfish",(00,08)
|
||||
MONSTER:';',"jellyfish",(04,19)
|
||||
MONSTER:''',"stone golem",(64,08),asleep
|
||||
MONSTER:''',"stone golem",(65,08),asleep
|
||||
MONSTER:''',"stone golem",(64,09),asleep
|
||||
MONSTER:''',"stone golem",(65,09),asleep
|
||||
MONSTER:'S',"cobra",(64,10),asleep
|
||||
MONSTER:'S',"cobra",(65,10),asleep
|
||||
MONSTER:'A',random,(72,08)
|
||||
MONSTER:'y',"yellow light",(72,11),asleep
|
||||
MONSTER:random,random,(17,07)
|
||||
MONSTER:random,random,(28,11)
|
||||
MONSTER:random,random,(32,13)
|
||||
MONSTER:random,random,(49,09)
|
||||
MONSTER:random,random,(48,07)
|
||||
MONSTER:random,random,(65,03)
|
||||
MONSTER:random,random,(70,04)
|
||||
MONSTER:random,random,(70,15)
|
||||
MONSTER:random,random,(65,16)
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:('@',"Medusa"),(68,10),asleep
|
||||
MONSTER:('g',"gremlin"),(02,14)
|
||||
MONSTER:('H',"titan"),(02,05)
|
||||
MONSTER:(';',"electric eel"),(10,13)
|
||||
MONSTER:(';',"electric eel"),(11,13)
|
||||
MONSTER:(';',"electric eel"),(10,14)
|
||||
MONSTER:(';',"electric eel"),(11,14)
|
||||
MONSTER:(';',"electric eel"),(10,15)
|
||||
MONSTER:(';',"electric eel"),(11,15)
|
||||
MONSTER:(';',"jellyfish"),(01,01)
|
||||
MONSTER:(';',"jellyfish"),(00,08)
|
||||
MONSTER:(';',"jellyfish"),(04,19)
|
||||
MONSTER:(''',"stone golem"),(64,08),asleep
|
||||
MONSTER:(''',"stone golem"),(65,08),asleep
|
||||
MONSTER:(''',"stone golem"),(64,09),asleep
|
||||
MONSTER:(''',"stone golem"),(65,09),asleep
|
||||
MONSTER:('S',"cobra"),(64,10),asleep
|
||||
MONSTER:('S',"cobra"),(65,10),asleep
|
||||
MONSTER:'A',(72,08)
|
||||
MONSTER:('y',"yellow light"),(72,11),asleep
|
||||
MONSTER:random,(17,07)
|
||||
MONSTER:random,(28,11)
|
||||
MONSTER:random,(32,13)
|
||||
MONSTER:random,(49,09)
|
||||
MONSTER:random,(48,07)
|
||||
MONSTER:random,(65,03)
|
||||
MONSTER:random,(70,04)
|
||||
MONSTER:random,(70,15)
|
||||
MONSTER:random,(65,16)
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
|
||||
1270
dat/mines.des
1270
dat/mines.des
File diff suppressed because it is too large
Load Diff
@@ -30,6 +30,7 @@ pushweapon when wielding a new weapon, put your previously
|
||||
rawio allow the use of raw I/O [FALSE]
|
||||
rest_on_space count the space bar as a rest character [FALSE]
|
||||
safe_pet prevent you from (knowingly) attacking your pet(s) [TRUE]
|
||||
showexp display your accumulated experience points [FALSE]
|
||||
showrace show yourself by your race rather than by role [FALSE]
|
||||
silent don't use your terminal's bell sound [TRUE]
|
||||
sortpack group similar kinds of objects in inventory [TRUE]
|
||||
@@ -44,6 +45,7 @@ tombstone print tombstone when you die [TRUE]
|
||||
toptenwin print topten in a window rather than stdout [FALSE]
|
||||
travel enable the command to travel to a map location via [TRUE]
|
||||
a shortest-path algorithm, usually invoked by '_'.
|
||||
use_darkgray use bold black instead of blue for black glyphs. [TRUE]
|
||||
use_inverse display detected monsters in highlighted manner [FALSE]
|
||||
verbose print more commentary during the game [TRUE]
|
||||
|
||||
@@ -61,8 +63,6 @@ news print any news from game administrator on startup [TRUE]
|
||||
Boolean option if MFLOPPY was set at compile time:
|
||||
checkspace check free disk space before writing files to disk [TRUE]
|
||||
|
||||
Boolean option if EXP_ON_BOTL was set at compile time:
|
||||
showexp display your accumulated experience points [FALSE]
|
||||
|
||||
Boolean option if SCORE_ON_BOTL was set at compile time:
|
||||
showscore display your approximate accumulated score [FALSE]
|
||||
|
||||
@@ -8,51 +8,59 @@
|
||||
|
||||
LEVEL: "oracle"
|
||||
|
||||
ROOM: "ordinary" , lit, (3,3), (center,center), (11,9)
|
||||
NAME: "central"
|
||||
OBJECT:'`',"statue",(0,0),"forest centaur",1
|
||||
OBJECT:'`',"statue",(0,8),"mountain centaur",1
|
||||
OBJECT:'`',"statue",(10,0),"mountain centaur",1
|
||||
OBJECT:'`',"statue",(10,8),"forest centaur",1
|
||||
OBJECT:'`',"statue",(5,1),"plains centaur",1
|
||||
OBJECT:'`',"statue",(5,7),"plains centaur",1
|
||||
OBJECT:'`',"statue",(2,4),"plains centaur",1
|
||||
OBJECT:'`',"statue",(8,4),"plains centaur",1
|
||||
MONSTER: random, random, random
|
||||
MONSTER: random, random, random
|
||||
ROOM: "ordinary" , lit, (3,3), (center,center), (11,9) {
|
||||
OBJECT:('`',"statue"),(0,0),montype:'C',1
|
||||
OBJECT:('`',"statue"),(0,8),montype:'C',1
|
||||
OBJECT:('`',"statue"),(10,0),montype:'C',1
|
||||
OBJECT:('`',"statue"),(10,8),montype:'C',1
|
||||
OBJECT:('`',"statue"),(5,1),montype:'C',1
|
||||
OBJECT:('`',"statue"),(5,7),montype:'C',1
|
||||
OBJECT:('`',"statue"),(2,4),montype:'C',1
|
||||
OBJECT:('`',"statue"),(8,4),montype:'C',1
|
||||
|
||||
SUBROOM: "delphi" , lit , (4,3) , (3,3), "central"
|
||||
FOUNTAIN: (0, 1)
|
||||
FOUNTAIN: (1, 0)
|
||||
FOUNTAIN: (1, 2)
|
||||
FOUNTAIN: (2, 1)
|
||||
MONSTER: '@', "Oracle", (1,1)
|
||||
DOOR: false , nodoor , random, random
|
||||
SUBROOM: "delphi" , lit , (4,3) , (3,3) {
|
||||
FOUNTAIN: (0, 1)
|
||||
FOUNTAIN: (1, 0)
|
||||
FOUNTAIN: (1, 2)
|
||||
FOUNTAIN: (2, 1)
|
||||
MONSTER: ('@', "Oracle"), (1,1)
|
||||
ROOMDOOR: false , nodoor , random, random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, up
|
||||
OBJECT: random,random,random
|
||||
MONSTER: random, random
|
||||
MONSTER: random, random
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
STAIR: random, down
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: random, random, random
|
||||
MONSTER: random, random, random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
OBJECT: random, random, random
|
||||
MONSTER: random, random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, up
|
||||
OBJECT: random,random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: random, random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
STAIR: random, down
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: random, random
|
||||
MONSTER: random, random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random
|
||||
OBJECT: random, random, random
|
||||
TRAP: random, random
|
||||
MONSTER: random, random, random
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
OBJECT: random, random
|
||||
MONSTER: random, random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: random, random
|
||||
}
|
||||
|
||||
ROOM: "ordinary" , random, random, random, random {
|
||||
OBJECT: random, random
|
||||
TRAP: random, random
|
||||
MONSTER: random, random
|
||||
}
|
||||
|
||||
RANDOM_CORRIDORS
|
||||
|
||||
406
dat/sokoban.des
406
dat/sokoban.des
@@ -35,7 +35,7 @@
|
||||
|
||||
### Bottom (first) level of Sokoban ###
|
||||
MAZE:"soko4-1",' '
|
||||
FLAGS:noteleport,hardfloor
|
||||
FLAGS:noteleport,hardfloor,premapped,solidify
|
||||
GEOMETRY:center,center
|
||||
#12345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -60,18 +60,18 @@ NON_DIGGABLE:(00,00,13,12)
|
||||
NON_PASSWALL:(00,00,13,12)
|
||||
|
||||
# Boulders
|
||||
OBJECT:'`',"boulder",(02,02)
|
||||
OBJECT:'`',"boulder",(02,03)
|
||||
OBJECT:('`',"boulder"),(02,02)
|
||||
OBJECT:('`',"boulder"),(02,03)
|
||||
#
|
||||
OBJECT:'`',"boulder",(10,02)
|
||||
OBJECT:'`',"boulder",(09,03)
|
||||
OBJECT:'`',"boulder",(10,04)
|
||||
OBJECT:('`',"boulder"),(10,02)
|
||||
OBJECT:('`',"boulder"),(09,03)
|
||||
OBJECT:('`',"boulder"),(10,04)
|
||||
#
|
||||
OBJECT:'`',"boulder",(08,07)
|
||||
OBJECT:'`',"boulder",(09,08)
|
||||
OBJECT:'`',"boulder",(09,09)
|
||||
OBJECT:'`',"boulder",(08,10)
|
||||
OBJECT:'`',"boulder",(10,10)
|
||||
OBJECT:('`',"boulder"),(08,07)
|
||||
OBJECT:('`',"boulder"),(09,08)
|
||||
OBJECT:('`',"boulder"),(09,09)
|
||||
OBJECT:('`',"boulder"),(08,10)
|
||||
OBJECT:('`',"boulder"),(10,10)
|
||||
|
||||
# Traps
|
||||
TRAP:"pit",(03,06)
|
||||
@@ -85,20 +85,20 @@ TRAP:"pit",(06,10)
|
||||
TRAP:"pit",(07,10)
|
||||
|
||||
# A little help
|
||||
OBJECT:'?',"earth",(02,11)
|
||||
OBJECT:'?',"earth",(03,11)
|
||||
OBJECT:('?',"earth"),(02,11)
|
||||
OBJECT:('?',"earth"),(03,11)
|
||||
|
||||
# Random objects
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'/',random
|
||||
|
||||
|
||||
MAZE:"soko4-2",' '
|
||||
FLAGS:noteleport,hardfloor
|
||||
FLAGS:noteleport,hardfloor,premapped,solidify
|
||||
GEOMETRY:center,center
|
||||
#12345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -121,20 +121,20 @@ NON_DIGGABLE:(00,00,14,10)
|
||||
NON_PASSWALL:(00,00,14,10)
|
||||
|
||||
# Boulders
|
||||
OBJECT:'`',"boulder",(05,02)
|
||||
OBJECT:'`',"boulder",(06,02)
|
||||
OBJECT:'`',"boulder",(06,03)
|
||||
OBJECT:'`',"boulder",(07,03)
|
||||
OBJECT:('`',"boulder"),(05,02)
|
||||
OBJECT:('`',"boulder"),(06,02)
|
||||
OBJECT:('`',"boulder"),(06,03)
|
||||
OBJECT:('`',"boulder"),(07,03)
|
||||
#
|
||||
OBJECT:'`',"boulder",(09,05)
|
||||
OBJECT:'`',"boulder",(10,03)
|
||||
OBJECT:'`',"boulder",(11,02)
|
||||
OBJECT:'`',"boulder",(12,03)
|
||||
OBJECT:('`',"boulder"),(09,05)
|
||||
OBJECT:('`',"boulder"),(10,03)
|
||||
OBJECT:('`',"boulder"),(11,02)
|
||||
OBJECT:('`',"boulder"),(12,03)
|
||||
#
|
||||
OBJECT:'`',"boulder",(07,08)
|
||||
OBJECT:'`',"boulder",(08,08)
|
||||
OBJECT:'`',"boulder",(09,08)
|
||||
OBJECT:'`',"boulder",(10,08)
|
||||
OBJECT:('`',"boulder"),(07,08)
|
||||
OBJECT:('`',"boulder"),(08,08)
|
||||
OBJECT:('`',"boulder"),(09,08)
|
||||
OBJECT:('`',"boulder"),(10,08)
|
||||
|
||||
# Traps
|
||||
TRAP:"pit",(01,02)
|
||||
@@ -149,21 +149,21 @@ TRAP:"pit",(05,08)
|
||||
TRAP:"pit",(06,08)
|
||||
|
||||
# A little help
|
||||
OBJECT:'?',"earth",(01,09)
|
||||
OBJECT:'?',"earth",(02,09)
|
||||
OBJECT:('?',"earth"),(01,09)
|
||||
OBJECT:('?',"earth"),(02,09)
|
||||
|
||||
# Random objects
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'/',random
|
||||
|
||||
|
||||
### Second level ###
|
||||
MAZE:"soko3-1",' '
|
||||
FLAGS:noteleport
|
||||
FLAGS:noteleport,premapped,solidify
|
||||
GEOMETRY:center,center
|
||||
#12345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -188,29 +188,29 @@ NON_DIGGABLE:(00,00,28,11)
|
||||
NON_PASSWALL:(00,00,28,11)
|
||||
|
||||
# Boulders
|
||||
OBJECT:'`',"boulder",(03,02)
|
||||
OBJECT:'`',"boulder",(04,02)
|
||||
OBJECT:('`',"boulder"),(03,02)
|
||||
OBJECT:('`',"boulder"),(04,02)
|
||||
#
|
||||
OBJECT:'`',"boulder",(06,02)
|
||||
OBJECT:'`',"boulder",(06,03)
|
||||
OBJECT:'`',"boulder",(07,02)
|
||||
OBJECT:('`',"boulder"),(06,02)
|
||||
OBJECT:('`',"boulder"),(06,03)
|
||||
OBJECT:('`',"boulder"),(07,02)
|
||||
#
|
||||
OBJECT:'`',"boulder",(03,06)
|
||||
OBJECT:'`',"boulder",(02,07)
|
||||
OBJECT:'`',"boulder",(03,07)
|
||||
OBJECT:'`',"boulder",(03,08)
|
||||
OBJECT:'`',"boulder",(02,09)
|
||||
OBJECT:'`',"boulder",(03,09)
|
||||
OBJECT:'`',"boulder",(04,09)
|
||||
OBJECT:('`',"boulder"),(03,06)
|
||||
OBJECT:('`',"boulder"),(02,07)
|
||||
OBJECT:('`',"boulder"),(03,07)
|
||||
OBJECT:('`',"boulder"),(03,08)
|
||||
OBJECT:('`',"boulder"),(02,09)
|
||||
OBJECT:('`',"boulder"),(03,09)
|
||||
OBJECT:('`',"boulder"),(04,09)
|
||||
#
|
||||
OBJECT:'`',"boulder",(06,07)
|
||||
OBJECT:'`',"boulder",(06,09)
|
||||
OBJECT:'`',"boulder",(08,07)
|
||||
OBJECT:'`',"boulder",(08,10)
|
||||
OBJECT:'`',"boulder",(09,08)
|
||||
OBJECT:'`',"boulder",(09,09)
|
||||
OBJECT:'`',"boulder",(10,07)
|
||||
OBJECT:'`',"boulder",(10,10)
|
||||
OBJECT:('`',"boulder"),(06,07)
|
||||
OBJECT:('`',"boulder"),(06,09)
|
||||
OBJECT:('`',"boulder"),(08,07)
|
||||
OBJECT:('`',"boulder"),(08,10)
|
||||
OBJECT:('`',"boulder"),(09,08)
|
||||
OBJECT:('`',"boulder"),(09,09)
|
||||
OBJECT:('`',"boulder"),(10,07)
|
||||
OBJECT:('`',"boulder"),(10,10)
|
||||
|
||||
# Traps
|
||||
TRAP:"hole",(12,10)
|
||||
@@ -230,16 +230,16 @@ TRAP:"hole",(25,10)
|
||||
TRAP:"hole",(26,10)
|
||||
|
||||
# Random objects
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'/',random
|
||||
|
||||
|
||||
MAZE:"soko3-2",' '
|
||||
FLAGS:noteleport
|
||||
FLAGS:noteleport,premapped,solidify
|
||||
GEOMETRY:center,center
|
||||
#12345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -266,22 +266,22 @@ NON_DIGGABLE:(00,00,25,13)
|
||||
NON_PASSWALL:(00,00,25,13)
|
||||
|
||||
# Boulders
|
||||
OBJECT:'`',"boulder",(02,03)
|
||||
OBJECT:'`',"boulder",(08,03)
|
||||
OBJECT:'`',"boulder",(09,04)
|
||||
OBJECT:'`',"boulder",(02,05)
|
||||
OBJECT:'`',"boulder",(04,05)
|
||||
OBJECT:'`',"boulder",(09,05)
|
||||
OBJECT:'`',"boulder",(02,06)
|
||||
OBJECT:'`',"boulder",(05,06)
|
||||
OBJECT:'`',"boulder",(06,07)
|
||||
OBJECT:'`',"boulder",(03,08)
|
||||
OBJECT:'`',"boulder",(07,08)
|
||||
OBJECT:'`',"boulder",(05,09)
|
||||
OBJECT:'`',"boulder",(10,09)
|
||||
OBJECT:'`',"boulder",(07,10)
|
||||
OBJECT:'`',"boulder",(10,10)
|
||||
OBJECT:'`',"boulder",(03,11)
|
||||
OBJECT:('`',"boulder"),(02,03)
|
||||
OBJECT:('`',"boulder"),(08,03)
|
||||
OBJECT:('`',"boulder"),(09,04)
|
||||
OBJECT:('`',"boulder"),(02,05)
|
||||
OBJECT:('`',"boulder"),(04,05)
|
||||
OBJECT:('`',"boulder"),(09,05)
|
||||
OBJECT:('`',"boulder"),(02,06)
|
||||
OBJECT:('`',"boulder"),(05,06)
|
||||
OBJECT:('`',"boulder"),(06,07)
|
||||
OBJECT:('`',"boulder"),(03,08)
|
||||
OBJECT:('`',"boulder"),(07,08)
|
||||
OBJECT:('`',"boulder"),(05,09)
|
||||
OBJECT:('`',"boulder"),(10,09)
|
||||
OBJECT:('`',"boulder"),(07,10)
|
||||
OBJECT:('`',"boulder"),(10,10)
|
||||
OBJECT:('`',"boulder"),(03,11)
|
||||
|
||||
# Traps
|
||||
TRAP:"hole",(12,10)
|
||||
@@ -298,17 +298,17 @@ TRAP:"hole",(22,10)
|
||||
TRAP:"hole",(23,10)
|
||||
|
||||
# Random objects
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'/',random
|
||||
|
||||
|
||||
### Third level ###
|
||||
MAZE:"soko2-1",' '
|
||||
FLAGS:noteleport
|
||||
FLAGS:noteleport,premapped,solidify
|
||||
GEOMETRY:center,center
|
||||
#12345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -333,23 +333,23 @@ NON_DIGGABLE:(00,00,19,11)
|
||||
NON_PASSWALL:(00,00,19,11)
|
||||
|
||||
# Boulders
|
||||
OBJECT:'`',"boulder",(02,02)
|
||||
OBJECT:'`',"boulder",(03,02)
|
||||
OBJECT:('`',"boulder"),(02,02)
|
||||
OBJECT:('`',"boulder"),(03,02)
|
||||
#
|
||||
OBJECT:'`',"boulder",(05,03)
|
||||
OBJECT:'`',"boulder",(07,03)
|
||||
OBJECT:'`',"boulder",(07,02)
|
||||
OBJECT:'`',"boulder",(08,02)
|
||||
OBJECT:('`',"boulder"),(05,03)
|
||||
OBJECT:('`',"boulder"),(07,03)
|
||||
OBJECT:('`',"boulder"),(07,02)
|
||||
OBJECT:('`',"boulder"),(08,02)
|
||||
#
|
||||
OBJECT:'`',"boulder",(10,03)
|
||||
OBJECT:'`',"boulder",(11,03)
|
||||
OBJECT:('`',"boulder"),(10,03)
|
||||
OBJECT:('`',"boulder"),(11,03)
|
||||
#
|
||||
OBJECT:'`',"boulder",(02,07)
|
||||
OBJECT:'`',"boulder",(02,08)
|
||||
OBJECT:'`',"boulder",(03,09)
|
||||
OBJECT:('`',"boulder"),(02,07)
|
||||
OBJECT:('`',"boulder"),(02,08)
|
||||
OBJECT:('`',"boulder"),(03,09)
|
||||
#
|
||||
OBJECT:'`',"boulder",(05,07)
|
||||
OBJECT:'`',"boulder",(06,06)
|
||||
OBJECT:('`',"boulder"),(05,07)
|
||||
OBJECT:('`',"boulder"),(06,06)
|
||||
|
||||
# Traps
|
||||
TRAP:"hole",(08,09)
|
||||
@@ -364,16 +364,16 @@ TRAP:"hole",(16,09)
|
||||
TRAP:"hole",(17,09)
|
||||
|
||||
# Random objects
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'/',random
|
||||
|
||||
|
||||
MAZE:"soko2-2",' '
|
||||
FLAGS:noteleport
|
||||
FLAGS:noteleport,premapped,solidify
|
||||
GEOMETRY:center,center
|
||||
#12345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -399,22 +399,22 @@ NON_DIGGABLE:(00,00,19,12)
|
||||
NON_PASSWALL:(00,00,19,12)
|
||||
|
||||
# Boulders
|
||||
OBJECT:'`',"boulder",(04,02)
|
||||
OBJECT:'`',"boulder",(04,03)
|
||||
OBJECT:'`',"boulder",(05,03)
|
||||
OBJECT:'`',"boulder",(07,03)
|
||||
OBJECT:'`',"boulder",(08,03)
|
||||
OBJECT:'`',"boulder",(02,04)
|
||||
OBJECT:'`',"boulder",(03,04)
|
||||
OBJECT:'`',"boulder",(05,05)
|
||||
OBJECT:'`',"boulder",(06,06)
|
||||
OBJECT:'`',"boulder",(09,06)
|
||||
OBJECT:'`',"boulder",(03,07)
|
||||
OBJECT:'`',"boulder",(04,07)
|
||||
OBJECT:'`',"boulder",(07,07)
|
||||
OBJECT:'`',"boulder",(06,09)
|
||||
OBJECT:'`',"boulder",(05,10)
|
||||
OBJECT:'`',"boulder",(05,11)
|
||||
OBJECT:('`',"boulder"),(04,02)
|
||||
OBJECT:('`',"boulder"),(04,03)
|
||||
OBJECT:('`',"boulder"),(05,03)
|
||||
OBJECT:('`',"boulder"),(07,03)
|
||||
OBJECT:('`',"boulder"),(08,03)
|
||||
OBJECT:('`',"boulder"),(02,04)
|
||||
OBJECT:('`',"boulder"),(03,04)
|
||||
OBJECT:('`',"boulder"),(05,05)
|
||||
OBJECT:('`',"boulder"),(06,06)
|
||||
OBJECT:('`',"boulder"),(09,06)
|
||||
OBJECT:('`',"boulder"),(03,07)
|
||||
OBJECT:('`',"boulder"),(04,07)
|
||||
OBJECT:('`',"boulder"),(07,07)
|
||||
OBJECT:('`',"boulder"),(06,09)
|
||||
OBJECT:('`',"boulder"),(05,10)
|
||||
OBJECT:('`',"boulder"),(05,11)
|
||||
|
||||
# Traps
|
||||
TRAP:"hole",(07,11)
|
||||
@@ -430,17 +430,17 @@ TRAP:"hole",(16,11)
|
||||
TRAP:"hole",(17,11)
|
||||
|
||||
# Random objects
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'/',random
|
||||
|
||||
|
||||
### Top (last) level of Sokoban ###
|
||||
MAZE:"soko1-1",' '
|
||||
FLAGS:noteleport
|
||||
FLAGS:noteleport,premapped,solidify
|
||||
GEOMETRY:center,center
|
||||
#12345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -463,34 +463,36 @@ MAP
|
||||
|...|----- --|.....|
|
||||
----- -------
|
||||
ENDMAP
|
||||
RANDOM_PLACES:(16,11),(16,13),(16,15)
|
||||
$place = { (16,11),(16,13),(16,15) }
|
||||
SHUFFLE: $place
|
||||
|
||||
STAIR:(01,01),down
|
||||
REGION:(00,00,25,17),lit,"ordinary"
|
||||
NON_DIGGABLE:(00,00,25,17)
|
||||
NON_PASSWALL:(00,00,25,17)
|
||||
|
||||
# Boulders
|
||||
OBJECT:'`',"boulder",(03,05)
|
||||
OBJECT:'`',"boulder",(05,05)
|
||||
OBJECT:'`',"boulder",(07,05)
|
||||
OBJECT:'`',"boulder",(09,05)
|
||||
OBJECT:'`',"boulder",(11,05)
|
||||
OBJECT:('`',"boulder"),(03,05)
|
||||
OBJECT:('`',"boulder"),(05,05)
|
||||
OBJECT:('`',"boulder"),(07,05)
|
||||
OBJECT:('`',"boulder"),(09,05)
|
||||
OBJECT:('`',"boulder"),(11,05)
|
||||
#
|
||||
OBJECT:'`',"boulder",(04,07)
|
||||
OBJECT:'`',"boulder",(04,08)
|
||||
OBJECT:'`',"boulder",(06,07)
|
||||
OBJECT:'`',"boulder",(09,07)
|
||||
OBJECT:'`',"boulder",(11,07)
|
||||
OBJECT:('`',"boulder"),(04,07)
|
||||
OBJECT:('`',"boulder"),(04,08)
|
||||
OBJECT:('`',"boulder"),(06,07)
|
||||
OBJECT:('`',"boulder"),(09,07)
|
||||
OBJECT:('`',"boulder"),(11,07)
|
||||
#
|
||||
OBJECT:'`',"boulder",(03,12)
|
||||
OBJECT:'`',"boulder",(04,10)
|
||||
OBJECT:'`',"boulder",(05,12)
|
||||
OBJECT:'`',"boulder",(06,10)
|
||||
OBJECT:'`',"boulder",(07,11)
|
||||
OBJECT:'`',"boulder",(08,10)
|
||||
OBJECT:'`',"boulder",(09,12)
|
||||
OBJECT:('`',"boulder"),(03,12)
|
||||
OBJECT:('`',"boulder"),(04,10)
|
||||
OBJECT:('`',"boulder"),(05,12)
|
||||
OBJECT:('`',"boulder"),(06,10)
|
||||
OBJECT:('`',"boulder"),(07,11)
|
||||
OBJECT:('`',"boulder"),(08,10)
|
||||
OBJECT:('`',"boulder"),(09,12)
|
||||
#
|
||||
OBJECT:'`',"boulder",(03,14)
|
||||
OBJECT:('`',"boulder"),(03,14)
|
||||
|
||||
# Traps
|
||||
TRAP:"hole",(08,01)
|
||||
@@ -510,29 +512,33 @@ TRAP:"hole",(21,01)
|
||||
TRAP:"hole",(22,01)
|
||||
TRAP:"hole",(23,01)
|
||||
|
||||
MONSTER:'m',"giant mimic", random, m_object "boulder"
|
||||
MONSTER:'m',"giant mimic", random, m_object "boulder"
|
||||
MONSTER:('m',"giant mimic"), random, m_object "boulder"
|
||||
MONSTER:('m',"giant mimic"), random, m_object "boulder"
|
||||
|
||||
# Random objects
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'/',random
|
||||
|
||||
# Rewards
|
||||
DOOR:locked,(23,13)
|
||||
DOOR:closed,(17,11)
|
||||
DOOR:closed,(17,13)
|
||||
DOOR:closed,(17,15)
|
||||
REGION:(18,10,22,16),lit,"zoo",filled,true
|
||||
OBJECT:'(',"bag of holding",place[0]
|
||||
ENGRAVING:place[0],burn,"Elbereth"
|
||||
REGION:(18,10,22,16),lit,"zoo",filled,irregular
|
||||
IF [50%] {
|
||||
OBJECT:('(',"bag of holding"),$place[0]
|
||||
} ELSE {
|
||||
OBJECT:('"',"amulet of reflection"),$place[0]
|
||||
}
|
||||
ENGRAVING:$place[0],burn,"Elbereth"
|
||||
|
||||
|
||||
MAZE:"soko1-2",' '
|
||||
FLAGS:noteleport
|
||||
FLAGS:noteleport,premapped,solidify
|
||||
GEOMETRY:center,center
|
||||
#12345678901234567890123456789012345678901234567890
|
||||
MAP
|
||||
@@ -554,35 +560,37 @@ MAP
|
||||
|..|..| --|.....|
|
||||
------- -------
|
||||
ENDMAP
|
||||
RANDOM_PLACES:(16,10),(16,12),(16,14)
|
||||
$place = { (16,10),(16,12),(16,14) }
|
||||
SHUFFLE: $place
|
||||
|
||||
STAIR:(06,15),down
|
||||
REGION:(00,00,25,16),lit,"ordinary"
|
||||
NON_DIGGABLE:(00,00,25,16)
|
||||
NON_PASSWALL:(00,00,25,16)
|
||||
|
||||
# Boulders
|
||||
OBJECT:'`',"boulder",(04,04)
|
||||
OBJECT:'`',"boulder",(02,06)
|
||||
OBJECT:'`',"boulder",(03,06)
|
||||
OBJECT:'`',"boulder",(04,07)
|
||||
OBJECT:'`',"boulder",(05,07)
|
||||
OBJECT:'`',"boulder",(02,08)
|
||||
OBJECT:'`',"boulder",(05,08)
|
||||
OBJECT:'`',"boulder",(03,09)
|
||||
OBJECT:'`',"boulder",(04,09)
|
||||
OBJECT:'`',"boulder",(03,10)
|
||||
OBJECT:'`',"boulder",(05,10)
|
||||
OBJECT:'`',"boulder",(06,12)
|
||||
OBJECT:('`',"boulder"),(04,04)
|
||||
OBJECT:('`',"boulder"),(02,06)
|
||||
OBJECT:('`',"boulder"),(03,06)
|
||||
OBJECT:('`',"boulder"),(04,07)
|
||||
OBJECT:('`',"boulder"),(05,07)
|
||||
OBJECT:('`',"boulder"),(02,08)
|
||||
OBJECT:('`',"boulder"),(05,08)
|
||||
OBJECT:('`',"boulder"),(03,09)
|
||||
OBJECT:('`',"boulder"),(04,09)
|
||||
OBJECT:('`',"boulder"),(03,10)
|
||||
OBJECT:('`',"boulder"),(05,10)
|
||||
OBJECT:('`',"boulder"),(06,12)
|
||||
#
|
||||
OBJECT:'`',"boulder",(07,14)
|
||||
OBJECT:('`',"boulder"),(07,14)
|
||||
#
|
||||
OBJECT:'`',"boulder",(11,05)
|
||||
OBJECT:'`',"boulder",(12,06)
|
||||
OBJECT:'`',"boulder",(10,07)
|
||||
OBJECT:'`',"boulder",(11,07)
|
||||
OBJECT:'`',"boulder",(10,08)
|
||||
OBJECT:'`',"boulder",(12,09)
|
||||
OBJECT:'`',"boulder",(11,10)
|
||||
OBJECT:('`',"boulder"),(11,05)
|
||||
OBJECT:('`',"boulder"),(12,06)
|
||||
OBJECT:('`',"boulder"),(10,07)
|
||||
OBJECT:('`',"boulder"),(11,07)
|
||||
OBJECT:('`',"boulder"),(10,08)
|
||||
OBJECT:('`',"boulder"),(12,09)
|
||||
OBJECT:('`',"boulder"),(11,10)
|
||||
|
||||
# Traps
|
||||
TRAP:"hole",(05,01)
|
||||
@@ -604,22 +612,26 @@ TRAP:"hole",(20,01)
|
||||
TRAP:"hole",(21,01)
|
||||
TRAP:"hole",(22,01)
|
||||
|
||||
MONSTER:'m',"giant mimic", random, m_object "boulder"
|
||||
MONSTER:'m',"giant mimic", random, m_object "boulder"
|
||||
MONSTER:('m',"giant mimic"), random, m_object "boulder"
|
||||
MONSTER:('m',"giant mimic"), random, m_object "boulder"
|
||||
|
||||
# Random objects
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'%',random,random
|
||||
OBJECT:'=',random,random
|
||||
OBJECT:'/',random,random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'%',random
|
||||
OBJECT:'=',random
|
||||
OBJECT:'/',random
|
||||
|
||||
# Rewards
|
||||
DOOR:locked,(23,12)
|
||||
DOOR:closed,(17,10)
|
||||
DOOR:closed,(17,12)
|
||||
DOOR:closed,(17,14)
|
||||
REGION:(18,09,22,15),lit,"zoo",filled,true
|
||||
OBJECT:'"',"amulet of reflection",place[0]
|
||||
ENGRAVING:place[0],burn,"Elbereth"
|
||||
REGION:(18,09,22,15),lit,"zoo",filled,irregular
|
||||
IF [50%] {
|
||||
OBJECT:('(',"bag of holding"),$place[0]
|
||||
} ELSE {
|
||||
OBJECT:('"',"amulet of reflection"),$place[0]
|
||||
}
|
||||
ENGRAVING:$place[0],burn,"Elbereth"
|
||||
|
||||
104
dat/tower.des
104
dat/tower.des
@@ -6,7 +6,7 @@
|
||||
#
|
||||
# Upper stage of Vlad's tower
|
||||
MAZE:"tower1",' '
|
||||
FLAGS: noteleport,hardfloor
|
||||
FLAGS: noteleport,hardfloor,solidify
|
||||
GEOMETRY:half-left,center
|
||||
MAP
|
||||
--- --- ---
|
||||
@@ -23,13 +23,13 @@ MAP
|
||||
ENDMAP
|
||||
LADDER:(11,05),down
|
||||
# The lord and his court
|
||||
MONSTER:'V',"Vlad the Impaler",(06,05)
|
||||
MONSTER:'V',random,(03,09)
|
||||
MONSTER:'V',random,(07,09)
|
||||
MONSTER:'V',random,(11,09)
|
||||
MONSTER:'V',random,(03,01)
|
||||
MONSTER:'V',random,(07,01)
|
||||
MONSTER:'V',random,(11,01)
|
||||
MONSTER:('V',"Vlad the Impaler"),(06,05)
|
||||
MONSTER:'V',(03,09)
|
||||
MONSTER:'V',(07,09)
|
||||
MONSTER:'V',(11,09)
|
||||
MONSTER:'V',(03,01)
|
||||
MONSTER:'V',(07,01)
|
||||
MONSTER:'V',(11,01)
|
||||
# The doors
|
||||
DOOR:closed,(08,03)
|
||||
DOOR:closed,(10,03)
|
||||
@@ -39,20 +39,20 @@ DOOR:locked,(08,07)
|
||||
DOOR:locked,(10,07)
|
||||
DOOR:closed,(03,06)
|
||||
# treasures
|
||||
OBJECT:'(',"chest",(07,05)
|
||||
OBJECT:'(',"chest",(03,09)
|
||||
OBJECT:'(',"chest",(07,09)
|
||||
OBJECT:'(',"chest",(11,09)
|
||||
OBJECT:'(',"chest",(03,01)
|
||||
OBJECT:'(',"chest",(07,01)
|
||||
OBJECT:'(',"chest",(11,01)
|
||||
OBJECT:('(',"chest"),(07,05)
|
||||
OBJECT:('(',"chest"),(03,09)
|
||||
OBJECT:('(',"chest"),(07,09)
|
||||
OBJECT:('(',"chest"),(11,09)
|
||||
OBJECT:('(',"chest"),(03,01)
|
||||
OBJECT:('(',"chest"),(07,01)
|
||||
OBJECT:('(',"chest"),(11,01)
|
||||
# We have to protect the tower against outside attacks
|
||||
NON_DIGGABLE:(00,00,14,10)
|
||||
|
||||
|
||||
# Intermediate stage of Vlad's tower
|
||||
MAZE:"tower2",' '
|
||||
FLAGS: noteleport,hardfloor
|
||||
FLAGS: noteleport,hardfloor,solidify
|
||||
GEOMETRY:half-left,center
|
||||
MAP
|
||||
--- --- ---
|
||||
@@ -68,31 +68,34 @@ MAP
|
||||
--- --- ---
|
||||
ENDMAP
|
||||
# Random places are the 10 niches
|
||||
RANDOM_PLACES:(03,01),(07,01),(11,01),(01,03),(13,03),
|
||||
(01,07),(13,07),(03,09),(07,09),(11,09)
|
||||
$place = { (03,01),(07,01),(11,01),(01,03),(13,03),
|
||||
(01,07),(13,07),(03,09),(07,09),(11,09) }
|
||||
SHUFFLE: $place
|
||||
LADDER:(11,05),up
|
||||
LADDER:(03,07),down
|
||||
DOOR:locked,(10,04)
|
||||
DOOR:locked,(09,07)
|
||||
MONSTER:'&',random,place[0]
|
||||
MONSTER:'&',random,place[1]
|
||||
MONSTER:'d',"hell hound pup",place[2]
|
||||
MONSTER:'d',"hell hound pup",place[3]
|
||||
MONSTER:'d',"winter wolf",place[4]
|
||||
CONTAINER:'(',"chest",place[5]
|
||||
OBJECT:'"',"amulet of life saving",contained
|
||||
CONTAINER:'(',"chest",place[6]
|
||||
OBJECT:'"',"amulet of strangulation",contained
|
||||
OBJECT:'[',"water walking boots",place[7]
|
||||
OBJECT:'[',"crystal plate mail",place[8]
|
||||
OBJECT:'+',"invisibility",place[9]
|
||||
MONSTER:'&',$place[0]
|
||||
MONSTER:'&',$place[1]
|
||||
MONSTER:('d',"hell hound pup"),$place[2]
|
||||
MONSTER:('d',"hell hound pup"),$place[3]
|
||||
MONSTER:('d',"winter wolf"),$place[4]
|
||||
CONTAINER:('(',"chest"),$place[5] {
|
||||
OBJECT:('"',"amulet of life saving")
|
||||
}
|
||||
CONTAINER:('(',"chest"),$place[6] {
|
||||
OBJECT:('"',"amulet of strangulation")
|
||||
}
|
||||
OBJECT:('[',"water walking boots"),$place[7]
|
||||
OBJECT:('[',"crystal plate mail"),$place[8]
|
||||
OBJECT:('+',"invisibility"),$place[9]
|
||||
# Walls in the tower are non diggable
|
||||
NON_DIGGABLE:(00,00,14,10)
|
||||
|
||||
|
||||
# Bottom most stage of Vlad's tower
|
||||
MAZE:"tower3",' '
|
||||
FLAGS: noteleport,hardfloor
|
||||
FLAGS: noteleport,hardfloor,solidify
|
||||
GEOMETRY:half-left,center
|
||||
MAP
|
||||
--- --- ---
|
||||
@@ -110,29 +113,30 @@ MAP
|
||||
---------------
|
||||
ENDMAP
|
||||
# Random places are the 10 niches
|
||||
RANDOM_PLACES:(05,01),(09,01),(13,01),(03,03),(15,03),
|
||||
(03,07),(15,07),(05,09),(09,09),(13,09)
|
||||
$place = { (05,01),(09,01),(13,01),(03,03),(15,03),
|
||||
(03,07),(15,07),(05,09),(09,09),(13,09) }
|
||||
SHUFFLE: $place
|
||||
BRANCH:(02,05,02,05),(00,00,00,00)
|
||||
LADDER:(05,07),up
|
||||
# Entry door is, of course, locked
|
||||
DOOR:locked,(14,05)
|
||||
# Let's put a dragon behind the door, just for the fun...
|
||||
MONSTER:'D',random,(13,05)
|
||||
MONSTER:random,random,(12,04)
|
||||
MONSTER:random,random,(12,06)
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
MONSTER:random,random,random
|
||||
OBJECT:')',"long sword",place[0]
|
||||
TRAP:random,place[0]
|
||||
OBJECT:'(',"lock pick",place[1]
|
||||
TRAP:random,place[1]
|
||||
OBJECT:'[',"elven cloak",place[2]
|
||||
TRAP:random,place[2]
|
||||
OBJECT:'(',"blindfold",place[3]
|
||||
TRAP:random,place[3]
|
||||
MONSTER:'D',(13,05)
|
||||
MONSTER:random,(12,04)
|
||||
MONSTER:random,(12,06)
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
MONSTER:random,random
|
||||
OBJECT:(')',"long sword"),$place[0]
|
||||
TRAP:random,$place[0]
|
||||
OBJECT:('(',"lock pick"),$place[1]
|
||||
TRAP:random,$place[1]
|
||||
OBJECT:('[',"elven cloak"),$place[2]
|
||||
TRAP:random,$place[2]
|
||||
OBJECT:('(',"blindfold"),$place[3]
|
||||
TRAP:random,$place[3]
|
||||
# Walls in the tower are non diggable
|
||||
NON_DIGGABLE:(00,00,18,12)
|
||||
|
||||
122
dat/yendor.des
122
dat/yendor.des
@@ -48,29 +48,29 @@ NON_PASSWALL:(11,00,21,00)
|
||||
NON_PASSWALL:(11,10,27,12)
|
||||
NON_PASSWALL:(21,00,27,10)
|
||||
# The wizard and his guards
|
||||
MONSTER:'@',"Wizard of Yendor",(16,05),asleep
|
||||
MONSTER:'d',"hell hound",(15,05)
|
||||
MONSTER:'V',"vampire lord",(17,05)
|
||||
MONSTER:('@',"Wizard of Yendor"),(16,05),asleep
|
||||
MONSTER:('d',"hell hound"),(15,05)
|
||||
MONSTER:('V',"vampire lord"),(17,05)
|
||||
# The local treasure
|
||||
OBJECT:'+',"Book of the Dead",(16,05)
|
||||
OBJECT:('+',"Book of the Dead"),(16,05)
|
||||
# Surrounding terror
|
||||
MONSTER:';',"kraken",(14,02)
|
||||
MONSTER:';',"giant eel",(17,02)
|
||||
MONSTER:';',"kraken",(13,04)
|
||||
MONSTER:';',"giant eel",(13,06)
|
||||
MONSTER:';',"kraken",(19,04)
|
||||
MONSTER:';',"giant eel",(19,06)
|
||||
MONSTER:';',"kraken",(15,08)
|
||||
MONSTER:';',"giant eel",(17,08)
|
||||
MONSTER:';',"piranha",(15,02)
|
||||
MONSTER:';',"piranha",(19,08)
|
||||
MONSTER:(';',"kraken"),(14,02)
|
||||
MONSTER:(';',"giant eel"),(17,02)
|
||||
MONSTER:(';',"kraken"),(13,04)
|
||||
MONSTER:(';',"giant eel"),(13,06)
|
||||
MONSTER:(';',"kraken"),(19,04)
|
||||
MONSTER:(';',"giant eel"),(19,06)
|
||||
MONSTER:(';',"kraken"),(15,08)
|
||||
MONSTER:(';',"giant eel"),(17,08)
|
||||
MONSTER:(';',"piranha"),(15,02)
|
||||
MONSTER:(';',"piranha"),(19,08)
|
||||
# Random monsters
|
||||
MONSTER:'D',random,random
|
||||
MONSTER:'H',random,random
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'D',random
|
||||
MONSTER:'H',random
|
||||
MONSTER:'&',random
|
||||
MONSTER:'&',random
|
||||
MONSTER:'&',random
|
||||
MONSTER:'&',random
|
||||
# And to make things a little harder.
|
||||
TRAP:"board",(16,04)
|
||||
TRAP:"board",(16,06)
|
||||
@@ -82,14 +82,14 @@ TRAP:"sleep gas",random
|
||||
TRAP:"anti magic",random
|
||||
TRAP:"magic",random
|
||||
# Some random loot.
|
||||
OBJECT:'*',"ruby",random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'+',random,random
|
||||
OBJECT:'+',random,random
|
||||
OBJECT:'+',random,random
|
||||
OBJECT:('*',"ruby"),random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'+',random
|
||||
OBJECT:'+',random
|
||||
OBJECT:'+',random
|
||||
|
||||
|
||||
# The middle wizard level.
|
||||
@@ -136,13 +136,13 @@ TRAP:"sleep gas",random
|
||||
TRAP:"anti magic",random
|
||||
TRAP:"magic",random
|
||||
# Some random loot.
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'+',random,random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'+',random
|
||||
# treasures
|
||||
OBJECT:'"',random,(04,06)
|
||||
OBJECT:'"',(04,06)
|
||||
|
||||
|
||||
# The bottom wizard level.
|
||||
@@ -191,33 +191,33 @@ NON_PASSWALL:(06,00,27,02)
|
||||
NON_PASSWALL:(16,02,27,12)
|
||||
NON_PASSWALL:(06,12,16,12)
|
||||
#
|
||||
MONSTER:'L',random,(10,07)
|
||||
MONSTER:'V',"vampire lord",(12,07)
|
||||
MONSTER:'L',(10,07)
|
||||
MONSTER:('V',"vampire lord"),(12,07)
|
||||
# Some surrounding horrors
|
||||
MONSTER:';',"kraken",(08,05)
|
||||
MONSTER:';',"giant eel",(08,08)
|
||||
MONSTER:';',"kraken",(14,05)
|
||||
MONSTER:';',"giant eel",(14,08)
|
||||
MONSTER:(';',"kraken"),(08,05)
|
||||
MONSTER:(';',"giant eel"),(08,08)
|
||||
MONSTER:(';',"kraken"),(14,05)
|
||||
MONSTER:(';',"giant eel"),(14,08)
|
||||
# Other monsters
|
||||
MONSTER:'L',random,random
|
||||
MONSTER:'D',random,random
|
||||
MONSTER:'D',random,(26,09)
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'&',random,random
|
||||
MONSTER:'L',random
|
||||
MONSTER:'D',random
|
||||
MONSTER:'D',(26,09)
|
||||
MONSTER:'&',random
|
||||
MONSTER:'&',random
|
||||
MONSTER:'&',random
|
||||
# And to make things a little harder.
|
||||
TRAP:"board",(10,07)
|
||||
TRAP:"board",(12,07)
|
||||
TRAP:"board",(11,06)
|
||||
TRAP:"board",(11,08)
|
||||
# Some loot
|
||||
OBJECT:')',random,random
|
||||
OBJECT:'!',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'?',random,random
|
||||
OBJECT:'(',random,random
|
||||
OBJECT:')',random
|
||||
OBJECT:'!',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'?',random
|
||||
OBJECT:'(',random
|
||||
# treasures
|
||||
OBJECT:'"',random,(11,07)
|
||||
OBJECT:'"',(11,07)
|
||||
|
||||
|
||||
# The former decoy wizard levels.
|
||||
@@ -241,10 +241,10 @@ BRANCH:levregion(01,00,79,20),(0,0,8,7)
|
||||
TELEPORT_REGION:levregion(01,00,79,20),(2,2,6,6)
|
||||
PORTAL:(4,4,4,4),(0,0,0,0),"wizard3"
|
||||
MAZEWALK:(08,05),east
|
||||
REGION:(04,03,06,06),unlit,"ordinary",unfilled,true
|
||||
MONSTER:'L',random,(04,04)
|
||||
MONSTER:'V',"vampire lord",(03,04)
|
||||
MONSTER:';',"kraken",(06,06)
|
||||
REGION:(04,03,06,06),unlit,"ordinary",unfilled,irregular
|
||||
MONSTER:'L',(04,04)
|
||||
MONSTER:('V',"vampire lord"),(03,04)
|
||||
MONSTER:(';',"kraken"),(06,06)
|
||||
# And to make things a little harder.
|
||||
TRAP:"board",(04,03)
|
||||
TRAP:"board",(04,05)
|
||||
@@ -269,14 +269,14 @@ STAIR:levregion(01,00,79,20),(0,0,8,7),down
|
||||
BRANCH:levregion(01,00,79,20),(0,0,8,7)
|
||||
TELEPORT_REGION:levregion(01,00,79,20),(2,2,6,6)
|
||||
MAZEWALK:(08,05),east
|
||||
REGION:(04,03,06,06),unlit,"ordinary",unfilled,true
|
||||
MONSTER:'L',random,(04,04)
|
||||
MONSTER:'V',"vampire lord",(03,04)
|
||||
MONSTER:';',"kraken",(06,06)
|
||||
REGION:(04,03,06,06),unlit,"ordinary",unfilled,irregular
|
||||
MONSTER:'L',(04,04)
|
||||
MONSTER:('V',"vampire lord"),(03,04)
|
||||
MONSTER:(';',"kraken"),(06,06)
|
||||
# And to make things a little harder.
|
||||
TRAP:"board",(04,03)
|
||||
TRAP:"board",(04,05)
|
||||
TRAP:"board",(03,04)
|
||||
TRAP:"board",(05,04)
|
||||
# treasures
|
||||
OBJECT:'"',random,(04,04)
|
||||
OBJECT:'"',(04,04)
|
||||
|
||||
8
doc/.gitattributes
vendored
8
doc/.gitattributes
vendored
@@ -1,5 +1,5 @@
|
||||
*.mn filter=NHtext merge=NHsubst
|
||||
*.6 filter=NHtext merge=NHsubst
|
||||
fixes.* filter=NHtext merge=NHsubst
|
||||
window.doc filter=NHtext merge=NHsubst
|
||||
*.mn NHSUBST
|
||||
*.6 NHSUBST
|
||||
fixes.* NHSUBST
|
||||
window.doc NHSUBST
|
||||
|
||||
|
||||
232
doc/Guidebook.mn
232
doc/Guidebook.mn
@@ -1,12 +1,12 @@
|
||||
.\" $NHDT-Branch$:$NHDT-Revision$ $NHDT-Date$
|
||||
.\" $Revision: 1.130 $ $Date: 2012/05/02 00:38:30 $
|
||||
.\" $Revision: 1.130 $ $Date: 2015/03/27 00:38:30 $
|
||||
.ds h0 "NetHack Guidebook
|
||||
.ds h1
|
||||
.ds h2 %
|
||||
.ds vr "NetHack 3.5
|
||||
.ds vr "NetHack 3.6
|
||||
.ds f0 "\*(vr
|
||||
.ds f1
|
||||
.ds f2 "April 7, 2012
|
||||
.ds f2 "March 27, 2015
|
||||
.\" labeled paragraph start (should be part of tmac.n, but I don't want to
|
||||
.\" make changes to that file)
|
||||
.\" .PS word
|
||||
@@ -58,7 +58,7 @@ A Guide to the Mazes of Menace
|
||||
(Guidebook for NetHack)
|
||||
.au
|
||||
Eric S. Raymond
|
||||
(Extensively edited and expanded for 3.5)
|
||||
(Edited and expanded for 3.6)
|
||||
.hn 1
|
||||
Introduction
|
||||
|
||||
@@ -708,13 +708,8 @@ The latter is used as your secondary weapon when engaging in
|
||||
two-weapon combat. Note that if one of these slots is empty,
|
||||
the exchange still takes place.
|
||||
.lp X
|
||||
Enter explore (discovery) mode, explained in its own section later.
|
||||
.lp ""
|
||||
Since using this command by accident would be troublesome, you are asked
|
||||
to confirm your intent before switching to explore mode. By default
|
||||
the response 'y' acknowledges that intent. You can set the
|
||||
.op paraniod_confirmation
|
||||
option to require a response of "yes" instead.
|
||||
Toggle two-weapon combat, if your character can do it. Also available
|
||||
via the ``#twoweapon'' extended command
|
||||
.lp ^X
|
||||
Display basic information about your character.
|
||||
.lp ""
|
||||
@@ -847,7 +842,7 @@ You probably shouldn't start off a new game by praying right away.)
|
||||
Since using this command by accident can cause trouble, there is an
|
||||
option to make you confirm your intent before praying. It is enabled
|
||||
by default, and you can reset the
|
||||
.op paraniod_confirmation
|
||||
.op paranoid_confirmation
|
||||
option to disable it.
|
||||
.lp #quit
|
||||
Quit the program without saving your game.
|
||||
@@ -855,7 +850,7 @@ Quit the program without saving your game.
|
||||
Since using this command by accident would throw away the current game,
|
||||
you are asked to confirm your intent before quitting. By default a
|
||||
response of 'y' acknowledges that intent. You can set the
|
||||
.op paraniod_confirmation
|
||||
.op paranoid_confirmation
|
||||
option to require a response of "yes" instead.
|
||||
.lp #ride
|
||||
Ride (or stop riding) a monster.
|
||||
@@ -1137,7 +1132,7 @@ In most circumstances, if you attempt to attack a peaceful monster by
|
||||
moving into its location, you'll be asked to confirm your intent. By
|
||||
default an answer of 'y' acknowledges that intent,
|
||||
which can be error prone if you're using 'y' to move. You can set the
|
||||
.op paraniod_confirmation
|
||||
.op paranoid_confirmation
|
||||
option to require a response of "yes" instead.
|
||||
.pg
|
||||
If you can't see a monster (if it is invisible, or if you are blinded),
|
||||
@@ -1882,8 +1877,7 @@ the character position in the current font to be used in displaying
|
||||
each entry. Such a sequence can be continued to multiple lines by putting a `\e'
|
||||
at the end of each line to be continued.
|
||||
.pg
|
||||
If your copy of the game included the compile time AUTOPICKUP_EXCEPTIONS
|
||||
option, then any line starting with ``AUTOPICKUP_EXCEPTION='' is taken
|
||||
Any line starting with ``AUTOPICKUP_EXCEPTION='' is taken
|
||||
as defining an exception to the
|
||||
.op pickup_types
|
||||
option.
|
||||
@@ -1927,6 +1921,10 @@ quality of the weapon; you are free to manually fill your quiver or quiver sack
|
||||
or make ready
|
||||
with the `Q' command instead. If no weapon is found or the option is
|
||||
false, the `t' (throw) command is executed instead. (default false)
|
||||
.lp blind
|
||||
Start the character permanently blind. (default false)
|
||||
.lp bones
|
||||
Allow saving and loading bones files. (default true)
|
||||
.lp boulder
|
||||
Set the character used to display boulders (default is rock class symbol).
|
||||
.lp catname
|
||||
@@ -2051,6 +2049,11 @@ Enable mail delivery during the game (default on).
|
||||
.lp "male "
|
||||
An obsolete synonym for ``gender:male''.
|
||||
Cannot be set with the `O' command.
|
||||
.lp mention_walls
|
||||
Give feedback when walking against a wall (default off).
|
||||
.lp menucolors
|
||||
Enable coloring menu lines (default off).
|
||||
See ``Configuring Menu Colors'' on how to configure the colors.
|
||||
.lp menustyle
|
||||
Controls the interface used when you need to choose various objects (in
|
||||
response to the Drop command, for instance). The value specified should
|
||||
@@ -2096,13 +2099,16 @@ Default '|'.
|
||||
Menu character accelerator to goto the next menu page.
|
||||
Implemented by the Amiga, Gem and tty ports.
|
||||
Default '>'.
|
||||
.lp menu_objsyms
|
||||
Show object symbols in menu headings in menus where
|
||||
the object symbols act as menu accelerators (default off).
|
||||
.lp menu_previous_page
|
||||
Menu character accelerator to goto the previous menu page.
|
||||
Implemented by the Amiga, Gem and tty ports.
|
||||
Default '<'.
|
||||
.lp menu_search
|
||||
Menu character accelerator to search for a menu item.
|
||||
Implemented by the Amiga, Gem and X11 ports.
|
||||
Implemented by the Amiga, Gem, X11 and tty ports.
|
||||
Default ':'.
|
||||
.lp menu_select_all
|
||||
Menu character accelerator to select all items in a menu.
|
||||
@@ -2142,6 +2148,8 @@ Cannot be set with the `O' command.
|
||||
Read the NetHack news file, if present (default on).
|
||||
Since the news is shown at the beginning of the game, there's no point
|
||||
in setting this with the `O' command.
|
||||
.lp nudist
|
||||
Start the character with no armor (default false).
|
||||
.lp "null "
|
||||
Send padding nulls to the terminal (default on).
|
||||
.lp number_pad
|
||||
@@ -2168,7 +2176,7 @@ is the same as specifying 0.
|
||||
(Settings 2 and 4 are for compatibility with MSDOS or old PC Hack;
|
||||
in addition to the different behavior for `5', `Alt-5' acts as `G'
|
||||
and `Alt-0' acts as `I'.
|
||||
Setting -1 is to accomodate some German keyboards which have the
|
||||
Setting -1 is to accommodate some German keyboards which have the
|
||||
location of the `y' and `z' keys swapped.)
|
||||
When moving by numbers, to enter a count prefix for those commands
|
||||
which accept one (such as ``12s'' to search twelve times), precede it
|
||||
@@ -2234,8 +2242,7 @@ or match an autopickup exception. Default is on.
|
||||
.lp pickup_types
|
||||
Specify the object types to be picked up when
|
||||
.op autopickup
|
||||
is on. Default is all types. If your copy of the game has the
|
||||
compile time option AUTOPICKUP_EXCEPTIONS included, you may be able to use
|
||||
is on. Default is all types. You can use
|
||||
.op autopickup_exception
|
||||
configuration file lines to further refine
|
||||
.op autopickup
|
||||
@@ -2453,6 +2460,8 @@ Specify the name of an alternative tile file to override the default.
|
||||
Specify the preferred height of each tile in a tile capable port.
|
||||
.lp tile_width
|
||||
Specify the preferred width of each tile in a tile capable port
|
||||
.lp use_darkgray
|
||||
Use bold black instead of blue for black glyphs (TTY only).
|
||||
.lp use_inverse
|
||||
NetHack should display inverse when the game specifies it.
|
||||
.lp vary_msgcount
|
||||
@@ -2540,9 +2549,7 @@ Cannot be set with the `O' command.
|
||||
.hn 2
|
||||
Configuring autopickup exceptions
|
||||
.pg
|
||||
There is a compile time option called AUTOPICKUP_EXCEPTIONS.
|
||||
If your copy of the game was built with that option defined, you can
|
||||
further refine the behavior of the
|
||||
You can further refine the behavior of the
|
||||
.op autopickup
|
||||
option beyond what is available through the
|
||||
.op pickup_types
|
||||
@@ -2600,6 +2607,56 @@ The second example results in the exclusion of any corpse from autopickup.
|
||||
The last example results in the exclusion of items known to be cursed from
|
||||
autopickup.
|
||||
.hn 2
|
||||
Configuring Menu Colors
|
||||
.pg
|
||||
Some platforms allow you to define colors used in menu lines when the
|
||||
line matches a user-defined pattern. At this time the tty, win32tty and
|
||||
win32gui support this.
|
||||
.pg
|
||||
In general, the config file entries to configure the menu color mappings
|
||||
look like this:
|
||||
.si
|
||||
.lp MENUCOLOR="pattern"=color&attribute
|
||||
.ei
|
||||
.PS "menu color"
|
||||
.PL pattern
|
||||
the pattern to match;
|
||||
.PL color
|
||||
the color to use for lines matching the pattern;
|
||||
.PL attribute
|
||||
the attribute to use for lines matching the pattern. The attribute is
|
||||
optional, and if left out, you must also leave out the preceding ampersand.
|
||||
If no attribute is defined, no attribute is used.
|
||||
.PE
|
||||
.lp ""
|
||||
For explanation on pattern format and the matching routines, see
|
||||
the pattern in the ``Configuring User Sounds'' -section.
|
||||
.lp ""
|
||||
Allowed colors are black, red, green, brown, blue, magenta, cyan, gray,
|
||||
orange, lightgreen, yellow, lightblue, lightmagenta, lightcyan, and white.
|
||||
.lp ""
|
||||
Allowed attributes are none, bold, dim, underline, blink, and inverse.
|
||||
Note that the platform used may interpret the attributes any way it
|
||||
wants.
|
||||
.lp ""
|
||||
Here's an example of menu colors using NetHack's internal
|
||||
pattern matching facility:
|
||||
.sd
|
||||
.si
|
||||
MENUCOLOR="* blessed *"=green
|
||||
MENUCOLOR="* cursed *"=red
|
||||
MENUCOLOR="* cursed *(being worn)"=red&underline
|
||||
.ei
|
||||
.ed
|
||||
specifies that any menu line with " blessed " contained
|
||||
in it will be shown in green color, lines with " cursed " will be
|
||||
shown in red, and lines with " cursed " followed by "(being worn)"
|
||||
on the same line will be shown in red color and underlined.
|
||||
You can have multiple MENUCOLOR entries in your config file,
|
||||
and the last MENUCOLOR-line in your config file that matches
|
||||
a menu line will be used for the line.
|
||||
.pg
|
||||
.hn 2
|
||||
Configuring User Sounds
|
||||
.pg
|
||||
Some platforms allow you to define sound files to be played when a message
|
||||
@@ -2780,6 +2837,7 @@ O S_ogre (ogre)
|
||||
o S_orc (orc)
|
||||
p S_piercer (piercer)
|
||||
^ S_pit (pit)
|
||||
# S_poisoncloud (poison cloud)
|
||||
^ S_polymorph_trap (polymorph trap)
|
||||
} S_pool (water)
|
||||
! S_potion (potion)
|
||||
@@ -2918,6 +2976,10 @@ SHELLERS
|
||||
A list of users who are allowed to use the shell escape command (!). The
|
||||
syntax is the same as WIZARDS.
|
||||
.lp
|
||||
EXPLORERS
|
||||
A list of users who are allowed to use the explore mode. The
|
||||
syntax is the same as WIZARDS.
|
||||
.lp
|
||||
MAXPLAYERS
|
||||
Limit the maximum number of games that can be running at the same time.
|
||||
.lp
|
||||
@@ -2946,6 +3008,10 @@ Minimum number of points to get an entry in the score file.
|
||||
PERS_IS_UID
|
||||
0 or 1 to use user names or numeric userids, respectively, to identify
|
||||
unique people for the score file.
|
||||
.lp
|
||||
MAX_STATUENAME_RANK
|
||||
Maximum number of score file entries to use for random statue names
|
||||
(default is 10).
|
||||
.hn 1
|
||||
Scoring
|
||||
.pg
|
||||
@@ -2984,9 +3050,9 @@ with the
|
||||
.op -X
|
||||
command-line switch or with the
|
||||
.op playmode:explore
|
||||
option. The other is to issue the `X' command while already
|
||||
playing the game. Starting a new game in explore mode provides your
|
||||
character with a wand of wishing in initial inventory; switching via `X'
|
||||
option. The other is to issue the ``#exploremode'' extended command while
|
||||
already playing the game. Starting a new game in explore mode provides your
|
||||
character with a wand of wishing in initial inventory; switching
|
||||
during play does not. The other benefits of explore mode are left for
|
||||
the trepid reader to discover.
|
||||
.pg
|
||||
@@ -3154,7 +3220,7 @@ available web-site listing all the bugs that had been discovered. Despite
|
||||
that constantly growing bug list, 3.3 proved stable enough to last for
|
||||
more than a year and a half.
|
||||
.pg
|
||||
The 3.5 development team initially consisted of
|
||||
The 3.4 development team initially consisted of
|
||||
\fBMichael Allison\fP, \fBKen Arromdee\fP,
|
||||
\fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBKevin Hugo\fP, \fBKen Lorber\fP,
|
||||
\fBDean Luick\fP, \fBPat Rankin\fP, \fBMike Stephenson\fP,
|
||||
@@ -3164,16 +3230,16 @@ just before the release of NetHack 3.4.0 in March 2002.
|
||||
As with version 3.3, various people contributed to the game as a whole as
|
||||
well as supporting ports on the different platforms that NetHack runs on:
|
||||
.pg
|
||||
\fBPat Rankin\fP maintained 3.5 for VMS.
|
||||
\fBPat Rankin\fP maintained 3.4 for VMS.
|
||||
.pg
|
||||
\fBMichael Allison\fP maintained NetHack 3.5 for the MS-DOS platform. \fBPaul Winner\fP
|
||||
\fBMichael Allison\fP maintained NetHack 3.4 for the MS-DOS platform. \fBPaul Winner\fP
|
||||
and \fBYitzhak Sapir\fP provided encouragement.
|
||||
.pg
|
||||
\fBDean Luick\fP, \fBMark Modrall\fP, and \fBKevin Hugo\fP maintained and enhanced the
|
||||
Macintosh port of 3.4.
|
||||
.pg
|
||||
\fBMichael Allison\fP, \fBDavid Cohrs\fP, \fBAlex Kompel\fP, \fBDion Nicolaas\fP, and
|
||||
\fBYitzhak Sapir\fP maintained and enhanced 3.5 for the Microsoft Windows platform.
|
||||
\fBYitzhak Sapir\fP maintained and enhanced 3.4 for the Microsoft Windows platform.
|
||||
\fBAlex Kompel\fP contributed a new graphical interface for the Windows port.
|
||||
\fBAlex Kompel\fP also contributed a Windows CE port for 3.4.1.
|
||||
.pg
|
||||
@@ -3183,13 +3249,77 @@ early 2006. A great many thanks to Ron for keeping NetHack alive on OS/2
|
||||
all these years.
|
||||
.pg
|
||||
\fBJanne Salmijarvi\fP and \fBTeemu Suikki\fP maintained and
|
||||
enhanced the Amiga port of 3.5 after \fBJanne Salmijarvi\fP resurrected
|
||||
enhanced the Amiga port of 3.4 after \fBJanne Salmijarvi\fP resurrected
|
||||
it for 3.3.1.
|
||||
.pg
|
||||
\fBChristian ``Marvin'' Bressler\fP maintained 3.5 for the Atari after he
|
||||
\fBChristian ``Marvin'' Bressler\fP maintained 3.4 for the Atari after he
|
||||
resurrected it for 3.3.1.
|
||||
.pg
|
||||
The release of NetHack 3.4.3 in December 2003 marked the beginning of a
|
||||
long release hiatus. 3.4.3 proved to be a remarkably stable version that
|
||||
provided continued enjoyment by the community for more than a decade. The
|
||||
devteam slowly and quietly continued to work on the game behind the scenes
|
||||
during the tenure of 3.4.3. It was during that same period that several new
|
||||
variants emerged within the NetHack community. Notably sporkhack by
|
||||
\fBDerek S. Ray\fP, unnethack by \fBPatric Mueller\fP, nitrohack and its
|
||||
successors originally by \fBDaniel Thaler\fP and then by \fBAlex Smith\fP,
|
||||
and Dynahack by \fBTung Nguyen\fP. Some of those variants continue to be
|
||||
developed, maintained, and enjoyed by the community to this day.
|
||||
.pg
|
||||
In September 2014, an interim snapshot of the code under development was
|
||||
released publicly by other parties. Since that code was a work-in-progress
|
||||
and had not gone through a period of debugging, it was decided that the
|
||||
version numbers present on that code snapshot would be retired and never
|
||||
used in an official NetHack release. An announcement was posted on the
|
||||
devteam's official nethack.org website to that effect, stating that there
|
||||
would never be a 3.4.4, 3.5, or 3.5.0 official release version.
|
||||
.pg
|
||||
In January 2015, preparation began for the release of NetHack 3.6
|
||||
.pg
|
||||
At the beginning of development for what would eventually get released
|
||||
as 3.6.0, the development team consisted of \fBWarwick Allison\fP,
|
||||
\fBMichael Allison\fP, \fBKen Arromdee\fP,
|
||||
\fBDavid Cohrs\fP, \fBJessie Collet\fP,
|
||||
\fBKen Lorber\fP, \fBDean Luick\fP, \fBPat Rankin\fP,
|
||||
\fBMike Stephenson\fP, \fBJanet Walz\fP, and \fBPaul Winner\fP.
|
||||
Leading up to the release of 3.6.0 in early 2015, new members
|
||||
\fBSean Hunt\fP, \fBPasi Kallinen\fP, and \fBDerek S. Ray\fP
|
||||
joined the NetHack development team,
|
||||
.pg
|
||||
\fB3.6.0 TODO insert apprpriate description of 3.6.0 here
|
||||
.pg
|
||||
\fBThe development team, as well as \fBSteve VanDevender\fP and
|
||||
\fBKevin Smolkowski\fP ensured that NetHack 3.6.0 continued to operate on
|
||||
various Unix flavors as well as maintaining the X11 interface.
|
||||
.pg
|
||||
\fBKen Lorber\fP, \fBHaoyang Wang\fP, \fBPat Rankin\fP, and \fBDean Luick\fP
|
||||
maintained the port of NetHack 3.6.0 for Mac.
|
||||
.pg
|
||||
\fBMichael Allison\fP, \fBDerek S. Ray\fP, \fBYitzhak Sapir\fP,
|
||||
\fBAlex Kompel\fP, and \fBDavid Cohrs\fP maintained the port of
|
||||
NetHack 3.6.0 for Microsoft Windows.
|
||||
.pg
|
||||
\fBJeff Bailey\fP created and maintained a port of NetHack 3.6.0 for Chrome.
|
||||
.pg
|
||||
TODO \fBAlex Kompel\fP maintained a port of NetHack 3.6.0 to Windows Phone.
|
||||
.pg
|
||||
\fBThis version of the game is special in a particular way. Near the end of
|
||||
the development of 3.6, one of the significant inspirations for many of the
|
||||
humorous and fun features found in the game, author \fBTerry Pratchett\fP,
|
||||
passed away. This version of the game is dedicated to him.
|
||||
.pg
|
||||
The official NetHack web site is maintained by \fBKen Lorber\fP at http://www.nethack.org/.
|
||||
.pg
|
||||
SHOUT-OUTS
|
||||
.pg
|
||||
The devteam would like to give a special "shout-out" to thank the generous
|
||||
people primarily responsible for the public NetHack servers available for
|
||||
playing the game at nethack.alt.org and devnull.net. In addition to providing
|
||||
a way for the public to play a game of NetHack from almost anywhere, they
|
||||
have hosted annual NetHack tournaments for many, many years.
|
||||
.pg
|
||||
On behalf of the NetHack community, thank you very much to
|
||||
\fBM. Drew Streib\fP, \fBPasi Kallinen\fP and \fBRobin Bandy\fP.
|
||||
.pg
|
||||
- - - - - - - - - -
|
||||
.pg
|
||||
@@ -3202,20 +3332,20 @@ in this, the list of Dungeoneers:
|
||||
center;
|
||||
c c c.
|
||||
.\"TABLE_START
|
||||
Adam Aronow Izchak Miller Mike Passaretti
|
||||
Alex Kompel J. Ali Harlow Mike Stephenson
|
||||
Andreas Dorn Janet Walz Norm Meluch
|
||||
Andy Church Janne Salmijarvi Olaf Seibert
|
||||
Andy Swanson Jean-Christophe Collet Pasi Kallinen
|
||||
Ari Huttunen Jochen Erwied Pat Rankin
|
||||
Barton House John Kallen Paul Winner
|
||||
Benson I. Margulies John Rupley Pierre Martineau
|
||||
Bill Dyer John S. Bien Ralf Brown
|
||||
Boudewijn Waijers Johnny Lee Ray Chason
|
||||
Bruce Cox Jon W{tte Richard Addison
|
||||
Bruce Holloway Jonathan Handler Richard Beigel
|
||||
Bruce Mewborne Joshua Delahunty Richard P. Hughey
|
||||
Carl Schelin Keizo Yamamoto Rob Menke
|
||||
Adam Aronow J. Ali Harlow Mike Stephenson
|
||||
Alex Kompel Janet Walz Norm Meluch
|
||||
Andreas Dorn Janne Salmijarvi Olaf Seibert
|
||||
Andy Church Jean-Christophe Collet Pasi Kallinen
|
||||
Andy Swanson Jeff Bailey Pat Rankin
|
||||
Ari Huttunen Jochen Erwied Paul Winner
|
||||
Barton House John Kallen Pierre Martineau
|
||||
Benson I. Margulies John Rupley Ralf Brown
|
||||
Bill Dyer John S. Bien Ray Chason
|
||||
Boudewijn Waijers Johnny Lee Richard Addison
|
||||
Bruce Cox Jon W{tte Richard Beigel
|
||||
Bruce Holloway Jonathan Handler Richard P. Hughey
|
||||
Bruce Mewborne Joshua Delahunty Rob Menke
|
||||
Carl Schelin Keizo Yamamoto Robin Bandy
|
||||
Chris Russo Ken Arnold Robin Johnson
|
||||
David Cohrs Ken Arromdee Roderick Schertler
|
||||
David Damerell Ken Lorber Roland McGrath
|
||||
@@ -3223,10 +3353,11 @@ David Gentzel Ken Washikita Ron Van Iwaarden
|
||||
David Hairston Kevin Darcy Ronnen Miller
|
||||
Dean Luick Kevin Hugo Ross Brown
|
||||
Del Lamb Kevin Sitze Sascha Wostmann
|
||||
Deron Meranda Kevin Smolkowski Scott Bigham
|
||||
Dion Nicolaas Kevin Sweet Scott R. Turner
|
||||
Dylan O'Donnell Lars Huttar Stephen Spackman
|
||||
Eric Backus Leon Arnott Stephen White
|
||||
Derek S. Ray Kevin Smolkowski Scott Bigham
|
||||
Deron Meranda Kevin Sweet Scott R. Turner
|
||||
Dion Nicolaas Lars Huttar Sean Hunt
|
||||
Dylan O'Donnell Leon Arnott Stephen Spackman
|
||||
Eric Backus M. Drew Streib Stephen White
|
||||
Eric Hendrickson Malcolm Ryan Steve Creps
|
||||
Eric R. Smith Mark Gooderum Steve Linhart
|
||||
Eric S. Raymond Mark Modrall Steve VanDevender
|
||||
@@ -3239,6 +3370,7 @@ Gregg Wonderly Michael Hamel Warren Cheung
|
||||
Hao-yang Wang Michael Sokolov Warwick Allison
|
||||
Helge Hafting Mike Engber Yitzhak Sapir
|
||||
Irina Rempt-Drijfhout Mike Gallop
|
||||
Izchak Miller Mike Passaretti
|
||||
.\"TABLE_END Do not delete this line.
|
||||
.TE
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
\begin{document}
|
||||
%
|
||||
% input file: guidebook.mn
|
||||
% $Revision: 1.121 $ $Date: 2012/04/09 02:56:37 $
|
||||
% $Revision: 1.122 $ $Date: 2015/03/27 06:00:00 $
|
||||
%
|
||||
%.ds h0 "
|
||||
%.ds h1 %.ds h2 \%
|
||||
@@ -45,8 +45,8 @@
|
||||
|
||||
%.au
|
||||
\author{Eric S. Raymond\\
|
||||
(Extensively edited and expanded for 3.5)}
|
||||
\date{April 7, 2012}
|
||||
(Edited and expanded for 3.6)}
|
||||
\date{March 27, 2015}
|
||||
|
||||
\maketitle
|
||||
|
||||
@@ -862,13 +862,8 @@ two-weapon combat. Note that if one of these slots is empty,
|
||||
the exchange still takes place.
|
||||
%.lp
|
||||
\item[\tb{X}]
|
||||
Enter explore (discovery) mode, explained in its own section later.\\
|
||||
%.lp ""
|
||||
Since using this command by accident would be troublesome, you are asked
|
||||
to confirm your intent before switching to explore mode. By default
|
||||
the response `{\tt y}' acknowledges that intent. You can set the
|
||||
{\it paranoid\_confirmation\/}
|
||||
option to require a response of ``yes'' instead.
|
||||
Toggle two-weapon combat, if your character can do it. Also available
|
||||
via the ``{\tt \#twoweapon}'' extended command
|
||||
%.lp
|
||||
\item[\tb{\^{}X}]
|
||||
Display basic information about your character.\\
|
||||
@@ -2224,7 +2219,8 @@ command allows you to view all options and change most of them.
|
||||
You can also set options automatically by placing them in the
|
||||
``NETHACKOPTIONS'' environment variable or in a configuration file.
|
||||
Some versions of {\it NetHack\/} also have front-end programs that allow
|
||||
you to set options before starting the game.
|
||||
you to set options before starting the game or a global configuration
|
||||
for system administrators.
|
||||
|
||||
%.hn 2
|
||||
\subsection*{Using the NETHACKOPTIONS environment variable}
|
||||
@@ -2275,8 +2271,7 @@ each entry. Such a sequence can be continued to multiple lines by putting a
|
||||
`{\tt \verb+\+}' at the end of each line to be continued.
|
||||
|
||||
%.pg
|
||||
If your copy of the game included the compile time AUTOPICKUP\_EXCEPTIONS
|
||||
option, then any line starting with ``{\tt AUTOPICKUP\_EXCEPTION=}''
|
||||
Any line starting with ``{\tt AUTOPICKUP\_EXCEPTION=}''
|
||||
is taken as defining an exception to the ``{\tt pickup\_types}'' option.
|
||||
There is a section of this Guidebook that discusses that.
|
||||
|
||||
@@ -2327,6 +2322,12 @@ or make ready
|
||||
with the `Q' command instead. If no weapon is found or the option is
|
||||
false, the `t' (throw) command is executed instead. (default false)
|
||||
%.lp
|
||||
\item[\ib{blind}]
|
||||
Start the character permanently blind. (default false)
|
||||
%.lp
|
||||
\item[\ib{bones}]
|
||||
Allow saving and loading bones files. (default true)
|
||||
%.lp
|
||||
\item[\ib{boulder}]
|
||||
Set the character used to display boulders (default is rock class symbol).
|
||||
%.lp
|
||||
@@ -2475,6 +2476,13 @@ Enable mail delivery during the game (default on).
|
||||
An obsolete synonym for ``{\tt gender:male}''. Cannot be set with the
|
||||
`{\tt O}' command.
|
||||
%.lp
|
||||
\item[\ib{mention\_walls}]
|
||||
Give feedback when walking against a wall (default off).
|
||||
%.lp
|
||||
\item[\ib{menucolors}]
|
||||
Enable coloring menu lines (default off).
|
||||
See ``{\it Configuring Menu Colors\/}'' on how to configure the colors.
|
||||
%.lp
|
||||
\item[\ib{menustyle}]
|
||||
Controls the interface used when you need to choose various objects (in
|
||||
response to the Drop command, for instance). The value specified should
|
||||
@@ -2520,13 +2528,16 @@ Default `\verb+|+'.
|
||||
Menu character accelerator to goto the next menu page.
|
||||
Implemented by the Amiga, Gem and tty ports.
|
||||
Default `\verb+>+'.
|
||||
\item[\ib{menu\_objsyms}]
|
||||
Show object symbols in menu headings in menus where
|
||||
the object symbols act as menu accelerators (default off).
|
||||
\item[\ib{menu\_previous\_page}]
|
||||
Menu character accelerator to goto the previous menu page.
|
||||
Implemented by the Amiga, Gem and tty ports.
|
||||
Default `\verb+<+'.
|
||||
\item[\ib{menu\_search}]
|
||||
Menu character accelerator to search for a menu item.
|
||||
Implemented by the Amiga, Gem and X11 ports.
|
||||
Implemented by the Amiga, Gem, X11 and tty ports.
|
||||
Default `:'.
|
||||
\item[\ib{menu\_select\_all}]
|
||||
Menu character accelerator to select all items in a menu.
|
||||
@@ -2572,6 +2583,9 @@ Read the {\it NetHack\/} news file, if present (default on).
|
||||
Since the news is shown at the beginning of the game, there's no point
|
||||
in setting this with the `{\tt O}' command.
|
||||
%.lp
|
||||
\item[\ib{nudist}]
|
||||
Start the character with no armor (default false).
|
||||
%.lp
|
||||
\item[\ib{null}]
|
||||
Send padding nulls to the terminal (default on).
|
||||
%.lp
|
||||
@@ -2600,7 +2614,7 @@ is the same as specifying {\tt 0}.
|
||||
(Settings {\tt 2} and {\tt 4} are for compatibility with MSDOS or old PC Hack;
|
||||
in addition to the different behavior for `{\tt 5}', `{\tt Alt-5}' acts as `{\tt G}'
|
||||
and `{\tt Alt-0}' acts as `{\tt I}'.
|
||||
Setting {\tt -1} is to accomodate some German keyboards which have the
|
||||
Setting {\tt -1} is to accommodate some German keyboards which have the
|
||||
location of the `{\tt y}' and `{\tt z}' keys swapped.)
|
||||
When moving by numbers, to enter a count prefix for those commands
|
||||
which accept one (such as ``{\tt 12s}'' to search twelve times), precede it
|
||||
@@ -2678,10 +2692,8 @@ match an autopickup exception. Default is on.
|
||||
%.lp
|
||||
\item[\ib{pickup\_types}]
|
||||
Specify the object types to be picked up when ``{\it autopickup\/}''
|
||||
is on. Default is all types. If your copy of the game has the
|
||||
compile time option AUTOPICKUP\_EXCEPTIONS included,
|
||||
you may be able to use ``{\it autopickup\_exception\/}'' configuration
|
||||
file lines to further refine ``{\it autopickup\/}'' behavior.
|
||||
is on. Default is all types. You can use ``{\it autopickup\_exception\/}''
|
||||
configuration file lines to further refine ``{\it autopickup\/}'' behavior.
|
||||
%.lp
|
||||
\item[\ib{pile\_limit}]
|
||||
When walking across a pile of objects on the floor, threshold at which
|
||||
@@ -2962,6 +2974,9 @@ Specify the preferred height of each tile in a tile capable port.
|
||||
\item[\ib{tile\_width}]
|
||||
Specify the preferred width of each tile in a tile capable port
|
||||
%.lp
|
||||
\item[\ib{use\_darkgray}]
|
||||
Use bold black instead of blue for black glyphs (TTY only).
|
||||
%.lp
|
||||
\item[\ib{use\_inverse}]
|
||||
NetHack should display inverse when the game specifies it.
|
||||
%.lp
|
||||
@@ -3074,10 +3089,8 @@ Cannot be set with the `{\tt O}' command.
|
||||
\subsection*{Configuring autopickup exceptions}
|
||||
|
||||
%.pg
|
||||
There is a compile time option called AUTOPICKUP_EXCEPTIONS.
|
||||
If your copy of the game was built with that option defined, you can
|
||||
further refine the behavior of the ``{\tt autopickup}'' option beyond
|
||||
what is available through the ``{\tt pickup\_types}'' option.
|
||||
You can further refine the behavior of the ``{\tt autopickup}'' option
|
||||
beyond what is available through the ``{\tt pickup\_types}'' option.
|
||||
|
||||
%.pg
|
||||
By placing ``{\tt autopickup\_exception}'' lines in your configuration
|
||||
@@ -3132,6 +3145,71 @@ The second example results in the exclusion of any corpse from autopickup.
|
||||
The last example results in the exclusion of items known to be cursed from
|
||||
autopickup.
|
||||
|
||||
%.lp
|
||||
%.hn 2
|
||||
\subsection*{Configuring Menu Colors}
|
||||
|
||||
%.pg
|
||||
Some platforms allow you to define colors used in menu lines when the
|
||||
line matches a user-defined pattern. At this time the tty, win32tty and
|
||||
win32gui support this.
|
||||
|
||||
%.pg
|
||||
In general, the config file entries to configure the menu color mappings
|
||||
look like this:
|
||||
\begin{verbatim}
|
||||
MENUCOLOR="pattern"=color&attribute
|
||||
\end{verbatim}
|
||||
|
||||
\blist{}
|
||||
%.lp
|
||||
\item[\ib{pattern}]
|
||||
the pattern to match;
|
||||
%.lp
|
||||
\item[\ib{color}]
|
||||
the color to use for lines matching the pattern;
|
||||
%.lp
|
||||
\item[\ib{attribute}]
|
||||
the attribute to use for lines matching the pattern. The attribute is
|
||||
optional, and if left out, you must also leave out the preceding ampersand.
|
||||
If no attribute is defined, no attribute is used.
|
||||
\elist
|
||||
|
||||
%.lp ""
|
||||
For explanation on pattern format and the matching routines, see
|
||||
the pattern in the {\it Configuring User Sounds} -section.
|
||||
|
||||
%.lp ""
|
||||
Allowed colors are {\it black}, {\it red}, {\it green}, {\it brown},
|
||||
{\it blue}, {\it magenta}, {\it cyan}, {\it gray}, {\it orange},
|
||||
{\it lightgreen}, {\it yellow}, {\it lightblue}, {\it lightmagenta},
|
||||
{\it lightcyan}, and {\it white}.
|
||||
|
||||
%.lp ""
|
||||
Allowed attributes are {\it none}, {\it bold}, {\it dim}, {\it underline},
|
||||
{\it blink}, and {\it inverse}.
|
||||
Note that the platform used may interpret the attributes any way it
|
||||
wants.
|
||||
|
||||
%.lp ""
|
||||
Here's an example of menu colors using NetHack's internal
|
||||
pattern matching facility:
|
||||
|
||||
\begin{verbatim}
|
||||
MENUCOLOR="* blessed *"=green
|
||||
MENUCOLOR="* cursed *"=red
|
||||
MENUCOLOR="* cursed *(being worn)"=red&underline
|
||||
\end{verbatim}
|
||||
|
||||
specifies that any menu line with " blessed " contained
|
||||
in it will be shown in green color, lines with " cursed " will be
|
||||
shown in red, and lines with " cursed " followed by "(being worn)"
|
||||
on the same line will be shown in red color and underlined.
|
||||
You can have multiple MENUCOLOR entries in your config file,
|
||||
and the last MENUCOLOR-line in your config file that matches
|
||||
a menu line will be used for the line.
|
||||
%.pg
|
||||
|
||||
%.lp
|
||||
%.hn 2
|
||||
\subsection*{Configuring User Sounds}
|
||||
@@ -3334,6 +3412,7 @@ Default & Symbol Name & Description\\
|
||||
\verb@o@ & S\_orc & (orc)\\
|
||||
\verb@p@ & S\_piercer & (piercer)\\
|
||||
\verb@^@ & S\_pit & (pit)\\
|
||||
\verb@#@ & S\_poisoncloud & (poison cloud)\\
|
||||
\verb@^@ & S\_polymorph\_trap & (polymorph trap)\\
|
||||
\verb@}@ & S\_pool & (water)\\
|
||||
\verb@!@ & S\_potion & (potion)\\
|
||||
@@ -3459,6 +3538,69 @@ If this is the case, disable the number\_pad option and use the traditional
|
||||
Rogue-like commands.
|
||||
\elist
|
||||
|
||||
%.hn2
|
||||
\subsection*{Global Configuration for System Administrators}
|
||||
|
||||
%.pg
|
||||
If NetHack is compiled with the SYSCF option, a system administrator
|
||||
should set up a global configuration; this is a file in the
|
||||
same format as the traditional per-user configuration file (see above).
|
||||
|
||||
This file should be named sysconf and placed in the same directory as
|
||||
the other NetHack support files.
|
||||
The options recognized in this file are listed below. Any option not
|
||||
set uses a compiled-in default (which may not be appropriate for your
|
||||
system).
|
||||
|
||||
%.pg
|
||||
\blist{}
|
||||
%.lp
|
||||
\item[\ib{WIZARDS}]
|
||||
A space-separated list of user name who are allowed to play in wizard
|
||||
mode (the debugging mode, not the magic-useing role). A value of a single
|
||||
asterisk (*) allows anyone to start a game in wizard mode.
|
||||
%.lp
|
||||
\item[\ib{SHELLERS}]
|
||||
A list of users who are allowed to use the shell escape command (!).
|
||||
The syntax is the same as WIZARDS.
|
||||
%.lp
|
||||
\item[\ib{EXPLORERS}]
|
||||
A list of users who are allowed to use the explore mode.
|
||||
The syntax is the same as WIZARDS.
|
||||
%.lp
|
||||
\item[\ib{MAXPLAYERS}]
|
||||
Limit the maximum number of games taht can be running at the same time.
|
||||
%.lp
|
||||
\item[\ib{SUPPORT}]
|
||||
A string explainign how to get local support (no default value).
|
||||
%.lp
|
||||
\item[\ib{RECOVER}]
|
||||
A string explaining how to recover a game on this system (no default value).
|
||||
%.lp
|
||||
\item[\ib{SEDUCE}]
|
||||
0 or 1 to disable or enable, respectively, the SEDUCE option (see the source)
|
||||
for details on this function.
|
||||
\elist
|
||||
|
||||
%.pg
|
||||
The following options affect the score file:
|
||||
\blist {}
|
||||
%.pg
|
||||
%.lp
|
||||
\item[\ib{PERSMAX}]
|
||||
Maximum number of entries for one person
|
||||
%.lp
|
||||
\item[\ib{ENTRYMAX}]
|
||||
Maximum number of entries in the score file
|
||||
%.lp
|
||||
\item[\ib{POINTSMIN}]
|
||||
Minimum number of points to get an entry in the score file.
|
||||
%.lp
|
||||
\item[\ib{PERS_IS_UID}]
|
||||
0 or 1 to use user names or numeric userids, respectively, to identify
|
||||
unique people for the score file
|
||||
\elist
|
||||
|
||||
%.hn 1
|
||||
\section{Scoring}
|
||||
|
||||
@@ -3505,9 +3647,9 @@ There are two ways of enabling explore mode. One is to start the game
|
||||
with the {\tt -X}
|
||||
command-line switch or with the
|
||||
{\it playmode:explore\/}
|
||||
option. The other is to issue the `{\tt X}' command while already
|
||||
playing the game. Starting a new game in explore mode provides your
|
||||
character with a wand of wishing in initial inventory; switching via `X'
|
||||
option. The other is to issue the `{\tt \#exploremode}' extended command while
|
||||
already playing the game. Starting a new game in explore mode provides your
|
||||
character with a wand of wishing in initial inventory; switching
|
||||
during play does not. The other benefits of explore mode are left for
|
||||
the trepid reader to discover.
|
||||
|
||||
@@ -3728,7 +3870,7 @@ more than a year and a half.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
The 3.5 development team initially consisted of
|
||||
The 3.4 development team initially consisted of
|
||||
{\it Michael Allison}, {\it Ken Arromdee},
|
||||
{\it David Cohrs}, {\it Jessie Collet}, {\it Kevin Hugo}, {\it Ken Lorber},
|
||||
{\it Dean Luick}, {\it Pat Rankin}, {\it Mike Stephenson},
|
||||
@@ -3743,11 +3885,11 @@ runs on:
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
\nd{\it Pat Rankin} maintained 3.5 for VMS.
|
||||
\nd{\it Pat Rankin} maintained 3.4 for VMS.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
\nd {\it Michael Allison} maintained NetHack 3.5 for the MS-DOS platform.
|
||||
\nd {\it Michael Allison} maintained NetHack 3.4 for the MS-DOS platform.
|
||||
{\it Paul Winner} and {\it Yitzhak Sapir} provided encouragement.
|
||||
|
||||
%.pg
|
||||
@@ -3758,7 +3900,7 @@ enhanced the Macintosh port of 3.4.
|
||||
%.pg
|
||||
\medskip
|
||||
\nd {\it Michael Allison}, {\it David Cohrs}, {\it Alex Kompel}, {\it Dion Nicolaas}, and
|
||||
{\it Yitzhak Sapir} maintained and enhanced 3.5 for the Microsoft Windows platform.
|
||||
{\it Yitzhak Sapir} maintained and enhanced 3.4 for the Microsoft Windows platform.
|
||||
{\it Alex Kompel} contributed a new graphical interface for the Windows port.
|
||||
{\it Alex Kompel} also contributed a Windows CE port for 3.4.1.
|
||||
|
||||
@@ -3772,23 +3914,109 @@ all these years.
|
||||
%.pg
|
||||
\medskip
|
||||
\nd {\it Janne Salmij\"{a}rvi} and {\it Teemu Suikki} maintained
|
||||
and enhanced the Amiga port of 3.5 after {\it Janne Salmij\"{a}rvi} resurrected
|
||||
and enhanced the Amiga port of 3.4 after {\it Janne Salmij\"{a}rvi} resurrected
|
||||
it for 3.3.1.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
\nd {\it Christian ``Marvin'' Bressler} maintained 3.5 for the Atari after he
|
||||
\nd {\it Christian ``Marvin'' Bressler} maintained 3.4 for the Atari after he
|
||||
resurrected it for 3.3.1.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
\nd There is a NetHack web site maintained by {\it Ken Lorber} at
|
||||
The release of NetHack 3.4.3 in December 2003 marked the beginning of a
|
||||
long release hiatus. 3.4.3 proved to be a remarkably stable version that
|
||||
provided continued enjoyment by the community for more than a decade. The
|
||||
devteam slowly and quietly continued to work on the game behind the scenes
|
||||
during the tenure of 3.4.3. It was during that same period that several new
|
||||
variants emerged within the NetHack community. Notably sporkhack by
|
||||
Derek S. Ray, unnethack by Patric Mueller, nitrohack and its successors
|
||||
originally by Daniel Thaler and then by Alex Smith, and
|
||||
Dynahack by Tung Nguyen. Some of those variants continue to be developed,
|
||||
maintained, and enjoyed by the community to this day.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
In September 2014, an interim snapshot of the code under development was
|
||||
released publicly by other parties. Since that code was a work-in-progress
|
||||
and had not gone through a period of debugging, it was decided that the
|
||||
version numbers present on that code snapshot would be retired and never
|
||||
used in an official NetHack release. An announcement was posted on the
|
||||
devteam's official nethack.org website to that effect, stating that there
|
||||
would never be a 3.4.4, 3.5, or 3.5.0 official release version.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
In January 2015, preparation began for the release of NetHack 3.6
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
At the beginning of development for what would eventually get released
|
||||
as 3.6.0, the development team consisted of {\it Warwick Allison},
|
||||
{\it Michael Allison}, {\it Ken Arromdee},
|
||||
{\it David Cohrs}, {\it Jessie Collet},
|
||||
{\it Ken Lorber}, {\it Dean Luick}, {\it Pat Rankin},
|
||||
{\it Mike Stephenson}, {\it Janet Walz}, and {\it Paul Winner}.
|
||||
Leading up to the release of 3.6.0 in early 2015, new members
|
||||
{\it Sean Hunt}, {\it Pasi Kallinen}, and {\it Derek S. Ray}
|
||||
joined the NetHack development team,
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
3.6.0 TODO insert apprpriate description of 3.6.0 here
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
The development team, as well as {\it Steve VanDevender} and
|
||||
{\it Kevin Smolkowski} ensured that NetHack 3.6.0 continued to operate on
|
||||
various Unix flavors as well as maintaining the X11 interface.
|
||||
|
||||
{\it Ken Lorber}, {\it Haoyang Wang}, {\it Pat Rankin}, and {\it Dean Luick}
|
||||
maintained the port of NetHack 3.6.0 for Mac.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
{\it Michael Allison}, {\it Derek S. Ray}, {\it Yitzhak Sapir},
|
||||
{\it Alex Kompel}, and {\it David Cohrs} maintained the port of
|
||||
NetHack 3.6.0 for Microsoft Windows.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
{\it Jeff Bailey} created and maintained a port of NetHack 3.6.0 for Chrome.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
{\it Alex Kompel} maintained a port of NetHack 3.6.0 to Windows Phone. <FIXME>?
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
This version of the game is special in a particular way. Near the end of
|
||||
the development of 3.6, one of the significant inspirations for many of the
|
||||
humorous and fun features found in the game, author {\it Terry Pratchett},
|
||||
passed away. This version of the game is dedicated to him.
|
||||
|
||||
%.pg
|
||||
\medskip
|
||||
\nd The official NetHack web site is maintained by {\it Ken Lorber} at
|
||||
{\catcode`\#=11
|
||||
\special{html:<a href="http://www.nethack.org/">}}
|
||||
http:{\tt /}{\tt /}www.nethack.org{\tt /}.
|
||||
{\catcode`\#=11
|
||||
\special{html:</a>}}
|
||||
|
||||
%.pg
|
||||
%.hn 2
|
||||
\subsection*{Shout Outs}
|
||||
\nd The devteam would like to give a special "shout-out" to thank the generous
|
||||
people primarily responsible for the public NetHack servers available for
|
||||
playing the game at nethack.alt.org and devnull.net. In addition to providing
|
||||
a way for the public to play a game of NetHack from almost anywhere, they
|
||||
have hosted annual NetHack tournaments for many, many years.
|
||||
%.pg
|
||||
\nd On behalf of the NetHack community, thank you very much to
|
||||
{\it M. Drew Streib}, {\it Pasi Kallinen} and {\it Robin Bandy}.
|
||||
|
||||
%.pg
|
||||
%.hn 3
|
||||
\subsection*{Dungeoneers}
|
||||
\bigskip
|
||||
@@ -3801,20 +4029,20 @@ in this, the list of Dungeoneers:
|
||||
\begin{center}
|
||||
\begin{tabular}{lll}
|
||||
%TABLE_START
|
||||
Adam Aronow & Izchak Miller & Mike Passaretti\\
|
||||
Alex Kompel & J. Ali Harlow & Mike Stephenson\\
|
||||
Andreas Dorn & Janet Walz & Norm Meluch\\
|
||||
Andy Church & Janne Salmij\"{a}rvi & Olaf Seibert\\
|
||||
Andy Swanson & Jean-Christophe Collet & Pasi Kallinen\\
|
||||
Ari Huttunen & Jochen Erwied & Pat Rankin\\
|
||||
Barton House & John Kallen & Paul Winner\\
|
||||
Benson I. Margulies & John Rupley & Pierre Martineau\\
|
||||
Bill Dyer & John S. Bien & Ralf Brown\\
|
||||
Boudewijn Waijers & Johnny Lee & Ray Chason\\
|
||||
Bruce Cox & Jon W\{tte & Richard Addison\\
|
||||
Bruce Holloway & Jonathan Handler & Richard Beigel\\
|
||||
Bruce Mewborne & Joshua Delahunty & Richard P. Hughey\\
|
||||
Carl Schelin & Keizo Yamamoto & Rob Menke\\
|
||||
Adam Aronow & J. Ali Harlow & Mike Stephenson\\
|
||||
Alex Kompel & Janet Walz & Norm Meluch\\
|
||||
Andreas Dorn & Janne Salmij\"{a}rvi & Olaf Seibert\\
|
||||
Andy Church & Jean-Christophe Collet & Pasi Kallinen\\
|
||||
Andy Swanson & Jeff Bailey & Pat Rankin\\
|
||||
Ari Huttunen & Jochen Erwied & Paul Winner\\
|
||||
Barton House & John Kallen & Pierre Martineau\\
|
||||
Benson I. Margulies & John Rupley & Ralf Brown\\
|
||||
Bill Dyer & John S. Bien & Ray Chason\\
|
||||
Boudewijn Waijers & Johnny Lee & Richard Addison\\
|
||||
Bruce Cox & Jon W\{tte & Richard Beigel\\
|
||||
Bruce Holloway & Jonathan Handler & Richard P. Hughey\\
|
||||
Bruce Mewborne & Joshua Delahunty & Rob Menke\\
|
||||
Carl Schelin & Keizo Yamamoto & Robin Bandy\\
|
||||
Chris Russo & Ken Arnold & Robin Johnson\\
|
||||
David Cohrs & Ken Arromdee & Roderick Schertler\\
|
||||
David Damerell & Ken Lorber & Roland McGrath\\
|
||||
@@ -3822,10 +4050,11 @@ David Gentzel & Ken Washikita & Ron Van Iwaarden\\
|
||||
David Hairston & Kevin Darcy & Ronnen Miller\\
|
||||
Dean Luick & Kevin Hugo & Ross Brown\\
|
||||
Del Lamb & Kevin Sitze & Sascha Wostmann\\
|
||||
Deron Meranda & Kevin Smolkowski & Scott Bigham\\
|
||||
Dion Nicolaas & Kevin Sweet & Scott R. Turner\\
|
||||
Dylan O'Donnell & Lars Huttar & Stephen Spackman\\
|
||||
Eric Backus & Leon Arnott & Stephen White\\
|
||||
Derek S. Ray & Kevin Smolkowski & Scott Bigham\\
|
||||
Deron Meranda & Kevin Sweet & Scott R. Turner\\
|
||||
Dion Nicolaas & Lars Huttar & Sean Hunt\\
|
||||
Dylan O'Donnell & Leon Arnott & Stephen Spackman\\
|
||||
Eric Backus & M. Drew Streib & Stephen White\\
|
||||
Eric Hendrickson & Malcolm Ryan & Steve Creps\\
|
||||
Eric R. Smith & Mark Gooderum & Steve Linhart\\
|
||||
Eric S. Raymond & Mark Modrall & Steve VanDevender\\
|
||||
@@ -3837,7 +4066,8 @@ Greg Olson & Michael Feir & Tom West\\
|
||||
Gregg Wonderly & Michael Hamel & Warren Cheung\\
|
||||
Hao-yang Wang & Michael Sokolov & Warwick Allison\\
|
||||
Helge Hafting & Mike Engber & Yitzhak Sapir\\
|
||||
Irina Rempt-Drijfhout & Mike Gallop
|
||||
Irina Rempt-Drijfhout & Mike Gallop\\
|
||||
Izchak Miller & Mike Passaretti
|
||||
%TABLE_END Do not delete this line.
|
||||
\end{tabular}
|
||||
\end{center}
|
||||
|
||||
4164
doc/Guidebook.txt
4164
doc/Guidebook.txt
File diff suppressed because it is too large
Load Diff
134
doc/fixes35.0
134
doc/fixes35.0
@@ -63,7 +63,7 @@ wizard mode: avoid division by 0 crash for level teleport in the endgame if
|
||||
don't #sit on an object in a pit if you're only on the precipice
|
||||
fix message when pushing a boulder into a pool while riding
|
||||
plural of "Nazgul" is "Nazgul" not "Nazguls"
|
||||
trap messages referring to named steed were ackwardly worded when hallucination
|
||||
trap messages referring to named steed were awkwardly worded when hallucination
|
||||
overrode use of the name
|
||||
some actions such as eating corpses off the floor didn't check whether hero
|
||||
could reach the bottom of a pit
|
||||
@@ -117,7 +117,7 @@ shopkeeper removal of trap from shop doorway yields an open door instead of
|
||||
a closed one if an intact open door is present
|
||||
guarantee that hostile djinn released from bottles really are hostile
|
||||
handle lava when removing or losing water walking boots
|
||||
fix incomplete sentence occuring when unique monster's corpse fell down stairs
|
||||
fix incomplete sentence occurring when unique monster's corpse fell down stairs
|
||||
fractured boulders or statues produced inconsistent object settings on the
|
||||
resulting rocks
|
||||
really fix rolling boulder bug C340-18, the previous "fix" reversed the test
|
||||
@@ -165,7 +165,7 @@ clean up messages when you stop levitation while riding a flying steed
|
||||
monsters evading a kick on noteleport levels would cause a "teleports" message
|
||||
interrupt current activity during certain stages of petrification or vomiting
|
||||
warning about bad food didn't recognize tin of Medusa meat
|
||||
eating tainted Medusa corpse caused food poisioning instead of petrification
|
||||
eating tainted Medusa corpse caused food poisoning instead of petrification
|
||||
avoid potential stale pointer use after magic bag explosion
|
||||
nymphs and monkeys can't steal rings worn under gloves
|
||||
monkeys can't steal rings worn under cursed weapon
|
||||
@@ -237,7 +237,7 @@ when there were multiple boulders at a location, moving one of them sometimes
|
||||
resulted in line-of-sight anomalies
|
||||
unicorn can't catch gems if it is asleep or paralyzed
|
||||
fix grammar when choking on gold
|
||||
prevent lose-level+regain-level cycle from arbritrarily boosting HP and Pw
|
||||
prevent lose-level+regain-level cycle from arbitrarily boosting HP and Pw
|
||||
prevent polymorphing into "new man" at low level from magnifying HP and Pw
|
||||
some messages which referred to "mirror" ought to have used "looking glass"
|
||||
incubi react to mirrors
|
||||
@@ -360,8 +360,8 @@ code handling a monster's use of potion or food to cure stoning or confusion
|
||||
properly handle destruction of equipment carried by monsters hit by
|
||||
disintegration breath; life-saving retained conferred properties of
|
||||
formerly worn items (loss of steed's saddle caused much confusion)
|
||||
don't exercize or abuse wisdom when rumors get used for random graffiti
|
||||
don't exercize wisdom twice for each minor oracle consultation
|
||||
don't exercise or abuse wisdom when rumors get used for random graffiti
|
||||
don't exercise wisdom twice for each minor oracle consultation
|
||||
don't welcome the hero to Delphi if the Oracle was angered before first entry
|
||||
create_object() created lizard corpses without timers and troll corpses with
|
||||
their revive timers, then changed the corpsenm field
|
||||
@@ -383,7 +383,7 @@ specifying role and/or race along with an invalid alignment for it/them in
|
||||
temple donation can recover protection previously stolen by attrcurse attack
|
||||
even when protection amount is so big that no increment would be given
|
||||
meditating monsters stop meditating when affected by something which wakes
|
||||
sleeping mosnters
|
||||
sleeping monsters
|
||||
monsters capable of hiding can't do so when trapped or while holding you
|
||||
limit recursive calls to spoteffects (poly'd hero fell into water, reverted
|
||||
to human because of it, fell into same water, then crawled out twice)
|
||||
@@ -474,7 +474,7 @@ suppress corpse from bones data if death is due to being dissolved in lava
|
||||
suppress "you rise from the dead" if game ends due to be turned into slime
|
||||
hero poly'd into stone golem and wielding cockatrice corpse casts stone-to-
|
||||
flesh at self to become flesh golem will revert to stone if no gloves
|
||||
don't give erroneous "<mon> disppears" message for hero poly'd into quantum
|
||||
don't give erroneous "<mon> disappears" message for hero poly'd into quantum
|
||||
mechanic who hits engulfer while swallowed and blinded
|
||||
demon lords/princes can't be summoned to the elemental or Astral planes
|
||||
feedback from casting spell of protection was wrong in some situations
|
||||
@@ -496,7 +496,7 @@ can't eat an artifact you're unable to touch
|
||||
attempting to kick beyond map edge performed an out of array bounds memory
|
||||
access; symptom seen was "show_glyph: bad pos" warning when blind
|
||||
attempting to engrave with an empty wand should always use a turn
|
||||
don't access freed memory after engraving "wrests one last charnge" from wand
|
||||
don't access freed memory after engraving "wrests one last charge" from wand
|
||||
a magic portal could be rendered inactive for the hero if a successful
|
||||
hangup save took place during level change; leaving the level by any
|
||||
means other than triggering the portal would reactivate it
|
||||
@@ -645,7 +645,7 @@ secret door detection's trap finding is no longer blocked by water or clouds
|
||||
potion thrown by monster which hit a long worm's tail gave feedback about
|
||||
hitting its head
|
||||
implement energy vortex's previously unused energy drain attack
|
||||
changing alignment type resets alignment record to 0 (nomimally aligned)
|
||||
changing alignment type resets alignment record to 0 (nominally aligned)
|
||||
jellyfish do not technically have a head
|
||||
while polymorphed, suppress attribute gain/lose earned by pre-poly exercise
|
||||
wizard mode #monpolycontrol prompting asked about "it" when monster was unseen
|
||||
@@ -670,7 +670,7 @@ if polymorph causes a monster to drop items, they won't be used up via
|
||||
monsters who ate green slime corpses weren't turned into green slime
|
||||
"hand slip" while naming an object would never pick 'z' as a substitute letter
|
||||
hero would "gladly take off <armor>" for nymph or succubus even while asleep
|
||||
concealed mimic wasn't revealed if kicking attmpt yielded a clumsy miss
|
||||
concealed mimic wasn't revealed if kicking attempt yielded a clumsy miss
|
||||
too accurate feedback given to a blinded hero when a monster summons insects
|
||||
if life-saved steed became untame, repeated "placing steed onto map?" warnings
|
||||
would be given as long as the hero remained mounted
|
||||
@@ -730,7 +730,7 @@ shouldn't have been able write scrolls by guessing type name when they're
|
||||
scrolls given names can be written by assigned name as well as by description
|
||||
fix writing feedback "the spellbook warps strangely, then turns parchment"
|
||||
make stone artifacts usually resist stone-to-flesh
|
||||
when reading an unknown scroll and learning it, discovery of teleporation was
|
||||
when reading an unknown scroll and learning it, discovery of teleportation was
|
||||
too late if hero happened to land on another scroll of teleportation
|
||||
using an unlocking tool on a closed door which was actually a mimic reported
|
||||
that there was no door to unlock instead of exposing the mimic
|
||||
@@ -760,7 +760,7 @@ for number_pad:2 (MSDOS compatibility), M-5 (Alt+5, or Shift+keypad5 using
|
||||
MSDOS/Windows keystroke hackery) didn't function as G movement prefix
|
||||
if an angry shopkeeper chased the hero to a different level and then got paid
|
||||
off, he'd dismiss kops on that other level but not on his shop level
|
||||
objects inside the Wizard's Tower can't be teleport to outside and vica versa
|
||||
objects inside the Wizard's Tower can't be teleport to outside and vice versa
|
||||
dying in lava and being life-saved or leaving bones would destroy ring of
|
||||
fire resistance if it happened to be made of wood, and also burn up
|
||||
scrolls of fire and spellbook of fireball
|
||||
@@ -786,7 +786,7 @@ when shop prices are adjusted, handle roundoff (integer truncation) better
|
||||
for hero poly'd into a monster form that lacks a weapon attack but has a claw
|
||||
attack, use wielded weapon even when claw attack isn't the very first
|
||||
rename the SLEEPING property and Sleeping attribute to SLEEPY and Sleepy, resp.
|
||||
character escape sequence handling during options processing was vulernable
|
||||
character escape sequence handling during options processing was vulnerable
|
||||
to malformed escapes and could potentially be abused to clobber the
|
||||
stack and launch a buffer overrun attack
|
||||
give alternate message for "<mon> turns to flee" when mon can't move
|
||||
@@ -815,7 +815,7 @@ hangup save made during magic mapping or <foo> detection performed while
|
||||
underwater could put hero on top of the water after restore
|
||||
fix bug preventing stone-resistant monsters w/o gloves from wielding cockatrices
|
||||
items conferring life drain resistance were affected by drain life spell
|
||||
'a'pply command could be used to recogniize undiscovered potions of oil
|
||||
'a'pply command could be used to recognize undiscovered potions of oil
|
||||
fix replacing an existing bones file in wizard mode [load?y, unlink?n, die?y,
|
||||
save?y, replace?y] for configurations using external file compression
|
||||
theft of worn armor with wear/unwear delay would interfere with completion of
|
||||
@@ -855,9 +855,45 @@ fix "object lost" panic (or even crash) when dropping multiple items while
|
||||
levitating and a lit potion of oil explodes and destroys some inventory
|
||||
fix "object_is_local" panic when saving bones after hero is killed by explosion
|
||||
produced by dropped or thrown lit potion of oil
|
||||
gold dropped on altar by hero wouldn't stack with gold dropped there by monster
|
||||
if lava burns up the player's water walking boots, the player falls in
|
||||
the messages for lava burning items up are always printed
|
||||
fix used-up magic trap trying to hit steed.
|
||||
messages are now printed when objects on the ground are eroded
|
||||
object erosion now always identifies fooproof objects
|
||||
grease protects from all types of erosion
|
||||
all sources of erosion now affect objects the same way
|
||||
passive attacks no longer erode armor covered by other armor
|
||||
dipping a fooproof item into acid no longer forgets that it's fooproof
|
||||
dipping a container into uncursed water now gets its contents wet
|
||||
sanitize petnames and fruit to prevent escape codes
|
||||
data.base "bat" overrode later "combat" entry
|
||||
data.base "gelatinous cube" and "jack boot" have their own entries
|
||||
data.base "vampire bat" matched twice; use the bat entry
|
||||
data.base dagger attribution started with spaces instead of tabs
|
||||
remove 'if (Deaf)' guards preceding You_hear which already checks deafness
|
||||
use a menu to loot multiple containers
|
||||
do_look() in post-3.4.3 used glyph prior to setting it in pager.c
|
||||
charge for a boulder that fills a pit in shop
|
||||
abuse wisdom in keeping with Rider eating message
|
||||
message inconsistency: death message "swallowed <mon> whole" was preceded
|
||||
by "You bite into"
|
||||
improve the messaging when a monster you can't see is causing an obstruction
|
||||
add option mention_walls, which gives feedback when bumping against a wall
|
||||
fix invalid pointer dereference in morguemon if ndemon returns NON_PM
|
||||
after object loss through polyshudder don't get left hiding under nothing
|
||||
if you're polymorphed into a hider
|
||||
show object symbols in menu headings in menus where those object symbols
|
||||
act as menu accelerators, toggleable via "menu_objsyms" option
|
||||
show t-shirt text at end of game inventory disclose
|
||||
hitting with a polearm remembers the position of the last monster you hit
|
||||
add messages for trying to pick up some terrain features
|
||||
boomerang makes noise when hitting a sink
|
||||
non-pet rust monsters would eat rust-proofed non-digestibles but ignore
|
||||
those non-digestibles otherwise
|
||||
kicking a grave may topple the gravestone
|
||||
allow showing legal positions for stinking cloud, jumping and polearms
|
||||
when asked for a location
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific Fixes
|
||||
@@ -874,6 +910,10 @@ tty: when loading user's run-time configuration, explicitly negating one of
|
||||
to regular ASCII and left the earlier option inaccurately set to "on"
|
||||
tty: various bugfixes for very wide and/or tall screens
|
||||
tty+GOLDOBJ: dropping or looting by menu wouldn't honor a count for gold
|
||||
tty: fix crashing when a location has more than 32k items
|
||||
tty: fix segfault when MD termcap is not defined
|
||||
tty: do not cut off statuslines at 80 characters for wider term
|
||||
tty: prevent accidental escapes from string entries
|
||||
unix: remove use of parentheses in nethack man page usage that confused a
|
||||
man page conversion tool
|
||||
unix: new -wwindowtype option
|
||||
@@ -881,6 +921,7 @@ unix: don't clobber old level files if 2nd hangup/disconnect occurs while
|
||||
reconnected user is responding to the "destroy old game?" prompt
|
||||
unix/Qt: saved games were not found if nethack was built with prefixes in use
|
||||
unix,vms: allow digits after first character in name at "Who are you?" prompt
|
||||
unix: implement fcntl(2) locking on systems that can handle it
|
||||
vms: the DLB configuration could fail to build if a file without a dot
|
||||
in its name happened to match a logical name
|
||||
Windows: starting a game with nethack.exe (tty) and saving, then restoring
|
||||
@@ -953,7 +994,7 @@ burying a punishment ball no longer ends your punishment
|
||||
add clicklook option to allow looking at things on the display by clicking
|
||||
right mouse button when floating mouse pointer over them
|
||||
Izchak's lighting store is now able to stock oil for your lamp
|
||||
provide core support for saving of messsage history in save file
|
||||
provide core support for saving of message history in save file
|
||||
the following actions can now be continued after save/restore: digging,
|
||||
eating, studying, removing armor
|
||||
hero-created and monster-created ice will eventually melt away
|
||||
@@ -987,7 +1028,6 @@ allow digging an adjacent pit with wand of digging while trapped in a pit
|
||||
#terrain command to show unobstructed view of map (w/o mons, objs, traps)
|
||||
digging can activate or disarm some types of traps
|
||||
some monsters can eat tins in addition to corpses to cure some ailments
|
||||
add Roderick Schertler's pickup_thrown patch
|
||||
add ability to sort the list when viewing known spells with '+' command
|
||||
describe magic cancellation from worn armor in enlightment/end-of-game feedback
|
||||
disclose half physical and/or spell damage in enlightment/end-of-game feedback
|
||||
@@ -1001,7 +1041,6 @@ new config file keyword: SYMBOLS for overriding character symbol values by name
|
||||
opening magic frees from bear traps and webs, activates trap doors
|
||||
closing magic activates bear traps and webs
|
||||
locking converts a hole into a trap door; striking does the opposite
|
||||
add Malcolm Ryan's Statue Glyphs patch
|
||||
lembas and cram never rot unless cursed
|
||||
multiple squeaks for squeaky boards
|
||||
include time, user ID, and play mode in paniclog entries
|
||||
@@ -1045,15 +1084,6 @@ chatting to a gecko or shopkeeper while hallucinating gives alternate message
|
||||
mimic posing as door might steal hero's key when [un]locking is attempted
|
||||
polymorphing into a dragon while wearing dragon scale mail will cause that
|
||||
mail to revert to dragon scales
|
||||
adopt/adapt/improve the Paranoid_Quit patch; default is paranoid_confirm:pray
|
||||
paranoid_confirm:Confirm when requiring "yes" instead of y to confirm,
|
||||
also require explicit "no" to reject
|
||||
paranoid_confirm:quit yes vs y to quit or to enter explore mode
|
||||
paranoid_confirm:die yes vs y to die in explore or wizard mode
|
||||
paranoid_confirm:bones yes vs y to save bones when dying in wizard mode
|
||||
paranoid_confirm:attack yes vs y to attack a peaceful monster
|
||||
paranoid_confirm:pray y to confirm #pray; supersedes prayconfirm
|
||||
paranoid_confirm:Remove always pick from inventory for 'R' and 'T'
|
||||
flexibility for specifying "detect <foo>" vs "<foo> detection" when wishing
|
||||
when a sokoban puzzle has been completed (last pit or hole filled in),
|
||||
stop assessing luck penalties and lift most movement restrictions
|
||||
@@ -1067,6 +1097,21 @@ dipping multiple potions in another potion may only dip part of their stack
|
||||
make being inside a stinking cloud (when not immune or resistant) become a
|
||||
major trouble which is fixable by prayer
|
||||
introduce some variation in monster movement rates
|
||||
Add database entry for shuriken and make it match throwing star
|
||||
Add database entry for fedora
|
||||
Add database entry for land mine
|
||||
change command X to twoweapon toggle
|
||||
pressing @ when cursor positioning moves cursor on top of hero
|
||||
pressing # when cursor positioning toggles automatic description of features
|
||||
under the cursor
|
||||
cursor positioning ignores uninteresting dungeon features
|
||||
allow reading many more items
|
||||
when you're hiding under something a zap downward should not hit that
|
||||
something, while a zap upward should
|
||||
show more explicit reason why player was helpless at death
|
||||
added new hallucinatory-only gods
|
||||
options to create the character blind or nudist
|
||||
moving clouds on the plane of air
|
||||
|
||||
|
||||
Platform- and/or Interface-Specific New Features
|
||||
@@ -1081,11 +1126,31 @@ win32tty: support for 'selectsaved' option for menu of existing save files
|
||||
to choose from at game startup
|
||||
tty: add window port routines for saving/restoring message history
|
||||
tty: enhanced role, race, &c selection at start of new game
|
||||
tty: implement : (menu_search) command
|
||||
smartphone: added "Type Cmd" command that allows to type arbitrary commands
|
||||
using phone keypad
|
||||
smartphone: added Q(quiver) command to "Attack" layout
|
||||
smartphone: fixed F command to prompt for direction
|
||||
unix,vms: altmeta option to handle terminals which send "ESC c" for Alt+c
|
||||
tty,win32gui,win32tty: add menucolors
|
||||
|
||||
|
||||
NetHack Community Patches (or Variation) Included
|
||||
-------------------------------------------------
|
||||
Roderick Schertler's pickup_thrown patch
|
||||
Malcolm Ryan's Statue Glyphs patch
|
||||
adopt/adapt/improve the Paranoid_Quit patch; default is paranoid_confirm:pray
|
||||
paranoid_confirm:Confirm when requiring "yes" instead of y to confirm,
|
||||
also require explicit "no" to reject
|
||||
paranoid_confirm:quit yes vs y to quit or to enter explore mode
|
||||
paranoid_confirm:die yes vs y to die in explore or wizard mode
|
||||
paranoid_confirm:bones yes vs y to save bones when dying in wizard mode
|
||||
paranoid_confirm:attack yes vs y to attack a peaceful monster
|
||||
paranoid_confirm:pray y to confirm #pray; supersedes prayconfirm
|
||||
paranoid_confirm:Remove always pick from inventory for 'R' and 'T'
|
||||
adopt/adapt/improve Dungeon Overview
|
||||
Aardvark Joe's Extended Logfile
|
||||
Michael Deutschmann's use_darkgray
|
||||
|
||||
|
||||
Code Cleanup and Reorganization
|
||||
@@ -1106,3 +1171,18 @@ drawing symbols for DECGraphics, IBMGraphics, MACgraphics are now stored in an
|
||||
new hints-based configuration system
|
||||
allow documentation to be specialized to the options in the game binary
|
||||
add param to winsys ini routines to allow cleaner shifting during startup
|
||||
make STEED unconditional
|
||||
make EXP_ON_BOTL unconditional
|
||||
make REDO unconditional
|
||||
make AUTOPICKUP_EXCEPTIONS unconditional
|
||||
make SEDUCE compile-time unconditional but still removable through SYSCF
|
||||
clean up some DEBUG conditional code
|
||||
make GOLDOBJ unconditional
|
||||
make WIZARD unconditional
|
||||
make SINKS
|
||||
make REINCARNATION
|
||||
make TOURIST unconditional
|
||||
make KOPS unconditional
|
||||
make ELBERETH unconditional
|
||||
allow defining of generic usernames in config.h instead of hard-coding in role.c
|
||||
|
||||
|
||||
@@ -105,6 +105,15 @@ Generate the
|
||||
file.
|
||||
.br
|
||||
.TP
|
||||
.B -s
|
||||
Generate the
|
||||
.I bogusmon
|
||||
,
|
||||
.I engrave
|
||||
and
|
||||
.IR epitaph files.
|
||||
.br
|
||||
.TP
|
||||
.B -h
|
||||
Generate the
|
||||
.B oracles
|
||||
|
||||
1
include/.gitignore
vendored
1
include/.gitignore
vendored
@@ -5,3 +5,4 @@ pm.h
|
||||
vis_tab.h
|
||||
dgn_comp.h
|
||||
lev_comp.h
|
||||
tile.h
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
#ifndef COLOR_H
|
||||
#define COLOR_H
|
||||
|
||||
#ifdef MENU_COLOR_REGEX
|
||||
#include <regex.h>
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The color scheme used is tailored for an IBM PC. It consists of the
|
||||
* standard 8 colors, folowed by their bright counterparts. There are
|
||||
@@ -51,4 +55,18 @@
|
||||
#define DRAGON_SILVER CLR_BRIGHT_CYAN
|
||||
#define HI_ZAP CLR_BRIGHT_BLUE
|
||||
|
||||
struct menucoloring {
|
||||
# ifdef MENU_COLOR_REGEX
|
||||
# ifdef MENU_COLOR_REGEX_POSIX
|
||||
regex_t match;
|
||||
# else
|
||||
struct re_pattern_buffer match;
|
||||
# endif
|
||||
# else
|
||||
char *match;
|
||||
# endif
|
||||
int color, attr;
|
||||
struct menucoloring *next;
|
||||
};
|
||||
|
||||
#endif /* COLOR_H */
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 config.h $NHDT-Date: 1425083082 2015/02/28 00:24:42 $ $NHDT-Branch: (no branch, rebasing scshunt-unconditionals) $:$NHDT-Revision: 1.51 $ */
|
||||
/* NetHack 3.5 config.h $Date: 2012/01/27 20:15:26 $ $Revision: 1.37 $ */
|
||||
/* NetHack 3.5 config.h $NHDT-Date: 1425083082 2015/02/28 00:24:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.51 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -187,6 +186,7 @@
|
||||
#endif
|
||||
|
||||
#define LOGFILE "logfile" /* larger file for debugging purposes */
|
||||
#define XLOGFILE "xlogfile" /* even larger logfile */
|
||||
#define NEWS "news" /* the file containing the latest hack news */
|
||||
#define PANICLOG "paniclog" /* log of panic and impossible events */
|
||||
|
||||
@@ -316,6 +316,11 @@
|
||||
#endif /* CHDIR */
|
||||
|
||||
|
||||
/* If GENERIC_USERNAMES is defined, and the user name is found
|
||||
* in that list, prompt for username instead.
|
||||
* A public server should probably disable this. */
|
||||
#define GENERIC_USERNAMES "play player game games nethack nethacker"
|
||||
|
||||
|
||||
/*
|
||||
* Section 3: Definitions that may vary with system type.
|
||||
@@ -431,6 +436,14 @@ typedef unsigned char uchar;
|
||||
* bugs left here.
|
||||
*/
|
||||
|
||||
/* Menucolors */
|
||||
# define MENU_COLOR_REGEX /* use GNU regex */
|
||||
/*# define MENU_COLOR_REGEX_POSIX*/ /* use POSIX regex */
|
||||
/* if neither is defined, uses pmatch()
|
||||
* pmatch() provides basic globbing: '*' and '?' wildcards.
|
||||
*/
|
||||
|
||||
|
||||
#define STATUS_VIA_WINDOWPORT /* re-work of the status line updating process */
|
||||
#define STATUS_HILITES /* support hilites of status fields */
|
||||
/* #define WINCHAIN*/ /* stacked window systems */
|
||||
|
||||
@@ -73,6 +73,11 @@ struct warntype_info {
|
||||
short speciesidx; /* index of above in mons[] (for save/restore) */
|
||||
};
|
||||
|
||||
struct polearm_info {
|
||||
struct monst *hitmon; /* the monster we tried to hit last */
|
||||
unsigned m_id; /* monster id of hitmon, in save file */
|
||||
};
|
||||
|
||||
struct context_info {
|
||||
unsigned ident; /* social security number for each monster */
|
||||
unsigned no_of_wizards; /* 0, 1 or 2 (wizard and his shadow) */
|
||||
@@ -103,6 +108,7 @@ struct context_info {
|
||||
struct book_info spbook;
|
||||
struct takeoff_info takeoff;
|
||||
struct warntype_info warntype;
|
||||
struct polearm_info polearm;
|
||||
};
|
||||
|
||||
extern NEARDATA struct context_info context;
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 decl.h $NHDT-Date: 1425081976 2015/02/28 00:06:16 $ $NHDT-Branch: (no branch, rebasing scshunt-unconditionals) $:$NHDT-Revision: 1.50 $ */
|
||||
/* NetHack 3.5 decl.h $Date: 2011/12/29 20:06:27 $ $Revision: 1.44 $ */
|
||||
/* NetHack 3.5 decl.h $NHDT-Date: 1425081976 2015/02/28 00:06:16 $ $NHDT-Branch: master $:$NHDT-Revision: 1.50 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -28,6 +27,7 @@ E char SAVEP[];
|
||||
E NEARDATA int bases[MAXOCLASSES];
|
||||
|
||||
E NEARDATA int multi;
|
||||
E const char *multi_reason;
|
||||
E NEARDATA int nroom;
|
||||
E NEARDATA int nsubroom;
|
||||
E NEARDATA int occtime;
|
||||
@@ -67,6 +67,8 @@ E struct dgn_topology { /* special dungeon levels for speed */
|
||||
xchar d_mines_dnum, d_quest_dnum;
|
||||
d_level d_qstart_level, d_qlocate_level, d_nemesis_level;
|
||||
d_level d_knox_level;
|
||||
d_level d_mineend_level;
|
||||
d_level d_sokoend_level;
|
||||
} dungeon_topology;
|
||||
/* macros for accesing the dungeon levels by their old names */
|
||||
#define oracle_level (dungeon_topology.d_oracle_level)
|
||||
@@ -97,6 +99,8 @@ E struct dgn_topology { /* special dungeon levels for speed */
|
||||
#define qlocate_level (dungeon_topology.d_qlocate_level)
|
||||
#define nemesis_level (dungeon_topology.d_nemesis_level)
|
||||
#define knox_level (dungeon_topology.d_knox_level)
|
||||
#define mineend_level (dungeon_topology.d_mineend_level)
|
||||
#define sokoend_level (dungeon_topology.d_sokoend_level)
|
||||
|
||||
E NEARDATA stairway dnstair, upstair; /* stairs up and down */
|
||||
#define xdnstair (dnstair.sx)
|
||||
@@ -180,6 +184,7 @@ E NEARDATA struct kinfo {
|
||||
|
||||
E long done_money;
|
||||
E const char *configfile;
|
||||
E char lastconfigfile[BUFSZ]; /* used for messaging */
|
||||
E NEARDATA char plname[PL_NSIZ];
|
||||
E NEARDATA char dogname[];
|
||||
E NEARDATA char catname[];
|
||||
@@ -240,6 +245,7 @@ E NEARDATA anything zeroany; /* init'd and defined in decl.c */
|
||||
#include "you.h"
|
||||
E NEARDATA struct you u;
|
||||
E NEARDATA time_t ubirthday;
|
||||
E NEARDATA struct u_realtime urealtime;
|
||||
|
||||
#include "onames.h"
|
||||
#ifndef PM_H /* (pm.h has already been included via youprop.h) */
|
||||
@@ -357,9 +363,10 @@ E const char * const monexplain[], invisexplain[], * const oclass_names[];
|
||||
#define DATAPREFIX 4 /* this one must match hardcoded value in dlb.c */
|
||||
#define SCOREPREFIX 5
|
||||
#define LOCKPREFIX 6
|
||||
#define CONFIGPREFIX 7
|
||||
#define TROUBLEPREFIX 8
|
||||
#define PREFIX_COUNT 9
|
||||
#define SYSCONFPREFIX 7
|
||||
#define CONFIGPREFIX 8
|
||||
#define TROUBLEPREFIX 9
|
||||
#define PREFIX_COUNT 10
|
||||
/* used in files.c; xxconf.h can override if needed */
|
||||
# ifndef FQN_MAX_FILENAME
|
||||
#define FQN_MAX_FILENAME 512
|
||||
|
||||
@@ -122,6 +122,8 @@ typedef struct branch {
|
||||
#define Is_qlocate(x) (on_level(x, &qlocate_level))
|
||||
#define Is_nemesis(x) (on_level(x, &nemesis_level))
|
||||
#define Is_knox(x) (on_level(x, &knox_level))
|
||||
#define Is_mineend_level(x) (on_level(x, &mineend_level))
|
||||
#define Is_sokoend_level(x) (on_level(x, &sokoend_level))
|
||||
|
||||
#define In_sokoban(x) ((x)->dnum == sokoban_dnum)
|
||||
#define Inhell In_hell(&u.uz) /* now gehennom */
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 extern.h $NHDT-Date: 1425081976 2015/02/28 00:06:16 $ $NHDT-Branch: (no branch, rebasing scshunt-unconditionals) $:$NHDT-Revision: 1.390 $ */
|
||||
/* NetHack 3.5 extern.h $Date: 2013/11/05 00:57:53 $ $Revision: 1.380 $ */
|
||||
/* NetHack 3.5 extern.h $NHDT-Date: 1426966688 2015/03/21 19:38:08 $ $NHDT-Branch: master $:$NHDT-Revision: 1.411 $ */
|
||||
/* Copyright (c) Steve Creps, 1988. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -26,6 +25,7 @@ E void NDECL(stop_occupation);
|
||||
E void NDECL(display_gamewindows);
|
||||
E void NDECL(newgame);
|
||||
E void FDECL(welcome, (BOOLEAN_P));
|
||||
E time_t NDECL(get_realtime);
|
||||
|
||||
/* ### apply.c ### */
|
||||
|
||||
@@ -219,6 +219,7 @@ E boolean FDECL(is_pool, (int,int));
|
||||
E boolean FDECL(is_lava, (int,int));
|
||||
E boolean FDECL(is_pool_or_lava, (int,int));
|
||||
E boolean FDECL(is_ice, (int,int));
|
||||
E boolean FDECL(is_moat, (int,int));
|
||||
E int FDECL(is_drawbridge_wall, (int,int));
|
||||
E boolean FDECL(is_db_wall, (int,int));
|
||||
E boolean FDECL(find_drawbridge, (int *,int*));
|
||||
@@ -274,7 +275,7 @@ E int FDECL(use_pick_axe2, (struct obj *));
|
||||
E boolean FDECL(mdig_tunnel, (struct monst *));
|
||||
E void FDECL(watch_dig, (struct monst *,XCHAR_P,XCHAR_P,BOOLEAN_P));
|
||||
E void NDECL(zap_dig);
|
||||
E struct obj *FDECL(bury_an_obj, (struct obj *));
|
||||
E struct obj *FDECL(bury_an_obj, (struct obj *, boolean *));
|
||||
E void FDECL(bury_objs, (int,int));
|
||||
E void FDECL(unearth_objs, (int,int));
|
||||
E void FDECL(rot_organic, (ANY_P *, long));
|
||||
@@ -362,6 +363,7 @@ E void NDECL(heal_legs);
|
||||
/* ### do_name.c ### */
|
||||
|
||||
E int FDECL(getpos, (coord *,BOOLEAN_P,const char *));
|
||||
E void FDECL(getpos_sethilite, (void (*f)(int) ));
|
||||
E void FDECL(new_mname, (struct monst *,int));
|
||||
E void FDECL(free_mname, (struct monst *));
|
||||
E void FDECL(new_oname, (struct obj *,int));
|
||||
@@ -385,7 +387,7 @@ E char *FDECL(Adjmonnam, (struct monst *,const char *));
|
||||
E char *FDECL(Amonnam, (struct monst *));
|
||||
E char *FDECL(a_monnam, (struct monst *));
|
||||
E char *FDECL(distant_monnam, (struct monst *,int,char *));
|
||||
E const char *NDECL(rndmonnam);
|
||||
E char *FDECL(rndmonnam, (char *));
|
||||
E const char *FDECL(hcolor, (const char *));
|
||||
E const char *NDECL(rndcolor);
|
||||
E const char *NDECL(roguename);
|
||||
@@ -433,7 +435,6 @@ E int NDECL(doputon);
|
||||
E void NDECL(find_ac);
|
||||
E void NDECL(glibr);
|
||||
E struct obj *FDECL(some_armor,(struct monst *));
|
||||
E void FDECL(erode_armor, (struct monst *,BOOLEAN_P));
|
||||
E struct obj *FDECL(stuck_ring, (struct obj *,int));
|
||||
E struct obj *NDECL(unchanger);
|
||||
E void NDECL(reset_remarm);
|
||||
@@ -738,10 +739,15 @@ E void FDECL(free_saved_games, (char**));
|
||||
#ifdef SELF_RECOVER
|
||||
E boolean NDECL(recover_savefile);
|
||||
#endif
|
||||
E int FDECL(nhclose, (int));
|
||||
#ifdef SYSCF_FILE
|
||||
E void NDECL(assure_syscf_file);
|
||||
#endif
|
||||
#ifdef HOLD_LOCKFILE_OPEN
|
||||
E void NDECL(really_close);
|
||||
#endif
|
||||
#ifdef DEBUG
|
||||
E boolean FDECL(showdebug, (const char *));
|
||||
#endif
|
||||
|
||||
/* ### fountain.c ### */
|
||||
|
||||
@@ -801,6 +807,7 @@ E boolean FDECL(letter, (CHAR_P));
|
||||
E char FDECL(highc, (CHAR_P));
|
||||
E char FDECL(lowc, (CHAR_P));
|
||||
E char *FDECL(lcase, (char *));
|
||||
E char *FDECL(ucase, (char *));
|
||||
E char *FDECL(upstart, (char *));
|
||||
E char *FDECL(mungspaces, (char *));
|
||||
E char *FDECL(eos, (char *));
|
||||
@@ -809,6 +816,7 @@ E void FDECL(copynchars, (char *,const char *,int));
|
||||
E char FDECL(chrcasecpy, (int,int));
|
||||
E char *FDECL(strcasecpy, (char *,const char *));
|
||||
E char *FDECL(s_suffix, (const char *));
|
||||
E char *FDECL(ing_suffix, (const char *));
|
||||
E char *FDECL(xcrypt, (const char *,char *));
|
||||
E boolean FDECL(onlyspace, (const char *));
|
||||
E char *FDECL(tabexpand, (char *));
|
||||
@@ -819,6 +827,7 @@ E char *FDECL(sitoa, (int));
|
||||
E int FDECL(sgn, (int));
|
||||
E int FDECL(rounddiv, (long,int));
|
||||
E int FDECL(dist2, (int,int,int,int));
|
||||
E int FDECL(isqrt, (int));
|
||||
E int FDECL(distmin, (int,int,int,int));
|
||||
E boolean FDECL(online2, (int,int,int,int));
|
||||
E boolean FDECL(pmatch, (const char *,const char *));
|
||||
@@ -903,7 +912,7 @@ E int NDECL(dopramulet);
|
||||
E int NDECL(doprtool);
|
||||
E int NDECL(doprinuse);
|
||||
E void FDECL(useupf, (struct obj *,long));
|
||||
E char *FDECL(let_to_name, (CHAR_P,BOOLEAN_P));
|
||||
E char *FDECL(let_to_name, (CHAR_P,BOOLEAN_P,BOOLEAN_P));
|
||||
E void NDECL(free_invbuf);
|
||||
E void NDECL(reassign);
|
||||
E int NDECL(doorganize);
|
||||
@@ -1071,6 +1080,7 @@ E int FDECL(sleep_monst, (struct monst *,int,int));
|
||||
E void FDECL(slept_monst, (struct monst *));
|
||||
E void FDECL(xdrainenergym, (struct monst *,BOOLEAN_P));
|
||||
E long FDECL(attk_protection, (int));
|
||||
E void FDECL(rustm, (struct monst *,struct obj *));
|
||||
|
||||
/* ### mhitu.c ### */
|
||||
|
||||
@@ -1128,6 +1138,7 @@ E void FDECL(dodoor, (int,int,struct mkroom *));
|
||||
E void FDECL(mktrap, (int,int,struct mkroom *,coord*));
|
||||
E void FDECL(mkstairs, (XCHAR_P,XCHAR_P,CHAR_P,struct mkroom *));
|
||||
E void NDECL(mkinvokearea);
|
||||
E void FDECL(mineralize, (int, int, int, int, BOOLEAN_P));
|
||||
|
||||
/* ### mkmap.c ### */
|
||||
|
||||
@@ -1137,7 +1148,7 @@ void FDECL(remove_rooms, (int,int,int,int));
|
||||
/* ### mkmaze.c ### */
|
||||
|
||||
E void FDECL(wallification, (int,int,int,int));
|
||||
E void FDECL(walkfrom, (int,int));
|
||||
E void FDECL(walkfrom, (int,int,SCHAR_P));
|
||||
E void FDECL(makemaz, (const char *));
|
||||
E void FDECL(mazexy, (coord *));
|
||||
E void NDECL(bound_digging);
|
||||
@@ -1146,6 +1157,7 @@ E boolean FDECL(bad_location, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P))
|
||||
E void FDECL(place_lregion, (XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,
|
||||
XCHAR_P,XCHAR_P,XCHAR_P,XCHAR_P,
|
||||
XCHAR_P,d_level *));
|
||||
E void NDECL(fumaroles);
|
||||
E void NDECL(movebubbles);
|
||||
E void NDECL(water_friction);
|
||||
E void FDECL(save_waterlevel, (int,int));
|
||||
@@ -1169,7 +1181,7 @@ E struct obj *FDECL(mkobj_at, (CHAR_P,int,int,BOOLEAN_P));
|
||||
E struct obj *FDECL(mksobj_at, (int,int,int,BOOLEAN_P,BOOLEAN_P));
|
||||
E struct obj *FDECL(mkobj, (CHAR_P,BOOLEAN_P));
|
||||
E int NDECL(rndmonnum);
|
||||
E boolean FDECL(bogon_is_pname, (const char *));
|
||||
E boolean FDECL(bogon_is_pname, (CHAR_P));
|
||||
E struct obj *FDECL(splitobj, (struct obj *,long));
|
||||
E void FDECL(replace_object, (struct obj *,struct obj *));
|
||||
E void FDECL(bill_dummy_object, (struct obj *));
|
||||
@@ -1571,6 +1583,9 @@ E void FDECL(parsesymbols, (char *));
|
||||
E struct symparse *FDECL(match_sym, (char *));
|
||||
E void NDECL(set_playmode);
|
||||
E int FDECL(sym_val, (char *));
|
||||
E boolean FDECL(add_menu_coloring, (char *));
|
||||
E boolean FDECL(get_menu_coloring, (char *, int *, int *));
|
||||
E void NDECL(free_menu_coloring);
|
||||
|
||||
/* ### pager.c ### */
|
||||
|
||||
@@ -1582,6 +1597,7 @@ E int NDECL(dowhatdoes);
|
||||
E char *FDECL(dowhatdoes_core,(CHAR_P, char *));
|
||||
E int NDECL(dohelp);
|
||||
E int NDECL(dohistory);
|
||||
E int FDECL(do_screen_description, (coord, BOOLEAN_P, int, char *, const char **));
|
||||
E int FDECL(do_look, (int, coord *));
|
||||
|
||||
/* ### pcmain.c ### */
|
||||
@@ -1726,7 +1742,6 @@ E void FDECL(healup, (int,int,BOOLEAN_P,BOOLEAN_P));
|
||||
E void FDECL(strange_feeling, (struct obj *,const char *));
|
||||
E void FDECL(potionhit, (struct monst *,struct obj *,BOOLEAN_P));
|
||||
E void FDECL(potionbreathe, (struct obj *));
|
||||
E boolean FDECL(get_wet, (struct obj *));
|
||||
E int NDECL(dodip);
|
||||
E void FDECL(mongrantswish, (struct monst **));
|
||||
E void FDECL(djinni_from_bottle, (struct obj *));
|
||||
@@ -1815,6 +1830,7 @@ E long NDECL(random);
|
||||
/* ### read.c ### */
|
||||
|
||||
E void FDECL(learnscroll, (struct obj *));
|
||||
E char *FDECL(tshirt_text, (struct obj *, char *));
|
||||
E int NDECL(doread);
|
||||
E boolean FDECL(is_chargeable, (struct obj *));
|
||||
E void FDECL(recharge, (struct obj *,int));
|
||||
@@ -1926,6 +1942,7 @@ E const char *NDECL(Goodbye);
|
||||
/* ### rumors.c ### */
|
||||
|
||||
E char *FDECL(getrumor, (int,char *, BOOLEAN_P));
|
||||
E char *FDECL(get_rnd_text, (const char *, char *));
|
||||
E void FDECL(outrumor, (int,int));
|
||||
E void FDECL(outoracle, (BOOLEAN_P, BOOLEAN_P));
|
||||
E void FDECL(save_oracles, (int,int));
|
||||
@@ -2061,6 +2078,8 @@ E void FDECL(play_sound_for_message, (const char *));
|
||||
|
||||
/* ### sys.c ### */
|
||||
|
||||
E void NDECL(sys_early_init);
|
||||
E void NDECL(sysopt_release);
|
||||
E void FDECL(sysopt_seduce_set,(int));
|
||||
|
||||
/* ### sys/msdos/sound.c ### */
|
||||
@@ -2203,8 +2222,8 @@ E coord *FDECL(gettrack, (int,int));
|
||||
/* ### trap.c ### */
|
||||
|
||||
E boolean FDECL(burnarmor,(struct monst *));
|
||||
E boolean FDECL(rust_dmg, (struct obj *,const char *,int,BOOLEAN_P,struct monst *));
|
||||
E void FDECL(grease_protect, (struct obj *,const char *,struct monst *));
|
||||
E int FDECL(erode_obj, (struct obj *,const char *,int,int));
|
||||
E boolean FDECL(grease_protect, (struct obj *,const char *,struct monst *));
|
||||
E struct trap *FDECL(maketrap, (int,int,int));
|
||||
E void FDECL(fall_through, (BOOLEAN_P));
|
||||
E struct monst *FDECL(animate_statue, (struct obj *,XCHAR_P,XCHAR_P,int,int *));
|
||||
@@ -2222,8 +2241,11 @@ E void NDECL(float_up);
|
||||
E void FDECL(fill_pit, (int,int));
|
||||
E int FDECL(float_down, (long, long));
|
||||
E void NDECL(climb_pit);
|
||||
E int FDECL(fire_damage, (struct obj *,BOOLEAN_P,BOOLEAN_P,XCHAR_P,XCHAR_P));
|
||||
E void FDECL(water_damage, (struct obj **,BOOLEAN_P,BOOLEAN_P));
|
||||
E boolean FDECL(fire_damage, (struct obj *,BOOLEAN_P,XCHAR_P,XCHAR_P));
|
||||
E int FDECL(fire_damage_chain, (struct obj *,BOOLEAN_P,BOOLEAN_P,XCHAR_P,XCHAR_P));
|
||||
E void acid_damage(struct obj *);
|
||||
E int FDECL(water_damage, (struct obj *,const char*,BOOLEAN_P));
|
||||
E void FDECL(water_damage_chain, (struct obj *,BOOLEAN_P));
|
||||
E boolean NDECL(drown);
|
||||
E void FDECL(drain_en, (int));
|
||||
E int NDECL(dountrap);
|
||||
@@ -2253,7 +2275,7 @@ E void NDECL(u_init);
|
||||
|
||||
/* ### uhitm.c ### */
|
||||
|
||||
E void FDECL(hurtmarmor,(struct monst *,int));
|
||||
E void FDECL(erode_armor,(struct monst *,int));
|
||||
E boolean FDECL(attack_checks, (struct monst *,struct obj *));
|
||||
E void FDECL(check_caitiff, (struct monst *));
|
||||
E int FDECL(find_roll_to_hit, (struct monst *,UCHAR_P,struct obj *,int *,int *));
|
||||
@@ -2276,9 +2298,6 @@ E void NDECL(port_help);
|
||||
E void FDECL(sethanguphandler, (void (*)(int)));
|
||||
E boolean NDECL(authorize_wizard_mode);
|
||||
E boolean FDECL(check_user_string, (char *));
|
||||
# ifdef SYSCF_FILE
|
||||
E void NDECL(assure_syscf_file);
|
||||
# endif
|
||||
#endif /* UNIX */
|
||||
|
||||
/* ### unixtty.c ### */
|
||||
@@ -2516,7 +2535,6 @@ E void NDECL(uwepgone);
|
||||
E void NDECL(uswapwepgone);
|
||||
E void NDECL(uqwepgone);
|
||||
E void NDECL(untwoweapon);
|
||||
E boolean FDECL(erode_obj, (struct obj *,int,BOOLEAN_P,BOOLEAN_P));
|
||||
E int FDECL(chwepon, (struct obj *,int));
|
||||
E int FDECL(welded, (struct obj *));
|
||||
E void FDECL(weldmsg, (struct obj *));
|
||||
@@ -2616,7 +2634,7 @@ E boolean FDECL(obj_resists, (struct obj *,int,int));
|
||||
E boolean FDECL(obj_shudders, (struct obj *));
|
||||
E void FDECL(do_osshock, (struct obj *));
|
||||
E int FDECL(bhito, (struct obj *,struct obj *));
|
||||
E int FDECL(bhitpile, (struct obj *,int (*)(OBJ_P,OBJ_P),int,int));
|
||||
E int FDECL(bhitpile, (struct obj *,int (*)(OBJ_P,OBJ_P),int,int,SCHAR_P));
|
||||
E int FDECL(zappable, (struct obj *));
|
||||
E void FDECL(zapnodir, (struct obj *));
|
||||
E int NDECL(dozap);
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 flag.h $NHDT-Date: 1425081976 2015/02/28 00:06:16 $ $NHDT-Branch: (no branch, rebasing scshunt-unconditionals) $:$NHDT-Revision: 1.60 $ */
|
||||
/* NetHack 3.5 flag.h $Date: 2012/04/09 02:56:32 $ $Revision: 1.59 $ */
|
||||
/* NetHack 3.5 flag.h $NHDT-Date: 1425081976 2015/02/28 00:06:16 $ $NHDT-Branch: master $:$NHDT-Revision: 1.60 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -21,6 +20,7 @@ struct flag {
|
||||
boolean autoquiver; /* Automatically fill quiver */
|
||||
boolean beginner;
|
||||
boolean biff; /* enable checking for mail */
|
||||
boolean bones; /* allow saving/loading bones */
|
||||
boolean confirm; /* confirm before hitting tame monsters */
|
||||
boolean debug; /* in debugging mode */
|
||||
#define wizard flags.debug
|
||||
@@ -188,7 +188,9 @@ struct instance_flags {
|
||||
boolean deferred_X; /* deferred entry into explore mode */
|
||||
boolean num_pad; /* use numbers for movement commands */
|
||||
boolean news; /* print news */
|
||||
boolean mention_walls; /* give feedback when bumping walls */
|
||||
boolean menu_tab_sep; /* Use tabs to separate option menu fields */
|
||||
boolean menu_head_objsym; /* Show obj symbol in menu headings */
|
||||
boolean menu_requested; /* Flag for overloaded use of 'm' prefix
|
||||
* on some non-move commands */
|
||||
boolean renameallowed; /* can change hero name during role selection */
|
||||
@@ -198,6 +200,7 @@ struct instance_flags {
|
||||
boolean rlecomp; /* run-length comp of levels when writing savefile */
|
||||
uchar num_pad_mode;
|
||||
boolean echo; /* 1 to echo characters */
|
||||
boolean use_menu_color; /* use color in menus; only if wc_color */
|
||||
#if 0
|
||||
boolean DECgraphics; /* use DEC VT-xxx extended character set */
|
||||
boolean IBMgraphics; /* use IBM extended character set */
|
||||
@@ -292,6 +295,7 @@ struct instance_flags {
|
||||
boolean wc2_softkeyboard; /* use software keyboard */
|
||||
boolean wc2_wraptext; /* wrap text */
|
||||
boolean wc2_selectsaved; /* display a menu of user's saved games */
|
||||
boolean wc2_darkgray; /* try to use dark-gray color for black glyphs */
|
||||
boolean cmdassist; /* provide detailed assistance for some commands */
|
||||
boolean clicklook; /* allow right-clicking for look */
|
||||
boolean obsolete; /* obsolete options can point at this, it isn't used */
|
||||
|
||||
@@ -30,6 +30,9 @@
|
||||
#define OPTIONFILE "opthelp" /* file explaining runtime options */
|
||||
#define OPTIONS_USED "options" /* compile-time options, for #version */
|
||||
#define SYMBOLS "symbols" /* replacement symbol sets */
|
||||
#define EPITAPHFILE "epitaph" /* random epitaphs on graves */
|
||||
#define ENGRAVEFILE "engrave" /* random engravings on the floor */
|
||||
#define BOGUSMONFILE "bogusmon" /* hallucinatory monsters */
|
||||
#define LEV_EXT ".lev" /* extension for special level files */
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 hack.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 hack.h $Date: 2009/05/06 10:44:46 $ $Revision: 1.49 $ */
|
||||
/* NetHack 3.5 hack.h $NHDT-Date: 1426465431 2015/03/16 00:23:51 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.52 $ */
|
||||
/* SCCS Id: @(#)hack.h 3.5 2008/03/19 */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -11,32 +10,22 @@
|
||||
#include "config.h"
|
||||
#endif
|
||||
|
||||
/* [DEBUG shouldn't be defined unless you know what you're doing...] */
|
||||
#ifdef DEBUG
|
||||
/* due to strstr(), mon.c matches makemon.c */
|
||||
# define showdebug() (sysopt.debugfiles && \
|
||||
((sysopt.debugfiles[0] == '*') || \
|
||||
(strstr( __FILE__ , sysopt.debugfiles))))
|
||||
|
||||
/* GCC understands this syntax */
|
||||
# ifdef __GNUC__
|
||||
/* ... but whines about it anyway without these pragmas. */
|
||||
# pragma GCC diagnostic push
|
||||
# pragma GCC diagnostic ignored "-Wvariadic-macros"
|
||||
# define debugpline(args...) \
|
||||
do { if (showdebug()) pline( args ); } while(0);
|
||||
# pragma GCC diagnostic pop
|
||||
# endif
|
||||
|
||||
/* and Visual Studio understands this one */
|
||||
# ifdef _MSC_VER
|
||||
# define debugpline(...) \
|
||||
do { if (showdebug()) pline(__VA_ARGS__); } while(0);
|
||||
# endif
|
||||
|
||||
# define ifdebug(stmt) do { if (showdebug(__FILE__)) stmt; } while (0)
|
||||
/* these don't require compiler support for C99 variadic macros */
|
||||
# define debugpline0(str) ifdebug(pline(str))
|
||||
# define debugpline1(fmt,arg) ifdebug(pline(fmt,arg))
|
||||
# define debugpline2(fmt,a1,a2) ifdebug(pline(fmt,a1,a2))
|
||||
# define debugpline3(fmt,a1,a2,a3) ifdebug(pline(fmt,a1,a2,a3))
|
||||
# define debugpline4(fmt,a1,a2,a3,a4) ifdebug(pline(fmt,a1,a2,a3,a4))
|
||||
#else
|
||||
# define showdebug() (0)
|
||||
# define debugpline(...)
|
||||
#endif
|
||||
# define debugpline0(str) /*empty*/
|
||||
# define debugpline1(fmt,arg) /*empty*/
|
||||
# define debugpline2(fmt,a1,a2) /*empty*/
|
||||
# define debugpline3(fmt,a1,a2,a3) /*empty*/
|
||||
# define debugpline4(fmt,a1,a2,a3,a4) /*empty*/
|
||||
#endif /*DEBUG*/
|
||||
|
||||
#define TELL 1
|
||||
#define NOTELL 0
|
||||
@@ -99,6 +88,9 @@
|
||||
#define COST_BITE 13 /* start eating food */
|
||||
#define COST_OPEN 14 /* open tin */
|
||||
#define COST_BRKLCK 15 /* break box/chest's lock */
|
||||
#define COST_RUST 16 /* rust damage */
|
||||
#define COST_ROT 17 /* rotting attack */
|
||||
#define COST_CORRODE 18 /* acid damage */
|
||||
|
||||
/* bitmask flags for corpse_xname();
|
||||
PFX_THE takes precedence over ARTICLE, NO_PFX takes precedence over both */
|
||||
|
||||
@@ -13,6 +13,8 @@ struct mkroom {
|
||||
schar rtype; /* type of room (zoo, throne, etc...) */
|
||||
schar orig_rtype; /* same as rtype, but not zeroed later */
|
||||
schar rlit; /* is the room lit ? */
|
||||
schar needfill; /* sp_lev: does the room need filling? */
|
||||
schar needjoining; /* sp_lev */
|
||||
schar doorct; /* door count */
|
||||
schar fdoor; /* index for the first door of the room */
|
||||
schar nsubrooms; /* number of subrooms */
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 ntconf.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 ntconf.h $Date: 2012/01/15 19:11:38 $ $Revision: 1.35 $ */
|
||||
/* NetHack 3.5 ntconf.h $NHDT-Date: 1426966690 2015/03/21 19:38:10 $ $NHDT-Branch: master $:$NHDT-Revision: 1.37 $ */
|
||||
/* SCCS Id: @(#)ntconf.h 3.5 2002/03/10 */
|
||||
/* Copyright (c) NetHack PC Development Team 1993, 1994. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
@@ -25,6 +24,9 @@
|
||||
|
||||
#define SELF_RECOVER /* Allow the game itself to recover from an aborted game */
|
||||
|
||||
#define SYSCF /* Use a global configuration */
|
||||
#define SYSCF_FILE "sysconf" /* Use a file to hold the SYSCF configuration */
|
||||
|
||||
#define USER_SOUNDS
|
||||
|
||||
#ifdef WIN32CON
|
||||
@@ -127,8 +129,15 @@ extern void FDECL(interject, (int));
|
||||
#define strncmpi(a,b,c) strnicmp(a,b,c)
|
||||
#endif
|
||||
|
||||
/* Visual Studio defines this in their own headers, which we don't use */
|
||||
#ifndef snprintf
|
||||
#define snprintf _snprintf
|
||||
#pragma warning(disable:4996) /* deprecation warning suggesting snprintf_s */
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#ifdef __BORLANDC__
|
||||
#undef randomize
|
||||
#undef random
|
||||
|
||||
@@ -107,8 +107,10 @@ struct obj {
|
||||
|
||||
int corpsenm; /* type of corpse is mons[corpsenm] */
|
||||
#define leashmon corpsenm /* gets m_id of attached pet */
|
||||
#define spestudied corpsenm /* # of times a spellbook has been studied */
|
||||
#define fromsink corpsenm /* a potion from a sink */
|
||||
#define record_achieve_special corpsenm
|
||||
int usecount; /* overloaded for various things that tally */
|
||||
#define spestudied usecount /* # of times a spellbook has been studied */
|
||||
unsigned oeaten; /* nutrition left in food, if partly eaten */
|
||||
long age; /* creation date */
|
||||
long owornmask;
|
||||
@@ -301,6 +303,17 @@ struct obj {
|
||||
|| (otmp)->otyp == WAX_CANDLE\
|
||||
|| (otmp)->otyp == POT_OIL)
|
||||
|
||||
/* things that can be read */
|
||||
#define is_readable(otmp) ((otmp)->otyp == FORTUNE_COOKIE\
|
||||
|| (otmp)->otyp == T_SHIRT\
|
||||
|| (otmp)->otyp == ALCHEMY_SMOCK\
|
||||
|| (otmp)->otyp == CREDIT_CARD\
|
||||
|| (otmp)->otyp == CAN_OF_GREASE\
|
||||
|| (otmp)->otyp == MAGIC_MARKER\
|
||||
|| (otmp)->oclass == COIN_CLASS\
|
||||
|| (otmp)->oartifact == ART_ORB_OF_FATE\
|
||||
|| (otmp)->otyp == CANDY_BAR)
|
||||
|
||||
/* special stones */
|
||||
#define is_graystone(obj) ((obj)->otyp == LUCKSTONE || \
|
||||
(obj)->otyp == LOADSTONE || \
|
||||
@@ -319,6 +332,25 @@ struct obj {
|
||||
#define CONTAINED_TOO 0x1
|
||||
#define BURIED_TOO 0x2
|
||||
|
||||
/* object erosion types */
|
||||
#define ERODE_BURN 0
|
||||
#define ERODE_RUST 1
|
||||
#define ERODE_ROT 2
|
||||
#define ERODE_CORRODE 3
|
||||
|
||||
/* erosion flags for erode_obj() */
|
||||
#define EF_NONE 0
|
||||
#define EF_GREASE 0x1 /* check for a greased object */
|
||||
#define EF_DESTROY 0x2 /* potentially destroy the object */
|
||||
#define EF_VERBOSE 0x4 /* print extra messages */
|
||||
#define EF_PAY 0x8 /* it's the player's fault */
|
||||
|
||||
/* erosion return values for erode_obj(), water_damage() */
|
||||
#define ER_NOTHING 0 /* nothing happened */
|
||||
#define ER_GREASED 1 /* protected by grease */
|
||||
#define ER_DAMAGED 2 /* object was damaged in some way */
|
||||
#define ER_DESTROYED 3 /* object was destroyed */
|
||||
|
||||
/*
|
||||
* Notes for adding new oextra structures:
|
||||
*
|
||||
|
||||
@@ -14,10 +14,10 @@
|
||||
* Incrementing EDITLEVEL can be used to force invalidation of old bones
|
||||
* and save files.
|
||||
*/
|
||||
#define EDITLEVEL 55
|
||||
#define EDITLEVEL 60
|
||||
|
||||
#define COPYRIGHT_BANNER_A \
|
||||
"NetHack, Copyright 1985-2012"
|
||||
"NetHack, Copyright 1985-2015"
|
||||
#define COPYRIGHT_BANNER_B \
|
||||
" By Stichting Mathematisch Centrum and M. Stephenson."
|
||||
/* COPYRIGHT_BANNER_C is generated by makedefs into date.h */
|
||||
|
||||
53
include/rm.h
53
include/rm.h
@@ -189,34 +189,35 @@
|
||||
#define S_ss2 72
|
||||
#define S_ss3 73
|
||||
#define S_ss4 74
|
||||
#define S_poisoncloud 75
|
||||
|
||||
/* The 8 swallow symbols. Do NOT separate. To change order or add, see */
|
||||
/* the function swallow_to_glyph() in display.c. */
|
||||
#define S_sw_tl 75 /* swallow top left [1] */
|
||||
#define S_sw_tc 76 /* swallow top center [2] Order: */
|
||||
#define S_sw_tr 77 /* swallow top right [3] */
|
||||
#define S_sw_ml 78 /* swallow middle left [4] 1 2 3 */
|
||||
#define S_sw_mr 79 /* swallow middle right [6] 4 5 6 */
|
||||
#define S_sw_bl 80 /* swallow bottom left [7] 7 8 9 */
|
||||
#define S_sw_bc 81 /* swallow bottom center [8] */
|
||||
#define S_sw_br 82 /* swallow bottom right [9] */
|
||||
#define S_sw_tl 76 /* swallow top left [1] */
|
||||
#define S_sw_tc 77 /* swallow top center [2] Order: */
|
||||
#define S_sw_tr 78 /* swallow top right [3] */
|
||||
#define S_sw_ml 79 /* swallow middle left [4] 1 2 3 */
|
||||
#define S_sw_mr 80 /* swallow middle right [6] 4 5 6 */
|
||||
#define S_sw_bl 81 /* swallow bottom left [7] 7 8 9 */
|
||||
#define S_sw_bc 82 /* swallow bottom center [8] */
|
||||
#define S_sw_br 83 /* swallow bottom right [9] */
|
||||
|
||||
#define S_explode1 83 /* explosion top left */
|
||||
#define S_explode2 84 /* explosion top center */
|
||||
#define S_explode3 85 /* explosion top right Ex. */
|
||||
#define S_explode4 86 /* explosion middle left */
|
||||
#define S_explode5 87 /* explosion middle center /-\ */
|
||||
#define S_explode6 88 /* explosion middle right |@| */
|
||||
#define S_explode7 89 /* explosion bottom left \-/ */
|
||||
#define S_explode8 90 /* explosion bottom center */
|
||||
#define S_explode9 91 /* explosion bottom right */
|
||||
#define S_explode1 84 /* explosion top left */
|
||||
#define S_explode2 85 /* explosion top center */
|
||||
#define S_explode3 86 /* explosion top right Ex. */
|
||||
#define S_explode4 87 /* explosion middle left */
|
||||
#define S_explode5 88 /* explosion middle center /-\ */
|
||||
#define S_explode6 89 /* explosion middle right |@| */
|
||||
#define S_explode7 90 /* explosion bottom left \-/ */
|
||||
#define S_explode8 91 /* explosion bottom center */
|
||||
#define S_explode9 92 /* explosion bottom right */
|
||||
|
||||
/* end effects */
|
||||
|
||||
#define MAXPCHARS 92 /* maximum number of mapped characters */
|
||||
#define MAXPCHARS 93 /* maximum number of mapped characters */
|
||||
#define MAXDCHARS 41 /* maximum of mapped dungeon characters */
|
||||
#define MAXTCHARS 22 /* maximum of mapped trap characters */
|
||||
#define MAXECHARS 29 /* maximum of mapped effects characters */
|
||||
#define MAXECHARS 30 /* maximum of mapped effects characters */
|
||||
#define MAXEXPCHARS 9 /* number of explosion characters */
|
||||
|
||||
struct symdef {
|
||||
@@ -291,6 +292,7 @@ extern struct symsetentry symset[NUM_GRAPHICS]; /* from drawing.c */
|
||||
#define D_CLOSED 4
|
||||
#define D_LOCKED 8
|
||||
#define D_TRAPPED 16
|
||||
#define D_SECRET 32 /* only used by sp_lev.c, NOT in rm-struct */
|
||||
|
||||
/*
|
||||
* Some altars are considered as shrines, so we need a flag.
|
||||
@@ -393,6 +395,19 @@ struct rm {
|
||||
Bitfield(candig,1); /* Exception to Can_dig_down; was a trapdoor */
|
||||
};
|
||||
|
||||
|
||||
#define SET_TYPLIT(x,y,ttyp,llit) \
|
||||
{ \
|
||||
if ((x) >= 0 && (y) >= 0 && (x) < COLNO && (y) < ROWNO) { \
|
||||
if ((ttyp) < MAX_TYPE) levl[(x)][(y)].typ = (ttyp); \
|
||||
if ((ttyp) == LAVAPOOL) levl[(x)][(y)].lit = 1; \
|
||||
else if ((schar)(llit) != -2) { \
|
||||
if ((schar)(llit) == -1) levl[(x)][(y)].lit = rn2(2); \
|
||||
else levl[(x)][(y)].lit = (llit); \
|
||||
} \
|
||||
} \
|
||||
}
|
||||
|
||||
/*
|
||||
* Add wall angle viewing by defining "modes" for each wall type. Each
|
||||
* mode describes which parts of a wall are finished (seen as as wall)
|
||||
|
||||
540
include/sp_lev.h
540
include/sp_lev.h
@@ -19,92 +19,378 @@
|
||||
#define MAP_Y_LIM 21
|
||||
|
||||
/* Per level flags */
|
||||
#define NOTELEPORT 1
|
||||
#define HARDFLOOR 2
|
||||
#define NOMMAP 4
|
||||
#define SHORTSIGHTED 8
|
||||
#define ARBOREAL 16
|
||||
#define NOTELEPORT 0x00000001L
|
||||
#define HARDFLOOR 0x00000002L
|
||||
#define NOMMAP 0x00000004L
|
||||
#define SHORTSIGHTED 0x00000008L
|
||||
#define ARBOREAL 0x00000010L
|
||||
#define MAZELEVEL 0x00000020L
|
||||
#define PREMAPPED 0x00000040L /* premapped level & sokoban rules */
|
||||
#define SHROUD 0x00000080L
|
||||
#define GRAVEYARD 0x00000100L
|
||||
#define ICEDPOOLS 0x00000200L /* for ice locations: ICED_POOL vs ICED_MOAT */
|
||||
#define SOLIDIFY 0x00000400L /* outer areas are nondiggable & nonpasswall */
|
||||
|
||||
/* special level types */
|
||||
#define SP_LEV_ROOMS 1
|
||||
#define SP_LEV_MAZE 2
|
||||
/* different level layout initializers */
|
||||
#define LVLINIT_NONE 0
|
||||
#define LVLINIT_SOLIDFILL 1
|
||||
#define LVLINIT_MAZEGRID 2
|
||||
#define LVLINIT_MINES 3
|
||||
#define LVLINIT_ROGUE 4
|
||||
|
||||
/* max. layers of object containment */
|
||||
#define MAX_CONTAINMENT 10
|
||||
|
||||
/* max. # of random registers */
|
||||
#define MAX_REGISTERS 10
|
||||
|
||||
/* max. nested depth of subrooms */
|
||||
#define MAX_NESTED_ROOMS 5
|
||||
|
||||
/* max. # of opcodes per special level */
|
||||
#define SPCODER_MAX_RUNTIME 65536
|
||||
|
||||
/* Opcodes for creating the level
|
||||
* If you change these, also change opcodestr[] in util/lev_main.c
|
||||
*/
|
||||
enum opcode_defs {
|
||||
SPO_NULL = 0,
|
||||
SPO_MESSAGE,
|
||||
SPO_MONSTER,
|
||||
SPO_OBJECT,
|
||||
SPO_ENGRAVING,
|
||||
SPO_ROOM,
|
||||
SPO_SUBROOM,
|
||||
SPO_DOOR,
|
||||
SPO_STAIR,
|
||||
SPO_LADDER,
|
||||
SPO_ALTAR,
|
||||
SPO_FOUNTAIN,
|
||||
SPO_SINK,
|
||||
SPO_POOL,
|
||||
SPO_TRAP,
|
||||
SPO_GOLD,
|
||||
SPO_CORRIDOR,
|
||||
SPO_LEVREGION,
|
||||
SPO_DRAWBRIDGE,
|
||||
SPO_MAZEWALK,
|
||||
SPO_NON_DIGGABLE,
|
||||
SPO_NON_PASSWALL,
|
||||
SPO_WALLIFY,
|
||||
SPO_MAP,
|
||||
SPO_ROOM_DOOR,
|
||||
SPO_REGION,
|
||||
SPO_MINERALIZE,
|
||||
SPO_CMP,
|
||||
SPO_JMP,
|
||||
SPO_JL,
|
||||
SPO_JLE,
|
||||
SPO_JG,
|
||||
SPO_JGE,
|
||||
SPO_JE,
|
||||
SPO_JNE,
|
||||
SPO_TERRAIN,
|
||||
SPO_REPLACETERRAIN,
|
||||
SPO_EXIT,
|
||||
SPO_ENDROOM,
|
||||
SPO_POP_CONTAINER,
|
||||
SPO_PUSH,
|
||||
SPO_POP,
|
||||
SPO_RN2,
|
||||
SPO_DEC,
|
||||
SPO_INC,
|
||||
SPO_MATH_ADD,
|
||||
SPO_MATH_SUB,
|
||||
SPO_MATH_MUL,
|
||||
SPO_MATH_DIV,
|
||||
SPO_MATH_MOD,
|
||||
SPO_MATH_SIGN,
|
||||
SPO_COPY,
|
||||
SPO_END_MONINVENT,
|
||||
SPO_GRAVE,
|
||||
SPO_FRAME_PUSH,
|
||||
SPO_FRAME_POP,
|
||||
SPO_CALL,
|
||||
SPO_RETURN,
|
||||
SPO_INITLEVEL,
|
||||
SPO_LEVEL_FLAGS,
|
||||
SPO_VAR_INIT, /* variable_name data */
|
||||
SPO_SHUFFLE_ARRAY,
|
||||
SPO_DICE,
|
||||
|
||||
SPO_SEL_ADD,
|
||||
SPO_SEL_POINT,
|
||||
SPO_SEL_RECT,
|
||||
SPO_SEL_FILLRECT,
|
||||
SPO_SEL_LINE,
|
||||
SPO_SEL_RNDLINE,
|
||||
SPO_SEL_GROW,
|
||||
SPO_SEL_FLOOD,
|
||||
SPO_SEL_RNDCOORD,
|
||||
SPO_SEL_ELLIPSE,
|
||||
SPO_SEL_FILTER,
|
||||
SPO_SEL_GRADIENT,
|
||||
SPO_SEL_COMPLEMENT,
|
||||
|
||||
MAX_SP_OPCODES
|
||||
};
|
||||
|
||||
/* MONSTER and OBJECT can take a variable number of parameters,
|
||||
* they also pop different # of values from the stack. So,
|
||||
* first we pop a value that tells what the _next_ value will
|
||||
* mean.
|
||||
*/
|
||||
/* MONSTER */
|
||||
#define SP_M_V_PEACEFUL 0
|
||||
#define SP_M_V_ALIGN 1
|
||||
#define SP_M_V_ASLEEP 2
|
||||
#define SP_M_V_APPEAR 3
|
||||
#define SP_M_V_NAME 4
|
||||
|
||||
#define SP_M_V_FEMALE 5
|
||||
#define SP_M_V_INVIS 6
|
||||
#define SP_M_V_CANCELLED 7
|
||||
#define SP_M_V_REVIVED 8
|
||||
#define SP_M_V_AVENGE 9
|
||||
#define SP_M_V_FLEEING 10
|
||||
#define SP_M_V_BLINDED 11
|
||||
#define SP_M_V_PARALYZED 12
|
||||
#define SP_M_V_STUNNED 13
|
||||
#define SP_M_V_CONFUSED 14
|
||||
#define SP_M_V_SEENTRAPS 15
|
||||
|
||||
#define SP_M_V_END 16 /* end of variable parameters */
|
||||
|
||||
/* OBJECT */
|
||||
#define SP_O_V_SPE 0
|
||||
#define SP_O_V_CURSE 1
|
||||
#define SP_O_V_CORPSENM 2
|
||||
#define SP_O_V_NAME 3
|
||||
#define SP_O_V_QUAN 4
|
||||
#define SP_O_V_BURIED 5
|
||||
#define SP_O_V_LIT 6
|
||||
#define SP_O_V_ERODED 7
|
||||
#define SP_O_V_LOCKED 8
|
||||
#define SP_O_V_TRAPPED 9
|
||||
#define SP_O_V_RECHARGED 10
|
||||
#define SP_O_V_INVIS 11
|
||||
#define SP_O_V_GREASED 12
|
||||
#define SP_O_V_BROKEN 13
|
||||
#define SP_O_V_COORD 14
|
||||
#define SP_O_V_END 15 /* end of variable parameters */
|
||||
|
||||
|
||||
/* When creating objects, we need to know whether
|
||||
* it's a container and/or contents.
|
||||
*/
|
||||
#define SP_OBJ_CONTENT 0x1
|
||||
#define SP_OBJ_CONTAINER 0x2
|
||||
|
||||
|
||||
/* SPO_FILTER types */
|
||||
#define SPOFILTER_PERCENT 0
|
||||
#define SPOFILTER_SELECTION 1
|
||||
#define SPOFILTER_MAPCHAR 2
|
||||
|
||||
/* gradient filter types */
|
||||
#define SEL_GRADIENT_RADIAL 0
|
||||
#define SEL_GRADIENT_SQUARE 1
|
||||
|
||||
/* variable types */
|
||||
#define SPOVAR_NULL 0x00
|
||||
#define SPOVAR_INT 0x01 /* l */
|
||||
#define SPOVAR_STRING 0x02 /* str */
|
||||
#define SPOVAR_VARIABLE 0x03 /* str (contains the variable name) */
|
||||
#define SPOVAR_COORD 0x04 /* coordinate, encoded in l; use SP_COORD_X() and SP_COORD_Y() */
|
||||
#define SPOVAR_REGION 0x05 /* region, encoded in l; use SP_REGION_X1() etc */
|
||||
#define SPOVAR_MAPCHAR 0x06 /* map char, in l */
|
||||
#define SPOVAR_MONST 0x07 /* monster class & specific monster, encoded in l; use SP_MONST_... */
|
||||
#define SPOVAR_OBJ 0x08 /* object class & specific object type, encoded in l; use SP_OBJ_... */
|
||||
#define SPOVAR_SEL 0x09 /* selection. char[COLNO][ROWNO] in str */
|
||||
#define SPOVAR_ARRAY 0x40 /* used in splev_var & lc_vardefs, not in opvar */
|
||||
|
||||
#define SP_COORD_IS_RANDOM 0x01000000
|
||||
/* Humidity flags for get_location() and friends, used with SP_COORD_PACK_RANDOM() */
|
||||
#define DRY 0x1
|
||||
#define WET 0x2
|
||||
#define HOT 0x4
|
||||
#define SOLID 0x8
|
||||
#define ANY_LOC 0x10 /* even outside the level */
|
||||
#define NO_LOC_WARN 0x20 /* no complaints and set x & y to -1, if no loc */
|
||||
|
||||
#define SP_COORD_X(l) (l & 0xff)
|
||||
#define SP_COORD_Y(l) ((l >> 16) & 0xff)
|
||||
#define SP_COORD_PACK(x,y) ((( x ) & 0xff) + ((( y ) & 0xff) << 16))
|
||||
#define SP_COORD_PACK_RANDOM(f) (SP_COORD_IS_RANDOM | (f))
|
||||
|
||||
#define SP_REGION_X1(l) (l & 0xff)
|
||||
#define SP_REGION_Y1(l) ((l >> 8) & 0xff)
|
||||
#define SP_REGION_X2(l) ((l >> 16) & 0xff)
|
||||
#define SP_REGION_Y2(l) ((l >> 24) & 0xff)
|
||||
#define SP_REGION_PACK(x1,y1,x2,y2) ((( x1 ) & 0xff) + ((( y1 ) & 0xff) << 8) + ((( x2 ) & 0xff) << 16) + ((( y2 ) & 0xff) << 24))
|
||||
|
||||
#define SP_MONST_CLASS(l) (l & 0xff)
|
||||
#define SP_MONST_PM(l) ((l >> 8) & 0xffff)
|
||||
#define SP_MONST_PACK(m,c) ((( m ) << 8) + ((char)( c )))
|
||||
|
||||
#define SP_OBJ_CLASS(l) (l & 0xff)
|
||||
#define SP_OBJ_TYP(l) ((l >> 8) & 0xffff)
|
||||
#define SP_OBJ_PACK(o,c) ((( o ) << 8) + ((char)( c )))
|
||||
|
||||
#define SP_MAPCHAR_TYP(l) (l & 0xff)
|
||||
#define SP_MAPCHAR_LIT(l) ((l >> 8) & 0xff)
|
||||
#define SP_MAPCHAR_PACK(typ,lit) ((( lit ) << 8) + ((char)( typ )))
|
||||
|
||||
|
||||
struct opvar {
|
||||
xchar spovartyp; /* one of SPOVAR_foo */
|
||||
union {
|
||||
char *str;
|
||||
long l;
|
||||
} vardata;
|
||||
};
|
||||
|
||||
struct splev_var {
|
||||
struct splev_var *next;
|
||||
char *name;
|
||||
xchar svtyp; /* SPOVAR_foo */
|
||||
union {
|
||||
struct opvar *value;
|
||||
struct opvar **arrayvalues;
|
||||
} data;
|
||||
long array_len;
|
||||
};
|
||||
|
||||
struct splevstack {
|
||||
long depth;
|
||||
long depth_alloc;
|
||||
struct opvar **stackdata;
|
||||
};
|
||||
|
||||
|
||||
struct sp_frame {
|
||||
struct sp_frame *next;
|
||||
struct splevstack *stack;
|
||||
struct splev_var *variables;
|
||||
long n_opcode;
|
||||
};
|
||||
|
||||
|
||||
struct sp_coder {
|
||||
struct splevstack *stack;
|
||||
struct sp_frame *frame;
|
||||
int premapped;
|
||||
boolean solidify;
|
||||
struct mkroom *croom;
|
||||
struct mkroom *tmproomlist[MAX_NESTED_ROOMS+1];
|
||||
boolean failed_room[MAX_NESTED_ROOMS+1];
|
||||
int n_subroom;
|
||||
boolean exit_script;
|
||||
int lvl_is_joined;
|
||||
|
||||
int opcode; /* current opcode */
|
||||
struct opvar *opdat; /* current push data (req. opcode == SPO_PUSH) */
|
||||
};
|
||||
|
||||
/* special level coder CPU flags */
|
||||
#define SP_CPUFLAG_LT 1
|
||||
#define SP_CPUFLAG_GT 2
|
||||
#define SP_CPUFLAG_EQ 4
|
||||
#define SP_CPUFLAG_ZERO 8
|
||||
|
||||
/*
|
||||
* Structures manipulated by the special levels loader & compiler
|
||||
*/
|
||||
|
||||
#define packed_coord long
|
||||
typedef struct {
|
||||
xchar is_random;
|
||||
long getloc_flags;
|
||||
int x, y;
|
||||
} unpacked_coord;
|
||||
|
||||
typedef struct {
|
||||
int cmp_what;
|
||||
int cmp_val;
|
||||
} opcmp;
|
||||
|
||||
typedef struct {
|
||||
long jmp_target;
|
||||
} opjmp;
|
||||
|
||||
|
||||
typedef union str_or_len {
|
||||
char *str;
|
||||
int len;
|
||||
} Str_or_Len;
|
||||
|
||||
typedef struct {
|
||||
xchar init_style; /* one of LVLINIT_foo */
|
||||
long flags;
|
||||
schar filling;
|
||||
boolean init_present, padding;
|
||||
char fg, bg;
|
||||
boolean smoothed, joined;
|
||||
xchar lit, walled;
|
||||
boolean icedpools; /* for ice locations: ICED_POOL vs ICED_MOAT */
|
||||
boolean icedpools;
|
||||
} lev_init;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y, mask;
|
||||
} door;
|
||||
|
||||
typedef struct {
|
||||
xchar wall, pos, secret, mask;
|
||||
} room_door;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y, chance, type;
|
||||
packed_coord coord;
|
||||
xchar x, y, type;
|
||||
} trap;
|
||||
|
||||
typedef struct {
|
||||
Str_or_Len name, appear_as;
|
||||
short id;
|
||||
aligntyp align;
|
||||
xchar x, y, chance, class, appear;
|
||||
packed_coord coord;
|
||||
xchar x, y, class, appear;
|
||||
schar peaceful, asleep;
|
||||
short female, invis, cancelled, revived, avenge, fleeing, blinded, paralyzed, stunned, confused;
|
||||
long seentraps;
|
||||
short has_invent;
|
||||
} monster;
|
||||
|
||||
typedef struct {
|
||||
Str_or_Len name;
|
||||
int corpsenm;
|
||||
short id, spe;
|
||||
xchar x, y, chance, class, containment;
|
||||
packed_coord coord;
|
||||
xchar x, y, class, containment;
|
||||
schar curse_state;
|
||||
int quan;
|
||||
short buried;
|
||||
short lit;
|
||||
short eroded, locked, trapped, recharged, invis, greased, broken;
|
||||
} object;
|
||||
|
||||
typedef struct {
|
||||
packed_coord coord;
|
||||
xchar x, y;
|
||||
aligntyp align;
|
||||
xchar shrine;
|
||||
} altar;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y, dir, db_open;
|
||||
} drawbridge;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y, dir;
|
||||
} walk;
|
||||
|
||||
typedef struct {
|
||||
xchar x1, y1, x2, y2;
|
||||
} digpos;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y, up;
|
||||
} lad;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y, up;
|
||||
} stair;
|
||||
|
||||
typedef struct {
|
||||
xchar x1, y1, x2, y2;
|
||||
xchar rtype, rlit, rirreg;
|
||||
} region;
|
||||
|
||||
typedef struct {
|
||||
xchar ter, tlit;
|
||||
} terrain;
|
||||
|
||||
typedef struct {
|
||||
xchar chance;
|
||||
xchar x1,y1,x2,y2;
|
||||
xchar fromter, toter, tolit;
|
||||
} replaceterrain;
|
||||
|
||||
/* values for rtype are defined in dungeon.h */
|
||||
typedef struct {
|
||||
struct { xchar x1, y1, x2, y2; } inarea;
|
||||
@@ -114,116 +400,6 @@ typedef struct {
|
||||
Str_or_Len rname;
|
||||
} lev_region;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y;
|
||||
int amount;
|
||||
} gold;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y;
|
||||
Str_or_Len engr;
|
||||
xchar etype;
|
||||
} engraving;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y;
|
||||
} fountain;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y;
|
||||
} sink;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y;
|
||||
} pool;
|
||||
|
||||
typedef struct {
|
||||
char halign, valign;
|
||||
char xsize, ysize;
|
||||
char **map;
|
||||
char nrobjects;
|
||||
char *robjects;
|
||||
char nloc;
|
||||
char *rloc_x;
|
||||
char *rloc_y;
|
||||
char nrmonst;
|
||||
char *rmonst;
|
||||
char nreg;
|
||||
region **regions;
|
||||
char nlreg;
|
||||
lev_region **lregions;
|
||||
char ndoor;
|
||||
door **doors;
|
||||
char ntrap;
|
||||
trap **traps;
|
||||
char nmonster;
|
||||
monster **monsters;
|
||||
char nobject;
|
||||
object **objects;
|
||||
char ndrawbridge;
|
||||
drawbridge **drawbridges;
|
||||
char nwalk;
|
||||
walk **walks;
|
||||
char ndig;
|
||||
digpos **digs;
|
||||
char npass;
|
||||
digpos **passs;
|
||||
char nlad;
|
||||
lad **lads;
|
||||
char nstair;
|
||||
stair **stairs;
|
||||
char naltar;
|
||||
altar **altars;
|
||||
char ngold;
|
||||
gold **golds;
|
||||
char nengraving;
|
||||
engraving **engravings;
|
||||
char nfountain;
|
||||
fountain **fountains;
|
||||
} mazepart;
|
||||
|
||||
typedef struct {
|
||||
long flags;
|
||||
lev_init init_lev;
|
||||
schar filling;
|
||||
char numpart;
|
||||
mazepart **parts;
|
||||
} specialmaze;
|
||||
|
||||
typedef struct _room {
|
||||
char *name;
|
||||
char *parent;
|
||||
xchar x, y, w, h;
|
||||
xchar xalign, yalign;
|
||||
xchar rtype, chance, rlit, filled;
|
||||
char ndoor;
|
||||
room_door **doors;
|
||||
char ntrap;
|
||||
trap **traps;
|
||||
char nmonster;
|
||||
monster **monsters;
|
||||
char nobject;
|
||||
object **objects;
|
||||
char naltar;
|
||||
altar **altars;
|
||||
char nstair;
|
||||
stair **stairs;
|
||||
char ngold;
|
||||
gold **golds;
|
||||
char nengraving;
|
||||
engraving **engravings;
|
||||
char nfountain;
|
||||
fountain **fountains;
|
||||
char nsink;
|
||||
sink **sinks;
|
||||
char npool;
|
||||
pool **pools;
|
||||
/* These three fields are only used when loading the level... */
|
||||
int nsubroom;
|
||||
struct _room *subrooms[MAX_SUBROOMS];
|
||||
struct mkroom *mkr;
|
||||
} room;
|
||||
|
||||
typedef struct {
|
||||
struct {
|
||||
xchar room;
|
||||
@@ -232,18 +408,66 @@ typedef struct {
|
||||
} src, dest;
|
||||
} corridor;
|
||||
|
||||
/* used only by lev_comp */
|
||||
typedef struct _room {
|
||||
Str_or_Len name;
|
||||
Str_or_Len parent;
|
||||
xchar x, y, w, h;
|
||||
xchar xalign, yalign;
|
||||
xchar rtype, chance, rlit, filled, joined;
|
||||
} room;
|
||||
|
||||
typedef struct {
|
||||
long flags;
|
||||
lev_init init_lev;
|
||||
char nrobjects;
|
||||
char *robjects;
|
||||
char nrmonst;
|
||||
char *rmonst;
|
||||
xchar nroom;
|
||||
room **rooms;
|
||||
xchar ncorr;
|
||||
corridor **corrs;
|
||||
} splev;
|
||||
schar zaligntyp;
|
||||
schar keep_region;
|
||||
schar halign, valign;
|
||||
char xsize, ysize;
|
||||
char **map;
|
||||
} mazepart;
|
||||
|
||||
typedef struct {
|
||||
int opcode;
|
||||
struct opvar *opdat;
|
||||
} _opcode;
|
||||
|
||||
typedef struct {
|
||||
_opcode *opcodes;
|
||||
long n_opcodes;
|
||||
} sp_lev;
|
||||
|
||||
typedef struct {
|
||||
xchar x, y, direction, count, lit;
|
||||
char typ;
|
||||
} spill;
|
||||
|
||||
|
||||
/* only used by lev_comp */
|
||||
struct lc_funcdefs_parm {
|
||||
char *name;
|
||||
char parmtype;
|
||||
struct lc_funcdefs_parm *next;
|
||||
};
|
||||
|
||||
struct lc_funcdefs {
|
||||
struct lc_funcdefs *next;
|
||||
char *name;
|
||||
long addr;
|
||||
sp_lev code;
|
||||
long n_called;
|
||||
struct lc_funcdefs_parm *params;
|
||||
long n_params;
|
||||
};
|
||||
|
||||
struct lc_vardefs {
|
||||
struct lc_vardefs *next;
|
||||
char *name;
|
||||
long var_type; /* SPOVAR_foo */
|
||||
long n_used;
|
||||
};
|
||||
|
||||
struct lc_breakdef {
|
||||
struct lc_breakdef *next;
|
||||
struct opvar *breakpoint;
|
||||
int break_depth;
|
||||
};
|
||||
|
||||
#endif /* SP_LEV_H */
|
||||
|
||||
@@ -1,27 +1,29 @@
|
||||
/* NetHack 3.5 sys.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 sys.h $Date: 2012/01/27 20:15:26 $ $Revision: 1.9 $ */
|
||||
/* NetHack 3.5 sys.h $NHDT-Date: 1426544796 2015/03/16 22:26:36 $ $NHDT-Branch: master $:$NHDT-Revision: 1.13 $ */
|
||||
/* Copyright (c) Kenneth Lorber, Kensington, Maryland, 2008. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
#ifndef SYS_H
|
||||
#define SYS_H
|
||||
|
||||
#define E extern
|
||||
|
||||
E void NDECL(sys_early_init);
|
||||
|
||||
struct sysopt {
|
||||
char *support; /* local support contact */
|
||||
char *recover; /* how to run recover - may be overridden by win port */
|
||||
char *wizards;
|
||||
char *explorers;
|
||||
char *shellers; /* like wizards, for ! command (-DSHELL) */
|
||||
char *debugfiles; /* files to show debugplines in. '*' is all. */
|
||||
int env_dbgfl; /* 1: debugfiles comes from getenv("DEBUGFILES")
|
||||
* so sysconf's DEBUGFILES shouldn't override it;
|
||||
* 0: getenv() hasn't been attempted yet;
|
||||
* -1: getenv() didn't find a value for DEBUGFILES.
|
||||
*/
|
||||
int maxplayers;
|
||||
/* record file */
|
||||
int persmax;
|
||||
int pers_is_uid;
|
||||
int entrymax;
|
||||
int pointsmin;
|
||||
int tt_oname_maxrank;
|
||||
#ifdef PANICTRACE
|
||||
/* panic options */
|
||||
char *gdbpath;
|
||||
@@ -33,7 +35,8 @@ struct sysopt {
|
||||
#endif
|
||||
int seduce;
|
||||
};
|
||||
E struct sysopt sysopt;
|
||||
|
||||
extern struct sysopt sysopt;
|
||||
|
||||
#define SYSOPT_SEDUCE sysopt.seduce
|
||||
|
||||
|
||||
@@ -217,6 +217,12 @@
|
||||
|
||||
#define FCMASK 0660 /* file creation mask */
|
||||
|
||||
/* fcntl(2) is a POSIX-portable call for manipulating file descriptors.
|
||||
* Comment out the USE_FCNTL if for some reason you have a strange
|
||||
* OS/filesystem combination for which fcntl(2) does not work. */
|
||||
#ifdef POSIX_TYPES
|
||||
# define USE_FCNTL
|
||||
#endif
|
||||
|
||||
/*
|
||||
* The remainder of the file should not need to be changed.
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 wceconf.h $NHDT-Date: 1425081976 2015/02/28 00:06:16 $ $NHDT-Branch: (no branch, rebasing scshunt-unconditionals) $:$NHDT-Revision: 1.12 $ */
|
||||
/* NetHack 3.5 wceconf.h $Date: 2009/10/22 02:59:14 $ $Revision: 1.12 $ */
|
||||
/* NetHack 3.5 wceconf.h $NHDT-Date: 1425081976 2015/02/28 00:06:16 $ $NHDT-Branch: master $:$NHDT-Revision: 1.12 $ */
|
||||
/* Copyright (C) 2001 by Alex Kompel */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
|
||||
@@ -219,7 +219,8 @@ NEARDATA struct window_procs windowprocs;
|
||||
#define WC2_WRAPTEXT 0x04L /* 03 wrap long lines of text */
|
||||
#define WC2_HILITE_STATUS 0x08L /* 04 hilite fields in status */
|
||||
#define WC2_SELECTSAVED 0x10L /* 05 saved game selection menu */
|
||||
/* 27 free bits */
|
||||
#define WC2_DARKGRAY 0x20L /* 06 use bold black for black glyphs */
|
||||
/* 26 free bits */
|
||||
|
||||
#define ALIGN_LEFT 1
|
||||
#define ALIGN_RIGHT 2
|
||||
|
||||
@@ -29,9 +29,9 @@ struct WinDesc {
|
||||
xchar type; /* type of window */
|
||||
boolean active; /* true if window is active */
|
||||
short offx, offy; /* offset from topleft of display */
|
||||
short rows, cols; /* dimensions */
|
||||
short curx, cury; /* current cursor position */
|
||||
short maxrow, maxcol; /* the maximum size used -- for MENU wins */
|
||||
long rows, cols; /* dimensions */
|
||||
long curx, cury; /* current cursor position */
|
||||
long maxrow, maxcol; /* the maximum size used -- for MENU wins */
|
||||
/* maxcol is also used by WIN_MESSAGE for */
|
||||
/* tracking the ^P command */
|
||||
short *datlen; /* allocation size for *data */
|
||||
@@ -39,9 +39,9 @@ struct WinDesc {
|
||||
char *morestr; /* string to display instead of default */
|
||||
tty_menu_item *mlist; /* menu information (MENU) */
|
||||
tty_menu_item **plist; /* menu page pointers (MENU) */
|
||||
short plist_size; /* size of allocated plist (MENU) */
|
||||
short npages; /* number of pages in menu (MENU) */
|
||||
short nitems; /* total number of items (MENU) */
|
||||
long plist_size; /* size of allocated plist (MENU) */
|
||||
long npages; /* number of pages in menu (MENU) */
|
||||
long nitems; /* total number of items (MENU) */
|
||||
short how; /* menu mode - pick 1 or N (MENU) */
|
||||
char menu_ch; /* menu char (MENU) */
|
||||
};
|
||||
|
||||
@@ -53,6 +53,26 @@ struct u_event {
|
||||
Bitfield(ascended,1); /* has offered the Amulet */
|
||||
};
|
||||
|
||||
struct u_achieve {
|
||||
Bitfield(amulet,1); /* touched Amulet */
|
||||
Bitfield(bell,1); /* touched Bell */
|
||||
Bitfield(book,1); /* touched Book */
|
||||
Bitfield(menorah,1); /* touched Candelabrum */
|
||||
Bitfield(enter_gehennom,1); /* entered Gehennom (or Valley) by any means */
|
||||
Bitfield(ascended,1); /* not quite the same as u.uevent.ascended */
|
||||
Bitfield(mines_luckstone,1); /* got a luckstone at end of mines */
|
||||
Bitfield(finish_sokoban,1); /* obtained the sokoban prize */
|
||||
|
||||
Bitfield(killed_medusa,1);
|
||||
};
|
||||
|
||||
struct u_realtime {
|
||||
time_t realtime; /* actual playing time up until the last restore */
|
||||
time_t restored; /* time the game was started or restored */
|
||||
time_t endtime;
|
||||
};
|
||||
|
||||
|
||||
/* KMH, conduct --
|
||||
* These are voluntary challenges. Each field denotes the number of
|
||||
* times a challenge has been violated.
|
||||
@@ -72,6 +92,12 @@ struct u_conduct { /* number of times... */
|
||||
/* genocides already listed at end of game */
|
||||
};
|
||||
|
||||
struct u_roleplay {
|
||||
boolean blind; /* permanently blind */
|
||||
boolean nudist; /* has not worn any armor, ever */
|
||||
long numbones; /* # of bones files loaded */
|
||||
};
|
||||
|
||||
/*** Unified structure containing role information ***/
|
||||
struct Role {
|
||||
/*** Strings that name various things ***/
|
||||
@@ -306,9 +332,11 @@ struct you {
|
||||
/* 1 free bit! */
|
||||
|
||||
unsigned udg_cnt; /* how long you have been demigod */
|
||||
struct u_achieve uachieve; /* achievements */
|
||||
struct u_event uevent; /* certain events have happened */
|
||||
struct u_have uhave; /* you're carrying special objects */
|
||||
struct u_conduct uconduct; /* KMH, conduct */
|
||||
struct u_roleplay uroleplay;
|
||||
struct attribs acurr, /* your current attributes (eg. str)*/
|
||||
aexe, /* for gain/loss via "exercise" */
|
||||
abon, /* your bonus attributes (eg. str) */
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
#define Blinded u.uprops[BLINDED].intrinsic
|
||||
#define Blindfolded (ublindf && ublindf->otyp != LENSES)
|
||||
/* ...means blind because of a cover */
|
||||
#define Blind ((Blinded || Blindfolded || !haseyes(youmonst.data)) && \
|
||||
#define Blind ((u.uroleplay.blind || Blinded || Blindfolded || !haseyes(youmonst.data)) && \
|
||||
!(ublindf && ublindf->oartifact == ART_EYES_OF_THE_OVERWORLD))
|
||||
/* ...the Eyes operate even when you really are blind
|
||||
or don't have any eyes */
|
||||
@@ -286,7 +286,35 @@
|
||||
* 2. it doesn't leave a mark. Marks include destruction of, or
|
||||
* damage to, an internal organ (including the brain),
|
||||
* lacerations, bruises, crushed body parts, bleeding.
|
||||
*
|
||||
* The following were evaluated and determined _NOT_ to be
|
||||
* susceptable to Half_physical_damage protection:
|
||||
* Being caught in a fireball [fire damage]
|
||||
* Sitting in lava [lava damage]
|
||||
* Thrown potion (acid) [acid damage]
|
||||
* Splattered burning oil from thrown potion [fire damage]
|
||||
* Mixing water and acid [acid damage]
|
||||
* Molten lava (entering or being splashed) [lava damage]
|
||||
* boiling water from a sink [fire damage]
|
||||
* Fire traps [fire damage]
|
||||
* Scrolls of fire (confused and otherwise) [fire damage]
|
||||
* Alchemical explosion [not physical]
|
||||
* System shock [shock damage]
|
||||
* Bag of holding explosion [magical]
|
||||
* Being undead-turned by your god [magical]
|
||||
* Level-drain [magical]
|
||||
* Magical explosion of a magic trap [magical]
|
||||
* Sitting on a throne with a bad effect [magical]
|
||||
* Contaminated water from a sink [poison/sickness]
|
||||
* Contact-poisoned spellbooks [poison/sickness]
|
||||
* Eating acidic/poisonous/mildly-old corpses [poison/sickness]
|
||||
* Eating a poisoned weapon while polyselfed [poison/sickness]
|
||||
* Engulfing a zombie or mummy (AT_ENGL in hmonas) [poison/sickness]
|
||||
* Quaffed potions of sickness, lit oil, acid [poison/sickness]
|
||||
* Pyrolisks' fiery gaze [fire damage]
|
||||
* Any passive attack [most don't qualify]
|
||||
*/
|
||||
|
||||
#define HHalf_physical_damage u.uprops[HALF_PHDAM].intrinsic
|
||||
#define EHalf_physical_damage u.uprops[HALF_PHDAM].extrinsic
|
||||
#define Half_physical_damage (HHalf_physical_damage || EHalf_physical_damage)
|
||||
|
||||
@@ -292,8 +292,10 @@ boolean resuming;
|
||||
}
|
||||
restore_attrib();
|
||||
/* underwater and waterlevel vision are done here */
|
||||
if (Is_waterlevel(&u.uz))
|
||||
if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz))
|
||||
movebubbles();
|
||||
else if (Is_firelevel(&u.uz))
|
||||
fumaroles();
|
||||
else if (Underwater)
|
||||
under_water(0);
|
||||
/* vision while buried done here */
|
||||
@@ -533,6 +535,13 @@ newgame()
|
||||
#endif
|
||||
program_state.something_worth_saving++; /* useful data now exists */
|
||||
|
||||
urealtime.realtime = (time_t)0L;
|
||||
#if defined(BSD) && !defined(POSIX_TYPES)
|
||||
(void) time((long *)&urealtime.restored);
|
||||
#else
|
||||
(void) time(&urealtime.restored);
|
||||
#endif
|
||||
|
||||
/* Success! */
|
||||
welcome(TRUE);
|
||||
return;
|
||||
|
||||
433
src/apply.c
433
src/apply.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 apply.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 apply.c $Date: 2012/05/01 02:22:32 $ $Revision: 1.168 $ */
|
||||
/* NetHack 3.5 apply.c $NHDT-Date: 1426465431 2015/03/16 00:23:51 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.173 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -20,6 +19,7 @@ STATIC_DCL void FDECL(use_candelabrum, (struct obj *));
|
||||
STATIC_DCL void FDECL(use_candle, (struct obj **));
|
||||
STATIC_DCL void FDECL(use_lamp, (struct obj *));
|
||||
STATIC_DCL void FDECL(light_cocktail, (struct obj *));
|
||||
STATIC_PTR void FDECL(display_jump_positions, (int));
|
||||
STATIC_DCL void FDECL(use_tinning_kit, (struct obj *));
|
||||
STATIC_DCL void FDECL(use_figurine, (struct obj **));
|
||||
STATIC_DCL void FDECL(use_grease, (struct obj *));
|
||||
@@ -27,6 +27,7 @@ STATIC_DCL void FDECL(use_trap, (struct obj *));
|
||||
STATIC_DCL void FDECL(use_stone, (struct obj *));
|
||||
STATIC_PTR int NDECL(set_trap); /* occupation callback */
|
||||
STATIC_DCL int FDECL(use_whip, (struct obj *));
|
||||
STATIC_PTR void FDECL(display_polearm_positions, (int));
|
||||
STATIC_DCL int FDECL(use_pole, (struct obj *));
|
||||
STATIC_DCL int FDECL(use_cream_pie, (struct obj *));
|
||||
STATIC_DCL int FDECL(use_grapple, (struct obj *));
|
||||
@@ -35,6 +36,8 @@ STATIC_DCL boolean FDECL(figurine_location_checks,
|
||||
(struct obj *, coord *, BOOLEAN_P));
|
||||
STATIC_DCL void FDECL(add_class, (char *, CHAR_P));
|
||||
STATIC_DCL void FDECL(setapplyclasses, (char *));
|
||||
STATIC_DCL boolean FDECL(is_valid_jump_pos, (int, int, int, BOOLEAN_P));
|
||||
STATIC_DCL boolean FDECL(find_poleable_mon, (coord *, int, int));
|
||||
|
||||
#ifdef AMIGA
|
||||
void FDECL( amii_speaker, ( struct obj *, char *, int ) );
|
||||
@@ -736,8 +739,10 @@ struct obj *obj;
|
||||
pline("Yow! The %s stares back!", mirror);
|
||||
else
|
||||
pline("Yikes! You've frozen yourself!");
|
||||
if (!Hallucination || !rn2(4))
|
||||
if (!Hallucination || !rn2(4)) {
|
||||
nomul(-rnd(MAXULEV + 6 - u.ulevel));
|
||||
multi_reason = "gazing into a mirror";
|
||||
}
|
||||
nomovemsg = 0; /* default, "you can move again" */
|
||||
}
|
||||
} else if (youmonst.data->mlet == S_VAMPIRE)
|
||||
@@ -915,6 +920,7 @@ struct obj **optr;
|
||||
break;
|
||||
case 2: /* no explanation; it just happens... */
|
||||
nomovemsg = "";
|
||||
multi_reason = NULL;
|
||||
nomul(-rnd(2));
|
||||
break;
|
||||
}
|
||||
@@ -1357,6 +1363,54 @@ dojump()
|
||||
return jump(0);
|
||||
}
|
||||
|
||||
boolean
|
||||
is_valid_jump_pos(x,y, magic, showmsg)
|
||||
int x,y, magic;
|
||||
boolean showmsg;
|
||||
{
|
||||
if (!magic && !(HJumping & ~INTRINSIC) && !EJumping &&
|
||||
distu(x, y) != 5) {
|
||||
/* The Knight jumping restriction still applies when riding a
|
||||
* horse. After all, what shape is the knight piece in chess?
|
||||
*/
|
||||
if (showmsg) pline("Illegal move!");
|
||||
return FALSE;
|
||||
} else if (distu(x, y) > (magic ? 6+magic*3 : 9)) {
|
||||
if (showmsg) pline("Too far!");
|
||||
return FALSE;
|
||||
} else if (!cansee(x, y)) {
|
||||
if (showmsg) You("cannot see where to land!");
|
||||
return FALSE;
|
||||
} else if (!isok(x, y)) {
|
||||
if (showmsg) You("cannot jump there!");
|
||||
return FALSE;
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int jumping_is_magic;
|
||||
|
||||
void
|
||||
display_jump_positions(state)
|
||||
int state;
|
||||
{
|
||||
if (state == 0) {
|
||||
tmp_at(DISP_BEAM, cmap_to_glyph(S_flashbeam));
|
||||
} else if (state == 1) {
|
||||
int x,y, dx, dy;
|
||||
for (dx = -4; dx <= 4; dx++)
|
||||
for (dy = -4; dy <= 4; dy++) {
|
||||
x = dx + (int)u.ux;
|
||||
y = dy + (int)u.uy;
|
||||
if (isok(x,y) && ACCESSIBLE(levl[x][y].typ) &&
|
||||
is_valid_jump_pos(x,y, jumping_is_magic, FALSE))
|
||||
tmp_at(x,y);
|
||||
}
|
||||
} else {
|
||||
tmp_at(DISP_END, 0);
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
jump(magic)
|
||||
int magic; /* 0=Physical, otherwise skill level */
|
||||
@@ -1436,24 +1490,12 @@ int magic; /* 0=Physical, otherwise skill level */
|
||||
pline("Where do you want to jump?");
|
||||
cc.x = u.ux;
|
||||
cc.y = u.uy;
|
||||
jumping_is_magic = magic;
|
||||
getpos_sethilite(display_jump_positions);
|
||||
if (getpos(&cc, TRUE, "the desired position") < 0)
|
||||
return 0; /* user pressed ESC */
|
||||
if (!magic && !(HJumping & ~INTRINSIC) && !EJumping &&
|
||||
distu(cc.x, cc.y) != 5) {
|
||||
/* The Knight jumping restriction still applies when riding a
|
||||
* horse. After all, what shape is the knight piece in chess?
|
||||
*/
|
||||
pline("Illegal move!");
|
||||
return 0;
|
||||
} else if (distu(cc.x, cc.y) > (magic ? 6+magic*3 : 9)) {
|
||||
pline("Too far!");
|
||||
return 0;
|
||||
} else if (!cansee(cc.x, cc.y)) {
|
||||
You("cannot see where to land!");
|
||||
return 0;
|
||||
} else if (!isok(cc.x, cc.y)) {
|
||||
You("cannot jump there!");
|
||||
return 0;
|
||||
if (!is_valid_jump_pos(cc.x, cc.y, magic, TRUE)) {
|
||||
return 0;
|
||||
} else {
|
||||
coord uc;
|
||||
int range, temp;
|
||||
@@ -1508,6 +1550,7 @@ int magic; /* 0=Physical, otherwise skill level */
|
||||
teleds(cc.x, cc.y, TRUE);
|
||||
sokoban_guilt();
|
||||
nomul(-1);
|
||||
multi_reason = "jumping around";
|
||||
nomovemsg = "";
|
||||
morehungry(rnd(25));
|
||||
return 1;
|
||||
@@ -1770,7 +1813,269 @@ long timeout;
|
||||
char monnambuf[BUFSZ], carriedby[BUFSZ];
|
||||
|
||||
if (!figurine) {
|
||||
debugpline("null figurine in fig_transform()");
|
||||
nomovemsg = "";
|
||||
morehungry(rnd(25));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
boolean
|
||||
tinnable(corpse)
|
||||
struct obj *corpse;
|
||||
{
|
||||
if (corpse->oeaten) return 0;
|
||||
if (!mons[corpse->corpsenm].cnutrit) return 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
use_tinning_kit(obj)
|
||||
register struct obj *obj;
|
||||
{
|
||||
register struct obj *corpse, *can;
|
||||
|
||||
/* This takes only 1 move. If this is to be changed to take many
|
||||
* moves, we've got to deal with decaying corpses...
|
||||
*/
|
||||
if (obj->spe <= 0) {
|
||||
You("seem to be out of tins.");
|
||||
return;
|
||||
}
|
||||
if (!(corpse = floorfood("tin", 2))) return;
|
||||
if (corpse->oeaten) {
|
||||
You("cannot tin %s which is partly eaten.",something);
|
||||
return;
|
||||
}
|
||||
if (touch_petrifies(&mons[corpse->corpsenm])
|
||||
&& !Stone_resistance && !uarmg) {
|
||||
char kbuf[BUFSZ];
|
||||
|
||||
if (poly_when_stoned(youmonst.data))
|
||||
You("tin %s without wearing gloves.",
|
||||
an(mons[corpse->corpsenm].mname));
|
||||
else {
|
||||
pline("Tinning %s without wearing gloves is a fatal mistake...",
|
||||
an(mons[corpse->corpsenm].mname));
|
||||
Sprintf(kbuf, "trying to tin %s without gloves",
|
||||
an(mons[corpse->corpsenm].mname));
|
||||
}
|
||||
instapetrify(kbuf);
|
||||
}
|
||||
if (is_rider(&mons[corpse->corpsenm])) {
|
||||
if (revive_corpse(corpse))
|
||||
verbalize("Yes... But War does not preserve its enemies...");
|
||||
else
|
||||
pline_The("corpse evades your grasp.");
|
||||
return;
|
||||
}
|
||||
if (mons[corpse->corpsenm].cnutrit == 0) {
|
||||
pline("That's too insubstantial to tin.");
|
||||
return;
|
||||
}
|
||||
consume_obj_charge(obj, TRUE);
|
||||
|
||||
if ((can = mksobj(TIN, FALSE, FALSE)) != 0) {
|
||||
static const char you_buy_it[] = "You tin it, you bought it!";
|
||||
|
||||
can->corpsenm = corpse->corpsenm;
|
||||
can->cursed = obj->cursed;
|
||||
can->blessed = obj->blessed;
|
||||
can->owt = weight(can);
|
||||
can->known = 1;
|
||||
/* Mark tinned tins. No spinach allowed... */
|
||||
set_tin_variety(can, HOMEMADE_TIN);
|
||||
if (carried(corpse)) {
|
||||
if (corpse->unpaid)
|
||||
verbalize(you_buy_it);
|
||||
useup(corpse);
|
||||
} else {
|
||||
if (costly_spot(corpse->ox, corpse->oy) && !corpse->no_charge)
|
||||
verbalize(you_buy_it);
|
||||
useupf(corpse, 1L);
|
||||
}
|
||||
can = hold_another_object(can, "You make, but cannot pick up, %s.",
|
||||
doname(can), (const char *)0);
|
||||
} else impossible("Tinning failed.");
|
||||
}
|
||||
|
||||
void
|
||||
use_unicorn_horn(obj)
|
||||
struct obj *obj;
|
||||
{
|
||||
#define PROP_COUNT 6 /* number of properties we're dealing with */
|
||||
#define ATTR_COUNT (A_MAX*3) /* number of attribute points we might fix */
|
||||
int idx, val, val_limit,
|
||||
trouble_count, unfixable_trbl, did_prop, did_attr;
|
||||
int trouble_list[PROP_COUNT + ATTR_COUNT];
|
||||
|
||||
if (obj && obj->cursed) {
|
||||
long lcount = (long) rnd(100);
|
||||
|
||||
switch (rn2(6)) {
|
||||
case 0: make_sick((Sick & TIMEOUT) ? (Sick & TIMEOUT) / 3L + 1L :
|
||||
(long)rn1(ACURR(A_CON),20),
|
||||
xname(obj), TRUE, SICK_NONVOMITABLE);
|
||||
break;
|
||||
case 1: make_blinded((Blinded & TIMEOUT) + lcount, TRUE);
|
||||
break;
|
||||
case 2: if (!Confusion)
|
||||
You("suddenly feel %s.",
|
||||
Hallucination ? "trippy" : "confused");
|
||||
make_confused((HConfusion & TIMEOUT) + lcount, TRUE);
|
||||
break;
|
||||
case 3: make_stunned((HStun & TIMEOUT) + lcount, TRUE);
|
||||
break;
|
||||
case 4: (void) adjattrib(rn2(A_MAX), -1, FALSE);
|
||||
break;
|
||||
case 5: (void) make_hallucinated((HHallucination & TIMEOUT)
|
||||
+ lcount, TRUE, 0L);
|
||||
break;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Entries in the trouble list use a very simple encoding scheme.
|
||||
*/
|
||||
#define prop2trbl(X) ((X) + A_MAX)
|
||||
#define attr2trbl(Y) (Y)
|
||||
#define prop_trouble(X) trouble_list[trouble_count++] = prop2trbl(X)
|
||||
#define attr_trouble(Y) trouble_list[trouble_count++] = attr2trbl(Y)
|
||||
#define TimedTrouble(P) (((P) && !((P) & ~TIMEOUT)) ? ((P) & TIMEOUT) : 0L)
|
||||
|
||||
trouble_count = unfixable_trbl = did_prop = did_attr = 0;
|
||||
|
||||
/* collect property troubles */
|
||||
if (TimedTrouble(Sick)) prop_trouble(SICK);
|
||||
if (TimedTrouble(Blinded) > (long)u.ucreamed &&
|
||||
!(u.uswallow &&
|
||||
attacktype_fordmg(u.ustuck->data, AT_ENGL, AD_BLND)))
|
||||
prop_trouble(BLINDED);
|
||||
if (TimedTrouble(HHallucination)) prop_trouble(HALLUC);
|
||||
if (TimedTrouble(Vomiting)) prop_trouble(VOMITING);
|
||||
if (TimedTrouble(HConfusion)) prop_trouble(CONFUSION);
|
||||
if (TimedTrouble(HStun)) prop_trouble(STUNNED);
|
||||
|
||||
unfixable_trbl = unfixable_trouble_count(TRUE);
|
||||
|
||||
/* collect attribute troubles */
|
||||
for (idx = 0; idx < A_MAX; idx++) {
|
||||
if (ABASE(idx) >= AMAX(idx)) continue;
|
||||
val_limit = AMAX(idx);
|
||||
/* don't recover strength lost from hunger */
|
||||
if (idx == A_STR && u.uhs >= WEAK) val_limit--;
|
||||
if (Fixed_abil) {
|
||||
/* potion/spell of restore ability override sustain ability
|
||||
intrinsic but unicorn horn usage doesn't */
|
||||
unfixable_trbl += val_limit - ABASE(idx);
|
||||
continue;
|
||||
}
|
||||
/* don't recover more than 3 points worth of any attribute */
|
||||
if (val_limit > ABASE(idx) + 3) val_limit = ABASE(idx) + 3;
|
||||
|
||||
for (val = ABASE(idx); val < val_limit; val++)
|
||||
attr_trouble(idx);
|
||||
/* keep track of unfixed trouble, for message adjustment below */
|
||||
unfixable_trbl += (AMAX(idx) - val_limit);
|
||||
}
|
||||
|
||||
if (trouble_count == 0) {
|
||||
pline1(nothing_happens);
|
||||
return;
|
||||
} else if (trouble_count > 1) { /* shuffle */
|
||||
int i, j, k;
|
||||
|
||||
for (i = trouble_count - 1; i > 0; i--)
|
||||
if ((j = rn2(i + 1)) != i) {
|
||||
k = trouble_list[j];
|
||||
trouble_list[j] = trouble_list[i];
|
||||
trouble_list[i] = k;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Chances for number of troubles to be fixed
|
||||
* 0 1 2 3 4 5 6 7
|
||||
* blessed: 22.7% 22.7% 19.5% 15.4% 10.7% 5.7% 2.6% 0.8%
|
||||
* uncursed: 35.4% 35.4% 22.9% 6.3% 0 0 0 0
|
||||
*/
|
||||
val_limit = rn2( d(2, (obj && obj->blessed) ? 4 : 2) );
|
||||
if (val_limit > trouble_count) val_limit = trouble_count;
|
||||
|
||||
/* fix [some of] the troubles */
|
||||
for (val = 0; val < val_limit; val++) {
|
||||
idx = trouble_list[val];
|
||||
|
||||
switch (idx) {
|
||||
case prop2trbl(SICK):
|
||||
make_sick(0L, (char *) 0, TRUE, SICK_ALL);
|
||||
did_prop++;
|
||||
break;
|
||||
case prop2trbl(BLINDED):
|
||||
make_blinded((long)u.ucreamed, TRUE);
|
||||
did_prop++;
|
||||
break;
|
||||
case prop2trbl(HALLUC):
|
||||
(void) make_hallucinated(0L, TRUE, 0L);
|
||||
did_prop++;
|
||||
break;
|
||||
case prop2trbl(VOMITING):
|
||||
make_vomiting(0L, TRUE);
|
||||
did_prop++;
|
||||
break;
|
||||
case prop2trbl(CONFUSION):
|
||||
make_confused(0L, TRUE);
|
||||
did_prop++;
|
||||
break;
|
||||
case prop2trbl(STUNNED):
|
||||
make_stunned(0L, TRUE);
|
||||
did_prop++;
|
||||
break;
|
||||
default:
|
||||
if (idx >= 0 && idx < A_MAX) {
|
||||
ABASE(idx) += 1;
|
||||
did_attr++;
|
||||
} else
|
||||
panic("use_unicorn_horn: bad trouble? (%d)", idx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (did_attr)
|
||||
pline("This makes you feel %s!",
|
||||
(did_prop + did_attr) == (trouble_count + unfixable_trbl) ?
|
||||
"great" : "better");
|
||||
else if (!did_prop)
|
||||
pline("Nothing seems to happen.");
|
||||
|
||||
context.botl = (did_attr || did_prop);
|
||||
#undef PROP_COUNT
|
||||
#undef ATTR_COUNT
|
||||
#undef prop2trbl
|
||||
#undef attr2trbl
|
||||
#undef prop_trouble
|
||||
#undef attr_trouble
|
||||
#undef TimedTrouble
|
||||
}
|
||||
|
||||
/*
|
||||
* Timer callback routine: turn figurine into monster
|
||||
*/
|
||||
void
|
||||
fig_transform(arg, timeout)
|
||||
anything *arg;
|
||||
long timeout;
|
||||
{
|
||||
struct obj *figurine = arg->a_obj;
|
||||
struct monst *mtmp;
|
||||
coord cc;
|
||||
boolean cansee_spot, silent, okay_spot;
|
||||
boolean redraw = FALSE;
|
||||
boolean suppress_see = FALSE;
|
||||
char monnambuf[BUFSZ], carriedby[BUFSZ];
|
||||
|
||||
if (!figurine) {
|
||||
debugpline0("null figurine in fig_transform()");
|
||||
return;
|
||||
}
|
||||
silent = (timeout != monstermoves); /* happened while away */
|
||||
@@ -2531,6 +2836,54 @@ static const char
|
||||
cant_see_spot[] = "won't hit anything if you can't see that spot.",
|
||||
cant_reach[] = "can't reach that spot from here.";
|
||||
|
||||
/* find pos of monster in range, if only one monster */
|
||||
boolean
|
||||
find_poleable_mon(pos, min_range, max_range)
|
||||
coord *pos;
|
||||
int min_range, max_range;
|
||||
{
|
||||
struct monst *mtmp;
|
||||
struct monst *selmon = NULL;
|
||||
for (mtmp = fmon; mtmp; mtmp = mtmp->nmon)
|
||||
if (mtmp && !DEADMONSTER(mtmp) && !mtmp->mtame &&
|
||||
cansee(mtmp->mx, mtmp->my) &&
|
||||
distu(mtmp->mx, mtmp->my) <= max_range &&
|
||||
distu(mtmp->mx, mtmp->my) >= min_range) {
|
||||
if (selmon) return FALSE;
|
||||
selmon = mtmp;
|
||||
}
|
||||
if (!selmon) return FALSE;
|
||||
pos->x = selmon->mx;
|
||||
pos->y = selmon->my;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
int polearm_range_min = -1;
|
||||
int polearm_range_max = -1;
|
||||
|
||||
void
|
||||
display_polearm_positions(state)
|
||||
int state;
|
||||
{
|
||||
if (state == 0) {
|
||||
tmp_at(DISP_BEAM, cmap_to_glyph(S_flashbeam));
|
||||
} else if (state == 1) {
|
||||
int x,y, dx,dy;
|
||||
for (dx = -4; dx <= 4; dx++)
|
||||
for (dy = -4; dy <= 4; dy++) {
|
||||
x = dx + (int)u.ux;
|
||||
y = dy + (int)u.uy;
|
||||
if (isok(x, y) && ACCESSIBLE(levl[x][y].typ) &&
|
||||
distu(x, y) >= polearm_range_min &&
|
||||
distu(x, y) <= polearm_range_max) {
|
||||
tmp_at(x, y);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
tmp_at(DISP_END, 0);
|
||||
}
|
||||
}
|
||||
|
||||
/* Distance attacks by pole-weapons */
|
||||
STATIC_OVL int
|
||||
use_pole(obj)
|
||||
@@ -2539,6 +2892,7 @@ use_pole(obj)
|
||||
int res = 0, typ, max_range, min_range, glyph;
|
||||
coord cc;
|
||||
struct monst *mtmp;
|
||||
struct monst *hitm = context.polearm.hitmon;
|
||||
|
||||
/* Are you allowed to use the pole? */
|
||||
if (u.uswallow) {
|
||||
@@ -2551,15 +2905,7 @@ use_pole(obj)
|
||||
}
|
||||
/* assert(obj == uwep); */
|
||||
|
||||
/* Prompt for a location */
|
||||
pline(where_to_hit);
|
||||
cc.x = u.ux;
|
||||
cc.y = u.uy;
|
||||
if (getpos(&cc, TRUE, "the spot to hit") < 0)
|
||||
return res; /* ESC; uses turn iff polearm became wielded */
|
||||
|
||||
glyph = glyph_at(cc.x, cc.y);
|
||||
/*
|
||||
/*
|
||||
* Calculate allowable range (pole's reach is always 2 steps):
|
||||
* unskilled and basic: orthogonal direction, 4..4;
|
||||
* skilled: as basic, plus knight's jump position, 4..5;
|
||||
@@ -2579,6 +2925,26 @@ use_pole(obj)
|
||||
if (typ == P_NONE || P_SKILL(typ) <= P_BASIC) max_range = 4;
|
||||
else if (P_SKILL(typ) == P_SKILLED) max_range = 5;
|
||||
else max_range = 8; /* (P_SKILL(typ) >= P_EXPERT) */
|
||||
|
||||
polearm_range_min = min_range;
|
||||
polearm_range_max = max_range;
|
||||
|
||||
/* Prompt for a location */
|
||||
pline(where_to_hit);
|
||||
cc.x = u.ux;
|
||||
cc.y = u.uy;
|
||||
if (!find_poleable_mon(&cc, min_range, max_range) &&
|
||||
hitm && !DEADMONSTER(hitm) && cansee(hitm->mx, hitm->my) &&
|
||||
distu(hitm->mx,hitm->my) <= max_range &&
|
||||
distu(hitm->mx,hitm->my) >= min_range) {
|
||||
cc.x = hitm->mx;
|
||||
cc.y = hitm->my;
|
||||
}
|
||||
getpos_sethilite(display_polearm_positions);
|
||||
if (getpos(&cc, TRUE, "the spot to hit") < 0)
|
||||
return res; /* ESC; uses turn iff polearm became wielded */
|
||||
|
||||
glyph = glyph_at(cc.x, cc.y);
|
||||
if (distu(cc.x, cc.y) > max_range) {
|
||||
pline("Too far!");
|
||||
return (res);
|
||||
@@ -2596,11 +2962,13 @@ use_pole(obj)
|
||||
return res;
|
||||
}
|
||||
|
||||
context.polearm.hitmon = NULL;
|
||||
/* Attack the monster there */
|
||||
bhitpos = cc;
|
||||
if ((mtmp = m_at(bhitpos.x, bhitpos.y)) != (struct monst *)0) {
|
||||
if (attack_checks(mtmp, uwep)) return res;
|
||||
if (overexertion()) return 1; /* burn nutrition; maybe pass out */
|
||||
context.polearm.hitmon = mtmp;
|
||||
check_caitiff(mtmp);
|
||||
notonhead = (bhitpos.x != mtmp->mx || bhitpos.y != mtmp->my);
|
||||
(void) thitmonst(mtmp, uwep);
|
||||
@@ -2828,6 +3196,7 @@ do_break_wand(obj)
|
||||
boolean fillmsg = FALSE;
|
||||
int expltype = EXPL_MAGICAL;
|
||||
char confirm[QBUFSZ], buf[BUFSZ];
|
||||
boolean is_fragile = (!strcmp(OBJ_DESCR(objects[obj->otyp]), "balsa"));
|
||||
|
||||
if (yn(safe_qbuf(confirm, "Are you really sure you want to break ", "?",
|
||||
obj, yname, ysimple_name, "the wand")) == 'n')
|
||||
@@ -2836,7 +3205,7 @@ do_break_wand(obj)
|
||||
if (nohands(youmonst.data)) {
|
||||
You_cant("break %s without hands!", yname(obj));
|
||||
return 0;
|
||||
} else if (ACURR(A_STR) < 10) {
|
||||
} else if (ACURR(A_STR) < (is_fragile ? 5 : 10)) {
|
||||
You("don't have the strength to break %s!", yname(obj));
|
||||
return 0;
|
||||
}
|
||||
@@ -2974,7 +3343,7 @@ do_break_wand(obj)
|
||||
/* if (context.botl) bot(); */
|
||||
}
|
||||
if (affects_objects && level.objects[x][y]) {
|
||||
(void) bhitpile(obj, bhito, x, y);
|
||||
(void) bhitpile(obj, bhito, x, y, 0);
|
||||
if (context.botl) bot(); /* potion effects */
|
||||
}
|
||||
} else {
|
||||
@@ -2991,7 +3360,7 @@ do_break_wand(obj)
|
||||
* since it's also used by retouch_equipment() for polyself.)
|
||||
*/
|
||||
if (affects_objects && level.objects[x][y]) {
|
||||
(void) bhitpile(obj, bhito, x, y);
|
||||
(void) bhitpile(obj, bhito, x, y, 0);
|
||||
if (context.botl) bot(); /* potion effects */
|
||||
}
|
||||
damage = zapyourself(obj, FALSE);
|
||||
|
||||
@@ -983,6 +983,7 @@ char *hittee; /* target's name: "you" or mon_nam(mdef) */
|
||||
resisted = TRUE;
|
||||
} else {
|
||||
nomul(-3);
|
||||
multi_reason = "being scared stiff";
|
||||
nomovemsg = "";
|
||||
if (magr && magr == u.ustuck && sticks(youmonst.data)) {
|
||||
u.ustuck = (struct monst *)0;
|
||||
|
||||
28
src/attrib.c
28
src/attrib.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 attrib.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 attrib.c $Date: 2011/10/01 00:25:55 $ $Revision: 1.30 $ */
|
||||
/* NetHack 3.5 attrib.c $NHDT-Date: 1426465433 2015/03/16 00:23:53 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.34 $ */
|
||||
/* Copyright 1988, 1989, 1990, 1992, M. Stephenson */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -347,7 +346,7 @@ exercise(i, inc_or_dec)
|
||||
int i;
|
||||
boolean inc_or_dec;
|
||||
{
|
||||
debugpline("Exercise:");
|
||||
debugpline0("Exercise:");
|
||||
if (i == A_INT || i == A_CHA) return; /* can't exercise these */
|
||||
|
||||
/* no physical exercise while polymorphed; the body's temporary */
|
||||
@@ -364,7 +363,7 @@ boolean inc_or_dec;
|
||||
* Note: *YES* ACURR is the right one to use.
|
||||
*/
|
||||
AEXE(i) += (inc_or_dec) ? (rn2(19) > ACURR(i)) : -rn2(2);
|
||||
debugpline("%s, %s AEXE = %d",
|
||||
debugpline3("%s, %s AEXE = %d",
|
||||
(i == A_STR) ? "Str" : (i == A_WIS) ? "Wis" :
|
||||
(i == A_DEX) ? "Dex" : "Con",
|
||||
(inc_or_dec) ? "inc" : "dec", AEXE(i));
|
||||
@@ -392,7 +391,7 @@ exerper()
|
||||
(u.uhunger > 50) ? HUNGRY :
|
||||
(u.uhunger > 0) ? WEAK : FAINTING;
|
||||
|
||||
debugpline("exerper: Hunger checks");
|
||||
debugpline0("exerper: Hunger checks");
|
||||
switch (hs) {
|
||||
case SATIATED: exercise(A_DEX, FALSE);
|
||||
if (Role_if(PM_MONK))
|
||||
@@ -408,7 +407,7 @@ exerper()
|
||||
}
|
||||
|
||||
/* Encumberance Checks */
|
||||
debugpline("exerper: Encumber checks");
|
||||
debugpline0("exerper: Encumber checks");
|
||||
switch (near_capacity()) {
|
||||
case MOD_ENCUMBER: exercise(A_STR, TRUE); break;
|
||||
case HVY_ENCUMBER: exercise(A_STR, TRUE);
|
||||
@@ -421,7 +420,7 @@ exerper()
|
||||
|
||||
/* status checks */
|
||||
if(!(moves % 5)) {
|
||||
debugpline("exerper: Status checks");
|
||||
debugpline0("exerper: Status checks");
|
||||
if ((HClairvoyant & (INTRINSIC|TIMEOUT)) &&
|
||||
!BClairvoyant) exercise(A_WIS, TRUE);
|
||||
if (HRegeneration) exercise(A_STR, TRUE);
|
||||
@@ -453,10 +452,10 @@ exerchk()
|
||||
exerper();
|
||||
|
||||
if(moves >= context.next_attrib_check)
|
||||
debugpline("exerchk: ready to test. multi = %d.", multi);
|
||||
debugpline1("exerchk: ready to test. multi = %d.", multi);
|
||||
/* Are we ready for a test? */
|
||||
if(moves >= context.next_attrib_check && !multi) {
|
||||
debugpline("exerchk: testing.");
|
||||
debugpline0("exerchk: testing.");
|
||||
/*
|
||||
* Law of diminishing returns (Part II):
|
||||
*
|
||||
@@ -483,7 +482,7 @@ exerchk()
|
||||
exercise/abuse gradually wears off without impact then */
|
||||
if (Upolyd && i != A_WIS) goto nextattrib;
|
||||
|
||||
debugpline("exerchk: testing %s (%d).",
|
||||
debugpline2("exerchk: testing %s (%d).",
|
||||
(i == A_STR) ? "Str" : (i == A_INT) ? "Int?" :
|
||||
(i == A_WIS) ? "Wis" : (i == A_DEX) ? "Dex" :
|
||||
(i == A_CON) ? "Con" : (i == A_CHA) ? "Cha?" : "???",
|
||||
@@ -497,9 +496,9 @@ exerchk()
|
||||
if (rn2(AVAL) > ((i != A_WIS) ? (abs(ax) * 2 / 3) : abs(ax)))
|
||||
goto nextattrib;
|
||||
|
||||
debugpline("exerchk: changing %d.", i);
|
||||
debugpline1("exerchk: changing %d.", i);
|
||||
if(adjattrib(i, mod_val, -1)) {
|
||||
debugpline("exerchk: changed %d.", i);
|
||||
debugpline1("exerchk: changed %d.", i);
|
||||
/* if you actually changed an attrib - zero accumulation */
|
||||
AEXE(i) = ax = 0;
|
||||
/* then print an explanation */
|
||||
@@ -513,7 +512,8 @@ exerchk()
|
||||
AEXE(i) = (abs(ax) / 2) * mod_val;
|
||||
}
|
||||
context.next_attrib_check += rn1(200,800);
|
||||
debugpline("exerchk: next check at %ld.", context.next_attrib_check);
|
||||
debugpline1("exerchk: next check at %ld.",
|
||||
context.next_attrib_check);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -690,6 +690,8 @@ int propidx; /* special cases can have negative values */
|
||||
Sprintf(buf, because_of,
|
||||
obj->oartifact ? bare_artifactname(obj) :
|
||||
ysimple_name(obj));
|
||||
else if (propidx == BLINDED && u.uroleplay.blind)
|
||||
Sprintf(buf, " from birth");
|
||||
else if (propidx == BLINDED && Blindfolded_only)
|
||||
Sprintf(buf, because_of, ysimple_name(ublindf));
|
||||
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 bones.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 bones.c $Date: 2012/02/16 02:40:24 $ $Revision: 1.39 $ */
|
||||
/* NetHack 3.5 bones.c $NHDT-Date: 1426465433 2015/03/16 00:23:53 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.45 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985,1993. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -287,6 +286,7 @@ can_make_bones()
|
||||
{
|
||||
register struct trap *ttmp;
|
||||
|
||||
if (!flags.bones) return FALSE;
|
||||
if (ledger_no(&u.uz) <= 0 || ledger_no(&u.uz) > maxledgerno())
|
||||
return FALSE;
|
||||
if (no_bones_level(&u.uz))
|
||||
@@ -533,6 +533,7 @@ getbones()
|
||||
if(discover) /* save bones files for real games */
|
||||
return(0);
|
||||
|
||||
if (!flags.bones) return (0);
|
||||
/* wizard check added by GAN 02/05/87 */
|
||||
if(rn2(3) /* only once in three times do we find bones */
|
||||
&& !wizard
|
||||
@@ -582,7 +583,7 @@ getbones()
|
||||
if (has_mname(mtmp)) sanitize_name(MNAME(mtmp));
|
||||
if (mtmp->mhpmax == DEFUNCT_MONSTER) {
|
||||
if (wizard)
|
||||
debugpline("Removing defunct monster %s from bones.",
|
||||
debugpline1("Removing defunct monster %s from bones.",
|
||||
mtmp->data->mname);
|
||||
mongone(mtmp);
|
||||
} else
|
||||
@@ -595,6 +596,7 @@ getbones()
|
||||
}
|
||||
(void) nhclose(fd);
|
||||
sanitize_engravings();
|
||||
u.uroleplay.numbones++;
|
||||
|
||||
if(wizard) {
|
||||
if(yn("Unlink bones?") == 'n') {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 botl.c $NHDT-Date: 1425083082 2015/02/28 00:24:42 $ $NHDT-Branch: (no branch, rebasing scshunt-unconditionals) $:$NHDT-Revision: 1.38 $ */
|
||||
/* NetHack 3.5 botl.c $Date: 2012/01/10 17:47:19 $ $Revision: 1.36 $ */
|
||||
/* NetHack 3.5 botl.c $NHDT-Date: 1425083082 2015/02/28 00:24:42 $ $NHDT-Branch: master $:$NHDT-Revision: 1.38 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
|
||||
24
src/cmd.c
24
src/cmd.c
@@ -509,6 +509,16 @@ enter_explore_mode(VOID_ARGS)
|
||||
} else if (discover) {
|
||||
You("are already in explore mode.");
|
||||
} else {
|
||||
#ifdef SYSCF
|
||||
# if defined(UNIX)
|
||||
if (!sysopt.explorers ||
|
||||
!sysopt.explorers[0] ||
|
||||
!check_user_string(sysopt.explorers)) {
|
||||
You("cannot access explore mode.");
|
||||
return 0;
|
||||
}
|
||||
# endif
|
||||
#endif
|
||||
pline(
|
||||
"Beware! From explore mode there will be no return to normal game.");
|
||||
if (paranoid_query(ParanoidQuit,
|
||||
@@ -997,11 +1007,8 @@ wiz_levltyp_legend(VOID_ARGS)
|
||||
STATIC_PTR int
|
||||
wiz_smell(VOID_ARGS)
|
||||
{
|
||||
char out_str[BUFSZ];
|
||||
struct permonst *pm = 0;
|
||||
int ans = 0;
|
||||
int mndx; /* monster index */
|
||||
int found; /* count of matching mndxs found */
|
||||
coord cc; /* screen pos of unknown glyph */
|
||||
int glyph; /* glyph at selected position */
|
||||
|
||||
@@ -1015,11 +1022,6 @@ wiz_smell(VOID_ARGS)
|
||||
|
||||
pline("You can move the cursor to a monster that you want to smell.");
|
||||
do {
|
||||
/* Reset some variables. */
|
||||
pm = (struct permonst *)0;
|
||||
found = 0;
|
||||
out_str[0] = '\0';
|
||||
|
||||
pline("Pick a monster to smell.");
|
||||
ans = getpos(&cc, TRUE, "a monster");
|
||||
if (ans < 0 || cc.x < 0) {
|
||||
@@ -2246,6 +2248,9 @@ int final;
|
||||
en_win = create_nhwindow(NHW_MENU);
|
||||
putstr(en_win, 0, "Voluntary challenges:");
|
||||
|
||||
if (u.uroleplay.blind) you_have_been("blind from birth");
|
||||
if (u.uroleplay.nudist) you_have_been("faithfully nudist");
|
||||
|
||||
if (!u.uconduct.food)
|
||||
enl_msg(You_, "have gone", "went", " without food", "");
|
||||
/* But beverages are okay */
|
||||
@@ -2411,7 +2416,7 @@ static const struct func_tab cmdlist[] = {
|
||||
{'W', FALSE, dowear},
|
||||
{M('w'), FALSE, dowipe},
|
||||
{'x', FALSE, doswapweapon},
|
||||
{'X', TRUE, enter_explore_mode},
|
||||
{'X', FALSE, dotwoweapon},
|
||||
/* 'y', 'Y' : go nw */
|
||||
{'z', FALSE, dozap},
|
||||
{'Z', TRUE, docast},
|
||||
@@ -2456,6 +2461,7 @@ struct ext_func_tab extcmdlist[] = {
|
||||
{"dip", "dip an object into something", dodip, FALSE},
|
||||
{"enhance", "advance or check weapon and spell skills",
|
||||
enhance_weapon_skill, TRUE},
|
||||
{"exploremode", "enter explore mode", enter_explore_mode, TRUE},
|
||||
{"force", "force a lock", doforce, FALSE},
|
||||
{"invoke", "invoke an object's powers", doinvoke, TRUE},
|
||||
{"jump", "jump to a location", dojump, FALSE},
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 dbridge.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 dbridge.c $Date: 2012/02/01 00:49:16 $ $Revision: 1.21 $ */
|
||||
/* NetHack 3.5 dbridge.c $NHDT-Date: 1426465433 2015/03/16 00:23:53 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.23 $ */
|
||||
/* Copyright (c) 1989 by Jean-Christophe Collet */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -42,9 +41,11 @@ int x,y;
|
||||
|
||||
if (!isok(x,y)) return FALSE;
|
||||
ltyp = levl[x][y].typ;
|
||||
if (ltyp == POOL || ltyp == MOAT || ltyp == WATER) return TRUE;
|
||||
if (ltyp == DRAWBRIDGE_UP &&
|
||||
(levl[x][y].drawbridgemask & DB_UNDER) == DB_MOAT) return TRUE;
|
||||
/* The ltyp == MOAT is not redundant with is_moat, because the
|
||||
* Juiblex level does not have moats, although it has MOATs. There
|
||||
* is probably a better way to express this. */
|
||||
if (ltyp == POOL || ltyp == MOAT || ltyp == WATER || is_moat(x, y))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@@ -86,6 +87,21 @@ int x,y;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
boolean
|
||||
is_moat(x,y)
|
||||
int x, y;
|
||||
{
|
||||
schar ltyp;
|
||||
|
||||
if (!isok(x, y)) return FALSE;
|
||||
ltyp = levl[x][y].typ;
|
||||
if (!Is_juiblex_level(&u.uz) &&
|
||||
(ltyp == MOAT || (ltyp == DRAWBRIDGE_UP &&
|
||||
(levl[x][y].drawbridgemask & DB_UNDER) == DB_MOAT)))
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/*
|
||||
* We want to know whether a wall (or a door) is the portcullis (passageway)
|
||||
* of an eventual drawbridge.
|
||||
@@ -250,7 +266,7 @@ int x, y;
|
||||
(occupants[entitycnt].ex == x) &&
|
||||
(occupants[entitycnt].ey == y))
|
||||
break;
|
||||
debugpline("entitycnt = %d", entitycnt);
|
||||
debugpline1("entitycnt = %d", entitycnt);
|
||||
#ifdef D_DEBUG
|
||||
wait_synch();
|
||||
#endif
|
||||
@@ -450,7 +466,7 @@ boolean chunks;
|
||||
int misses;
|
||||
|
||||
if (chunks)
|
||||
debugpline("Do chunks miss?");
|
||||
debugpline0("Do chunks miss?");
|
||||
if (automiss(etmp))
|
||||
return(TRUE);
|
||||
|
||||
@@ -470,7 +486,7 @@ boolean chunks;
|
||||
if (is_db_wall(etmp->ex, etmp->ey))
|
||||
misses -= 3; /* less airspace */
|
||||
|
||||
debugpline("Miss chance = %d (out of 8)", misses);
|
||||
debugpline1("Miss chance = %d (out of 8)", misses);
|
||||
|
||||
return((boolean)((misses >= rnd(8))? TRUE : FALSE));
|
||||
}
|
||||
@@ -499,7 +515,8 @@ struct entity *etmp;
|
||||
if (is_db_wall(etmp->ex, etmp->ey))
|
||||
tmp -= 2; /* less room to maneuver */
|
||||
|
||||
debugpline("%s to jump (%d chances in 10)", E_phrase(etmp, "try"), tmp);
|
||||
debugpline2("%s to jump (%d chances in 10)",
|
||||
E_phrase(etmp, "try"), tmp);
|
||||
return((boolean)((tmp >= rnd(10))? TRUE : FALSE));
|
||||
}
|
||||
|
||||
@@ -533,12 +550,11 @@ struct entity *etmp;
|
||||
pline_The("portcullis misses %s!",
|
||||
e_nam(etmp));
|
||||
else
|
||||
debugpline("The drawbridge misses %s!",
|
||||
e_nam(etmp));
|
||||
debugpline1("The drawbridge misses %s!", e_nam(etmp));
|
||||
if (e_survives_at(etmp, oldx, oldy))
|
||||
return;
|
||||
else {
|
||||
debugpline("Mon can't survive here");
|
||||
debugpline0("Mon can't survive here");
|
||||
if (at_portcullis)
|
||||
must_jump = TRUE;
|
||||
else
|
||||
@@ -557,7 +573,7 @@ struct entity *etmp;
|
||||
if (at_portcullis) {
|
||||
if (e_jumps(etmp)) {
|
||||
relocates = TRUE;
|
||||
debugpline("Jump succeeds!");
|
||||
debugpline0("Jump succeeds!");
|
||||
} else {
|
||||
if (e_inview)
|
||||
pline("%s crushed by the falling portcullis!",
|
||||
@@ -570,7 +586,7 @@ struct entity *etmp;
|
||||
}
|
||||
} else { /* tries to jump off bridge to original square */
|
||||
relocates = !e_jumps(etmp);
|
||||
debugpline("Jump %s!", (relocates)? "fails" : "succeeds");
|
||||
debugpline1("Jump %s!", (relocates)? "fails" : "succeeds");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -580,13 +596,13 @@ struct entity *etmp;
|
||||
* would be inaccessible (i.e. etmp started on drawbridge square) or
|
||||
* unnecessary (i.e. etmp started here) in such a situation.
|
||||
*/
|
||||
debugpline("Doing relocation.");
|
||||
debugpline0("Doing relocation.");
|
||||
newx = oldx;
|
||||
newy = oldy;
|
||||
(void)find_drawbridge(&newx, &newy);
|
||||
if ((newx == oldx) && (newy == oldy))
|
||||
get_wall_for_db(&newx, &newy);
|
||||
debugpline("Checking new square for occupancy.");
|
||||
debugpline0("Checking new square for occupancy.");
|
||||
if (relocates && (e_at(newx, newy))) {
|
||||
|
||||
/*
|
||||
@@ -597,22 +613,22 @@ struct entity *etmp;
|
||||
struct entity *other;
|
||||
|
||||
other = e_at(newx, newy);
|
||||
debugpline("New square is occupied by %s", e_nam(other));
|
||||
debugpline1("New square is occupied by %s", e_nam(other));
|
||||
if (e_survives_at(other, newx, newy) && automiss(other)) {
|
||||
relocates = FALSE; /* "other" won't budge */
|
||||
debugpline("%s suicide.", E_phrase(etmp, "commit"));
|
||||
debugpline1("%s suicide.", E_phrase(etmp, "commit"));
|
||||
} else {
|
||||
|
||||
debugpline("Handling %s", e_nam(other));
|
||||
debugpline1("Handling %s", e_nam(other));
|
||||
while ((e_at(newx, newy) != 0) &&
|
||||
(e_at(newx, newy) != etmp))
|
||||
do_entity(other);
|
||||
debugpline("Checking existence of %s", e_nam(etmp));
|
||||
debugpline1("Checking existence of %s", e_nam(etmp));
|
||||
#ifdef D_DEBUG
|
||||
wait_synch();
|
||||
#endif
|
||||
if (e_at(oldx, oldy) != etmp) {
|
||||
debugpline("%s moved or died in recursion somewhere",
|
||||
debugpline1("%s moved or died in recursion somewhere",
|
||||
E_phrase(etmp, "have"));
|
||||
#ifdef D_DEBUG
|
||||
wait_synch();
|
||||
@@ -622,7 +638,7 @@ struct entity *etmp;
|
||||
}
|
||||
}
|
||||
if (relocates && !e_at(newx, newy)) {/* if e_at() entity = worm tail */
|
||||
debugpline("Moving %s", e_nam(etmp));
|
||||
debugpline1("Moving %s", e_nam(etmp));
|
||||
if (!is_u(etmp)) {
|
||||
remove_monster(etmp->ex, etmp->ey);
|
||||
place_monster(etmp->emon, newx, newy);
|
||||
@@ -635,12 +651,12 @@ struct entity *etmp;
|
||||
etmp->ey = newy;
|
||||
e_inview = e_canseemon(etmp);
|
||||
}
|
||||
debugpline("Final disposition of %s", e_nam(etmp));
|
||||
debugpline1("Final disposition of %s", e_nam(etmp));
|
||||
#ifdef D_DEBUG
|
||||
wait_synch();
|
||||
#endif
|
||||
if (is_db_wall(etmp->ex, etmp->ey)) {
|
||||
debugpline("%s in portcullis chamber", E_phrase(etmp, "are"));
|
||||
debugpline1("%s in portcullis chamber", E_phrase(etmp, "are"));
|
||||
#ifdef D_DEBUG
|
||||
wait_synch();
|
||||
#endif
|
||||
@@ -661,9 +677,9 @@ struct entity *etmp;
|
||||
e_died(etmp, 0, CRUSHING); /* no message */
|
||||
return;
|
||||
}
|
||||
debugpline("%s in here", E_phrase(etmp, "survive"));
|
||||
debugpline1("%s in here", E_phrase(etmp, "survive"));
|
||||
} else {
|
||||
debugpline("%s on drawbridge square", E_phrase(etmp, "are"));
|
||||
debugpline1("%s on drawbridge square", E_phrase(etmp, "are"));
|
||||
if (is_pool(etmp->ex, etmp->ey) && !e_inview)
|
||||
if (!Deaf)
|
||||
You_hear("a splash.");
|
||||
@@ -674,7 +690,8 @@ struct entity *etmp;
|
||||
E_phrase(etmp, "fall"));
|
||||
return;
|
||||
}
|
||||
debugpline("%s cannot survive on the drawbridge square",E_phrase(etmp, NULL));
|
||||
debugpline1("%s cannot survive on the drawbridge square",
|
||||
E_phrase(etmp, NULL));
|
||||
if (is_pool(etmp->ex, etmp->ey) || is_lava(etmp->ex, etmp->ey))
|
||||
if (e_inview && !is_u(etmp)) {
|
||||
/* drown() will supply msgs if nec. */
|
||||
@@ -890,7 +907,7 @@ int x,y;
|
||||
if (etmp1->edata) {
|
||||
e_inview = e_canseemon(etmp1);
|
||||
if (e_missed(etmp1, TRUE)) {
|
||||
debugpline("%s spared!", E_phrase(etmp1, "are"));
|
||||
debugpline1("%s spared!", E_phrase(etmp1, "are"));
|
||||
/* if there is water or lava here, fall in now */
|
||||
if (is_u(etmp1))
|
||||
spoteffects(FALSE);
|
||||
@@ -908,7 +925,7 @@ int x,y;
|
||||
if (!Deaf && !is_u(etmp1) && !is_pool(x,y))
|
||||
You_hear("a crushing sound.");
|
||||
else
|
||||
debugpline("%s from shrapnel",
|
||||
debugpline1("%s from shrapnel",
|
||||
E_phrase(etmp1, "die"));
|
||||
}
|
||||
killer.format = KILLED_BY_AN;
|
||||
|
||||
16
src/decl.c
16
src/decl.c
@@ -21,6 +21,7 @@ char *catmore = 0; /* default pager */
|
||||
NEARDATA int bases[MAXOCLASSES] = DUMMY;
|
||||
|
||||
NEARDATA int multi = 0;
|
||||
const char *multi_reason = NULL;
|
||||
NEARDATA int nroom = 0;
|
||||
NEARDATA int nsubroom = 0;
|
||||
NEARDATA int occtime = 0;
|
||||
@@ -102,9 +103,9 @@ NEARDATA struct multishot m_shot = { 0, 0, STRANGE_OBJECT, FALSE };
|
||||
|
||||
NEARDATA dungeon dungeons[MAXDUNGEON]; /* ini'ed by init_dungeon() */
|
||||
NEARDATA s_level *sp_levchn;
|
||||
NEARDATA stairway upstair = { 0, 0 }, dnstair = { 0, 0 };
|
||||
NEARDATA stairway upladder = { 0, 0 }, dnladder = { 0, 0 };
|
||||
NEARDATA stairway sstairs = { 0, 0 };
|
||||
NEARDATA stairway upstair = { 0, 0, { 0,0 }, 0 }, dnstair = { 0, 0, { 0,0 }, 0 };
|
||||
NEARDATA stairway upladder = { 0, 0, { 0,0 }, 0 }, dnladder = { 0, 0, { 0,0 }, 0 };
|
||||
NEARDATA stairway sstairs = { 0, 0, { 0,0 }, 0 };
|
||||
NEARDATA dest_area updest = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
NEARDATA dest_area dndest = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
NEARDATA coord inv_pos = { 0, 0 };
|
||||
@@ -136,6 +137,7 @@ NEARDATA struct sysflag sysflags = DUMMY;
|
||||
NEARDATA struct instance_flags iflags = DUMMY;
|
||||
NEARDATA struct you u = DUMMY;
|
||||
NEARDATA time_t ubirthday = DUMMY;
|
||||
NEARDATA struct u_realtime urealtime = DUMMY;
|
||||
|
||||
|
||||
schar lastseentyp[COLNO][ROWNO] = {DUMMY}; /* last seen/touched dungeon typ */
|
||||
@@ -217,6 +219,8 @@ NEARDATA struct c_color_names c_color_names = {
|
||||
"white"
|
||||
};
|
||||
|
||||
struct menucoloring *menu_colorings = NULL;
|
||||
|
||||
const char *c_obj_colors[] = {
|
||||
"black", /* CLR_BLACK */
|
||||
"red", /* CLR_RED */
|
||||
@@ -267,12 +271,14 @@ char toplines[TBUFSZ];
|
||||
struct tc_gbl_data tc_gbl_data = { 0,0, 0,0 }; /* AS,AE, LI,CO */
|
||||
|
||||
char *fqn_prefix[PREFIX_COUNT] = { (char *)0, (char *)0, (char *)0, (char *)0,
|
||||
(char *)0, (char *)0, (char *)0, (char *)0, (char *)0 };
|
||||
(char *)0, (char *)0, (char *)0, (char *)0,
|
||||
(char *)0 , (char *)0 };
|
||||
|
||||
#ifdef PREFIXES_IN_USE
|
||||
char *fqn_prefix_names[PREFIX_COUNT] = { "hackdir", "leveldir", "savedir",
|
||||
"bonesdir", "datadir", "scoredir",
|
||||
"lockdir", "configdir", "troubledir" };
|
||||
"lockdir", "sysconfdir", "configdir",
|
||||
"troubledir" };
|
||||
#endif
|
||||
|
||||
NEARDATA struct savefile_info sfcap = {
|
||||
|
||||
@@ -890,6 +890,7 @@ struct obj *obj;
|
||||
}
|
||||
You("peer into %s...", the(xname(obj)));
|
||||
nomul(-rnd(10));
|
||||
multi_reason = "gazing into a crystal ball";
|
||||
nomovemsg = "";
|
||||
if (obj->spe <= 0)
|
||||
pline_The("vision is unclear.");
|
||||
|
||||
54
src/dig.c
54
src/dig.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 dig.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 dig.c $Date: 2012/02/16 03:01:37 $ $Revision: 1.67 $ */
|
||||
/* NetHack 3.5 dig.c $NHDT-Date: 1426465434 2015/03/16 00:23:54 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.73 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -486,16 +485,15 @@ boolean fill_if_any; /* force filling if it exists at all */
|
||||
|
||||
for (x1 = lo_x; x1 <= hi_x; x1++)
|
||||
for (y1 = lo_y; y1 <= hi_y; y1++)
|
||||
if (levl[x1][y1].typ == POOL)
|
||||
pool_cnt++;
|
||||
else if (levl[x1][y1].typ == MOAT ||
|
||||
(levl[x1][y1].typ == DRAWBRIDGE_UP &&
|
||||
(levl[x1][y1].drawbridgemask & DB_UNDER) == DB_MOAT))
|
||||
moat_cnt++;
|
||||
else if (levl[x1][y1].typ == LAVAPOOL ||
|
||||
(levl[x1][y1].typ == DRAWBRIDGE_UP &&
|
||||
(levl[x1][y1].drawbridgemask & DB_UNDER) == DB_LAVA))
|
||||
lava_cnt++;
|
||||
if (is_moat(x1, y1))
|
||||
moat_cnt++;
|
||||
else if (is_pool(x1, y1))
|
||||
/* This must come after is_moat since moats are pools
|
||||
* but not vice-versa. */
|
||||
pool_cnt++;
|
||||
else if (is_lava(x1, y1))
|
||||
lava_cnt++;
|
||||
|
||||
if (!fill_if_any) pool_cnt /= 3; /* not as much liquid as the others */
|
||||
|
||||
if ((lava_cnt > moat_cnt + pool_cnt && rn2(lava_cnt + 1)) ||
|
||||
@@ -1024,6 +1022,7 @@ struct obj *obj;
|
||||
/* you ought to be able to let go; tough luck */
|
||||
/* (maybe `move_into_trap()' would be better) */
|
||||
nomul(-d(2,2));
|
||||
multi_reason = "stuck in a spider web";
|
||||
nomovemsg = "You pull free.";
|
||||
} else if (lev->typ == IRONBARS) {
|
||||
pline("Clang!");
|
||||
@@ -1246,7 +1245,7 @@ register struct monst *mtmp;
|
||||
|
||||
if (IS_WALL(here->typ)) {
|
||||
/* KMH -- Okay on arboreal levels (room walls are still stone) */
|
||||
if (!Deaf && flags.verbose && !rn2(5))
|
||||
if (flags.verbose && !rn2(5))
|
||||
You_hear("crashing rock.");
|
||||
if (*in_rooms(mtmp->mx, mtmp->my, SHOPBASE))
|
||||
add_damage(mtmp->mx, mtmp->my, 0L);
|
||||
@@ -1284,7 +1283,7 @@ zap_dig()
|
||||
struct monst *mtmp;
|
||||
struct obj *otmp;
|
||||
struct trap *trap_with_u = (struct trap *)0;
|
||||
int zx, zy, diridx, digdepth, flow_x, flow_y;
|
||||
int zx, zy, diridx = 8, digdepth, flow_x = -1, flow_y = -1;
|
||||
boolean shopdoor, shopwall, maze_dig, pitdig = FALSE, pitflow = FALSE;
|
||||
|
||||
/*
|
||||
@@ -1462,7 +1461,7 @@ zap_dig()
|
||||
} /* while */
|
||||
tmp_at(DISP_END,0); /* closing call */
|
||||
|
||||
if (pitflow) {
|
||||
if (pitflow && isok(flow_x, flow_y)) {
|
||||
struct trap *ttmp = t_at(flow_x, flow_y);
|
||||
if (ttmp && (ttmp->ttyp == PIT || ttmp->ttyp == SPIKED_PIT)) {
|
||||
schar filltyp = fillholetyp(ttmp->tx, ttmp->ty, TRUE);
|
||||
@@ -1684,13 +1683,15 @@ buried_ball_to_freedom()
|
||||
/* move objects from fobj/nexthere lists to buriedobjlist, keeping position */
|
||||
/* information */
|
||||
struct obj *
|
||||
bury_an_obj(otmp)
|
||||
bury_an_obj(otmp, dealloced)
|
||||
struct obj *otmp;
|
||||
boolean *dealloced;
|
||||
{
|
||||
struct obj *otmp2;
|
||||
boolean under_ice;
|
||||
|
||||
debugpline("bury_an_obj: %s", xname(otmp));
|
||||
debugpline1("bury_an_obj: %s", xname(otmp));
|
||||
if (dealloced) *dealloced = FALSE;
|
||||
if (otmp == uball) {
|
||||
unpunish();
|
||||
u.utrap = rn1(50,20);
|
||||
@@ -1721,6 +1722,7 @@ bury_an_obj(otmp)
|
||||
under_ice = is_ice(otmp->ox, otmp->oy);
|
||||
if (otmp->otyp == ROCK && !under_ice) {
|
||||
/* merges into burying material */
|
||||
if (dealloced) *dealloced = TRUE;
|
||||
obfree(otmp, (struct obj *)0);
|
||||
return(otmp2);
|
||||
}
|
||||
@@ -1753,9 +1755,9 @@ int x, y;
|
||||
struct obj *otmp, *otmp2;
|
||||
|
||||
if(level.objects[x][y] != (struct obj *)0)
|
||||
debugpline("bury_objs: at %d, %d", x, y);
|
||||
debugpline2("bury_objs: at <%d,%d>", x, y);
|
||||
for (otmp = level.objects[x][y]; otmp; otmp = otmp2)
|
||||
otmp2 = bury_an_obj(otmp);
|
||||
otmp2 = bury_an_obj(otmp, NULL);
|
||||
|
||||
/* don't expect any engravings here, but just in case */
|
||||
del_engr_at(x, y);
|
||||
@@ -1770,7 +1772,7 @@ int x, y;
|
||||
struct obj *otmp, *otmp2, *bball;
|
||||
coord cc;
|
||||
|
||||
debugpline("unearth_objs: at %d, %d", x, y);
|
||||
debugpline2("unearth_objs: at <%d,%d>", x, y);
|
||||
cc.x = x; cc.y = y;
|
||||
bball = buried_ball(&cc);
|
||||
for (otmp = level.buriedobjlist; otmp; otmp = otmp2) {
|
||||
@@ -1815,7 +1817,7 @@ long timeout UNUSED;
|
||||
/* Everything which can be held in a container can also be
|
||||
buried, so bury_an_obj's use of obj_extract_self insures
|
||||
that Has_contents(obj) will eventually become false. */
|
||||
(void)bury_an_obj(obj->cobj);
|
||||
(void)bury_an_obj(obj->cobj, NULL);
|
||||
}
|
||||
obj_extract_self(obj);
|
||||
obfree(obj, (struct obj *) 0);
|
||||
@@ -1879,7 +1881,7 @@ void
|
||||
bury_monst(mtmp)
|
||||
struct monst *mtmp;
|
||||
{
|
||||
debugpline("bury_monst: %s", mon_nam(mtmp));
|
||||
debugpline1("bury_monst: %s", mon_nam(mtmp));
|
||||
if(canseemon(mtmp)) {
|
||||
if(is_flyer(mtmp->data) || is_floater(mtmp->data)) {
|
||||
pline_The("%s opens up, but %s is not swallowed!",
|
||||
@@ -1898,7 +1900,7 @@ struct monst *mtmp;
|
||||
void
|
||||
bury_you()
|
||||
{
|
||||
debugpline("bury_you");
|
||||
debugpline0("bury_you");
|
||||
if (!Levitation && !Flying) {
|
||||
if(u.uswallow)
|
||||
You_feel("a sensation like falling into a trap!");
|
||||
@@ -1915,7 +1917,7 @@ bury_you()
|
||||
void
|
||||
unearth_you()
|
||||
{
|
||||
debugpline("unearth_you");
|
||||
debugpline0("unearth_you");
|
||||
u.uburied = FALSE;
|
||||
under_ground(0);
|
||||
if(!uamul || uamul->otyp != AMULET_OF_STRANGULATION)
|
||||
@@ -1926,7 +1928,7 @@ unearth_you()
|
||||
void
|
||||
escape_tomb()
|
||||
{
|
||||
debugpline("escape_tomb");
|
||||
debugpline0("escape_tomb");
|
||||
if ((Teleportation || can_teleport(youmonst.data)) &&
|
||||
(Teleport_control || rn2(3) < Luck+2)) {
|
||||
You("attempt a teleport spell.");
|
||||
@@ -1958,7 +1960,7 @@ bury_obj(otmp)
|
||||
struct obj *otmp;
|
||||
{
|
||||
|
||||
debugpline("bury_obj");
|
||||
debugpline0("bury_obj");
|
||||
if(cansee(otmp->ox, otmp->oy))
|
||||
pline_The("objects on the %s tumble into a hole!",
|
||||
surface(otmp->ox, otmp->oy));
|
||||
|
||||
@@ -168,7 +168,7 @@ magic_map_background(x, y, show)
|
||||
lev->glyph = glyph;
|
||||
if (show) show_glyph(x,y, glyph);
|
||||
|
||||
remember_topology(x,y); /* DUNGEON_OVERVIEW */
|
||||
remember_topology(x,y);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -325,7 +325,7 @@ unmap_object(x, y)
|
||||
else \
|
||||
map_background(x,y,show); \
|
||||
\
|
||||
remember_topology(x,y); /* DUNGEON_OVERVIEW */ \
|
||||
remember_topology(x,y); \
|
||||
}
|
||||
|
||||
void
|
||||
@@ -674,7 +674,12 @@ newsym(x,y)
|
||||
*/
|
||||
lev->waslit = (lev->lit!=0); /* remember lit condition */
|
||||
|
||||
if (reg != NULL && ACCESSIBLE(lev->typ)) {
|
||||
/* normal region shown only on accessible positions, but poison clouds
|
||||
* also shown above lava, pools and moats.
|
||||
*/
|
||||
if (reg != NULL && (ACCESSIBLE(lev->typ) ||
|
||||
(reg->glyph == cmap_to_glyph(S_poisoncloud) &&
|
||||
(lev->typ == LAVAPOOL || lev->typ == POOL || lev->typ == MOAT)))) {
|
||||
show_region(reg,x,y);
|
||||
return;
|
||||
}
|
||||
@@ -824,8 +829,10 @@ shieldeff(x,y)
|
||||
* DISP_ALWAYS- Like DISP_FLASH, but vision is not taken into account.
|
||||
*/
|
||||
|
||||
#define TMP_AT_MAX_GLYPHS (COLNO*2)
|
||||
|
||||
static struct tmp_glyph {
|
||||
coord saved[COLNO]; /* previously updated positions */
|
||||
coord saved[TMP_AT_MAX_GLYPHS]; /* previously updated positions */
|
||||
int sidx; /* index of next unused slot in saved[] */
|
||||
int style; /* either DISP_BEAM or DISP_FLASH or DISP_ALWAYS */
|
||||
int glyph; /* glyph to use when printing */
|
||||
@@ -895,7 +902,7 @@ tmp_at(x, y)
|
||||
default: /* do it */
|
||||
if (tglyph->style == DISP_BEAM || tglyph->style == DISP_ALL) {
|
||||
if (tglyph->style != DISP_ALL && !cansee(x,y)) break;
|
||||
if (tglyph->sidx >= COLNO) break; /* too many locations */
|
||||
if (tglyph->sidx >= TMP_AT_MAX_GLYPHS) break; /* too many locations */
|
||||
/* save pos for later erasing */
|
||||
tglyph->saved[tglyph->sidx].x = x;
|
||||
tglyph->saved[tglyph->sidx].y = y;
|
||||
|
||||
50
src/do.c
50
src/do.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 do.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 do.c $Date: 2014/11/18 03:10:39 $ $Revision: 1.101 $ */
|
||||
/* NetHack 3.5 do.c $NHDT-Date: 1426991040 2015/03/22 02:24:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.111 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -179,12 +178,12 @@ const char *verb;
|
||||
}
|
||||
}
|
||||
deltrap(t);
|
||||
obfree(obj, (struct obj *)0);
|
||||
useupf(obj, 1L);
|
||||
bury_objs(x, y);
|
||||
newsym(x,y);
|
||||
return TRUE;
|
||||
} else if (is_lava(x, y)) {
|
||||
return fire_damage(obj, FALSE, FALSE, x, y);
|
||||
return fire_damage(obj, FALSE, x, y);
|
||||
} else if (is_pool(x, y)) {
|
||||
/* Reasonably bulky objects (arbitrary) splash when dropped.
|
||||
* If you're floating above the water even small things make
|
||||
@@ -201,8 +200,7 @@ const char *verb;
|
||||
map_background(x, y, 0);
|
||||
newsym(x, y);
|
||||
}
|
||||
water_damage(&obj, FALSE, FALSE);
|
||||
if (!obj) return TRUE;
|
||||
return water_damage(obj, NULL, FALSE) == ER_DESTROYED;
|
||||
} else if (u.ux == x && u.uy == y &&
|
||||
(t = t_at(x,y)) != 0 && uteetering_at_seen_pit(t)) {
|
||||
if (Blind && !Deaf)
|
||||
@@ -223,10 +221,15 @@ doaltarobj(obj) /* obj is an object dropped on an altar */
|
||||
if (Blind)
|
||||
return;
|
||||
|
||||
/* KMH, conduct */
|
||||
u.uconduct.gnostic++;
|
||||
if (obj->oclass != COIN_CLASS) {
|
||||
/* KMH, conduct */
|
||||
u.uconduct.gnostic++;
|
||||
} else {
|
||||
/* coins don't have bless/curse status */
|
||||
obj->blessed = obj->cursed = 0;
|
||||
}
|
||||
|
||||
if ((obj->blessed || obj->cursed) && obj->oclass != COIN_CLASS) {
|
||||
if (obj->blessed || obj->cursed) {
|
||||
There("is %s flash as %s %s the altar.",
|
||||
an(hcolor(obj->blessed ? NH_AMBER : NH_BLACK)),
|
||||
doname(obj), otense(obj, "hit"));
|
||||
@@ -234,7 +237,7 @@ doaltarobj(obj) /* obj is an object dropped on an altar */
|
||||
} else {
|
||||
pline("%s %s on the altar.", Doname2(obj),
|
||||
otense(obj, "land"));
|
||||
obj->bknown = 1;
|
||||
if (obj->oclass != COIN_CLASS) obj->bknown = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1010,15 +1013,18 @@ boolean at_stairs, falling, portal;
|
||||
|
||||
/* If you have the amulet and are trying to get out of Gehennom, going
|
||||
* up a set of stairs sometimes does some very strange things!
|
||||
* Biased against law and towards chaos, but not nearly as strongly
|
||||
* as it used to be (prior to 3.2.0).
|
||||
* Odds: old new
|
||||
* "up" L N C "up" L N C
|
||||
* +1 75.0 75.0 75.0 +1 75.0 75.0 75.0
|
||||
* 0 0.0 12.5 25.0 0 6.25 8.33 12.5
|
||||
* -1 8.33 4.17 0.0 -1 6.25 8.33 12.5
|
||||
* -2 8.33 4.17 0.0 -2 6.25 8.33 0.0
|
||||
* -3 8.33 4.17 0.0 -3 6.25 0.0 0.0
|
||||
* Biased against law and towards chaos. (The chance to be sent
|
||||
* down multiple levels when attempting to go up are significantly
|
||||
* less than the corresponding comment in older versions indicated
|
||||
* due to overlooking the effect of the call to assign_rnd_lvl().)
|
||||
*
|
||||
* Odds for making it to the next level up, or of being sent down:
|
||||
* "up" L N C
|
||||
* +1 75.0 75.0 75.0
|
||||
* 0 6.25 8.33 12.5
|
||||
* -1 11.46 12.50 12.5
|
||||
* -2 5.21 4.17 0.0
|
||||
* -3 2.08 0.0 0.0
|
||||
*/
|
||||
if (Inhell && up && u.uhave.amulet && !newdungeon && !portal &&
|
||||
(dunlev(&u.uz) < dunlevs_in_dungeon(&u.uz)-3)) {
|
||||
@@ -1279,8 +1285,10 @@ boolean at_stairs, falling, portal;
|
||||
}
|
||||
|
||||
/* initial movement of bubbles just before vision_recalc */
|
||||
if (Is_waterlevel(&u.uz))
|
||||
if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz))
|
||||
movebubbles();
|
||||
else if (Is_firelevel(&u.uz))
|
||||
fumaroles();
|
||||
|
||||
if (level_info[new_ledger].flags & FORGOTTEN) {
|
||||
forget_map(ALL_MAP); /* forget the map */
|
||||
@@ -1317,6 +1325,7 @@ boolean at_stairs, falling, portal;
|
||||
#endif
|
||||
You_hear("groans and moans everywhere.");
|
||||
} else pline("It is hot here. You smell smoke...");
|
||||
u.uachieve.enter_gehennom = 1;
|
||||
}
|
||||
/* in case we've managed to bypass the Valley's stairway down */
|
||||
if (Inhell && !Is_valley(&u.uz)) u.uevent.gehennom_entered = 1;
|
||||
@@ -1394,6 +1403,7 @@ boolean at_stairs, falling, portal;
|
||||
/* assume this will always return TRUE when changing level */
|
||||
(void) in_out_region(u.ux, u.uy);
|
||||
(void) pickup(1);
|
||||
context.polearm.hitmon = NULL;
|
||||
}
|
||||
|
||||
STATIC_OVL void
|
||||
|
||||
223
src/do_name.c
223
src/do_name.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 do_name.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 do_name.c $Date: 2012/01/29 03:00:17 $ $Revision: 1.49 $ */
|
||||
/* NetHack 3.5 do_name.c $NHDT-Date: 1426558927 2015/03/17 02:22:07 $ $NHDT-Branch: master $:$NHDT-Revision: 1.53 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -25,6 +24,17 @@ nextmbuf()
|
||||
return bufs[bufidx];
|
||||
}
|
||||
|
||||
/* function for getpos() to highlight desired map locations.
|
||||
* parameter value 0 = initialize, 1 = highlight, 2 = done
|
||||
*/
|
||||
void (*getpos_hilitefunc)(int) = NULL;
|
||||
void
|
||||
getpos_sethilite(f)
|
||||
void (*f)(int);
|
||||
{
|
||||
getpos_hilitefunc = f;
|
||||
}
|
||||
|
||||
/* the response for '?' help request in getpos() */
|
||||
STATIC_OVL void
|
||||
getpos_help(force, goal)
|
||||
@@ -40,6 +50,10 @@ const char *goal;
|
||||
putstr(tmpwin, 0, sbuf);
|
||||
putstr(tmpwin, 0, "Use [HJKL] to move the cursor 8 units at a time.");
|
||||
putstr(tmpwin, 0, "Or enter a background symbol (ex. <).");
|
||||
putstr(tmpwin, 0, "Use @ to move the cursor on yourself.");
|
||||
if (getpos_hilitefunc != NULL)
|
||||
putstr(tmpwin, 0, "Use $ to display valid locations.");
|
||||
putstr(tmpwin, 0, "Use # to toggle automatic description.");
|
||||
/* disgusting hack; the alternate selection characters work for any
|
||||
getpos call, but they only matter for dowhatis (and doquickwhatis) */
|
||||
doing_what_is = (goal == what_is_an_unknown_object);
|
||||
@@ -54,8 +68,8 @@ const char *goal;
|
||||
}
|
||||
|
||||
int
|
||||
getpos(cc, force, goal)
|
||||
coord *cc;
|
||||
getpos(ccp, force, goal)
|
||||
coord *ccp;
|
||||
boolean force;
|
||||
const char *goal;
|
||||
{
|
||||
@@ -63,16 +77,19 @@ const char *goal;
|
||||
int cx, cy, i, c;
|
||||
int sidx, tx, ty;
|
||||
boolean msg_given = TRUE; /* clear message window by default */
|
||||
boolean auto_msg = FALSE;
|
||||
boolean show_goal_msg = FALSE;
|
||||
static const char pick_chars[] = ".,;:";
|
||||
const char *cp;
|
||||
boolean hilite_state = FALSE;
|
||||
|
||||
if (!goal) goal = "desired location";
|
||||
if (flags.verbose) {
|
||||
pline("(For instructions type a ?)");
|
||||
msg_given = TRUE;
|
||||
}
|
||||
cx = cc->x;
|
||||
cy = cc->y;
|
||||
cx = ccp->x;
|
||||
cy = ccp->y;
|
||||
#ifdef CLIPPING
|
||||
cliparound(cx, cy);
|
||||
#endif
|
||||
@@ -82,7 +99,40 @@ const char *goal;
|
||||
lock_mouse_cursor(TRUE);
|
||||
#endif
|
||||
for (;;) {
|
||||
|
||||
if (show_goal_msg) {
|
||||
pline("Move cursor to %s:", goal);
|
||||
curs(WIN_MAP, cx, cy);
|
||||
flush_screen(0);
|
||||
show_goal_msg = FALSE;
|
||||
} else if (auto_msg && !msg_given && !hilite_state) {
|
||||
coord cc;
|
||||
int sym = 0;
|
||||
char tmpbuf[BUFSZ];
|
||||
const char *firstmatch = NULL;
|
||||
|
||||
cc.x = cx;
|
||||
cc.y = cy;
|
||||
if (do_screen_description(cc, TRUE, sym, tmpbuf, &firstmatch)) {
|
||||
/* there may be an encoded glyph */
|
||||
putmixed(WIN_MESSAGE, 0, tmpbuf);
|
||||
curs(WIN_MAP, cx, cy);
|
||||
flush_screen(0);
|
||||
}
|
||||
}
|
||||
|
||||
c = nh_poskey(&tx, &ty, &sidx);
|
||||
|
||||
if (hilite_state) {
|
||||
(*getpos_hilitefunc)(2);
|
||||
hilite_state = FALSE;
|
||||
curs(WIN_MAP, cx, cy);
|
||||
flush_screen(0);
|
||||
}
|
||||
|
||||
if (auto_msg)
|
||||
msg_given = FALSE;
|
||||
|
||||
if (c == '\033') {
|
||||
cx = cy = -10;
|
||||
msg_given = TRUE; /* force clear */
|
||||
@@ -142,8 +192,27 @@ const char *goal;
|
||||
else /* ^R */
|
||||
docrt(); /* redraw */
|
||||
/* update message window to reflect that we're still targetting */
|
||||
pline("Move cursor to %s:", goal);
|
||||
show_goal_msg = TRUE;
|
||||
msg_given = TRUE;
|
||||
} else if ((c == '$') && (getpos_hilitefunc != NULL)) {
|
||||
if (!hilite_state) {
|
||||
(*getpos_hilitefunc)(0);
|
||||
(*getpos_hilitefunc)(1);
|
||||
hilite_state = TRUE;
|
||||
}
|
||||
goto nxtc;
|
||||
} else if (c == '#') {
|
||||
auto_msg = !auto_msg;
|
||||
pline("Automatic description %sis %s.",
|
||||
flags.verbose ? "of features under cursor " : "",
|
||||
auto_msg ? "on" : "off");
|
||||
if (!auto_msg) show_goal_msg = TRUE;
|
||||
msg_given = TRUE;
|
||||
goto nxtc;
|
||||
} else if (c == '@') {
|
||||
cx = u.ux;
|
||||
cy = u.uy;
|
||||
goto nxtc;
|
||||
} else {
|
||||
if (!index(quitchars, c)) {
|
||||
char matching[MAXPCHARS];
|
||||
@@ -162,9 +231,25 @@ const char *goal;
|
||||
lo_x = (pass == 0 && ty == lo_y) ? cx + 1 : 1;
|
||||
hi_x = (pass == 1 && ty == hi_y) ? cx : COLNO - 1;
|
||||
for (tx = lo_x; tx <= hi_x; tx++) {
|
||||
k = levl[tx][ty].glyph;
|
||||
/* look at dungeon feature, not at user-visible glyph */
|
||||
k = back_to_glyph(tx,ty);
|
||||
/* uninteresting background glyph */
|
||||
if (glyph_is_cmap(k) &&
|
||||
matching[glyph_to_cmap(k)]) {
|
||||
(IS_DOOR(levl[tx][ty].typ) ||
|
||||
glyph_to_cmap(k) == S_room ||
|
||||
glyph_to_cmap(k) == S_corr ||
|
||||
glyph_to_cmap(k) == S_litcorr)) {
|
||||
/* what the hero remembers to be at tx,ty */
|
||||
k = glyph_at(tx, ty);
|
||||
}
|
||||
if (glyph_is_cmap(k) &&
|
||||
matching[glyph_to_cmap(k)] &&
|
||||
levl[tx][ty].seenv &&
|
||||
(!IS_WALL(levl[tx][ty].typ)) &&
|
||||
(levl[tx][ty].typ != SDOOR) &&
|
||||
glyph_to_cmap(k) != S_room &&
|
||||
glyph_to_cmap(k) != S_corr &&
|
||||
glyph_to_cmap(k) != S_litcorr) {
|
||||
cx = tx, cy = ty;
|
||||
if (msg_given) {
|
||||
clear_nhwindow(WIN_MESSAGE);
|
||||
@@ -209,8 +294,9 @@ const char *goal;
|
||||
lock_mouse_cursor(FALSE);
|
||||
#endif
|
||||
if (msg_given) clear_nhwindow(WIN_MESSAGE);
|
||||
cc->x = cx;
|
||||
cc->y = cy;
|
||||
ccp->x = cx;
|
||||
ccp->y = cy;
|
||||
getpos_hilitefunc = NULL;
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -751,10 +837,10 @@ boolean called;
|
||||
/* Put the actual monster name or type into the buffer now */
|
||||
/* Be sure to remember whether the buffer starts with a name */
|
||||
if (do_hallu) {
|
||||
const char *rname = rndmonnam();
|
||||
|
||||
char rnamecode;
|
||||
char *rname = rndmonnam(&rnamecode);
|
||||
Strcat(buf, rname);
|
||||
name_at_start = bogon_is_pname(rname);
|
||||
name_at_start = bogon_is_pname(rnamecode);
|
||||
} else if (has_mname(mtmp)) {
|
||||
char *name = MNAME(mtmp);
|
||||
|
||||
@@ -948,113 +1034,44 @@ char *outbuf;
|
||||
return outbuf;
|
||||
}
|
||||
|
||||
/*
|
||||
* Name prefix codes (same as shknam.c):
|
||||
* dash - female, personal name
|
||||
* underscore _ female, general name
|
||||
* plus + male, personal name
|
||||
* vertical bar | male, general name
|
||||
* equals = gender not specified, personal name
|
||||
*/
|
||||
|
||||
static const char * const bogusmons[] = {
|
||||
"jumbo shrimp", "giant pigmy", "gnu", "killer penguin",
|
||||
"giant cockroach", "giant slug", "maggot", "pterodactyl",
|
||||
"tyrannosaurus rex", "basilisk", "beholder", "nightmare",
|
||||
"efreeti", "marid", "rot grub", "bookworm", "master lichen",
|
||||
"shadow", "hologram", "jester", "attorney", "sleazoid",
|
||||
"killer tomato", "amazon", "robot", "battlemech",
|
||||
"rhinovirus", "harpy", "lion-dog", "rat-ant", "Y2K bug",
|
||||
/* misc. */
|
||||
"grue", "Christmas-tree monster", "luck sucker", "paskald",
|
||||
"brogmoid", "dornbeast", /* Quendor (Zork, &c.) */
|
||||
"Ancient Multi-Hued Dragon", "+Evil Iggy",
|
||||
/* Moria */
|
||||
"emu", "kestrel", "xeroc", "venus flytrap",
|
||||
/* Rogue */
|
||||
"creeping coins", /* Wizardry */
|
||||
"hydra", "siren", /* Greek legend */
|
||||
"killer bunny", /* Monty Python */
|
||||
"rodent of unusual size", /* The Princess Bride */
|
||||
"were-rabbit", /* Wallace & Gromit */
|
||||
"+Smokey Bear", /* "Only you can prevent forest fires!" */
|
||||
"Luggage", /* Discworld */
|
||||
"Ent", /* Lord of the Rings */
|
||||
"tangle tree", "nickelpede", "wiggle", /* Xanth */
|
||||
"white rabbit", "snark", /* Lewis Carroll */
|
||||
"pushmi-pullyu", /* Dr. Dolittle */
|
||||
"smurf", /* The Smurfs */
|
||||
"tribble", "Klingon", "Borg", /* Star Trek */
|
||||
"Ewok", /* Star Wars */
|
||||
"Totoro", /* Tonari no Totoro */
|
||||
"ohmu", /* Nausicaa */
|
||||
"youma", /* Sailor Moon */
|
||||
"nyaasu", /* Pokemon (Meowth) */
|
||||
"-Godzilla", "+King Kong", /* monster movies */
|
||||
"earthquake beast", /* old L of SH */
|
||||
"Invid", /* Robotech */
|
||||
"Terminator", /* The Terminator */
|
||||
"boomer", /* Bubblegum Crisis */
|
||||
"Dalek", /* Dr. Who ("Exterminate!") */
|
||||
"microscopic space fleet", "Ravenous Bugblatter Beast of Traal",
|
||||
/* HGttG */
|
||||
"teenage mutant ninja turtle", /* TMNT */
|
||||
"samurai rabbit", /* Usagi Yojimbo */
|
||||
"aardvark", /* Cerebus */
|
||||
"=Audrey II", /* Little Shop of Horrors */
|
||||
"witch doctor", "one-eyed one-horned flying purple people eater",
|
||||
/* 50's rock 'n' roll */
|
||||
"+Barney the dinosaur", /* saccharine kiddy TV */
|
||||
"+Morgoth", /* Angband */
|
||||
"Vorlon", /* Babylon 5 */
|
||||
"questing beast", /* King Arthur */
|
||||
"Predator", /* Movie */
|
||||
"mother-in-law" /* common pest */
|
||||
};
|
||||
|
||||
|
||||
#define BOGUSMONSIZE 100 /* arbitrary */
|
||||
/* return a random monster name, for hallucination */
|
||||
const char *
|
||||
rndmonnam()
|
||||
char *
|
||||
rndmonnam(code)
|
||||
char *code;
|
||||
{
|
||||
const char *mname;
|
||||
static char buf[BUFSZ];
|
||||
char *mname = buf;
|
||||
int name;
|
||||
|
||||
if (code) *code = '\0';
|
||||
|
||||
do {
|
||||
name = rn1(SPECIAL_PM + SIZE(bogusmons) - LOW_PM, LOW_PM);
|
||||
name = rn1(SPECIAL_PM + BOGUSMONSIZE - LOW_PM, LOW_PM);
|
||||
} while (name < SPECIAL_PM &&
|
||||
(type_is_pname(&mons[name]) || (mons[name].geno & G_NOGEN)));
|
||||
|
||||
if (name >= SPECIAL_PM) {
|
||||
mname = bogusmons[name - SPECIAL_PM];
|
||||
get_rnd_text(BOGUSMONFILE, buf);
|
||||
/* strip prefix if present */
|
||||
if (!letter(*mname)) ++mname;
|
||||
if (!letter(*mname)) {
|
||||
if (code) *code = *mname;
|
||||
++mname;
|
||||
}
|
||||
} else {
|
||||
mname = mons[name].mname;
|
||||
Strcpy(buf, mons[name].mname);
|
||||
}
|
||||
return mname;
|
||||
}
|
||||
#undef BOGUSMONSIZE
|
||||
|
||||
/* scan bogusmons to check whether this name is in the list and has a prefix */
|
||||
boolean
|
||||
bogon_is_pname(mname)
|
||||
const char *mname;
|
||||
bogon_is_pname(code)
|
||||
char code;
|
||||
{
|
||||
const char *bname;
|
||||
int name;
|
||||
|
||||
if (!mname || !*mname) return FALSE;
|
||||
if (!strncmpi(mname, "the ", 4)) mname += 4;
|
||||
/* scan the bogusmons[] list; case sensitive here */
|
||||
for (name = 0; name < SIZE(bogusmons); name++) {
|
||||
bname = bogusmons[name];
|
||||
/* we can skip all ordinary entries */
|
||||
if (letter(*bname)) continue;
|
||||
/* starts with a classification code; does rest of name match? */
|
||||
if (!strcmp(mname, bname + 1))
|
||||
return index("-+=", *bname) ? TRUE : FALSE;
|
||||
}
|
||||
return FALSE;
|
||||
if (!code) return FALSE;
|
||||
return index("-+=", code) ? TRUE : FALSE;
|
||||
}
|
||||
|
||||
const char *
|
||||
|
||||
@@ -391,7 +391,7 @@ Helmet_on(VOID_ARGS)
|
||||
properties, including levitation; uarmh could get
|
||||
dropped or destroyed here */
|
||||
uchangealign((u.ualign.type != A_NEUTRAL) ? -u.ualign.type :
|
||||
rn2(2) ? A_CHAOTIC : A_LAWFUL, 1);
|
||||
(uarmh->o_id % 2) ? A_CHAOTIC : A_LAWFUL, 1);
|
||||
/* makeknown(uarmh->otyp); -- moved below, after xname() */
|
||||
/*FALLTHRU*/
|
||||
case DUNCE_CAP:
|
||||
@@ -1407,6 +1407,7 @@ register struct obj *otmp;
|
||||
if(cursed(otmp)) return(0);
|
||||
if(delay) {
|
||||
nomul(delay);
|
||||
multi_reason = "disrobing";
|
||||
if (is_helmet(otmp)) {
|
||||
/* ick... */
|
||||
nomovemsg = !strcmp(helm_simple_name(otmp), "hat") ?
|
||||
@@ -1664,6 +1665,7 @@ dowear()
|
||||
delay = -objects[otmp->otyp].oc_delay;
|
||||
if(delay){
|
||||
nomul(delay);
|
||||
multi_reason = "dressing up";
|
||||
if(is_boots(otmp)) afternmv = Boots_on;
|
||||
if(is_helmet(otmp)) afternmv = Helmet_on;
|
||||
if(is_gloves(otmp)) afternmv = Gloves_on;
|
||||
@@ -1937,20 +1939,6 @@ struct monst *victim;
|
||||
return(otmph);
|
||||
}
|
||||
|
||||
/* erode some arbitrary armor worn by the victim */
|
||||
void
|
||||
erode_armor(victim, acid_dmg)
|
||||
struct monst *victim;
|
||||
boolean acid_dmg;
|
||||
{
|
||||
struct obj *otmph = some_armor(victim);
|
||||
|
||||
if (otmph && (otmph != uarmf)) {
|
||||
(void) erode_obj(otmph, acid_dmg ? 3 : 1, FALSE, FALSE);
|
||||
if (carried(otmph)) update_inventory();
|
||||
}
|
||||
}
|
||||
|
||||
/* used for praying to check and fix levitation trouble */
|
||||
struct obj *
|
||||
stuck_ring(ring, otyp)
|
||||
|
||||
24
src/dog.c
24
src/dog.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 dog.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 dog.c $Date: 2011/04/15 01:55:42 $ $Revision: 1.37 $ */
|
||||
/* NetHack 3.5 dog.c $NHDT-Date: 1425319883 2015/03/02 18:11:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.39 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -295,16 +294,12 @@ boolean with_you;
|
||||
|
||||
num_segs = mtmp->wormno;
|
||||
/* baby long worms have no tail so don't use is_longworm() */
|
||||
if ((mtmp->data == &mons[PM_LONG_WORM]) &&
|
||||
#ifdef DCC30_BUG
|
||||
(mtmp->wormno = get_wormno(), mtmp->wormno != 0))
|
||||
#else
|
||||
(mtmp->wormno = get_wormno()) != 0)
|
||||
#endif
|
||||
{
|
||||
initworm(mtmp, num_segs);
|
||||
/* tail segs are not yet initialized or displayed */
|
||||
} else mtmp->wormno = 0;
|
||||
if (mtmp->data == &mons[PM_LONG_WORM]) {
|
||||
mtmp->wormno = get_wormno();
|
||||
if (mtmp->wormno)
|
||||
initworm(mtmp, num_segs);
|
||||
} else
|
||||
mtmp->wormno = 0;
|
||||
|
||||
/* some monsters might need to do something special upon arrival
|
||||
_after_ the current level has been fully set up; see dochug() */
|
||||
@@ -427,7 +422,7 @@ boolean with_you;
|
||||
* probably because the level is full.
|
||||
* Dump the monster's cargo and leave the monster dead.
|
||||
*/
|
||||
struct obj *obj, *corpse;
|
||||
struct obj *obj;
|
||||
while ((obj = mtmp->minvent) != 0) {
|
||||
obj_extract_self(obj);
|
||||
obj_no_longer_held(obj);
|
||||
@@ -441,7 +436,7 @@ boolean with_you;
|
||||
impossible("Can't find relocated object.");
|
||||
}
|
||||
}
|
||||
corpse = mkcorpstat(CORPSE, (struct monst *)0, mtmp->data,
|
||||
(void) mkcorpstat(CORPSE, (struct monst *)0, mtmp->data,
|
||||
xlocale, ylocale, CORPSTAT_NONE);
|
||||
mongone(mtmp);
|
||||
}
|
||||
@@ -689,6 +684,7 @@ migrate_to_level(mtmp, tolev, xyloc, cc)
|
||||
mtmp->mux = new_lev.dnum;
|
||||
mtmp->muy = new_lev.dlevel;
|
||||
mtmp->mx = mtmp->my = 0; /* this implies migration */
|
||||
if (mtmp == context.polearm.hitmon) context.polearm.hitmon = NULL;
|
||||
}
|
||||
|
||||
/* return quality of food; the lower the better */
|
||||
|
||||
26
src/dokick.c
26
src/dokick.c
@@ -983,14 +983,36 @@ dokick()
|
||||
if(!rn2(3)) goto ouch;
|
||||
/* make metal boots rust */
|
||||
if(uarmf && rn2(3))
|
||||
if (!rust_dmg(uarmf, "metal boots", 1, FALSE, &youmonst)) {
|
||||
if (water_damage(uarmf, "metal boots", TRUE) ==
|
||||
ER_NOTHING) {
|
||||
Your("boots get wet.");
|
||||
/* could cause short-lived fumbling here */
|
||||
}
|
||||
exercise(A_DEX, TRUE);
|
||||
return(1);
|
||||
}
|
||||
if(IS_GRAVE(maploc->typ) || maploc->typ == IRONBARS)
|
||||
if (IS_GRAVE(maploc->typ)) {
|
||||
if(Levitation) goto dumb;
|
||||
if (rn2(4)) goto ouch;
|
||||
exercise(A_WIS, FALSE);
|
||||
if (Role_if(PM_ARCHEOLOGIST) ||
|
||||
Role_if(PM_SAMURAI) ||
|
||||
((u.ualign.type == A_LAWFUL) && (u.ualign.record > -10))) {
|
||||
adjalign(-sgn(u.ualign.type));
|
||||
}
|
||||
maploc->typ = ROOM;
|
||||
maploc->doormask = 0;
|
||||
(void) mksobj_at(ROCK, x,y, TRUE, FALSE);
|
||||
del_engr_at(x,y);
|
||||
if (Blind)
|
||||
pline("Crack! %s broke!", Something);
|
||||
else {
|
||||
pline_The("headstone topples over and breaks!");
|
||||
newsym(x,y);
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
if(maploc->typ == IRONBARS)
|
||||
goto ouch;
|
||||
if(IS_TREE(maploc->typ)) {
|
||||
struct obj *treefruit;
|
||||
|
||||
@@ -693,6 +693,7 @@ hurtle(dx, dy, range, verbose)
|
||||
if(!range || (!dx && !dy) || u.ustuck) return; /* paranoia */
|
||||
|
||||
nomul(-range);
|
||||
multi_reason = "moving through the air";
|
||||
nomovemsg = ""; /* it just happens */
|
||||
if (verbose)
|
||||
You("%s in the opposite direction.", range > 1 ? "hurtle" : "float");
|
||||
|
||||
@@ -211,6 +211,7 @@ const struct symdef defsyms[MAXPCHARS] = {
|
||||
{'#', "", C(HI_ZAP)},
|
||||
{'@', "", C(HI_ZAP)},
|
||||
{'*', "", C(HI_ZAP)},
|
||||
{'#', "poison cloud", C(CLR_BRIGHT_GREEN)}, /* [part of] a poison cloud */
|
||||
{'/', "", C(CLR_GREEN)}, /* swallow top left */
|
||||
{'-', "", C(CLR_GREEN)}, /* swallow top center */
|
||||
{'\\', "", C(CLR_GREEN)}, /* swallow top right */
|
||||
@@ -614,6 +615,7 @@ struct symparse loadsyms[] = {
|
||||
{SYM_PCHAR, S_hcdbridge, "S_hcdbridge"},
|
||||
{SYM_PCHAR, S_air, "S_air"},
|
||||
{SYM_PCHAR, S_cloud, "S_cloud"},
|
||||
{SYM_PCHAR, S_poisoncloud, "S_poisoncloud"},
|
||||
{SYM_PCHAR, S_water, "S_water"},
|
||||
{SYM_PCHAR, S_arrow_trap, "S_arrow_trap"},
|
||||
{SYM_PCHAR, S_dart_trap, "S_dart_trap"},
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 dungeon.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 dungeon.c $Date: 2012/04/14 08:31:05 $ $Revision: 1.34 $ */
|
||||
/* NetHack 3.5 dungeon.c $NHDT-Date: 1426465434 2015/03/16 00:23:54 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.39 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -81,7 +80,7 @@ dumpit()
|
||||
s_level *x;
|
||||
branch *br;
|
||||
|
||||
if (!showdebug()) return;
|
||||
if (!showdebug(__FILE__)) return;
|
||||
|
||||
for(i = 0; i < n_dgns; i++) {
|
||||
fprintf(stderr, "\n#%d \"%s\" (%s):\n", i,
|
||||
@@ -672,6 +671,8 @@ struct level_map {
|
||||
{ "wizard1", &wiz1_level },
|
||||
{ "wizard2", &wiz2_level },
|
||||
{ "wizard3", &wiz3_level },
|
||||
{ "minend", &mineend_level },
|
||||
{ "soko1", &sokoend_level },
|
||||
{ X_START, &qstart_level },
|
||||
{ X_LOCATE, &qlocate_level },
|
||||
{ X_GOAL, &nemesis_level },
|
||||
|
||||
95
src/eat.c
95
src/eat.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 eat.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 eat.c $Date: 2012/02/01 00:49:16 $ $Revision: 1.116 $ */
|
||||
/* NetHack 3.5 eat.c $NHDT-Date: 1426465435 2015/03/16 00:23:55 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.123 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -284,11 +283,11 @@ recalc_wt()
|
||||
{
|
||||
struct obj *piece = context.victual.piece;
|
||||
|
||||
debugpline("Old weight = %d", piece->owt);
|
||||
debugpline("Used time = %d, Req'd time = %d",
|
||||
context.victual.usedtime, context.victual.reqtime);
|
||||
debugpline1("Old weight = %d", piece->owt);
|
||||
debugpline2("Used time = %d, Req'd time = %d",
|
||||
context.victual.usedtime, context.victual.reqtime);
|
||||
piece->owt = weight(piece);
|
||||
debugpline("New weight = %d", piece->owt);
|
||||
debugpline1("New weight = %d", piece->owt);
|
||||
}
|
||||
|
||||
void
|
||||
@@ -298,7 +297,7 @@ reset_eat() /* called when eating interrupted by an event */
|
||||
* the round is spent eating.
|
||||
*/
|
||||
if(context.victual.eating && !context.victual.doreset) {
|
||||
debugpline("reset_eat...");
|
||||
debugpline0("reset_eat...");
|
||||
context.victual.doreset = TRUE;
|
||||
}
|
||||
return;
|
||||
@@ -313,7 +312,7 @@ register struct obj *otmp;
|
||||
(void) splitobj(otmp, otmp->quan - 1L);
|
||||
else
|
||||
otmp = splitobj(otmp, 1L);
|
||||
debugpline("split object,");
|
||||
debugpline0("split object,");
|
||||
}
|
||||
|
||||
if (!otmp->oeaten) {
|
||||
@@ -374,7 +373,7 @@ struct obj *old_obj, *new_obj;
|
||||
STATIC_OVL void
|
||||
do_reset_eat()
|
||||
{
|
||||
debugpline("do_reset_eat...");
|
||||
debugpline0("do_reset_eat...");
|
||||
if (context.victual.piece) {
|
||||
context.victual.o_id = 0;
|
||||
context.victual.piece = touchfood(context.victual.piece);
|
||||
@@ -659,6 +658,8 @@ register int pm;
|
||||
mons[pm].mname);
|
||||
killer.format = NO_KILLER_PREFIX;
|
||||
done(DIED);
|
||||
/* life-saving needed to reach here */
|
||||
exercise(A_WIS, FALSE);
|
||||
/* It so happens that since we know these monsters */
|
||||
/* cannot appear in tins, context.victual.piece will always */
|
||||
/* be what we want, which is not generally true. */
|
||||
@@ -715,39 +716,39 @@ register struct permonst *ptr;
|
||||
switch (type) {
|
||||
case FIRE_RES:
|
||||
res = (ptr->mconveys & MR_FIRE) != 0;
|
||||
if (res) debugpline("can get fire resistance");
|
||||
if (res) debugpline0("can get fire resistance");
|
||||
break;
|
||||
case SLEEP_RES:
|
||||
res = (ptr->mconveys & MR_SLEEP) != 0;
|
||||
if (res) debugpline("can get sleep resistance");
|
||||
if (res) debugpline0("can get sleep resistance");
|
||||
break;
|
||||
case COLD_RES:
|
||||
res = (ptr->mconveys & MR_COLD) != 0;
|
||||
if (res) debugpline("can get cold resistance");
|
||||
if (res) debugpline0("can get cold resistance");
|
||||
break;
|
||||
case DISINT_RES:
|
||||
res = (ptr->mconveys & MR_DISINT) != 0;
|
||||
if (res) debugpline("can get disintegration resistance");
|
||||
if (res) debugpline0("can get disintegration resistance");
|
||||
break;
|
||||
case SHOCK_RES: /* shock (electricity) resistance */
|
||||
res = (ptr->mconveys & MR_ELEC) != 0;
|
||||
if (res) debugpline("can get shock resistance");
|
||||
if (res) debugpline0("can get shock resistance");
|
||||
break;
|
||||
case POISON_RES:
|
||||
res = (ptr->mconveys & MR_POISON) != 0;
|
||||
if (res) debugpline("can get poison resistance");
|
||||
if (res) debugpline0("can get poison resistance");
|
||||
break;
|
||||
case TELEPORT:
|
||||
res = can_teleport(ptr);
|
||||
if (res) debugpline("can get teleport");
|
||||
if (res) debugpline0("can get teleport");
|
||||
break;
|
||||
case TELEPORT_CONTROL:
|
||||
res = control_teleport(ptr);
|
||||
if (res) debugpline("can get teleport control");
|
||||
if (res) debugpline0("can get teleport control");
|
||||
break;
|
||||
case TELEPAT:
|
||||
res = telepathic(ptr);
|
||||
if (res) debugpline("can get telepathy");
|
||||
if (res) debugpline0("can get telepathy");
|
||||
break;
|
||||
default:
|
||||
/* res stays 0 */
|
||||
@@ -766,7 +767,7 @@ register struct permonst *ptr;
|
||||
{
|
||||
register int chance;
|
||||
|
||||
debugpline("Attempting to give intrinsic %d", type);
|
||||
debugpline1("Attempting to give intrinsic %d", type);
|
||||
/* some intrinsics are easier to get than others */
|
||||
switch (type) {
|
||||
case POISON_RES:
|
||||
@@ -795,7 +796,7 @@ register struct permonst *ptr;
|
||||
|
||||
switch (type) {
|
||||
case FIRE_RES:
|
||||
debugpline("Trying to give fire resistance");
|
||||
debugpline0("Trying to give fire resistance");
|
||||
if(!(HFire_resistance & FROMOUTSIDE)) {
|
||||
You(Hallucination ? "be chillin'." :
|
||||
"feel a momentary chill.");
|
||||
@@ -803,21 +804,21 @@ register struct permonst *ptr;
|
||||
}
|
||||
break;
|
||||
case SLEEP_RES:
|
||||
debugpline("Trying to give sleep resistance");
|
||||
debugpline0("Trying to give sleep resistance");
|
||||
if(!(HSleep_resistance & FROMOUTSIDE)) {
|
||||
You_feel("wide awake.");
|
||||
HSleep_resistance |= FROMOUTSIDE;
|
||||
}
|
||||
break;
|
||||
case COLD_RES:
|
||||
debugpline("Trying to give cold resistance");
|
||||
debugpline0("Trying to give cold resistance");
|
||||
if(!(HCold_resistance & FROMOUTSIDE)) {
|
||||
You_feel("full of hot air.");
|
||||
HCold_resistance |= FROMOUTSIDE;
|
||||
}
|
||||
break;
|
||||
case DISINT_RES:
|
||||
debugpline("Trying to give disintegration resistance");
|
||||
debugpline0("Trying to give disintegration resistance");
|
||||
if(!(HDisint_resistance & FROMOUTSIDE)) {
|
||||
You_feel(Hallucination ?
|
||||
"totally together, man." :
|
||||
@@ -826,7 +827,7 @@ register struct permonst *ptr;
|
||||
}
|
||||
break;
|
||||
case SHOCK_RES: /* shock (electricity) resistance */
|
||||
debugpline("Trying to give shock resistance");
|
||||
debugpline0("Trying to give shock resistance");
|
||||
if(!(HShock_resistance & FROMOUTSIDE)) {
|
||||
if (Hallucination)
|
||||
You_feel("grounded in reality.");
|
||||
@@ -836,7 +837,7 @@ register struct permonst *ptr;
|
||||
}
|
||||
break;
|
||||
case POISON_RES:
|
||||
debugpline("Trying to give poison resistance");
|
||||
debugpline0("Trying to give poison resistance");
|
||||
if(!(HPoison_resistance & FROMOUTSIDE)) {
|
||||
You_feel(Poison_resistance ?
|
||||
"especially healthy." : "healthy.");
|
||||
@@ -844,7 +845,7 @@ register struct permonst *ptr;
|
||||
}
|
||||
break;
|
||||
case TELEPORT:
|
||||
debugpline("Trying to give teleport");
|
||||
debugpline0("Trying to give teleport");
|
||||
if(!(HTeleportation & FROMOUTSIDE)) {
|
||||
You_feel(Hallucination ? "diffuse." :
|
||||
"very jumpy.");
|
||||
@@ -852,7 +853,7 @@ register struct permonst *ptr;
|
||||
}
|
||||
break;
|
||||
case TELEPORT_CONTROL:
|
||||
debugpline("Trying to give teleport control");
|
||||
debugpline0("Trying to give teleport control");
|
||||
if(!(HTeleport_control & FROMOUTSIDE)) {
|
||||
You_feel(Hallucination ?
|
||||
"centered in your personal space." :
|
||||
@@ -861,7 +862,7 @@ register struct permonst *ptr;
|
||||
}
|
||||
break;
|
||||
case TELEPAT:
|
||||
debugpline("Trying to give telepathy");
|
||||
debugpline0("Trying to give telepathy");
|
||||
if(!(HTelepat & FROMOUTSIDE)) {
|
||||
You_feel(Hallucination ?
|
||||
"in touch with the cosmos." :
|
||||
@@ -872,7 +873,7 @@ register struct permonst *ptr;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
debugpline("Tried to give an impossible intrinsic");
|
||||
debugpline0("Tried to give an impossible intrinsic");
|
||||
break;
|
||||
}
|
||||
}
|
||||
@@ -960,6 +961,7 @@ register int pm;
|
||||
/* A pile of gold can't ride. */
|
||||
if (u.usteed) dismount_steed(DISMOUNT_FELL);
|
||||
nomul(-tmp);
|
||||
multi_reason = "pretending to be a pile of gold";
|
||||
Sprintf(buf, Hallucination ?
|
||||
"You suddenly dread being peeled and mimic %s again!" :
|
||||
"You now prefer mimicking %s again.",
|
||||
@@ -1003,7 +1005,7 @@ register int pm;
|
||||
case PM_DISENCHANTER:
|
||||
/* picks an intrinsic at random and removes it; there's
|
||||
no feedback if hero already lacks the chosen ability */
|
||||
debugpline("using attrcurse to strip an intrinsic");
|
||||
debugpline0("using attrcurse to strip an intrinsic");
|
||||
attrcurse();
|
||||
break;
|
||||
case PM_MIND_FLAYER:
|
||||
@@ -1043,7 +1045,7 @@ register int pm;
|
||||
if (conveys_STR) {
|
||||
count = 1;
|
||||
tmp = -1; /* use -1 as fake prop index for STR */
|
||||
debugpline("\"Intrinsic\" strength, %d", tmp);
|
||||
debugpline1("\"Intrinsic\" strength, %d", tmp);
|
||||
}
|
||||
for (i = 1; i <= LAST_PROP; i++) {
|
||||
if (!intrinsic_possible(i, ptr)) continue;
|
||||
@@ -1053,7 +1055,7 @@ register int pm;
|
||||
of keeping the old choice (note that 1 in 1 and
|
||||
0 in 1 are what we want for the first candidate) */
|
||||
if (!rn2(count)) {
|
||||
debugpline("Intrinsic %d replacing %d", i, tmp);
|
||||
debugpline2("Intrinsic %d replacing %d", i, tmp);
|
||||
tmp = i;
|
||||
}
|
||||
}
|
||||
@@ -1250,7 +1252,7 @@ const char *mesg;
|
||||
what = "chicken";
|
||||
which = 1; /* suppress pluralization */
|
||||
} else if (Hallucination) {
|
||||
what = rndmonnam();
|
||||
what = rndmonnam(NULL);
|
||||
} else {
|
||||
what = mons[mnum].mname;
|
||||
if (the_unique_pm(&mons[mnum])) which = 2;
|
||||
@@ -1477,6 +1479,7 @@ struct obj *obj;
|
||||
pline_The("world spins and %s %s.", what, where);
|
||||
incr_itimeout(&HDeaf, duration);
|
||||
nomul(-duration);
|
||||
multi_reason = "unconscious from rotten food";
|
||||
nomovemsg = "You are conscious again.";
|
||||
afternmv = Hear_again;
|
||||
return(1);
|
||||
@@ -1570,6 +1573,8 @@ eatcorpse(otmp) /* called when a corpse is selected as food */
|
||||
} else if ((mnum == PM_COCKATRICE || mnum == PM_CHICKATRICE) &&
|
||||
(Stone_resistance || Hallucination)) {
|
||||
pline("This tastes just like chicken!");
|
||||
} else if (mnum == PM_FLOATING_EYE && u.umonnum == PM_RAVEN) {
|
||||
You("peck the eyeball with delight.");
|
||||
} else {
|
||||
/* [is this right? omnivores end up always disliking the taste] */
|
||||
boolean yummy = (vegan(&mons[mnum]) ?
|
||||
@@ -1597,11 +1602,12 @@ start_eating(otmp) /* called as you start to eat */
|
||||
{
|
||||
const char *old_nomovemsg, *save_nomovemsg;
|
||||
|
||||
debugpline("start_eating: %p (victual = %p)", otmp, context.victual.piece);
|
||||
debugpline("reqtime = %d", context.victual.reqtime);
|
||||
debugpline("(original reqtime = %d)", objects[otmp->otyp].oc_delay);
|
||||
debugpline("nmod = %d", context.victual.nmod);
|
||||
debugpline("oeaten = %d", otmp->oeaten);
|
||||
debugpline2("start_eating: %lx (victual = %lx)",
|
||||
(unsigned long)otmp, (unsigned long)context.victual.piece);
|
||||
debugpline1("reqtime = %d", context.victual.reqtime);
|
||||
debugpline1("(original reqtime = %d)", objects[otmp->otyp].oc_delay);
|
||||
debugpline1("nmod = %d", context.victual.nmod);
|
||||
debugpline1("oeaten = %d", otmp->oeaten);
|
||||
context.victual.fullwarn = context.victual.doreset = FALSE;
|
||||
context.victual.eating = TRUE;
|
||||
|
||||
@@ -2441,11 +2447,14 @@ doeat() /* generic "eat" command funtion (see cmd.c) */
|
||||
if (otmp->otyp == CORPSE) basenutrit = mons[otmp->corpsenm].cnutrit;
|
||||
else basenutrit = objects[otmp->otyp].oc_nutrition;
|
||||
|
||||
debugpline("before rounddiv: context.victual.reqtime == %d", context.victual.reqtime);
|
||||
debugpline("oeaten == %d, basenutrit == %d", otmp->oeaten, basenutrit);
|
||||
debugpline1("before rounddiv: context.victual.reqtime == %d",
|
||||
context.victual.reqtime);
|
||||
debugpline2("oeaten == %d, basenutrit == %d",
|
||||
otmp->oeaten, basenutrit);
|
||||
context.victual.reqtime = (basenutrit == 0 ? 0 :
|
||||
rounddiv(context.victual.reqtime * (long)otmp->oeaten, basenutrit));
|
||||
debugpline("after rounddiv: context.victual.reqtime == %d", context.victual.reqtime);
|
||||
debugpline1("after rounddiv: context.victual.reqtime == %d",
|
||||
context.victual.reqtime);
|
||||
/* calculate the modulo value (nutrit. units per round eating)
|
||||
* note: this isn't exact - you actually lose a little nutrition
|
||||
* due to this method.
|
||||
@@ -2547,7 +2556,7 @@ register int num;
|
||||
{
|
||||
/* See comments in newuhs() for discussion on force_save_hs */
|
||||
boolean iseating = (occupation == eatfood) || force_save_hs;
|
||||
debugpline("lesshungry(%d)", num);
|
||||
debugpline1("lesshungry(%d)", num);
|
||||
u.uhunger += num;
|
||||
if(u.uhunger >= 2000) {
|
||||
if (!iseating || context.victual.canchoke) {
|
||||
@@ -2671,6 +2680,7 @@ boolean incr;
|
||||
if (!Levitation) selftouch("Falling, you");
|
||||
incr_itimeout(&HDeaf, duration);
|
||||
nomul(-duration);
|
||||
multi_reason = "fainted from lack of food";
|
||||
nomovemsg = "You regain consciousness.";
|
||||
afternmv = unfaint;
|
||||
newhs = FAINTED;
|
||||
@@ -2847,6 +2857,7 @@ vomit() /* A good idea from David Neves */
|
||||
else
|
||||
make_sick(0L, (char *)0, TRUE, SICK_VOMITABLE);
|
||||
nomul(-2);
|
||||
multi_reason = "vomiting";
|
||||
nomovemsg = You_can_move_again;
|
||||
}
|
||||
|
||||
|
||||
11
src/end.c
11
src/end.c
@@ -1,5 +1,4 @@
|
||||
/* NetHack 3.5 end.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
|
||||
/* NetHack 3.5 end.c $Date: 2012/04/09 02:56:30 $ $Revision: 1.79 $ */
|
||||
/* NetHack 3.5 end.c $NHDT-Date: 1425319883 2015/03/02 18:11:23 $ $NHDT-Branch: master $:$NHDT-Revision: 1.81 $ */
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -465,7 +464,12 @@ int how;
|
||||
Sprintf(eos(buf), " called %s", MNAME(mtmp));
|
||||
}
|
||||
|
||||
if (multi) Strcat(buf, ", while helpless");
|
||||
if (multi) {
|
||||
if (multi_reason)
|
||||
Sprintf(eos(buf), ", while %s", multi_reason);
|
||||
else
|
||||
Strcat(buf, ", while helpless");
|
||||
}
|
||||
Strcpy(killer.name, buf);
|
||||
if (mptr->mlet == S_WRAITH)
|
||||
u.ugrave_arise = PM_WRAITH;
|
||||
@@ -911,6 +915,7 @@ die:
|
||||
topten figure it out separately and possibly getting different
|
||||
time or even day if player is slow responding to --More-- */
|
||||
endtime = getnow();
|
||||
urealtime.realtime += (endtime - urealtime.restored);
|
||||
|
||||
/* Sometimes you die on the first move. Life's not fair.
|
||||
* On those rare occasions you get hosed immediately, go out
|
||||
|
||||
@@ -9,33 +9,6 @@
|
||||
|
||||
STATIC_VAR NEARDATA struct engr *head_engr;
|
||||
|
||||
/* random engravings */
|
||||
static const char *random_mesg[] = {
|
||||
"Elbereth",
|
||||
/* trap engravings */
|
||||
"Vlad was here", "ad aerarium",
|
||||
/* take-offs and other famous engravings */
|
||||
"Owlbreath", "Galadriel",
|
||||
"Kilroy was here",
|
||||
"A.S. ->", "<- A.S.", /* Journey to the Center of the Earth */
|
||||
"You won't get it up the steps", /* Adventure */
|
||||
"Lasciate ogni speranza o voi ch'entrate.", /* Inferno */
|
||||
"Well Come", /* Prisoner */
|
||||
"We apologize for the inconvenience.", /* So Long... */
|
||||
"See you next Wednesday", /* Thriller */
|
||||
"notary sojak", /* Smokey Stover */
|
||||
"For a good time call 8?7-5309",
|
||||
"Please don't feed the animals.", /* Various zoos around the world */
|
||||
"Madam, in Eden, I'm Adam.", /* A palindrome */
|
||||
"Two thumbs up!", /* Siskel & Ebert */
|
||||
"Hello, World!", /* The First C Program */
|
||||
#ifdef MAIL
|
||||
"You've got mail!", /* AOL */
|
||||
#endif
|
||||
"As if!", /* Clueless */
|
||||
"BAD WOLF", /* 200x incarnation of Dr.Who */
|
||||
};
|
||||
|
||||
char *
|
||||
random_engraving(outbuf)
|
||||
char *outbuf;
|
||||
@@ -44,8 +17,10 @@ char *outbuf;
|
||||
|
||||
/* a random engraving may come from the "rumors" file,
|
||||
or from the list above */
|
||||
if (!rn2(4) || !(rumor = getrumor(0, outbuf, TRUE)) || !*rumor)
|
||||
Strcpy(outbuf, random_mesg[rn2(SIZE(random_mesg))]);
|
||||
if (!rn2(4) || !(rumor = getrumor(0, outbuf, TRUE)) || !*rumor) {
|
||||
char buf[BUFSZ];
|
||||
Strcpy(outbuf, get_rnd_text(ENGRAVEFILE, buf));
|
||||
}
|
||||
|
||||
wipeout_text(outbuf, (int)(strlen(outbuf) / 4), 0);
|
||||
return outbuf;
|
||||
@@ -1232,39 +1207,6 @@ struct engr *ep;
|
||||
}
|
||||
|
||||
|
||||
/* Epitaphs for random headstones */
|
||||
static const char *epitaphs[] = {
|
||||
"Rest in peace",
|
||||
"R.I.P.",
|
||||
"Rest In Pieces",
|
||||
"Note -- there are NO valuable items in this grave",
|
||||
"1994-1995. The Longest-Lived Hacker Ever",
|
||||
"The Grave of the Unknown Hacker",
|
||||
"We weren't sure who this was, but we buried him here anyway",
|
||||
"Sparky -- he was a very good dog",
|
||||
"Beware of Electric Third Rail",
|
||||
"Made in Taiwan",
|
||||
"Og friend. Og good dude. Og died. Og now food",
|
||||
"Beetlejuice Beetlejuice Beetlejuice",
|
||||
"Look out below!",
|
||||
"Please don't dig me up. I'm perfectly happy down here. -- Resident",
|
||||
"Postman, please note forwarding address: Gehennom, Asmodeus's Fortress, fifth lemure on the left",
|
||||
"Mary had a little lamb/Its fleece was white as snow/When Mary was in trouble/The lamb was first to go",
|
||||
"Be careful, or this could happen to you!",
|
||||
"Soon you'll join this fellow in hell! -- the Wizard of Yendor",
|
||||
"Caution! This grave contains toxic waste",
|
||||
"Sum quod eris",
|
||||
"Here lies an Atheist, all dressed up and no place to go",
|
||||
"Here lies Ezekiel, age 102. The good die young.",
|
||||
"Here lies my wife: Here let her lie! Now she's at rest and so am I.",
|
||||
"Here lies Johnny Yeast. Pardon me for not rising.",
|
||||
"He always lied while on the earth and now he's lying in it",
|
||||
"I made an ash of myself",
|
||||
"Soon ripe. Soon rotten. Soon gone. But not forgotten.",
|
||||
"Here lies the body of Jonathan Blake. Stepped on the gas instead of the brake.",
|
||||
"Go away!"
|
||||
};
|
||||
|
||||
/* Create a headstone at the given location.
|
||||
* The caller is responsible for newsym(x, y).
|
||||
*/
|
||||
@@ -1280,9 +1222,12 @@ const char *str;
|
||||
levl[x][y].typ = GRAVE;
|
||||
|
||||
/* Engrave the headstone */
|
||||
if (!str) str = epitaphs[rn2(SIZE(epitaphs))];
|
||||
del_engr_at(x, y);
|
||||
make_engr_at(x, y, str, 0L, HEADSTONE);
|
||||
if (str) make_engr_at(x, y, str, 0L, HEADSTONE);
|
||||
else {
|
||||
char buf[BUFSZ];
|
||||
make_engr_at(x, y, get_rnd_text(EPITAPHFILE, buf), 0L, HEADSTONE);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -283,7 +283,7 @@ int expltype;
|
||||
so avoid any which begins with a capital letter) */
|
||||
do {
|
||||
Sprintf(hallu_buf, "%s explosion",
|
||||
s_suffix(rndmonnam()));
|
||||
s_suffix(rndmonnam(NULL)));
|
||||
} while (*hallu_buf != lowc(*hallu_buf));
|
||||
str = hallu_buf;
|
||||
}
|
||||
@@ -365,7 +365,7 @@ int expltype;
|
||||
if (do_hallu) { /* (see explanation above) */
|
||||
do {
|
||||
Sprintf(hallu_buf, "%s explosion",
|
||||
s_suffix(rndmonnam()));
|
||||
s_suffix(rndmonnam(NULL)));
|
||||
} while (*hallu_buf != lowc(*hallu_buf));
|
||||
str = hallu_buf;
|
||||
}
|
||||
|
||||
230
src/files.c
230
src/files.c
@@ -1,5 +1,5 @@
|
||||
/* NetHack 3.5 files.c $NHDT-Date: 1425081976 2015/02/28 00:06:16 $ $NHDT-Branch: (no branch, rebasing scshunt-unconditionals) $:$NHDT-Revision: 1.127 $ */
|
||||
/* NetHack 3.5 files.c $Date: 2012/03/10 02:49:08 $ $Revision: 1.124 $ */
|
||||
/* NetHack 3.5 files.c $NHDT-Date: 1426969026 2015/03/21 20:17:06 $ $NHDT-Branch: master $:$NHDT-Revision: 1.137 $ */
|
||||
|
||||
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#if !defined(MAC) && !defined(O_WRONLY) && !defined(AZTEC_C)
|
||||
#if (!defined(MAC) && !defined(O_WRONLY) && !defined(AZTEC_C)) || defined(USE_FCNTL)
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
@@ -185,7 +185,9 @@ STATIC_DCL void FDECL(docompress_file, (const char *,BOOLEAN_P));
|
||||
#if defined(ZLIB_COMP)
|
||||
STATIC_DCL boolean FDECL(make_compressed_name, (const char *, char *));
|
||||
#endif
|
||||
#ifndef USE_FCNTL
|
||||
STATIC_DCL char *FDECL(make_lockname, (const char *,char *));
|
||||
#endif
|
||||
STATIC_DCL FILE *FDECL(fopen_config_file, (const char *, int));
|
||||
STATIC_DCL int FDECL(get_uchars,
|
||||
(FILE *,char *,char *,uchar *,BOOLEAN_P,int,const char *));
|
||||
@@ -360,7 +362,9 @@ char *reasonbuf; /* reasonbuf must be at least BUFSZ, supplied by caller */
|
||||
#if defined(NOCWD_ASSUMPTIONS)
|
||||
for (prefcnt = 1; prefcnt < PREFIX_COUNT; prefcnt++) {
|
||||
/* don't test writing to configdir or datadir; they're readonly */
|
||||
if (prefcnt == CONFIGPREFIX || prefcnt == DATAPREFIX) continue;
|
||||
if (prefcnt == SYSCONFPREFIX ||
|
||||
prefcnt == CONFIGPREFIX ||
|
||||
prefcnt == DATAPREFIX) continue;
|
||||
filename = fqname("validate", prefcnt, 3);
|
||||
if ((fp = fopen(filename, "w"))) {
|
||||
fclose(fp);
|
||||
@@ -1544,12 +1548,16 @@ boolean uncomp;
|
||||
|
||||
static int nesting = 0;
|
||||
|
||||
#ifdef NO_FILE_LINKS /* implies UNIX */
|
||||
#if defined(NO_FILE_LINKS) || defined(USE_FCNTL) /* implies UNIX */
|
||||
static int lockfd; /* for lock_file() to pass to unlock_file() */
|
||||
#endif
|
||||
#ifdef USE_FCNTL
|
||||
struct flock sflock; /* for unlocking, same as above */
|
||||
#endif
|
||||
|
||||
#define HUP if (!program_state.done_hup)
|
||||
|
||||
#ifndef USE_FCNTL
|
||||
STATIC_OVL char *
|
||||
make_lockname(filename, lockname)
|
||||
const char *filename;
|
||||
@@ -1581,6 +1589,7 @@ char *lockname;
|
||||
return (char*)0;
|
||||
#endif
|
||||
}
|
||||
#endif /* !USE_FCNTL */
|
||||
|
||||
/* lock a file */
|
||||
boolean
|
||||
@@ -1592,8 +1601,10 @@ int retryct;
|
||||
#if defined(PRAGMA_UNUSED) && !(defined(UNIX) || defined(VMS)) && !(defined(AMIGA) || defined(WIN32) || defined(MSDOS))
|
||||
# pragma unused(retryct)
|
||||
#endif
|
||||
#ifndef USE_FCNTL
|
||||
char locknambuf[BUFSZ];
|
||||
const char *lockname;
|
||||
#endif
|
||||
|
||||
nesting++;
|
||||
if (nesting > 1) {
|
||||
@@ -1601,18 +1612,50 @@ int retryct;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#ifndef USE_FCNTL
|
||||
lockname = make_lockname(filename, locknambuf);
|
||||
filename = fqname(filename, whichprefix, 0);
|
||||
#ifndef NO_FILE_LINKS /* LOCKDIR should be subsumed by LOCKPREFIX */
|
||||
lockname = fqname(lockname, LOCKPREFIX, 2);
|
||||
#endif
|
||||
#endif
|
||||
filename = fqname(filename, whichprefix, 0);
|
||||
#ifdef USE_FCNTL
|
||||
lockfd = open(filename,O_RDWR);
|
||||
if (lockfd == -1) {
|
||||
HUP raw_printf("Cannot open file %s. This is a program bug.",
|
||||
filename);
|
||||
}
|
||||
sflock.l_type = F_WRLCK;
|
||||
sflock.l_whence = SEEK_SET;
|
||||
sflock.l_start = 0;
|
||||
sflock.l_len = 0;
|
||||
#endif
|
||||
|
||||
#if defined(UNIX) || defined(VMS)
|
||||
# ifdef USE_FCNTL
|
||||
while (fcntl(lockfd,F_SETLK,&sflock) == -1) {
|
||||
# else
|
||||
# ifdef NO_FILE_LINKS
|
||||
while ((lockfd = open(lockname, O_RDWR|O_CREAT|O_EXCL, 0666)) == -1) {
|
||||
# else
|
||||
while (link(filename, lockname) == -1) {
|
||||
# endif
|
||||
# endif
|
||||
|
||||
#ifdef USE_FCNTL
|
||||
if (retryct--) {
|
||||
HUP raw_printf(
|
||||
"Waiting for release of fcntl lock on %s. (%d retries left).",
|
||||
filename, retryct);
|
||||
sleep(1);
|
||||
} else {
|
||||
HUP (void) raw_print("I give up. Sorry.");
|
||||
HUP raw_printf("Some other process has an unnatural grip on %s.",
|
||||
filename);
|
||||
nesting--;
|
||||
return FALSE;
|
||||
}
|
||||
#else
|
||||
register int errnosv = errno;
|
||||
|
||||
switch (errnosv) { /* George Barbanis */
|
||||
@@ -1667,11 +1710,12 @@ int retryct;
|
||||
nesting--;
|
||||
return FALSE;
|
||||
}
|
||||
#endif /* USE_FCNTL */
|
||||
|
||||
}
|
||||
#endif /* UNIX || VMS */
|
||||
|
||||
#if defined(AMIGA) || defined(WIN32) || defined(MSDOS)
|
||||
#if (defined(AMIGA) || defined(WIN32) || defined(MSDOS)) && !defined(USE_FCNTL)
|
||||
# ifdef AMIGA
|
||||
#define OPENFAILURE(fd) (!fd)
|
||||
lockptr = 0;
|
||||
@@ -1718,10 +1762,19 @@ void
|
||||
unlock_file(filename)
|
||||
const char *filename;
|
||||
{
|
||||
#ifndef USE_FCNTL
|
||||
char locknambuf[BUFSZ];
|
||||
const char *lockname;
|
||||
#endif
|
||||
|
||||
if (nesting == 1) {
|
||||
#ifdef USE_FCNTL
|
||||
sflock.l_type = F_UNLCK;
|
||||
if (fcntl(lockfd,F_SETLK,&sflock) == -1) {
|
||||
HUP raw_printf("Can't remove fcntl lock on %s.", filename);
|
||||
(void) close(lockfd);
|
||||
}
|
||||
#else
|
||||
lockname = make_lockname(filename, locknambuf);
|
||||
#ifndef NO_FILE_LINKS /* LOCKDIR should be subsumed by LOCKPREFIX */
|
||||
lockname = fqname(lockname, LOCKPREFIX, 2);
|
||||
@@ -1741,6 +1794,7 @@ const char *filename;
|
||||
DeleteFile(lockname);
|
||||
lockptr = 0;
|
||||
#endif /* AMIGA || WIN32 || MSDOS */
|
||||
#endif /* USE_FCNTL */
|
||||
}
|
||||
|
||||
nesting--;
|
||||
@@ -1766,6 +1820,8 @@ const char *configfile =
|
||||
# endif
|
||||
#endif
|
||||
|
||||
/* used for messaging */
|
||||
char lastconfigfile[BUFSZ];
|
||||
|
||||
#ifdef MSDOS
|
||||
/* conflict with speed-dial under windows
|
||||
@@ -1812,8 +1868,15 @@ int src;
|
||||
/* fall through to standard names */
|
||||
} else
|
||||
#endif
|
||||
if ((fp = fopenp(filename, "r")) != (FILE *)0) {
|
||||
configfile = filename;
|
||||
#ifdef PREFIXES_IN_USE
|
||||
if (src == SET_IN_SYS) {
|
||||
(void) strncpy(lastconfigfile,
|
||||
fqname(filename, SYSCONFPREFIX, 0), BUFSZ-1);
|
||||
} else
|
||||
#endif
|
||||
(void) strncpy(lastconfigfile, filename, BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
if ((fp = fopenp(lastconfigfile, "r")) != (FILE *)0) {
|
||||
return(fp);
|
||||
#if defined(UNIX) || defined(VMS)
|
||||
} else {
|
||||
@@ -1827,24 +1890,32 @@ int src;
|
||||
}
|
||||
|
||||
#if defined(MICRO) || defined(MAC) || defined(__BEOS__) || defined(WIN32)
|
||||
if ((fp = fopenp(fqname(configfile, CONFIGPREFIX, 0), "r"))
|
||||
!= (FILE *)0)
|
||||
(void) strncpy(lastconfigfile,
|
||||
fqname(configfile, CONFIGPREFIX, 0), BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
if ((fp = fopenp(lastconfigfile, "r")) != (FILE *)0) {
|
||||
return(fp);
|
||||
}
|
||||
# ifdef MSDOS
|
||||
else if ((fp = fopenp(fqname(backward_compat_configfile,
|
||||
CONFIGPREFIX, 0), "r")) != (FILE *)0)
|
||||
(void) strncpy(lastconfigfile,
|
||||
fqname(backward_compat_configfile, CONFIGPREFIX, 0),
|
||||
BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
else if ((fp = fopenp(lastconfigfile, "r")) != (FILE *)0)
|
||||
return(fp);
|
||||
# endif
|
||||
#else
|
||||
/* constructed full path names don't need fqname() */
|
||||
# ifdef VMS
|
||||
if ((fp = fopenp(fqname("nethackini", CONFIGPREFIX, 0), "r"))
|
||||
!= (FILE *)0) {
|
||||
configfile = "nethackini";
|
||||
(void) strncpy(lastconfigfile, fqname("nethackini", CONFIGPREFIX, 0),
|
||||
BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
if ((fp = fopenp(lastconfigfile, "r")) != (FILE *)0) {
|
||||
return(fp);
|
||||
}
|
||||
if ((fp = fopenp("sys$login:nethack.ini", "r")) != (FILE *)0) {
|
||||
configfile = "nethack.ini";
|
||||
(void) strncpy(lastconfigfile,"sys$login:nethack.ini", BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
if ((fp = fopenp(lastconfigfile, "r")) != (FILE *)0) {
|
||||
return(fp);
|
||||
}
|
||||
|
||||
@@ -1853,6 +1924,9 @@ int src;
|
||||
Strcpy(tmp_config, "NetHack.cnf");
|
||||
else
|
||||
Sprintf(tmp_config, "%s%s", envp, "NetHack.cnf");
|
||||
|
||||
(void) strncpy(lastconfigfile, tmp_config, BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
if ((fp = fopenp(tmp_config, "r")) != (FILE *)0)
|
||||
return(fp);
|
||||
# else /* should be only UNIX left */
|
||||
@@ -1861,18 +1935,25 @@ int src;
|
||||
Strcpy(tmp_config, ".nethackrc");
|
||||
else
|
||||
Sprintf(tmp_config, "%s/%s", envp, ".nethackrc");
|
||||
if ((fp = fopenp(tmp_config, "r")) != (FILE *)0)
|
||||
|
||||
(void) strncpy(lastconfigfile, tmp_config, BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
if ((fp = fopenp(lastconfigfile, "r")) != (FILE *)0)
|
||||
return(fp);
|
||||
# if defined(__APPLE__)
|
||||
/* try an alternative */
|
||||
if (envp) {
|
||||
Sprintf(tmp_config, "%s/%s", envp,
|
||||
"Library/Preferences/NetHack Defaults");
|
||||
if ((fp = fopenp(tmp_config, "r")) != (FILE *)0)
|
||||
(void) strncpy(lastconfigfile, tmp_config, BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
if ((fp = fopenp(lastconfigfile, "r")) != (FILE *)0)
|
||||
return(fp);
|
||||
Sprintf(tmp_config, "%s/%s", envp,
|
||||
"Library/Preferences/NetHack Defaults.txt");
|
||||
if ((fp = fopenp(tmp_config, "r")) != (FILE *)0)
|
||||
(void) strncpy(lastconfigfile, tmp_config, BUFSZ-1);
|
||||
lastconfigfile[BUFSZ-1] = '\0';
|
||||
if ((fp = fopenp(lastconfigfile, "r")) != (FILE *)0)
|
||||
return(fp);
|
||||
}
|
||||
# endif
|
||||
@@ -1887,7 +1968,7 @@ int src;
|
||||
# endif
|
||||
details = "";
|
||||
raw_printf("Couldn't open default config file %s %s(%d).",
|
||||
tmp_config, details, errno);
|
||||
lastconfigfile, details, errno);
|
||||
wait_synch();
|
||||
}
|
||||
# endif /* Unix */
|
||||
@@ -2110,9 +2191,16 @@ int src;
|
||||
} else if (src == SET_IN_SYS && match_varname(buf, "SHELLERS", 8)) {
|
||||
if (sysopt.shellers) free(sysopt.shellers);
|
||||
sysopt.shellers = dupstr(bufp);
|
||||
} else if (src == SET_IN_SYS && match_varname(buf, "EXPLORERS", 7)) {
|
||||
if (sysopt.explorers) free(sysopt.explorers);
|
||||
sysopt.explorers = dupstr(bufp);
|
||||
} else if (src == SET_IN_SYS && match_varname(buf, "DEBUGFILES", 5)) {
|
||||
if (sysopt.debugfiles) free(sysopt.debugfiles);
|
||||
sysopt.debugfiles = dupstr(bufp);
|
||||
/* if showdebug() has already been called (perhaps we've added
|
||||
some debugpline() calls to option processing) and has found
|
||||
a value for getenv("DEBUGFILES"), don't override that */
|
||||
if (sysopt.env_dbgfl == 0)
|
||||
sysopt.debugfiles = dupstr(bufp);
|
||||
} else if (src == SET_IN_SYS && match_varname(buf, "SUPPORT", 7)) {
|
||||
if (sysopt.support) free(sysopt.support);
|
||||
sysopt.support = dupstr(bufp);
|
||||
@@ -2164,6 +2252,13 @@ int src;
|
||||
return 0;
|
||||
}
|
||||
sysopt.pointsmin = n;
|
||||
} else if (src == SET_IN_SYS && match_varname(buf, "MAX_STATUENAME_RANK", 10)) {
|
||||
n = atoi(bufp);
|
||||
if (n < 1) {
|
||||
raw_printf("Illegal value in MAX_STATUENAME_RANK (minimum is 1).");
|
||||
return 0;
|
||||
}
|
||||
sysopt.tt_oname_maxrank = n;
|
||||
# ifdef PANICTRACE
|
||||
} else if (src == SET_IN_SYS &&
|
||||
match_varname(buf, "PANICTRACE_LIBC", 15)) {
|
||||
@@ -2202,6 +2297,8 @@ int src;
|
||||
} else if (match_varname(buf, "BOULDER", 3)) {
|
||||
(void) get_uchars(fp, buf, bufp, &iflags.bouldersym, TRUE,
|
||||
1, "BOULDER");
|
||||
} else if (match_varname(buf, "MENUCOLOR", 9)) {
|
||||
(void) add_menu_coloring(bufp);
|
||||
} else if (match_varname(buf, "WARNINGS", 5)) {
|
||||
(void) get_uchars(fp, buf, bufp, translate, FALSE,
|
||||
WARNCOUNT, "WARNINGS");
|
||||
@@ -3143,4 +3240,91 @@ int ifd, ofd;
|
||||
/* ---------- END INTERNAL RECOVER ----------- */
|
||||
#endif /*SELF_RECOVER*/
|
||||
|
||||
/* ---------- OTHER ----------- */
|
||||
|
||||
#ifdef SYSCF
|
||||
# ifdef SYSCF_FILE
|
||||
void
|
||||
assure_syscf_file() {
|
||||
/* All we really care about is the end result - can we read the file?
|
||||
* So just check that directly. */
|
||||
int fd;
|
||||
fd = open(SYSCF_FILE, O_RDONLY);
|
||||
if(fd >= 0){
|
||||
/* readable */
|
||||
close(fd);
|
||||
return;
|
||||
}
|
||||
raw_printf("Unable to open SYSCF_FILE.\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
# endif /* SYSCF_FILE */
|
||||
#endif /* SYSCF */
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
/* used by debugpline() to decide whether to issue a message
|
||||
from a partiular source file; caller passes __FILE__ and we check
|
||||
whether it is in the source file list supplied by SYSCF's DEBUGFILES */
|
||||
boolean
|
||||
showdebug(filename)
|
||||
const char *filename;
|
||||
{
|
||||
const char *debugfiles, *p;
|
||||
|
||||
if (!filename || !*filename) return FALSE; /* sanity precaution */
|
||||
|
||||
if (sysopt.env_dbgfl == 0) {
|
||||
/* check once for DEBUGFILES in the environment;
|
||||
if found, it supersedes the sysconf value
|
||||
[note: getenv() rather than nh_getenv() since a long value
|
||||
is valid and doesn't pose any sort of overflow risk here] */
|
||||
if ((p = getenv("DEBUGFILES")) != 0) {
|
||||
if (sysopt.debugfiles) free(sysopt.debugfiles);
|
||||
sysopt.debugfiles = dupstr(p);
|
||||
sysopt.env_dbgfl = 1;
|
||||
} else
|
||||
sysopt.env_dbgfl = -1;
|
||||
}
|
||||
|
||||
debugfiles = sysopt.debugfiles;
|
||||
/* usual case: sysopt.debugfiles will be empty */
|
||||
if (!debugfiles || !*debugfiles) return FALSE;
|
||||
|
||||
/* strip filename's path if present */
|
||||
# ifdef UNIX
|
||||
if ((p = rindex(filename, '/')) != 0) filename = p + 1;
|
||||
# endif
|
||||
# ifdef VMS
|
||||
filename = vms_basename(filename);
|
||||
/* vms_basename strips off 'type' suffix as well as path and version;
|
||||
we want to put suffix back (".c" assumed); since it always returns
|
||||
a pointer to a static buffer, we can safely modify its result */
|
||||
Strcat((char *)filename, ".c");
|
||||
# endif
|
||||
|
||||
/*
|
||||
* Wildcard match will only work if there's a single pattern (which
|
||||
* might be a single file name without any wildcarding) rather than
|
||||
* a space-separated list.
|
||||
* [to NOT do: We could step through the space-separated list and
|
||||
* attempt a wildcard match against each element, but that would be
|
||||
* overkill for the intended usage.]
|
||||
*/
|
||||
if (pmatch(debugfiles, filename))
|
||||
return TRUE;
|
||||
|
||||
/* check whether filename is an element of the list */
|
||||
if ((p = strstr(debugfiles, filename)) != 0) {
|
||||
int l = (int)strlen(filename);
|
||||
|
||||
if ((p == debugfiles || p[-1] == ' ' || p[-1] == '/')
|
||||
&& (p[l] == ' ' || p[l] == '\0'))
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
#endif /*DEBUG*/
|
||||
|
||||
/*files.c*/
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user