Merge branch 'master' into nhmall-booktribute

Conflicts:
	include/context.h
This commit is contained in:
nhmall
2015-04-02 19:19:50 -04:00
148 changed files with 24895 additions and 13655 deletions
+2 -2
View File
@@ -1,5 +1,5 @@
*.[ch] filter=NHtext merge=NHsubst *.[ch] NHSUBST
*.sh filter=NHtext merge=NHsubst *.sh NHSUBST
* text=auto * text=auto
*.hqx -text *.hqx -text
*.sln -text *.sln -text
+3
View File
@@ -32,8 +32,11 @@ core
Makefile Makefile
# Win32-specific ignores # Win32-specific ignores
Debug/
Release/
binary/ binary/
build/ build/
ipch/
Nethack.sln Nethack.sln
Nethack.sdf Nethack.sdf
Nethack.opensdf Nethack.opensdf
+3 -3
View File
@@ -1,4 +1,4 @@
Developer.txt filter=NHtext merge=NHsubst Developer.txt NHSUBST
nhgitset.pl filter=NHtext merge=NHsubst nhgitset.pl NHSUBST
hookdir/* filter=NHtext merge=NHsubst hooksdir/* NHSUBST
* text=auto * text=auto
+4 -4
View File
@@ -136,9 +136,9 @@ B. Enabling variable expansion
Variable expansion is controlled by the .gitattributes file. Variable expansion is controlled by the .gitattributes file.
To enable variable expansion: To enable variable expansion:
pattern filter=NHtext merge=NHsubst pattern NHSUBST
To disable variable expansion: To disable variable expansion:
pattern -filter pattern -NHSUBST
More information: "git help gitattributes" More information: "git help gitattributes"
@@ -147,8 +147,8 @@ C. Oddities
instead of "git add" or "git commit." Nothing terrible will happen if you instead of "git add" or "git commit." Nothing terrible will happen if you
use the wrong one, but the values will not be updated. 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 Variable expansion modifies the files in the work tree - your editor or
in your working tree. IDE may or may not be happy with this.
D. Using your own hooks D. Using your own hooks
You can use your own hooks - put them in .git/hooks as usual BUT name them You can use your own hooks - put them in .git/hooks as usual BUT name them
+28
View File
@@ -4,6 +4,34 @@ code_features.txt
Developer-useful info about code features, assumptions, purpose, Developer-useful info about code features, assumptions, purpose,
rationale, etc. 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 PREFIXES_IN_USE and NOCWD_ASSUMPTIONS
+12 -4
View File
@@ -32,15 +32,22 @@ you specify:
-pretty=one: format output as a single line for each entry -pretty=one: format output as a single line for each entry
(branch): show the commits from (branch) instead of the current one (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 add (filename)
[*] git nhadd (filename) [*] git nhadd (filename)
Adds the changes you've made in (filename) to the pre-commit staging area. Adds the changes you've made in (filename) to the pre-commit staging area.
(also referred to as the 'index') (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 "nhadd" is the preferred syntax and will automatically update the source file
headers with the latest date, branch, and version. headers with the latest date, branch, and version. See Developer.txt for
details.
[*] git commit [-a] [-m "text"] [*] git commit [-a] [-m "text"]
@@ -53,7 +60,8 @@ Including -m will use "text" as the commit message instead of opening an
editor window for you to create one. editor window for you to create one.
"nhcommit" is the preferred syntax and will automatically update the source file "nhcommit" is the preferred syntax and will automatically update the source file
headers with the latest date, branch, and version. headers with the latest date, branch, and version. See Developer.txt for
details.
[*] git push [--all] [-u origin (branch)] [*] git push [--all] [-u origin (branch)]
@@ -101,10 +109,10 @@ the prior commit.
[/end area-of-concern] [/end area-of-concern]
[*] git fetch [-a] [*] git fetch [--all]
Retrieve commits from the remote repository to your machine. Retrieve commits from the remote repository to your machine.
Including -a will get commits for all branches. Including --all will get commits for all branches.
Does NOT merge them into your local repository. Does NOT merge them into your local repository.
Executable → Regular
+7 -2
View File
@@ -1,14 +1,19 @@
#!/usr/bin/perl #!/usr/bin/perl
# wrapper for nhadd and nhcommit aliases # wrapper for nhadd and nhcommit aliases
# $NHDT-Date$ # $NHDT-Date: 1427408239 2015/03/26 22:17:19 $
%ok = map { $_ => 1 } ('add', 'commit'); %ok = map { $_ => 1 } ('add', 'commit');
die "Bad subcommand '$ARGV[0]'" unless $ok{$ARGV[0]}; 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}){ if(length $ENV{GIT_PREFIX}){
chdir($ENV{GIT_PREFIX}) or die "Can't chdir $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: $!"; exec "git", @ARGV or die "Can't exec git: $!";
+35 -4
View File
@@ -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. # this first block because it's expensive and dumpfile() hangs with $rawin.
my $sink = ($^O eq "MSWin32") ? "NUL" : "/dev/null"; my $sink = ($^O eq "MSWin32") ? "NUL" : "/dev/null";
my $dbgfile = ($^O eq "MSWin32") ? "$ENV{TEMP}.$$" : "/tmp/trace.$$"; 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){ if($debug){
print TRACE "START CLIENT ARGV:\n"; print TRACE "START CLIENT ARGV:\n";
print TRACE "[0] $0\n"; print TRACE "[0] $0\n";
@@ -233,7 +234,7 @@ sub merge_one_line_maybe {
$theirval = $1; $theirval = $1;
} }
} }
print TRACE "MID: $ourstype/$oursval $theirtype/$theirval\n";
# are we done? # are we done?
if(pos($ours)==length $ours && pos($theirs) == length $theirs){ if(pos($ours)==length $ours && pos($theirs) == length $theirs){
$more = 0; $more = 0;
@@ -245,6 +246,12 @@ sub merge_one_line_maybe {
# now see if ours and their match or can be resolved # now see if ours and their match or can be resolved
# text # text
if($ourstype == 3 && $theirtype == 3){ 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){ if($oursval eq $theirval){
$out .= $oursval; $out .= $oursval;
next; 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. # return undef if we can't merge the values; $NAME: VALUE $ or $NAME$ (as appropriate) if we can.
sub merge_one_var_maybe { sub merge_one_var_maybe {
my($varname, $oursval, $theirval) = @_; my($varname, $oursval, $theirval) = @_;
print TRACE "MVM: -$varname-$oursval-$theirval-\n";
my $resolvedas; my $resolvedas;
{ {
no strict; no strict;
@@ -309,12 +317,28 @@ sub Date {
sub Branch { sub Branch {
my($PREFIX, $varname, $mine, $theirs) = @_; 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 { sub Revision {
my($PREFIX, $varname, $mine, $theirs) = @_; 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__ __END__
@@ -364,3 +388,10 @@ $TEST-Branch: mine $
=== ===
$TEST-Branch: theirs $ $TEST-Branch: theirs $
>>> d3 >>> 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
+386
View 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
+20 -7
View File
@@ -3,7 +3,7 @@
# value of nethack.setupversion we will end up with when this is done # 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 # 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) my $version_old = 0; # current version, if any (0 is no entry ergo new repo)
use Cwd; use Cwd;
@@ -100,16 +100,29 @@ print STDERR "Installing aliases\n" if($opt_v);
$addpath = catfile(curdir(),'.git','hooks','NHadd'); $addpath = catfile(curdir(),'.git','hooks','NHadd');
&add_alias('nhadd', "!$addpath add"); &add_alias('nhadd', "!$addpath add");
&add_alias('nhcommit', "!$addpath commit"); &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); print STDERR "Installing filter/merge\n" if($opt_v);
if($^O eq "MSWin32"){ # XXXX need it in NHadd to find nhsub???
$cmd = '.git\\\\hooks\\\\NHtext'; # removed at version 3
} else { #if($^O eq "MSWin32"){
$cmd = catfile(curdir(),'.git','hooks','NHtext'); # $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'); $cmd = catfile(curdir(),'.git','hooks','NHsubst');
&add_config('merge.NHsubst.name', 'NetHack Keyword Substitution'); &add_config('merge.NHsubst.name', 'NetHack Keyword Substitution');
+3 -3
View File
@@ -1,3 +1,3 @@
*.def filter=NHtext merge=NHsubst *.def NHSUBST
*.des filter=NHtext merge=NHsubst *.des NHSUBST
*.txt filter=NHtext merge=NHsubst *.txt NHSUBST
+1
View File
@@ -20,3 +20,4 @@ nhdat
dlb.lst dlb.lst
guioptions guioptions
porthelp porthelp
NetHack.ad
+184 -172
View File
@@ -70,25 +70,25 @@ DOOR:locked,(24,14)
DOOR:closed,(31,14) DOOR:closed,(31,14)
DOOR:locked,(49,14) DOOR:locked,(49,14)
# Lord Carnarvon # Lord Carnarvon
MONSTER:'@',"Lord Carnarvon",(25,10) MONSTER:('@',"Lord Carnarvon"),(25,10)
# The treasure of Lord Carnarvon # The treasure of Lord Carnarvon
OBJECT:'(',"chest",(25,10) OBJECT:('(',"chest"),(25,10)
# student guards for the audience chamber # student guards for the audience chamber
MONSTER:'@',"student",(26,09) MONSTER:('@',"student"),(26,09)
MONSTER:'@',"student",(27,09) MONSTER:('@',"student"),(27,09)
MONSTER:'@',"student",(28,09) MONSTER:('@',"student"),(28,09)
MONSTER:'@',"student",(26,10) MONSTER:('@',"student"),(26,10)
MONSTER:'@',"student",(28,10) MONSTER:('@',"student"),(28,10)
MONSTER:'@',"student",(26,11) MONSTER:('@',"student"),(26,11)
MONSTER:'@',"student",(27,11) MONSTER:('@',"student"),(27,11)
MONSTER:'@',"student",(28,11) MONSTER:('@',"student"),(28,11)
# city watch guards in the antechambers # city watch guards in the antechambers
MONSTER:'@',"watchman",(50,06) MONSTER:('@',"watchman"),(50,06)
MONSTER:'@',"watchman",(50,14) MONSTER:('@',"watchman"),(50,14)
# Eels in the moat # Eels in the moat
MONSTER:';',"giant eel",(20,10) MONSTER:(';',"giant eel"),(20,10)
MONSTER:';',"giant eel",(45,04) MONSTER:(';',"giant eel"),(45,04)
MONSTER:';',"giant eel",(33,16) MONSTER:(';',"giant eel"),(33,16)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Random traps # Random traps
@@ -99,18 +99,18 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters on siege duty. # Monsters on siege duty.
MONSTER: 'S',random,(60,09) MONSTER: 'S',(60,09)
MONSTER: 'M',random,(60,10) MONSTER: 'M',(60,10)
MONSTER: 'S',random,(60,11) MONSTER: 'S',(60,11)
MONSTER: 'S',random,(60,12) MONSTER: 'S',(60,12)
MONSTER: 'M',random,(60,13) MONSTER: 'M',(60,13)
MONSTER: 'S',random,(61,10) MONSTER: 'S',(61,10)
MONSTER: 'S',random,(61,11) MONSTER: 'S',(61,11)
MONSTER: 'S',random,(61,12) MONSTER: 'S',(61,12)
MONSTER: 'S',random,(30,03) MONSTER: 'S',(30,03)
MONSTER: 'M',random,(20,17) MONSTER: 'M',(20,17)
MONSTER: 'S',random,(67,02) MONSTER: 'S',(67,02)
MONSTER: 'S',random,(10,19) MONSTER: 'S',(10,19)
# #
# The "locate" level for the quest. # 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:(25,13,28,16),lit,"temple"
REGION:(30,04,30,16),lit,"ordinary" REGION:(30,04,30,16),lit,"ordinary"
REGION:(32,04,32,16),unlit,"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:(36,10,37,10),unlit,"ordinary"
REGION:(39,09,39,11),unlit,"ordinary" REGION:(39,09,39,11),unlit,"ordinary"
REGION:(36,06,42,08),unlit,"ordinary",unfilled,true REGION:(36,06,42,08),unlit,"ordinary",unfilled,irregular
REGION:(36,12,42,14),unlit,"ordinary",unfilled,true REGION:(36,12,42,14),unlit,"ordinary",unfilled,irregular
REGION:(46,06,51,09),unlit,"ordinary" 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" REGION:(48,13,51,14),unlit,"ordinary"
# Doors # Doors
DOOR:closed,(31,04) DOOR:closed,(31,04)
@@ -186,21 +186,21 @@ ALTAR:(26,15),align[2],altar
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Treasure? # Treasure?
ENGRAVING:random,engrave,"X marks the spot." ENGRAVING:random,engrave,"X marks the spot."
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",(32,10)
TRAP:"rolling boulder",(40,16) TRAP:"rolling boulder",(40,16)
# Random monsters. # Random monsters.
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'M',random,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',"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:'M',random
# #
# The "goal" level for the quest. # The "goal" level for the quest.
@@ -323,21 +323,21 @@ NON_DIGGABLE:(00,00,75,19)
# The altar of Huhetotl. Unattended. # The altar of Huhetotl. Unattended.
ALTAR:(50,14),chaos,altar ALTAR:(50,14),chaos,altar
# Objects # Objects
OBJECT:'(',"crystal ball",(50,14),blessed,5,"The Orb of Detection" OBJECT:('(',"crystal ball"),(50,14),blessed,5,name:"The Orb of Detection"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -347,34 +347,34 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:"rolling boulder",(46,14) TRAP:"rolling boulder",(46,14)
# Random monsters. # Random monsters.
MONSTER:'&',"Minion of Huhetotl",(50,14) MONSTER:('&',"Minion of Huhetotl"),(50,14)
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,random MONSTER:'S',random
MONSTER:'S',random,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',"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:'M',random
# #
# The "fill" levels for the quest. # The "fill" levels for the quest.
@@ -387,76 +387,88 @@ MONSTER:'M',random,random
LEVEL: "Arc-fila" LEVEL: "Arc-fila"
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'S', random, random MONSTER: 'S', random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'S', random, random MONSTER: 'S', random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'S', random, random MONSTER: 'S', random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'S', random, random MONSTER: 'S', random
MONSTER: 'M', "human mummy", random MONSTER: ('M', "human mummy"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'S', random, random MONSTER: 'S', random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'S', random, random MONSTER: 'S', random
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
LEVEL: "Arc-filb" LEVEL: "Arc-filb"
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'M', random, random MONSTER: 'M', random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'M', random, random MONSTER: 'M', random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'M', random, random MONSTER: 'M', random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'S', random, random MONSTER: 'S', random
MONSTER: 'M', "human mummy", random MONSTER: ('M', "human mummy"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'S', random, random MONSTER: 'S', random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'S', random, random MONSTER: 'S', random
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
+146 -146
View File
@@ -60,38 +60,38 @@ DOOR:open,(23,13)
DOOR:open,(25,10) DOOR:open,(25,10)
DOOR:open,(28,05) DOOR:open,(28,05)
# Elder # Elder
MONSTER:'@',"Pelias",(10,07) MONSTER:('@',"Pelias"),(10,07)
# The treasure of Pelias # The treasure of Pelias
OBJECT:'(',"chest",(09,05) OBJECT:('(',"chest"),(09,05)
# chieftain guards for the audience chamber # chieftain guards for the audience chamber
MONSTER:'@',"chieftain",(10,05) MONSTER:('@',"chieftain"),(10,05)
MONSTER:'@',"chieftain",(10,09) MONSTER:('@',"chieftain"),(10,09)
MONSTER:'@',"chieftain",(11,05) MONSTER:('@',"chieftain"),(11,05)
MONSTER:'@',"chieftain",(11,09) MONSTER:('@',"chieftain"),(11,09)
MONSTER:'@',"chieftain",(14,05) MONSTER:('@',"chieftain"),(14,05)
MONSTER:'@',"chieftain",(14,09) MONSTER:('@',"chieftain"),(14,09)
MONSTER:'@',"chieftain",(16,05) MONSTER:('@',"chieftain"),(16,05)
MONSTER:'@',"chieftain",(16,09) MONSTER:('@',"chieftain"),(16,09)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# One trap to keep the ogres at bay. # One trap to keep the ogres at bay.
TRAP:"spiked pit",(37,07) TRAP:"spiked pit",(37,07)
# Eels in the river # Eels in the river
MONSTER:';',"giant eel",(36,01) MONSTER:(';',"giant eel"),(36,01)
MONSTER:';',"giant eel",(37,09) MONSTER:(';',"giant eel"),(37,09)
MONSTER:';',"giant eel",(39,15) MONSTER:(';',"giant eel"),(39,15)
# Monsters on siege duty. # Monsters on siege duty.
MONSTER:'O',"ogre",(40,08),hostile MONSTER:('O',"ogre"),(40,08),hostile
MONSTER:'O',"ogre",(41,06),hostile MONSTER:('O',"ogre"),(41,06),hostile
MONSTER:'O',"ogre",(41,07),hostile MONSTER:('O',"ogre"),(41,07),hostile
MONSTER:'O',"ogre",(41,08),hostile MONSTER:('O',"ogre"),(41,08),hostile
MONSTER:'O',"ogre",(41,09),hostile MONSTER:('O',"ogre"),(41,09),hostile
MONSTER:'O',"ogre",(41,10),hostile MONSTER:('O',"ogre"),(41,10),hostile
MONSTER:'O',"ogre",(42,06),hostile MONSTER:('O',"ogre"),(42,06),hostile
MONSTER:'O',"ogre",(42,07),hostile MONSTER:('O',"ogre"),(42,07),hostile
MONSTER:'O',"ogre",(42,08),hostile MONSTER:('O',"ogre"),(42,08),hostile
MONSTER:'O',"ogre",(42,09),hostile MONSTER:('O',"ogre"),(42,09),hostile
MONSTER:'O',"ogre",(42,10),hostile MONSTER:('O',"ogre"),(42,10),hostile
# #
# The "locate" level for the quest. # The "locate" level for the quest.
@@ -148,21 +148,21 @@ DOOR:locked,(55,06)
STAIR:(05,02),up STAIR:(05,02),up
STAIR:(70,13),down STAIR:(70,13),down
# Objects # Objects
OBJECT:random,random,(42,03) OBJECT:random,(42,03)
OBJECT:random,random,(42,03) OBJECT:random,(42,03)
OBJECT:random,random,(42,03) OBJECT:random,(42,03)
OBJECT:random,random,(41,03) OBJECT:random,(41,03)
OBJECT:random,random,(41,03) OBJECT:random,(41,03)
OBJECT:random,random,(41,03) OBJECT:random,(41,03)
OBJECT:random,random,(41,03) OBJECT:random,(41,03)
OBJECT:random,random,(41,08) OBJECT:random,(41,08)
OBJECT:random,random,(41,08) OBJECT:random,(41,08)
OBJECT:random,random,(42,08) OBJECT:random,(42,08)
OBJECT:random,random,(42,08) OBJECT:random,(42,08)
OBJECT:random,random,(42,08) OBJECT:random,(42,08)
OBJECT:random,random,(71,13) OBJECT:random,(71,13)
OBJECT:random,random,(71,13) OBJECT:random,(71,13)
OBJECT:random,random,(71,13) OBJECT:random,(71,13)
# Random traps # Random traps
TRAP:"spiked pit",(10,13) TRAP:"spiked pit",(10,13)
TRAP:"spiked pit",(21,07) TRAP:"spiked pit",(21,07)
@@ -173,33 +173,33 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'O',"ogre",(12,09),hostile MONSTER:('O',"ogre"),(12,09),hostile
MONSTER:'O',"ogre",(18,11),hostile MONSTER:('O',"ogre"),(18,11),hostile
MONSTER:'O',"ogre",(45,05),hostile MONSTER:('O',"ogre"),(45,05),hostile
MONSTER:'O',"ogre",(45,06),hostile MONSTER:('O',"ogre"),(45,06),hostile
MONSTER:'O',"ogre",(47,05),hostile MONSTER:('O',"ogre"),(47,05),hostile
MONSTER:'O',"ogre",(46,05),hostile MONSTER:('O',"ogre"),(46,05),hostile
MONSTER:'O',"ogre",(56,03),hostile MONSTER:('O',"ogre"),(56,03),hostile
MONSTER:'O',"ogre",(56,04),hostile MONSTER:('O',"ogre"),(56,04),hostile
MONSTER:'O',"ogre",(56,05),hostile MONSTER:('O',"ogre"),(56,05),hostile
MONSTER:'O',"ogre",(56,06),hostile MONSTER:('O',"ogre"),(56,06),hostile
MONSTER:'O',"ogre",(57,03),hostile MONSTER:('O',"ogre"),(57,03),hostile
MONSTER:'O',"ogre",(57,04),hostile MONSTER:('O',"ogre"),(57,04),hostile
MONSTER:'O',"ogre",(57,05),hostile MONSTER:('O',"ogre"),(57,05),hostile
MONSTER:'O',"ogre",(57,06),hostile MONSTER:('O',"ogre"),(57,06),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,hostile
MONSTER:'T',random,random,hostile MONSTER:'T',random,hostile
MONSTER:'T',"rock troll",(46,06),hostile MONSTER:('T',"rock troll"),(46,06),hostile
MONSTER:'T',"rock troll",(47,06),hostile MONSTER:('T',"rock troll"),(47,06),hostile
MONSTER:'T',"rock troll",(56,07),hostile MONSTER:('T',"rock troll"),(56,07),hostile
MONSTER:'T',"rock troll",(57,07),hostile MONSTER:('T',"rock troll"),(57,07),hostile
MONSTER:'T',"rock troll",(70,13),hostile MONSTER:('T',"rock troll"),(70,13),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:'T',random,hostile
# #
# The "goal" level for the quest. # The "goal" level for the quest.
@@ -244,21 +244,21 @@ STAIR:(36,05),up
ALTAR:(63,04),noncoaligned,altar ALTAR:(63,04),noncoaligned,altar
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Objects # Objects
OBJECT:'*',"luckstone",(63,04),blessed,0,"The Heart of Ahriman" OBJECT:('*',"luckstone"),(63,04),blessed,0,name:"The Heart of Ahriman"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -267,34 +267,34 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'@',"Thoth Amon",(63,04),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',"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,hostile
MONSTER:'O',random,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',"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:'T',random,hostile
WALLIFY WALLIFY
# #
@@ -307,64 +307,64 @@ WALLIFY
# #
MAZE: "Bar-fila" , ' ' MAZE: "Bar-fila" , ' '
INIT_MAP: '.' , '.' , true , true , unlit , false INIT_MAP: mines, '.' , '.' , true , true , unlit , false
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: 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', random, random, hostile MONSTER: 'O', random, hostile
MONSTER: 'T', "rock troll", random, hostile MONSTER: ('T', "rock troll"), random, hostile
MAZE: "Bar-filb" , ' ' MAZE: "Bar-filb" , ' '
INIT_MAP: '.' , ' ' , true , true , unlit , true INIT_MAP: mines, '.' , ' ' , true , true , unlit , true
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: 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', "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, 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: 'T' , random, hostile
+127 -127
View File
@@ -37,14 +37,14 @@ MAP
ENDMAP ENDMAP
# Dungeon Description # Dungeon Description
REGION:(00,00,75,19),unlit,"ordinary" 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. # The occupied rooms.
REGION:(02,01,08,03),lit,"ordinary",unfilled,true REGION:(02,01,08,03),lit,"ordinary",unfilled,irregular
REGION:(01,11,06,14),lit,"ordinary",unfilled,true REGION:(01,11,06,14),lit,"ordinary",unfilled,irregular
REGION:(13,08,18,10),lit,"ordinary",unfilled,true REGION:(13,08,18,10),lit,"ordinary",unfilled,irregular
REGION:(05,17,14,18),lit,"ordinary",unfilled,true REGION:(05,17,14,18),lit,"ordinary",unfilled,irregular
REGION:(17,16,23,18),lit,"ordinary",unfilled,true REGION:(17,16,23,18),lit,"ordinary",unfilled,irregular
REGION:(35,16,44,18),lit,"ordinary",unfilled,true REGION:(35,16,44,18),lit,"ordinary",unfilled,irregular
# Stairs # Stairs
STAIR:(02,03),down STAIR:(02,03),down
# Portal arrival point # Portal arrival point
@@ -54,18 +54,18 @@ DOOR:locked,(19,06)
# The temple altar (this will force a priest(ess) to be created) # The temple altar (this will force a priest(ess) to be created)
ALTAR:(36,02),coaligned,shrine ALTAR:(36,02),coaligned,shrine
# Shaman Karnov # Shaman Karnov
MONSTER:'@',"Shaman Karnov",(35,02) MONSTER:('@',"Shaman Karnov"),(35,02)
# The treasure of Shaman Karnov # The treasure of Shaman Karnov
OBJECT:'(',"chest",(34,02) OBJECT:('(',"chest"),(34,02)
# neanderthal guards for the audience chamber # neanderthal guards for the audience chamber
MONSTER:'@',"neanderthal",(20,03) MONSTER:('@',"neanderthal"),(20,03)
MONSTER:'@',"neanderthal",(20,02) MONSTER:('@',"neanderthal"),(20,02)
MONSTER:'@',"neanderthal",(20,01) MONSTER:('@',"neanderthal"),(20,01)
MONSTER:'@',"neanderthal",(21,03) MONSTER:('@',"neanderthal"),(21,03)
MONSTER:'@',"neanderthal",(21,02) MONSTER:('@',"neanderthal"),(21,02)
MONSTER:'@',"neanderthal",(21,01) MONSTER:('@',"neanderthal"),(21,01)
MONSTER:'@',"neanderthal",(22,01) MONSTER:('@',"neanderthal"),(22,01)
MONSTER:'@',"neanderthal",(26,09) MONSTER:('@',"neanderthal"),(26,09)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Random traps # Random traps
@@ -76,18 +76,18 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters on siege duty (in the outer caves). # Monsters on siege duty (in the outer caves).
MONSTER: 'h',"bugbear",(47,02),hostile MONSTER: ('h',"bugbear"),(47,02),hostile
MONSTER: 'h',"bugbear",(48,03),hostile MONSTER: ('h',"bugbear"),(48,03),hostile
MONSTER: 'h',"bugbear",(49,04),hostile MONSTER: ('h',"bugbear"),(49,04),hostile
MONSTER: 'h',"bugbear",(67,03),hostile MONSTER: ('h',"bugbear"),(67,03),hostile
MONSTER: 'h',"bugbear",(69,04),hostile MONSTER: ('h',"bugbear"),(69,04),hostile
MONSTER: 'h',"bugbear",(51,13),hostile MONSTER: ('h',"bugbear"),(51,13),hostile
MONSTER: 'h',"bugbear",(53,14),hostile MONSTER: ('h',"bugbear"),(53,14),hostile
MONSTER: 'h',"bugbear",(55,15),hostile MONSTER: ('h',"bugbear"),(55,15),hostile
MONSTER: 'h',"bugbear",(63,10),hostile MONSTER: ('h',"bugbear"),(63,10),hostile
MONSTER: 'h',"bugbear",(65,09),hostile MONSTER: ('h',"bugbear"),(65,09),hostile
MONSTER: 'h',"bugbear",(67,10),hostile MONSTER: ('h',"bugbear"),(67,10),hostile
MONSTER: 'h',"bugbear",(69,11),hostile MONSTER: ('h',"bugbear"),(69,11),hostile
WALLIFY WALLIFY
# #
@@ -124,7 +124,7 @@ MAP
ENDMAP ENDMAP
# Dungeon Description # Dungeon Description
REGION:(00,00,75,19),unlit,"ordinary" 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 # Doors
DOOR:locked,(28,11) DOOR:locked,(28,11)
# Stairs # Stairs
@@ -133,21 +133,21 @@ STAIR:(73,10),down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -156,33 +156,33 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'h',"bugbear",(02,10),hostile MONSTER:('h',"bugbear"),(02,10),hostile
MONSTER:'h',"bugbear",(03,11),hostile MONSTER:('h',"bugbear"),(03,11),hostile
MONSTER:'h',"bugbear",(04,12),hostile MONSTER:('h',"bugbear"),(04,12),hostile
MONSTER:'h',"bugbear",(02,11),hostile MONSTER:('h',"bugbear"),(02,11),hostile
MONSTER:'h',"bugbear",(16,16),hostile MONSTER:('h',"bugbear"),(16,16),hostile
MONSTER:'h',"bugbear",(17,17),hostile MONSTER:('h',"bugbear"),(17,17),hostile
MONSTER:'h',"bugbear",(18,18),hostile MONSTER:('h',"bugbear"),(18,18),hostile
MONSTER:'h',"bugbear",(19,16),hostile MONSTER:('h',"bugbear"),(19,16),hostile
MONSTER:'h',"bugbear",(30,06),hostile MONSTER:('h',"bugbear"),(30,06),hostile
MONSTER:'h',"bugbear",(31,07),hostile MONSTER:('h',"bugbear"),(31,07),hostile
MONSTER:'h',"bugbear",(32,08),hostile MONSTER:('h',"bugbear"),(32,08),hostile
MONSTER:'h',"bugbear",(33,06),hostile MONSTER:('h',"bugbear"),(33,06),hostile
MONSTER:'h',"bugbear",(34,07),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',"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,hostile
MONSTER:'H',random,random,hostile MONSTER:'H',random,hostile
MONSTER:'H',"hill giant",(03,12),hostile MONSTER:('H',"hill giant"),(03,12),hostile
MONSTER:'H',"hill giant",(20,17),hostile MONSTER:('H',"hill giant"),(20,17),hostile
MONSTER:'H',"hill giant",(35,08),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',"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',random,hostile
WALLIFY WALLIFY
# #
@@ -224,26 +224,26 @@ STAIR:random,up
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Objects # Objects
OBJECT:')',"mace",(23,10),blessed,0,"The Sceptre of Might" OBJECT:(')',"mace"),(23,10),blessed,0,name:"The Sceptre of Might"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# monsters. # monsters.
MONSTER:'D',"Chromatic Dragon",(23,10),asleep MONSTER:('D',"Chromatic Dragon"),(23,10),asleep
MONSTER:'F',"shrieker",(26,13) MONSTER:('F',"shrieker"),(26,13)
MONSTER:'F',"shrieker",(25,8) MONSTER:('F',"shrieker"),(25,8)
MONSTER:'F',"shrieker",(45,11) MONSTER:('F',"shrieker"),(45,11)
WALLIFY WALLIFY
# #
@@ -256,63 +256,63 @@ WALLIFY
# #
MAZE: "Cav-fila" , ' ' MAZE: "Cav-fila" , ' '
INIT_MAP: '.' , ' ' , true , true , random , true INIT_MAP: mines, '.' , ' ' , true , true , random , true
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: 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', "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', random, hostile
MONSTER: 'H', "hill giant", random, hostile MONSTER: ('H', "hill giant"), random, hostile
MAZE: "Cav-filb" , ' ' MAZE: "Cav-filb" , ' '
INIT_MAP: '.' , ' ' , true , true , random , true INIT_MAP: mines, '.' , ' ' , true , true , random , true
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: 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', "bugbear"), random, hostile
MONSTER: 'h', "bugbear", random, hostile MONSTER: ('h', "bugbear"), random, hostile
MONSTER: 'h', random, random, hostile MONSTER: 'h', random, hostile
MONSTER: 'h', random, random, hostile MONSTER: 'h', random, 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
+185 -185
View File
@@ -57,18 +57,18 @@ DOOR:closed,(47,08)
DOOR:closed,(48,12) DOOR:closed,(48,12)
DOOR:locked,(50,10) DOOR:locked,(50,10)
# Hippocrates # Hippocrates
MONSTER:'@',"Hippocrates",(37,10) MONSTER:('@',"Hippocrates"),(37,10)
# The treasure of Hippocrates # The treasure of Hippocrates
OBJECT:'(',"chest",(37,10) OBJECT:('(',"chest"),(37,10)
# intern guards for the audience chamber # intern guards for the audience chamber
MONSTER:'@',"attendant",(29,08) MONSTER:('@',"attendant"),(29,08)
MONSTER:'@',"attendant",(29,09) MONSTER:('@',"attendant"),(29,09)
MONSTER:'@',"attendant",(29,10) MONSTER:('@',"attendant"),(29,10)
MONSTER:'@',"attendant",(29,11) MONSTER:('@',"attendant"),(29,11)
MONSTER:'@',"attendant",(40,09) MONSTER:('@',"attendant"),(40,09)
MONSTER:'@',"attendant",(40,10) MONSTER:('@',"attendant"),(40,10)
MONSTER:'@',"attendant",(40,11) MONSTER:('@',"attendant"),(40,11)
MONSTER:'@',"attendant",(40,13) MONSTER:('@',"attendant"),(40,13)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Random traps # Random traps
@@ -79,29 +79,29 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters on siege duty. # 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: '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: (';',"giant eel"),random
MONSTER: ';',"shark",random MONSTER: (';',"shark"),random
MONSTER: ';', random, random MONSTER: ';', random
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
# #
# The "locate" level for the quest. # The "locate" level for the quest.
# #
@@ -112,7 +112,7 @@ MONSTER: 'S',random,random,hostile
MAZE: "Hea-loca",' ' MAZE: "Hea-loca",' '
FLAGS: hardfloor FLAGS: hardfloor
# #
INIT_MAP: '.' , 'P', true , true , lit , false INIT_MAP: mines, '.' , 'P', true , true , lit , false
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
PPPPPPPPPPPPP.......PPPPPPPPPPP PPPPPPPPPPPPP.......PPPPPPPPPPP
@@ -142,21 +142,21 @@ NON_DIGGABLE:(11,02,21,07)
# Altar in the temple. # Altar in the temple.
ALTAR:(13,05), chaos, shrine ALTAR:(13,05), chaos, shrine
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -165,41 +165,41 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # 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',"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:'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:';',"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:';',"kraken",random MONSTER:(';',"kraken"),random
MONSTER:';',"shark",random MONSTER:(';',"shark"),random
MONSTER:';',"shark",random MONSTER:(';',"shark"),random
MONSTER:';',random, random,hostile MONSTER:';', random,hostile
MONSTER:';',random, random,hostile MONSTER:';', random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
# #
# The "goal" level for the quest. # The "goal" level for the quest.
@@ -211,7 +211,7 @@ MONSTER: 'S',random,random,hostile
MAZE: "Hea-goal", 'P' MAZE: "Hea-goal", 'P'
# #
INIT_MAP: '.' , 'P' , false , true , lit , false INIT_MAP: mines, '.' , 'P' , false , true , lit , false
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
.P....................................PP. .P....................................PP.
@@ -234,22 +234,22 @@ STAIR:(39,10),up
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,40,11) NON_DIGGABLE:(00,00,40,11)
# Objects # Objects
OBJECT:')',"quarterstaff",(20,06),blessed,0,"The Staff of Aesculapius" OBJECT:(')',"quarterstaff"),(20,06),blessed,0,name:"The Staff of Aesculapius"
OBJECT:'/',"lightning",(20,06) OBJECT:('/',"lightning"),(20,06)
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -258,38 +258,38 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'H',"Cyclops",(20,06),hostile MONSTER:('H',"Cyclops"),(20,06),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',random,random,hostile MONSTER:'r',random,hostile
MONSTER:'r',random,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:';',"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:';',"shark",random MONSTER:(';',"shark"),random
MONSTER:';',"shark",random MONSTER:(';',"shark"),random
MONSTER:';',random,random,hostile MONSTER:';',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
# #
# The "fill" levels for the quest. # The "fill" levels for the quest.
@@ -301,34 +301,34 @@ MONSTER: 'S',random,random,hostile
# #
MAZE: "Hea-fila" , 'P' MAZE: "Hea-fila" , 'P'
INIT_MAP: '.' , 'P' , false , true , lit , false INIT_MAP: mines, '.' , 'P' , false , true , lit , false
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
MONSTER: 'r', "rabid rat", random MONSTER: ('r', "rabid rat"), random
MONSTER: 'r', random, random,hostile MONSTER: 'r', random,hostile
MONSTER: 'r', random, random,hostile MONSTER: 'r', random,hostile
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,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
@@ -336,42 +336,42 @@ TRAP: random, random
TRAP: random, random TRAP: random, random
MAZE: "Hea-filb" , 'P' MAZE: "Hea-filb" , 'P'
INIT_MAP: '.' , 'P' , false , true , lit , false INIT_MAP: mines, '.' , 'P' , false , true , lit , false
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, 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: 'r', random,hostile
MONSTER: 'r', random, 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: ';', "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: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'D',random,random,hostile MONSTER: 'D',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
MONSTER: 'S',random,random,hostile MONSTER: 'S',random,hostile
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
+153 -153
View File
@@ -13,7 +13,7 @@
MAZE: "Kni-strt",'.' MAZE: "Kni-strt",'.'
FLAGS: noteleport,hardfloor FLAGS: noteleport,hardfloor
# This is a kludge to init the level as a lit field. # 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 GEOMETRY:center,center
MAP MAP
.................................................. ..................................................
@@ -62,21 +62,21 @@ DOOR:closed,(45,03)
DOOR:closed,(04,12) DOOR:closed,(04,12)
DOOR:closed,(45,12) DOOR:closed,(45,12)
# King Arthur # King Arthur
MONSTER:'@',"King Arthur",(09,07) MONSTER:('@',"King Arthur"),(09,07)
# The treasure of King Arthur # The treasure of King Arthur
OBJECT:'(',"chest",(09,07) OBJECT:('(',"chest"),(09,07)
# knight guards for the watchrooms # knight guards for the watchrooms
MONSTER:'@',"knight",(04,02),peaceful MONSTER:('@',"knight"),(04,02),peaceful
MONSTER:'@',"knight",(04,13),peaceful MONSTER:('@',"knight"),(04,13),peaceful
MONSTER:'@',"knight",(45,02),peaceful MONSTER:('@',"knight"),(45,02),peaceful
MONSTER:'@',"knight",(45,13),peaceful MONSTER:('@',"knight"),(45,13),peaceful
# page guards for the audience chamber # page guards for the audience chamber
MONSTER:'@',"page",(16,06) MONSTER:('@',"page"),(16,06)
MONSTER:'@',"page",(18,06) MONSTER:('@',"page"),(18,06)
MONSTER:'@',"page",(20,06) MONSTER:('@',"page"),(20,06)
MONSTER:'@',"page",(16,09) MONSTER:('@',"page"),(16,09)
MONSTER:'@',"page",(18,09) MONSTER:('@',"page"),(18,09)
MONSTER:'@',"page",(20,09) MONSTER:('@',"page"),(20,09)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,49,15) NON_DIGGABLE:(00,00,49,15)
# Random traps # Random traps
@@ -87,18 +87,18 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters on siege duty. # Monsters on siege duty.
MONSTER: 'i',"quasit",(14,00),hostile MONSTER: ('i',"quasit"),(14,00),hostile
MONSTER: 'i',"quasit",(16,00),hostile MONSTER: ('i',"quasit"),(16,00),hostile
MONSTER: 'i',"quasit",(18,00),hostile MONSTER: ('i',"quasit"),(18,00),hostile
MONSTER: 'i',"quasit",(20,00),hostile MONSTER: ('i',"quasit"),(20,00),hostile
MONSTER: 'i',"quasit",(22,00),hostile MONSTER: ('i',"quasit"),(22,00),hostile
MONSTER: 'i',"quasit",(24,00),hostile MONSTER: ('i',"quasit"),(24,00),hostile
MONSTER: 'i',"quasit",(26,00),hostile MONSTER: ('i',"quasit"),(26,00),hostile
MONSTER: 'i',"quasit",(28,00),hostile MONSTER: ('i',"quasit"),(28,00),hostile
MONSTER: 'i',"quasit",(30,00),hostile MONSTER: ('i',"quasit"),(30,00),hostile
MONSTER: 'i',"quasit",(32,00),hostile MONSTER: ('i',"quasit"),(32,00),hostile
MONSTER: 'i',"quasit",(34,00),hostile MONSTER: ('i',"quasit"),(34,00),hostile
MONSTER: 'i',"quasit",(36,00),hostile MONSTER: ('i',"quasit"),(36,00),hostile
# #
# The "locate" level for the quest. # The "locate" level for the quest.
@@ -109,7 +109,7 @@ MONSTER: 'i',"quasit",(36,00),hostile
MAZE: "Kni-loca",' ' MAZE: "Kni-loca",' '
FLAGS: hardfloor FLAGS: hardfloor
INIT_MAP: '.' , 'P' , false , true , lit , false INIT_MAP: mines, '.' , 'P' , false , true , lit , false
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
...PPP.........PPPP..............PPPP... ...PPP.........PPPP..............PPPP...
@@ -136,21 +136,21 @@ STAIR:(18,05),down
# The altar atop the Tor and its attendant (creating altar makes the priest). # The altar atop the Tor and its attendant (creating altar makes the priest).
ALTAR:(17,05),neutral,shrine ALTAR:(17,05),neutral,shrine
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
# All of the avenues are guarded by magic except for the East. # All of the avenues are guarded by magic except for the East.
# South # South
@@ -210,33 +210,33 @@ TRAP:"anti magic",random
TRAP:"anti magic",random TRAP:"anti magic",random
TRAP:"anti magic",random TRAP:"anti magic",random
# Random monsters. # 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',"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:'i',random,hostile
MONSTER:'j',random,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',"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:'j',random,hostile
# #
# The "goal" level for the quest. # The "goal" level for the quest.
@@ -278,28 +278,28 @@ STAIR:(03,08),up
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Objects # Objects
OBJECT:'(',"mirror",(50,06),blessed,0,"The Magic Mirror of Merlin" OBJECT:('(',"mirror"),(50,06),blessed,0,name:"The Magic Mirror of Merlin"
OBJECT:random,random,(33,01) OBJECT:random,(33,01)
OBJECT:random,random,(33,02) OBJECT:random,(33,02)
OBJECT:random,random,(33,03) OBJECT:random,(33,03)
OBJECT:random,random,(33,04) OBJECT:random,(33,04)
OBJECT:random,random,(33,05) OBJECT:random,(33,05)
OBJECT:random,random,(34,01) OBJECT:random,(34,01)
OBJECT:random,random,(34,02) OBJECT:random,(34,02)
OBJECT:random,random,(34,03) OBJECT:random,(34,03)
OBJECT:random,random,(34,04) OBJECT:random,(34,04)
OBJECT:random,random,(34,05) OBJECT:random,(34,05)
OBJECT:random,random,(35,01) OBJECT:random,(35,01)
OBJECT:random,random,(35,02) OBJECT:random,(35,02)
OBJECT:random,random,(35,03) OBJECT:random,(35,03)
OBJECT:random,random,(35,04) OBJECT:random,(35,04)
OBJECT:random,random,(35,05) OBJECT:random,(35,05)
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:"spiked pit",(13,07) TRAP:"spiked pit",(13,07)
TRAP:"spiked pit",(12,08) TRAP:"spiked pit",(12,08)
@@ -310,34 +310,34 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'D',"Ixoth",(50,06),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',"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,hostile
MONSTER:'i',random,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',"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:'j',random,hostile
# #
# The "fill" levels for the quest. # The "fill" levels for the quest.
@@ -349,27 +349,27 @@ MONSTER:'j',random,random,hostile
# #
MAZE: "Kni-fila" , '.' MAZE: "Kni-fila" , '.'
INIT_MAP: '.' , 'P' , false , true , lit , false INIT_MAP: mines, '.' , 'P' , false , true , lit , false
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, 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', "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, hostile
MONSTER: 'j', "ochre jelly", random, hostile MONSTER: ('j', "ochre jelly"), random, hostile
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
@@ -377,32 +377,32 @@ TRAP: random, random
TRAP: random, random TRAP: random, random
MAZE: "Kni-filb" , '.' MAZE: "Kni-filb" , '.'
INIT_MAP: '.' , 'P' , false , true , lit , false INIT_MAP: mines, '.' , 'P' , false , true , lit , false
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, 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', "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, 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
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
+176 -156
View File
@@ -64,17 +64,17 @@ DOOR:closed,(52,14)
# Unattended Altar - unaligned due to conflict - player must align it. # Unattended Altar - unaligned due to conflict - player must align it.
ALTAR:(28,09),noalign,altar ALTAR:(28,09),noalign,altar
# The Grand Master # The Grand Master
MONSTER:'@',"Grand Master",(28,10) MONSTER:('@',"Grand Master"),(28,10)
# No treasure chest! # No treasure chest!
# guards for the audience chamber # guards for the audience chamber
MONSTER:'@',"abbot",(32,07) MONSTER:('@',"abbot"),(32,07)
MONSTER:'@',"abbot",(32,08) MONSTER:('@',"abbot"),(32,08)
MONSTER:'@',"abbot",(32,11) MONSTER:('@',"abbot"),(32,11)
MONSTER:'@',"abbot",(32,12) MONSTER:('@',"abbot"),(32,12)
MONSTER:'@',"abbot",(33,07) MONSTER:('@',"abbot"),(33,07)
MONSTER:'@',"abbot",(33,08) MONSTER:('@',"abbot"),(33,08)
MONSTER:'@',"abbot",(33,11) MONSTER:('@',"abbot"),(33,11)
MONSTER:'@',"abbot",(33,12) MONSTER:('@',"abbot"),(33,12)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Random traps # Random traps
@@ -85,18 +85,18 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters on siege duty. # Monsters on siege duty.
MONSTER: 'E',"earth elemental",(37,01) MONSTER: ('E',"earth elemental"),(37,01)
MONSTER: 'E',"earth elemental",(37,18) MONSTER: ('E',"earth elemental"),(37,18)
MONSTER: 'E',"earth elemental",(03,03) MONSTER: ('E',"earth elemental"),(03,03)
MONSTER: 'E',"earth elemental",(65,04) MONSTER: ('E',"earth elemental"),(65,04)
MONSTER: 'E',"earth elemental",(12,11) MONSTER: ('E',"earth elemental"),(12,11)
MONSTER: 'E',"earth elemental",(60,12) MONSTER: ('E',"earth elemental"),(60,12)
MONSTER: 'E',"earth elemental",(14,08) MONSTER: ('E',"earth elemental"),(14,08)
MONSTER: 'E',"earth elemental",(55,00) MONSTER: ('E',"earth elemental"),(55,00)
MONSTER: 'X',"xorn",(18,18) MONSTER: ('X',"xorn"),(18,18)
MONSTER: 'X',"xorn",(59,10) MONSTER: ('X',"xorn"),(59,10)
MONSTER: 'X',"xorn",(13,09) MONSTER: ('X',"xorn"),(13,09)
MONSTER: 'X',"xorn",(01,17) MONSTER: ('X',"xorn"),(01,17)
# #
# The "locate" level for the quest. # The "locate" level for the quest.
@@ -133,7 +133,9 @@ MAP
------------------------------------------ ------ ------------------------------------------ ------
ENDMAP ENDMAP
# Random Monsters # Random Monsters
RANDOM_MONSTERS: 'E', 'X' $monster = monster: { 'E', 'X' }
SHUFFLE: $monster
# Dungeon Description # Dungeon Description
REGION:(00,00,75,20),lit,"ordinary" REGION:(00,00,75,20),lit,"ordinary"
# Stairs # Stairs
@@ -142,21 +144,21 @@ STAIR:random,down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,20) NON_DIGGABLE:(00,00,75,20)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -165,29 +167,29 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # 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: '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: ('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. # The "goal" level for the quest.
@@ -198,7 +200,7 @@ MONSTER: 'X',"xorn",random
# #
MAZE: "Mon-goal", ' ' MAZE: "Mon-goal", ' '
INIT_MAP: 'L' , '.' , false , false , unlit , false INIT_MAP: mines, 'L' , '.' , false , false , unlit , false
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
.L......L.LLL.......LL.... .L......L.LLL.......LL....
@@ -214,26 +216,28 @@ LL........................
.........LLL.........L.... .........LLL.........L....
ENDMAP ENDMAP
# Dungeon Description # Dungeon Description
RANDOM_PLACES:(14,04),(13,07) $place = { (14,04),(13,07) }
SHUFFLE: $place
REGION:(00,00,25,10),unlit,"ordinary" REGION:(00,00,25,10),unlit,"ordinary"
# Stairs # Stairs
STAIR:(20,05),up STAIR:(20,05),up
# Objects # Objects
OBJECT:'(',"lenses",place[0],blessed,0,"The Eyes of the Overworld" OBJECT:('(',"lenses"),$place[0],blessed,0,name:"The Eyes of the Overworld"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:"fire",random TRAP:"fire",random
TRAP:"fire",random TRAP:"fire",random
@@ -242,26 +246,26 @@ TRAP:"fire",random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'@',"Master Kaen",place[0] MONSTER:('@',"Master Kaen"),$place[0]
ALTAR:place[0],noalign,altar 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: ('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: ('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. # The "fill" levels for the quest.
@@ -274,82 +278,98 @@ MONSTER: 'X',"xorn",random
LEVEL: "Mon-fila" LEVEL: "Mon-fila"
# Random Monsters # Random Monsters
RANDOM_MONSTERS: 'E', 'X' $monster = monster: { 'E', 'X' }
SHUFFLE: $monster
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'E', random, random, hostile MONSTER: 'E', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'E', random, random, hostile MONSTER: 'E', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'X', "xorn", random MONSTER: ('X', "xorn"), random
MONSTER: 'E', "earth elemental", random MONSTER: ('E', "earth elemental"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'E', random, random, hostile MONSTER: 'E', random, hostile
MONSTER: 'E', "earth elemental", random MONSTER: ('E', "earth elemental"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'X', random, random, hostile MONSTER: 'X', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'E', "earth elemental", random MONSTER: ('E', "earth elemental"), random
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
LEVEL: "Mon-filb" LEVEL: "Mon-filb"
# Random Monsters # Random Monsters
RANDOM_MONSTERS: 'E', 'X' $monster = monster: { 'E', 'X' }
SHUFFLE: $monster
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'X', random, random, hostile MONSTER: 'X', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'X', random, random, hostile MONSTER: 'X', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'E', random, random, hostile MONSTER: 'E', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'E', random, random, hostile MONSTER: 'E', random, hostile
MONSTER: 'E', "earth elemental", random MONSTER: ('E', "earth elemental"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'X', random, random, hostile MONSTER: 'X', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'E', "earth elemental", random MONSTER: ('E', "earth elemental"), random
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
+152 -138
View File
@@ -64,18 +64,18 @@ DOOR:closed,(52,14)
# Unattended Altar - unaligned due to conflict - player must align it. # Unattended Altar - unaligned due to conflict - player must align it.
ALTAR:(28,09),noalign,altar ALTAR:(28,09),noalign,altar
# High Priest # High Priest
MONSTER:'@',"Arch Priest",(28,10) MONSTER:('@',"Arch Priest"),(28,10)
# The treasure of High Priest # The treasure of High Priest
OBJECT:'(',"chest",(27,10) OBJECT:('(',"chest"),(27,10)
# knight guards for the audience chamber # knight guards for the audience chamber
MONSTER:'@',"acolyte",(32,07) MONSTER:('@',"acolyte"),(32,07)
MONSTER:'@',"acolyte",(32,08) MONSTER:('@',"acolyte"),(32,08)
MONSTER:'@',"acolyte",(32,11) MONSTER:('@',"acolyte"),(32,11)
MONSTER:'@',"acolyte",(32,12) MONSTER:('@',"acolyte"),(32,12)
MONSTER:'@',"acolyte",(33,07) MONSTER:('@',"acolyte"),(33,07)
MONSTER:'@',"acolyte",(33,08) MONSTER:('@',"acolyte"),(33,08)
MONSTER:'@',"acolyte",(33,11) MONSTER:('@',"acolyte"),(33,11)
MONSTER:'@',"acolyte",(33,12) MONSTER:('@',"acolyte"),(33,12)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Random traps # Random traps
@@ -86,18 +86,18 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters on siege duty. # Monsters on siege duty.
MONSTER: 'Z',"human zombie",(37,01) MONSTER: ('Z',"human zombie"),(37,01)
MONSTER: 'Z',"human zombie",(37,18) MONSTER: ('Z',"human zombie"),(37,18)
MONSTER: 'Z',"human zombie",(03,03) MONSTER: ('Z',"human zombie"),(03,03)
MONSTER: 'Z',"human zombie",(65,04) MONSTER: ('Z',"human zombie"),(65,04)
MONSTER: 'Z',"human zombie",(12,11) MONSTER: ('Z',"human zombie"),(12,11)
MONSTER: 'Z',"human zombie",(60,12) MONSTER: ('Z',"human zombie"),(60,12)
MONSTER: 'Z',"human zombie",(14,08) MONSTER: ('Z',"human zombie"),(14,08)
MONSTER: 'Z',"human zombie",(55,00) MONSTER: ('Z',"human zombie"),(55,00)
MONSTER: 'Z',"human zombie",(18,18) MONSTER: ('Z',"human zombie"),(18,18)
MONSTER: 'Z',"human zombie",(59,10) MONSTER: ('Z',"human zombie"),(59,10)
MONSTER: 'Z',"human zombie",(13,09) MONSTER: ('Z',"human zombie"),(13,09)
MONSTER: 'Z',"human zombie",(01,17) MONSTER: ('Z',"human zombie"),(01,17)
# #
# The "locate" level for the quest. # The "locate" level for the quest.
@@ -109,7 +109,7 @@ MONSTER: 'Z',"human zombie",(01,17)
MAZE: "Pri-loca",' ' MAZE: "Pri-loca",' '
FLAGS: hardfloor FLAGS: hardfloor
# This is a kludge to init the level as a lit field. # 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 GEOMETRY:center,center
MAP MAP
........................................ ........................................
@@ -132,10 +132,10 @@ REGION:(00,00,09,13),unlit,"morgue"
REGION:(09,00,30,01),unlit,"morgue" REGION:(09,00,30,01),unlit,"morgue"
REGION:(09,12,30,13),unlit,"morgue" REGION:(09,12,30,13),unlit,"morgue"
REGION:(31,00,39,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 # The altar inside the temple
ALTAR:(20,07),noalign,shrine ALTAR:(20,07),noalign,shrine
MONSTER:'@',"aligned priest",(20,07),noalign,hostile MONSTER:('@',"aligned priest"),(20,07),noalign,hostile
# Doors # Doors
DOOR:locked,(10,06) DOOR:locked,(10,06)
DOOR:locked,(10,07) DOOR:locked,(10,07)
@@ -150,21 +150,21 @@ STAIR:(20,06),down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(10,02,30,13) NON_DIGGABLE:(10,02,30,13)
# Objects (inside the antechambers). # Objects (inside the antechambers).
OBJECT:random,random,(14,03) OBJECT:random,(14,03)
OBJECT:random,random,(15,03) OBJECT:random,(15,03)
OBJECT:random,random,(16,03) OBJECT:random,(16,03)
OBJECT:random,random,(14,10) OBJECT:random,(14,10)
OBJECT:random,random,(15,10) OBJECT:random,(15,10)
OBJECT:random,random,(16,10) OBJECT:random,(16,10)
OBJECT:random,random,(17,10) OBJECT:random,(17,10)
OBJECT:random,random,(24,03) OBJECT:random,(24,03)
OBJECT:random,random,(25,03) OBJECT:random,(25,03)
OBJECT:random,random,(26,03) OBJECT:random,(26,03)
OBJECT:random,random,(27,03) OBJECT:random,(27,03)
OBJECT:random,random,(24,10) OBJECT:random,(24,10)
OBJECT:random,random,(25,10) OBJECT:random,(25,10)
OBJECT:random,random,(26,10) OBJECT:random,(26,10)
OBJECT:random,random,(27,10) OBJECT:random,(27,10)
# Random traps # Random traps
TRAP:random,(15,04) TRAP:random,(15,04)
TRAP:random,(25,04) TRAP:random,(25,04)
@@ -183,7 +183,7 @@ TRAP:random,random
# #
MAZE: "Pri-goal", ' ' MAZE: "Pri-goal", ' '
INIT_MAP: 'L' , '.' , false , false , unlit , false INIT_MAP: mines, 'L' , '.' , false , false , unlit , false
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
.L......L.LLL.......LL.... .L......L.LLL.......LL....
@@ -199,26 +199,28 @@ LL........................
.........LLL.........L.... .........LLL.........L....
ENDMAP ENDMAP
# Dungeon Description # Dungeon Description
RANDOM_PLACES:(14,04),(13,07) $place = { (14,04),(13,07) }
SHUFFLE: $place
REGION:(00,00,25,10),unlit,"ordinary" REGION:(00,00,25,10),unlit,"ordinary"
# Stairs # Stairs
STAIR:(20,05),up STAIR:(20,05),up
# Objects # Objects
OBJECT:'[',"helm of brilliance",place[0],blessed,0,"The Mitre of Holiness" OBJECT:('[',"helm of brilliance"),$place[0],blessed,0,name:"The Mitre of Holiness"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:"fire",random TRAP:"fire",random
TRAP:"fire",random TRAP:"fire",random
@@ -227,34 +229,34 @@ TRAP:"fire",random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'&',"Nalzok",place[0] 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',"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
MONSTER:'Z',random,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',"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:'W',random
# #
# The "fill" levels for the quest. # The "fill" levels for the quest.
@@ -267,73 +269,85 @@ MONSTER:'W',random,random
LEVEL: "Pri-fila" LEVEL: "Pri-fila"
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'Z', "human zombie", random MONSTER: ('Z', "human zombie"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'Z', "human zombie", random MONSTER: ('Z', "human zombie"), random
}
ROOM: "morgue" , random, random, random, random ROOM: "morgue" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'W', "wraith", random MONSTER: ('W', "wraith"), random
}
ROOM: "morgue" , random, random, random, random ROOM: "morgue" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
LEVEL: "Pri-filb" LEVEL: "Pri-filb"
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'Z', "human zombie", random MONSTER: ('Z', "human zombie"), random
MONSTER: 'W', "wraith", random MONSTER: ('W', "wraith"), random
}
ROOM: "morgue" , random, random, random, random ROOM: "morgue" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'Z', "human zombie", random MONSTER: ('Z', "human zombie"), random
MONSTER: 'W', "wraith", random MONSTER: ('W', "wraith"), random
}
ROOM: "morgue" , random, random, random, random ROOM: "morgue" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'Z', "human zombie", random MONSTER: ('Z', "human zombie"), random
MONSTER: 'W', "wraith", random MONSTER: ('W', "wraith"), random
}
ROOM: "morgue" , random, random, random, random ROOM: "morgue" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
+146 -146
View File
@@ -12,7 +12,7 @@
# #
MAZE: "Ran-strt",'.' MAZE: "Ran-strt",'.'
FLAGS: noteleport,hardfloor,arboreal FLAGS: noteleport,hardfloor,arboreal
INIT_MAP:'.','.',true,true,lit,false INIT_MAP:mines,'.','.',true,true,lit,false
GEOMETRY:left,center GEOMETRY:left,center
#1234567890123456789012345678901234567890123456789012345678901234567890 #1234567890123456789012345678901234567890123456789012345678901234567890
MAP MAP
@@ -45,18 +45,18 @@ STAIR:(10,10),down
# Portal arrival point; just about anywhere on the right hand side of the map # Portal arrival point; just about anywhere on the right hand side of the map
BRANCH:levregion(51,2,77,18),(0,0,40,20) BRANCH:levregion(51,2,77,18),(0,0,40,20)
# Orion # Orion
MONSTER:'@',"Orion",(20,10) MONSTER:('@',"Orion"),(20,10)
# The treasure of Orion # The treasure of Orion
OBJECT:'(',"chest",(20,10) OBJECT:('(',"chest"),(20,10)
# Guards for the audience chamber # Guards for the audience chamber
MONSTER:'@',"hunter",(19,09) MONSTER:('@',"hunter"),(19,09)
MONSTER:'@',"hunter",(20,09) MONSTER:('@',"hunter"),(20,09)
MONSTER:'@',"hunter",(21,09) MONSTER:('@',"hunter"),(21,09)
MONSTER:'@',"hunter",(19,10) MONSTER:('@',"hunter"),(19,10)
MONSTER:'@',"hunter",(21,10) MONSTER:('@',"hunter"),(21,10)
MONSTER:'@',"hunter",(19,11) MONSTER:('@',"hunter"),(19,11)
MONSTER:'@',"hunter",(20,11) MONSTER:('@',"hunter"),(20,11)
MONSTER:'@',"hunter",(21,11) MONSTER:('@',"hunter"),(21,11)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,40,20) NON_DIGGABLE:(00,00,40,20)
# Traps # Traps
@@ -67,33 +67,33 @@ TRAP:"spiked pit",random
TRAP:"bear",random TRAP:"bear",random
TRAP:"bear",random TRAP:"bear",random
# Monsters on siege duty. # Monsters on siege duty.
MONSTER: 'H',"minotaur",(33,09),hostile,asleep MONSTER: ('H',"minotaur"),(33,09),hostile,asleep
MONSTER: 'C',"forest centaur",(19,03),hostile MONSTER: ('C',"forest centaur"),(19,03),hostile
MONSTER: 'C',"forest centaur",(19,04),hostile MONSTER: ('C',"forest centaur"),(19,04),hostile
MONSTER: 'C',"forest centaur",(19,05),hostile MONSTER: ('C',"forest centaur"),(19,05),hostile
MONSTER: 'C',"forest centaur",(21,03),hostile MONSTER: ('C',"forest centaur"),(21,03),hostile
MONSTER: 'C',"forest centaur",(21,04),hostile MONSTER: ('C',"forest centaur"),(21,04),hostile
MONSTER: 'C',"forest centaur",(21,05),hostile MONSTER: ('C',"forest centaur"),(21,05),hostile
MONSTER: 'C',"forest centaur",(01,09),hostile MONSTER: ('C',"forest centaur"),(01,09),hostile
MONSTER: 'C',"forest centaur",(02,09),hostile MONSTER: ('C',"forest centaur"),(02,09),hostile
MONSTER: 'C',"forest centaur",(03,09),hostile MONSTER: ('C',"forest centaur"),(03,09),hostile
MONSTER: 'C',"forest centaur",(01,11),hostile MONSTER: ('C',"forest centaur"),(01,11),hostile
MONSTER: 'C',"forest centaur",(02,11),hostile MONSTER: ('C',"forest centaur"),(02,11),hostile
MONSTER: 'C',"forest centaur",(03,11),hostile MONSTER: ('C',"forest centaur"),(03,11),hostile
MONSTER: 'C',"forest centaur",(19,15),hostile MONSTER: ('C',"forest centaur"),(19,15),hostile
MONSTER: 'C',"forest centaur",(19,16),hostile MONSTER: ('C',"forest centaur"),(19,16),hostile
MONSTER: 'C',"forest centaur",(19,17),hostile MONSTER: ('C',"forest centaur"),(19,17),hostile
MONSTER: 'C',"forest centaur",(21,15),hostile MONSTER: ('C',"forest centaur"),(21,15),hostile
MONSTER: 'C',"forest centaur",(21,16),hostile MONSTER: ('C',"forest centaur"),(21,16),hostile
MONSTER: 'C',"forest centaur",(21,17),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: '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: 's',"scorpion",random,hostile MONSTER: ('s',"scorpion"),random,hostile
# #
@@ -137,14 +137,14 @@ STAIR:(27,18),down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,54,19) NON_DIGGABLE:(00,00,54,19)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:"spiked pit",random TRAP:"spiked pit",random
TRAP:"spiked pit",random TRAP:"spiked pit",random
@@ -153,29 +153,29 @@ TRAP:"teleport",random
TRAP:"arrow",random TRAP:"arrow",random
TRAP:"arrow",random TRAP:"arrow",random
# Random monsters. # Random monsters.
MONSTER:'q',"wumpus",(27,18),hostile,asleep 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:'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',"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:'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',"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,hostile
MONSTER:'s',random,random,hostile MONSTER:'s',random,hostile
# #
@@ -217,21 +217,21 @@ STAIR:(19,10),up
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Objects # Objects
OBJECT:')',"bow",(37,10),blessed,0,"The Longbow of Diana" OBJECT:(')',"bow"),(37,10),blessed,0,name:"The Longbow of Diana"
OBJECT:'(',"chest",(37,10) OBJECT:('(',"chest"),(37,10)
OBJECT:random,random,(36,09) OBJECT:random,(36,09)
OBJECT:random,random,(36,10) OBJECT:random,(36,10)
OBJECT:random,random,(36,11) OBJECT:random,(36,11)
OBJECT:random,random,(37,09) OBJECT:random,(37,09)
OBJECT:random,random,(37,11) OBJECT:random,(37,11)
OBJECT:random,random,(38,09) OBJECT:random,(38,09)
OBJECT:random,random,(38,10) OBJECT:random,(38,10)
OBJECT:random,random,(38,11) OBJECT:random,(38,11)
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -255,34 +255,34 @@ DOOR:closed,(51,10)
DOOR:locked,(53,08) DOOR:locked,(53,08)
DOOR:closed,(65,05) DOOR:closed,(65,05)
# Random monsters. # Random monsters.
MONSTER:'s',"Scorpius",(37,10),hostile MONSTER:('s',"Scorpius"),(37,10),hostile
MONSTER:'C',"forest centaur",(36,09),hostile MONSTER:('C',"forest centaur"),(36,09),hostile
MONSTER:'C',"forest centaur",(36,10),hostile MONSTER:('C',"forest centaur"),(36,10),hostile
MONSTER:'C',"forest centaur",(36,11),hostile MONSTER:('C',"forest centaur"),(36,11),hostile
MONSTER:'C',"forest centaur",(37,09),hostile MONSTER:('C',"forest centaur"),(37,09),hostile
MONSTER:'C',"forest centaur",(37,11),hostile MONSTER:('C',"forest centaur"),(37,11),hostile
MONSTER:'C',"forest centaur",(38,09),hostile MONSTER:('C',"forest centaur"),(38,09),hostile
MONSTER:'C',"mountain centaur",(38,10),hostile MONSTER:('C',"mountain centaur"),(38,10),hostile
MONSTER:'C',"mountain centaur",(38,11),hostile MONSTER:('C',"mountain centaur"),(38,11),hostile
MONSTER:'C',"mountain centaur",(02,02),hostile MONSTER:('C',"mountain centaur"),(02,02),hostile
MONSTER:'C',"mountain centaur",(71,02),hostile MONSTER:('C',"mountain centaur"),(71,02),hostile
MONSTER:'C',"mountain centaur",(02,16),hostile MONSTER:('C',"mountain centaur"),(02,16),hostile
MONSTER:'C',"mountain centaur",(71,16),hostile MONSTER:('C',"mountain centaur"),(71,16),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',random,random,hostile MONSTER:'C',random,hostile
MONSTER:'C',random,random,hostile MONSTER:'C',random,hostile
MONSTER:'s',"scorpion",(03,02),hostile MONSTER:('s',"scorpion"),(03,02),hostile
MONSTER:'s',"scorpion",(72,02),hostile MONSTER:('s',"scorpion"),(72,02),hostile
MONSTER:'s',"scorpion",(03,17),hostile MONSTER:('s',"scorpion"),(03,17),hostile
MONSTER:'s',"scorpion",(72,17),hostile MONSTER:('s',"scorpion"),(72,17),hostile
MONSTER:'s',"scorpion",(41,10),hostile MONSTER:('s',"scorpion"),(41,10),hostile
MONSTER:'s',"scorpion",(33,09),hostile MONSTER:('s',"scorpion"),(33,09),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,hostile
WALLIFY WALLIFY
@@ -296,62 +296,62 @@ WALLIFY
# #
MAZE: "Ran-fila" , ' ' MAZE: "Ran-fila" , ' '
INIT_MAP: '.' , 'T', true, true, random, true INIT_MAP: mines, '.' , 'T', true, true, random, true
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: 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', "forest centaur", 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', "forest centaur"), random, hostile
MONSTER: 'C', random, random, hostile MONSTER: 'C', random, hostile
MONSTER: 's', "scorpion", random, hostile MONSTER: ('s', "scorpion"), random, hostile
MAZE: "Ran-filb" , ' ' MAZE: "Ran-filb" , ' '
INIT_MAP: '.' , ' ', true, true, random, true INIT_MAP: mines, '.' , ' ', true, true, random, true
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: 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', "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: 'C', random, hostile
MONSTER: 's', "scorpion", random, hostile MONSTER: ('s', "scorpion"), random, hostile
MONSTER: 's', "scorpion", random, hostile MONSTER: ('s', "scorpion"), random, hostile
+225 -211
View File
@@ -41,11 +41,13 @@ ENDMAP
#REGION:(00,00,75,20),lit,"ordinary" #REGION:(00,00,75,20),lit,"ordinary"
# The down stairs is at one of the 4 "exits". The others are mimics, # The down stairs is at one of the 4 "exits". The others are mimics,
# mimicing stairwells. # mimicing stairwells.
RANDOM_PLACES: (33,0), (0,12), (25,20), (75,05) $place = { (33,0), (0,12), (25,20), (75,05) }
STAIR:place[0],down SHUFFLE: $place
MONSTER:'m',"giant mimic", place[1], m_feature "staircase down"
MONSTER:'m',"large mimic", place[2], m_feature "staircase down" STAIR:$place[0],down
MONSTER:'m',"small mimic", place[3], m_feature "staircase 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 # Portal arrival point
BRANCH:(19,09,19,09),(0,0,0,0) BRANCH:(19,09,19,09),(0,0,0,0)
# Doors (secret) # Doors (secret)
@@ -98,21 +100,21 @@ DOOR: closed, ( 6,18)
DOOR: closed, (65,18) DOOR: closed, (65,18)
DOOR: closed, (68,18) DOOR: closed, (68,18)
# Master of Thieves # Master of Thieves
MONSTER:'@',"Master of Thieves",(36,11) MONSTER:('@',"Master of Thieves"),(36,11)
# The treasure of Master of Thieves # The treasure of Master of Thieves
OBJECT:'(',"chest",(36,11) OBJECT:('(',"chest"),(36,11)
# thug guards, room #1 # thug guards, room #1
MONSTER:'@',"thug",(28,10) MONSTER:('@',"thug"),(28,10)
MONSTER:'@',"thug",(29,11) MONSTER:('@',"thug"),(29,11)
MONSTER:'@',"thug",(30,09) MONSTER:('@',"thug"),(30,09)
MONSTER:'@',"thug",(31,07) MONSTER:('@',"thug"),(31,07)
# thug guards, room #2 # thug guards, room #2
MONSTER:'@',"thug",(31,13) MONSTER:('@',"thug"),(31,13)
MONSTER:'@',"thug",(33,14) MONSTER:('@',"thug"),(33,14)
MONSTER:'@',"thug",(30,15) MONSTER:('@',"thug"),(30,15)
#thug guards, room #3 #thug guards, room #3
MONSTER:'@',"thug",(35,09) MONSTER:('@',"thug"),(35,09)
MONSTER:'@',"thug",(36,13) MONSTER:('@',"thug"),(36,13)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,20) NON_DIGGABLE:(00,00,75,20)
# Random traps # Random traps
@@ -136,37 +138,37 @@ TRAP:random,random
# Monsters to get in the way. # Monsters to get in the way.
# #
# West exit # West exit
MONSTER: 'l',"leprechaun",(01,12),hostile MONSTER: ('l',"leprechaun"),(01,12),hostile
MONSTER: 'n',"water nymph",(02,12),hostile MONSTER: ('n',"water nymph"),(02,12),hostile
# North exit # North exit
MONSTER: 'n',"water nymph",(33,01),hostile MONSTER: ('n',"water nymph"),(33,01),hostile
MONSTER: 'l',"leprechaun",(33,02),hostile MONSTER: ('l',"leprechaun"),(33,02),hostile
# East exit # East exit
MONSTER: 'n',"water nymph",(74,05),hostile MONSTER: ('n',"water nymph"),(74,05),hostile
MONSTER: 'l',"leprechaun",(74,04),hostile MONSTER: ('l',"leprechaun"),(74,04),hostile
# South exit # South exit
MONSTER: 'l',"leprechaun",(25,19),hostile MONSTER: ('l',"leprechaun"),(25,19),hostile
MONSTER: 'n',"water nymph",(25,18),hostile MONSTER: ('n',"water nymph"),(25,18),hostile
# Wandering the streets. What I'd really like for this is a random # 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 # location, but make sure we're on a given type, e.g. street (if they
# existed, of course). # existed, of course).
MONSTER: 'n',"water nymph",(07,05),hostile MONSTER: ('n',"water nymph"),(07,05),hostile
MONSTER: 'l',"leprechaun",(28,06),hostile MONSTER: ('l',"leprechaun"),(28,06),hostile
MONSTER: 'n',"water nymph",(38,07),hostile MONSTER: ('n',"water nymph"),(38,07),hostile
MONSTER: 'l',"leprechaun",(45,01),hostile MONSTER: ('l',"leprechaun"),(45,01),hostile
MONSTER: 'n',"water nymph",(59,07),hostile MONSTER: ('n',"water nymph"),(59,07),hostile
MONSTER: 'l',"leprechaun",(62,14),hostile MONSTER: ('l',"leprechaun"),(62,14),hostile
MONSTER: 'n',"water nymph",(71,14),hostile MONSTER: ('n',"water nymph"),(71,14),hostile
MONSTER: 'l',"leprechaun",(39,13),hostile MONSTER: ('l',"leprechaun"),(39,13),hostile
MONSTER: 'n',"water nymph",(18,14),hostile MONSTER: ('n',"water nymph"),(18,14),hostile
MONSTER: ':',"chameleon",(19,08),hostile MONSTER: (':',"chameleon"),(19,08),hostile
MONSTER: ':',"chameleon",(22,08),hostile MONSTER: (':',"chameleon"),(22,08),hostile
MONSTER: ':',"chameleon",(16,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: (':',"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. # The "locate" level for the quest.
@@ -212,21 +214,21 @@ STAIR:random,down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,20) NON_DIGGABLE:(00,00,75,20)
# Objects # Objects
OBJECT:'?',"teleportation",(11,18),cursed,0 OBJECT:('?',"teleportation"),(11,18),cursed,0
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -235,39 +237,39 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # 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',"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:'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',"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,hostile
MONSTER:'N',random,random,hostile MONSTER:'N',random,hostile
MONSTER:'N',random,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: (':',"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 # 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. # One trap to keep the gnomes at bay.
TRAP:"spiked pit",(37,07) TRAP:"spiked pit",(37,07)
# Objects # Objects
OBJECT:'(',"skeleton key",(38,10),blessed,0,"The Master Key of Thievery" OBJECT:('(',"skeleton key"),(38,10),blessed,0,name:"The Master Key of Thievery"
OBJECT:'%',"tin",(26,12),"chameleon",0 OBJECT:('%',"tin"),(26,12),montype:"chameleon"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -343,45 +345,45 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'@',"Master Assassin",(38,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',"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,hostile
MONSTER:'l',random,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',"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,hostile
MONSTER:'N',random,random,hostile MONSTER:'N',random,hostile
MONSTER:'N',random,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: (':',"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"),(51,14),hostile
MONSTER:';',"shark",(53,09),hostile MONSTER:(';',"shark"),(53,09),hostile
MONSTER:';',"shark",(55,15),hostile MONSTER:(';',"shark"),(55,15),hostile
MONSTER:';',"shark",(58,10),hostile MONSTER:(';',"shark"),(58,10),hostile
# #
# The "fill" level for the quest. # The "fill" level for the quest.
@@ -391,45 +393,51 @@ MONSTER:';',"shark",(58,10),hostile
# #
LEVEL: "Rog-fila" LEVEL: "Rog-fila"
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'l', "leprechaun", random, hostile MONSTER: ('l', "leprechaun"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'l', "leprechaun", random, hostile MONSTER: ('l', "leprechaun"), random, hostile
MONSTER: 'N', "guardian naga", random, hostile MONSTER: ('N', "guardian naga"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'n', "water nymph", random, hostile MONSTER: ('n', "water nymph"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'l', random, random, hostile MONSTER: 'l', random, hostile
MONSTER: 'N', "guardian naga", random, hostile MONSTER: ('N', "guardian naga"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'l', "leprechaun", random, hostile MONSTER: ('l', "leprechaun"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'l', "leprechaun", random, hostile MONSTER: ('l', "leprechaun"), random, hostile
MONSTER: 'n', "water nymph", random, hostile MONSTER: ('n', "water nymph"), random, hostile
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
@@ -438,44 +446,50 @@ RANDOM_CORRIDORS
# #
LEVEL: "Rog-filb" LEVEL: "Rog-filb"
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'l', "leprechaun", random, hostile MONSTER: ('l', "leprechaun"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'l', "leprechaun", random, hostile MONSTER: ('l', "leprechaun"), random, hostile
MONSTER: 'N', "guardian naga", random, hostile MONSTER: ('N', "guardian naga"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'n', "water nymph", random, hostile MONSTER: ('n', "water nymph"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'l', random, random, hostile MONSTER: 'l', random, hostile
MONSTER: 'N', "guardian naga", random, hostile MONSTER: ('N', "guardian naga"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'l', "leprechaun", random, hostile MONSTER: ('l', "leprechaun"), random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'l', "leprechaun", random, hostile MONSTER: ('l', "leprechaun"), random, hostile
MONSTER: 'n', "water nymph", random, hostile MONSTER: ('n', "water nymph"), random, hostile
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
+167 -165
View File
@@ -54,18 +54,18 @@ DOOR:locked,(39,08)
DOOR:closed,(50,04) DOOR:closed,(50,04)
DOOR:closed,(50,06) DOOR:closed,(50,06)
# Lord Sato # Lord Sato
MONSTER:'@',"Lord Sato",(20,04) MONSTER:('@',"Lord Sato"),(20,04)
# The treasure of Lord Sato # The treasure of Lord Sato
OBJECT:'(',"chest",(20,04) OBJECT:('(',"chest"),(20,04)
# roshi guards for the audience chamber # roshi guards for the audience chamber
MONSTER:'@',"roshi",(18,04) MONSTER:('@',"roshi"),(18,04)
MONSTER:'@',"roshi",(18,05) MONSTER:('@',"roshi"),(18,05)
MONSTER:'@',"roshi",(18,06) MONSTER:('@',"roshi"),(18,06)
MONSTER:'@',"roshi",(18,07) MONSTER:('@',"roshi"),(18,07)
MONSTER:'@',"roshi",(26,04) MONSTER:('@',"roshi"),(26,04)
MONSTER:'@',"roshi",(26,05) MONSTER:('@',"roshi"),(26,05)
MONSTER:'@',"roshi",(26,06) MONSTER:('@',"roshi"),(26,06)
MONSTER:'@',"roshi",(26,07) MONSTER:('@',"roshi"),(26,07)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Random traps # Random traps
@@ -76,19 +76,19 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters on siege duty. # Monsters on siege duty.
MONSTER: '@',"ninja",(64,00),hostile MONSTER: ('@',"ninja"),(64,00),hostile
MONSTER: 'd',"wolf",(65,01) MONSTER: ('d',"wolf"),(65,01)
MONSTER: '@',"ninja",(67,02),hostile MONSTER: ('@',"ninja"),(67,02),hostile
MONSTER: '@',"ninja",(69,05),hostile MONSTER: ('@',"ninja"),(69,05),hostile
MONSTER: '@',"ninja",(69,06),hostile MONSTER: ('@',"ninja"),(69,06),hostile
MONSTER: 'd',"wolf",(69,07) MONSTER: ('d',"wolf"),(69,07)
MONSTER: '@',"ninja",(70,06),hostile MONSTER: ('@',"ninja"),(70,06),hostile
MONSTER: '@',"ninja",(70,07),hostile MONSTER: ('@',"ninja"),(70,07),hostile
MONSTER: '@',"ninja",(72,01),hostile MONSTER: ('@',"ninja"),(72,01),hostile
MONSTER: 'd',"wolf",(75,09) MONSTER: ('d',"wolf"),(75,09)
MONSTER: '@',"ninja",(73,05),hostile MONSTER: ('@',"ninja"),(73,05),hostile
MONSTER: '@',"ninja",(68,02),hostile MONSTER: ('@',"ninja"),(68,02),hostile
MONSTER:'E',"stalker",random MONSTER:('E',"stalker"),random
# #
# The "locate" level for the quest. # The "locate" level for the quest.
@@ -155,41 +155,41 @@ STAIR:(25,14),down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Objects # Objects
OBJECT:'*',random,(25,05) OBJECT:'*',(25,05)
OBJECT:'*',random,(26,05) OBJECT:'*',(26,05)
OBJECT:'*',random,(27,05) OBJECT:'*',(27,05)
OBJECT:'*',random,(28,05) OBJECT:'*',(28,05)
OBJECT:'*',random,(25,06) OBJECT:'*',(25,06)
OBJECT:'*',random,(26,06) OBJECT:'*',(26,06)
OBJECT:'*',random,(27,06) OBJECT:'*',(27,06)
OBJECT:'*',random,(28,06) OBJECT:'*',(28,06)
# #
OBJECT:'[',random,(40,05) OBJECT:'[',(40,05)
OBJECT:'[',random,(41,05) OBJECT:'[',(41,05)
OBJECT:'[',random,(42,05) OBJECT:'[',(42,05)
OBJECT:'[',random,(43,05) OBJECT:'[',(43,05)
OBJECT:'[',random,(40,06) OBJECT:'[',(40,06)
OBJECT:'[',random,(41,06) OBJECT:'[',(41,06)
OBJECT:'[',random,(42,06) OBJECT:'[',(42,06)
OBJECT:'[',random,(43,06) OBJECT:'[',(43,06)
# #
OBJECT:')',random,(27,13) OBJECT:')',(27,13)
OBJECT:')',random,(28,13) OBJECT:')',(28,13)
OBJECT:')',random,(29,13) OBJECT:')',(29,13)
OBJECT:')',random,(30,13) OBJECT:')',(30,13)
OBJECT:')',random,(27,14) OBJECT:')',(27,14)
OBJECT:')',random,(28,14) OBJECT:')',(28,14)
OBJECT:')',random,(29,14) OBJECT:')',(29,14)
OBJECT:')',random,(30,14) OBJECT:')',(30,14)
# #
OBJECT:'(',random,(37,13) OBJECT:'(',(37,13)
OBJECT:'(',random,(38,13) OBJECT:'(',(38,13)
OBJECT:'(',random,(39,13) OBJECT:'(',(39,13)
OBJECT:'(',random,(40,13) OBJECT:'(',(40,13)
OBJECT:'(',random,(37,14) OBJECT:'(',(37,14)
OBJECT:'(',random,(38,14) OBJECT:'(',(38,14)
OBJECT:'(',random,(39,14) OBJECT:'(',(39,14)
OBJECT:'(',random,(40,14) OBJECT:'(',(40,14)
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -198,40 +198,40 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'@',"ninja",(15,05),hostile MONSTER:('@',"ninja"),(15,05),hostile
MONSTER:'@',"ninja",(16,05),hostile MONSTER:('@',"ninja"),(16,05),hostile
MONSTER:'d',"wolf",(17,05) MONSTER:('d',"wolf"),(17,05)
MONSTER:'d',"wolf",(18,05) MONSTER:('d',"wolf"),(18,05)
MONSTER:'@',"ninja",(19,05),hostile MONSTER:('@',"ninja"),(19,05),hostile
MONSTER:'d',"wolf",(15,14) MONSTER:('d',"wolf"),(15,14)
MONSTER:'d',"wolf",(16,14) MONSTER:('d',"wolf"),(16,14)
MONSTER:'@',"ninja",(17,14),hostile MONSTER:('@',"ninja"),(17,14),hostile
MONSTER:'@',"ninja",(18,14),hostile MONSTER:('@',"ninja"),(18,14),hostile
MONSTER:'d',"wolf",(56,05) MONSTER:('d',"wolf"),(56,05)
MONSTER:'@',"ninja",(57,05),hostile MONSTER:('@',"ninja"),(57,05),hostile
MONSTER:'d',"wolf",(58,05) MONSTER:('d',"wolf"),(58,05)
MONSTER:'d',"wolf",(59,05) MONSTER:('d',"wolf"),(59,05)
MONSTER:'@',"ninja",(56,14),hostile MONSTER:('@',"ninja"),(56,14),hostile
MONSTER:'d',"wolf",(57,14) MONSTER:('d',"wolf"),(57,14)
MONSTER:'@',"ninja",(58,14),hostile MONSTER:('@',"ninja"),(58,14),hostile
MONSTER:'d',random,(59,14) MONSTER:'d',(59,14)
MONSTER:'d',"wolf",(60,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:('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. # "guards" for the central courtyard.
MONSTER:'@',"samurai",(30,05),hostile MONSTER:('@',"samurai"),(30,05),hostile
MONSTER:'@',"samurai",(31,05),hostile MONSTER:('@',"samurai"),(31,05),hostile
MONSTER:'@',"samurai",(32,05),hostile MONSTER:('@',"samurai"),(32,05),hostile
MONSTER:'@',"samurai",(32,14),hostile MONSTER:('@',"samurai"),(32,14),hostile
MONSTER:'@',"samurai",(33,14),hostile MONSTER:('@',"samurai"),(33,14),hostile
MONSTER:'@',"samurai",(34,14),hostile MONSTER:('@',"samurai"),(34,14),hostile
# #
# The "goal" level for the quest. # The "goal" level for the quest.
@@ -267,7 +267,9 @@ MAP
....................... .......................
ENDMAP ENDMAP
# Dungeon Description # Dungeon Description
RANDOM_PLACES:(02,11),(42,09) $place = { (02,11),(42,09) }
SHUFFLE: $place
REGION:(00,00,44,19),unlit,"ordinary" REGION:(00,00,44,19),unlit,"ordinary"
# Doors # Doors
DOOR:closed,(19,10) DOOR:closed,(19,10)
@@ -275,25 +277,25 @@ DOOR:closed,(22,08)
DOOR:closed,(22,12) DOOR:closed,(22,12)
DOOR:closed,(25,10) DOOR:closed,(25,10)
# Stairs # Stairs
STAIR:place[0],up STAIR:$place[0],up
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,44,19) NON_DIGGABLE:(00,00,44,19)
# Objects # Objects
OBJECT:')',"tsurugi",(22,10),blessed,0,"The Tsurugi of Muramasa" OBJECT:(')',"tsurugi"),(22,10),blessed,0,name:"The Tsurugi of Muramasa"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# #
TRAP:"board",(22,09) TRAP:"board",(22,09)
TRAP:"board",(24,10) TRAP:"board",(24,10)
@@ -306,32 +308,32 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'@',"Ashikaga Takauji",(22,10) 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:('@',"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:('@',"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',"wolf",random MONSTER:('d',"wolf"),random
MONSTER:'d',"wolf",random MONSTER:('d',"wolf"),random
MONSTER:'d',random,random MONSTER:'d',random
MONSTER:'d',random,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 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", ' ' MAZE: "Sam-fila", ' '
INIT_MAP: '.' , 'P', true, true, random, true INIT_MAP: mines, '.' , 'P', true, true, random, true
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
MONSTER: 'd', random, 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: ('d', "wolf"), 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
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
@@ -403,24 +405,24 @@ DOOR:closed,(43,08)
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
MONSTER: 'd', random, 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: ('d', "wolf"), random
MONSTER: 'd', "wolf", random MONSTER: ('d', "wolf"), 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
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
+164 -164
View File
@@ -72,54 +72,54 @@ DOOR:open,(16,17)
DOOR:locked,(35,07) DOOR:locked,(35,07)
DOOR:locked,(36,07) DOOR:locked,(36,07)
# Monsters on siege duty. # 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',"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
MONSTER: 's',random,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',"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: 'C',random
# Twoflower # Twoflower
MONSTER:'@',"Twoflower",(64,03) MONSTER:('@',"Twoflower"),(64,03)
# The treasure of Twoflower # The treasure of Twoflower
OBJECT:'(',"chest",(64,03) OBJECT:('(',"chest"),(64,03)
# guides for the audience chamber # guides for the audience chamber
MONSTER:'@',"guide",(29,03) MONSTER:('@',"guide"),(29,03)
MONSTER:'@',"guide",(32,04) MONSTER:('@',"guide"),(32,04)
MONSTER:'@',"guide",(35,02) MONSTER:('@',"guide"),(35,02)
MONSTER:'@',"guide",(38,03) MONSTER:('@',"guide"),(38,03)
MONSTER:'@',"guide",(45,03) MONSTER:('@',"guide"),(45,03)
MONSTER:'@',"guide",(48,02) MONSTER:('@',"guide"),(48,02)
MONSTER:'@',"guide",(49,04) MONSTER:('@',"guide"),(49,04)
MONSTER:'@',"guide",(51,03) MONSTER:('@',"guide"),(51,03)
MONSTER:'@',"guide",(57,03) MONSTER:('@',"guide"),(57,03)
MONSTER:'@',"guide",(62,04) MONSTER:('@',"guide"),(62,04)
MONSTER:'@',"guide",(66,04) MONSTER:('@',"guide"),(66,04)
# path guards # path guards
MONSTER:'@',"watchman",(35,08) MONSTER:('@',"watchman"),(35,08)
MONSTER:'@',"watchman",(36,08) MONSTER:('@',"watchman"),(36,08)
# river monsters # river monsters
MONSTER:';',"giant eel",(62,12) MONSTER:(';',"giant eel"),(62,12)
MONSTER:';',"piranha",(47,10) MONSTER:(';',"piranha"),(47,10)
MONSTER:';',"piranha",(29,11) MONSTER:(';',"piranha"),(29,11)
MONSTER:';',"kraken",(34,09) MONSTER:(';',"kraken"),(34,09)
MONSTER:';',"kraken",(37,09) MONSTER:(';',"kraken"),(37,09)
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -244,23 +244,23 @@ DOOR:closed,(60,16)
DOOR:closed,(73,16) DOOR:closed,(73,16)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Toilet paper # Toilet paper
OBJECT:'?',"blank paper",(71,12) OBJECT:('?',"blank paper"),(71,12)
OBJECT:'?',"blank paper",(71,12) OBJECT:('?',"blank paper"),(71,12)
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -272,24 +272,24 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # 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',"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
MONSTER:'s',random,random MONSTER:'s',random
# #
# The "goal" level for the quest. # The "goal" level for the quest.
@@ -386,21 +386,21 @@ DOOR:random,(51,15)
DOOR:open,(59,14) DOOR:open,(59,14)
DOOR:open,(59,17) DOOR:open,(59,17)
# Objects # Objects
OBJECT:'(',"credit card",(04,01),blessed,0,"The Platinum Yendorian Express Card" OBJECT:('(',"credit card"),(04,01),blessed,0,name:"The Platinum Yendorian Express Card"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -409,47 +409,47 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'@',"Master of Thieves",(04,01),hostile 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',"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
MONSTER:'s',random,random MONSTER:'s',random
# ladies of the evening # ladies of the evening
MONSTER:'&',"succubus",(02,08) MONSTER:('&',"succubus"),(02,08)
MONSTER:'&',"succubus",(08,08) MONSTER:('&',"succubus"),(08,08)
MONSTER:'&',"incubus",(02,14) MONSTER:('&',"incubus"),(02,14)
MONSTER:'&',"incubus",(08,14) MONSTER:('&',"incubus"),(08,14)
MONSTER:'&',"incubus",(02,17) MONSTER:('&',"incubus"),(02,17)
MONSTER:'&',"incubus",(08,17) MONSTER:('&',"incubus"),(08,17)
# Police station (with drunken prisoners) # Police station (with drunken prisoners)
MONSTER:'K',"Kop Kaptain",(24,09),hostile MONSTER:('K',"Kop Kaptain"),(24,09),hostile
MONSTER:'K',"Kop Lieutenant",(20,09),hostile MONSTER:('K',"Kop Lieutenant"),(20,09),hostile
MONSTER:'K',"Kop Lieutenant",(22,11),hostile MONSTER:('K',"Kop Lieutenant"),(22,11),hostile
MONSTER:'K',"Kop Lieutenant",(22,07),hostile MONSTER:('K',"Kop Lieutenant"),(22,07),hostile
MONSTER:'K',"Keystone Kop",(19,07),hostile MONSTER:('K',"Keystone Kop"),(19,07),hostile
MONSTER:'K',"Keystone Kop",(19,08),hostile MONSTER:('K',"Keystone Kop"),(19,08),hostile
MONSTER:'K',"Keystone Kop",(22,09),hostile MONSTER:('K',"Keystone Kop"),(22,09),hostile
MONSTER:'K',"Keystone Kop",(24,11),hostile MONSTER:('K',"Keystone Kop"),(24,11),hostile
MONSTER:'K',"Keystone Kop",(19,11),hostile MONSTER:('K',"Keystone Kop"),(19,11),hostile
MONSTER:'@',"prisoner",(19,13) MONSTER:('@',"prisoner"),(19,13)
MONSTER:'@',"prisoner",(21,13) MONSTER:('@',"prisoner"),(21,13)
MONSTER:'@',"prisoner",(24,13) MONSTER:('@',"prisoner"),(24,13)
# #
MONSTER:'@',"watchman",(33,10),hostile MONSTER:('@',"watchman"),(33,10),hostile
WALLIFY WALLIFY
@@ -461,61 +461,61 @@ WALLIFY
# #
MAZE: "Tou-fila" , ' ' MAZE: "Tou-fila" , ' '
INIT_MAP: '.' , ' ', true, true, random, true INIT_MAP: mines, '.' , ' ', true, true, random, true
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: 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: ('@', "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: 'H', random, hostile
MONSTER: 'C', random, random, hostile MONSTER: 'C', random, hostile
MAZE: "Tou-filb" , ' ' MAZE: "Tou-filb" , ' '
INIT_MAP: '.' , ' ', true, true, random, true INIT_MAP: mines, '.' , ' ', true, true, random, true
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
# #
MONSTER: '@', "soldier", random, hostile MONSTER: ('@', "soldier"), random, hostile
MONSTER: '@', "captain", random, hostile MONSTER: ('@', "captain"), random, hostile
MONSTER: '@', "captain", random, hostile MONSTER: ('@', "captain"), random, hostile
MONSTER: 'H', random, random, hostile MONSTER: 'H', random, hostile
MONSTER: 'H', random, random, hostile MONSTER: 'H', random, hostile
MONSTER: 'C', random, random, hostile MONSTER: 'C', random, hostile
MONSTER: 's', random, random MONSTER: 's', random
+142 -140
View File
@@ -11,8 +11,7 @@
# and receive your quest assignment. # and receive your quest assignment.
# #
MAZE: "Val-strt",' ' MAZE: "Val-strt",' '
FLAGS: noteleport,hardfloor FLAGS: noteleport,hardfloor,icedpools
INIT_MAP: '.', 'I', true, true, lit, false, true
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
IIIIIIPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIPPPIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII
@@ -48,18 +47,18 @@ FOUNTAIN:(53,02)
DOOR:locked,(26,10) DOOR:locked,(26,10)
DOOR:locked,(43,10) DOOR:locked,(43,10)
# Norn # Norn
MONSTER:'@',"Norn",(35,10) MONSTER:('@',"Norn"),(35,10)
# The treasure of the Norn # The treasure of the Norn
OBJECT:'(',"chest",(36,10) OBJECT:('(',"chest"),(36,10)
# valkyrie guards for the audience chamber # valkyrie guards for the audience chamber
MONSTER:'@',"warrior",(27,08) MONSTER:('@',"warrior"),(27,08)
MONSTER:'@',"warrior",(27,09) MONSTER:('@',"warrior"),(27,09)
MONSTER:'@',"warrior",(27,11) MONSTER:('@',"warrior"),(27,11)
MONSTER:'@',"warrior",(27,12) MONSTER:('@',"warrior"),(27,12)
MONSTER:'@',"warrior",(42,08) MONSTER:('@',"warrior"),(42,08)
MONSTER:'@',"warrior",(42,09) MONSTER:('@',"warrior"),(42,09)
MONSTER:'@',"warrior",(42,11) MONSTER:('@',"warrior"),(42,11)
MONSTER:'@',"warrior",(42,12) MONSTER:('@',"warrior"),(42,12)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(26,07,43,13) NON_DIGGABLE:(26,07,43,13)
# Random traps # Random traps
@@ -70,18 +69,18 @@ TRAP:"fire",random
TRAP:"fire",random TRAP:"fire",random
TRAP:"fire",random TRAP:"fire",random
# Monsters on siege duty. # Monsters on siege duty.
MONSTER: 'a',"fire ant",(04,12) MONSTER: ('a',"fire ant"),(04,12)
MONSTER: 'a',"fire ant",(08,08) MONSTER: ('a',"fire ant"),(08,08)
MONSTER: 'a',"fire ant",(14,04) MONSTER: ('a',"fire ant"),(14,04)
MONSTER: 'a',"fire ant",(17,11) MONSTER: ('a',"fire ant"),(17,11)
MONSTER: 'a',"fire ant",(24,10) MONSTER: ('a',"fire ant"),(24,10)
MONSTER: 'a',"fire ant",(45,10) MONSTER: ('a',"fire ant"),(45,10)
MONSTER: 'a',"fire ant",(54,02) MONSTER: ('a',"fire ant"),(54,02)
MONSTER: 'a',"fire ant",(55,07) MONSTER: ('a',"fire ant"),(55,07)
MONSTER: 'a',"fire ant",(58,14) MONSTER: ('a',"fire ant"),(58,14)
MONSTER: 'a',"fire ant",(63,17) MONSTER: ('a',"fire ant"),(63,17)
MONSTER: 'H',"fire giant",(18,01),hostile MONSTER: ('H',"fire giant"),(18,01),hostile
MONSTER: 'H',"fire giant",(10,16),hostile MONSTER: ('H',"fire giant"),(10,16),hostile
# #
# The "locate" level for the quest. # The "locate" level for the quest.
@@ -91,8 +90,8 @@ MONSTER: 'H',"fire giant",(10,16),hostile
# #
MAZE: "Val-loca",' ' MAZE: "Val-loca",' '
FLAGS: hardfloor FLAGS: hardfloor,icedpools
INIT_MAP: '.', 'I', true, true, lit, false, true INIT_MAP: mines, '.', 'I', true, true, lit, false
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
PPPP.... ....PPPPP. PPPP.... ....PPPPP.
@@ -117,21 +116,21 @@ STAIR:(20,06),down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,39,12) NON_DIGGABLE:(00,00,39,12)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:"fire",random TRAP:"fire",random
TRAP:"fire",random TRAP:"fire",random
@@ -140,33 +139,33 @@ TRAP:"fire",random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # 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',"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:'a',random
MONSTER:'H',random,random,hostile 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',"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:'H',random,hostile
# #
# The "goal" level for the quest. # The "goal" level for the quest.
@@ -177,7 +176,8 @@ MONSTER:'H',random,random,hostile
# #
MAZE: "Val-goal", 'L' 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 GEOMETRY:center,center
MAP MAP
.L............................LLLLL .L............................LLLLL
@@ -209,21 +209,21 @@ NON_DIGGABLE:(00,00,34,16)
DRAWBRIDGE:(17,02),south,random DRAWBRIDGE:(17,02),south,random
DRAWBRIDGE:(17,14),north,open DRAWBRIDGE:(17,14),north,open
# Objects # Objects
OBJECT:'(',"crystal ball",(17,08),blessed,5,"The Orb of Fate" OBJECT:('(',"crystal ball"),(17,08),blessed,5,name:"The Orb of Fate"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Traps # Traps
TRAP:"board",(13,08) TRAP:"board",(13,08)
TRAP:"board",(21,08) TRAP:"board",(21,08)
@@ -236,26 +236,26 @@ TRAP:"board",random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'H',"Lord Surtur",(17,08) 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',"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
MONSTER:'a',random,random MONSTER:'a',random
MONSTER:'H',"fire giant",(10,06),hostile MONSTER:('H',"fire giant"),(10,06),hostile
MONSTER:'H',"fire giant",(10,07),hostile MONSTER:('H',"fire giant"),(10,07),hostile
MONSTER:'H',"fire giant",(10,08),hostile MONSTER:('H',"fire giant"),(10,08),hostile
MONSTER:'H',"fire giant",(10,09),hostile MONSTER:('H',"fire giant"),(10,09),hostile
MONSTER:'H',"fire giant",(10,10),hostile MONSTER:('H',"fire giant"),(10,10),hostile
MONSTER:'H',"fire giant",(24,06),hostile MONSTER:('H',"fire giant"),(24,06),hostile
MONSTER:'H',"fire giant",(24,07),hostile MONSTER:('H',"fire giant"),(24,07),hostile
MONSTER:'H',"fire giant",(24,08),hostile MONSTER:('H',"fire giant"),(24,08),hostile
MONSTER:'H',"fire giant",(24,09),hostile MONSTER:('H',"fire giant"),(24,09),hostile
MONSTER:'H',"fire giant",(24,10),hostile MONSTER:('H',"fire giant"),(24,10),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:'H',random,hostile
# #
# The "fill" levels for the quest. # The "fill" levels for the quest.
@@ -267,29 +267,30 @@ MONSTER:'H',random,random,hostile
# #
MAZE: "Val-fila" , 'I' MAZE: "Val-fila" , 'I'
INIT_MAP: '.', 'I', true, true, lit, false, true FLAGS: icedpools
INIT_MAP: mines, '.', 'I', true, true, lit, false
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, 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', "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: 'a', random
MONSTER: 'H', "fire giant", random, hostile MONSTER: ('H', "fire giant"), random, hostile
# #
TRAP: random, random TRAP: random, random
TRAP: random, random TRAP: random, random
@@ -300,31 +301,32 @@ TRAP: random, random
TRAP: random, random TRAP: random, random
MAZE: "Val-filb" , 'L' MAZE: "Val-filb" , 'L'
INIT_MAP: '.', 'L', true, true, lit, false, true FLAGS: icedpools
INIT_MAP: mines, '.', 'L', true, true, lit, false
NOMAP NOMAP
# #
STAIR: random, up STAIR: random, up
STAIR: random, down STAIR: random, down
# #
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, 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', "fire ant"), random
MONSTER: 'a', random, random MONSTER: 'a', random
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
# #
TRAP: "fire", random TRAP: "fire", random
TRAP: "fire", random TRAP: "fire", random
+191 -179
View File
@@ -38,7 +38,7 @@ ENDMAP
REGION:(00,00,75,19),lit,"ordinary" REGION:(00,00,75,19),lit,"ordinary"
REGION:(35,00,49,03),unlit,"ordinary" REGION:(35,00,49,03),unlit,"ordinary"
REGION:(43,12,49,16),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" REGION:(30,10,31,10),unlit,"ordinary"
# Stairs # Stairs
STAIR:(30,10),down STAIR:(30,10),down
@@ -54,22 +54,22 @@ DOOR:closed,(15,10)
DOOR:locked,(19,10) DOOR:locked,(19,10)
DOOR:locked,(20,10) DOOR:locked,(20,10)
# Neferet the Green, the quest leader # Neferet the Green, the quest leader
MONSTER:'@',"Neferet the Green",(23,05) MONSTER:('@',"Neferet the Green"),(23,05)
# The treasure of the quest leader # The treasure of the quest leader
OBJECT:'(',"chest",(24,05) OBJECT:('(',"chest"),(24,05)
# apprentice guards for the audience chamber # apprentice guards for the audience chamber
MONSTER:'@',"apprentice",(30,07) MONSTER:('@',"apprentice"),(30,07)
MONSTER:'@',"apprentice",(24,06) MONSTER:('@',"apprentice"),(24,06)
MONSTER:'@',"apprentice",(15,06) MONSTER:('@',"apprentice"),(15,06)
MONSTER:'@',"apprentice",(15,12) MONSTER:('@',"apprentice"),(15,12)
MONSTER:'@',"apprentice",(26,11) MONSTER:('@',"apprentice"),(26,11)
MONSTER:'@',"apprentice",(27,11) MONSTER:('@',"apprentice"),(27,11)
MONSTER:'@',"apprentice",(19,09) MONSTER:('@',"apprentice"),(19,09)
MONSTER:'@',"apprentice",(20,09) MONSTER:('@',"apprentice"),(20,09)
# Eels in the pond # Eels in the pond
MONSTER:';',"giant eel",(62,14) MONSTER:(';',"giant eel"),(62,14)
MONSTER:';',"giant eel",(69,15) MONSTER:(';',"giant eel"),(69,15)
MONSTER:';',"giant eel",(67,17) MONSTER:(';',"giant eel"),(67,17)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Random traps # Random traps
@@ -80,21 +80,21 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters on siege duty. # Monsters on siege duty.
MONSTER: 'B',random,(60,09),hostile MONSTER: 'B',(60,09),hostile
MONSTER: 'W',random,(60,10),hostile MONSTER: 'W',(60,10),hostile
MONSTER: 'B',random,(60,11),hostile MONSTER: 'B',(60,11),hostile
MONSTER: 'B',random,(60,12),hostile MONSTER: 'B',(60,12),hostile
MONSTER: 'i',random,(60,13),hostile MONSTER: 'i',(60,13),hostile
MONSTER: 'B',random,(61,10),hostile MONSTER: 'B',(61,10),hostile
MONSTER: 'B',random,(61,11),hostile MONSTER: 'B',(61,11),hostile
MONSTER: 'B',random,(61,12),hostile MONSTER: 'B',(61,12),hostile
MONSTER: 'B',random,(35,03),hostile MONSTER: 'B',(35,03),hostile
MONSTER: 'i',random,(35,17),hostile MONSTER: 'i',(35,17),hostile
MONSTER: 'B',random,(36,17),hostile MONSTER: 'B',(36,17),hostile
MONSTER: 'B',random,(34,16),hostile MONSTER: 'B',(34,16),hostile
MONSTER: 'i',random,(34,17),hostile MONSTER: 'i',(34,17),hostile
MONSTER: 'W',random,(67,02),hostile MONSTER: 'W',(67,02),hostile
MONSTER: 'B',random,(10,19),hostile MONSTER: 'B',(10,19),hostile
# #
# The "locate" level for the quest. # The "locate" level for the quest.
@@ -153,21 +153,21 @@ STAIR:(48,10),down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,75,20) NON_DIGGABLE:(00,00,75,20)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:"spiked pit",(24,02) TRAP:"spiked pit",(24,02)
TRAP:"spiked pit",(07,10) TRAP:"spiked pit",(07,10)
@@ -191,33 +191,33 @@ TRAP:"dart",random
TRAP:"dart",random TRAP:"dart",random
TRAP:"dart",random TRAP:"dart",random
# Random monsters. # Random monsters.
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,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:'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:'i',random,hostile
# #
# The "goal" level for the quest. # The "goal" level for the quest.
@@ -293,21 +293,21 @@ NON_DIGGABLE:(00,00,75,19)
# The altar. This is not a shrine. # The altar. This is not a shrine.
ALTAR:(16,11),noncoaligned,altar ALTAR:(16,11),noncoaligned,altar
# Objects # Objects
OBJECT:'"',"amulet of ESP",(16,11),blessed,0,"The Eye of the Aethiopica" OBJECT:('"',"amulet of ESP"),(16,11),blessed,0,name:"The Eye of the Aethiopica"
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -316,43 +316,43 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:'@',"Dark One",(16,11) MONSTER:('@',"Dark One"),(16,11)
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'B',random,random,hostile MONSTER:'B',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,random,hostile MONSTER:'i',random,hostile
MONSTER:'i',random,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:'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:'i',random,hostile
# Captive Monsters in the dungeon # Captive Monsters in the dungeon
MONSTER:'@',"rogue",(35,06),peaceful,"Pug" MONSTER:('@',"rogue"),(35,06),peaceful,"Pug"
MONSTER:'Y',"owlbear",(47,06),peaceful,asleep MONSTER:('Y',"owlbear"),(47,06),peaceful,asleep
MONSTER:'@',"wizard",(32,11),peaceful,asleep,"Newt" MONSTER:('@',"wizard"),(32,11),peaceful,asleep,"Newt"
MONSTER:'@',"Grey-elf",(44,11),peaceful MONSTER:('@',"Grey-elf"),(44,11),peaceful
MONSTER:'H',"hill giant",(47,11),peaceful,asleep MONSTER:('H',"hill giant"),(47,11),peaceful,asleep
MONSTER:'G',"gnomish wizard",(38,06),peaceful MONSTER:('G',"gnomish wizard"),(38,06),peaceful
MONSTER:'@',"prisoner",(35,11),peaceful MONSTER:('@',"prisoner"),(35,11),peaceful
MONSTER:'@',"prisoner",(41,11),peaceful,asleep MONSTER:('@',"prisoner"),(41,11),peaceful,asleep
# #
# The "fill" levels for the quest. # The "fill" levels for the quest.
@@ -365,77 +365,89 @@ MONSTER:'@',"prisoner",(41,11),peaceful,asleep
LEVEL: "Wiz-fila" LEVEL: "Wiz-fila"
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'i', random, random, hostile MONSTER: 'i', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'i', random, random, hostile MONSTER: 'i', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'B', "vampire bat", random MONSTER: ('B', "vampire bat"), random
MONSTER: 'B', "vampire bat", random MONSTER: ('B', "vampire bat"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'i', random, random, hostile MONSTER: 'i', random, hostile
MONSTER: 'B', "vampire bat", random MONSTER: ('B', "vampire bat"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'i', random, random, hostile MONSTER: 'i', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'B', "vampire bat", random MONSTER: ('B', "vampire bat"), random
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
LEVEL: "Wiz-filb" LEVEL: "Wiz-filb"
# #
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, up STAIR: random, up
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'X', random, random, hostile MONSTER: 'X', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'i', random, random, hostile MONSTER: 'i', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
OBJECT: random,random,random OBJECT: random,random
MONSTER: 'X', random, random, hostile MONSTER: 'X', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
STAIR: random, down STAIR: random, down
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'i', random, random, hostile MONSTER: 'i', random, hostile
MONSTER: 'B', "vampire bat", random MONSTER: ('B', "vampire bat"), random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'i', random, random, hostile MONSTER: 'i', random, hostile
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random TRAP: random, random
MONSTER: 'B', "vampire bat", random MONSTER: ('B', "vampire bat"), random
}
RANDOM_CORRIDORS RANDOM_CORRIDORS
+215 -215
View File
@@ -38,21 +38,21 @@ STAIR:random,down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,74,17) NON_DIGGABLE:(00,00,74,17)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -61,34 +61,34 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
# Here, just play with the lighting... # Here, just play with the lighting...
@@ -130,21 +130,21 @@ STAIR:random,down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,74,17) NON_DIGGABLE:(00,00,74,17)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -153,34 +153,34 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
# Now, let's get fancy... # Now, let's get fancy...
@@ -214,21 +214,21 @@ STAIR:random,down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,74,17) NON_DIGGABLE:(00,00,74,17)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -237,34 +237,34 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:random,random,(01,01) MONSTER:random,(01,01)
MONSTER:random,random,(13,01) MONSTER:random,(13,01)
MONSTER:random,random,(25,01) MONSTER:random,(25,01)
MONSTER:random,random,(37,01) MONSTER:random,(37,01)
MONSTER:random,random,(49,01) MONSTER:random,(49,01)
MONSTER:random,random,(61,01) MONSTER:random,(61,01)
MONSTER:random,random,(73,01) MONSTER:random,(73,01)
MONSTER:random,random,(07,07) MONSTER:random,(07,07)
MONSTER:random,random,(13,07) MONSTER:random,(13,07)
MONSTER:random,random,(25,07) MONSTER:random,(25,07)
MONSTER:random,random,(37,07) MONSTER:random,(37,07)
MONSTER:random,random,(49,07) MONSTER:random,(49,07)
MONSTER:random,random,(61,07) MONSTER:random,(61,07)
MONSTER:random,random,(67,07) MONSTER:random,(67,07)
MONSTER:random,random,(07,09) MONSTER:random,(07,09)
MONSTER:random,random,(13,09) MONSTER:random,(13,09)
MONSTER:random,random,(25,09) MONSTER:random,(25,09)
MONSTER:random,random,(37,09) MONSTER:random,(37,09)
MONSTER:random,random,(49,09) MONSTER:random,(49,09)
MONSTER:random,random,(61,09) MONSTER:random,(61,09)
MONSTER:random,random,(67,09) MONSTER:random,(67,09)
MONSTER:random,random,(01,16) MONSTER:random,(01,16)
MONSTER:random,random,(13,16) MONSTER:random,(13,16)
MONSTER:random,random,(25,16) MONSTER:random,(25,16)
MONSTER:random,random,(37,16) MONSTER:random,(37,16)
MONSTER:random,random,(49,16) MONSTER:random,(49,16)
MONSTER:random,random,(61,16) MONSTER:random,(61,16)
MONSTER:random,random,(73,16) MONSTER:random,(73,16)
MAZE:"bigrm-4",' ' MAZE:"bigrm-4",' '
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
@@ -300,21 +300,21 @@ FOUNTAIN:(05,15)
FOUNTAIN:(69,02) FOUNTAIN:(69,02)
FOUNTAIN:(69,15) FOUNTAIN:(69,15)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -323,34 +323,34 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
# Try an oval room... # Try an oval room...
@@ -385,21 +385,21 @@ STAIR:random,down
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,72,18) NON_DIGGABLE:(00,00,72,18)
# Objects # Objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -408,31 +408,31 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Random monsters. # Random monsters.
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
+3
View File
@@ -245,6 +245,9 @@ flying pig
hippocampus hippocampus
hippogriff hippogriff
kelpie kelpie
catoblepas
phoenix
amphisbaena
# Unusually animate body parts # Unusually animate body parts
bouncing eye bouncing eye
+126 -119
View File
@@ -42,9 +42,15 @@ MAP
ENDMAP ENDMAP
# Random registers initialisation # Random registers initialisation
RANDOM_OBJECTS:'[',')','*','%' $object = object: { '[',')','*','%' }
RANDOM_PLACES:(04,02),(58,02),(04,14),(58,14) SHUFFLE: $object
RANDOM_MONSTERS:'L','N','E','H','M','O','R','T','X','Z'
$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(01,00,10,20),(1,1,61,15),down
TELEPORT_REGION:levregion(69,00,79,20),(1,1,61,15),up TELEPORT_REGION:levregion(69,00,79,20),(1,1,61,15),up
@@ -72,72 +78,73 @@ DOOR:closed,(55,13)
# The drawbridge # The drawbridge
DRAWBRIDGE:(05,08),east,closed DRAWBRIDGE:(05,08),east,closed
# Storeroom number 1 # Storeroom number 1
OBJECT:object[0],random,(39,05) OBJECT:$object[0],(39,05)
OBJECT:object[0],random,(40,05) OBJECT:$object[0],(40,05)
OBJECT:object[0],random,(41,05) OBJECT:$object[0],(41,05)
OBJECT:object[0],random,(42,05) OBJECT:$object[0],(42,05)
OBJECT:object[0],random,(43,05) OBJECT:$object[0],(43,05)
OBJECT:object[0],random,(44,05) OBJECT:$object[0],(44,05)
OBJECT:object[0],random,(45,05) OBJECT:$object[0],(45,05)
OBJECT:object[0],random,(39,06) OBJECT:$object[0],(39,06)
OBJECT:object[0],random,(40,06) OBJECT:$object[0],(40,06)
OBJECT:object[0],random,(41,06) OBJECT:$object[0],(41,06)
OBJECT:object[0],random,(42,06) OBJECT:$object[0],(42,06)
OBJECT:object[0],random,(43,06) OBJECT:$object[0],(43,06)
OBJECT:object[0],random,(44,06) OBJECT:$object[0],(44,06)
OBJECT:object[0],random,(45,06) OBJECT:$object[0],(45,06)
# Storeroom number 2 # Storeroom number 2
OBJECT:object[1],random,(49,05) OBJECT:$object[1],(49,05)
OBJECT:object[1],random,(50,05) OBJECT:$object[1],(50,05)
OBJECT:object[1],random,(51,05) OBJECT:$object[1],(51,05)
OBJECT:object[1],random,(52,05) OBJECT:$object[1],(52,05)
OBJECT:object[1],random,(53,05) OBJECT:$object[1],(53,05)
OBJECT:object[1],random,(54,05) OBJECT:$object[1],(54,05)
OBJECT:object[1],random,(55,05) OBJECT:$object[1],(55,05)
OBJECT:object[1],random,(49,06) OBJECT:$object[1],(49,06)
OBJECT:object[1],random,(50,06) OBJECT:$object[1],(50,06)
OBJECT:object[1],random,(51,06) OBJECT:$object[1],(51,06)
OBJECT:object[1],random,(52,06) OBJECT:$object[1],(52,06)
OBJECT:object[1],random,(53,06) OBJECT:$object[1],(53,06)
OBJECT:object[1],random,(54,06) OBJECT:$object[1],(54,06)
OBJECT:object[1],random,(55,06) OBJECT:$object[1],(55,06)
# Storeroom number 3 # Storeroom number 3
OBJECT:object[2],random,(39,10) OBJECT:$object[2],(39,10)
OBJECT:object[2],random,(40,10) OBJECT:$object[2],(40,10)
OBJECT:object[2],random,(41,10) OBJECT:$object[2],(41,10)
OBJECT:object[2],random,(42,10) OBJECT:$object[2],(42,10)
OBJECT:object[2],random,(43,10) OBJECT:$object[2],(43,10)
OBJECT:object[2],random,(44,10) OBJECT:$object[2],(44,10)
OBJECT:object[2],random,(45,10) OBJECT:$object[2],(45,10)
OBJECT:object[2],random,(39,11) OBJECT:$object[2],(39,11)
OBJECT:object[2],random,(40,11) OBJECT:$object[2],(40,11)
OBJECT:object[2],random,(41,11) OBJECT:$object[2],(41,11)
OBJECT:object[2],random,(42,11) OBJECT:$object[2],(42,11)
OBJECT:object[2],random,(43,11) OBJECT:$object[2],(43,11)
OBJECT:object[2],random,(44,11) OBJECT:$object[2],(44,11)
OBJECT:object[2],random,(45,11) OBJECT:$object[2],(45,11)
# Storeroom number 4 # Storeroom number 4
OBJECT:object[3],random,(49,10) OBJECT:$object[3],(49,10)
OBJECT:object[3],random,(50,10) OBJECT:$object[3],(50,10)
OBJECT:object[3],random,(51,10) OBJECT:$object[3],(51,10)
OBJECT:object[3],random,(52,10) OBJECT:$object[3],(52,10)
OBJECT:object[3],random,(53,10) OBJECT:$object[3],(53,10)
OBJECT:object[3],random,(54,10) OBJECT:$object[3],(54,10)
OBJECT:object[3],random,(55,10) OBJECT:$object[3],(55,10)
OBJECT:object[3],random,(49,11) OBJECT:$object[3],(49,11)
OBJECT:object[3],random,(50,11) OBJECT:$object[3],(50,11)
OBJECT:object[3],random,(51,11) OBJECT:$object[3],(51,11)
OBJECT:object[3],random,(52,11) OBJECT:$object[3],(52,11)
OBJECT:object[3],random,(53,11) OBJECT:$object[3],(53,11)
OBJECT:object[3],random,(54,11) OBJECT:$object[3],(54,11)
OBJECT:object[3],random,(55,11) OBJECT:$object[3],(55,11)
# THE WAND OF WISHING in 1 of the 4 towers # THE WAND OF WISHING in 1 of the 4 towers
CONTAINER:'(',"chest",place[0] CONTAINER:('(',"chest"),$place[0] {
OBJECT:'/',"wishing",contained OBJECT:('/',"wishing")
}
# Prevent monsters from eating it. (@'s never eat objects) # Prevent monsters from eating it. (@'s never eat objects)
ENGRAVING:place[0],burn,"Elbereth" ENGRAVING:$place[0],burn,"Elbereth"
# The treasure of the lord # The treasure of the lord
OBJECT:'(',"chest",(37,08) OBJECT:('(',"chest"),(37,08)
# Traps # Traps
TRAP:"trap door",(40,08) TRAP:"trap door",(40,08)
TRAP:"trap door",(44,08) TRAP:"trap door",(44,08)
@@ -145,66 +152,66 @@ TRAP:"trap door",(48,08)
TRAP:"trap door",(52,08) TRAP:"trap door",(52,08)
TRAP:"trap door",(55,08) TRAP:"trap door",(55,08)
# Soldiers guarding the entry hall # Soldiers guarding the entry hall
MONSTER:'@',"soldier",(08,06) MONSTER:('@',"soldier"),(08,06)
MONSTER:'@',"soldier",(09,05) MONSTER:('@',"soldier"),(09,05)
MONSTER:'@',"soldier",(11,05) MONSTER:('@',"soldier"),(11,05)
MONSTER:'@',"soldier",(12,06) MONSTER:('@',"soldier"),(12,06)
MONSTER:'@',"soldier",(08,10) MONSTER:('@',"soldier"),(08,10)
MONSTER:'@',"soldier",(09,11) MONSTER:('@',"soldier"),(09,11)
MONSTER:'@',"soldier",(11,11) MONSTER:('@',"soldier"),(11,11)
MONSTER:'@',"soldier",(12,10) MONSTER:('@',"soldier"),(12,10)
MONSTER:'@',"lieutenant",(09,08) MONSTER:('@',"lieutenant"),(09,08)
# Soldiers guarding the towers # Soldiers guarding the towers
MONSTER:'@',"soldier",(03,02) MONSTER:('@',"soldier"),(03,02)
MONSTER:'@',"soldier",(05,02) MONSTER:('@',"soldier"),(05,02)
MONSTER:'@',"soldier",(57,02) MONSTER:('@',"soldier"),(57,02)
MONSTER:'@',"soldier",(59,02) MONSTER:('@',"soldier"),(59,02)
MONSTER:'@',"soldier",(03,14) MONSTER:('@',"soldier"),(03,14)
MONSTER:'@',"soldier",(05,14) MONSTER:('@',"soldier"),(05,14)
MONSTER:'@',"soldier",(57,14) MONSTER:('@',"soldier"),(57,14)
MONSTER:'@',"soldier",(59,14) MONSTER:('@',"soldier"),(59,14)
# The four dragons that are guarding the storerooms # The four dragons that are guarding the storerooms
MONSTER:'D',random,(47,05) MONSTER:'D',(47,05)
MONSTER:'D',random,(47,06) MONSTER:'D',(47,06)
MONSTER:'D',random,(47,10) MONSTER:'D',(47,10)
MONSTER:'D',random,(47,11) MONSTER:'D',(47,11)
# Sea monsters in the moat # Sea monsters in the moat
MONSTER:';',"giant eel",(05,07) MONSTER:(';',"giant eel"),(05,07)
MONSTER:';',"giant eel",(05,09) MONSTER:(';',"giant eel"),(05,09)
MONSTER:';',"giant eel",(57,07) MONSTER:(';',"giant eel"),(57,07)
MONSTER:';',"giant eel",(57,09) MONSTER:(';',"giant eel"),(57,09)
MONSTER:';',"shark",(05,00) MONSTER:(';',"shark"),(05,00)
MONSTER:';',"shark",(05,16) MONSTER:(';',"shark"),(05,16)
MONSTER:';',"shark",(57,00) MONSTER:(';',"shark"),(57,00)
MONSTER:';',"shark",(57,16) MONSTER:(';',"shark"),(57,16)
# The throne room and the court monsters # The throne room and the court monsters
MONSTER:monster[0],random,(27,05) MONSTER:$monster[0],(27,05)
MONSTER:monster[1],random,(30,05) MONSTER:$monster[1],(30,05)
MONSTER:monster[2],random,(33,05) MONSTER:$monster[2],(33,05)
MONSTER:monster[3],random,(36,05) MONSTER:$monster[3],(36,05)
MONSTER:monster[4],random,(28,06) MONSTER:$monster[4],(28,06)
MONSTER:monster[5],random,(31,06) MONSTER:$monster[5],(31,06)
MONSTER:monster[6],random,(34,06) MONSTER:$monster[6],(34,06)
MONSTER:monster[7],random,(37,06) MONSTER:$monster[7],(37,06)
MONSTER:monster[8],random,(27,07) MONSTER:$monster[8],(27,07)
MONSTER:monster[9],random,(30,07) MONSTER:$monster[9],(30,07)
MONSTER:monster[0],random,(33,07) MONSTER:$monster[0],(33,07)
MONSTER:monster[1],random,(36,07) MONSTER:$monster[1],(36,07)
MONSTER:monster[2],random,(28,08) MONSTER:$monster[2],(28,08)
MONSTER:monster[3],random,(31,08) MONSTER:$monster[3],(31,08)
MONSTER:monster[4],random,(34,08) MONSTER:$monster[4],(34,08)
MONSTER:monster[5],random,(27,09) MONSTER:$monster[5],(27,09)
MONSTER:monster[6],random,(30,09) MONSTER:$monster[6],(30,09)
MONSTER:monster[7],random,(33,09) MONSTER:$monster[7],(33,09)
MONSTER:monster[8],random,(36,09) MONSTER:$monster[8],(36,09)
MONSTER:monster[9],random,(28,10) MONSTER:$monster[9],(28,10)
MONSTER:monster[0],random,(31,10) MONSTER:$monster[0],(31,10)
MONSTER:monster[1],random,(34,10) MONSTER:$monster[1],(34,10)
MONSTER:monster[2],random,(37,10) MONSTER:$monster[2],(37,10)
MONSTER:monster[3],random,(27,11) MONSTER:$monster[3],(27,11)
MONSTER:monster[4],random,(30,11) MONSTER:$monster[4],(30,11)
MONSTER:monster[5],random,(33,11) MONSTER:$monster[5],(33,11)
MONSTER:monster[6],random,(36,11) MONSTER:$monster[6],(36,11)
# MazeWalks # MazeWalks
MAZEWALK:(00,10),west MAZEWALK:(00,10),west
MAZEWALK:(62,06),east MAZEWALK:(62,06),east
+16
View File
@@ -5321,6 +5321,22 @@ web
Oh what a tangled web we weave, Oh what a tangled web we weave,
When first we practise to deceive! When first we practise to deceive!
[ Marmion, by Sir Walter Scott ] [ 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" # werecritter -- see "lycanthrope"
*wight *wight
When he came to himself again, for a moment he could recall When he came to himself again, for a moment he could recall
+332 -330
View File
@@ -51,79 +51,79 @@ PORTAL:(0,0,75,19),(65,13,75,19),"air"
# Some helpful monsters. Making sure a # Some helpful monsters. Making sure a
# pick axe and at least one wand of digging # pick axe and at least one wand of digging
# are available. # are available.
MONSTER:'@',"Elvenking",(67,16) MONSTER:('@',"Elvenking"),(67,16)
MONSTER:'H',"minotaur",(67,14) MONSTER:('H',"minotaur"),(67,14)
# An assortment of earth-appropriate nasties # An assortment of earth-appropriate nasties
# in each cavern. # in each cavern.
MONSTER:'E',"earth elemental",(52,13),hostile MONSTER:('E',"earth elemental"),(52,13),hostile
MONSTER:'E',"earth elemental",(53,13),hostile MONSTER:('E',"earth elemental"),(53,13),hostile
MONSTER:'T',"rock troll",(53,12) MONSTER:('T',"rock troll"),(53,12)
MONSTER:'H',"stone giant",(54,12) MONSTER:('H',"stone giant"),(54,12)
# #
MONSTER:'S',"pit viper",(70,05) MONSTER:('S',"pit viper"),(70,05)
MONSTER:'&',"barbed devil",(69,06) MONSTER:('&',"barbed devil"),(69,06)
MONSTER:'H',"stone giant",(69,08) MONSTER:('H',"stone giant"),(69,08)
MONSTER:''',"stone golem",(71,08) MONSTER:(''',"stone golem"),(71,08)
MONSTER:'&',"pit fiend",(70,09) MONSTER:('&',"pit fiend"),(70,09)
MONSTER:'E',"earth elemental",(70,08),hostile MONSTER:('E',"earth elemental"),(70,08),hostile
# #
MONSTER:'E',"earth elemental",(60,03),hostile MONSTER:('E',"earth elemental"),(60,03),hostile
MONSTER:'H',"stone giant",(61,04) MONSTER:('H',"stone giant"),(61,04)
MONSTER:'E',"earth elemental",(62,04),hostile MONSTER:('E',"earth elemental"),(62,04),hostile
MONSTER:'E',"earth elemental",(61,05),hostile MONSTER:('E',"earth elemental"),(61,05),hostile
MONSTER:'s',"scorpion",(62,05) MONSTER:('s',"scorpion"),(62,05)
MONSTER:'p',"rock piercer",(63,05) MONSTER:('p',"rock piercer"),(63,05)
# #
MONSTER:'U',"umber hulk",(40,05) MONSTER:('U',"umber hulk"),(40,05)
MONSTER:'v',"dust vortex",(42,05) MONSTER:('v',"dust vortex"),(42,05)
MONSTER:'T',"rock troll",(38,06) MONSTER:('T',"rock troll"),(38,06)
MONSTER:'E',"earth elemental",(39,06),hostile MONSTER:('E',"earth elemental"),(39,06),hostile
MONSTER:'E',"earth elemental",(41,06),hostile MONSTER:('E',"earth elemental"),(41,06),hostile
MONSTER:'E',"earth elemental",(38,07),hostile MONSTER:('E',"earth elemental"),(38,07),hostile
MONSTER:'H',"stone giant",(39,07) MONSTER:('H',"stone giant"),(39,07)
MONSTER:'E',"earth elemental",(43,07),hostile MONSTER:('E',"earth elemental"),(43,07),hostile
MONSTER:''',"stone golem",(37,08) MONSTER:(''',"stone golem"),(37,08)
MONSTER:'S',"pit viper",(43,08) MONSTER:('S',"pit viper"),(43,08)
MONSTER:'S',"pit viper",(43,09) MONSTER:('S',"pit viper"),(43,09)
MONSTER:'T',"rock troll",(44,10) MONSTER:('T',"rock troll"),(44,10)
# #
MONSTER:'E',"earth elemental",(02,01),hostile MONSTER:('E',"earth elemental"),(02,01),hostile
MONSTER:'E',"earth elemental",(03,01),hostile MONSTER:('E',"earth elemental"),(03,01),hostile
MONSTER:''',"stone golem",(01,02) MONSTER:(''',"stone golem"),(01,02)
MONSTER:'E',"earth elemental",(02,02),hostile MONSTER:('E',"earth elemental"),(02,02),hostile
MONSTER:'T',"rock troll",(04,03) MONSTER:('T',"rock troll"),(04,03)
MONSTER:'T',"rock troll",(03,03) MONSTER:('T',"rock troll"),(03,03)
MONSTER:'&',"pit fiend",(03,04) MONSTER:('&',"pit fiend"),(03,04)
MONSTER:'E',"earth elemental",(04,05),hostile MONSTER:('E',"earth elemental"),(04,05),hostile
MONSTER:'S',"pit viper",(05,06) MONSTER:('S',"pit viper"),(05,06)
# #
MONSTER:'E',"earth elemental",(21,02),hostile MONSTER:('E',"earth elemental"),(21,02),hostile
MONSTER:'E',"earth elemental",(21,03),hostile MONSTER:('E',"earth elemental"),(21,03),hostile
MONSTER:'H',"minotaur",(21,04) MONSTER:('H',"minotaur"),(21,04)
MONSTER:'E',"earth elemental",(21,05),hostile MONSTER:('E',"earth elemental"),(21,05),hostile
MONSTER:'T',"rock troll",(22,05) MONSTER:('T',"rock troll"),(22,05)
MONSTER:'E',"earth elemental",(22,06),hostile MONSTER:('E',"earth elemental"),(22,06),hostile
MONSTER:'E',"earth elemental",(23,06),hostile MONSTER:('E',"earth elemental"),(23,06),hostile
# #
MONSTER:'S',"pit viper",(14,08) MONSTER:('S',"pit viper"),(14,08)
MONSTER:'&',"barbed devil",(14,09) MONSTER:('&',"barbed devil"),(14,09)
MONSTER:'E',"earth elemental",(13,10),hostile MONSTER:('E',"earth elemental"),(13,10),hostile
MONSTER:'T',"rock troll",(12,11) MONSTER:('T',"rock troll"),(12,11)
MONSTER:'E',"earth elemental",(14,12),hostile MONSTER:('E',"earth elemental"),(14,12),hostile
MONSTER:'E',"earth elemental",(15,13),hostile MONSTER:('E',"earth elemental"),(15,13),hostile
MONSTER:'H',"stone giant",(17,13) MONSTER:('H',"stone giant"),(17,13)
MONSTER:''',"stone golem",(18,13) MONSTER:(''',"stone golem"),(18,13)
MONSTER:'&',"pit fiend",(18,12) MONSTER:('&',"pit fiend"),(18,12)
MONSTER:'E',"earth elemental",(18,11),hostile MONSTER:('E',"earth elemental"),(18,11),hostile
MONSTER:'E',"earth elemental",(18,10),hostile MONSTER:('E',"earth elemental"),(18,10),hostile
# #
MONSTER:'&',"barbed devil",(02,16) MONSTER:('&',"barbed devil"),(02,16)
MONSTER:'E',"earth elemental",(03,16),hostile MONSTER:('E',"earth elemental"),(03,16),hostile
MONSTER:'T',"rock troll",(02,17) MONSTER:('T',"rock troll"),(02,17)
MONSTER:'E',"earth elemental",(04,17),hostile MONSTER:('E',"earth elemental"),(04,17),hostile
MONSTER:'E',"earth elemental",(04,18),hostile MONSTER:('E',"earth elemental"),(04,18),hostile
OBJECT:'`',"boulder",random OBJECT:('`',"boulder"),random
MAZE:"air",' ' MAZE:"air",' '
@@ -139,26 +139,26 @@ GEOMETRY:center,center
# This map has no visible outer boundary, and # This map has no visible outer boundary, and
# is all "air". # is all "air".
MAP MAP
AAAAAAAAAAAAAAAAAAAAAAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAACCCCCCAAAAAAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAACCAACCCCCAAAAAACCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAACCACCCCCCCAAAAACCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAACCCCCCCCCCAAAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAACCCCAAACCAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAACCCCAAAAAACCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAACCCCCCCAAAACCACCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAACCCCAAAAAAACCACAACCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCAACCCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACCCCAAACCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACACCCCCAAACCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACCCCCCCAAAACCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACACCCCCCCCAAACCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCCCCCCCCCAACCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACACCCCCCCCCCACCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAACCCCCCAAACCCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAACCAAAAAACCCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACCCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
ENDMAP ENDMAP
# Use up and down regions to partition the level into three parts; # Use up and down regions to partition the level into three parts;
# teleportation can't cross from one part into another. # 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 TELEPORT_REGION:levregion(56,00,79,20),levregion(01,00,55,20),down
PORTAL:levregion(57,01,78,19),(0,0,0,0),"fire" PORTAL:levregion(57,01,78,19),(0,0,0,0),"fire"
REGION:(00,00,75,19),lit,"ordinary" 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
MONSTER:'D',random,random MONSTER:'D',random
MONSTER:'D',random,random MONSTER:'D',random
MONSTER:'D',random,random MONSTER:'D',random
MONSTER:'D',random,random MONSTER:'D',random
MONSTER:'E',random,random MONSTER:'E',random
MONSTER:'E',random,random MONSTER:'E',random
MONSTER:'E',random,random MONSTER:'E',random
MONSTER:'J',random,random MONSTER:'J',random
MONSTER:'J',random,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',"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',"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',"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",' ' MAZE:"fire",' '
@@ -301,81 +301,81 @@ TRAP:"fire",random
TRAP:"fire",random TRAP:"fire",random
TRAP:"fire",random TRAP:"fire",random
# An assortment of fire-appropriate nasties # An assortment of fire-appropriate nasties
MONSTER:'D',"red dragon",random MONSTER:('D',"red dragon"),random
MONSTER:'&',"balrog",random MONSTER:('&',"balrog"),random
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'v',"fire vortex",random MONSTER:('v',"fire vortex"),random
MONSTER:'d',"hell hound",random MONSTER:('d',"hell hound"),random
# #
MONSTER:'H',"fire giant",random MONSTER:('H',"fire giant"),random
MONSTER:'&',"barbed devil",random MONSTER:('&',"barbed devil"),random
MONSTER:'d',"hell hound",random MONSTER:('d',"hell hound"),random
MONSTER:''',"stone golem",random MONSTER:(''',"stone golem"),random
MONSTER:'&',"pit fiend",random MONSTER:('&',"pit fiend"),random
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
# #
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'d',"hell hound",random MONSTER:('d',"hell hound"),random
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'s',"scorpion",random MONSTER:('s',"scorpion"),random
MONSTER:'H',"fire giant",random MONSTER:('H',"fire giant"),random
# #
MONSTER:'d',"hell hound",random MONSTER:('d',"hell hound"),random
MONSTER:'v',"dust vortex",random MONSTER:('v',"dust vortex"),random
MONSTER:'v',"fire 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:('E',"fire elemental"),random,hostile
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'d',"hell hound",random MONSTER:('d',"hell hound"),random
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:''',"stone golem",random MONSTER:(''',"stone golem"),random
MONSTER:'S',"pit viper",random MONSTER:('S',"pit viper"),random
MONSTER:'S',"pit viper",random MONSTER:('S',"pit viper"),random
MONSTER:'v',"fire 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:('E',"fire elemental"),random,hostile
MONSTER:'H',"fire giant",random MONSTER:('H',"fire giant"),random
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'v',"fire vortex",random MONSTER:('v',"fire vortex"),random
MONSTER:'v',"fire vortex",random MONSTER:('v',"fire vortex"),random
MONSTER:'&',"pit fiend",random MONSTER:('&',"pit fiend"),random
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'S',"pit viper",random MONSTER:('S',"pit viper"),random
# #
MONSTER:':',"salamander",random,hostile MONSTER:(':',"salamander"),random,hostile
MONSTER:':',"salamander",random,hostile MONSTER:(':',"salamander"),random,hostile
MONSTER:'H',"minotaur",random MONSTER:('H',"minotaur"),random
MONSTER:':',"salamander",random,hostile MONSTER:(':',"salamander"),random,hostile
MONSTER:'v',"steam vortex",random MONSTER:('v',"steam vortex"),random
MONSTER:':',"salamander",random,hostile MONSTER:(':',"salamander"),random,hostile
MONSTER:':',"salamander",random,hostile MONSTER:(':',"salamander"),random,hostile
# #
MONSTER:'H',"fire giant",random MONSTER:('H',"fire giant"),random
MONSTER:'&',"barbed devil",random MONSTER:('&',"barbed devil"),random
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'v',"fire 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:('E',"fire elemental"),random,hostile
MONSTER:'d',"hell hound",random MONSTER:('d',"hell hound"),random
MONSTER:'H',"fire giant",random MONSTER:('H',"fire giant"),random
MONSTER:'&',"pit fiend",random MONSTER:('&',"pit fiend"),random
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
MONSTER:'E',"fire elemental",random,hostile MONSTER:('E',"fire elemental"),random,hostile
# #
MONSTER:'&',"barbed devil",random MONSTER:('&',"barbed devil"),random
MONSTER:':',"salamander",random,hostile MONSTER:(':',"salamander"),random,hostile
MONSTER:'v',"steam vortex",random MONSTER:('v',"steam vortex"),random
MONSTER:':',"salamander",random,hostile MONSTER:(':',"salamander"),random,hostile
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",' ' MAZE:"water",' '
@@ -412,67 +412,67 @@ ENDMAP
TELEPORT_REGION:(0,0,25,19),(0,0,0,0) TELEPORT_REGION:(0,0,25,19),(0,0,0,0)
PORTAL:(51,0,75,19),(0,0,0,0),"astral" PORTAL:(51,0,75,19),(0,0,0,0),"astral"
# A fisherman's dream... # 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:';',"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:';',"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:(';',"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:';',"shark",random MONSTER:(';',"shark"),random
MONSTER:';',"shark",random MONSTER:(';',"shark"),random
MONSTER:';',"piranha",random MONSTER:(';',"piranha"),random
MONSTER:';',"piranha",random MONSTER:(';',"piranha"),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:';',"jellyfish",random MONSTER:(';',"jellyfish"),random
MONSTER:';',"jellyfish",random MONSTER:(';',"jellyfish"),random
MONSTER:';',random,random MONSTER:';',random
MONSTER:';',random,random MONSTER:';',random
MONSTER:';',random,random MONSTER:';',random
MONSTER:';',random,random MONSTER:';',random
# These guys feel like home here # 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",' ' MAZE:"astral",' '
@@ -504,13 +504,15 @@ MAP
----------------- -----------------
ENDMAP ENDMAP
# Rider locations # 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 # Where the player will land on arrival
TELEPORT_REGION:(29,15,45,15),(30,15,44,15) TELEPORT_REGION:(29,15,45,15),(30,15,44,15)
# Lit courts # Lit courts
REGION:(01,05,16,14),lit,"ordinary",filled,true REGION:(01,05,16,14),lit,"ordinary",filled,irregular
REGION:(31,01,44,10),lit,"ordinary",filled,true REGION:(31,01,44,10),lit,"ordinary",filled,irregular
REGION:(61,05,74,14),lit,"ordinary",filled,true REGION:(61,05,74,14),lit,"ordinary",filled,irregular
# A Sanctum for each alignment # A Sanctum for each alignment
# The shrines' alignments are shuffled for # The shrines' alignments are shuffled for
# each game # each game
@@ -535,29 +537,29 @@ NON_DIGGABLE:(00,00,74,19)
NON_PASSWALL:(00,00,74,19) NON_PASSWALL:(00,00,74,19)
# Moloch's horde # Moloch's horde
# West round room # West round room
MONSTER:'@',"aligned priest",(18,09),noalign,hostile MONSTER:('@',"aligned priest"),(18,09),noalign,hostile
MONSTER:'@',"aligned priest",(19,08),noalign,hostile MONSTER:('@',"aligned priest"),(19,08),noalign,hostile
MONSTER:'@',"aligned priest",(19,09),noalign,hostile MONSTER:('@',"aligned priest"),(19,09),noalign,hostile
MONSTER:'@',"aligned priest",(19,10),noalign,hostile MONSTER:('@',"aligned priest"),(19,10),noalign,hostile
MONSTER:'A',"Angel",(20,09),noalign,hostile MONSTER:('A',"Angel"),(20,09),noalign,hostile
MONSTER:'A',"Angel",(20,10),noalign,hostile MONSTER:('A',"Angel"),(20,10),noalign,hostile
MONSTER:'&',"Pestilence",place[0],hostile MONSTER:('&',"Pestilence"),$place[0],hostile
# South-central round room # South-central round room
MONSTER:'@',"aligned priest",(36,12),noalign,hostile MONSTER:('@',"aligned priest"),(36,12),noalign,hostile
MONSTER:'@',"aligned priest",(37,12),noalign,hostile MONSTER:('@',"aligned priest"),(37,12),noalign,hostile
MONSTER:'@',"aligned priest",(38,12),noalign,hostile MONSTER:('@',"aligned priest"),(38,12),noalign,hostile
MONSTER:'@',"aligned priest",(36,13),noalign,hostile MONSTER:('@',"aligned priest"),(36,13),noalign,hostile
MONSTER:'A',"Angel",(38,13),noalign,hostile MONSTER:('A',"Angel"),(38,13),noalign,hostile
MONSTER:'A',"Angel",(37,13),noalign,hostile MONSTER:('A',"Angel"),(37,13),noalign,hostile
MONSTER:'&',"Death",place[1],hostile MONSTER:('&',"Death"),$place[1],hostile
# East round room # East round room
MONSTER:'@',"aligned priest",(56,09),noalign,hostile MONSTER:('@',"aligned priest"),(56,09),noalign,hostile
MONSTER:'@',"aligned priest",(55,08),noalign,hostile MONSTER:('@',"aligned priest"),(55,08),noalign,hostile
MONSTER:'@',"aligned priest",(55,09),noalign,hostile MONSTER:('@',"aligned priest"),(55,09),noalign,hostile
MONSTER:'@',"aligned priest",(55,10),noalign,hostile MONSTER:('@',"aligned priest"),(55,10),noalign,hostile
MONSTER:'A',"Angel",(54,09),noalign,hostile MONSTER:('A',"Angel"),(54,09),noalign,hostile
MONSTER:'A',"Angel",(54,10),noalign,hostile MONSTER:('A',"Angel"),(54,10),noalign,hostile
MONSTER:'&',"Famine",place[2],hostile MONSTER:('&',"Famine"),$place[2],hostile
# #
# The aligned horde # The aligned horde
# #
@@ -567,52 +569,52 @@ MONSTER:'&',"Famine",place[2],hostile
# but a place holder. # but a place holder.
# #
# West court # West court
MONSTER:'@',"aligned priest",(12,07),chaos,hostile MONSTER:('@',"aligned priest"),(12,07),chaos,hostile
MONSTER:'@',"aligned priest",(13,07),chaos,peaceful MONSTER:('@',"aligned priest"),(13,07),chaos,peaceful
MONSTER:'@',"aligned priest",(14,07),law,hostile MONSTER:('@',"aligned priest"),(14,07),law,hostile
MONSTER:'@',"aligned priest",(12,11),law,peaceful MONSTER:('@',"aligned priest"),(12,11),law,peaceful
MONSTER:'@',"aligned priest",(13,11),neutral,hostile MONSTER:('@',"aligned priest"),(13,11),neutral,hostile
MONSTER:'@',"aligned priest",(14,11),neutral,peaceful MONSTER:('@',"aligned priest"),(14,11),neutral,peaceful
MONSTER:'A',"Angel",(11,05),chaos,hostile MONSTER:('A',"Angel"),(11,05),chaos,hostile
MONSTER:'A',"Angel",(12,05),chaos,peaceful MONSTER:('A',"Angel"),(12,05),chaos,peaceful
MONSTER:'A',"Angel",(13,05),law,hostile MONSTER:('A',"Angel"),(13,05),law,hostile
MONSTER:'A',"Angel",(11,13),law,peaceful MONSTER:('A',"Angel"),(11,13),law,peaceful
MONSTER:'A',"Angel",(12,13),neutral,hostile MONSTER:('A',"Angel"),(12,13),neutral,hostile
MONSTER:'A',"Angel",(13,13),neutral,peaceful MONSTER:('A',"Angel"),(13,13),neutral,peaceful
# Central court # Central court
MONSTER:'@',"aligned priest",(32,09),chaos,hostile MONSTER:('@',"aligned priest"),(32,09),chaos,hostile
MONSTER:'@',"aligned priest",(33,09),chaos,peaceful MONSTER:('@',"aligned priest"),(33,09),chaos,peaceful
MONSTER:'@',"aligned priest",(34,09),law,hostile MONSTER:('@',"aligned priest"),(34,09),law,hostile
MONSTER:'@',"aligned priest",(40,09),law,peaceful MONSTER:('@',"aligned priest"),(40,09),law,peaceful
MONSTER:'@',"aligned priest",(41,09),neutral,hostile MONSTER:('@',"aligned priest"),(41,09),neutral,hostile
MONSTER:'@',"aligned priest",(42,09),neutral,peaceful MONSTER:('@',"aligned priest"),(42,09),neutral,peaceful
MONSTER:'A',"Angel",(31,08),chaos,hostile MONSTER:('A',"Angel"),(31,08),chaos,hostile
MONSTER:'A',"Angel",(32,08),chaos,peaceful MONSTER:('A',"Angel"),(32,08),chaos,peaceful
MONSTER:'A',"Angel",(31,09),law,hostile MONSTER:('A',"Angel"),(31,09),law,hostile
MONSTER:'A',"Angel",(42,08),law,peaceful MONSTER:('A',"Angel"),(42,08),law,peaceful
MONSTER:'A',"Angel",(43,08),neutral,hostile MONSTER:('A',"Angel"),(43,08),neutral,hostile
MONSTER:'A',"Angel",(43,09),neutral,peaceful MONSTER:('A',"Angel"),(43,09),neutral,peaceful
# East court # East court
MONSTER:'@',"aligned priest",(60,07),chaos,hostile MONSTER:('@',"aligned priest"),(60,07),chaos,hostile
MONSTER:'@',"aligned priest",(61,07),chaos,peaceful MONSTER:('@',"aligned priest"),(61,07),chaos,peaceful
MONSTER:'@',"aligned priest",(62,07),law,hostile MONSTER:('@',"aligned priest"),(62,07),law,hostile
MONSTER:'@',"aligned priest",(60,11),law,peaceful MONSTER:('@',"aligned priest"),(60,11),law,peaceful
MONSTER:'@',"aligned priest",(61,11),neutral,hostile MONSTER:('@',"aligned priest"),(61,11),neutral,hostile
MONSTER:'@',"aligned priest",(62,11),neutral,peaceful MONSTER:('@',"aligned priest"),(62,11),neutral,peaceful
MONSTER:'A',"Angel",(61,05),chaos,hostile MONSTER:('A',"Angel"),(61,05),chaos,hostile
MONSTER:'A',"Angel",(62,05),chaos,peaceful MONSTER:('A',"Angel"),(62,05),chaos,peaceful
MONSTER:'A',"Angel",(63,05),law,hostile MONSTER:('A',"Angel"),(63,05),law,hostile
MONSTER:'A',"Angel",(61,13),law,peaceful MONSTER:('A',"Angel"),(61,13),law,peaceful
MONSTER:'A',"Angel",(62,13),neutral,hostile MONSTER:('A',"Angel"),(62,13),neutral,hostile
MONSTER:'A',"Angel",(63,13),neutral,peaceful MONSTER:('A',"Angel"),(63,13),neutral,peaceful
# #
# Assorted nasties # Assorted nasties
MONSTER:'L',random,random,hostile MONSTER:'L',random,hostile
MONSTER:'L',random,random,hostile MONSTER:'L',random,hostile
MONSTER:'L',random,random,hostile MONSTER:'L',random,hostile
MONSTER:'V',random,random,hostile MONSTER:'V',random,hostile
MONSTER:'V',random,random,hostile MONSTER:'V',random,hostile
MONSTER:'V',random,random,hostile MONSTER:'V',random,hostile
MONSTER:'D',random,random,hostile MONSTER:'D',random,hostile
MONSTER:'D',random,random,hostile MONSTER:'D',random,hostile
MONSTER:'D',random,random,hostile MONSTER:'D',random,hostile
+271 -267
View File
@@ -35,9 +35,9 @@ ENDMAP
# The shrine to Moloch. # The shrine to Moloch.
REGION:(01,06,05,14),lit,"temple" REGION:(01,06,05,14),lit,"temple"
# The Morgues # The Morgues
REGION:(19,01,24,08),unlit,"morgue",filled,true REGION:(19,01,24,08),unlit,"morgue",filled,irregular
REGION:(09,14,16,18),unlit,"morgue",filled,true REGION:(09,14,16,18),unlit,"morgue",filled,irregular
REGION:(37,09,43,14),unlit,"morgue",filled,true REGION:(37,09,43,14),unlit,"morgue",filled,irregular
# Stairs # Stairs
STAIR:(01,01),down STAIR:(01,01),down
# Branch location # Branch location
@@ -60,60 +60,60 @@ NON_DIGGABLE:(00,00,75,19)
# note: no priest(esse)s or monks - maybe Moloch has a *special* # note: no priest(esse)s or monks - maybe Moloch has a *special*
# fate reserved for members of *those* classes. # fate reserved for members of *those* classes.
# #
OBJECT:'%',"corpse",random,"archeologist",0 OBJECT:('%',"corpse"),random,montype:"archeologist"
OBJECT:'%',"corpse",random,"archeologist",0 OBJECT:('%',"corpse"),random,montype:"archeologist"
OBJECT:'%',"corpse",random,"barbarian",0 OBJECT:('%',"corpse"),random,montype:"barbarian"
OBJECT:'%',"corpse",random,"barbarian",0 OBJECT:('%',"corpse"),random,montype:"barbarian"
OBJECT:'%',"corpse",random,"caveman",0 OBJECT:('%',"corpse"),random,montype:"caveman"
OBJECT:'%',"corpse",random,"cavewoman",0 OBJECT:('%',"corpse"),random,montype:"cavewoman"
OBJECT:'%',"corpse",random,"healer",0 OBJECT:('%',"corpse"),random,montype:"healer"
OBJECT:'%',"corpse",random,"healer",0 OBJECT:('%',"corpse"),random,montype:"healer"
OBJECT:'%',"corpse",random,"knight",0 OBJECT:('%',"corpse"),random,montype:"knight"
OBJECT:'%',"corpse",random,"knight",0 OBJECT:('%',"corpse"),random,montype:"knight"
OBJECT:'%',"corpse",random,"ranger",0 OBJECT:('%',"corpse"),random,montype:"ranger"
OBJECT:'%',"corpse",random,"ranger",0 OBJECT:('%',"corpse"),random,montype:"ranger"
OBJECT:'%',"corpse",random,"rogue",0 OBJECT:('%',"corpse"),random,montype:"rogue"
OBJECT:'%',"corpse",random,"rogue",0 OBJECT:('%',"corpse"),random,montype:"rogue"
OBJECT:'%',"corpse",random,"samurai",0 OBJECT:('%',"corpse"),random,montype:"samurai"
OBJECT:'%',"corpse",random,"samurai",0 OBJECT:('%',"corpse"),random,montype:"samurai"
OBJECT:'%',"corpse",random,"tourist",0 OBJECT:('%',"corpse"),random,montype:"tourist"
OBJECT:'%',"corpse",random,"tourist",0 OBJECT:('%',"corpse"),random,montype:"tourist"
OBJECT:'%',"corpse",random,"valkyrie",0 OBJECT:('%',"corpse"),random,montype:"valkyrie"
OBJECT:'%',"corpse",random,"valkyrie",0 OBJECT:('%',"corpse"),random,montype:"valkyrie"
OBJECT:'%',"corpse",random,"wizard",0 OBJECT:('%',"corpse"),random,montype:"wizard"
OBJECT:'%',"corpse",random,"wizard",0 OBJECT:('%',"corpse"),random,montype:"wizard"
# #
# Some random weapons and armor. # Some random weapons and armor.
# #
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:')',random,random OBJECT:')',random
# #
# Some random loot. # Some random loot.
# #
OBJECT:'*',"ruby",random OBJECT:('*',"ruby"),random
OBJECT:'*',random,random OBJECT:'*',random
OBJECT:'*',random,random OBJECT:'*',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'/',random,random OBJECT:'/',random
OBJECT:'/',random,random OBJECT:'/',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'+',random,random OBJECT:'+',random
OBJECT:'+',random,random OBJECT:'+',random
OBJECT:'(',random,random OBJECT:'(',random
OBJECT:'(',random,random OBJECT:'(',random
OBJECT:'(',random,random OBJECT:'(',random
# (Not so) Random traps. # (Not so) Random traps.
TRAP:"spiked pit", (05,02) TRAP:"spiked pit", (05,02)
@@ -130,36 +130,36 @@ TRAP:"magic", random
# Random monsters. # Random monsters.
# The ghosts. # 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. # 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. # And a lich for good measure.
MONSTER:'L',random,random MONSTER:'L',random
# Some undead nasties for good measure # Some undead nasties for good measure
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'Z',random,random MONSTER:'Z',random
MONSTER:'Z',random,random MONSTER:'Z',random
MONSTER:'Z',random,random MONSTER:'Z',random
MONSTER:'Z',random,random MONSTER:'Z',random
MONSTER:'M',random,random MONSTER:'M',random
MONSTER:'M',random,random MONSTER:'M',random
MONSTER:'M',random,random MONSTER:'M',random
MONSTER:'M',random,random MONSTER:'M',random
# #
# The Juiblex level # The Juiblex level
# #
MAZE:"juiblex",' ' MAZE:"juiblex",' '
FLAGS:noteleport,shortsighted 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 # guarantee at least one open spot to ensure successful stair placement
GEOMETRY:left,bottom GEOMETRY:left,bottom
MAP MAP
@@ -169,7 +169,7 @@ MAP
}}}}.}}} }}}}.}}}
}}}}}}}} }}}}}}}}
ENDMAP ENDMAP
OBJECT:'`',"boulder",random OBJECT:('`',"boulder"),random
GEOMETRY:right,top GEOMETRY:right,top
MAP MAP
}}}}}}}} }}}}}}}}
@@ -178,7 +178,7 @@ MAP
}}...}}} }}...}}}
}}}}}}}} }}}}}}}}
ENDMAP ENDMAP
OBJECT:'`',"boulder",random OBJECT:('`',"boulder"),random
# lair # lair
GEOMETRY:center,center GEOMETRY:center,center
MAP MAP
@@ -202,8 +202,12 @@ MAP
..}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.. ..}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}.}}}}}..
ENDMAP ENDMAP
# Random registers # Random registers
RANDOM_MONSTERS:'j','b','P','F' $monster = monster: { 'j','b','P','F' }
RANDOM_PLACES:(04,02),(46,02),(04,15),(46,15) SHUFFLE: $monster
$place = { (04,02),(46,02),(04,15),(46,15) }
SHUFFLE: $place
# Dungeon description # Dungeon description
REGION:(00,00,50,17),unlit,"swamp" REGION:(00,00,50,17),unlit,"swamp"
MAZEWALK:(00,09),west 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) 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(01,00,11,20),(0,0,50,17),up
TELEPORT_REGION:levregion(69,00,79,20),(0,0,50,17),down TELEPORT_REGION:levregion(69,00,79,20),(0,0,50,17),down
FOUNTAIN:place[0] FOUNTAIN:$place[0]
MONSTER:'m',"giant mimic",place[1],m_feature "fountain" MONSTER:('m',"giant mimic"),$place[1],m_feature "fountain"
MONSTER:'m',"giant mimic",place[2],m_feature "fountain" MONSTER:('m',"giant mimic"),$place[2],m_feature "fountain"
MONSTER:'m',"giant mimic",place[3],m_feature "fountain" MONSTER:('m',"giant mimic"),$place[3],m_feature "fountain"
# The demon of the swamp # The demon of the swamp
MONSTER:'&',"Juiblex",(25,08) MONSTER:('&',"Juiblex"),(25,08)
# And a couple demons # And a couple demons
MONSTER:'i',"lemure",(43,08) MONSTER:('i',"lemure"),(43,08)
MONSTER:'i',"lemure",(44,08) MONSTER:('i',"lemure"),(44,08)
MONSTER:'i',"lemure",(45,08) MONSTER:('i',"lemure"),(45,08)
# Some liquids and gems # Some liquids and gems
OBJECT:'*',random,(43,06) OBJECT:'*',(43,06)
OBJECT:'*',random,(45,06) OBJECT:'*',(45,06)
OBJECT:'!',random,(43,09) OBJECT:'!',(43,09)
OBJECT:'!',random,(44,09) OBJECT:'!',(44,09)
OBJECT:'!',random,(45,09) OBJECT:'!',(45,09)
# And lots of blobby monsters # And lots of blobby monsters
MONSTER:monster[0],random,(25,06) MONSTER:$monster[0],(25,06)
MONSTER:monster[1],random,(24,07) MONSTER:$monster[1],(24,07)
MONSTER:monster[2],random,(26,07) MONSTER:$monster[2],(26,07)
MONSTER:monster[3],random,(23,08) MONSTER:$monster[3],(23,08)
MONSTER:monster[3],random,(27,08) MONSTER:$monster[3],(27,08)
MONSTER:monster[2],random,(24,09) MONSTER:$monster[2],(24,09)
MONSTER:monster[1],random,(26,09) MONSTER:$monster[1],(26,09)
MONSTER:monster[0],random,(25,10) MONSTER:$monster[0],(25,10)
MONSTER:'j',random,random MONSTER:'j',random
MONSTER:'j',random,random MONSTER:'j',random
MONSTER:'j',random,random MONSTER:'j',random
MONSTER:'j',random,random MONSTER:'j',random
MONSTER:'P',random,random MONSTER:'P',random
MONSTER:'P',random,random MONSTER:'P',random
MONSTER:'P',random,random MONSTER:'P',random
MONSTER:'P',random,random MONSTER:'P',random
MONSTER:'b',random,random MONSTER:'b',random
MONSTER:'b',random,random MONSTER:'b',random
MONSTER:'b',random,random MONSTER:'b',random
MONSTER:'F',random,random MONSTER:'F',random
MONSTER:'F',random,random MONSTER:'F',random
MONSTER:'F',random,random MONSTER:'F',random
MONSTER:'m',random,random MONSTER:'m',random
MONSTER:'m',random,random MONSTER:'m',random
MONSTER:';',"jellyfish",random MONSTER:(';',"jellyfish"),random
MONSTER:';',"jellyfish",random MONSTER:(';',"jellyfish"),random
# Some random objects # Some random objects
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'`',"boulder",random OBJECT:('`',"boulder"),random
# Some traps # Some traps
TRAP:"sleep gas",random TRAP:"sleep gas",random
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) BRANCH:levregion(01,00,12,20),levregion(20,01,70,20)
TELEPORT_REGION:levregion(01,00,12,20),levregion(20,01,70,20) TELEPORT_REGION:levregion(01,00,12,20),levregion(20,01,70,20)
# Wall "ruins" # Wall "ruins"
OBJECT:'`',"boulder",(19,02) OBJECT:('`',"boulder"),(19,02)
OBJECT:'`',"boulder",(20,02) OBJECT:('`',"boulder"),(20,02)
OBJECT:'`',"boulder",(21,02) OBJECT:('`',"boulder"),(21,02)
OBJECT:'`',"boulder",(36,02) OBJECT:('`',"boulder"),(36,02)
OBJECT:'`',"boulder",(36,03) OBJECT:('`',"boulder"),(36,03)
OBJECT:'`',"boulder",(06,04) OBJECT:('`',"boulder"),(06,04)
OBJECT:'`',"boulder",(05,05) OBJECT:('`',"boulder"),(05,05)
OBJECT:'`',"boulder",(06,05) OBJECT:('`',"boulder"),(06,05)
OBJECT:'`',"boulder",(07,05) OBJECT:('`',"boulder"),(07,05)
OBJECT:'`',"boulder",(39,05) OBJECT:('`',"boulder"),(39,05)
OBJECT:'`',"boulder",(08,08) OBJECT:('`',"boulder"),(08,08)
OBJECT:'`',"boulder",(09,08) OBJECT:('`',"boulder"),(09,08)
OBJECT:'`',"boulder",(10,08) OBJECT:('`',"boulder"),(10,08)
OBJECT:'`',"boulder",(11,08) OBJECT:('`',"boulder"),(11,08)
OBJECT:'`',"boulder",(06,10) OBJECT:('`',"boulder"),(06,10)
OBJECT:'`',"boulder",(05,11) OBJECT:('`',"boulder"),(05,11)
OBJECT:'`',"boulder",(06,11) OBJECT:('`',"boulder"),(06,11)
OBJECT:'`',"boulder",(07,11) OBJECT:('`',"boulder"),(07,11)
OBJECT:'`',"boulder",(21,11) OBJECT:('`',"boulder"),(21,11)
OBJECT:'`',"boulder",(21,12) OBJECT:('`',"boulder"),(21,12)
OBJECT:'`',"boulder",(13,13) OBJECT:('`',"boulder"),(13,13)
OBJECT:'`',"boulder",(14,13) OBJECT:('`',"boulder"),(14,13)
OBJECT:'`',"boulder",(15,13) OBJECT:('`',"boulder"),(15,13)
OBJECT:'`',"boulder",(14,14) OBJECT:('`',"boulder"),(14,14)
# Doors # Doors
DOOR:closed,(23,02) DOOR:closed,(23,02)
DOOR:open,(31,03) DOOR:open,(31,03)
@@ -361,56 +365,56 @@ TRAP:"fire", random
TRAP:"magic", random TRAP:"magic", random
TRAP:"magic", random TRAP:"magic", random
# Some random objects # Some random objects
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# The resident nasty # The resident nasty
MONSTER:'&',"Orcus",(33,15) MONSTER:('&',"Orcus"),(33,15)
# And its preferred companions # And its preferred companions
MONSTER:'Z',"human zombie",(32,15) MONSTER:('Z',"human zombie"),(32,15)
MONSTER:' ',"shade",(32,14) MONSTER:(' ',"shade"),(32,14)
MONSTER:' ',"shade",(32,16) MONSTER:(' ',"shade"),(32,16)
MONSTER:'V',"vampire",(35,16) MONSTER:('V',"vampire"),(35,16)
MONSTER:'V',"vampire",(35,14) MONSTER:('V',"vampire"),(35,14)
MONSTER:'V',"vampire lord",(36,14) MONSTER:('V',"vampire lord"),(36,14)
MONSTER:'V',"vampire lord",(36,15) MONSTER:('V',"vampire lord"),(36,15)
# Randomly placed companions # Randomly placed companions
MONSTER:'Z',"skeleton",random MONSTER:('Z',"skeleton"),random
MONSTER:'Z',"skeleton",random MONSTER:('Z',"skeleton"),random
MONSTER:'Z',"skeleton",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:' ',"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',"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',"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:('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"),random
MONSTER:'V',"vampire",random MONSTER:('V',"vampire"),random
MONSTER:'V',"vampire lord",random MONSTER:('V',"vampire lord"),random
MONSTER:'V',"vampire lord",random MONSTER:('V',"vampire lord"),random
# A few more for the party # A few more for the party
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
# #
# The Asmodeus Level # The Asmodeus Level
# #
@@ -447,18 +451,18 @@ NON_DIGGABLE:(00,00,20,11)
# Entire main area # Entire main area
REGION:(01,01,20,10),unlit,"ordinary" REGION:(01,01,20,10),unlit,"ordinary"
# The fellow in residence # The fellow in residence
MONSTER:'&',"Asmodeus",(12,07) MONSTER:('&',"Asmodeus"),(12,07)
# Some random weapons and armor. # Some random weapons and armor.
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:'*',random,random OBJECT:'*',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
# Some traps. # Some traps.
TRAP:"spiked pit", (05,02) TRAP:"spiked pit", (05,02)
TRAP:"fire", (08,06) TRAP:"fire", (08,06)
@@ -468,13 +472,13 @@ TRAP:"fire", random
TRAP:"magic", random TRAP:"magic", random
TRAP:"magic", random TRAP:"magic", random
# Random monsters. # Random monsters.
MONSTER:' ',"ghost",(11,07) MONSTER:(' ',"ghost"),(11,07)
MONSTER:'&',"horned devil",(10,05) MONSTER:('&',"horned devil"),(10,05)
MONSTER:'L',random,random MONSTER:'L',random
# Some Vampires for good measure # Some Vampires for good measure
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'V',random,random MONSTER:'V',random
# Second part # Second part
GEOMETRY:half-right,center GEOMETRY:half-right,center
MAP MAP
@@ -488,9 +492,9 @@ MAZEWALK:(32,02),east
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(00,00,32,04) NON_DIGGABLE:(00,00,32,04)
DOOR:closed,(32,02) DOOR:closed,(32,02)
MONSTER:'&',random,random MONSTER:'&',random
MONSTER:'&',random,random MONSTER:'&',random
MONSTER:'&',random,random MONSTER:'&',random
TRAP:"anti magic", random TRAP:"anti magic", random
TRAP:"fire", random TRAP:"fire", random
TRAP:"magic", random TRAP:"magic", random
@@ -523,18 +527,18 @@ NON_DIGGABLE:(00,00,46,12)
MAZEWALK:(00,06),west MAZEWALK:(00,06),west
STAIR:(44,06),down STAIR:(44,06),down
# The fellow in residence # The fellow in residence
MONSTER:'&',"Baalzebub",(35,06) MONSTER:('&',"Baalzebub"),(35,06)
# Some random weapons and armor. # Some random weapons and armor.
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:'*',random,random OBJECT:'*',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
# Some traps. # Some traps.
TRAP:"spiked pit", random TRAP:"spiked pit", random
TRAP:"fire", random TRAP:"fire", random
@@ -544,14 +548,14 @@ TRAP:"fire", random
TRAP:"magic", random TRAP:"magic", random
TRAP:"magic", random TRAP:"magic", random
# Random monsters. # Random monsters.
MONSTER:' ',"ghost",(37,07) MONSTER:(' ',"ghost"),(37,07)
MONSTER:'&',"horned devil",(32,05) MONSTER:('&',"horned devil"),(32,05)
MONSTER:'&',"barbed devil",(38,07) MONSTER:('&',"barbed devil"),(38,07)
MONSTER:'L',random,random MONSTER:'L',random
# Some Vampires for good measure # Some Vampires for good measure
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'V',random,random MONSTER:'V',random
# #
# The Sanctum Level # The Sanctum Level
# #
@@ -582,7 +586,7 @@ MAP
ENDMAP ENDMAP
REGION:(15,07,21,10),lit,"temple" REGION:(15,07,21,10),lit,"temple"
ALTAR:(18,08),noalign,sanctum 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 walls
NON_DIGGABLE:(00,00,75,19) NON_DIGGABLE:(00,00,75,19)
# Invisible barrier separating the left & right halves of the level # Invisible barrier separating the left & right halves of the level
@@ -635,44 +639,44 @@ TRAP:"anti magic", random
TRAP:"fire", random TRAP:"fire", random
TRAP:"magic", random TRAP:"magic", random
# Some random objects # Some random objects
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:'[',random,random OBJECT:'[',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:')',random,random OBJECT:')',random
OBJECT:'*',random,random OBJECT:'*',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
# Some monsters. # Some monsters.
MONSTER:'&',"horned devil",(14,12),hostile MONSTER:('&',"horned devil"),(14,12),hostile
MONSTER:'&',"barbed devil",(18,08),hostile MONSTER:('&',"barbed devil"),(18,08),hostile
MONSTER:'&',"erinys",(10,04),hostile MONSTER:('&',"erinys"),(10,04),hostile
MONSTER:'&',"marilith",(07,09),hostile MONSTER:('&',"marilith"),(07,09),hostile
MONSTER:'&',"nalfeshnee",(27,08),hostile MONSTER:('&',"nalfeshnee"),(27,08),hostile
# Moloch's horde # Moloch's horde
MONSTER:'@',"aligned priest",(20,03),noalign,hostile MONSTER:('@',"aligned priest"),(20,03),noalign,hostile
MONSTER:'@',"aligned priest",(15,04),noalign,hostile MONSTER:('@',"aligned priest"),(15,04),noalign,hostile
MONSTER:'@',"aligned priest",(11,05),noalign,hostile MONSTER:('@',"aligned priest"),(11,05),noalign,hostile
MONSTER:'@',"aligned priest",(11,07),noalign,hostile MONSTER:('@',"aligned priest"),(11,07),noalign,hostile
MONSTER:'@',"aligned priest",(11,09),noalign,hostile MONSTER:('@',"aligned priest"),(11,09),noalign,hostile
MONSTER:'@',"aligned priest",(11,12),noalign,hostile MONSTER:('@',"aligned priest"),(11,12),noalign,hostile
MONSTER:'@',"aligned priest",(15,13),noalign,hostile MONSTER:('@',"aligned priest"),(15,13),noalign,hostile
MONSTER:'@',"aligned priest",(17,13),noalign,hostile MONSTER:('@',"aligned priest"),(17,13),noalign,hostile
MONSTER:'@',"aligned priest",(21,13),noalign,hostile MONSTER:('@',"aligned priest"),(21,13),noalign,hostile
# A few nasties # A few nasties
MONSTER:'L',random,random MONSTER:'L',random
MONSTER:'L',random,random MONSTER:'L',random
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'V',random,random MONSTER:'V',random
MONSTER:'V',random,random MONSTER:'V',random
STAIR:(63,15),up STAIR:(63,15),up
# Teleporting to this level is allowed after the invocation creates its # Teleporting to this level is allowed after the invocation creates its
# entrance. Force arrival in that case to be on rightmost third of level. # entrance. Force arrival in that case to be on rightmost third of level.
+38 -36
View File
@@ -128,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 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: 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. Paul Winner and Yitzhak Sapir provided encouragement.
Dean Luick, Mark Modrall, and Kevin Hugo maintained and enhanced the Dean Luick, Mark Modrall, and Kevin Hugo maintained and enhanced the
Macintosh port of 3.4. Macintosh port of 3.4.
Michael Allison, David Cohrs, Alex Kompel, Dion Nicolaas, and Yitzhak Sapir 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 new graphical interface for the Windows port. Alex Kompel also
contributed a Windows CE port for 3.4.1. 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 Janne Salmijarvi and Teemu Suikki maintained and enhanced the
Amiga port of 3.5 after Janne Salmijarvi resurrected it for 3.3.1. Amiga port of 3.5 after Janne Salmijarvi resurrected it for 3.3.1.
@@ -174,7 +174,6 @@ At the beginning of development for what would eventually get released
as 3.6.0, the development team consisted of Michael Allison, as 3.6.0, the development team consisted of Michael Allison,
Warwick Allison, Ken Arromdee, David Cohrs, Jessie Collet, Ken Lorber, Warwick Allison, Ken Arromdee, David Cohrs, Jessie Collet, Ken Lorber,
Dean Luick, Pat Rankin, Mike Stephenson, Janet Walz, and Paul Winner. 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, 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. Pasi Kallinen, and Derek S. Ray joined the NetHack development team.
@@ -211,7 +210,9 @@ people primarily responsible for the public NetHack servers available for
playing the game at nethack.alt.org and devnull.net. In addition to providing 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 a way for the public to play a game of NetHack from almost anywhere, they
have hosted annual NetHack tournaments for many, many years. have hosted annual NetHack tournaments for many, many years.
<FIXME> write up something for Robin, M. Drew Streib, Pasi Kallinen
On behalf of the NetHack community, thank you very much to
M. Drew Streib, Pasi Kallinen and Robin Bandy.
- - - - - - - - - - - - - - - - - - - -
@@ -220,11 +221,11 @@ 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 the Dungeon sometimes make note of the names of the worst of these miscreants
in this, the list of Dungeoneers: in this, the list of Dungeoneers:
Adam Aronow Izchak Miller Mike Stephenson Adam Aronow J. Ali Harlow Mike Stephenson
Alex Kompel J. Ali Harlow Norm Meluch Alex Kompel Janet Walz Norm Meluch
Andreas Dorn Janet Walz Olaf Seibert Andreas Dorn Janne Salmijarvi Olaf Seibert
Andy Church Janne Salmijarvi Pasi Kallinen Andy Church Jean-Christophe Collet Pasi Kallinen
Andy Swanson Jean-Christophe Collet Pat Rankin Andy Swanson Jeff Bailey Pat Rankin
Ari Huttunen Jochen Erwied Paul Winner Ari Huttunen Jochen Erwied Paul Winner
Barton House John Kallen Pierre Martineau Barton House John Kallen Pierre Martineau
Benson I. Margulies John Rupley Ralf Brown Benson I. Margulies John Rupley Ralf Brown
@@ -233,29 +234,30 @@ in this, the list of Dungeoneers:
Bruce Cox Jon W{tte Richard Beigel Bruce Cox Jon W{tte Richard Beigel
Bruce Holloway Jonathan Handler Richard P. Hughey Bruce Holloway Jonathan Handler Richard P. Hughey
Bruce Mewborne Joshua Delahunty Rob Menke Bruce Mewborne Joshua Delahunty Rob Menke
Carl Schelin Keizo Yamamoto Robin Johnson Carl Schelin Keizo Yamamoto Robin Bandy
Chris Russo Ken Arnold Roderick Schertler Chris Russo Ken Arnold Robin Johnson
David Cohrs Ken Arromdee Roland McGrath David Cohrs Ken Arromdee Roderick Schertler
David Damerell Ken Lorber Ron Van Iwaarden David Damerell Ken Lorber Roland McGrath
David Gentzel Ken Washikita Ronnen Miller David Gentzel Ken Washikita Ron Van Iwaarden
David Hairston Kevin Darcy Ross Brown David Hairston Kevin Darcy Ronnen Miller
Dean Luick Kevin Hugo Sascha Wostmann Dean Luick Kevin Hugo Ross Brown
Del Lamb Kevin Sitze Scott Bigham Del Lamb Kevin Sitze Sascha Wostmann
Derek S. Ray Kevin Smolkowski Scott R. Turner Derek S. Ray Kevin Smolkowski Scott Bigham
Deron Meranda Kevin Sweet Sean Hunt Deron Meranda Kevin Sweet Scott R. Turner
Dion Nicolaas Lars Huttar Stephen Spackman Dion Nicolaas Lars Huttar Sean Hunt
Dylan O'Donnell Leon Arnott Stephen White Dylan O'Donnell Leon Arnott Stephen Spackman
Eric Backus Malcolm Ryan Steve Creps Eric Backus M. Drew Streib Stephen White
Eric Hendrickson Mark Gooderum Steve Linhart Eric Hendrickson Malcolm Ryan Steve Creps
Eric R. Smith Mark Modrall Steve VanDevender Eric R. Smith Mark Gooderum Steve Linhart
Eric S. Raymond Marvin Bressler Teemu Suikki Eric S. Raymond Mark Modrall Steve VanDevender
Erik Andersen Matthew Day Tim Lennan Erik Andersen Marvin Bressler Teemu Suikki
Frederick Roeber Merlyn LeRoy Timo Hakulinen Frederick Roeber Matthew Day Tim Lennan
Gil Neiger Michael Allison Tom Almy Gil Neiger Merlyn LeRoy Timo Hakulinen
Greg Laskin Michael Feir Tom West Greg Laskin Michael Allison Tom Almy
Greg Olson Michael Hamel Warren Cheung Greg Olson Michael Feir Tom West
Gregg Wonderly Michael Sokolov Warwick Allison Gregg Wonderly Michael Hamel Warren Cheung
Hao-yang Wang Mike Engber Yitzhak Sapir Hao-yang Wang Michael Sokolov Warwick Allison
Helge Hafting Mike Gallop Helge Hafting Mike Engber Yitzhak Sapir
Irina Rempt-Drijfhout Mike Passaretti Irina Rempt-Drijfhout Mike Gallop
Izchak Miller Mike Passaretti
+40 -40
View File
@@ -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 TELEPORT_REGION:(06,16,09,17),(0,0,0,0),down
# Throne room, with Croesus on the throne # Throne room, with Croesus on the throne
REGION:(37,08,46,11),lit,"throne" REGION:(37,08,46,11),lit,"throne"
MONSTER:'@',"Croesus",(43,10),hostile MONSTER:('@',"Croesus"),(43,10),hostile
# The Vault # The Vault
# Using unfilled morgue for # Using unfilled morgue for
# identification in mkmaze.c # identification in mkmaze.c
@@ -50,12 +50,12 @@ REGION:(46,06,48,06),lit,"ordinary"
REGION:(19,13,21,13),lit,"ordinary" REGION:(19,13,21,13),lit,"ordinary"
REGION:(46,13,48,13),lit,"ordinary" REGION:(46,13,48,13),lit,"ordinary"
# A welcoming committee # 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, # 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 # and `unfilled' is a kludge to force an ordinary room to remain a room
REGION:(06,15,09,16),unlit,"ordinary",unfilled REGION:(06,15,09,16),unlit,"ordinary",unfilled
# Barracks # Barracks
REGION:(62,03,71,04),lit,"barracks",filled,true REGION:(62,03,71,04),lit,"barracks",filled,irregular
# Doors # Doors
DOOR:closed,(06,14) DOOR:closed,(06,14)
DOOR:closed,(09,03) DOOR:closed,(09,03)
@@ -67,43 +67,43 @@ DOOR:open,(68,11)
DOOR:closed,(63,14) DOOR:closed,(63,14)
DOOR:closed,(66,14) DOOR:closed,(66,14)
# Soldiers guarding the fort # Soldiers guarding the fort
MONSTER:'@',"soldier",(12,14) MONSTER:('@',"soldier"),(12,14)
MONSTER:'@',"soldier",(12,13) MONSTER:('@',"soldier"),(12,13)
MONSTER:'@',"soldier",(11,10) MONSTER:('@',"soldier"),(11,10)
MONSTER:'@',"soldier",(13,02) MONSTER:('@',"soldier"),(13,02)
MONSTER:'@',"soldier",(14,03) MONSTER:('@',"soldier"),(14,03)
MONSTER:'@',"soldier",(20,02) MONSTER:('@',"soldier"),(20,02)
MONSTER:'@',"soldier",(30,02) MONSTER:('@',"soldier"),(30,02)
MONSTER:'@',"soldier",(40,02) MONSTER:('@',"soldier"),(40,02)
MONSTER:'@',"soldier",(30,16) MONSTER:('@',"soldier"),(30,16)
MONSTER:'@',"soldier",(32,16) MONSTER:('@',"soldier"),(32,16)
MONSTER:'@',"soldier",(40,16) MONSTER:('@',"soldier"),(40,16)
MONSTER:'@',"soldier",(54,16) MONSTER:('@',"soldier"),(54,16)
MONSTER:'@',"soldier",(54,14) MONSTER:('@',"soldier"),(54,14)
MONSTER:'@',"soldier",(54,13) MONSTER:('@',"soldier"),(54,13)
MONSTER:'@',"soldier",(57,10) MONSTER:('@',"soldier"),(57,10)
MONSTER:'@',"soldier",(57,09) MONSTER:('@',"soldier"),(57,09)
MONSTER:'@',"lieutenant",(15,08) MONSTER:('@',"lieutenant"),(15,08)
# Four dragons guarding each side # Four dragons guarding each side
MONSTER:'D',random,(18,09) MONSTER:'D',(18,09)
MONSTER:'D',random,(49,10) MONSTER:'D',(49,10)
MONSTER:'D',random,(33,05) MONSTER:'D',(33,05)
MONSTER:'D',random,(33,14) MONSTER:'D',(33,14)
# Eels in the moat # Eels in the moat
MONSTER:';',"giant eel",(17,08) MONSTER:(';',"giant eel"),(17,08)
MONSTER:';',"giant eel",(17,11) MONSTER:(';',"giant eel"),(17,11)
MONSTER:';',"giant eel",(48,08) MONSTER:(';',"giant eel"),(48,08)
MONSTER:';',"giant eel",(48,11) MONSTER:(';',"giant eel"),(48,11)
# The corner rooms treasures # The corner rooms treasures
OBJECT:'*',"diamond",(19,06) OBJECT:('*',"diamond"),(19,06)
OBJECT:'*',"diamond",(20,06) OBJECT:('*',"diamond"),(20,06)
OBJECT:'*',"diamond",(21,06) OBJECT:('*',"diamond"),(21,06)
OBJECT:'*',"emerald",(19,13) OBJECT:('*',"emerald"),(19,13)
OBJECT:'*',"emerald",(20,13) OBJECT:('*',"emerald"),(20,13)
OBJECT:'*',"emerald",(21,13) OBJECT:('*',"emerald"),(21,13)
OBJECT:'*',"ruby",(46,06) OBJECT:('*',"ruby"),(46,06)
OBJECT:'*',"ruby",(47,06) OBJECT:('*',"ruby"),(47,06)
OBJECT:'*',"ruby",(48,06) OBJECT:('*',"ruby"),(48,06)
OBJECT:'*',"amethyst",(46,13) OBJECT:('*',"amethyst"),(46,13)
OBJECT:'*',"amethyst",(47,13) OBJECT:('*',"amethyst"),(47,13)
OBJECT:'*',"amethyst",(48,13) OBJECT:('*',"amethyst"),(48,13)
+99 -97
View File
@@ -55,28 +55,29 @@ BRANCH:levregion(01,00,79,20),(30,06,46,13)
# Non diggable walls # Non diggable walls
NON_DIGGABLE:(30,06,46,13) NON_DIGGABLE:(30,06,46,13)
# Objects # Objects
CONTAINER:'`',"statue",(36,10),uncursed,"knight",3,"Perseus" CONTAINER:('`',"statue"),(36,10),uncursed,montype:"knight",3,name:"Perseus" {
OBJECT[75%]:'[',"shield of reflection",contained,cursed,+0 [75%]: OBJECT:('[',"shield of reflection"),cursed,+0
OBJECT[25%]:'[',"levitation boots",contained,random,+0 [25%]: OBJECT:('[',"levitation boots"),+0
OBJECT[50%]:')',"scimitar",contained,blessed,+2 [50%]: OBJECT:(')',"scimitar"),blessed,+2
OBJECT[50%]:'(',"sack",contained [50%]: OBJECT:('(',"sack")
}
# These aren't really containers, but specifying CONTAINER forces them to be # These aren't really containers, but specifying CONTAINER forces them to be
# empty, since CONTAINERs contain only what is explicitly specified. # 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 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
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
# Random traps # Random traps
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
@@ -86,27 +87,27 @@ TRAP:random,random
TRAP:"board",(38,07) TRAP:"board",(38,07)
TRAP:"board",(38,12) TRAP:"board",(38,12)
# Random monsters # Random monsters
MONSTER:'@',"Medusa",(36,10),asleep MONSTER:('@',"Medusa"),(36,10),asleep
MONSTER:';',"giant eel",(11,06) MONSTER:(';',"giant eel"),(11,06)
MONSTER:';',"giant eel",(23,13) MONSTER:(';',"giant eel"),(23,13)
MONSTER:';',"giant eel",(29,02) MONSTER:(';',"giant eel"),(29,02)
MONSTER:';',"jellyfish",(02,02) MONSTER:(';',"jellyfish"),(02,02)
MONSTER:';',"jellyfish",(00,08) MONSTER:(';',"jellyfish"),(00,08)
MONSTER:';',"jellyfish",(04,18) MONSTER:(';',"jellyfish"),(04,18)
MONSTER:'T',"water troll",(51,03) MONSTER:('T',"water troll"),(51,03)
MONSTER:'T',"water troll",(64,11) MONSTER:('T',"water troll"),(64,11)
MONSTER:'S',random,(38,07) MONSTER:'S',(38,07)
MONSTER:'S',random,(38,12) MONSTER:'S',(38,12)
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MAZE:"medusa-2",' ' MAZE:"medusa-2",' '
FLAGS: noteleport FLAGS: noteleport
@@ -136,7 +137,7 @@ ENDMAP
# Dungeon Description # Dungeon Description
REGION:(00,00,74,19),lit,"ordinary" REGION:(00,00,74,19),lit,"ordinary"
REGION:(02,03,05,16),unlit,"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:(71,08,72,11),unlit,"ordinary"
REGION:(67,08,69,11),lit,"ordinary" REGION:(67,08,69,11),lit,"ordinary"
# Teleport: down to up stairs island, up to Medusa's island # 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:(01,02,06,17)
NON_DIGGABLE:(60,02,73,17) NON_DIGGABLE:(60,02,73,17)
# Objects # Objects
CONTAINER:'`',"statue",(68,10),uncursed,"knight",3,"Perseus" CONTAINER:('`',"statue"),(68,10),uncursed,montype:"knight",3,name:"Perseus" {
OBJECT[25%]:'[',"shield of reflection",contained,cursed,+0 [25%]: OBJECT:('[',"shield of reflection"),cursed,+0
OBJECT[75%]:'[',"levitation boots",contained,random,+0 [75%]: OBJECT:('[',"levitation boots"),+0
OBJECT[50%]:')',"scimitar",contained,blessed,+2 [50%]: OBJECT:(')',"scimitar"),blessed,+2
OBJECT[50%]:'(',"sack",contained [50%]: OBJECT:('(',"sack")
CONTAINER:'`',"statue",(64,08) }
CONTAINER:'`',"statue",(65,08) CONTAINER:('`',"statue"),(64,08) { }
CONTAINER:'`',"statue",(64,09) CONTAINER:('`',"statue"),(65,08) { }
CONTAINER:'`',"statue",(65,09) CONTAINER:('`',"statue"),(64,09) { }
CONTAINER:'`',"statue",(64,10) CONTAINER:('`',"statue"),(65,09) { }
CONTAINER:'`',"statue",(65,10) CONTAINER:('`',"statue"),(64,10) { }
CONTAINER:'`',"statue",(64,11) CONTAINER:('`',"statue"),(65,10) { }
CONTAINER:'`',"statue",(65,11) CONTAINER:('`',"statue"),(64,11) { }
OBJECT:'`',"boulder",(04,04) CONTAINER:('`',"statue"),(65,11) { }
OBJECT:'/',random,(52,09) OBJECT:('`',"boulder"),(04,04)
OBJECT:'`',"boulder",(52,09) OBJECT:'/',(52,09)
OBJECT:random,random,random OBJECT:('`',"boulder"),(52,09)
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random,random OBJECT:random,random
OBJECT:random,random
# Traps # Traps
TRAP:"magic",(03,12) TRAP:"magic",(03,12)
TRAP:random,random TRAP:random,random
@@ -182,36 +184,36 @@ TRAP:random,random
TRAP:random,random TRAP:random,random
TRAP:random,random TRAP:random,random
# Monsters. # Monsters.
MONSTER:'@',"Medusa",(68,10),asleep MONSTER:('@',"Medusa"),(68,10),asleep
MONSTER:'g',"gremlin",(02,14) MONSTER:('g',"gremlin"),(02,14)
MONSTER:'H',"titan",(02,05) MONSTER:('H',"titan"),(02,05)
MONSTER:';',"electric eel",(10,13) MONSTER:(';',"electric eel"),(10,13)
MONSTER:';',"electric eel",(11,13) MONSTER:(';',"electric eel"),(11,13)
MONSTER:';',"electric eel",(10,14) MONSTER:(';',"electric eel"),(10,14)
MONSTER:';',"electric eel",(11,14) MONSTER:(';',"electric eel"),(11,14)
MONSTER:';',"electric eel",(10,15) MONSTER:(';',"electric eel"),(10,15)
MONSTER:';',"electric eel",(11,15) MONSTER:(';',"electric eel"),(11,15)
MONSTER:';',"jellyfish",(01,01) MONSTER:(';',"jellyfish"),(01,01)
MONSTER:';',"jellyfish",(00,08) MONSTER:(';',"jellyfish"),(00,08)
MONSTER:';',"jellyfish",(04,19) MONSTER:(';',"jellyfish"),(04,19)
MONSTER:''',"stone golem",(64,08),asleep MONSTER:(''',"stone golem"),(64,08),asleep
MONSTER:''',"stone golem",(65,08),asleep MONSTER:(''',"stone golem"),(65,08),asleep
MONSTER:''',"stone golem",(64,09),asleep MONSTER:(''',"stone golem"),(64,09),asleep
MONSTER:''',"stone golem",(65,09),asleep MONSTER:(''',"stone golem"),(65,09),asleep
MONSTER:'S',"cobra",(64,10),asleep MONSTER:('S',"cobra"),(64,10),asleep
MONSTER:'S',"cobra",(65,10),asleep MONSTER:('S',"cobra"),(65,10),asleep
MONSTER:'A',random,(72,08) MONSTER:'A',(72,08)
MONSTER:'y',"yellow light",(72,11),asleep MONSTER:('y',"yellow light"),(72,11),asleep
MONSTER:random,random,(17,07) MONSTER:random,(17,07)
MONSTER:random,random,(28,11) MONSTER:random,(28,11)
MONSTER:random,random,(32,13) MONSTER:random,(32,13)
MONSTER:random,random,(49,09) MONSTER:random,(49,09)
MONSTER:random,random,(48,07) MONSTER:random,(48,07)
MONSTER:random,random,(65,03) MONSTER:random,(65,03)
MONSTER:random,random,(70,04) MONSTER:random,(70,04)
MONSTER:random,random,(70,15) MONSTER:random,(70,15)
MONSTER:random,random,(65,16) MONSTER:random,(65,16)
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
+700 -570
View File
File diff suppressed because it is too large Load Diff
+1
View File
@@ -45,6 +45,7 @@ tombstone print tombstone when you die [TRUE]
toptenwin print topten in a window rather than stdout [FALSE] toptenwin print topten in a window rather than stdout [FALSE]
travel enable the command to travel to a map location via [TRUE] travel enable the command to travel to a map location via [TRUE]
a shortest-path algorithm, usually invoked by '_'. 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] use_inverse display detected monsters in highlighted manner [FALSE]
verbose print more commentary during the game [TRUE] verbose print more commentary during the game [TRUE]
+48 -40
View File
@@ -8,51 +8,59 @@
LEVEL: "oracle" LEVEL: "oracle"
ROOM: "ordinary" , lit, (3,3), (center,center), (11,9) ROOM: "ordinary" , lit, (3,3), (center,center), (11,9) {
NAME: "central" OBJECT:('`',"statue"),(0,0),montype:'C',1
OBJECT:'`',"statue",(0,0),"forest centaur",1 OBJECT:('`',"statue"),(0,8),montype:'C',1
OBJECT:'`',"statue",(0,8),"mountain centaur",1 OBJECT:('`',"statue"),(10,0),montype:'C',1
OBJECT:'`',"statue",(10,0),"mountain centaur",1 OBJECT:('`',"statue"),(10,8),montype:'C',1
OBJECT:'`',"statue",(10,8),"forest centaur",1 OBJECT:('`',"statue"),(5,1),montype:'C',1
OBJECT:'`',"statue",(5,1),"plains centaur",1 OBJECT:('`',"statue"),(5,7),montype:'C',1
OBJECT:'`',"statue",(5,7),"plains centaur",1 OBJECT:('`',"statue"),(2,4),montype:'C',1
OBJECT:'`',"statue",(2,4),"plains centaur",1 OBJECT:('`',"statue"),(8,4),montype:'C',1
OBJECT:'`',"statue",(8,4),"plains centaur",1
MONSTER: random, random, random
MONSTER: random, random, random
SUBROOM: "delphi" , lit , (4,3) , (3,3), "central" SUBROOM: "delphi" , lit , (4,3) , (3,3) {
FOUNTAIN: (0, 1) FOUNTAIN: (0, 1)
FOUNTAIN: (1, 0) FOUNTAIN: (1, 0)
FOUNTAIN: (1, 2) FOUNTAIN: (1, 2)
FOUNTAIN: (2, 1) FOUNTAIN: (2, 1)
MONSTER: '@', "Oracle", (1,1) MONSTER: ('@', "Oracle"), (1,1)
DOOR: false , nodoor , random, random ROOMDOOR: false , nodoor , random, random
}
ROOM: "ordinary" , random, random, random, random MONSTER: random, random
STAIR: random, up MONSTER: random, random
OBJECT: random,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 ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random STAIR: random, up
OBJECT: random, random, random OBJECT: random,random
MONSTER: random, random, random }
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random STAIR: random, down
TRAP: random, random OBJECT: random, random
MONSTER: random, random, random TRAP: random, random
MONSTER: random, random
MONSTER: random, random
}
ROOM: "ordinary" , random, random, random, random ROOM: "ordinary" , random, random, random, random {
OBJECT: random, random, random OBJECT: random, random
TRAP: random, random OBJECT: random, random
MONSTER: random, 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 RANDOM_CORRIDORS
+209 -197
View File
@@ -35,7 +35,7 @@
### Bottom (first) level of Sokoban ### ### Bottom (first) level of Sokoban ###
MAZE:"soko4-1",' ' MAZE:"soko4-1",' '
FLAGS:noteleport,hardfloor FLAGS:noteleport,hardfloor,premapped,solidify
GEOMETRY:center,center GEOMETRY:center,center
#12345678901234567890123456789012345678901234567890 #12345678901234567890123456789012345678901234567890
MAP MAP
@@ -60,18 +60,18 @@ NON_DIGGABLE:(00,00,13,12)
NON_PASSWALL:(00,00,13,12) NON_PASSWALL:(00,00,13,12)
# Boulders # Boulders
OBJECT:'`',"boulder",(02,02) OBJECT:('`',"boulder"),(02,02)
OBJECT:'`',"boulder",(02,03) OBJECT:('`',"boulder"),(02,03)
# #
OBJECT:'`',"boulder",(10,02) OBJECT:('`',"boulder"),(10,02)
OBJECT:'`',"boulder",(09,03) OBJECT:('`',"boulder"),(09,03)
OBJECT:'`',"boulder",(10,04) OBJECT:('`',"boulder"),(10,04)
# #
OBJECT:'`',"boulder",(08,07) OBJECT:('`',"boulder"),(08,07)
OBJECT:'`',"boulder",(09,08) OBJECT:('`',"boulder"),(09,08)
OBJECT:'`',"boulder",(09,09) OBJECT:('`',"boulder"),(09,09)
OBJECT:'`',"boulder",(08,10) OBJECT:('`',"boulder"),(08,10)
OBJECT:'`',"boulder",(10,10) OBJECT:('`',"boulder"),(10,10)
# Traps # Traps
TRAP:"pit",(03,06) TRAP:"pit",(03,06)
@@ -85,20 +85,20 @@ TRAP:"pit",(06,10)
TRAP:"pit",(07,10) TRAP:"pit",(07,10)
# A little help # A little help
OBJECT:'?',"earth",(02,11) OBJECT:('?',"earth"),(02,11)
OBJECT:'?',"earth",(03,11) OBJECT:('?',"earth"),(03,11)
# Random objects # Random objects
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'/',random,random OBJECT:'/',random
MAZE:"soko4-2",' ' MAZE:"soko4-2",' '
FLAGS:noteleport,hardfloor FLAGS:noteleport,hardfloor,premapped,solidify
GEOMETRY:center,center GEOMETRY:center,center
#12345678901234567890123456789012345678901234567890 #12345678901234567890123456789012345678901234567890
MAP MAP
@@ -121,20 +121,20 @@ NON_DIGGABLE:(00,00,14,10)
NON_PASSWALL:(00,00,14,10) NON_PASSWALL:(00,00,14,10)
# Boulders # Boulders
OBJECT:'`',"boulder",(05,02) OBJECT:('`',"boulder"),(05,02)
OBJECT:'`',"boulder",(06,02) OBJECT:('`',"boulder"),(06,02)
OBJECT:'`',"boulder",(06,03) OBJECT:('`',"boulder"),(06,03)
OBJECT:'`',"boulder",(07,03) OBJECT:('`',"boulder"),(07,03)
# #
OBJECT:'`',"boulder",(09,05) OBJECT:('`',"boulder"),(09,05)
OBJECT:'`',"boulder",(10,03) OBJECT:('`',"boulder"),(10,03)
OBJECT:'`',"boulder",(11,02) OBJECT:('`',"boulder"),(11,02)
OBJECT:'`',"boulder",(12,03) OBJECT:('`',"boulder"),(12,03)
# #
OBJECT:'`',"boulder",(07,08) OBJECT:('`',"boulder"),(07,08)
OBJECT:'`',"boulder",(08,08) OBJECT:('`',"boulder"),(08,08)
OBJECT:'`',"boulder",(09,08) OBJECT:('`',"boulder"),(09,08)
OBJECT:'`',"boulder",(10,08) OBJECT:('`',"boulder"),(10,08)
# Traps # Traps
TRAP:"pit",(01,02) TRAP:"pit",(01,02)
@@ -149,21 +149,21 @@ TRAP:"pit",(05,08)
TRAP:"pit",(06,08) TRAP:"pit",(06,08)
# A little help # A little help
OBJECT:'?',"earth",(01,09) OBJECT:('?',"earth"),(01,09)
OBJECT:'?',"earth",(02,09) OBJECT:('?',"earth"),(02,09)
# Random objects # Random objects
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'/',random,random OBJECT:'/',random
### Second level ### ### Second level ###
MAZE:"soko3-1",' ' MAZE:"soko3-1",' '
FLAGS:noteleport FLAGS:noteleport,premapped,solidify
GEOMETRY:center,center GEOMETRY:center,center
#12345678901234567890123456789012345678901234567890 #12345678901234567890123456789012345678901234567890
MAP MAP
@@ -188,29 +188,29 @@ NON_DIGGABLE:(00,00,28,11)
NON_PASSWALL:(00,00,28,11) NON_PASSWALL:(00,00,28,11)
# Boulders # Boulders
OBJECT:'`',"boulder",(03,02) OBJECT:('`',"boulder"),(03,02)
OBJECT:'`',"boulder",(04,02) OBJECT:('`',"boulder"),(04,02)
# #
OBJECT:'`',"boulder",(06,02) OBJECT:('`',"boulder"),(06,02)
OBJECT:'`',"boulder",(06,03) OBJECT:('`',"boulder"),(06,03)
OBJECT:'`',"boulder",(07,02) OBJECT:('`',"boulder"),(07,02)
# #
OBJECT:'`',"boulder",(03,06) OBJECT:('`',"boulder"),(03,06)
OBJECT:'`',"boulder",(02,07) OBJECT:('`',"boulder"),(02,07)
OBJECT:'`',"boulder",(03,07) OBJECT:('`',"boulder"),(03,07)
OBJECT:'`',"boulder",(03,08) OBJECT:('`',"boulder"),(03,08)
OBJECT:'`',"boulder",(02,09) OBJECT:('`',"boulder"),(02,09)
OBJECT:'`',"boulder",(03,09) OBJECT:('`',"boulder"),(03,09)
OBJECT:'`',"boulder",(04,09) OBJECT:('`',"boulder"),(04,09)
# #
OBJECT:'`',"boulder",(06,07) OBJECT:('`',"boulder"),(06,07)
OBJECT:'`',"boulder",(06,09) OBJECT:('`',"boulder"),(06,09)
OBJECT:'`',"boulder",(08,07) OBJECT:('`',"boulder"),(08,07)
OBJECT:'`',"boulder",(08,10) OBJECT:('`',"boulder"),(08,10)
OBJECT:'`',"boulder",(09,08) OBJECT:('`',"boulder"),(09,08)
OBJECT:'`',"boulder",(09,09) OBJECT:('`',"boulder"),(09,09)
OBJECT:'`',"boulder",(10,07) OBJECT:('`',"boulder"),(10,07)
OBJECT:'`',"boulder",(10,10) OBJECT:('`',"boulder"),(10,10)
# Traps # Traps
TRAP:"hole",(12,10) TRAP:"hole",(12,10)
@@ -230,16 +230,16 @@ TRAP:"hole",(25,10)
TRAP:"hole",(26,10) TRAP:"hole",(26,10)
# Random objects # Random objects
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'/',random,random OBJECT:'/',random
MAZE:"soko3-2",' ' MAZE:"soko3-2",' '
FLAGS:noteleport FLAGS:noteleport,premapped,solidify
GEOMETRY:center,center GEOMETRY:center,center
#12345678901234567890123456789012345678901234567890 #12345678901234567890123456789012345678901234567890
MAP MAP
@@ -266,22 +266,22 @@ NON_DIGGABLE:(00,00,25,13)
NON_PASSWALL:(00,00,25,13) NON_PASSWALL:(00,00,25,13)
# Boulders # Boulders
OBJECT:'`',"boulder",(02,03) OBJECT:('`',"boulder"),(02,03)
OBJECT:'`',"boulder",(08,03) OBJECT:('`',"boulder"),(08,03)
OBJECT:'`',"boulder",(09,04) OBJECT:('`',"boulder"),(09,04)
OBJECT:'`',"boulder",(02,05) OBJECT:('`',"boulder"),(02,05)
OBJECT:'`',"boulder",(04,05) OBJECT:('`',"boulder"),(04,05)
OBJECT:'`',"boulder",(09,05) OBJECT:('`',"boulder"),(09,05)
OBJECT:'`',"boulder",(02,06) OBJECT:('`',"boulder"),(02,06)
OBJECT:'`',"boulder",(05,06) OBJECT:('`',"boulder"),(05,06)
OBJECT:'`',"boulder",(06,07) OBJECT:('`',"boulder"),(06,07)
OBJECT:'`',"boulder",(03,08) OBJECT:('`',"boulder"),(03,08)
OBJECT:'`',"boulder",(07,08) OBJECT:('`',"boulder"),(07,08)
OBJECT:'`',"boulder",(05,09) OBJECT:('`',"boulder"),(05,09)
OBJECT:'`',"boulder",(10,09) OBJECT:('`',"boulder"),(10,09)
OBJECT:'`',"boulder",(07,10) OBJECT:('`',"boulder"),(07,10)
OBJECT:'`',"boulder",(10,10) OBJECT:('`',"boulder"),(10,10)
OBJECT:'`',"boulder",(03,11) OBJECT:('`',"boulder"),(03,11)
# Traps # Traps
TRAP:"hole",(12,10) TRAP:"hole",(12,10)
@@ -298,17 +298,17 @@ TRAP:"hole",(22,10)
TRAP:"hole",(23,10) TRAP:"hole",(23,10)
# Random objects # Random objects
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'/',random,random OBJECT:'/',random
### Third level ### ### Third level ###
MAZE:"soko2-1",' ' MAZE:"soko2-1",' '
FLAGS:noteleport FLAGS:noteleport,premapped,solidify
GEOMETRY:center,center GEOMETRY:center,center
#12345678901234567890123456789012345678901234567890 #12345678901234567890123456789012345678901234567890
MAP MAP
@@ -333,23 +333,23 @@ NON_DIGGABLE:(00,00,19,11)
NON_PASSWALL:(00,00,19,11) NON_PASSWALL:(00,00,19,11)
# Boulders # Boulders
OBJECT:'`',"boulder",(02,02) OBJECT:('`',"boulder"),(02,02)
OBJECT:'`',"boulder",(03,02) OBJECT:('`',"boulder"),(03,02)
# #
OBJECT:'`',"boulder",(05,03) OBJECT:('`',"boulder"),(05,03)
OBJECT:'`',"boulder",(07,03) OBJECT:('`',"boulder"),(07,03)
OBJECT:'`',"boulder",(07,02) OBJECT:('`',"boulder"),(07,02)
OBJECT:'`',"boulder",(08,02) OBJECT:('`',"boulder"),(08,02)
# #
OBJECT:'`',"boulder",(10,03) OBJECT:('`',"boulder"),(10,03)
OBJECT:'`',"boulder",(11,03) OBJECT:('`',"boulder"),(11,03)
# #
OBJECT:'`',"boulder",(02,07) OBJECT:('`',"boulder"),(02,07)
OBJECT:'`',"boulder",(02,08) OBJECT:('`',"boulder"),(02,08)
OBJECT:'`',"boulder",(03,09) OBJECT:('`',"boulder"),(03,09)
# #
OBJECT:'`',"boulder",(05,07) OBJECT:('`',"boulder"),(05,07)
OBJECT:'`',"boulder",(06,06) OBJECT:('`',"boulder"),(06,06)
# Traps # Traps
TRAP:"hole",(08,09) TRAP:"hole",(08,09)
@@ -364,16 +364,16 @@ TRAP:"hole",(16,09)
TRAP:"hole",(17,09) TRAP:"hole",(17,09)
# Random objects # Random objects
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'/',random,random OBJECT:'/',random
MAZE:"soko2-2",' ' MAZE:"soko2-2",' '
FLAGS:noteleport FLAGS:noteleport,premapped,solidify
GEOMETRY:center,center GEOMETRY:center,center
#12345678901234567890123456789012345678901234567890 #12345678901234567890123456789012345678901234567890
MAP MAP
@@ -399,22 +399,22 @@ NON_DIGGABLE:(00,00,19,12)
NON_PASSWALL:(00,00,19,12) NON_PASSWALL:(00,00,19,12)
# Boulders # Boulders
OBJECT:'`',"boulder",(04,02) OBJECT:('`',"boulder"),(04,02)
OBJECT:'`',"boulder",(04,03) OBJECT:('`',"boulder"),(04,03)
OBJECT:'`',"boulder",(05,03) OBJECT:('`',"boulder"),(05,03)
OBJECT:'`',"boulder",(07,03) OBJECT:('`',"boulder"),(07,03)
OBJECT:'`',"boulder",(08,03) OBJECT:('`',"boulder"),(08,03)
OBJECT:'`',"boulder",(02,04) OBJECT:('`',"boulder"),(02,04)
OBJECT:'`',"boulder",(03,04) OBJECT:('`',"boulder"),(03,04)
OBJECT:'`',"boulder",(05,05) OBJECT:('`',"boulder"),(05,05)
OBJECT:'`',"boulder",(06,06) OBJECT:('`',"boulder"),(06,06)
OBJECT:'`',"boulder",(09,06) OBJECT:('`',"boulder"),(09,06)
OBJECT:'`',"boulder",(03,07) OBJECT:('`',"boulder"),(03,07)
OBJECT:'`',"boulder",(04,07) OBJECT:('`',"boulder"),(04,07)
OBJECT:'`',"boulder",(07,07) OBJECT:('`',"boulder"),(07,07)
OBJECT:'`',"boulder",(06,09) OBJECT:('`',"boulder"),(06,09)
OBJECT:'`',"boulder",(05,10) OBJECT:('`',"boulder"),(05,10)
OBJECT:'`',"boulder",(05,11) OBJECT:('`',"boulder"),(05,11)
# Traps # Traps
TRAP:"hole",(07,11) TRAP:"hole",(07,11)
@@ -430,17 +430,17 @@ TRAP:"hole",(16,11)
TRAP:"hole",(17,11) TRAP:"hole",(17,11)
# Random objects # Random objects
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'/',random,random OBJECT:'/',random
### Top (last) level of Sokoban ### ### Top (last) level of Sokoban ###
MAZE:"soko1-1",' ' MAZE:"soko1-1",' '
FLAGS:noteleport FLAGS:noteleport,premapped,solidify
GEOMETRY:center,center GEOMETRY:center,center
#12345678901234567890123456789012345678901234567890 #12345678901234567890123456789012345678901234567890
MAP MAP
@@ -463,34 +463,36 @@ MAP
|...|----- --|.....| |...|----- --|.....|
----- ------- ----- -------
ENDMAP ENDMAP
RANDOM_PLACES:(16,11),(16,13),(16,15) $place = { (16,11),(16,13),(16,15) }
SHUFFLE: $place
STAIR:(01,01),down STAIR:(01,01),down
REGION:(00,00,25,17),lit,"ordinary" REGION:(00,00,25,17),lit,"ordinary"
NON_DIGGABLE:(00,00,25,17) NON_DIGGABLE:(00,00,25,17)
NON_PASSWALL:(00,00,25,17) NON_PASSWALL:(00,00,25,17)
# Boulders # Boulders
OBJECT:'`',"boulder",(03,05) OBJECT:('`',"boulder"),(03,05)
OBJECT:'`',"boulder",(05,05) OBJECT:('`',"boulder"),(05,05)
OBJECT:'`',"boulder",(07,05) OBJECT:('`',"boulder"),(07,05)
OBJECT:'`',"boulder",(09,05) OBJECT:('`',"boulder"),(09,05)
OBJECT:'`',"boulder",(11,05) OBJECT:('`',"boulder"),(11,05)
# #
OBJECT:'`',"boulder",(04,07) OBJECT:('`',"boulder"),(04,07)
OBJECT:'`',"boulder",(04,08) OBJECT:('`',"boulder"),(04,08)
OBJECT:'`',"boulder",(06,07) OBJECT:('`',"boulder"),(06,07)
OBJECT:'`',"boulder",(09,07) OBJECT:('`',"boulder"),(09,07)
OBJECT:'`',"boulder",(11,07) OBJECT:('`',"boulder"),(11,07)
# #
OBJECT:'`',"boulder",(03,12) OBJECT:('`',"boulder"),(03,12)
OBJECT:'`',"boulder",(04,10) OBJECT:('`',"boulder"),(04,10)
OBJECT:'`',"boulder",(05,12) OBJECT:('`',"boulder"),(05,12)
OBJECT:'`',"boulder",(06,10) OBJECT:('`',"boulder"),(06,10)
OBJECT:'`',"boulder",(07,11) OBJECT:('`',"boulder"),(07,11)
OBJECT:'`',"boulder",(08,10) OBJECT:('`',"boulder"),(08,10)
OBJECT:'`',"boulder",(09,12) OBJECT:('`',"boulder"),(09,12)
# #
OBJECT:'`',"boulder",(03,14) OBJECT:('`',"boulder"),(03,14)
# Traps # Traps
TRAP:"hole",(08,01) TRAP:"hole",(08,01)
@@ -510,29 +512,33 @@ TRAP:"hole",(21,01)
TRAP:"hole",(22,01) TRAP:"hole",(22,01)
TRAP:"hole",(23,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 # Random objects
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'/',random,random OBJECT:'/',random
# Rewards # Rewards
DOOR:locked,(23,13) DOOR:locked,(23,13)
DOOR:closed,(17,11) DOOR:closed,(17,11)
DOOR:closed,(17,13) DOOR:closed,(17,13)
DOOR:closed,(17,15) DOOR:closed,(17,15)
REGION:(18,10,22,16),lit,"zoo",filled,true REGION:(18,10,22,16),lit,"zoo",filled,irregular
OBJECT:'(',"bag of holding",place[0] IF [50%] {
ENGRAVING:place[0],burn,"Elbereth" OBJECT:('(',"bag of holding"),$place[0]
} ELSE {
OBJECT:('"',"amulet of reflection"),$place[0]
}
ENGRAVING:$place[0],burn,"Elbereth"
MAZE:"soko1-2",' ' MAZE:"soko1-2",' '
FLAGS:noteleport FLAGS:noteleport,premapped,solidify
GEOMETRY:center,center GEOMETRY:center,center
#12345678901234567890123456789012345678901234567890 #12345678901234567890123456789012345678901234567890
MAP MAP
@@ -554,35 +560,37 @@ MAP
|..|..| --|.....| |..|..| --|.....|
------- ------- ------- -------
ENDMAP ENDMAP
RANDOM_PLACES:(16,10),(16,12),(16,14) $place = { (16,10),(16,12),(16,14) }
SHUFFLE: $place
STAIR:(06,15),down STAIR:(06,15),down
REGION:(00,00,25,16),lit,"ordinary" REGION:(00,00,25,16),lit,"ordinary"
NON_DIGGABLE:(00,00,25,16) NON_DIGGABLE:(00,00,25,16)
NON_PASSWALL:(00,00,25,16) NON_PASSWALL:(00,00,25,16)
# Boulders # Boulders
OBJECT:'`',"boulder",(04,04) OBJECT:('`',"boulder"),(04,04)
OBJECT:'`',"boulder",(02,06) OBJECT:('`',"boulder"),(02,06)
OBJECT:'`',"boulder",(03,06) OBJECT:('`',"boulder"),(03,06)
OBJECT:'`',"boulder",(04,07) OBJECT:('`',"boulder"),(04,07)
OBJECT:'`',"boulder",(05,07) OBJECT:('`',"boulder"),(05,07)
OBJECT:'`',"boulder",(02,08) OBJECT:('`',"boulder"),(02,08)
OBJECT:'`',"boulder",(05,08) OBJECT:('`',"boulder"),(05,08)
OBJECT:'`',"boulder",(03,09) OBJECT:('`',"boulder"),(03,09)
OBJECT:'`',"boulder",(04,09) OBJECT:('`',"boulder"),(04,09)
OBJECT:'`',"boulder",(03,10) OBJECT:('`',"boulder"),(03,10)
OBJECT:'`',"boulder",(05,10) OBJECT:('`',"boulder"),(05,10)
OBJECT:'`',"boulder",(06,12) OBJECT:('`',"boulder"),(06,12)
# #
OBJECT:'`',"boulder",(07,14) OBJECT:('`',"boulder"),(07,14)
# #
OBJECT:'`',"boulder",(11,05) OBJECT:('`',"boulder"),(11,05)
OBJECT:'`',"boulder",(12,06) OBJECT:('`',"boulder"),(12,06)
OBJECT:'`',"boulder",(10,07) OBJECT:('`',"boulder"),(10,07)
OBJECT:'`',"boulder",(11,07) OBJECT:('`',"boulder"),(11,07)
OBJECT:'`',"boulder",(10,08) OBJECT:('`',"boulder"),(10,08)
OBJECT:'`',"boulder",(12,09) OBJECT:('`',"boulder"),(12,09)
OBJECT:'`',"boulder",(11,10) OBJECT:('`',"boulder"),(11,10)
# Traps # Traps
TRAP:"hole",(05,01) TRAP:"hole",(05,01)
@@ -604,22 +612,26 @@ TRAP:"hole",(20,01)
TRAP:"hole",(21,01) TRAP:"hole",(21,01)
TRAP:"hole",(22,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 # Random objects
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'%',random,random OBJECT:'%',random
OBJECT:'=',random,random OBJECT:'=',random
OBJECT:'/',random,random OBJECT:'/',random
# Rewards # Rewards
DOOR:locked,(23,12) DOOR:locked,(23,12)
DOOR:closed,(17,10) DOOR:closed,(17,10)
DOOR:closed,(17,12) DOOR:closed,(17,12)
DOOR:closed,(17,14) DOOR:closed,(17,14)
REGION:(18,09,22,15),lit,"zoo",filled,true REGION:(18,09,22,15),lit,"zoo",filled,irregular
OBJECT:'"',"amulet of reflection",place[0] IF [50%] {
ENGRAVING:place[0],burn,"Elbereth" OBJECT:('(',"bag of holding"),$place[0]
} ELSE {
OBJECT:('"',"amulet of reflection"),$place[0]
}
ENGRAVING:$place[0],burn,"Elbereth"
+54 -50
View File
@@ -6,7 +6,7 @@
# #
# Upper stage of Vlad's tower # Upper stage of Vlad's tower
MAZE:"tower1",' ' MAZE:"tower1",' '
FLAGS: noteleport,hardfloor FLAGS: noteleport,hardfloor,solidify
GEOMETRY:half-left,center GEOMETRY:half-left,center
MAP MAP
--- --- --- --- --- ---
@@ -23,13 +23,13 @@ MAP
ENDMAP ENDMAP
LADDER:(11,05),down LADDER:(11,05),down
# The lord and his court # The lord and his court
MONSTER:'V',"Vlad the Impaler",(06,05) MONSTER:('V',"Vlad the Impaler"),(06,05)
MONSTER:'V',random,(03,09) MONSTER:'V',(03,09)
MONSTER:'V',random,(07,09) MONSTER:'V',(07,09)
MONSTER:'V',random,(11,09) MONSTER:'V',(11,09)
MONSTER:'V',random,(03,01) MONSTER:'V',(03,01)
MONSTER:'V',random,(07,01) MONSTER:'V',(07,01)
MONSTER:'V',random,(11,01) MONSTER:'V',(11,01)
# The doors # The doors
DOOR:closed,(08,03) DOOR:closed,(08,03)
DOOR:closed,(10,03) DOOR:closed,(10,03)
@@ -39,20 +39,20 @@ DOOR:locked,(08,07)
DOOR:locked,(10,07) DOOR:locked,(10,07)
DOOR:closed,(03,06) DOOR:closed,(03,06)
# treasures # treasures
OBJECT:'(',"chest",(07,05) OBJECT:('(',"chest"),(07,05)
OBJECT:'(',"chest",(03,09) OBJECT:('(',"chest"),(03,09)
OBJECT:'(',"chest",(07,09) OBJECT:('(',"chest"),(07,09)
OBJECT:'(',"chest",(11,09) OBJECT:('(',"chest"),(11,09)
OBJECT:'(',"chest",(03,01) OBJECT:('(',"chest"),(03,01)
OBJECT:'(',"chest",(07,01) OBJECT:('(',"chest"),(07,01)
OBJECT:'(',"chest",(11,01) OBJECT:('(',"chest"),(11,01)
# We have to protect the tower against outside attacks # We have to protect the tower against outside attacks
NON_DIGGABLE:(00,00,14,10) NON_DIGGABLE:(00,00,14,10)
# Intermediate stage of Vlad's tower # Intermediate stage of Vlad's tower
MAZE:"tower2",' ' MAZE:"tower2",' '
FLAGS: noteleport,hardfloor FLAGS: noteleport,hardfloor,solidify
GEOMETRY:half-left,center GEOMETRY:half-left,center
MAP MAP
--- --- --- --- --- ---
@@ -68,31 +68,34 @@ MAP
--- --- --- --- --- ---
ENDMAP ENDMAP
# Random places are the 10 niches # Random places are the 10 niches
RANDOM_PLACES:(03,01),(07,01),(11,01),(01,03),(13,03), $place = { (03,01),(07,01),(11,01),(01,03),(13,03),
(01,07),(13,07),(03,09),(07,09),(11,09) (01,07),(13,07),(03,09),(07,09),(11,09) }
SHUFFLE: $place
LADDER:(11,05),up LADDER:(11,05),up
LADDER:(03,07),down LADDER:(03,07),down
DOOR:locked,(10,04) DOOR:locked,(10,04)
DOOR:locked,(09,07) DOOR:locked,(09,07)
MONSTER:'&',random,place[0] MONSTER:'&',$place[0]
MONSTER:'&',random,place[1] MONSTER:'&',$place[1]
MONSTER:'d',"hell hound pup",place[2] MONSTER:('d',"hell hound pup"),$place[2]
MONSTER:'d',"hell hound pup",place[3] MONSTER:('d',"hell hound pup"),$place[3]
MONSTER:'d',"winter wolf",place[4] MONSTER:('d',"winter wolf"),$place[4]
CONTAINER:'(',"chest",place[5] CONTAINER:('(',"chest"),$place[5] {
OBJECT:'"',"amulet of life saving",contained OBJECT:('"',"amulet of life saving")
CONTAINER:'(',"chest",place[6] }
OBJECT:'"',"amulet of strangulation",contained CONTAINER:('(',"chest"),$place[6] {
OBJECT:'[',"water walking boots",place[7] OBJECT:('"',"amulet of strangulation")
OBJECT:'[',"crystal plate mail",place[8] }
OBJECT:'+',"invisibility",place[9] OBJECT:('[',"water walking boots"),$place[7]
OBJECT:('[',"crystal plate mail"),$place[8]
OBJECT:('+',"invisibility"),$place[9]
# Walls in the tower are non diggable # Walls in the tower are non diggable
NON_DIGGABLE:(00,00,14,10) NON_DIGGABLE:(00,00,14,10)
# Bottom most stage of Vlad's tower # Bottom most stage of Vlad's tower
MAZE:"tower3",' ' MAZE:"tower3",' '
FLAGS: noteleport,hardfloor FLAGS: noteleport,hardfloor,solidify
GEOMETRY:half-left,center GEOMETRY:half-left,center
MAP MAP
--- --- --- --- --- ---
@@ -110,29 +113,30 @@ MAP
--------------- ---------------
ENDMAP ENDMAP
# Random places are the 10 niches # Random places are the 10 niches
RANDOM_PLACES:(05,01),(09,01),(13,01),(03,03),(15,03), $place = { (05,01),(09,01),(13,01),(03,03),(15,03),
(03,07),(15,07),(05,09),(09,09),(13,09) (03,07),(15,07),(05,09),(09,09),(13,09) }
SHUFFLE: $place
BRANCH:(02,05,02,05),(00,00,00,00) BRANCH:(02,05,02,05),(00,00,00,00)
LADDER:(05,07),up LADDER:(05,07),up
# Entry door is, of course, locked # Entry door is, of course, locked
DOOR:locked,(14,05) DOOR:locked,(14,05)
# Let's put a dragon behind the door, just for the fun... # Let's put a dragon behind the door, just for the fun...
MONSTER:'D',random,(13,05) MONSTER:'D',(13,05)
MONSTER:random,random,(12,04) MONSTER:random,(12,04)
MONSTER:random,random,(12,06) MONSTER:random,(12,06)
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
MONSTER:random,random,random MONSTER:random,random
OBJECT:')',"long sword",place[0] OBJECT:(')',"long sword"),$place[0]
TRAP:random,place[0] TRAP:random,$place[0]
OBJECT:'(',"lock pick",place[1] OBJECT:('(',"lock pick"),$place[1]
TRAP:random,place[1] TRAP:random,$place[1]
OBJECT:'[',"elven cloak",place[2] OBJECT:('[',"elven cloak"),$place[2]
TRAP:random,place[2] TRAP:random,$place[2]
OBJECT:'(',"blindfold",place[3] OBJECT:('(',"blindfold"),$place[3]
TRAP:random,place[3] TRAP:random,$place[3]
# Walls in the tower are non diggable # Walls in the tower are non diggable
NON_DIGGABLE:(00,00,18,12) NON_DIGGABLE:(00,00,18,12)
+61 -61
View File
@@ -48,29 +48,29 @@ NON_PASSWALL:(11,00,21,00)
NON_PASSWALL:(11,10,27,12) NON_PASSWALL:(11,10,27,12)
NON_PASSWALL:(21,00,27,10) NON_PASSWALL:(21,00,27,10)
# The wizard and his guards # The wizard and his guards
MONSTER:'@',"Wizard of Yendor",(16,05),asleep MONSTER:('@',"Wizard of Yendor"),(16,05),asleep
MONSTER:'d',"hell hound",(15,05) MONSTER:('d',"hell hound"),(15,05)
MONSTER:'V',"vampire lord",(17,05) MONSTER:('V',"vampire lord"),(17,05)
# The local treasure # The local treasure
OBJECT:'+',"Book of the Dead",(16,05) OBJECT:('+',"Book of the Dead"),(16,05)
# Surrounding terror # Surrounding terror
MONSTER:';',"kraken",(14,02) MONSTER:(';',"kraken"),(14,02)
MONSTER:';',"giant eel",(17,02) MONSTER:(';',"giant eel"),(17,02)
MONSTER:';',"kraken",(13,04) MONSTER:(';',"kraken"),(13,04)
MONSTER:';',"giant eel",(13,06) MONSTER:(';',"giant eel"),(13,06)
MONSTER:';',"kraken",(19,04) MONSTER:(';',"kraken"),(19,04)
MONSTER:';',"giant eel",(19,06) MONSTER:(';',"giant eel"),(19,06)
MONSTER:';',"kraken",(15,08) MONSTER:(';',"kraken"),(15,08)
MONSTER:';',"giant eel",(17,08) MONSTER:(';',"giant eel"),(17,08)
MONSTER:';',"piranha",(15,02) MONSTER:(';',"piranha"),(15,02)
MONSTER:';',"piranha",(19,08) MONSTER:(';',"piranha"),(19,08)
# Random monsters # Random monsters
MONSTER:'D',random,random MONSTER:'D',random
MONSTER:'H',random,random MONSTER:'H',random
MONSTER:'&',random,random MONSTER:'&',random
MONSTER:'&',random,random MONSTER:'&',random
MONSTER:'&',random,random MONSTER:'&',random
MONSTER:'&',random,random MONSTER:'&',random
# And to make things a little harder. # And to make things a little harder.
TRAP:"board",(16,04) TRAP:"board",(16,04)
TRAP:"board",(16,06) TRAP:"board",(16,06)
@@ -82,14 +82,14 @@ TRAP:"sleep gas",random
TRAP:"anti magic",random TRAP:"anti magic",random
TRAP:"magic",random TRAP:"magic",random
# Some random loot. # Some random loot.
OBJECT:'*',"ruby",random OBJECT:('*',"ruby"),random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'+',random,random OBJECT:'+',random
OBJECT:'+',random,random OBJECT:'+',random
OBJECT:'+',random,random OBJECT:'+',random
# The middle wizard level. # The middle wizard level.
@@ -136,13 +136,13 @@ TRAP:"sleep gas",random
TRAP:"anti magic",random TRAP:"anti magic",random
TRAP:"magic",random TRAP:"magic",random
# Some random loot. # Some random loot.
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'+',random,random OBJECT:'+',random
# treasures # treasures
OBJECT:'"',random,(04,06) OBJECT:'"',(04,06)
# The bottom wizard level. # The bottom wizard level.
@@ -191,33 +191,33 @@ NON_PASSWALL:(06,00,27,02)
NON_PASSWALL:(16,02,27,12) NON_PASSWALL:(16,02,27,12)
NON_PASSWALL:(06,12,16,12) NON_PASSWALL:(06,12,16,12)
# #
MONSTER:'L',random,(10,07) MONSTER:'L',(10,07)
MONSTER:'V',"vampire lord",(12,07) MONSTER:('V',"vampire lord"),(12,07)
# Some surrounding horrors # Some surrounding horrors
MONSTER:';',"kraken",(08,05) MONSTER:(';',"kraken"),(08,05)
MONSTER:';',"giant eel",(08,08) MONSTER:(';',"giant eel"),(08,08)
MONSTER:';',"kraken",(14,05) MONSTER:(';',"kraken"),(14,05)
MONSTER:';',"giant eel",(14,08) MONSTER:(';',"giant eel"),(14,08)
# Other monsters # Other monsters
MONSTER:'L',random,random MONSTER:'L',random
MONSTER:'D',random,random MONSTER:'D',random
MONSTER:'D',random,(26,09) MONSTER:'D',(26,09)
MONSTER:'&',random,random MONSTER:'&',random
MONSTER:'&',random,random MONSTER:'&',random
MONSTER:'&',random,random MONSTER:'&',random
# And to make things a little harder. # And to make things a little harder.
TRAP:"board",(10,07) TRAP:"board",(10,07)
TRAP:"board",(12,07) TRAP:"board",(12,07)
TRAP:"board",(11,06) TRAP:"board",(11,06)
TRAP:"board",(11,08) TRAP:"board",(11,08)
# Some loot # Some loot
OBJECT:')',random,random OBJECT:')',random
OBJECT:'!',random,random OBJECT:'!',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'?',random,random OBJECT:'?',random
OBJECT:'(',random,random OBJECT:'(',random
# treasures # treasures
OBJECT:'"',random,(11,07) OBJECT:'"',(11,07)
# The former decoy wizard levels. # 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) TELEPORT_REGION:levregion(01,00,79,20),(2,2,6,6)
PORTAL:(4,4,4,4),(0,0,0,0),"wizard3" PORTAL:(4,4,4,4),(0,0,0,0),"wizard3"
MAZEWALK:(08,05),east MAZEWALK:(08,05),east
REGION:(04,03,06,06),unlit,"ordinary",unfilled,true REGION:(04,03,06,06),unlit,"ordinary",unfilled,irregular
MONSTER:'L',random,(04,04) MONSTER:'L',(04,04)
MONSTER:'V',"vampire lord",(03,04) MONSTER:('V',"vampire lord"),(03,04)
MONSTER:';',"kraken",(06,06) MONSTER:(';',"kraken"),(06,06)
# And to make things a little harder. # And to make things a little harder.
TRAP:"board",(04,03) TRAP:"board",(04,03)
TRAP:"board",(04,05) 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) BRANCH:levregion(01,00,79,20),(0,0,8,7)
TELEPORT_REGION:levregion(01,00,79,20),(2,2,6,6) TELEPORT_REGION:levregion(01,00,79,20),(2,2,6,6)
MAZEWALK:(08,05),east MAZEWALK:(08,05),east
REGION:(04,03,06,06),unlit,"ordinary",unfilled,true REGION:(04,03,06,06),unlit,"ordinary",unfilled,irregular
MONSTER:'L',random,(04,04) MONSTER:'L',(04,04)
MONSTER:'V',"vampire lord",(03,04) MONSTER:('V',"vampire lord"),(03,04)
MONSTER:';',"kraken",(06,06) MONSTER:(';',"kraken"),(06,06)
# And to make things a little harder. # And to make things a little harder.
TRAP:"board",(04,03) TRAP:"board",(04,03)
TRAP:"board",(04,05) TRAP:"board",(04,05)
TRAP:"board",(03,04) TRAP:"board",(03,04)
TRAP:"board",(05,04) TRAP:"board",(05,04)
# treasures # treasures
OBJECT:'"',random,(04,04) OBJECT:'"',(04,04)
+4 -4
View File
@@ -1,5 +1,5 @@
*.mn filter=NHtext merge=NHsubst *.mn NHSUBST
*.6 filter=NHtext merge=NHsubst *.6 NHSUBST
fixes.* filter=NHtext merge=NHsubst fixes.* NHSUBST
window.doc filter=NHtext merge=NHsubst window.doc NHSUBST
+176 -49
View File
@@ -1,12 +1,12 @@
.\" $NHDT-Branch$:$NHDT-Revision$ $NHDT-Date$ .\" $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 h0 "NetHack Guidebook
.ds h1 .ds h1
.ds h2 % .ds h2 %
.ds vr "NetHack 3.6 .ds vr "NetHack 3.6
.ds f0 "\*(vr .ds f0 "\*(vr
.ds f1 .ds f1
.ds f2 "March 16, 2015 .ds f2 "March 27, 2015
.\" labeled paragraph start (should be part of tmac.n, but I don't want to .\" labeled paragraph start (should be part of tmac.n, but I don't want to
.\" make changes to that file) .\" make changes to that file)
.\" .PS word .\" .PS word
@@ -710,12 +710,6 @@ the exchange still takes place.
.lp X .lp X
Toggle two-weapon combat, if your character can do it. Also available Toggle two-weapon combat, if your character can do it. Also available
via the ``#twoweapon'' extended command via the ``#twoweapon'' extended command
.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.
.lp ^X .lp ^X
Display basic information about your character. Display basic information about your character.
.lp "" .lp ""
@@ -848,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 Since using this command by accident can cause trouble, there is an
option to make you confirm your intent before praying. It is enabled option to make you confirm your intent before praying. It is enabled
by default, and you can reset the by default, and you can reset the
.op paraniod_confirmation .op paranoid_confirmation
option to disable it. option to disable it.
.lp #quit .lp #quit
Quit the program without saving your game. Quit the program without saving your game.
@@ -856,7 +850,7 @@ Quit the program without saving your game.
Since using this command by accident would throw away the current 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 you are asked to confirm your intent before quitting. By default a
response of 'y' acknowledges that intent. You can set the response of 'y' acknowledges that intent. You can set the
.op paraniod_confirmation .op paranoid_confirmation
option to require a response of "yes" instead. option to require a response of "yes" instead.
.lp #ride .lp #ride
Ride (or stop riding) a monster. Ride (or stop riding) a monster.
@@ -1138,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 moving into its location, you'll be asked to confirm your intent. By
default an answer of 'y' acknowledges that intent, default an answer of 'y' acknowledges that intent,
which can be error prone if you're using 'y' to move. You can set the 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. option to require a response of "yes" instead.
.pg .pg
If you can't see a monster (if it is invisible, or if you are blinded), If you can't see a monster (if it is invisible, or if you are blinded),
@@ -1927,6 +1921,8 @@ quality of the weapon; you are free to manually fill your quiver or quiver sack
or make ready or make ready
with the `Q' command instead. If no weapon is found or the option is with the `Q' command instead. If no weapon is found or the option is
false, the `t' (throw) command is executed instead. (default false) false, the `t' (throw) command is executed instead. (default false)
.lp blind
Start the character permanently blind. (default false)
.lp bones .lp bones
Allow saving and loading bones files. (default true) Allow saving and loading bones files. (default true)
.lp boulder .lp boulder
@@ -2053,6 +2049,11 @@ Enable mail delivery during the game (default on).
.lp "male " .lp "male "
An obsolete synonym for ``gender:male''. An obsolete synonym for ``gender:male''.
Cannot be set with the `O' command. 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 .lp menustyle
Controls the interface used when you need to choose various objects (in Controls the interface used when you need to choose various objects (in
response to the Drop command, for instance). The value specified should response to the Drop command, for instance). The value specified should
@@ -2098,6 +2099,9 @@ Default '|'.
Menu character accelerator to goto the next menu page. Menu character accelerator to goto the next menu page.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
Default '>'. 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 .lp menu_previous_page
Menu character accelerator to goto the previous menu page. Menu character accelerator to goto the previous menu page.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
@@ -2144,6 +2148,8 @@ Cannot be set with the `O' command.
Read the NetHack news file, if present (default on). Read the NetHack news file, if present (default on).
Since the news is shown at the beginning of the game, there's no point Since the news is shown at the beginning of the game, there's no point
in setting this with the `O' command. in setting this with the `O' command.
.lp nudist
Start the character with no armor (default false).
.lp "null " .lp "null "
Send padding nulls to the terminal (default on). Send padding nulls to the terminal (default on).
.lp number_pad .lp number_pad
@@ -2170,7 +2176,7 @@ is the same as specifying 0.
(Settings 2 and 4 are for compatibility with MSDOS or old PC Hack; (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' in addition to the different behavior for `5', `Alt-5' acts as `G'
and `Alt-0' acts as `I'. 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.) location of the `y' and `z' keys swapped.)
When moving by numbers, to enter a count prefix for those commands When moving by numbers, to enter a count prefix for those commands
which accept one (such as ``12s'' to search twelve times), precede it which accept one (such as ``12s'' to search twelve times), precede it
@@ -2454,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. Specify the preferred height of each tile in a tile capable port.
.lp tile_width .lp tile_width
Specify the preferred width of each tile in a tile capable port 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 .lp use_inverse
NetHack should display inverse when the game specifies it. NetHack should display inverse when the game specifies it.
.lp vary_msgcount .lp vary_msgcount
@@ -2599,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 The last example results in the exclusion of items known to be cursed from
autopickup. autopickup.
.hn 2 .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 Configuring User Sounds
.pg .pg
Some platforms allow you to define sound files to be played when a message Some platforms allow you to define sound files to be played when a message
@@ -2917,6 +2975,10 @@ SHELLERS
A list of users who are allowed to use the shell escape command (!). The A list of users who are allowed to use the shell escape command (!). The
syntax is the same as WIZARDS. syntax is the same as WIZARDS.
.lp .lp
EXPLORERS
A list of users who are allowed to use the explore mode. The
syntax is the same as WIZARDS.
.lp
MAXPLAYERS MAXPLAYERS
Limit the maximum number of games that can be running at the same time. Limit the maximum number of games that can be running at the same time.
.lp .lp
@@ -2989,7 +3051,7 @@ command-line switch or with the
.op playmode:explore .op playmode:explore
option. The other is to issue the ``#exploremode'' extended command while option. The other is to issue the ``#exploremode'' extended command while
already playing the game. Starting a new game in explore mode provides your 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' character with a wand of wishing in initial inventory; switching
during play does not. The other benefits of explore mode are left for during play does not. The other benefits of explore mode are left for
the trepid reader to discover. the trepid reader to discover.
.pg .pg
@@ -3157,7 +3219,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 that constantly growing bug list, 3.3 proved stable enough to last for
more than a year and a half. more than a year and a half.
.pg .pg
The 3.5 development team initially consisted of The 3.4 development team initially consisted of
\fBMichael Allison\fP, \fBKen Arromdee\fP, \fBMichael Allison\fP, \fBKen Arromdee\fP,
\fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBKevin Hugo\fP, \fBKen Lorber\fP, \fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBKevin Hugo\fP, \fBKen Lorber\fP,
\fBDean Luick\fP, \fBPat Rankin\fP, \fBMike Stephenson\fP, \fBDean Luick\fP, \fBPat Rankin\fP, \fBMike Stephenson\fP,
@@ -3167,16 +3229,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 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: well as supporting ports on the different platforms that NetHack runs on:
.pg .pg
\fBPat Rankin\fP maintained 3.5 for VMS. \fBPat Rankin\fP maintained 3.4 for VMS.
.pg .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. and \fBYitzhak Sapir\fP provided encouragement.
.pg .pg
\fBDean Luick\fP, \fBMark Modrall\fP, and \fBKevin Hugo\fP maintained and enhanced the \fBDean Luick\fP, \fBMark Modrall\fP, and \fBKevin Hugo\fP maintained and enhanced the
Macintosh port of 3.4. Macintosh port of 3.4.
.pg .pg
\fBMichael Allison\fP, \fBDavid Cohrs\fP, \fBAlex Kompel\fP, \fBDion Nicolaas\fP, and \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 contributed a new graphical interface for the Windows port.
\fBAlex Kompel\fP also contributed a Windows CE port for 3.4.1. \fBAlex Kompel\fP also contributed a Windows CE port for 3.4.1.
.pg .pg
@@ -3186,13 +3248,77 @@ early 2006. A great many thanks to Ron for keeping NetHack alive on OS/2
all these years. all these years.
.pg .pg
\fBJanne Salmijarvi\fP and \fBTeemu Suikki\fP maintained and \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. it for 3.3.1.
.pg .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. resurrected it for 3.3.1.
.pg .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/. 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
- - - - - - - - - - - - - - - - - - - -
.pg .pg
@@ -3205,11 +3331,11 @@ in this, the list of Dungeoneers:
center; center;
c c c. c c c.
.\"TABLE_START .\"TABLE_START
Adam Aronow Izchak Miller Mike Stephenson Adam Aronow J. Ali Harlow Mike Stephenson
Alex Kompel J. Ali Harlow Norm Meluch Alex Kompel Janet Walz Norm Meluch
Andreas Dorn Janet Walz Olaf Seibert Andreas Dorn Janne Salmijarvi Olaf Seibert
Andy Church Janne Salmijarvi Pasi Kallinen Andy Church Jean-Christophe Collet Pasi Kallinen
Andy Swanson Jean-Christophe Collet Pat Rankin Andy Swanson Jeff Bailey Pat Rankin
Ari Huttunen Jochen Erwied Paul Winner Ari Huttunen Jochen Erwied Paul Winner
Barton House John Kallen Pierre Martineau Barton House John Kallen Pierre Martineau
Benson I. Margulies John Rupley Ralf Brown Benson I. Margulies John Rupley Ralf Brown
@@ -3218,31 +3344,32 @@ Boudewijn Waijers Johnny Lee Richard Addison
Bruce Cox Jon W{tte Richard Beigel Bruce Cox Jon W{tte Richard Beigel
Bruce Holloway Jonathan Handler Richard P. Hughey Bruce Holloway Jonathan Handler Richard P. Hughey
Bruce Mewborne Joshua Delahunty Rob Menke Bruce Mewborne Joshua Delahunty Rob Menke
Carl Schelin Keizo Yamamoto Robin Johnson Carl Schelin Keizo Yamamoto Robin Bandy
Chris Russo Ken Arnold Roderick Schertler Chris Russo Ken Arnold Robin Johnson
David Cohrs Ken Arromdee Roland McGrath David Cohrs Ken Arromdee Roderick Schertler
David Damerell Ken Lorber Ron Van Iwaarden David Damerell Ken Lorber Roland McGrath
David Gentzel Ken Washikita Ronnen Miller David Gentzel Ken Washikita Ron Van Iwaarden
David Hairston Kevin Darcy Ross Brown David Hairston Kevin Darcy Ronnen Miller
Dean Luick Kevin Hugo Sascha Wostmann Dean Luick Kevin Hugo Ross Brown
Del Lamb Kevin Sitze Scott Bigham Del Lamb Kevin Sitze Sascha Wostmann
Derek S. Ray Kevin Smolkowski Scott R. Turner Derek S. Ray Kevin Smolkowski Scott Bigham
Deron Meranda Kevin Sweet Sean Hunt Deron Meranda Kevin Sweet Scott R. Turner
Dion Nicolaas Lars Huttar Stephen Spackman Dion Nicolaas Lars Huttar Sean Hunt
Dylan O'Donnell Leon Arnott Stephen White Dylan O'Donnell Leon Arnott Stephen Spackman
Eric Backus Malcolm Ryan Steve Creps Eric Backus M. Drew Streib Stephen White
Eric Hendrickson Mark Gooderum Steve Linhart Eric Hendrickson Malcolm Ryan Steve Creps
Eric R. Smith Mark Modrall Steve VanDevender Eric R. Smith Mark Gooderum Steve Linhart
Eric S. Raymond Marvin Bressler Teemu Suikki Eric S. Raymond Mark Modrall Steve VanDevender
Erik Andersen Matthew Day Tim Lennan Erik Andersen Marvin Bressler Teemu Suikki
Frederick Roeber Merlyn LeRoy Timo Hakulinen Frederick Roeber Matthew Day Tim Lennan
Gil Neiger Michael Allison Tom Almy Gil Neiger Merlyn LeRoy Timo Hakulinen
Greg Laskin Michael Feir Tom West Greg Laskin Michael Allison Tom Almy
Greg Olson Michael Hamel Warren Cheung Greg Olson Michael Feir Tom West
Gregg Wonderly Michael Sokolov Warwick Allison Gregg Wonderly Michael Hamel Warren Cheung
Hao-yang Wang Mike Engber Yitzhak Sapir Hao-yang Wang Michael Sokolov Warwick Allison
Helge Hafting Mike Gallop Helge Hafting Mike Engber Yitzhak Sapir
Irina Rempt-Drijfhout Mike Passaretti Irina Rempt-Drijfhout Mike Gallop
Izchak Miller Mike Passaretti
.\"TABLE_END Do not delete this line. .\"TABLE_END Do not delete this line.
.TE .TE
+290 -62
View File
@@ -33,7 +33,7 @@
\begin{document} \begin{document}
% %
% input file: guidebook.mn % input file: guidebook.mn
% $Revision: 1.122 $ $Date: 2015/03/16 06:00:00 $ % $Revision: 1.122 $ $Date: 2015/03/27 06:00:00 $
% %
%.ds h0 " %.ds h0 "
%.ds h1 %.ds h2 \% %.ds h1 %.ds h2 \%
@@ -46,7 +46,7 @@
%.au %.au
\author{Eric S. Raymond\\ \author{Eric S. Raymond\\
(Edited and expanded for 3.6)} (Edited and expanded for 3.6)}
\date{March 16, 2015} \date{March 27, 2015}
\maketitle \maketitle
@@ -862,13 +862,8 @@ two-weapon combat. Note that if one of these slots is empty,
the exchange still takes place. the exchange still takes place.
%.lp %.lp
\item[\tb{X}] \item[\tb{X}]
Enter explore (discovery) mode, explained in its own section later.\\ Toggle two-weapon combat, if your character can do it. Also available
%.lp "" via the ``{\tt \#twoweapon}'' extended command
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.
%.lp %.lp
\item[\tb{\^{}X}] \item[\tb{\^{}X}]
Display basic information about your character.\\ 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 You can also set options automatically by placing them in the
``NETHACKOPTIONS'' environment variable or in a configuration file. ``NETHACKOPTIONS'' environment variable or in a configuration file.
Some versions of {\it NetHack\/} also have front-end programs that allow 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 %.hn 2
\subsection*{Using the NETHACKOPTIONS environment variable} \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. `{\tt \verb+\+}' at the end of each line to be continued.
%.pg %.pg
If your copy of the game included the compile time AUTOPICKUP\_EXCEPTIONS Any line starting with ``{\tt AUTOPICKUP\_EXCEPTION=}''
option, then any line starting with ``{\tt AUTOPICKUP\_EXCEPTION=}''
is taken as defining an exception to the ``{\tt pickup\_types}'' option. is taken as defining an exception to the ``{\tt pickup\_types}'' option.
There is a section of this Guidebook that discusses that. 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 with the `Q' command instead. If no weapon is found or the option is
false, the `t' (throw) command is executed instead. (default false) false, the `t' (throw) command is executed instead. (default false)
%.lp %.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}] \item[\ib{boulder}]
Set the character used to display boulders (default is rock class symbol). Set the character used to display boulders (default is rock class symbol).
%.lp %.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 An obsolete synonym for ``{\tt gender:male}''. Cannot be set with the
`{\tt O}' command. `{\tt O}' command.
%.lp %.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}] \item[\ib{menustyle}]
Controls the interface used when you need to choose various objects (in Controls the interface used when you need to choose various objects (in
response to the Drop command, for instance). The value specified should 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. Menu character accelerator to goto the next menu page.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
Default `\verb+>+'. 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}] \item[\ib{menu\_previous\_page}]
Menu character accelerator to goto the previous menu page. Menu character accelerator to goto the previous menu page.
Implemented by the Amiga, Gem and tty ports. Implemented by the Amiga, Gem and tty ports.
Default `\verb+<+'. Default `\verb+<+'.
\item[\ib{menu\_search}] \item[\ib{menu\_search}]
Menu character accelerator to search for a menu item. 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 `:'. Default `:'.
\item[\ib{menu\_select\_all}] \item[\ib{menu\_select\_all}]
Menu character accelerator to select all items in a menu. 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 Since the news is shown at the beginning of the game, there's no point
in setting this with the `{\tt O}' command. in setting this with the `{\tt O}' command.
%.lp %.lp
\item[\ib{nudist}]
Start the character with no armor (default false).
%.lp
\item[\ib{null}] \item[\ib{null}]
Send padding nulls to the terminal (default on). Send padding nulls to the terminal (default on).
%.lp %.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; (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}' in addition to the different behavior for `{\tt 5}', `{\tt Alt-5}' acts as `{\tt G}'
and `{\tt Alt-0}' acts as `{\tt I}'. 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.) location of the `{\tt y}' and `{\tt z}' keys swapped.)
When moving by numbers, to enter a count prefix for those commands 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 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 %.lp
\item[\ib{pickup\_types}] \item[\ib{pickup\_types}]
Specify the object types to be picked up when ``{\it autopickup\/}'' 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 is on. Default is all types. You can use ``{\it autopickup\_exception\/}''
compile time option AUTOPICKUP\_EXCEPTIONS included, configuration file lines to further refine ``{\it autopickup\/}'' behavior.
you may be able to use ``{\it autopickup\_exception\/}'' configuration
file lines to further refine ``{\it autopickup\/}'' behavior.
%.lp %.lp
\item[\ib{pile\_limit}] \item[\ib{pile\_limit}]
When walking across a pile of objects on the floor, threshold at which 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}] \item[\ib{tile\_width}]
Specify the preferred width of each tile in a tile capable port Specify the preferred width of each tile in a tile capable port
%.lp %.lp
\item[\ib{use\_darkgray}]
Use bold black instead of blue for black glyphs (TTY only).
%.lp
\item[\ib{use\_inverse}] \item[\ib{use\_inverse}]
NetHack should display inverse when the game specifies it. NetHack should display inverse when the game specifies it.
%.lp %.lp
@@ -3074,10 +3089,8 @@ Cannot be set with the `{\tt O}' command.
\subsection*{Configuring autopickup exceptions} \subsection*{Configuring autopickup exceptions}
%.pg %.pg
There is a compile time option called AUTOPICKUP_EXCEPTIONS. You can further refine the behavior of the ``{\tt autopickup}'' option
If your copy of the game was built with that option defined, you can beyond what is available through the ``{\tt pickup\_types}'' option.
further refine the behavior of the ``{\tt autopickup}'' option beyond
what is available through the ``{\tt pickup\_types}'' option.
%.pg %.pg
By placing ``{\tt autopickup\_exception}'' lines in your configuration 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 The last example results in the exclusion of items known to be cursed from
autopickup. 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 %.lp
%.hn 2 %.hn 2
\subsection*{Configuring User Sounds} \subsection*{Configuring User Sounds}
@@ -3459,6 +3537,69 @@ If this is the case, disable the number\_pad option and use the traditional
Rogue-like commands. Rogue-like commands.
\elist \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 %.hn 1
\section{Scoring} \section{Scoring}
@@ -3505,9 +3646,9 @@ There are two ways of enabling explore mode. One is to start the game
with the {\tt -X} with the {\tt -X}
command-line switch or with the command-line switch or with the
{\it playmode:explore\/} {\it playmode:explore\/}
option. The other is to issue the `{\tt X}' command while already option. The other is to issue the `{\tt \#exploremode}' extended command while
playing the game. Starting a new game in explore mode provides your 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' character with a wand of wishing in initial inventory; switching
during play does not. The other benefits of explore mode are left for during play does not. The other benefits of explore mode are left for
the trepid reader to discover. the trepid reader to discover.
@@ -3728,7 +3869,7 @@ more than a year and a half.
%.pg %.pg
\medskip \medskip
The 3.5 development team initially consisted of The 3.4 development team initially consisted of
{\it Michael Allison}, {\it Ken Arromdee}, {\it Michael Allison}, {\it Ken Arromdee},
{\it David Cohrs}, {\it Jessie Collet}, {\it Kevin Hugo}, {\it Ken Lorber}, {\it David Cohrs}, {\it Jessie Collet}, {\it Kevin Hugo}, {\it Ken Lorber},
{\it Dean Luick}, {\it Pat Rankin}, {\it Mike Stephenson}, {\it Dean Luick}, {\it Pat Rankin}, {\it Mike Stephenson},
@@ -3743,11 +3884,11 @@ runs on:
%.pg %.pg
\medskip \medskip
\nd{\it Pat Rankin} maintained 3.5 for VMS. \nd{\it Pat Rankin} maintained 3.4 for VMS.
%.pg %.pg
\medskip \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. {\it Paul Winner} and {\it Yitzhak Sapir} provided encouragement.
%.pg %.pg
@@ -3758,7 +3899,7 @@ enhanced the Macintosh port of 3.4.
%.pg %.pg
\medskip \medskip
\nd {\it Michael Allison}, {\it David Cohrs}, {\it Alex Kompel}, {\it Dion Nicolaas}, and \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} contributed a new graphical interface for the Windows port.
{\it Alex Kompel} also contributed a Windows CE port for 3.4.1. {\it Alex Kompel} also contributed a Windows CE port for 3.4.1.
@@ -3772,23 +3913,109 @@ all these years.
%.pg %.pg
\medskip \medskip
\nd {\it Janne Salmij\"{a}rvi} and {\it Teemu Suikki} maintained \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. it for 3.3.1.
%.pg %.pg
\medskip \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. resurrected it for 3.3.1.
%.pg %.pg
\medskip \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 {\catcode`\#=11
\special{html:<a href="http://www.nethack.org/">}} \special{html:<a href="http://www.nethack.org/">}}
http:{\tt /}{\tt /}www.nethack.org{\tt /}. http:{\tt /}{\tt /}www.nethack.org{\tt /}.
{\catcode`\#=11 {\catcode`\#=11
\special{html:</a>}} \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 %.hn 3
\subsection*{Dungeoneers} \subsection*{Dungeoneers}
\bigskip \bigskip
@@ -3801,11 +4028,11 @@ in this, the list of Dungeoneers:
\begin{center} \begin{center}
\begin{tabular}{lll} \begin{tabular}{lll}
%TABLE_START %TABLE_START
Adam Aronow & Izchak Miller & Mike Stephenson\\ Adam Aronow & J. Ali Harlow & Mike Stephenson\\
Alex Kompel & J. Ali Harlow & Norm Meluch\\ Alex Kompel & Janet Walz & Norm Meluch\\
Andreas Dorn & Janet Walz & Olaf Seibert\\ Andreas Dorn & Janne Salmij\"{a}rvi & Olaf Seibert\\
Andy Church & Janne Salmij\"{a}rvi & Pasi Kallinen\\ Andy Church & Jean-Christophe Collet & Pasi Kallinen\\
Andy Swanson & Jean-Christophe Collet & Pat Rankin\\ Andy Swanson & Jeff Bailey & Pat Rankin\\
Ari Huttunen & Jochen Erwied & Paul Winner\\ Ari Huttunen & Jochen Erwied & Paul Winner\\
Barton House & John Kallen & Pierre Martineau\\ Barton House & John Kallen & Pierre Martineau\\
Benson I. Margulies & John Rupley & Ralf Brown\\ Benson I. Margulies & John Rupley & Ralf Brown\\
@@ -3814,31 +4041,32 @@ Boudewijn Waijers & Johnny Lee & Richard Addison\\
Bruce Cox & Jon W\{tte & Richard Beigel\\ Bruce Cox & Jon W\{tte & Richard Beigel\\
Bruce Holloway & Jonathan Handler & Richard P. Hughey\\ Bruce Holloway & Jonathan Handler & Richard P. Hughey\\
Bruce Mewborne & Joshua Delahunty & Rob Menke\\ Bruce Mewborne & Joshua Delahunty & Rob Menke\\
Carl Schelin & Keizo Yamamoto & Robin Johnson\\ Carl Schelin & Keizo Yamamoto & Robin Bandy\\
Chris Russo & Ken Arnold & Roderick Schertler\\ Chris Russo & Ken Arnold & Robin Johnson\\
David Cohrs & Ken Arromdee & Roland McGrath\\ David Cohrs & Ken Arromdee & Roderick Schertler\\
David Damerell & Ken Lorber & Ron Van Iwaarden\\ David Damerell & Ken Lorber & Roland McGrath\\
David Gentzel & Ken Washikita & Ronnen Miller\\ David Gentzel & Ken Washikita & Ron Van Iwaarden\\
David Hairston & Kevin Darcy & Ross Brown\\ David Hairston & Kevin Darcy & Ronnen Miller\\
Dean Luick & Kevin Hugo & Sascha Wostmann\\ Dean Luick & Kevin Hugo & Ross Brown\\
Del Lamb & Kevin Sitze & Scott Bigham\\ Del Lamb & Kevin Sitze & Sascha Wostmann\\
Derek S. Ray & Kevin Smolkowski & Scott R. Turner\\ Derek S. Ray & Kevin Smolkowski & Scott Bigham\\
Deron Meranda & Kevin Sweet & Sean Hunt\\ Deron Meranda & Kevin Sweet & Scott R. Turner\\
Dion Nicolaas & Lars Huttar & Stephen Spackman\\ Dion Nicolaas & Lars Huttar & Sean Hunt\\
Dylan O'Donnell & Leon Arnott & Stephen White\\ Dylan O'Donnell & Leon Arnott & Stephen Spackman\\
Eric Backus & Malcolm Ryan & Steve Creps\\ Eric Backus & M. Drew Streib & Stephen White\\
Eric Hendrickson & Mark Gooderum & Steve Linhart\\ Eric Hendrickson & Malcolm Ryan & Steve Creps\\
Eric R. Smith & Mark Modrall & Steve VanDevender\\ Eric R. Smith & Mark Gooderum & Steve Linhart\\
Eric S. Raymond & Marvin Bressler & Teemu Suikki\\ Eric S. Raymond & Mark Modrall & Steve VanDevender\\
Erik Andersen & Matthew Day & Tim Lennan\\ Erik Andersen & Marvin Bressler & Teemu Suikki\\
Frederick Roeber & Merlyn LeRoy & Timo Hakulinen\\ Frederick Roeber & Matthew Day & Tim Lennan\\
Gil Neiger & Michael Allison & Tom Almy\\ Gil Neiger & Merlyn LeRoy & Timo Hakulinen\\
Greg Laskin & Michael Feir & Tom West\\ Greg Laskin & Michael Allison & Tom Almy\\
Greg Olson & Michael Hamel & Warren Cheung\\ Greg Olson & Michael Feir & Tom West\\
Gregg Wonderly & Michael Sokolov & Warwick Allison\\ Gregg Wonderly & Michael Hamel & Warren Cheung\\
Hao-yang Wang & Mike Engber & Yitzhak Sapir\\ Hao-yang Wang & Michael Sokolov & Warwick Allison\\
Helge Hafting & Mike Gallop\\ Helge Hafting & Mike Engber & Yitzhak Sapir\\
Irina Rempt-Drijfhout & Mike Passaretti Irina Rempt-Drijfhout & Mike Gallop\\
Izchak Miller & Mike Passaretti
%TABLE_END Do not delete this line. %TABLE_END Do not delete this line.
\end{tabular} \end{tabular}
\end{center} \end{center}
+2313 -1851
View File
File diff suppressed because it is too large Load Diff
+41 -17
View File
@@ -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 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 fix message when pushing a boulder into a pool while riding
plural of "Nazgul" is "Nazgul" not "Nazguls" 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 overrode use of the name
some actions such as eating corpses off the floor didn't check whether hero some actions such as eating corpses off the floor didn't check whether hero
could reach the bottom of a pit 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 a closed one if an intact open door is present
guarantee that hostile djinn released from bottles really are hostile guarantee that hostile djinn released from bottles really are hostile
handle lava when removing or losing water walking boots 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 fractured boulders or statues produced inconsistent object settings on the
resulting rocks resulting rocks
really fix rolling boulder bug C340-18, the previous "fix" reversed the test 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 monsters evading a kick on noteleport levels would cause a "teleports" message
interrupt current activity during certain stages of petrification or vomiting interrupt current activity during certain stages of petrification or vomiting
warning about bad food didn't recognize tin of Medusa meat 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 avoid potential stale pointer use after magic bag explosion
nymphs and monkeys can't steal rings worn under gloves nymphs and monkeys can't steal rings worn under gloves
monkeys can't steal rings worn under cursed weapon 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 resulted in line-of-sight anomalies
unicorn can't catch gems if it is asleep or paralyzed unicorn can't catch gems if it is asleep or paralyzed
fix grammar when choking on gold 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 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" some messages which referred to "mirror" ought to have used "looking glass"
incubi react to mirrors 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 properly handle destruction of equipment carried by monsters hit by
disintegration breath; life-saving retained conferred properties of disintegration breath; life-saving retained conferred properties of
formerly worn items (loss of steed's saddle caused much confusion) 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 exercise or abuse wisdom when rumors get used for random graffiti
don't exercize wisdom twice for each minor oracle consultation 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 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 create_object() created lizard corpses without timers and troll corpses with
their revive timers, then changed the corpsenm field 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 temple donation can recover protection previously stolen by attrcurse attack
even when protection amount is so big that no increment would be given even when protection amount is so big that no increment would be given
meditating monsters stop meditating when affected by something which wakes 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 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 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) 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 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- 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 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 mechanic who hits engulfer while swallowed and blinded
demon lords/princes can't be summoned to the elemental or Astral planes demon lords/princes can't be summoned to the elemental or Astral planes
feedback from casting spell of protection was wrong in some situations 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 attempting to kick beyond map edge performed an out of array bounds memory
access; symptom seen was "show_glyph: bad pos" warning when blind access; symptom seen was "show_glyph: bad pos" warning when blind
attempting to engrave with an empty wand should always use a turn 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 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 hangup save took place during level change; leaving the level by any
means other than triggering the portal would reactivate it 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 potion thrown by monster which hit a long worm's tail gave feedback about
hitting its head hitting its head
implement energy vortex's previously unused energy drain attack 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 jellyfish do not technically have a head
while polymorphed, suppress attribute gain/lose earned by pre-poly exercise while polymorphed, suppress attribute gain/lose earned by pre-poly exercise
wizard mode #monpolycontrol prompting asked about "it" when monster was unseen 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 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 "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 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 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 if life-saved steed became untame, repeated "placing steed onto map?" warnings
would be given as long as the hero remained mounted 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 scrolls given names can be written by assigned name as well as by description
fix writing feedback "the spellbook warps strangely, then turns parchment" fix writing feedback "the spellbook warps strangely, then turns parchment"
make stone artifacts usually resist stone-to-flesh 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 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 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 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 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 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 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 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 fire resistance if it happened to be made of wood, and also burn up
scrolls of fire and spellbook of fireball 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 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 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. 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 to malformed escapes and could potentially be abused to clobber the
stack and launch a buffer overrun attack stack and launch a buffer overrun attack
give alternate message for "<mon> turns to flee" when mon can't move 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 underwater could put hero on top of the water after restore
fix bug preventing stone-resistant monsters w/o gloves from wielding cockatrices fix bug preventing stone-resistant monsters w/o gloves from wielding cockatrices
items conferring life drain resistance were affected by drain life spell 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, 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 save?y, replace?y] for configurations using external file compression
theft of worn armor with wear/unwear delay would interfere with completion of theft of worn armor with wear/unwear delay would interfere with completion of
@@ -872,13 +872,28 @@ data.base "gelatinous cube" and "jack boot" have their own entries
data.base "vampire bat" matched twice; use the bat entry data.base "vampire bat" matched twice; use the bat entry
data.base dagger attribution started with spaces instead of tabs data.base dagger attribution started with spaces instead of tabs
remove 'if (Deaf)' guards preceding You_hear which already checks deafness remove 'if (Deaf)' guards preceding You_hear which already checks deafness
tse a menu to loot multiple containers use a menu to loot multiple containers
do_look() in post-3.4.3 used glyph prior to setting it in pager.c 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 charge for a boulder that fills a pit in shop
abuse wisdom in keeping with Rider eating message abuse wisdom in keeping with Rider eating message
message inconsistency: death message "swallowed <mon> whole" was preceded message inconsistency: death message "swallowed <mon> whole" was preceded
by "You bite into" by "You bite into"
improve the messaging when a monster you can't see is causing an obstruction 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
allow showing legal polearm positions when asked for location to 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 jumping positions when asked for location to jump to
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes
@@ -979,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 add clicklook option to allow looking at things on the display by clicking
right mouse button when floating mouse pointer over them right mouse button when floating mouse pointer over them
Izchak's lighting store is now able to stock oil for your lamp 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, the following actions can now be continued after save/restore: digging,
eating, studying, removing armor eating, studying, removing armor
hero-created and monster-created ice will eventually melt away hero-created and monster-created ice will eventually melt away
@@ -1090,6 +1105,13 @@ pressing @ when cursor positioning moves cursor on top of hero
pressing # when cursor positioning toggles automatic description of features pressing # when cursor positioning toggles automatic description of features
under the cursor under the cursor
cursor positioning ignores uninteresting dungeon features 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 Platform- and/or Interface-Specific New Features
@@ -1110,6 +1132,7 @@ smartphone: added "Type Cmd" command that allows to type arbitrary commands
smartphone: added Q(quiver) command to "Attack" layout smartphone: added Q(quiver) command to "Attack" layout
smartphone: fixed F command to prompt for direction smartphone: fixed F command to prompt for direction
unix,vms: altmeta option to handle terminals which send "ESC c" for Alt+c 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 NetHack Community Patches (or Variation) Included
@@ -1127,6 +1150,7 @@ adopt/adapt/improve the Paranoid_Quit patch; default is paranoid_confirm:pray
paranoid_confirm:Remove always pick from inventory for 'R' and 'T' paranoid_confirm:Remove always pick from inventory for 'R' and 'T'
adopt/adapt/improve Dungeon Overview adopt/adapt/improve Dungeon Overview
Aardvark Joe's Extended Logfile Aardvark Joe's Extended Logfile
Michael Deutschmann's use_darkgray
Code Cleanup and Reorganization Code Cleanup and Reorganization
+1
View File
@@ -5,3 +5,4 @@ pm.h
vis_tab.h vis_tab.h
dgn_comp.h dgn_comp.h
lev_comp.h lev_comp.h
tile.h
+18
View File
@@ -7,6 +7,10 @@
#ifndef COLOR_H #ifndef COLOR_H
#define 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 * The color scheme used is tailored for an IBM PC. It consists of the
* standard 8 colors, folowed by their bright counterparts. There are * standard 8 colors, folowed by their bright counterparts. There are
@@ -51,4 +55,18 @@
#define DRAGON_SILVER CLR_BRIGHT_CYAN #define DRAGON_SILVER CLR_BRIGHT_CYAN
#define HI_ZAP CLR_BRIGHT_BLUE #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 */ #endif /* COLOR_H */
+8
View File
@@ -437,6 +437,14 @@ typedef unsigned char uchar;
* bugs left here. * 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_VIA_WINDOWPORT /* re-work of the status line updating process */
#define STATUS_HILITES /* support hilites of status fields */ #define STATUS_HILITES /* support hilites of status fields */
/* #define WINCHAIN*/ /* stacked window systems */ /* #define WINCHAIN*/ /* stacked window systems */
+9
View File
@@ -73,6 +73,11 @@ struct warntype_info {
short speciesidx; /* index of above in mons[] (for save/restore) */ 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 tribute_info { struct tribute_info {
size_t tributesz; /* make it possible to skip this in future */ size_t tributesz; /* make it possible to skip this in future */
boolean enabled; /* Do we have tributes turned on? */ boolean enabled; /* Do we have tributes turned on? */
@@ -111,7 +116,11 @@ struct context_info {
struct book_info spbook; struct book_info spbook;
struct takeoff_info takeoff; struct takeoff_info takeoff;
struct warntype_info warntype; struct warntype_info warntype;
<<<<<<< HEAD
struct tribute_info tribute; struct tribute_info tribute;
=======
struct polearm_info polearm;
>>>>>>> master
}; };
extern NEARDATA struct context_info context; extern NEARDATA struct context_info context;
+1
View File
@@ -28,6 +28,7 @@ E char SAVEP[];
E NEARDATA int bases[MAXOCLASSES]; E NEARDATA int bases[MAXOCLASSES];
E NEARDATA int multi; E NEARDATA int multi;
E const char *multi_reason;
E NEARDATA int nroom; E NEARDATA int nroom;
E NEARDATA int nsubroom; E NEARDATA int nsubroom;
E NEARDATA int occtime; E NEARDATA int occtime;
+11 -4
View File
@@ -276,7 +276,7 @@ E int FDECL(use_pick_axe2, (struct obj *));
E boolean FDECL(mdig_tunnel, (struct monst *)); E boolean FDECL(mdig_tunnel, (struct monst *));
E void FDECL(watch_dig, (struct monst *,XCHAR_P,XCHAR_P,BOOLEAN_P)); E void FDECL(watch_dig, (struct monst *,XCHAR_P,XCHAR_P,BOOLEAN_P));
E void NDECL(zap_dig); 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(bury_objs, (int,int));
E void FDECL(unearth_objs, (int,int)); E void FDECL(unearth_objs, (int,int));
E void FDECL(rot_organic, (ANY_P *, long)); E void FDECL(rot_organic, (ANY_P *, long));
@@ -364,6 +364,7 @@ E void NDECL(heal_legs);
/* ### do_name.c ### */ /* ### do_name.c ### */
E int FDECL(getpos, (coord *,BOOLEAN_P,const char *)); 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(new_mname, (struct monst *,int));
E void FDECL(free_mname, (struct monst *)); E void FDECL(free_mname, (struct monst *));
E void FDECL(new_oname, (struct obj *,int)); E void FDECL(new_oname, (struct obj *,int));
@@ -829,6 +830,7 @@ E char *FDECL(sitoa, (int));
E int FDECL(sgn, (int)); E int FDECL(sgn, (int));
E int FDECL(rounddiv, (long,int)); E int FDECL(rounddiv, (long,int));
E int FDECL(dist2, (int,int,int,int)); E int FDECL(dist2, (int,int,int,int));
E int FDECL(isqrt, (int));
E int FDECL(distmin, (int,int,int,int)); E int FDECL(distmin, (int,int,int,int));
E boolean FDECL(online2, (int,int,int,int)); E boolean FDECL(online2, (int,int,int,int));
E boolean FDECL(pmatch, (const char *,const char *)); E boolean FDECL(pmatch, (const char *,const char *));
@@ -913,7 +915,7 @@ E int NDECL(dopramulet);
E int NDECL(doprtool); E int NDECL(doprtool);
E int NDECL(doprinuse); E int NDECL(doprinuse);
E void FDECL(useupf, (struct obj *,long)); 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(free_invbuf);
E void NDECL(reassign); E void NDECL(reassign);
E int NDECL(doorganize); E int NDECL(doorganize);
@@ -1139,6 +1141,7 @@ E void FDECL(dodoor, (int,int,struct mkroom *));
E void FDECL(mktrap, (int,int,struct mkroom *,coord*)); E void FDECL(mktrap, (int,int,struct mkroom *,coord*));
E void FDECL(mkstairs, (XCHAR_P,XCHAR_P,CHAR_P,struct mkroom *)); E void FDECL(mkstairs, (XCHAR_P,XCHAR_P,CHAR_P,struct mkroom *));
E void NDECL(mkinvokearea); E void NDECL(mkinvokearea);
E void FDECL(mineralize, (int, int, int, int, BOOLEAN_P));
/* ### mkmap.c ### */ /* ### mkmap.c ### */
@@ -1148,7 +1151,7 @@ void FDECL(remove_rooms, (int,int,int,int));
/* ### mkmaze.c ### */ /* ### mkmaze.c ### */
E void FDECL(wallification, (int,int,int,int)); 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(makemaz, (const char *));
E void FDECL(mazexy, (coord *)); E void FDECL(mazexy, (coord *));
E void NDECL(bound_digging); E void NDECL(bound_digging);
@@ -1582,6 +1585,9 @@ E void FDECL(parsesymbols, (char *));
E struct symparse *FDECL(match_sym, (char *)); E struct symparse *FDECL(match_sym, (char *));
E void NDECL(set_playmode); E void NDECL(set_playmode);
E int FDECL(sym_val, (char *)); 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 ### */ /* ### pager.c ### */
@@ -1826,6 +1832,7 @@ E long NDECL(random);
/* ### read.c ### */ /* ### read.c ### */
E void FDECL(learnscroll, (struct obj *)); E void FDECL(learnscroll, (struct obj *));
E char *FDECL(tshirt_text, (struct obj *, char *));
E int NDECL(doread); E int NDECL(doread);
E boolean FDECL(is_chargeable, (struct obj *)); E boolean FDECL(is_chargeable, (struct obj *));
E void FDECL(recharge, (struct obj *,int)); E void FDECL(recharge, (struct obj *,int));
@@ -2629,7 +2636,7 @@ E boolean FDECL(obj_resists, (struct obj *,int,int));
E boolean FDECL(obj_shudders, (struct obj *)); E boolean FDECL(obj_shudders, (struct obj *));
E void FDECL(do_osshock, (struct obj *)); E void FDECL(do_osshock, (struct obj *));
E int FDECL(bhito, (struct obj *,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 int FDECL(zappable, (struct obj *));
E void FDECL(zapnodir, (struct obj *)); E void FDECL(zapnodir, (struct obj *));
E int NDECL(dozap); E int NDECL(dozap);
+4
View File
@@ -189,7 +189,9 @@ struct instance_flags {
boolean deferred_X; /* deferred entry into explore mode */ boolean deferred_X; /* deferred entry into explore mode */
boolean num_pad; /* use numbers for movement commands */ boolean num_pad; /* use numbers for movement commands */
boolean news; /* print news */ 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_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 boolean menu_requested; /* Flag for overloaded use of 'm' prefix
* on some non-move commands */ * on some non-move commands */
boolean renameallowed; /* can change hero name during role selection */ boolean renameallowed; /* can change hero name during role selection */
@@ -199,6 +201,7 @@ struct instance_flags {
boolean rlecomp; /* run-length comp of levels when writing savefile */ boolean rlecomp; /* run-length comp of levels when writing savefile */
uchar num_pad_mode; uchar num_pad_mode;
boolean echo; /* 1 to echo characters */ boolean echo; /* 1 to echo characters */
boolean use_menu_color; /* use color in menus; only if wc_color */
#if 0 #if 0
boolean DECgraphics; /* use DEC VT-xxx extended character set */ boolean DECgraphics; /* use DEC VT-xxx extended character set */
boolean IBMgraphics; /* use IBM extended character set */ boolean IBMgraphics; /* use IBM extended character set */
@@ -293,6 +296,7 @@ struct instance_flags {
boolean wc2_softkeyboard; /* use software keyboard */ boolean wc2_softkeyboard; /* use software keyboard */
boolean wc2_wraptext; /* wrap text */ boolean wc2_wraptext; /* wrap text */
boolean wc2_selectsaved; /* display a menu of user's saved games */ 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 cmdassist; /* provide detailed assistance for some commands */
boolean clicklook; /* allow right-clicking for look */ boolean clicklook; /* allow right-clicking for look */
boolean obsolete; /* obsolete options can point at this, it isn't used */ boolean obsolete; /* obsolete options can point at this, it isn't used */
+2
View File
@@ -13,6 +13,8 @@ struct mkroom {
schar rtype; /* type of room (zoo, throne, etc...) */ schar rtype; /* type of room (zoo, throne, etc...) */
schar orig_rtype; /* same as rtype, but not zeroed later */ schar orig_rtype; /* same as rtype, but not zeroed later */
schar rlit; /* is the room lit ? */ schar rlit; /* is the room lit ? */
schar needfill; /* sp_lev: does the room need filling? */
schar needjoining; /* sp_lev */
schar doorct; /* door count */ schar doorct; /* door count */
schar fdoor; /* index for the first door of the room */ schar fdoor; /* index for the first door of the room */
schar nsubrooms; /* number of subrooms */ schar nsubrooms; /* number of subrooms */
+7
View File
@@ -127,8 +127,15 @@ extern void FDECL(interject, (int));
#define strncmpi(a,b,c) strnicmp(a,b,c) #define strncmpi(a,b,c) strnicmp(a,b,c)
#endif #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 <sys/types.h>
#include <stdlib.h> #include <stdlib.h>
#include <stdio.h>
#ifdef __BORLANDC__ #ifdef __BORLANDC__
#undef randomize #undef randomize
#undef random #undef random
+12 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 obj.h $NHDT-Date: 1426949157 2015/03/21 14:45:57 $ $NHDT-Branch: master $:$NHDT-Revision: 1.36 $ */ /* NetHack 3.5 obj.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
/* NetHack 3.5 obj.h $Date: 2012/01/10 17:47:16 $ $Revision: 1.31 $ */ /* NetHack 3.5 obj.h $Date: 2012/01/10 17:47:16 $ $Revision: 1.31 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -304,6 +304,17 @@ struct obj {
|| (otmp)->otyp == WAX_CANDLE\ || (otmp)->otyp == WAX_CANDLE\
|| (otmp)->otyp == POT_OIL) || (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 */ /* special stones */
#define is_graystone(obj) ((obj)->otyp == LUCKSTONE || \ #define is_graystone(obj) ((obj)->otyp == LUCKSTONE || \
(obj)->otyp == LOADSTONE || \ (obj)->otyp == LOADSTONE || \
+2 -2
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 patchlevel.h $NHDT-Date: 1426948844 2015/03/21 14:40:44 $ $NHDT-Branch: master $:$NHDT-Revision: 1.95 $ */ /* NetHack 3.5 patchlevel.h $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */
/* NetHack 3.5 patchlevel.h $Date: 2012/04/14 08:31:03 $ $Revision: 1.93 $ */ /* NetHack 3.5 patchlevel.h $Date: 2012/04/14 08:31:03 $ $Revision: 1.93 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -14,7 +14,7 @@
* Incrementing EDITLEVEL can be used to force invalidation of old bones * Incrementing EDITLEVEL can be used to force invalidation of old bones
* and save files. * and save files.
*/ */
#define EDITLEVEL 58 #define EDITLEVEL 60
#define COPYRIGHT_BANNER_A \ #define COPYRIGHT_BANNER_A \
"NetHack, Copyright 1985-2015" "NetHack, Copyright 1985-2015"
+14
View File
@@ -291,6 +291,7 @@ extern struct symsetentry symset[NUM_GRAPHICS]; /* from drawing.c */
#define D_CLOSED 4 #define D_CLOSED 4
#define D_LOCKED 8 #define D_LOCKED 8
#define D_TRAPPED 16 #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. * Some altars are considered as shrines, so we need a flag.
@@ -393,6 +394,19 @@ struct rm {
Bitfield(candig,1); /* Exception to Can_dig_down; was a trapdoor */ 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 * 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) * mode describes which parts of a wall are finished (seen as as wall)
+382 -158
View File
@@ -19,92 +19,378 @@
#define MAP_Y_LIM 21 #define MAP_Y_LIM 21
/* Per level flags */ /* Per level flags */
#define NOTELEPORT 1 #define NOTELEPORT 0x00000001L
#define HARDFLOOR 2 #define HARDFLOOR 0x00000002L
#define NOMMAP 4 #define NOMMAP 0x00000004L
#define SHORTSIGHTED 8 #define SHORTSIGHTED 0x00000008L
#define ARBOREAL 16 #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 */ /* different level layout initializers */
#define SP_LEV_ROOMS 1 #define LVLINIT_NONE 0
#define SP_LEV_MAZE 2 #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 * 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 { typedef union str_or_len {
char *str; char *str;
int len; int len;
} Str_or_Len; } Str_or_Len;
typedef struct { typedef struct {
xchar init_style; /* one of LVLINIT_foo */
long flags;
schar filling;
boolean init_present, padding; boolean init_present, padding;
char fg, bg; char fg, bg;
boolean smoothed, joined; boolean smoothed, joined;
xchar lit, walled; xchar lit, walled;
boolean icedpools; /* for ice locations: ICED_POOL vs ICED_MOAT */ boolean icedpools;
} lev_init; } lev_init;
typedef struct {
xchar x, y, mask;
} door;
typedef struct { typedef struct {
xchar wall, pos, secret, mask; xchar wall, pos, secret, mask;
} room_door; } room_door;
typedef struct { typedef struct {
xchar x, y, chance, type; packed_coord coord;
xchar x, y, type;
} trap; } trap;
typedef struct { typedef struct {
Str_or_Len name, appear_as; Str_or_Len name, appear_as;
short id; short id;
aligntyp align; aligntyp align;
xchar x, y, chance, class, appear; packed_coord coord;
xchar x, y, class, appear;
schar peaceful, asleep; schar peaceful, asleep;
short female, invis, cancelled, revived, avenge, fleeing, blinded, paralyzed, stunned, confused;
long seentraps;
short has_invent;
} monster; } monster;
typedef struct { typedef struct {
Str_or_Len name; Str_or_Len name;
int corpsenm; int corpsenm;
short id, spe; short id, spe;
xchar x, y, chance, class, containment; packed_coord coord;
xchar x, y, class, containment;
schar curse_state; schar curse_state;
int quan;
short buried;
short lit;
short eroded, locked, trapped, recharged, invis, greased, broken;
} object; } object;
typedef struct { typedef struct {
packed_coord coord;
xchar x, y; xchar x, y;
aligntyp align; aligntyp align;
xchar shrine; xchar shrine;
} altar; } 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 { typedef struct {
xchar x1, y1, x2, y2; xchar x1, y1, x2, y2;
xchar rtype, rlit, rirreg; xchar rtype, rlit, rirreg;
} region; } 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 */ /* values for rtype are defined in dungeon.h */
typedef struct { typedef struct {
struct { xchar x1, y1, x2, y2; } inarea; struct { xchar x1, y1, x2, y2; } inarea;
@@ -114,116 +400,6 @@ typedef struct {
Str_or_Len rname; Str_or_Len rname;
} lev_region; } 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 { typedef struct {
struct { struct {
xchar room; xchar room;
@@ -232,18 +408,66 @@ typedef struct {
} src, dest; } src, dest;
} corridor; } 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 { typedef struct {
long flags; schar zaligntyp;
lev_init init_lev; schar keep_region;
char nrobjects; schar halign, valign;
char *robjects; char xsize, ysize;
char nrmonst; char **map;
char *rmonst; } mazepart;
xchar nroom;
room **rooms; typedef struct {
xchar ncorr; int opcode;
corridor **corrs; struct opvar *opdat;
} splev; } _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 */ #endif /* SP_LEV_H */
+1
View File
@@ -10,6 +10,7 @@ struct sysopt {
char *support; /* local support contact */ char *support; /* local support contact */
char *recover; /* how to run recover - may be overridden by win port */ char *recover; /* how to run recover - may be overridden by win port */
char *wizards; char *wizards;
char *explorers;
char *shellers; /* like wizards, for ! command (-DSHELL) */ char *shellers; /* like wizards, for ! command (-DSHELL) */
char *debugfiles; /* files to show debugplines in. '*' is all. */ char *debugfiles; /* files to show debugplines in. '*' is all. */
int env_dbgfl; /* 1: debugfiles comes from getenv("DEBUGFILES") int env_dbgfl; /* 1: debugfiles comes from getenv("DEBUGFILES")
+2 -1
View File
@@ -219,7 +219,8 @@ NEARDATA struct window_procs windowprocs;
#define WC2_WRAPTEXT 0x04L /* 03 wrap long lines of text */ #define WC2_WRAPTEXT 0x04L /* 03 wrap long lines of text */
#define WC2_HILITE_STATUS 0x08L /* 04 hilite fields in status */ #define WC2_HILITE_STATUS 0x08L /* 04 hilite fields in status */
#define WC2_SELECTSAVED 0x10L /* 05 saved game selection menu */ #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_LEFT 1
#define ALIGN_RIGHT 2 #define ALIGN_RIGHT 2
+7
View File
@@ -92,6 +92,12 @@ struct u_conduct { /* number of times... */
/* genocides already listed at end of game */ /* 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 ***/ /*** Unified structure containing role information ***/
struct Role { struct Role {
/*** Strings that name various things ***/ /*** Strings that name various things ***/
@@ -330,6 +336,7 @@ struct you {
struct u_event uevent; /* certain events have happened */ struct u_event uevent; /* certain events have happened */
struct u_have uhave; /* you're carrying special objects */ struct u_have uhave; /* you're carrying special objects */
struct u_conduct uconduct; /* KMH, conduct */ struct u_conduct uconduct; /* KMH, conduct */
struct u_roleplay uroleplay;
struct attribs acurr, /* your current attributes (eg. str)*/ struct attribs acurr, /* your current attributes (eg. str)*/
aexe, /* for gain/loss via "exercise" */ aexe, /* for gain/loss via "exercise" */
abon, /* your bonus attributes (eg. str) */ abon, /* your bonus attributes (eg. str) */
+1 -1
View File
@@ -91,7 +91,7 @@
#define Blinded u.uprops[BLINDED].intrinsic #define Blinded u.uprops[BLINDED].intrinsic
#define Blindfolded (ublindf && ublindf->otyp != LENSES) #define Blindfolded (ublindf && ublindf->otyp != LENSES)
/* ...means blind because of a cover */ /* ...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)) !(ublindf && ublindf->oartifact == ART_EYES_OF_THE_OVERWORLD))
/* ...the Eyes operate even when you really are blind /* ...the Eyes operate even when you really are blind
or don't have any eyes */ or don't have any eyes */
+1 -1
View File
@@ -292,7 +292,7 @@ boolean resuming;
} }
restore_attrib(); restore_attrib();
/* underwater and waterlevel vision are done here */ /* underwater and waterlevel vision are done here */
if (Is_waterlevel(&u.uz)) if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz))
movebubbles(); movebubbles();
else if (Underwater) else if (Underwater)
under_water(0); under_water(0);
+134 -29
View File
@@ -20,6 +20,7 @@ STATIC_DCL void FDECL(use_candelabrum, (struct obj *));
STATIC_DCL void FDECL(use_candle, (struct obj **)); STATIC_DCL void FDECL(use_candle, (struct obj **));
STATIC_DCL void FDECL(use_lamp, (struct obj *)); STATIC_DCL void FDECL(use_lamp, (struct obj *));
STATIC_DCL void FDECL(light_cocktail, (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_tinning_kit, (struct obj *));
STATIC_DCL void FDECL(use_figurine, (struct obj **)); STATIC_DCL void FDECL(use_figurine, (struct obj **));
STATIC_DCL void FDECL(use_grease, (struct obj *)); STATIC_DCL void FDECL(use_grease, (struct obj *));
@@ -27,6 +28,7 @@ STATIC_DCL void FDECL(use_trap, (struct obj *));
STATIC_DCL void FDECL(use_stone, (struct obj *)); STATIC_DCL void FDECL(use_stone, (struct obj *));
STATIC_PTR int NDECL(set_trap); /* occupation callback */ STATIC_PTR int NDECL(set_trap); /* occupation callback */
STATIC_DCL int FDECL(use_whip, (struct obj *)); 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_pole, (struct obj *));
STATIC_DCL int FDECL(use_cream_pie, (struct obj *)); STATIC_DCL int FDECL(use_cream_pie, (struct obj *));
STATIC_DCL int FDECL(use_grapple, (struct obj *)); STATIC_DCL int FDECL(use_grapple, (struct obj *));
@@ -736,8 +738,10 @@ struct obj *obj;
pline("Yow! The %s stares back!", mirror); pline("Yow! The %s stares back!", mirror);
else else
pline("Yikes! You've frozen yourself!"); pline("Yikes! You've frozen yourself!");
if (!Hallucination || !rn2(4)) if (!Hallucination || !rn2(4)) {
nomul(-rnd(MAXULEV + 6 - u.ulevel)); nomul(-rnd(MAXULEV + 6 - u.ulevel));
multi_reason = "gazing into a mirror";
}
nomovemsg = 0; /* default, "you can move again" */ nomovemsg = 0; /* default, "you can move again" */
} }
} else if (youmonst.data->mlet == S_VAMPIRE) } else if (youmonst.data->mlet == S_VAMPIRE)
@@ -915,6 +919,7 @@ struct obj **optr;
break; break;
case 2: /* no explanation; it just happens... */ case 2: /* no explanation; it just happens... */
nomovemsg = ""; nomovemsg = "";
multi_reason = NULL;
nomul(-rnd(2)); nomul(-rnd(2));
break; break;
} }
@@ -1357,6 +1362,53 @@ dojump()
return jump(0); 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) && is_valid_jump_pos(x,y, jumping_is_magic, FALSE))
tmp_at(x,y);
}
} else {
tmp_at(DISP_END, 0);
}
}
int int
jump(magic) jump(magic)
int magic; /* 0=Physical, otherwise skill level */ int magic; /* 0=Physical, otherwise skill level */
@@ -1436,24 +1488,12 @@ int magic; /* 0=Physical, otherwise skill level */
pline("Where do you want to jump?"); pline("Where do you want to jump?");
cc.x = u.ux; cc.x = u.ux;
cc.y = u.uy; cc.y = u.uy;
jumping_is_magic = magic;
getpos_sethilite(display_jump_positions);
if (getpos(&cc, TRUE, "the desired position") < 0) if (getpos(&cc, TRUE, "the desired position") < 0)
return 0; /* user pressed ESC */ return 0; /* user pressed ESC */
if (!magic && !(HJumping & ~INTRINSIC) && !EJumping && if (!is_valid_jump_pos(cc.x, cc.y, magic, TRUE)) {
distu(cc.x, cc.y) != 5) { return 0;
/* 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;
} else { } else {
coord uc; coord uc;
int range, temp; int range, temp;
@@ -1508,6 +1548,7 @@ int magic; /* 0=Physical, otherwise skill level */
teleds(cc.x, cc.y, TRUE); teleds(cc.x, cc.y, TRUE);
sokoban_guilt(); sokoban_guilt();
nomul(-1); nomul(-1);
multi_reason = "jumping around";
nomovemsg = ""; nomovemsg = "";
morehungry(rnd(25)); morehungry(rnd(25));
return 1; return 1;
@@ -2531,6 +2572,54 @@ static const char
cant_see_spot[] = "won't hit anything if you can't see that spot.", cant_see_spot[] = "won't hit anything if you can't see that spot.",
cant_reach[] = "can't reach that spot from here."; 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) &&
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 */ /* Distance attacks by pole-weapons */
STATIC_OVL int STATIC_OVL int
use_pole(obj) use_pole(obj)
@@ -2539,6 +2628,7 @@ use_pole(obj)
int res = 0, typ, max_range, min_range, glyph; int res = 0, typ, max_range, min_range, glyph;
coord cc; coord cc;
struct monst *mtmp; struct monst *mtmp;
struct monst *hitm = context.polearm.hitmon;
/* Are you allowed to use the pole? */ /* Are you allowed to use the pole? */
if (u.uswallow) { if (u.uswallow) {
@@ -2551,15 +2641,7 @@ use_pole(obj)
} }
/* assert(obj == uwep); */ /* 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): * Calculate allowable range (pole's reach is always 2 steps):
* unskilled and basic: orthogonal direction, 4..4; * unskilled and basic: orthogonal direction, 4..4;
* skilled: as basic, plus knight's jump position, 4..5; * skilled: as basic, plus knight's jump position, 4..5;
@@ -2579,6 +2661,26 @@ use_pole(obj)
if (typ == P_NONE || P_SKILL(typ) <= P_BASIC) max_range = 4; if (typ == P_NONE || P_SKILL(typ) <= P_BASIC) max_range = 4;
else if (P_SKILL(typ) == P_SKILLED) max_range = 5; else if (P_SKILL(typ) == P_SKILLED) max_range = 5;
else max_range = 8; /* (P_SKILL(typ) >= P_EXPERT) */ 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) { if (distu(cc.x, cc.y) > max_range) {
pline("Too far!"); pline("Too far!");
return (res); return (res);
@@ -2596,11 +2698,13 @@ use_pole(obj)
return res; return res;
} }
context.polearm.hitmon = NULL;
/* Attack the monster there */ /* Attack the monster there */
bhitpos = cc; bhitpos = cc;
if ((mtmp = m_at(bhitpos.x, bhitpos.y)) != (struct monst *)0) { if ((mtmp = m_at(bhitpos.x, bhitpos.y)) != (struct monst *)0) {
if (attack_checks(mtmp, uwep)) return res; if (attack_checks(mtmp, uwep)) return res;
if (overexertion()) return 1; /* burn nutrition; maybe pass out */ if (overexertion()) return 1; /* burn nutrition; maybe pass out */
context.polearm.hitmon = mtmp;
check_caitiff(mtmp); check_caitiff(mtmp);
notonhead = (bhitpos.x != mtmp->mx || bhitpos.y != mtmp->my); notonhead = (bhitpos.x != mtmp->mx || bhitpos.y != mtmp->my);
(void) thitmonst(mtmp, uwep); (void) thitmonst(mtmp, uwep);
@@ -2828,6 +2932,7 @@ do_break_wand(obj)
boolean fillmsg = FALSE; boolean fillmsg = FALSE;
int expltype = EXPL_MAGICAL; int expltype = EXPL_MAGICAL;
char confirm[QBUFSZ], buf[BUFSZ]; 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 ", "?", if (yn(safe_qbuf(confirm, "Are you really sure you want to break ", "?",
obj, yname, ysimple_name, "the wand")) == 'n') obj, yname, ysimple_name, "the wand")) == 'n')
@@ -2836,7 +2941,7 @@ do_break_wand(obj)
if (nohands(youmonst.data)) { if (nohands(youmonst.data)) {
You_cant("break %s without hands!", yname(obj)); You_cant("break %s without hands!", yname(obj));
return 0; 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)); You("don't have the strength to break %s!", yname(obj));
return 0; return 0;
} }
@@ -2974,7 +3079,7 @@ do_break_wand(obj)
/* if (context.botl) bot(); */ /* if (context.botl) bot(); */
} }
if (affects_objects && level.objects[x][y]) { 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 */ if (context.botl) bot(); /* potion effects */
} }
} else { } else {
@@ -2991,7 +3096,7 @@ do_break_wand(obj)
* since it's also used by retouch_equipment() for polyself.) * since it's also used by retouch_equipment() for polyself.)
*/ */
if (affects_objects && level.objects[x][y]) { 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 */ if (context.botl) bot(); /* potion effects */
} }
damage = zapyourself(obj, FALSE); damage = zapyourself(obj, FALSE);
+1
View File
@@ -983,6 +983,7 @@ char *hittee; /* target's name: "you" or mon_nam(mdef) */
resisted = TRUE; resisted = TRUE;
} else { } else {
nomul(-3); nomul(-3);
multi_reason = "being scared stiff";
nomovemsg = ""; nomovemsg = "";
if (magr && magr == u.ustuck && sticks(youmonst.data)) { if (magr && magr == u.ustuck && sticks(youmonst.data)) {
u.ustuck = (struct monst *)0; u.ustuck = (struct monst *)0;
+2
View File
@@ -691,6 +691,8 @@ int propidx; /* special cases can have negative values */
Sprintf(buf, because_of, Sprintf(buf, because_of,
obj->oartifact ? bare_artifactname(obj) : obj->oartifact ? bare_artifactname(obj) :
ysimple_name(obj)); ysimple_name(obj));
else if (propidx == BLINDED && u.uroleplay.blind)
Sprintf(buf, " from birth");
else if (propidx == BLINDED && Blindfolded_only) else if (propidx == BLINDED && Blindfolded_only)
Sprintf(buf, because_of, ysimple_name(ublindf)); Sprintf(buf, because_of, ysimple_name(ublindf));
+1
View File
@@ -597,6 +597,7 @@ getbones()
} }
(void) close(fd); (void) close(fd);
sanitize_engravings(); sanitize_engravings();
u.uroleplay.numbones++;
if(wizard) { if(wizard) {
if(yn("Unlink bones?") == 'n') { if(yn("Unlink bones?") == 'n') {
+13 -8
View File
@@ -509,6 +509,16 @@ enter_explore_mode(VOID_ARGS)
} else if (discover) { } else if (discover) {
You("are already in explore mode."); You("are already in explore mode.");
} else { } 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( pline(
"Beware! From explore mode there will be no return to normal game."); "Beware! From explore mode there will be no return to normal game.");
if (paranoid_query(ParanoidQuit, if (paranoid_query(ParanoidQuit,
@@ -997,11 +1007,8 @@ wiz_levltyp_legend(VOID_ARGS)
STATIC_PTR int STATIC_PTR int
wiz_smell(VOID_ARGS) wiz_smell(VOID_ARGS)
{ {
char out_str[BUFSZ];
struct permonst *pm = 0;
int ans = 0; int ans = 0;
int mndx; /* monster index */ int mndx; /* monster index */
int found; /* count of matching mndxs found */
coord cc; /* screen pos of unknown glyph */ coord cc; /* screen pos of unknown glyph */
int glyph; /* glyph at selected position */ 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."); pline("You can move the cursor to a monster that you want to smell.");
do { do {
/* Reset some variables. */
pm = (struct permonst *)0;
found = 0;
out_str[0] = '\0';
pline("Pick a monster to smell."); pline("Pick a monster to smell.");
ans = getpos(&cc, TRUE, "a monster"); ans = getpos(&cc, TRUE, "a monster");
if (ans < 0 || cc.x < 0) { if (ans < 0 || cc.x < 0) {
@@ -2246,6 +2248,9 @@ int final;
en_win = create_nhwindow(NHW_MENU); en_win = create_nhwindow(NHW_MENU);
putstr(en_win, 0, "Voluntary challenges:"); 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) if (!u.uconduct.food)
enl_msg(You_, "have gone", "went", " without food", ""); enl_msg(You_, "have gone", "went", " without food", "");
/* But beverages are okay */ /* But beverages are okay */
+6 -3
View File
@@ -21,6 +21,7 @@ char *catmore = 0; /* default pager */
NEARDATA int bases[MAXOCLASSES] = DUMMY; NEARDATA int bases[MAXOCLASSES] = DUMMY;
NEARDATA int multi = 0; NEARDATA int multi = 0;
const char *multi_reason = NULL;
NEARDATA int nroom = 0; NEARDATA int nroom = 0;
NEARDATA int nsubroom = 0; NEARDATA int nsubroom = 0;
NEARDATA int occtime = 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 dungeon dungeons[MAXDUNGEON]; /* ini'ed by init_dungeon() */
NEARDATA s_level *sp_levchn; NEARDATA s_level *sp_levchn;
NEARDATA stairway upstair = { 0, 0 }, dnstair = { 0, 0 }; NEARDATA stairway upstair = { 0, 0, { 0,0 }, 0 }, dnstair = { 0, 0, { 0,0 }, 0 };
NEARDATA stairway upladder = { 0, 0 }, dnladder = { 0, 0 }; NEARDATA stairway upladder = { 0, 0, { 0,0 }, 0 }, dnladder = { 0, 0, { 0,0 }, 0 };
NEARDATA stairway sstairs = { 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 updest = { 0, 0, 0, 0, 0, 0, 0, 0 };
NEARDATA dest_area dndest = { 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 }; NEARDATA coord inv_pos = { 0, 0 };
@@ -218,6 +219,8 @@ NEARDATA struct c_color_names c_color_names = {
"white" "white"
}; };
struct menucoloring *menu_colorings = NULL;
const char *c_obj_colors[] = { const char *c_obj_colors[] = {
"black", /* CLR_BLACK */ "black", /* CLR_BLACK */
"red", /* CLR_RED */ "red", /* CLR_RED */
+1
View File
@@ -890,6 +890,7 @@ struct obj *obj;
} }
You("peer into %s...", the(xname(obj))); You("peer into %s...", the(xname(obj)));
nomul(-rnd(10)); nomul(-rnd(10));
multi_reason = "gazing into a crystal ball";
nomovemsg = ""; nomovemsg = "";
if (obj->spe <= 0) if (obj->spe <= 0)
pline_The("vision is unclear."); pline_The("vision is unclear.");
+9 -5
View File
@@ -1023,6 +1023,7 @@ struct obj *obj;
/* you ought to be able to let go; tough luck */ /* you ought to be able to let go; tough luck */
/* (maybe `move_into_trap()' would be better) */ /* (maybe `move_into_trap()' would be better) */
nomul(-d(2,2)); nomul(-d(2,2));
multi_reason = "stuck in a spider web";
nomovemsg = "You pull free."; nomovemsg = "You pull free.";
} else if (lev->typ == IRONBARS) { } else if (lev->typ == IRONBARS) {
pline("Clang!"); pline("Clang!");
@@ -1283,7 +1284,7 @@ zap_dig()
struct monst *mtmp; struct monst *mtmp;
struct obj *otmp; struct obj *otmp;
struct trap *trap_with_u = (struct trap *)0; 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; boolean shopdoor, shopwall, maze_dig, pitdig = FALSE, pitflow = FALSE;
/* /*
@@ -1461,7 +1462,7 @@ zap_dig()
} /* while */ } /* while */
tmp_at(DISP_END,0); /* closing call */ 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); struct trap *ttmp = t_at(flow_x, flow_y);
if (ttmp && (ttmp->ttyp == PIT || ttmp->ttyp == SPIKED_PIT)) { if (ttmp && (ttmp->ttyp == PIT || ttmp->ttyp == SPIKED_PIT)) {
schar filltyp = fillholetyp(ttmp->tx, ttmp->ty, TRUE); schar filltyp = fillholetyp(ttmp->tx, ttmp->ty, TRUE);
@@ -1683,13 +1684,15 @@ buried_ball_to_freedom()
/* move objects from fobj/nexthere lists to buriedobjlist, keeping position */ /* move objects from fobj/nexthere lists to buriedobjlist, keeping position */
/* information */ /* information */
struct obj * struct obj *
bury_an_obj(otmp) bury_an_obj(otmp, dealloced)
struct obj *otmp; struct obj *otmp;
boolean *dealloced;
{ {
struct obj *otmp2; struct obj *otmp2;
boolean under_ice; boolean under_ice;
debugpline1("bury_an_obj: %s", xname(otmp)); debugpline1("bury_an_obj: %s", xname(otmp));
if (dealloced) *dealloced = FALSE;
if (otmp == uball) { if (otmp == uball) {
unpunish(); unpunish();
u.utrap = rn1(50,20); u.utrap = rn1(50,20);
@@ -1720,6 +1723,7 @@ bury_an_obj(otmp)
under_ice = is_ice(otmp->ox, otmp->oy); under_ice = is_ice(otmp->ox, otmp->oy);
if (otmp->otyp == ROCK && !under_ice) { if (otmp->otyp == ROCK && !under_ice) {
/* merges into burying material */ /* merges into burying material */
if (dealloced) *dealloced = TRUE;
obfree(otmp, (struct obj *)0); obfree(otmp, (struct obj *)0);
return(otmp2); return(otmp2);
} }
@@ -1754,7 +1758,7 @@ int x, y;
if(level.objects[x][y] != (struct obj *)0) if(level.objects[x][y] != (struct obj *)0)
debugpline2("bury_objs: at <%d,%d>", x, y); debugpline2("bury_objs: at <%d,%d>", x, y);
for (otmp = level.objects[x][y]; otmp; otmp = otmp2) 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 */ /* don't expect any engravings here, but just in case */
del_engr_at(x, y); del_engr_at(x, y);
@@ -1814,7 +1818,7 @@ long timeout UNUSED;
/* Everything which can be held in a container can also be /* Everything which can be held in a container can also be
buried, so bury_an_obj's use of obj_extract_self insures buried, so bury_an_obj's use of obj_extract_self insures
that Has_contents(obj) will eventually become false. */ 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); obj_extract_self(obj);
obfree(obj, (struct obj *) 0); obfree(obj, (struct obj *) 0);
+2 -1
View File
@@ -1286,7 +1286,7 @@ boolean at_stairs, falling, portal;
} }
/* initial movement of bubbles just before vision_recalc */ /* initial movement of bubbles just before vision_recalc */
if (Is_waterlevel(&u.uz)) if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz))
movebubbles(); movebubbles();
if (level_info[new_ledger].flags & FORGOTTEN) { if (level_info[new_ledger].flags & FORGOTTEN) {
@@ -1402,6 +1402,7 @@ boolean at_stairs, falling, portal;
/* assume this will always return TRUE when changing level */ /* assume this will always return TRUE when changing level */
(void) in_out_region(u.ux, u.uy); (void) in_out_region(u.ux, u.uy);
(void) pickup(1); (void) pickup(1);
context.polearm.hitmon = NULL;
} }
STATIC_OVL void STATIC_OVL void
+30 -1
View File
@@ -25,6 +25,17 @@ nextmbuf()
return bufs[bufidx]; 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() */ /* the response for '?' help request in getpos() */
STATIC_OVL void STATIC_OVL void
getpos_help(force, goal) getpos_help(force, goal)
@@ -41,6 +52,8 @@ const char *goal;
putstr(tmpwin, 0, "Use [HJKL] to move the cursor 8 units at a time."); 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, "Or enter a background symbol (ex. <).");
putstr(tmpwin, 0, "Use @ to move the cursor on yourself."); 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."); putstr(tmpwin, 0, "Use # to toggle automatic description.");
/* disgusting hack; the alternate selection characters work for any /* disgusting hack; the alternate selection characters work for any
getpos call, but they only matter for dowhatis (and doquickwhatis) */ getpos call, but they only matter for dowhatis (and doquickwhatis) */
@@ -69,6 +82,7 @@ const char *goal;
boolean show_goal_msg = FALSE; boolean show_goal_msg = FALSE;
static const char pick_chars[] = ".,;:"; static const char pick_chars[] = ".,;:";
const char *cp; const char *cp;
boolean hilite_state = FALSE;
if (!goal) goal = "desired location"; if (!goal) goal = "desired location";
if (flags.verbose) { if (flags.verbose) {
@@ -92,7 +106,7 @@ const char *goal;
curs(WIN_MAP, cx, cy); curs(WIN_MAP, cx, cy);
flush_screen(0); flush_screen(0);
show_goal_msg = FALSE; show_goal_msg = FALSE;
} else if (auto_msg && !msg_given) { } else if (auto_msg && !msg_given && !hilite_state) {
coord cc; coord cc;
int sym = 0; int sym = 0;
char tmpbuf[BUFSZ]; char tmpbuf[BUFSZ];
@@ -110,6 +124,13 @@ const char *goal;
c = nh_poskey(&tx, &ty, &sidx); 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) if (auto_msg)
msg_given = FALSE; msg_given = FALSE;
@@ -174,6 +195,13 @@ const char *goal;
/* update message window to reflect that we're still targetting */ /* update message window to reflect that we're still targetting */
show_goal_msg = TRUE; show_goal_msg = TRUE;
msg_given = 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 == '#') { } else if (c == '#') {
auto_msg = !auto_msg; auto_msg = !auto_msg;
pline("Automatic description %sis %s.", pline("Automatic description %sis %s.",
@@ -269,6 +297,7 @@ const char *goal;
if (msg_given) clear_nhwindow(WIN_MESSAGE); if (msg_given) clear_nhwindow(WIN_MESSAGE);
ccp->x = cx; ccp->x = cx;
ccp->y = cy; ccp->y = cy;
getpos_hilitefunc = NULL;
return result; return result;
} }
+2
View File
@@ -1407,6 +1407,7 @@ register struct obj *otmp;
if(cursed(otmp)) return(0); if(cursed(otmp)) return(0);
if(delay) { if(delay) {
nomul(delay); nomul(delay);
multi_reason = "disrobing";
if (is_helmet(otmp)) { if (is_helmet(otmp)) {
/* ick... */ /* ick... */
nomovemsg = !strcmp(helm_simple_name(otmp), "hat") ? nomovemsg = !strcmp(helm_simple_name(otmp), "hat") ?
@@ -1664,6 +1665,7 @@ dowear()
delay = -objects[otmp->otyp].oc_delay; delay = -objects[otmp->otyp].oc_delay;
if(delay){ if(delay){
nomul(delay); nomul(delay);
multi_reason = "dressing up";
if(is_boots(otmp)) afternmv = Boots_on; if(is_boots(otmp)) afternmv = Boots_on;
if(is_helmet(otmp)) afternmv = Helmet_on; if(is_helmet(otmp)) afternmv = Helmet_on;
if(is_gloves(otmp)) afternmv = Gloves_on; if(is_gloves(otmp)) afternmv = Gloves_on;
+3 -2
View File
@@ -423,7 +423,7 @@ boolean with_you;
* probably because the level is full. * probably because the level is full.
* Dump the monster's cargo and leave the monster dead. * Dump the monster's cargo and leave the monster dead.
*/ */
struct obj *obj, *corpse; struct obj *obj;
while ((obj = mtmp->minvent) != 0) { while ((obj = mtmp->minvent) != 0) {
obj_extract_self(obj); obj_extract_self(obj);
obj_no_longer_held(obj); obj_no_longer_held(obj);
@@ -437,7 +437,7 @@ boolean with_you;
impossible("Can't find relocated object."); 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); xlocale, ylocale, CORPSTAT_NONE);
mongone(mtmp); mongone(mtmp);
} }
@@ -685,6 +685,7 @@ migrate_to_level(mtmp, tolev, xyloc, cc)
mtmp->mux = new_lev.dnum; mtmp->mux = new_lev.dnum;
mtmp->muy = new_lev.dlevel; mtmp->muy = new_lev.dlevel;
mtmp->mx = mtmp->my = 0; /* this implies migration */ 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 */ /* return quality of food; the lower the better */
+22 -1
View File
@@ -991,7 +991,28 @@ dokick()
exercise(A_DEX, TRUE); exercise(A_DEX, TRUE);
return(1); 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; goto ouch;
if(IS_TREE(maploc->typ)) { if(IS_TREE(maploc->typ)) {
struct obj *treefruit; struct obj *treefruit;
+1
View File
@@ -693,6 +693,7 @@ hurtle(dx, dy, range, verbose)
if(!range || (!dx && !dy) || u.ustuck) return; /* paranoia */ if(!range || (!dx && !dy) || u.ustuck) return; /* paranoia */
nomul(-range); nomul(-range);
multi_reason = "moving through the air";
nomovemsg = ""; /* it just happens */ nomovemsg = ""; /* it just happens */
if (verbose) if (verbose)
You("%s in the opposite direction.", range > 1 ? "hurtle" : "float"); You("%s in the opposite direction.", range > 1 ? "hurtle" : "float");
+6
View File
@@ -962,6 +962,7 @@ register int pm;
/* A pile of gold can't ride. */ /* A pile of gold can't ride. */
if (u.usteed) dismount_steed(DISMOUNT_FELL); if (u.usteed) dismount_steed(DISMOUNT_FELL);
nomul(-tmp); nomul(-tmp);
multi_reason = "pretending to be a pile of gold";
Sprintf(buf, Hallucination ? Sprintf(buf, Hallucination ?
"You suddenly dread being peeled and mimic %s again!" : "You suddenly dread being peeled and mimic %s again!" :
"You now prefer mimicking %s again.", "You now prefer mimicking %s again.",
@@ -1479,6 +1480,7 @@ struct obj *obj;
pline_The("world spins and %s %s.", what, where); pline_The("world spins and %s %s.", what, where);
incr_itimeout(&HDeaf, duration); incr_itimeout(&HDeaf, duration);
nomul(-duration); nomul(-duration);
multi_reason = "unconscious from rotten food";
nomovemsg = "You are conscious again."; nomovemsg = "You are conscious again.";
afternmv = Hear_again; afternmv = Hear_again;
return(1); return(1);
@@ -1572,6 +1574,8 @@ eatcorpse(otmp) /* called when a corpse is selected as food */
} else if ((mnum == PM_COCKATRICE || mnum == PM_CHICKATRICE) && } else if ((mnum == PM_COCKATRICE || mnum == PM_CHICKATRICE) &&
(Stone_resistance || Hallucination)) { (Stone_resistance || Hallucination)) {
pline("This tastes just like chicken!"); pline("This tastes just like chicken!");
} else if (mnum == PM_FLOATING_EYE && u.umonnum == PM_RAVEN) {
You("peck the eyeball with delight.");
} else { } else {
/* [is this right? omnivores end up always disliking the taste] */ /* [is this right? omnivores end up always disliking the taste] */
boolean yummy = (vegan(&mons[mnum]) ? boolean yummy = (vegan(&mons[mnum]) ?
@@ -2677,6 +2681,7 @@ boolean incr;
if (!Levitation) selftouch("Falling, you"); if (!Levitation) selftouch("Falling, you");
incr_itimeout(&HDeaf, duration); incr_itimeout(&HDeaf, duration);
nomul(-duration); nomul(-duration);
multi_reason = "fainted from lack of food";
nomovemsg = "You regain consciousness."; nomovemsg = "You regain consciousness.";
afternmv = unfaint; afternmv = unfaint;
newhs = FAINTED; newhs = FAINTED;
@@ -2853,6 +2858,7 @@ vomit() /* A good idea from David Neves */
else else
make_sick(0L, (char *)0, TRUE, SICK_VOMITABLE); make_sick(0L, (char *)0, TRUE, SICK_VOMITABLE);
nomul(-2); nomul(-2);
multi_reason = "vomiting";
nomovemsg = You_can_move_again; nomovemsg = You_can_move_again;
} }
+6 -1
View File
@@ -465,7 +465,12 @@ int how;
Sprintf(eos(buf), " called %s", MNAME(mtmp)); 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); Strcpy(killer.name, buf);
if (mptr->mlet == S_WRAITH) if (mptr->mlet == S_WRAITH)
u.ugrave_arise = PM_WRAITH; u.ugrave_arise = PM_WRAITH;
+5
View File
@@ -2184,6 +2184,9 @@ int src;
} else if (src == SET_IN_SYS && match_varname(buf, "SHELLERS", 8)) { } else if (src == SET_IN_SYS && match_varname(buf, "SHELLERS", 8)) {
if (sysopt.shellers) free(sysopt.shellers); if (sysopt.shellers) free(sysopt.shellers);
sysopt.shellers = dupstr(bufp); 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)) { } else if (src == SET_IN_SYS && match_varname(buf, "DEBUGFILES", 5)) {
if (sysopt.debugfiles) free(sysopt.debugfiles); if (sysopt.debugfiles) free(sysopt.debugfiles);
/* if showdebug() has already been called (perhaps we've added /* if showdebug() has already been called (perhaps we've added
@@ -2287,6 +2290,8 @@ int src;
} else if (match_varname(buf, "BOULDER", 3)) { } else if (match_varname(buf, "BOULDER", 3)) {
(void) get_uchars(fp, buf, bufp, &iflags.bouldersym, TRUE, (void) get_uchars(fp, buf, bufp, &iflags.bouldersym, TRUE,
1, "BOULDER"); 1, "BOULDER");
} else if (match_varname(buf, "MENUCOLOR", 9)) {
(void) add_menu_coloring(bufp);
} else if (match_varname(buf, "WARNINGS", 5)) { } else if (match_varname(buf, "WARNINGS", 5)) {
(void) get_uchars(fp, buf, bufp, translate, FALSE, (void) get_uchars(fp, buf, bufp, translate, FALSE,
WARNCOUNT, "WARNINGS"); WARNCOUNT, "WARNINGS");
+9 -7
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 fountain.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ /* NetHack 3.5 fountain.c $NHDT-Date: 1426953330 2015/03/21 15:55:30 $ $NHDT-Branch: master $:$NHDT-Revision: 1.40 $ */
/* NetHack 3.5 fountain.c $Date: 2011/08/20 00:22:20 $ $Revision: 1.32 $ */ /* NetHack 3.5 fountain.c $Date: 2011/08/20 00:22:20 $ $Revision: 1.32 $ */
/* Copyright Scott R. Turner, srt@ucla, 10/27/86 */ /* Copyright Scott R. Turner, srt@ucla, 10/27/86 */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -402,12 +402,14 @@ register struct obj *obj;
if(in_town(u.ux, u.uy)) if(in_town(u.ux, u.uy))
(void) angry_guards(FALSE); (void) angry_guards(FALSE);
return; return;
} else if (water_damage(obj, NULL, TRUE) != ER_NOTHING) { } else {
if (obj->otyp == POT_ACID) { /* Acid and water don't mix */ int er = water_damage(obj, NULL, TRUE);
useup(obj); if (obj->otyp == POT_ACID && er != ER_DESTROYED) { /* Acid and water don't mix */
return; useup(obj);
} else if (!rn2(2)) /* no further effect */ return;
return; } else if (er != ER_NOTHING && !rn2(2)) { /* no further effect */
return;
}
} }
switch (rnd(30)) { switch (rnd(30)) {
+24 -4
View File
@@ -630,8 +630,11 @@ int mode;
if (Passes_walls && may_passwall(x,y)) { if (Passes_walls && may_passwall(x,y)) {
; /* do nothing */ ; /* do nothing */
} else if (tmpr->typ == IRONBARS) { } else if (tmpr->typ == IRONBARS) {
if (!(Passes_walls || passes_bars(youmonst.data))) if (!(Passes_walls || passes_bars(youmonst.data))) {
if (iflags.mention_walls)
You("cannot pass through the bars.");
return FALSE; return FALSE;
}
} else if (tunnels(youmonst.data) && !needspick(youmonst.data)) { } else if (tunnels(youmonst.data) && !needspick(youmonst.data)) {
/* Eat the rock. */ /* Eat the rock. */
if (mode == DO_MOVE && still_chewing(x,y)) return FALSE; if (mode == DO_MOVE && still_chewing(x,y)) return FALSE;
@@ -646,8 +649,10 @@ int mode;
if (Is_stronghold(&u.uz) && is_db_wall(x,y)) if (Is_stronghold(&u.uz) && is_db_wall(x,y))
pline_The("drawbridge is up!"); pline_The("drawbridge is up!");
/* sokoban restriction stays even after puzzle is solved */ /* sokoban restriction stays even after puzzle is solved */
if (Passes_walls && !may_passwall(x,y) && In_sokoban(&u.uz)) else if (Passes_walls && !may_passwall(x,y) && In_sokoban(&u.uz))
pline_The("Sokoban walls resist your ability."); pline_The("Sokoban walls resist your ability.");
else if (iflags.mention_walls)
pline("It's a wall.");
} }
return FALSE; return FALSE;
} }
@@ -1099,7 +1104,7 @@ domove()
register struct monst *mtmp; register struct monst *mtmp;
register struct rm *tmpr; register struct rm *tmpr;
register xchar x,y; register xchar x,y;
struct trap *trap; struct trap *trap = (struct trap *)0;
int wtcap; int wtcap;
boolean on_ice; boolean on_ice;
xchar chainx, chainy, ballx, bally; /* ball&chain new positions */ xchar chainx, chainy, ballx, bally; /* ball&chain new positions */
@@ -1563,6 +1568,7 @@ domove()
/* must come after we finished picking up, in spoteffects() */ /* must come after we finished picking up, in spoteffects() */
if (cause_delay) { if (cause_delay) {
nomul(-2); nomul(-2);
multi_reason = "dragging an iron ball";
nomovemsg = ""; nomovemsg = "";
} }
@@ -2202,7 +2208,19 @@ dopickup()
} }
} }
if (!OBJ_AT(u.ux, u.uy)) { if (!OBJ_AT(u.ux, u.uy)) {
There("is nothing here to pick up."); register struct rm *lev = &levl[u.ux][u.uy];
if (IS_THRONE(lev->typ))
pline("It must weigh%s a ton!",
lev->looted ? " almost" : "");
else if (IS_SINK(lev->typ))
pline_The("plumbing connects it to the floor.");
else if (IS_GRAVE(lev->typ))
You("don't need a gravestone. Yet.");
else if (IS_FOUNTAIN(lev->typ))
You("could drink the water...");
else if (IS_DOOR(lev->typ) && (lev->doormask & D_ISOPEN))
pline("It won't come off the hinges.");
else There("is nothing here to pick up.");
return 0; return 0;
} }
if (!can_reach_floor(TRUE)) { if (!can_reach_floor(TRUE)) {
@@ -2417,6 +2435,7 @@ nomul(nval)
u.uinvulnerable = FALSE; /* Kludge to avoid ctrl-C bug -dlc */ u.uinvulnerable = FALSE; /* Kludge to avoid ctrl-C bug -dlc */
u.usleep = 0; u.usleep = 0;
multi = nval; multi = nval;
if (nval == 0) multi_reason = NULL;
context.travel = context.travel1 = context.mv = context.run = 0; context.travel = context.travel1 = context.mv = context.run = 0;
} }
@@ -2431,6 +2450,7 @@ const char *msg_override;
if (*nomovemsg) pline1(nomovemsg); if (*nomovemsg) pline1(nomovemsg);
nomovemsg = 0; nomovemsg = 0;
u.usleep = 0; u.usleep = 0;
multi_reason = NULL;
if (afternmv) (*afternmv)(); if (afternmv) (*afternmv)();
afternmv = 0; afternmv = 0;
} }
+22
View File
@@ -432,6 +432,28 @@ dist2(x0, y0, x1, y1) /* square of euclidean distance between pair of pts */
return dx * dx + dy * dy; return dx * dx + dy * dy;
} }
/* Integer square root function without using floating point.
* This could be replaced by a faster algorithm, but has not been because:
* + the simple algorithm is easy to read
* + this algorithm does not require 64-bit support
* + in current usage, the values passed to isqrt() are not really that
* large, so the performance difference is negligible
* + isqrt() is used in only few places, which are not bottle-necks
*/
int
isqrt(val)
int val;
{
int rt = 0;
int odd = 1;
while(val >= odd) {
val = val-odd;
odd = odd+2;
rt = rt + 1;
}
return rt;
}
boolean boolean
online2(x0, y0, x1, y1) /* are two points lined up (on a straight line)? */ online2(x0, y0, x1, y1) /* are two points lined up (on a straight line)? */
int x0, y0, x1, y1; int x0, y0, x1, y1;
+21 -9
View File
@@ -915,8 +915,8 @@ register const char *let,*word;
/* "ugly check" for reading fortune cookies, part 2 */ /* "ugly check" for reading fortune cookies, part 2 */
if ((!strcmp(word, "read") if ((!strcmp(word, "read")
&& (otmp->otyp == FORTUNE_COOKIE || otmp->otyp == T_SHIRT))) && is_readable(otmp)))
allowall = TRUE; allowall = usegold = TRUE;
} }
} }
bp[foo] = 0; bp[foo] = 0;
@@ -1789,7 +1789,7 @@ nextclass:
if (!flags.sortpack || otmp->oclass == *invlet) { if (!flags.sortpack || otmp->oclass == *invlet) {
if (flags.sortpack && !classcount) { if (flags.sortpack && !classcount) {
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
let_to_name(*invlet, FALSE), MENU_UNSELECTED); let_to_name(*invlet, FALSE, (want_reply && iflags.menu_head_objsym)), MENU_UNSELECTED);
classcount++; classcount++;
} }
any.a_char = ilet; any.a_char = ilet;
@@ -1863,7 +1863,7 @@ char avoidlet;
if (flags.sortpack && !classcount) { if (flags.sortpack && !classcount) {
any = zeroany; /* zero */ any = zeroany; /* zero */
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
let_to_name(*invlet, FALSE), MENU_UNSELECTED); let_to_name(*invlet, FALSE, FALSE), MENU_UNSELECTED);
classcount++; classcount++;
} }
any.a_char = ilet; any.a_char = ilet;
@@ -1991,7 +1991,7 @@ dounpaid()
if (otmp->unpaid) { if (otmp->unpaid) {
if (!flags.sortpack || otmp->oclass == *invlet) { if (!flags.sortpack || otmp->oclass == *invlet) {
if (flags.sortpack && !classcount) { if (flags.sortpack && !classcount) {
putstr(win, 0, let_to_name(*invlet, TRUE)); putstr(win, 0, let_to_name(*invlet, TRUE, FALSE));
classcount++; classcount++;
} }
@@ -2009,7 +2009,7 @@ dounpaid()
if (count > num_so_far) { if (count > num_so_far) {
/* something unpaid is contained */ /* something unpaid is contained */
if (flags.sortpack) if (flags.sortpack)
putstr(win, 0, let_to_name(CONTAINED_SYM, TRUE)); putstr(win, 0, let_to_name(CONTAINED_SYM, TRUE, FALSE));
/* /*
* Search through the container objects in the inventory for * Search through the container objects in the inventory for
* unpaid items. The top level inventory items have already * unpaid items. The top level inventory items have already
@@ -2701,10 +2701,12 @@ static NEARDATA char *invbuf = (char *)0;
static NEARDATA unsigned invbufsiz = 0; static NEARDATA unsigned invbufsiz = 0;
char * char *
let_to_name(let,unpaid) let_to_name(let,unpaid,showsym)
char let; char let;
boolean unpaid; boolean unpaid,showsym;
{ {
const char *ocsymfmt = " ('%c')";
const int invbuf_sympadding = 8; /* arbitrary */
const char *class_name; const char *class_name;
const char *pos; const char *pos;
int oclass = (let >= 1 && let < MAXOCLASSES) ? let : 0; int oclass = (let >= 1 && let < MAXOCLASSES) ? let : 0;
@@ -2717,7 +2719,8 @@ boolean unpaid;
else else
class_name = names[0]; class_name = names[0];
len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof ""); len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof "") +
(oclass ? (strlen(ocsymfmt)+invbuf_sympadding) : 0);
if (len > invbufsiz) { if (len > invbufsiz) {
if (invbuf) free((genericptr_t)invbuf); if (invbuf) free((genericptr_t)invbuf);
invbufsiz = len + 10; /* add slop to reduce incremental realloc */ invbufsiz = len + 10; /* add slop to reduce incremental realloc */
@@ -2727,6 +2730,15 @@ boolean unpaid;
Strcat(strcpy(invbuf, "Unpaid "), class_name); Strcat(strcpy(invbuf, "Unpaid "), class_name);
else else
Strcpy(invbuf, class_name); Strcpy(invbuf, class_name);
if ((oclass != 0) && showsym) {
char *bp = eos(invbuf);
int mlen = invbuf_sympadding - strlen(class_name);
while (--mlen > 0) {
*bp = ' '; bp++;
}
*bp = '\0';
Sprintf(eos(invbuf), ocsymfmt, def_oc_syms[oclass].sym);
}
return invbuf; return invbuf;
} }
+5
View File
@@ -437,6 +437,11 @@ struct obj *otmp;
"Only Amiga makes it possible.", "Only Amiga makes it possible.",
"CATS have all the answers.", "CATS have all the answers.",
#endif #endif
"This mail complies with the Yendorian Anti-Spam Act (YASA)",
"Please find enclosed a small token to represent your Owlbear",
"**FR33 P0T10N 0F FULL H34L1NG**",
"Please return to sender (Asmodeus)",
"Buy a potion of gain level for only $19.99! Guaranteed to be blessed!",
"Invitation: Visit the NetHack web site at http://www.nethack.org!" "Invitation: Visit the NetHack web site at http://www.nethack.org!"
}; };
+1 -5
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 makemon.c $NHDT-Date: 1426465436 2015/03/16 00:23:56 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.74 $ */ /* NetHack 3.5 makemon.c $NHDT-Date: 1427440865 2015/03/27 07:21:05 $ $NHDT-Branch: master $:$NHDT-Revision: 1.75 $ */
/* NetHack 3.5 makemon.c $Date: 2012/01/29 00:34:33 $ $Revision: 1.69 $ */ /* NetHack 3.5 makemon.c $Date: 2012/01/29 00:34:33 $ $Revision: 1.69 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1884,10 +1884,6 @@ int *seencount; /* secondary output */
} while (--creatcnt > 0); } while (--creatcnt > 0);
if (seecount) { if (seecount) {
if (seencount) *seencount += seecount; if (seencount) *seencount += seecount;
/* don't set contents-known flag if we just used last charge
(such suppression doesn't actually gain us much since
player can now deduce that the bag has become empty) */
if (bag->spe > 0) bag->cknown = 1;
if (bag->dknown) makeknown(BAG_OF_TRICKS); if (bag->dknown) makeknown(BAG_OF_TRICKS);
} else if (!tipping) { } else if (!tipping) {
pline1(!moncount ? nothing_happens : "Nothing seems to happen."); pline1(!moncount ? nothing_happens : "Nothing seems to happen.");
+2
View File
@@ -634,12 +634,14 @@ int spellnum;
if (multi >= 0) if (multi >= 0)
You("stiffen briefly."); You("stiffen briefly.");
nomul(-1); nomul(-1);
multi_reason = "paralyzed by a monster";
} else { } else {
if (multi >= 0) if (multi >= 0)
You("are frozen in place!"); You("are frozen in place!");
dmg = 4 + (int)mtmp->m_lev; dmg = 4 + (int)mtmp->m_lev;
if (Half_spell_damage) dmg = (dmg + 1) / 2; if (Half_spell_damage) dmg = (dmg + 1) / 2;
nomul(-dmg); nomul(-dmg);
multi_reason = "paralyzed by a monster";
} }
nomovemsg = 0; nomovemsg = 0;
dmg = 0; dmg = 0;
+1
View File
@@ -1053,6 +1053,7 @@ dopois:
else You("are frozen by %s!", mon_nam(mtmp)); else You("are frozen by %s!", mon_nam(mtmp));
nomovemsg = You_can_move_again; nomovemsg = You_can_move_again;
nomul(-rnd(10)); nomul(-rnd(10));
multi_reason = "paralyzed by a monster";
exercise(A_DEX, FALSE); exercise(A_DEX, FALSE);
} }
} }
+25 -19
View File
@@ -17,7 +17,6 @@ STATIC_DCL void FDECL(mkgrave,(struct mkroom *));
STATIC_DCL void NDECL(makevtele); STATIC_DCL void NDECL(makevtele);
STATIC_DCL void NDECL(clear_level_structures); STATIC_DCL void NDECL(clear_level_structures);
STATIC_DCL void NDECL(makelevel); STATIC_DCL void NDECL(makelevel);
STATIC_DCL void NDECL(mineralize);
STATIC_DCL boolean FDECL(bydoor,(XCHAR_P,XCHAR_P)); STATIC_DCL boolean FDECL(bydoor,(XCHAR_P,XCHAR_P));
STATIC_DCL struct mkroom *FDECL(find_branch_room, (coord *)); STATIC_DCL struct mkroom *FDECL(find_branch_room, (coord *));
STATIC_DCL struct mkroom *FDECL(pos_to_room, (XCHAR_P, XCHAR_P)); STATIC_DCL struct mkroom *FDECL(pos_to_room, (XCHAR_P, XCHAR_P));
@@ -538,7 +537,7 @@ STATIC_OVL void
clear_level_structures() clear_level_structures()
{ {
static struct rm zerorm = { cmap_to_glyph(S_stone), static struct rm zerorm = { cmap_to_glyph(S_stone),
0, 0, 0, 0, 0, 0, 0, 0 }; 0, 0, 0, 0, 0, 0, 0, 0, 0 };
register int x,y; register int x,y;
register struct rm *lev; register struct rm *lev;
@@ -814,43 +813,50 @@ skip0:
* Place deposits of minerals (gold and misc gems) in the stone * Place deposits of minerals (gold and misc gems) in the stone
* surrounding the rooms on the map. * surrounding the rooms on the map.
* Also place kelp in water. * Also place kelp in water.
* mineralize(-1, -1, -1, -1, FALSE); => "default" behaviour
*/ */
STATIC_OVL void void
mineralize() mineralize(kelp_pool, kelp_moat, goldprob, gemprob, skip_lvl_checks)
int kelp_pool, kelp_moat, goldprob, gemprob;
boolean skip_lvl_checks;
{ {
s_level *sp; s_level *sp;
struct obj *otmp; struct obj *otmp;
int goldprob, gemprob, x, y, cnt; int x, y, cnt;
if (kelp_pool < 0) kelp_pool = 10;
if (kelp_moat < 0) kelp_moat = 30;
/* Place kelp, except on the plane of water */ /* Place kelp, except on the plane of water */
if (In_endgame(&u.uz)) return; if (!skip_lvl_checks && In_endgame(&u.uz)) return;
for (x = 2; x < (COLNO - 2); x++) for (x = 2; x < (COLNO - 2); x++)
for (y = 1; y < (ROWNO - 1); y++) for (y = 1; y < (ROWNO - 1); y++)
if ((levl[x][y].typ == POOL && !rn2(10)) || if ((kelp_pool && levl[x][y].typ == POOL && !rn2(kelp_pool)) ||
(levl[x][y].typ == MOAT && !rn2(30))) (kelp_moat && levl[x][y].typ == MOAT && !rn2(kelp_moat)))
(void) mksobj_at(KELP_FROND, x, y, TRUE, FALSE); (void) mksobj_at(KELP_FROND, x, y, TRUE, FALSE);
/* determine if it is even allowed; /* determine if it is even allowed;
almost all special levels are excluded */ almost all special levels are excluded */
if (In_hell(&u.uz) || In_V_tower(&u.uz) || if (!skip_lvl_checks && (In_hell(&u.uz) || In_V_tower(&u.uz) ||
Is_rogue_level(&u.uz) || Is_rogue_level(&u.uz) ||
level.flags.arboreal || level.flags.arboreal ||
((sp = Is_special(&u.uz)) != 0 && !Is_oracle_level(&u.uz) ((sp = Is_special(&u.uz)) != 0 && !Is_oracle_level(&u.uz)
&& (!In_mines(&u.uz) || sp->flags.town) && (!In_mines(&u.uz) || sp->flags.town)
)) return; ))) return;
/* basic level-related probabilities */ /* basic level-related probabilities */
goldprob = 20 + depth(&u.uz) / 3; if (goldprob < 0) goldprob = 20 + depth(&u.uz) / 3;
gemprob = goldprob / 4; if (gemprob < 0) gemprob = goldprob / 4;
/* mines have ***MORE*** goodies - otherwise why mine? */ /* mines have ***MORE*** goodies - otherwise why mine? */
if (In_mines(&u.uz)) { if (!skip_lvl_checks) {
goldprob *= 2; if (In_mines(&u.uz)) {
gemprob *= 3; goldprob *= 2;
} else if (In_quest(&u.uz)) { gemprob *= 3;
goldprob /= 4; } else if (In_quest(&u.uz)) {
gemprob /= 6; goldprob /= 4;
gemprob /= 6;
}
} }
/* /*
@@ -905,7 +911,7 @@ mklev()
in_mklev = TRUE; in_mklev = TRUE;
makelevel(); makelevel();
bound_digging(); bound_digging();
mineralize(); mineralize(-1, -1, -1, -1, FALSE);
in_mklev = FALSE; in_mklev = FALSE;
/* has_morgue gets cleared once morgue is entered; graveyard stays /* has_morgue gets cleared once morgue is entered; graveyard stays
set (graveyard might already be set even when has_morgue is clear set (graveyard might already be set even when has_morgue is clear
+192 -169
View File
@@ -344,7 +344,8 @@ fixup_special()
was_waterlevel = FALSE; was_waterlevel = FALSE;
u.uinwater = 0; u.uinwater = 0;
unsetup_waterlevel(); unsetup_waterlevel();
} else if (Is_waterlevel(&u.uz)) { }
if (Is_waterlevel(&u.uz) || Is_airlevel(&u.uz)) {
level.flags.hero_memory = 0; level.flags.hero_memory = 0;
was_waterlevel = TRUE; was_waterlevel = TRUE;
/* water level is an odd beast - it has to be set up /* water level is an odd beast - it has to be set up
@@ -406,10 +407,6 @@ fixup_special()
place_lregion(0,0,0,0,0,0,0,0,LR_BRANCH,(d_level *)0); place_lregion(0,0,0,0,0,0,0,0,LR_BRANCH,(d_level *)0);
} }
/* KMH -- Sokoban levels */
if(In_sokoban(&u.uz))
sokoban_detect();
/* Still need to add some stuff to level file */ /* Still need to add some stuff to level file */
if (Is_medusa_level(&u.uz)) { if (Is_medusa_level(&u.uz)) {
struct obj *otmp; struct obj *otmp;
@@ -556,7 +553,7 @@ register const char *s;
#endif #endif
maze0xy(&mm); maze0xy(&mm);
walkfrom((int) mm.x, (int) mm.y); walkfrom((int) mm.x, (int) mm.y, 0);
/* put a boulder at the maze center */ /* put a boulder at the maze center */
(void) mksobj_at(BOULDER, (int) mm.x, (int) mm.y, TRUE, FALSE); (void) mksobj_at(BOULDER, (int) mm.x, (int) mm.y, TRUE, FALSE);
@@ -644,14 +641,21 @@ register const char *s;
* that is totally safe. * that is totally safe.
*/ */
void void
walkfrom(x,y) walkfrom(x,y,typ)
int x,y; int x,y;
schar typ;
{ {
#define CELLS (ROWNO * COLNO) / 4 /* a maze cell is 4 squares */ #define CELLS (ROWNO * COLNO) / 4 /* a maze cell is 4 squares */
char mazex[CELLS + 1], mazey[CELLS + 1]; /* char's are OK */ char mazex[CELLS + 1], mazey[CELLS + 1]; /* char's are OK */
int q, a, dir, pos; int q, a, dir, pos;
int dirs[4]; int dirs[4];
#ifndef WALLIFIED_MAZE
if (!typ) typ = CORR;
#else
if (!typ) typ = ROOM;
#endif
pos = 1; pos = 1;
mazex[pos] = (char) x; mazex[pos] = (char) x;
mazey[pos] = (char) y; mazey[pos] = (char) y;
@@ -660,11 +664,7 @@ int x,y;
y = (int) mazey[pos]; y = (int) mazey[pos];
if(!IS_DOOR(levl[x][y].typ)) { if(!IS_DOOR(levl[x][y].typ)) {
/* might still be on edge of MAP, so don't overwrite */ /* might still be on edge of MAP, so don't overwrite */
#ifndef WALLIFIED_MAZE levl[x][y].typ = typ;
levl[x][y].typ = CORR;
#else
levl[x][y].typ = ROOM;
#endif
levl[x][y].flags = 0; levl[x][y].flags = 0;
} }
q = 0; q = 0;
@@ -675,11 +675,7 @@ int x,y;
else { else {
dir = dirs[rn2(q)]; dir = dirs[rn2(q)];
move(&x, &y, dir); move(&x, &y, dir);
#ifndef WALLIFIED_MAZE levl[x][y].typ = typ;
levl[x][y].typ = CORR;
#else
levl[x][y].typ = ROOM;
#endif
move(&x, &y, dir); move(&x, &y, dir);
pos++; pos++;
if (pos > CELLS) if (pos > CELLS)
@@ -692,19 +688,22 @@ int x,y;
#else #else
void void
walkfrom(x,y) walkfrom(x,y,typ)
int x,y; int x,y;
schar typ;
{ {
register int q,a,dir; register int q,a,dir;
int dirs[4]; int dirs[4];
#ifndef WALLIFIED_MAZE
if (!typ) typ = CORR;
#else
if (!typ) typ = ROOM;
#endif
if(!IS_DOOR(levl[x][y].typ)) { if(!IS_DOOR(levl[x][y].typ)) {
/* might still be on edge of MAP, so don't overwrite */ /* might still be on edge of MAP, so don't overwrite */
#ifndef WALLIFIED_MAZE levl[x][y].typ = typ;
levl[x][y].typ = CORR;
#else
levl[x][y].typ = ROOM;
#endif
levl[x][y].flags = 0; levl[x][y].flags = 0;
} }
@@ -715,13 +714,9 @@ int x,y;
if(!q) return; if(!q) return;
dir = dirs[rn2(q)]; dir = dirs[rn2(q)];
move(&x,&y,dir); move(&x,&y,dir);
#ifndef WALLIFIED_MAZE levl[x][y].typ = typ;
levl[x][y].typ = CORR;
#else
levl[x][y].typ = ROOM;
#endif
move(&x,&y,dir); move(&x,&y,dir);
walkfrom(x,y); walkfrom(x,y,typ);
} }
} }
#endif /* MICRO */ #endif /* MICRO */
@@ -921,99 +916,111 @@ movebubbles()
register int x, y, i, j; register int x, y, i, j;
struct trap *btrap; struct trap *btrap;
static const struct rm water_pos = static const struct rm water_pos =
{ cmap_to_glyph(S_water), WATER, 0, 0, 0, 0, 0, 0, 0 }; { cmap_to_glyph(S_water), WATER, 0, 0, 0, 0, 0, 0, 0, 0 };
static const struct rm air_pos =
{ cmap_to_glyph(S_cloud), AIR, 0, 0, 0, 1, 0, 0, 0, 0 };
/* set up the portal the first time bubbles are moved */ /* set up the portal the first time bubbles are moved */
if (!wportal) set_wportal(); if (!wportal) set_wportal();
vision_recalc(2); vision_recalc(2);
/* keep attached ball&chain separate from bubble objects */
if (Punished) unplacebc();
/* if (Is_waterlevel(&u.uz)) {
* Pick up everything inside of a bubble then fill all bubble
* locations.
*/
for (b = up ? bbubbles : ebubbles; b; b = up ? b->next : b->prev) { /* keep attached ball&chain separate from bubble objects */
if (b->cons) panic("movebubbles: cons != null"); if (Punished) unplacebc();
for (i = 0, x = b->x; i < (int) b->bm[0]; i++, x++)
for (j = 0, y = b->y; j < (int) b->bm[1]; j++, y++)
if (b->bm[j + 2] & (1 << i)) {
if (!isok(x,y)) {
impossible("movebubbles: bad pos (%d,%d)", x,y);
continue;
}
/* pick up objects, monsters, hero, and traps */ /*
if (OBJ_AT(x,y)) { * Pick up everything inside of a bubble then fill all bubble
struct obj *olist = (struct obj *) 0, *otmp; * locations.
struct container *cons = (struct container *) */
alloc(sizeof(struct container));
while ((otmp = level.objects[x][y]) != 0) { for (b = up ? bbubbles : ebubbles; b; b = up ? b->next : b->prev) {
remove_object(otmp); if (b->cons) panic("movebubbles: cons != null");
otmp->ox = otmp->oy = 0; for (i = 0, x = b->x; i < (int) b->bm[0]; i++, x++)
otmp->nexthere = olist; for (j = 0, y = b->y; j < (int) b->bm[1]; j++, y++)
olist = otmp; if (b->bm[j + 2] & (1 << i)) {
if (!isok(x,y)) {
impossible("movebubbles: bad pos (%d,%d)", x,y);
continue;
} }
cons->x = x; /* pick up objects, monsters, hero, and traps */
cons->y = y; if (OBJ_AT(x,y)) {
cons->what = CONS_OBJ; struct obj *olist = (struct obj *) 0, *otmp;
cons->list = (genericptr_t) olist; struct container *cons = (struct container *)
cons->next = b->cons; alloc(sizeof(struct container));
b->cons = cons;
while ((otmp = level.objects[x][y]) != 0) {
remove_object(otmp);
otmp->ox = otmp->oy = 0;
otmp->nexthere = olist;
olist = otmp;
}
cons->x = x;
cons->y = y;
cons->what = CONS_OBJ;
cons->list = (genericptr_t) olist;
cons->next = b->cons;
b->cons = cons;
}
if (MON_AT(x,y)) {
struct monst *mon = m_at(x,y);
struct container *cons = (struct container *)
alloc(sizeof(struct container));
cons->x = x;
cons->y = y;
cons->what = CONS_MON;
cons->list = (genericptr_t) mon;
cons->next = b->cons;
b->cons = cons;
if(mon->wormno)
remove_worm(mon);
else
remove_monster(x, y);
newsym(x,y); /* clean up old position */
mon->mx = mon->my = 0;
}
if (!u.uswallow && x == u.ux && y == u.uy) {
struct container *cons = (struct container *)
alloc(sizeof(struct container));
cons->x = x;
cons->y = y;
cons->what = CONS_HERO;
cons->list = (genericptr_t) 0;
cons->next = b->cons;
b->cons = cons;
}
if ((btrap = t_at(x,y)) != 0) {
struct container *cons = (struct container *)
alloc(sizeof(struct container));
cons->x = x;
cons->y = y;
cons->what = CONS_TRAP;
cons->list = (genericptr_t) btrap;
cons->next = b->cons;
b->cons = cons;
}
levl[x][y] = water_pos;
block_point(x,y);
} }
if (MON_AT(x,y)) { }
struct monst *mon = m_at(x,y); } else if (Is_airlevel(&u.uz)) {
struct container *cons = (struct container *) for (x = 0; x < COLNO; x++)
alloc(sizeof(struct container)); for (y = 0; y < ROWNO; y++) {
levl[x][y] = air_pos;
cons->x = x; unblock_point(x,y);
cons->y = y; }
cons->what = CONS_MON;
cons->list = (genericptr_t) mon;
cons->next = b->cons;
b->cons = cons;
if(mon->wormno)
remove_worm(mon);
else
remove_monster(x, y);
newsym(x,y); /* clean up old position */
mon->mx = mon->my = 0;
}
if (!u.uswallow && x == u.ux && y == u.uy) {
struct container *cons = (struct container *)
alloc(sizeof(struct container));
cons->x = x;
cons->y = y;
cons->what = CONS_HERO;
cons->list = (genericptr_t) 0;
cons->next = b->cons;
b->cons = cons;
}
if ((btrap = t_at(x,y)) != 0) {
struct container *cons = (struct container *)
alloc(sizeof(struct container));
cons->x = x;
cons->y = y;
cons->what = CONS_TRAP;
cons->list = (genericptr_t) btrap;
cons->next = b->cons;
b->cons = cons;
}
levl[x][y] = water_pos;
block_point(x,y);
}
} }
/* /*
@@ -1032,7 +1039,7 @@ movebubbles()
} }
/* put attached ball&chain back */ /* put attached ball&chain back */
if (Punished) placebc(); if (Is_waterlevel(&u.uz) && Punished) placebc();
vision_full_recalc = 1; vision_full_recalc = 1;
} }
@@ -1076,7 +1083,7 @@ int fd, mode;
{ {
register struct bubble *b; register struct bubble *b;
if (!Is_waterlevel(&u.uz)) return; if (!Is_waterlevel(&u.uz) && !Is_airlevel(&u.uz)) return;
if (perform_bwrite(mode)) { if (perform_bwrite(mode)) {
int n = 0; int n = 0;
@@ -1101,7 +1108,7 @@ register int fd;
register int i; register int i;
int n; int n;
if (!Is_waterlevel(&u.uz)) return; if (!Is_waterlevel(&u.uz) && !Is_airlevel(&u.uz)) return;
set_wportal(); set_wportal();
mread(fd,(genericptr_t)&n,sizeof(int)); mread(fd,(genericptr_t)&n,sizeof(int));
@@ -1177,6 +1184,7 @@ setup_waterlevel()
register int x, y; register int x, y;
register int xskip, yskip; register int xskip, yskip;
register int water_glyph = cmap_to_glyph(S_water); register int water_glyph = cmap_to_glyph(S_water);
register int air_glyph = cmap_to_glyph(S_air);
/* ouch, hardcoded... */ /* ouch, hardcoded... */
@@ -1189,12 +1197,18 @@ setup_waterlevel()
for (x = xmin; x <= xmax; x++) for (x = xmin; x <= xmax; x++)
for (y = ymin; y <= ymax; y++) for (y = ymin; y <= ymax; y++)
levl[x][y].glyph = water_glyph; levl[x][y].glyph = Is_waterlevel(&u.uz) ? water_glyph : air_glyph;
/* make bubbles */ /* make bubbles */
xskip = 10 + rn2(10); if (Is_waterlevel(&u.uz)) {
yskip = 4 + rn2(4); xskip = 10 + rn2(10);
yskip = 4 + rn2(4);
} else {
xskip = 6 + rn2(4);
yskip = 3 + rn2(3);
}
for (x = bxmin; x <= bxmax; x += xskip) for (x = bxmin; x <= bxmax; x += xskip)
for (y = bymin; y <= bymax; y += yskip) for (y = bymin; y <= bymax; y += yskip)
mk_bubble(x,y,rn2(7)); mk_bubble(x,y,rn2(7));
@@ -1280,67 +1294,76 @@ register boolean ini;
register int x, y, i, j, colli = 0; register int x, y, i, j, colli = 0;
struct container *cons, *ctemp; struct container *cons, *ctemp;
/* move bubble */ /* clouds move slowly */
if (dx < -1 || dx > 1 || dy < -1 || dy > 1) { if (!Is_airlevel(&u.uz) || !rn2(6)) {
/* pline("mv_bubble: dx = %d, dy = %d", dx, dy); */ /* move bubble */
dx = sgn(dx); if (dx < -1 || dx > 1 || dy < -1 || dy > 1) {
dy = sgn(dy); /* pline("mv_bubble: dx = %d, dy = %d", dx, dy); */
dx = sgn(dx);
dy = sgn(dy);
}
/*
* collision with level borders?
* 1 = horizontal border, 2 = vertical, 3 = corner
*/
if (b->x <= bxmin) colli |= 2;
if (b->y <= bymin) colli |= 1;
if ((int) (b->x + b->bm[0] - 1) >= bxmax) colli |= 2;
if ((int) (b->y + b->bm[1] - 1) >= bymax) colli |= 1;
if (b->x < bxmin) {
pline("bubble xmin: x = %d, xmin = %d", b->x, bxmin);
b->x = bxmin;
}
if (b->y < bymin) {
pline("bubble ymin: y = %d, ymin = %d", b->y, bymin);
b->y = bymin;
}
if ((int) (b->x + b->bm[0] - 1) > bxmax) {
pline("bubble xmax: x = %d, xmax = %d",
b->x + b->bm[0] - 1, bxmax);
b->x = bxmax - b->bm[0] + 1;
}
if ((int) (b->y + b->bm[1] - 1) > bymax) {
pline("bubble ymax: y = %d, ymax = %d",
b->y + b->bm[1] - 1, bymax);
b->y = bymax - b->bm[1] + 1;
}
/* bounce if we're trying to move off the border */
if (b->x == bxmin && dx < 0) dx = -dx;
if (b->x + b->bm[0] - 1 == bxmax && dx > 0) dx = -dx;
if (b->y == bymin && dy < 0) dy = -dy;
if (b->y + b->bm[1] - 1 == bymax && dy > 0) dy = -dy;
b->x += dx;
b->y += dy;
} }
/* /* draw the bubbles */
* collision with level borders?
* 1 = horizontal border, 2 = vertical, 3 = corner
*/
if (b->x <= bxmin) colli |= 2;
if (b->y <= bymin) colli |= 1;
if ((int) (b->x + b->bm[0] - 1) >= bxmax) colli |= 2;
if ((int) (b->y + b->bm[1] - 1) >= bymax) colli |= 1;
if (b->x < bxmin) {
pline("bubble xmin: x = %d, xmin = %d", b->x, bxmin);
b->x = bxmin;
}
if (b->y < bymin) {
pline("bubble ymin: y = %d, ymin = %d", b->y, bymin);
b->y = bymin;
}
if ((int) (b->x + b->bm[0] - 1) > bxmax) {
pline("bubble xmax: x = %d, xmax = %d",
b->x + b->bm[0] - 1, bxmax);
b->x = bxmax - b->bm[0] + 1;
}
if ((int) (b->y + b->bm[1] - 1) > bymax) {
pline("bubble ymax: y = %d, ymax = %d",
b->y + b->bm[1] - 1, bymax);
b->y = bymax - b->bm[1] + 1;
}
/* bounce if we're trying to move off the border */
if (b->x == bxmin && dx < 0) dx = -dx;
if (b->x + b->bm[0] - 1 == bxmax && dx > 0) dx = -dx;
if (b->y == bymin && dy < 0) dy = -dy;
if (b->y + b->bm[1] - 1 == bymax && dy > 0) dy = -dy;
b->x += dx;
b->y += dy;
/* void positions inside bubble */
for (i = 0, x = b->x; i < (int) b->bm[0]; i++, x++) for (i = 0, x = b->x; i < (int) b->bm[0]; i++, x++)
for (j = 0, y = b->y; j < (int) b->bm[1]; j++, y++) for (j = 0, y = b->y; j < (int) b->bm[1]; j++, y++)
if (b->bm[j + 2] & (1 << i)) { if (b->bm[j + 2] & (1 << i)) {
if (Is_waterlevel(&u.uz)) {
levl[x][y].typ = AIR; levl[x][y].typ = AIR;
levl[x][y].lit = 1; levl[x][y].lit = 1;
unblock_point(x,y); unblock_point(x,y);
} else if (Is_airlevel(&u.uz)) {
levl[x][y].typ = CLOUD;
levl[x][y].lit = 1;
block_point(x,y);
}
} }
/* replace contents of bubble */ if (Is_waterlevel(&u.uz)) {
for (cons = b->cons; cons; cons = ctemp) { /* replace contents of bubble */
ctemp = cons->next; for (cons = b->cons; cons; cons = ctemp) {
cons->x += dx; ctemp = cons->next;
cons->y += dy; cons->x += dx;
cons->y += dy;
switch(cons->what) { switch(cons->what) {
case CONS_OBJ: { case CONS_OBJ: {
struct obj *olist, *otmp; struct obj *olist, *otmp;
@@ -1381,13 +1404,13 @@ register boolean ini;
default: default:
impossible("mv_bubble: unknown bubble contents"); impossible("mv_bubble: unknown bubble contents");
break; break;
}
free((genericptr_t)cons);
} }
free((genericptr_t)cons); b->cons = 0;
} }
b->cons = 0;
/* boing? */ /* boing? */
switch (colli) { switch (colli) {
case 1: b->dy = -b->dy; break; case 1: b->dy = -b->dy; break;
case 3: b->dy = -b->dy; /* fall through */ case 3: b->dy = -b->dy; /* fall through */
+13 -9
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 mkroom.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ /* NetHack 3.5 mkroom.c $NHDT-Date: 1427239202 2015/03/24 23:20:02 $ $NHDT-Branch: master $:$NHDT-Revision: 1.16 $ */
/* NetHack 3.5 mkroom.c $Date: 2012/01/10 17:47:19 $ $Revision: 1.15 $ */ /* NetHack 3.5 mkroom.c $Date: 2012/01/10 17:47:19 $ $Revision: 1.15 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -219,14 +219,10 @@ struct mkroom *sroom;
{ {
struct monst *mon; struct monst *mon;
register int sx,sy,i; register int sx,sy,i;
int sh, tx, ty, goldlim, type = sroom->rtype; int sh, tx = 0, ty = 0, goldlim = 0, type = sroom->rtype;
int rmno = (int)((sroom - rooms) + ROOMOFFSET); int rmno = (int)((sroom - rooms) + ROOMOFFSET);
coord mm; coord mm;
#ifdef GCC_WARN
tx = ty = goldlim = 0;
#endif
sh = sroom->fdoor; sh = sroom->fdoor;
switch(type) { switch(type) {
case COURT: case COURT:
@@ -408,9 +404,17 @@ morguemon()
{ {
register int i = rn2(100), hd = rn2(level_difficulty()); register int i = rn2(100), hd = rn2(level_difficulty());
if(hd > 10 && i < 10) if(hd > 10 && i < 10) {
return((Inhell || In_endgame(&u.uz)) ? mkclass(S_DEMON,0) : if (Inhell || In_endgame(&u.uz)) {
&mons[ndemon(A_NONE)]); return(mkclass(S_DEMON,0));
} else {
int ndemon_res = ndemon(A_NONE);
if (ndemon_res != NON_PM)
return(&mons[ndemon_res]);
/* else do what? As is, it will drop to ghost/wraith/zombie */
}
}
if(hd > 8 && i > 85) if(hd > 8 && i > 85)
return(mkclass(S_VAMPIRE,0)); return(mkclass(S_VAMPIRE,0));
+11 -7
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 mon.c $NHDT-Date: 1426465438 2015/03/16 00:23:58 $ $NHDT-Branch: debug $:$NHDT-Revision: 1.139 $ */ /* NetHack 3.5 mon.c $NHDT-Date: 1427580482 2015/03/28 22:08:02 $ $NHDT-Branch: master $:$NHDT-Revision: 1.142 $ */
/* NetHack 3.5 mon.c $Date: 2012/05/16 02:15:10 $ $Revision: 1.126 $ */ /* NetHack 3.5 mon.c $Date: 2012/05/16 02:15:10 $ $Revision: 1.126 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -278,9 +278,10 @@ unsigned corpseflags;
obj = mkcorpstat(CORPSE, KEEPTRAITS(mtmp) ? mtmp : 0, obj = mkcorpstat(CORPSE, KEEPTRAITS(mtmp) ? mtmp : 0,
mdat, x, y, corpstatflags); mdat, x, y, corpstatflags);
if (burythem) { if (burythem) {
(void) bury_an_obj(obj); boolean dealloc;
(void) bury_an_obj(obj, &dealloc);
newsym(x, y); newsym(x, y);
return obj; return (dealloc ? NULL : obj);
} }
} }
break; break;
@@ -615,7 +616,10 @@ meatmetal(mtmp)
/* Eats topmost metal object if it is there */ /* Eats topmost metal object if it is there */
for (otmp = level.objects[mtmp->mx][mtmp->my]; for (otmp = level.objects[mtmp->mx][mtmp->my];
otmp; otmp = otmp->nexthere) { otmp; otmp = otmp->nexthere) {
if (mtmp->data == &mons[PM_RUST_MONSTER] && !is_rustprone(otmp)) /* Don't eat indigestible/choking/inappropriate objects */
if ((mtmp->data == &mons[PM_RUST_MONSTER] && !is_rustprone(otmp)) ||
(otmp->otyp == AMULET_OF_STRANGULATION) ||
(otmp->otyp == RIN_SLOW_DIGESTION))
continue; continue;
if (is_metallic(otmp) && !obj_resists(otmp, 5, 95) && if (is_metallic(otmp) && !obj_resists(otmp, 5, 95) &&
touch_artifact(otmp,mtmp)) { touch_artifact(otmp,mtmp)) {
@@ -632,9 +636,7 @@ meatmetal(mtmp)
pline("%s spits %s out in disgust!", pline("%s spits %s out in disgust!",
Monnam(mtmp), distant_name(otmp,doname)); Monnam(mtmp), distant_name(otmp,doname));
} }
/* KMH -- Don't eat indigestible/choking objects */ } else {
} else if (otmp->otyp != AMULET_OF_STRANGULATION &&
otmp->otyp != RIN_SLOW_DIGESTION) {
if (cansee(mtmp->mx,mtmp->my) && flags.verbose) if (cansee(mtmp->mx,mtmp->my) && flags.verbose)
pline("%s eats %s!", Monnam(mtmp), pline("%s eats %s!", Monnam(mtmp),
distant_name(otmp,doname)); distant_name(otmp,doname));
@@ -1237,6 +1239,8 @@ dmonsfree()
for (mtmp = &fmon; *mtmp;) { for (mtmp = &fmon; *mtmp;) {
freetmp = *mtmp; freetmp = *mtmp;
if (freetmp->mhp <= 0 && !freetmp->isgd) { if (freetmp->mhp <= 0 && !freetmp->isgd) {
if (freetmp == context.polearm.hitmon)
context.polearm.hitmon = NULL;
*mtmp = freetmp->nmon; *mtmp = freetmp->nmon;
dealloc_monst(freetmp); dealloc_monst(freetmp);
count++; count++;
+4 -4
View File
@@ -446,7 +446,7 @@ dodiscovered() /* free after Robert Viduya */
if ((dis = disco[i]) != 0 && interesting_to_discover(dis)) { if ((dis = disco[i]) != 0 && interesting_to_discover(dis)) {
ct++; ct++;
if (oclass != prev_class) { if (oclass != prev_class) {
putstr(tmpwin, iflags.menu_headings, let_to_name(oclass, FALSE)); putstr(tmpwin, iflags.menu_headings, let_to_name(oclass, FALSE, FALSE));
prev_class = oclass; prev_class = oclass;
} }
Sprintf(buf, "%s %s",(objects[dis].oc_pre_discovered ? "*" : " "), Sprintf(buf, "%s %s",(objects[dis].oc_pre_discovered ? "*" : " "),
@@ -472,7 +472,7 @@ char *buf;
{ {
char *s; char *s;
Strcpy(buf, let_to_name(oclass, FALSE)); Strcpy(buf, let_to_name(oclass, FALSE, FALSE));
for (s = buf; *s; ++s) *s = lowc(*s); for (s = buf; *s; ++s) *s = lowc(*s);
return buf; return buf;
} }
@@ -615,7 +615,7 @@ doclassdisco()
break; break;
default: default:
oclass = def_char_to_objclass(c); oclass = def_char_to_objclass(c);
Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE)); Sprintf(buf, "Discovered %s", let_to_name(oclass, FALSE, FALSE));
putstr(tmpwin, iflags.menu_headings, buf); putstr(tmpwin, iflags.menu_headings, buf);
for (i = bases[(int)oclass]; for (i = bases[(int)oclass];
i < NUM_OBJECTS && objects[i].oc_class == oclass; ++i) { i < NUM_OBJECTS && objects[i].oc_class == oclass; ++i) {
@@ -672,7 +672,7 @@ rename_disco()
if (oclass != prev_class) { if (oclass != prev_class) {
any.a_int = 0; any.a_int = 0;
add_menu(tmpwin, NO_GLYPH, &any, ' ', iflags.menu_headings, add_menu(tmpwin, NO_GLYPH, &any, ' ', iflags.menu_headings,
ATR_NONE, let_to_name(oclass, FALSE), MENU_UNSELECTED); ATR_NONE, let_to_name(oclass, FALSE, FALSE), MENU_UNSELECTED);
prev_class = oclass; prev_class = oclass;
} }
any.a_int = dis; any.a_int = dis;
+18 -4
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 objnam.c $NHDT-Date: 1426977394 2015/03/21 22:36:34 $ $NHDT-Branch: master $:$NHDT-Revision: 1.108 $ */ /* NetHack 3.5 objnam.c $NHDT-Date: 1427440866 2015/03/27 07:21:06 $ $NHDT-Branch: master $:$NHDT-Revision: 1.109 $ */
/* NetHack 3.5 objnam.c $Date: 2011/10/27 02:24:54 $ $Revision: 1.101 $ */ /* NetHack 3.5 objnam.c $Date: 2011/10/27 02:24:54 $ $Revision: 1.101 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -501,6 +501,11 @@ register struct obj *obj;
} }
if (pluralize) Strcpy(buf, makeplural(buf)); if (pluralize) Strcpy(buf, makeplural(buf));
if (obj->otyp == T_SHIRT && program_state.gameover) {
char tmpbuf[BUFSZ];
Sprintf(eos(buf), " with text \"%s\"", tshirt_text(obj, tmpbuf));
}
if (has_oname(obj) && dknown) { if (has_oname(obj) && dknown) {
Strcat(buf, " named "); Strcat(buf, " named ");
nameit: nameit:
@@ -663,8 +668,9 @@ register struct obj *obj;
*/ */
register char *bp = xname(obj); register char *bp = xname(obj);
if (iflags.override_ID) known = cknown = bknown = lknown = TRUE; if (iflags.override_ID) {
else { known = cknown = bknown = lknown = TRUE;
} else {
known = obj->known; known = obj->known;
cknown = obj->cknown; cknown = obj->cknown;
bknown = obj->bknown; bknown = obj->bknown;
@@ -697,7 +703,15 @@ register struct obj *obj;
/* "empty" goes at the beginning, but item count goes at the end */ /* "empty" goes at the beginning, but item count goes at the end */
if (cknown && if (cknown &&
(Is_container(obj) || obj->otyp == STATUE) && !Has_contents(obj)) /* bag of tricks: include "empty" prefix if it's known to
be empty but its precise number of charges isn't known
(when that is known, suffix of "(n:0)" will be appended,
making the prefix be redundant; note that 'known' flag
isn't set when emptiness gets discovered because then
charging magic would yield known number of new charges) */
(obj->otyp == BAG_OF_TRICKS ? (obj->spe == 0 && !obj->known) :
/* not bag of tricks: empty if container which has no contents */
(Is_container(obj) || obj->otyp == STATUE) && !Has_contents(obj)))
Strcat(prefix, "empty "); Strcat(prefix, "empty ");
if (bknown && if (bknown &&
+189 -4
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 options.c $NHDT-Date: 1427035440 2015/03/22 14:44:00 $ $NHDT-Branch: master $:$NHDT-Revision: 1.163 $ */ /* NetHack 3.5 options.c $NHDT-Date: 1427073746 2015/03/23 01:22:26 $ $NHDT-Branch: master $:$NHDT-Revision: 1.164 $ */
/* NetHack 3.5 options.c $Date: 2012/04/09 02:56:30 $ $Revision: 1.153 $ */ /* NetHack 3.5 options.c $Date: 2012/04/09 02:56:30 $ $Revision: 1.153 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -85,6 +85,7 @@ static struct Bool_Opt
#else #else
{"BIOS", (boolean *)0, FALSE, SET_IN_FILE}, {"BIOS", (boolean *)0, FALSE, SET_IN_FILE},
#endif #endif
{"blind", &u.uroleplay.blind, FALSE, DISP_IN_GAME},
{"bones", &flags.bones, TRUE, SET_IN_FILE}, {"bones", &flags.bones, TRUE, SET_IN_FILE},
#ifdef INSURANCE #ifdef INSURANCE
{"checkpoint", &flags.ins_chkpt, TRUE, SET_IN_GAME}, {"checkpoint", &flags.ins_chkpt, TRUE, SET_IN_GAME},
@@ -139,14 +140,18 @@ static struct Bool_Opt
#else #else
{"mail", (boolean *)0, TRUE, SET_IN_FILE}, {"mail", (boolean *)0, TRUE, SET_IN_FILE},
#endif #endif
{"mention_walls", &iflags.mention_walls, FALSE, SET_IN_GAME},
{"menucolors", &iflags.use_menu_color, FALSE, SET_IN_GAME},
/* for menu debugging only*/ /* for menu debugging only*/
{"menu_tab_sep", &iflags.menu_tab_sep, FALSE, SET_IN_GAME}, {"menu_tab_sep", &iflags.menu_tab_sep, FALSE, SET_IN_GAME},
{"menu_objsyms", &iflags.menu_head_objsym, FALSE, SET_IN_GAME},
{"mouse_support", &iflags.wc_mouse_support, TRUE, DISP_IN_GAME}, /*WC*/ {"mouse_support", &iflags.wc_mouse_support, TRUE, DISP_IN_GAME}, /*WC*/
#ifdef NEWS #ifdef NEWS
{"news", &iflags.news, TRUE, DISP_IN_GAME}, {"news", &iflags.news, TRUE, DISP_IN_GAME},
#else #else
{"news", (boolean *)0, FALSE, SET_IN_FILE}, {"news", (boolean *)0, FALSE, SET_IN_FILE},
#endif #endif
{"nudist", &u.uroleplay.nudist, FALSE, DISP_IN_GAME},
{"null", &flags.null, TRUE, SET_IN_GAME}, {"null", &flags.null, TRUE, SET_IN_GAME},
#if defined(SYSFLAGS) && defined(MAC) #if defined(SYSFLAGS) && defined(MAC)
{"page_wait", &sysflags.page_wait, TRUE, SET_IN_GAME}, {"page_wait", &sysflags.page_wait, TRUE, SET_IN_GAME},
@@ -199,6 +204,7 @@ static struct Bool_Opt
{"tombstone",&flags.tombstone, TRUE, SET_IN_GAME}, {"tombstone",&flags.tombstone, TRUE, SET_IN_GAME},
{"toptenwin",&iflags.toptenwin, FALSE, SET_IN_GAME}, {"toptenwin",&iflags.toptenwin, FALSE, SET_IN_GAME},
{"travel", &flags.travelcmd, TRUE, SET_IN_GAME}, {"travel", &flags.travelcmd, TRUE, SET_IN_GAME},
{"use_darkgray", &iflags.wc2_darkgray, TRUE, SET_IN_FILE},
#ifdef WIN32CON #ifdef WIN32CON
{"use_inverse", &iflags.wc_inverse, TRUE, SET_IN_GAME}, /*WC*/ {"use_inverse", &iflags.wc_inverse, TRUE, SET_IN_GAME}, /*WC*/
#else #else
@@ -1085,6 +1091,174 @@ STATIC_VAR const struct paranoia_opts {
{ ~0, "all", 3, 0, 0, 0 }, /* ditto */ { ~0, "all", 3, 0, 0, 0 }, /* ditto */
}; };
extern struct menucoloring *menu_colorings;
static const struct {
const char *name;
const int color;
} colornames[] = {
{"black", CLR_BLACK},
{"red", CLR_RED},
{"green", CLR_GREEN},
{"brown", CLR_BROWN},
{"blue", CLR_BLUE},
{"magenta", CLR_MAGENTA},
{"cyan", CLR_CYAN},
{"gray", CLR_GRAY},
{"grey", CLR_GRAY},
{"orange", CLR_ORANGE},
{"lightgreen", CLR_BRIGHT_GREEN},
{"yellow", CLR_YELLOW},
{"lightblue", CLR_BRIGHT_BLUE},
{"lightmagenta", CLR_BRIGHT_MAGENTA},
{"lightcyan", CLR_BRIGHT_CYAN},
{"white", CLR_WHITE}
};
static const struct {
const char *name;
const int attr;
} attrnames[] = {
{"none", ATR_NONE},
{"bold", ATR_BOLD},
{"dim", ATR_DIM},
{"underline", ATR_ULINE},
{"blink", ATR_BLINK},
{"inverse", ATR_INVERSE}
};
/* parse '"regex_string"=color&attr' and add it to menucoloring */
boolean
add_menu_coloring(str)
char *str;
{
int i, c = NO_COLOR, a = ATR_NONE;
struct menucoloring *tmp;
char *tmps, *cs = strchr(str, '=');
#ifdef MENU_COLOR_REGEX_POSIX
int errnum;
char errbuf[80];
#endif
const char *err = (char *)0;
if (!cs || !str) return FALSE;
tmps = cs;
tmps++;
while (*tmps && isspace(*tmps)) tmps++;
for (i = 0; i < SIZE(colornames); i++)
if (strstri(tmps, colornames[i].name) == tmps) {
c = colornames[i].color;
break;
}
if ((i == SIZE(colornames)) && (*tmps >= '0' && *tmps <='9'))
c = atoi(tmps);
if (c > 15) return FALSE;
tmps = strchr(str, '&');
if (tmps) {
tmps++;
while (*tmps && isspace(*tmps)) tmps++;
for (i = 0; i < SIZE(attrnames); i++)
if (strstri(tmps, attrnames[i].name) == tmps) {
a = attrnames[i].attr;
break;
}
if ((i == SIZE(attrnames)) && (*tmps >= '0' && *tmps <='9'))
a = atoi(tmps);
}
*cs = '\0';
tmps = str;
if ((*tmps == '"') || (*tmps == '\'')) {
cs--;
while (isspace(*cs)) cs--;
if (*cs == *tmps) {
*cs = '\0';
tmps++;
}
}
tmp = (struct menucoloring *)alloc(sizeof(struct menucoloring));
#ifdef MENU_COLOR_REGEX
#ifdef MENU_COLOR_REGEX_POSIX
errnum = regcomp(&tmp->match, tmps, REG_EXTENDED | REG_NOSUB);
if (errnum != 0)
{
regerror(errnum, &tmp->match, errbuf, sizeof(errbuf));
err = errbuf;
}
#else
tmp->match.translate = 0;
tmp->match.fastmap = 0;
tmp->match.buffer = 0;
tmp->match.allocated = 0;
tmp->match.regs_allocated = REGS_FIXED;
err = re_compile_pattern(tmps, strlen(tmps), &tmp->match);
#endif
#else
tmp->match = (char *)alloc(strlen(tmps)+1);
(void) memcpy((genericptr_t)tmp->match, (genericptr_t)tmps, strlen(tmps)+1);
#endif
if (err) {
raw_printf("\nMenucolor regex error: %s\n", err);
wait_synch();
free(tmp);
return FALSE;
} else {
tmp->next = menu_colorings;
tmp->color = c;
tmp->attr = a;
menu_colorings = tmp;
return TRUE;
}
}
boolean
get_menu_coloring(str, color, attr)
char *str;
int *color, *attr;
{
struct menucoloring *tmpmc;
if (iflags.use_menu_color)
for (tmpmc = menu_colorings; tmpmc; tmpmc = tmpmc->next)
#ifdef MENU_COLOR_REGEX
# ifdef MENU_COLOR_REGEX_POSIX
if (regexec(&tmpmc->match, str, 0, NULL, 0) == 0) {
# else
if (re_search(&tmpmc->match, str, strlen(str), 0, 9999, 0) >= 0) {
# endif
#else
if (pmatch(tmpmc->match, str)) {
#endif
*color = tmpmc->color;
*attr = tmpmc->attr;
return TRUE;
}
return FALSE;
}
void
free_menu_coloring()
{
struct menucoloring *tmp = menu_colorings;
while (tmp) {
struct menucoloring *tmp2 = tmp->next;
#ifdef MENU_COLOR_REGEX
(void) regfree(&tmp->match);
#else
free(tmp->match);
#endif
free(tmp);
tmp = tmp2;
}
}
void void
parseoptions(opts, tinitial, tfrom_file) parseoptions(opts, tinitial, tfrom_file)
register char *opts; register char *opts;
@@ -1426,6 +1600,16 @@ boolean tinitial, tfrom_file;
return; return;
} }
/* menucolor:"regex_string"=color */
fullname = "menucolor";
if (match_optname(opts, fullname, 9, TRUE)) {
if (negated) bad_negation(fullname, FALSE);
else if ((op = string_for_env_opt(fullname, opts, FALSE)) != 0)
if (!add_menu_coloring(op))
badoption(opts);
return;
}
fullname = "msghistory"; fullname = "msghistory";
if (match_optname(opts, fullname, 3, TRUE)) { if (match_optname(opts, fullname, 3, TRUE)) {
if (duplicate) complain_about_duplicate(opts,1); if (duplicate) complain_about_duplicate(opts,1);
@@ -2484,7 +2668,7 @@ goodfruit:
#if defined(BACKWARD_COMPAT) #if defined(BACKWARD_COMPAT)
fullname = "DECgraphics"; fullname = "DECgraphics";
if (match_optname(opts, fullname, 10, TRUE)) { if (match_optname(opts, fullname, 3, TRUE)) {
boolean badflag = FALSE; boolean badflag = FALSE;
if (duplicate) complain_about_duplicate(opts,1); if (duplicate) complain_about_duplicate(opts,1);
if (!negated) { if (!negated) {
@@ -2508,7 +2692,7 @@ goodfruit:
return; return;
} }
fullname = "IBMgraphics"; fullname = "IBMgraphics";
if (match_optname(opts, fullname, 10, TRUE)) { if (match_optname(opts, fullname, 3, TRUE)) {
const char *sym_name = fullname; const char *sym_name = fullname;
boolean badflag = FALSE; boolean badflag = FALSE;
if (duplicate) complain_about_duplicate(opts,1); if (duplicate) complain_about_duplicate(opts,1);
@@ -2542,7 +2726,7 @@ goodfruit:
#endif #endif
#ifdef MAC_GRAPHICS_ENV #ifdef MAC_GRAPHICS_ENV
fullname = "MACgraphics"; fullname = "MACgraphics";
if (match_optname(opts, fullname, 11, TRUE)) { if (match_optname(opts, fullname, 3, TRUE)) {
boolean badflag = FALSE; boolean badflag = FALSE;
if (duplicate) complain_about_duplicate(opts,1); if (duplicate) complain_about_duplicate(opts,1);
if (!negated) { if (!negated) {
@@ -4396,6 +4580,7 @@ struct wc_Opt wc2_options[] = {
{"fullscreen", WC2_FULLSCREEN}, {"fullscreen", WC2_FULLSCREEN},
{"softkeyboard", WC2_SOFTKEYBOARD}, {"softkeyboard", WC2_SOFTKEYBOARD},
{"wraptext", WC2_WRAPTEXT}, {"wraptext", WC2_WRAPTEXT},
{"use_darkgray", WC2_DARKGRAY},
#ifdef STATUS_VIA_WINDOWPORT #ifdef STATUS_VIA_WINDOWPORT
{"hilite_status", WC2_HILITE_STATUS}, {"hilite_status", WC2_HILITE_STATUS},
#endif #endif
+63 -19
View File
@@ -447,7 +447,8 @@ const char **firstmatch;
{ {
boolean need_to_look = FALSE; boolean need_to_look = FALSE;
int glyph; int glyph;
char look_buf[BUFSZ], prefix[BUFSZ]; static char look_buf[BUFSZ];
char prefix[BUFSZ];
int found = 0; /* count of matching syms found */ int found = 0; /* count of matching syms found */
int i; int i;
int skipped_venom = 0; int skipped_venom = 0;
@@ -678,7 +679,7 @@ do_look(mode, click_cc)
char out_str[BUFSZ]; char out_str[BUFSZ];
const char *firstmatch = 0; const char *firstmatch = 0;
struct permonst *pm = 0; struct permonst *pm = 0;
int i, ans = 0; int i = '\0', ans = 0;
int sym; /* typed symbol or converted glyph */ int sym; /* typed symbol or converted glyph */
int found; /* count of matching syms found */ int found; /* count of matching syms found */
coord cc; /* screen pos of unknown glyph */ coord cc; /* screen pos of unknown glyph */
@@ -688,25 +689,68 @@ do_look(mode, click_cc)
if (!clicklook) { if (!clicklook) {
if (quick) { if (quick) {
from_screen = TRUE; /* yes, we want to use the cursor */ from_screen = TRUE; /* yes, we want to use the cursor */
} else { i = 'y';
i = ynq("Specify unknown object by cursor?"); }
if (i == 'q') return 0;
from_screen = (i == 'y'); if (i != 'y') {
menu_item *pick_list = (menu_item *)0;
winid win;
anything any;
win = create_nhwindow(NHW_MENU);
start_menu(win);
any.a_void = 0; any.a_char ='a';
/* 'y' and 'n' to keep backwards compat with previous versions */
add_menu(win, NO_GLYPH, &any, 'a', 'y', ATR_NONE, "something on the map", MENU_UNSELECTED);
any.a_void = 0; any.a_char ='b';
add_menu(win, NO_GLYPH, &any, 'b', 0, ATR_NONE, "something you're carrying", MENU_UNSELECTED);
any.a_void = 0; any.a_char ='c';
add_menu(win, NO_GLYPH, &any, 'c', 'n', ATR_NONE, "something else", MENU_UNSELECTED);
end_menu(win, "What do you want to look at:");
if (select_menu(win, PICK_ONE, &pick_list) > 0) {
i = pick_list->item.a_char;
free((genericptr_t)pick_list);
}
destroy_nhwindow(win);
} }
if (from_screen) { switch (i) {
cc.x = u.ux; default:
cc.y = u.uy; case 'q': return 0;
sym = 0; /* gcc -Wall lint */ case 'y':
} else { case 'a':
getlin("Specify what? (type the word)", out_str); from_screen = TRUE;
if (out_str[0] == '\0' || out_str[0] == '\033') sym = 0;
return 0; cc.x = u.ux;
if (out_str[1]) { /* user typed in a complete string */ cc.y = u.uy;
checkfile(out_str, pm, TRUE, TRUE); break;
return 0; case 'b':
} {
sym = out_str[0]; char invlet;
struct obj *invobj;
invlet = display_inventory(NULL, TRUE);
if (!invlet) return 0;
for (invobj = invent; invobj; invobj = invobj->nobj)
if (invobj->invlet == invlet) {
strcpy(out_str, singular(invobj, xname));
break;
}
if (!out_str[1]) return 0;
checkfile(out_str, pm, TRUE, TRUE);
return 0;
}
break;
case 'c':
from_screen = FALSE;
getlin("Specify what? (type the word)", out_str);
if (out_str[0] == '\0' || out_str[0] == '\033')
return 0;
if (out_str[1]) { /* user typed in a complete string */
checkfile(out_str, pm, TRUE, TRUE);
return 0;
}
sym = out_str[0];
break;
} }
} else { /* clicklook */ } else { /* clicklook */
cc.x = click_cc->x; cc.x = click_cc->x;
+11 -8
View File
@@ -769,7 +769,9 @@ boolean FDECL((*allow), (OBJ_P));/* allow function */
if (sorted && !printed_type_name) { if (sorted && !printed_type_name) {
any = zeroany; any = zeroany;
add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings, add_menu(win, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
let_to_name(*pack, FALSE), MENU_UNSELECTED); let_to_name(*pack, FALSE,
(how != PICK_NONE) && iflags.menu_head_objsym),
MENU_UNSELECTED);
printed_type_name = TRUE; printed_type_name = TRUE;
} }
@@ -928,8 +930,10 @@ int how; /* type of query */
any.a_int = curr->oclass; any.a_int = curr->oclass;
add_menu(win, NO_GLYPH, &any, invlet++, add_menu(win, NO_GLYPH, &any, invlet++,
def_oc_syms[(int)objects[curr->otyp].oc_class].sym, def_oc_syms[(int)objects[curr->otyp].oc_class].sym,
ATR_NONE, let_to_name(*pack, FALSE), ATR_NONE,
MENU_UNSELECTED); let_to_name(*pack, FALSE,
(how != PICK_NONE) && iflags.menu_head_objsym),
MENU_UNSELECTED);
collected_type_name = TRUE; collected_type_name = TRUE;
} }
} }
@@ -1494,6 +1498,7 @@ doloot() /* loot a container on the floor or loot saddle from mon. */
char qbuf[BUFSZ]; char qbuf[BUFSZ];
int prev_inquiry = 0; int prev_inquiry = 0;
boolean prev_loot = FALSE; boolean prev_loot = FALSE;
int num_conts;
if (check_capacity((char *)0)) { if (check_capacity((char *)0)) {
/* "Can't do that while carrying so much stuff." */ /* "Can't do that while carrying so much stuff." */
@@ -1514,15 +1519,11 @@ doloot() /* loot a container on the floor or loot saddle from mon. */
lootcont: lootcont:
if (container_at(cc.x, cc.y, FALSE)) { if ((num_conts = container_at(cc.x, cc.y, TRUE)) > 0) {
boolean anyfound = FALSE; boolean anyfound = FALSE;
int num_conts = 0;
if (!able_to_loot(cc.x, cc.y, TRUE)) return 0; if (!able_to_loot(cc.x, cc.y, TRUE)) return 0;
for (cobj = level.objects[cc.x][cc.y]; cobj; cobj = cobj->nexthere)
if (Is_container(cobj)) num_conts++;
if (num_conts > 1) { if (num_conts > 1) {
/* use a menu to loot many containers */ /* use a menu to loot many containers */
int n, i; int n, i;
@@ -2120,6 +2121,7 @@ int held;
/* even if the trap fails, you've used up this turn */ /* even if the trap fails, you've used up this turn */
if (multi >= 0) { /* in case we didn't become paralyzed */ if (multi >= 0) { /* in case we didn't become paralyzed */
nomul(-1); nomul(-1);
multi_reason = "opening a container";
nomovemsg = ""; nomovemsg = "";
} }
return 1; return 1;
@@ -2629,6 +2631,7 @@ struct obj *box; /* or bag */
/* even if the trap fails, you've used up this turn */ /* even if the trap fails, you've used up this turn */
if (multi >= 0) { /* in case we didn't become paralyzed */ if (multi >= 0) { /* in case we didn't become paralyzed */
nomul(-1); nomul(-1);
multi_reason = "tipping a container";
nomovemsg = ""; nomovemsg = "";
} }
} else if (box->otyp == BAG_OF_TRICKS || box->otyp == HORN_OF_PLENTY) { } else if (box->otyp == BAG_OF_TRICKS || box->otyp == HORN_OF_PLENTY) {
+1
View File
@@ -1285,6 +1285,7 @@ dogaze()
-d((int)mtmp->m_lev+1, -d((int)mtmp->m_lev+1,
(int)mtmp->data->mattk[0].damd) (int)mtmp->data->mattk[0].damd)
: -200); : -200);
multi_reason = "frozen by a monster's gaze";
nomovemsg = 0; nomovemsg = 0;
return 1; return 1;
} else } else
+8 -6
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 potion.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ /* NetHack 3.5 potion.c $NHDT-Date: 1426953330 2015/03/21 15:55:30 $ $NHDT-Branch: master $:$NHDT-Revision: 1.99 $ */
/* NetHack 3.5 potion.c $Date: 2013/11/05 00:57:55 $ $Revision: 1.91 $ */ /* NetHack 3.5 potion.c $Date: 2013/11/05 00:57:55 $ $Revision: 1.91 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -375,6 +375,7 @@ ghost_from_bottle()
if(flags.verbose) if(flags.verbose)
You("are frightened to death, and unable to move."); You("are frightened to death, and unable to move.");
nomul(-3); nomul(-3);
multi_reason = "being frightened to death";
nomovemsg = "You regain your composure."; nomovemsg = "You regain your composure.";
} }
@@ -678,6 +679,7 @@ peffects(otmp)
Your("%s are frozen to the %s!", Your("%s are frozen to the %s!",
makeplural(body_part(FOOT)), surface(u.ux, u.uy)); makeplural(body_part(FOOT)), surface(u.ux, u.uy));
nomul(-(rn1(10, 25 - 12*bcsign(otmp)))); nomul(-(rn1(10, 25 - 12*bcsign(otmp))));
multi_reason = "frozen by a potion";
nomovemsg = You_can_move_again; nomovemsg = You_can_move_again;
exercise(A_DEX, FALSE); exercise(A_DEX, FALSE);
} }
@@ -1053,7 +1055,7 @@ boolean useeit;
const char *objphrase; /* "Your widget glows" or "Steed's saddle glows" */ const char *objphrase; /* "Your widget glows" or "Steed's saddle glows" */
{ {
void FDECL((*func), (OBJ_P)) = 0; void FDECL((*func), (OBJ_P)) = 0;
const char *how = 0, *glowcolor = 0; const char *glowcolor = 0;
#define COST_alter (-2) #define COST_alter (-2)
#define COST_none (-1) #define COST_none (-1)
int costchange = COST_none; int costchange = COST_none;
@@ -1062,7 +1064,6 @@ const char *objphrase; /* "Your widget glows" or "Steed's saddle glows" */
if (!potion || potion->otyp != POT_WATER) return FALSE; if (!potion || potion->otyp != POT_WATER) return FALSE;
if (potion->blessed) { if (potion->blessed) {
how = "softly glow";
if (targobj->cursed) { if (targobj->cursed) {
func = uncurse; func = uncurse;
glowcolor = NH_AMBER; glowcolor = NH_AMBER;
@@ -1074,7 +1075,6 @@ const char *objphrase; /* "Your widget glows" or "Steed's saddle glows" */
altfmt = TRUE; /* "with a <color> aura" */ altfmt = TRUE; /* "with a <color> aura" */
} }
} else if (potion->cursed) { } else if (potion->cursed) {
how = "glow";
if (targobj->blessed) { if (targobj->blessed) {
func = unbless; func = unbless;
glowcolor = "brown"; glowcolor = "brown";
@@ -1467,6 +1467,7 @@ register struct obj *obj;
if (!Free_action) { if (!Free_action) {
pline("%s seems to be holding you.", Something); pline("%s seems to be holding you.", Something);
nomul(-rnd(5)); nomul(-rnd(5));
multi_reason = "frozen by a potion";
nomovemsg = You_can_move_again; nomovemsg = You_can_move_again;
exercise(A_DEX, FALSE); exercise(A_DEX, FALSE);
} else You("stiffen momentarily."); } else You("stiffen momentarily.");
@@ -1476,6 +1477,7 @@ register struct obj *obj;
if (!Free_action && !Sleep_resistance) { if (!Free_action && !Sleep_resistance) {
You_feel("rather tired."); You_feel("rather tired.");
nomul(-rnd(5)); nomul(-rnd(5));
multi_reason = "sleeping off a magical draught";
nomovemsg = You_can_move_again; nomovemsg = You_can_move_again;
exercise(A_DEX, FALSE); exercise(A_DEX, FALSE);
} else You("yawn."); } else You("yawn.");
@@ -1664,8 +1666,8 @@ dodip()
rider_cant_reach(); /* not skilled enough to reach */ rider_cant_reach(); /* not skilled enough to reach */
} else { } else {
if (obj->otyp == POT_ACID) obj->in_use = 1; if (obj->otyp == POT_ACID) obj->in_use = 1;
(void) water_damage(obj, 0, TRUE); if (water_damage(obj, 0, TRUE) != ER_DESTROYED && obj->in_use)
if (obj->in_use) useup(obj); useup(obj);
} }
return 1; return 1;
} }
+58 -11
View File
@@ -1,4 +1,4 @@
/* NetHack 3.5 pray.c $NHDT-Date$ $NHDT-Branch$:$NHDT-Revision$ */ /* NetHack 3.5 pray.c $NHDT-Date: 1427670643 2015/03/29 23:10:43 $ $NHDT-Branch: master $:$NHDT-Revision: 1.69 $ */
/* NetHack 3.5 pray.c $Date: 2012/05/07 01:44:38 $ $Revision: 1.62 $ */ /* NetHack 3.5 pray.c $Date: 2012/05/07 01:44:38 $ $Revision: 1.62 $ */
/* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1269,6 +1269,7 @@ dosacrifice()
dmon->mpeaceful = TRUE; dmon->mpeaceful = TRUE;
You("are terrified, and unable to move."); You("are terrified, and unable to move.");
nomul(-3); nomul(-3);
multi_reason = "being terrified of a demon";
nomovemsg = 0; nomovemsg = 0;
} else pline_The("%s.", demonless_msg); } else pline_The("%s.", demonless_msg);
} }
@@ -1655,6 +1656,7 @@ dopray()
} }
} }
nomul(-3); nomul(-3);
multi_reason = "praying";
nomovemsg = "You finish your prayer."; nomovemsg = "You finish your prayer.";
afternmv = prayer_done; afternmv = prayer_done;
@@ -1817,6 +1819,7 @@ doturn()
} }
} }
nomul(-5); nomul(-5);
multi_reason = "trying to turn the monsters";
nomovemsg = You_can_move_again; nomovemsg = You_can_move_again;
return(1); return(1);
} }
@@ -1860,26 +1863,70 @@ aligntyp alignment;
return gnam; return gnam;
} }
static const char *hallu_gods[] = {
"the Flying Spaghetti Monster", /* Church of the FSM */
"Eris", /* Discordianism */
"the Martians", /* every science fiction ever */
"Xom", /* Crawl */
"AnDoR dRaKoN", /* ADOM */
"the Central Bank of Yendor", /* economics */
"Tooth Fairy", /* real world(?) */
"Om", /* Discworld */
"Yawgmoth", /* Magic: the Gathering */
"Morgoth", /* LoTR */
"Cthulhu", /* Lovecraft */
"the Ori", /* Stargate */
"destiny", /* why not? */
"your Friend the Computer", /* Paranoia */
};
/* hallucination handling for priest/minion names: select a random god /* hallucination handling for priest/minion names: select a random god
iff character is hallucinating */ iff character is hallucinating */
const char * const char *
halu_gname(alignment) halu_gname(alignment)
aligntyp alignment; aligntyp alignment;
{ {
const char *gnam; const char *gnam = NULL;
int which; int which;
if (!Hallucination) return align_gname(alignment); if (!Hallucination)
return align_gname(alignment);
which = randrole(); /* The priest may not have initialized god names. If this is the
switch (rn2(3)) { * case, and we roll priest, we need to try again. */
case 0: gnam = roles[which].lgod; break; do
case 1: gnam = roles[which].ngod; break; which = randrole();
case 2: gnam = roles[which].cgod; break; while (!roles[which].lgod);
default: gnam = 0; break; /* lint suppression */
switch (rn2(9)) {
case 0:
case 1:
gnam = roles[which].lgod;
break;
case 2:
case 3:
gnam = roles[which].ngod;
break;
case 4:
case 5:
gnam = roles[which].cgod;
break;
case 6:
case 7:
gnam = hallu_gods[rn2(sizeof hallu_gods / sizeof *hallu_gods)];
break;
case 8:
gnam = Moloch;
break;
default:
impossible("rn2 broken in halu_gname?!?");
} }
if (!gnam) gnam = Moloch; if (!gnam) {
if (*gnam == '_') ++gnam; impossible("No random god name?");
gnam = "your Friend the Computer"; /* Paranoia */
}
if (*gnam == '_')
++gnam;
return gnam; return gnam;
} }

Some files were not shown because too many files have changed in this diff Show More