From huttar@cs.oberlin.edu Mon Aug 20 07:35:02 2001
Path: ulcc.ac.uk!server3.netnews.ja.net!newspeer.clara.net!news.clara.net!newsfeed.online.be!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!newsfeed.stanford.edu!postnews1.google.com!not-for-mail
From: huttar@cs.oberlin.edu (Lars Huttar)
Newsgroups: rec.games.roguelike.nethack
Subject: Re: Testing a new level.
Date: 19 Aug 2001 21:51:00 -0700
Organization: http://groups.google.com/
Lines: 507
Message-ID: <772187dd.0108192051.4081438e@posting.google.com>
References: <772187dd.0108091839.662a1aad@posting.google.com> <9l10q2$5eu$2@news-int.gatech.edu>
NNTP-Posting-Host: 208.145.80.32
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
X-Trace: posting.google.com 998283061 10400 127.0.0.1 (20 Aug 2001 04:51:01 GMT)
X-Complaints-To: groups-abuse@google.com
NNTP-Posting-Date: 20 Aug 2001 04:51:01 GMT
Xref: ulcc.ac.uk rec.games.roguelike.nethack:143716

[Snipped by Ali for archive purposes]

First the diffs for the level description and dungeon definition files:

------------------ begin diffs ------------------------------------
*** nethack-3.3.1/dat/sokoban.des.orig	Wed Aug  9 13:44:22 2000
--- nethack-3.3.1/dat/sokoban.des	Sun Aug 19 23:26:39 2001
***************
*** 616,618 ****
--- 616,822 ----
  REGION:(18,09,22,15),lit,"zoo",filled,true
  OBJECT:'"',"amulet of reflection",place[0]
  ENGRAVING:place[0],burn,"Elbereth"
