Merge branch 'master' into nhmall-booktribute
Conflicts: include/context.h
This commit is contained in:
+2
-2
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -20,3 +20,4 @@ nhdat
|
|||||||
dlb.lst
|
dlb.lst
|
||||||
guioptions
|
guioptions
|
||||||
porthelp
|
porthelp
|
||||||
|
NetHack.ad
|
||||||
|
|||||||
+184
-172
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
File diff suppressed because it is too large
Load Diff
+41
-17
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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);
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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 */
|
||||||
|
|||||||
@@ -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
@@ -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 || \
|
||||||
|
|||||||
@@ -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"
|
||||||
|
|||||||
@@ -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
@@ -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 */
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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);
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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));
|
||||||
|
|
||||||
|
|||||||
@@ -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') {
|
||||||
|
|||||||
@@ -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
@@ -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 */
|
||||||
|
|||||||
@@ -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.");
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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");
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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.");
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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));
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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) {
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
Reference in New Issue
Block a user