+ 
+ 
+ MAZE:"soko1-3",' '
+ FLAGS:noteleport
+ GEOMETRY:center,top
+ #1234567890123456789012345678901234567890123456789012345678
+ MAP
+             ---------                      |-| |-|
+     ---------.......--                   ---.---.---
+  HHHS.........-----..--                 |-|...|...|-|
+ HH  --.-S-.----.|.--..--             # |-...........-|
+ H    |.|.F.F.S..|..--..|       H  HHHH |..|...|...|..|    #
+ H    |.|.F.F.|..+...|..|       H  H   --.---.---.---.--   #
+ #    |.|.F.F.|--|...|..|       HHHH  -|...|...|...|...|-  #
+ HH ---.---.---..|...|..--------S-    |.................+###
+  H#+............+...+...........|    -|...|...|...|...|-  #
+    ---.---.---..|...|..----------     --.---.---.---.--   #
+      |.|.F.F.|--|...|..|             -|...|...|...|...|-  #
+      |.|.F.F.|..+...|..|           ##+.................|  #
+      |.|.F.F.S..|..--..|          ## -|...|...|...|...|-  #
+     --.-S-.----.|.--..--  ##H######   --.---.---.---.--  ##
+   ##+.........-----..--  ##            |..|...|...|..|  ### 
+  ## ---------.......--  ##      #HHHH  |-...........-|  ###
+  #          ---------   #          H    |-|...|...|-|   ###
+  ##                     #                ---.---.---
+   #####################################    |-| |-|
+                 H####     H##   #######
+ ENDMAP
+ 
+ RANDOM_PLACES:(48,3),(40,7),(44,7),(48,7),(52,7),(44,11),(48,11),(52,11),(44,15)
+ STAIR:(57,15),down
+ REGION:(00,00,58,19),lit,"ordinary"
+ NON_PASSWALL:(00,00,58,19)
+ # Make all non-diggable except (35-39,17-18)!
+ NON_DIGGABLE:(00,00,58,16)
+ NON_DIGGABLE:(00,17,34,18)
+ NON_DIGGABLE:(40,17,58,18)
+ NON_DIGGABLE:(00,19,58,19)
+ # A clue to diggability is the object placed in the wall nearby.
+ # Ignore "object placed in wall" warning!
+ OBJECT:'*',random,(37,17)
+ 
+ 
+ # Boulders: main maze
+ OBJECT:'`',"boulder",(44,02)
+ OBJECT:'`',"boulder",(48,02)
+ 
+ OBJECT:'`',"boulder",(43,03)
+ OBJECT:'`',"boulder",(45,03)
+ OBJECT:'`',"boulder",(47,03)
+ OBJECT:'`',"boulder",(49,03)
+ 
+ OBJECT:'`',"boulder",(44,04)
+ OBJECT:'`',"boulder",(48,04)
+ #
+ OBJECT:'`',"boulder",(40,06)
+ OBJECT:'`',"boulder",(44,06)
+ OBJECT:'`',"boulder",(48,06)
+ OBJECT:'`',"boulder",(52,06)
+ 
+ OBJECT:'`',"boulder",(39,07)
+ OBJECT:'`',"boulder",(41,07)
+ OBJECT:'`',"boulder",(43,07)
+ OBJECT:'`',"boulder",(45,07)
+ OBJECT:'`',"boulder",(47,07)
+ OBJECT:'`',"boulder",(49,07)
+ OBJECT:'`',"boulder",(51,07)
+ OBJECT:'`',"boulder",(53,07)
+ 
+ OBJECT:'`',"boulder",(40,08)
+ OBJECT:'`',"boulder",(44,08)
+ OBJECT:'`',"boulder",(48,08)
+ OBJECT:'`',"boulder",(52,08)
+ #
+ OBJECT:'`',"boulder",(40,10)
+ OBJECT:'`',"boulder",(44,10)
+ OBJECT:'`',"boulder",(48,10)
+ OBJECT:'`',"boulder",(52,10)
+ 
+ OBJECT:'`',"boulder",(39,11)
+ OBJECT:'`',"boulder",(41,11)
+ OBJECT:'`',"boulder",(43,11)
+ OBJECT:'`',"boulder",(45,11)
+ OBJECT:'`',"boulder",(47,11)
+ OBJECT:'`',"boulder",(49,11)
+ OBJECT:'`',"boulder",(51,11)
+ OBJECT:'`',"boulder",(53,11)
+ 
+ OBJECT:'`',"boulder",(40,12)
+ OBJECT:'`',"boulder",(44,12)
+ OBJECT:'`',"boulder",(48,12)
+ OBJECT:'`',"boulder",(52,12)
+ #
+ OBJECT:'`',"boulder",(44,14)
+ OBJECT:'`',"boulder",(48,14)
+ 
+ OBJECT:'`',"boulder",(43,15)
+ OBJECT:'`',"boulder",(45,15)
+ OBJECT:'`',"boulder",(47,15)
+ OBJECT:'`',"boulder",(49,15)
+ 
+ OBJECT:'`',"boulder",(44,16)
+ OBJECT:'`',"boulder",(48,16)
+ 
+ # Rest of level:
+ OBJECT:'`',"boulder",(08,02)
+ OBJECT:'`',"boulder",(10,08)
+ OBJECT:'`',"boulder",(12,14)
+ 
+ # This one is on top of prize.
+ OBJECT:'`',"boulder",(14,08)
+ 
+ # Traps
+ # Random trap in main maze
+ TRAP:"hole",place[0]
+ 
+ TRAP:"hole",(11,08)
+ TRAP:"hole",(13,08)
+ 
+ TRAP:"rolling boulder",(58,09)
+ TRAP:"hole",(58,08)
+ 
+ TRAP:"hole",(21,07)
+ TRAP:"hole",(21,08)
+ TRAP:"hole",(21,09)
+ TRAP:"rolling boulder",(24,08)
+ 
+ # Quick exit
+ TRAP:"hole",(04,08)
+ 
+ # Bonus traps in secret tunnels
+ TRAP:"polymorph",(32,15)
+ TRAP:"level teleport",(37,03)
+ TRAP:"land mine",(00,06)
+ 
+ # South puzzle
+ TRAP:"hole",         (11,18)
+ TRAP:"hole",         (13,18)
+ TRAP:"hole",         (15,18)
+ OBJECT:'`',"boulder",(17,18)
+ OBJECT:'`',"boulder",(19,18)
+ TRAP:"hole",         (21,18)
+ OBJECT:'`',"boulder",(27,18)
+ TRAP:"hole",         (29,18)
+ TRAP:"hole",         (31,18)
+ OBJECT:'`',"boulder",(33,18)
+ OBJECT:'`',"boulder",(35,18)
+ OBJECT:'`',"boulder",(37,18)
+ 
+ # Random objects
+ # Many will be inaccessible in the maze... :-(
+ OBJECT:'%',random,random
+ OBJECT:'%',random,random
+ OBJECT:'%',random,random
+ OBJECT:'%',random,random
+ OBJECT:'=',random,random
+ OBJECT:'/',random,random
+ 
+ DOOR:closed,(16,05)
+ DOOR:closed,(16,08)
+ DOOR:closed,(16,11)
+ DOOR:locked,(20,08)
+ DOOR:closed,(04,14)
+ DOOR:closed,(03,08)
+ DOOR:closed,(37,11)
+ DOOR:closed,(55,07)
+ 
+ # Secret doors
+ DOOR:locked,(04,02)
+ DOOR:locked,(08,03)
+ DOOR:locked,(08,13)
+ DOOR:locked,(13,04)
+ DOOR:locked,(13,12)
+ DOOR:locked,(31,07)
+ 
+ # Dark cages containing shooters
+ # Add in bows & arrows explicitly in case they have none?
+ MONSTER: '@', "Green-elf",(08,05),hostile
+ REGION:(08,04,08,06),unlit,"ordinary"
+ MONSTER: '@', "Green-elf",(08,11),hostile
+ REGION:(08,10,08,12),unlit,"ordinary"
+ MONSTER: 'o', "Uruk-hai",(12,05),hostile
+ REGION:(12,04,12,06),unlit,"ordinary"
+ MONSTER: 'o', "Uruk-hai",(12,11),hostile
+ REGION:(12,10,12,12),unlit,"ordinary"
+ 
+ REGION:(17,03,19,13),lit,"zoo",filled,true
+ 
+ # Main prize
+ OBJECT:'[',"oilskin cloak",(14,08)
+ ENGRAVING:(14,08),burn,"Elbereth"
+ # Other goodies
+ OBJECT[50%]:'/',random,(15,03)
+ OBJECT[50%]:'=',random,(15,13)
+ 
+ OBJECT[50%]:'(',"magic marker",(12,10),random,+20
+ # Spinach
+ OBJECT[50%]:'%',"tin",(12,06),uncursed,1
+ 
+ # Rotten
+ OBJECT:'%',"tin",(12,06),cursed,1
+ OBJECT:'%',"tin",(12,06),cursed,-1
+ OBJECT:'%',"tin",(12,06),uncursed,-1
+ OBJECT:'%',"tin",(12,06),uncursed,-1
*** nethack-3.3.1/dat/dungeon.def.orig	Sun Aug 29 21:58:58 1999
--- nethack-3.3.1/dat/dungeon.def	Sat Jul 28 02:13:46 2001
***************
*** 96,102 ****
  DESCRIPTION:    mazelike
  ALIGNMENT:      neutral
  ENTRY:          -1
! RNDLEVEL:		"soko1" "none" @ (1, 0) 2
  RNDLEVEL:		"soko2" "none" @ (2, 0) 2
  RNDLEVEL:		"soko3" "none" @ (3, 0) 2
  RNDLEVEL:		"soko4" "none" @ (4, 0) 2
--- 96,102 ----
  DESCRIPTION:    mazelike
  ALIGNMENT:      neutral
  ENTRY:          -1
! RNDLEVEL:		"soko1" "none" @ (1, 0) 3
  RNDLEVEL:		"soko2" "none" @ (2, 0) 2
  RNDLEVEL:		"soko3" "none" @ (3, 0) 2
  RNDLEVEL:		"soko4" "none" @ (4, 0) 2
------------------- end diffs ----------------------



------------------- begin soko1-3.txt -------------------------
Spoilers for soko1-3, a variant of the upper Sokoban level
by Lars Huttar, lars_huttar at mail dot com


Non-spoiler hints:

1) This level IS solvable without cheating and incurring luck penalties.
   Don't give up.  But, not all the secrets to be found are "required".
   You can just take the main prize and go home.


2) The big round boulder maze on the right:
   Look for the "hole" trap. Its location determines how this maze
   is to be solved.  The rooms in this maze can only be passed through
   in certain ways; the room with the hole in its floor is a little more
   flexible.  If you know which way you need to exit from the room with
   the hole, the rest is easy.
   Working backwards mentally from the exit door may help.


3) Players have come to expect that in Sokoban, there's no point in
   digging horizontally or searching. That's no longer true with this level.


Spoilers:




1) The rolling boulder traps should be obvious.  Trigger the trap to
   roll a boulder into a hole.  Make sure you have enough hitpoints
   to withstand being squashed.

2) The round maze: to enter a room in this maze, you have to push a boulder
   into the middle; and this prevents you from proceeding in the same direction
   through the room and out the other side. You must turn either left or right.
   So your path through the maze will be a zigzag, consisting of left and right
   turns.
   However, because of the relative placement of the exit and entrance, it's
   not possible to get from one to the other if you have to turn every time.
   The key, then, is to find a way to go straight through one room without
   turning.  So make your way to the room with the hole in it.
   Once you push a boulder into the hole, you can rearrange the other boulders 
   and exit this room on the opposite side from where you came in.
   From there, find your zig-zagging way to the exit.

3) The linear boulder puzzle at the bottom: search for a hidden bit of
   corridor, a little to the right of the T intersection.  This will
   allow you to go around the first boulder and move it left into the hole.
   Then go left and move each of these two boulders (you will have to search
   for a little more corridor) into the two holes to the right.  This will
   make three more boulders accessible which can fill the three holes to the
   left.
   Once you're in the 3-boulder area, look for the gem.  This marks a diggable
   area. Dig in there and search, and you'll find a hidden corridor that leads
   to the polymorph trap.  Use that trap if you want to be something you're not.

4) The west area: of the three east-west passages, pick the middle one.
   Standing in the hallway west of the two boulders and two holes, push
   the boulder near you into its hole.  Proceed north between the cages
   and east around to the door with holes in front of it.
   If there is a boulder in front of the door, go trigger the rolling
   boulder trap to the east to roll it away.  Trigger the trap again
   to roll it back and plug the hole.  Watch your hp.  At the east
   end of this corridor is a secret door and passageway that leads to
   the teleport-level trap.  Use this for a shortcut back to the main
   dungeon when finished, if you like.
   By the way, the two western cages (with elves in them) have secret doors
   in their northern and southern walls.
   The other two cages (with orcs) have secret doors into the zoo.
   In the northwest corner of the map is a secret door and passage that
   leads to the landmine. You can disarm it if you like and take it with
   you... or use it to destroy a boulder without penalty (but you shoudn't
   really need to on this level).

5) The zoo: once you've slain the monsters, you can search the back rooms
   for stuff. Remember the secret doors to the orc cages; these cages may
   contain spinach and/or a magic marker. The middle of the back rooms contains
   a boulder; push this off into the adjacent hole.  Underneath is the prize.
   Once finished, you can either go back to the stairs, or jump down the hole
   at the middle-west end of the map, or go through the teleport level trap
   via the corridor east of the zoo.




Comments on game balance:

Is this level reasonably balanced with the other variants of the top
level of Sokoban?  Will the random choice of this variant versus
another heavily influence the outcome of a game?

There's no doubt this level is very different from the other two.
It's much more detailed and has more variety of dungeon features.
This makes for a more interesting game, but in itself I don't think
it affects game balance.

Material differences: The main prize for this level, a slippery
cloak, is IMO less advantageous to a typical player at this
stage in the game than an amulet of reflection or a bag of
holding.  Both of those are of very general usefulness.
A slippery cloak only helps against certain monsters and their
attacks; but in those cases it *really* helps and many players
would feel uncomfortable trying to ascend, or even cross the
Medusa level, without one.  So I feel that a slippery cloak
gives the player less boost in the short term but is still
something worth climbing the Sokoban branch for.

Another material disadvantage of this level is that when
the round maze is completed, there are still many boulders
left and thus many squares where the randomly-placed ring
or wand may lie inaccessible.  On other Sokoban levels,
few boulders are left at the end.

On the positive side, this level also contains a few smaller prizes
in set places, each with 50% probability: a second random wand,
a second random ring, a tin of spinach (hidden among other tins,
some of which are rotten), and a magic marker (0,20).  So on average,
two of these extras are likely to appear.


Does this level break the Sokoban ambience?

I would call it an expansion on a theme.  The level has strong unity
with the other two top levels, in that there is a boulder puzzle
(actually a series of them) which ends in reaching a treasure zoo;
through the zoo one can reach three rooms, one of which contains
the special prize, which lies on a square engraved "Elbereth".

Yes, this level uses features the others don't: rolling boulder
traps, diggable areas, secret doors and passages, iron bars,
darkness, specially-placed monsters, holes spread out over the map,
and "optional" holes.
But the essential features of a Sokoban level are the same: you cannot
reach the goal unless you figure out how to manipulate the boulders to
fill certain holes, and not to block your passage.
------------------- end soko1-3.txt -------------------------------------


Feedback is appreciated.

Lars
lars_huttar at mail dot com

