{*** TRANSITIONS ***}
	hitms = (($eq ($verb) %1) :
			(%2 : ($move .ME %2))
			($setg GO TRUE)
			(%3: (($parm 3)))
		)
		;
	synvb = (($eq ($verb) %1) :
			($setg Verb %2));
road1(ACTION) = ($setv n s e w ne nw se sw u d)
		(hitms n gard1 0)
		(hitms s gard5 0)
		(hitms e road2 0)
		(hitms w road3 0)
		(hitms ne gard2 0)
		(hitms nw gard3 0)
		(hitms se gard6 0)
		(hitms sw gard7 0)
		;

road2(ACTION) = 
		(hitms n gard2 0)
		(hitms s gard6 0)
		(hitms e road7 0)
		(hitms w road1 0)
		(hitms ne gard2 0)
		(hitms nw gard1 0)
		(hitms se gard6 0)
		(hitms sw gard5 0)
		;

road3(ACTION) = 
		(hitms n gard3 0)
		(hitms s gard7 0)
		(hitms e road1 0)
		(hitms w road8 entr8)
		(hitms ne gard1 0)
		(hitms nw gard3 0)
		(hitms se gard5 0)
		(hitms sw gard7 0)
		;

road4(ACTION) = 
		(hitms n farm1 0)
		(hitms s road7 0)
		(hitms e frst1 0)
		(hitms w gard2 0)
		(hitms ne frst1 0)
		(hitms nw gard2 0)
		(hitms se frst1 0)
		(hitms sw gard2 0)
		;

road5(ACTION) = 
		(hitms n road7 0)
		(hitms s road6 0)
		(hitms e frst1 0)
		(hitms w gard6 0)
		(hitms ne frst1 0)
		(hitms nw gard6 0)
		(hitms se frst1 0)
		(hitms sw gard6 0)
		;

road6(ACTION) = 
		(hitms n road5 0)
		(hitms s town1 0)
		(hitms e frst1 0)
		(hitms w gard6 0)
		(hitms ne frst1 0)
		(hitms nw gard6 0)
		(hitms se frst1 0)
		(hitms sw gard6 0)
		;

road7(ACTION) = 
		(hitms n road4 0)
		(hitms s road5 0)
		(hitms e frst1 0)
		(hitms w road2 0)
		(hitms ne frst1 0)
		(hitms nw gard2 0)
		(hitms se frst1 0)
		(hitms sw gard6 0)
		;

road8(ACTION) = ($miss tress tress east8 west8 0 0 0 0 0 0);

east8 = 
	($setg GO TRUE)
	( ($eq @HWY8 0) : ($move .ME road3)
      { ELSE } :        (dump8 ($cont road8))
			($setg HWY8 ($minus @HWY8 1))
			(get8 ($cont roadx))
			(Slook 0 ($loc .ME))
			($setg LOOKP FALSE)
		);

west8 =
		($setg GO TRUE)
			(dump8 ($cont road8))
			($setg HWY8 ($plus @HWY8 1))
			(get8 ($cont roadx))
			(Slook 0 ($loc .ME))
			($setg LOOKP FALSE);

dump8 = (($link %1) : (dump8 ($link %1)))       { start at bottom }
	(($ne %1 .ME) :                 { Everything else leaves }
		($setp %1 RDLOC @HWY8)  { Retain its location on HWY 8 }
		($move %1 roadx)        { Put it in the box }
	);

get8 =  ( %1 :
		(get8 ($link %1))
		(($eq ($prop %1 RDLOC) @HWY8) :
			($move %1 road8)
		)
	);

entr8 =         (dump8 ($cont road8))
		($setg HWY8 0)
		(get8 ($cont roadx));






gard1(ACTION) = 
		(hitms n gard4 0)
		(hitms s road1 0)
		(hitms e gard2 0)
		(hitms w gard3 0)
		;

gard2(ACTION) = 
		(hitms n gard4 0)
		(hitms s road2 0)
		(hitms e gard2 0)
		(hitms w gard1 0)
		;

gard3(ACTION) = 
		(hitms n gard4 0)
		(hitms s road3 0)
		(hitms e gard1 0)
		(hitms w gard3 0)
		;

gard4(ACTION) = 
		(hitms n gard4 0)
		(hitms s gard1 0)
		(hitms e gard2 0)
		(hitms w gard3 0)
		;


gard5(ACTION) = 
		(hitms n road1 0)
		(hitms s gard8 0)
		(hitms e gard6 0)
		(hitms w gard7 0)
		;

gard6(ACTION) = 
		(hitms n road2 0)
		(hitms s gard8 0)
		(hitms e gard6 0)
		(hitms w gard5 0)
		;

gard7(ACTION) = 
		(hitms n road3 0)
		(hitms s gard8 0)
		(hitms e gard5 0)
		(hitms w gard7 0)
		;

gard8(ACTION) = 
		(hitms n gard5 0)
		(hitms s gard8 0)
		(hitms e gard6 0)
		(hitms w gard7 0)
		;




frst1(ACTION) = 
		(hitms n frst3 0)
		(hitms s frst1 0)
		(hitms e frst2 0)
		(hitms w frst2 0)
		;

frst2(ACTION) = 
		(hitms n frst1 0)
		(hitms s frst2 0)
		(hitms e frst2 0)
		(hitms w frst1 0)
		;

frst3(ACTION) = 
		(hitms n frst1 0)
		(hitms s frst4 0)
		(hitms e frst2 0)
		(hitms w frst2 0)
		;

frst4(ACTION) = 
		(hitms n frst3 0)
		(hitms s frst2 0)
		(hitms e frst1 0)
		(hitms w road7 0)
		;


farm1 (ACTION) =
		(synvb enter north)
		
		(hitms n farm2 0)
		(hitms s road4 0)
		(hitms e farm3 0)
		(hitms w farm4 0)
		(hitms ne farm3 0)
		(hitms nw farm4 0)
		;

farm2 (ACTION) =
		(synvb out s)
		(synvb enter n)
		(synvb east up)

		(hitms n farm6 0)
		(hitms s farm1 0)
		(hitms up farm7 0)
		;

farm3 (ACTION) =
		(hitms n farm5 0)
		(hitms s farm1 0)
		(hitms e frst1 0)
		(hitms nw farm5 0)
		(hitms sw farm1 0)
		;

farm4 (ACTION) =
		(hitms n farm5 0)
		(hitms s farm1 0)
		(hitms w gard4 0)
		(hitms ne farm5 0)
		(hitms se farm1 0)
		;

farm5 (ACTION) =
		(hitms e farm3 0)
		(hitms w farm4 0)
		(hitms se farm3 0)
		(hitms sw farm4 0)
		;

farm6 (ACTION) =
		(hitms out farm2 0)
		(hitms s farm2 0)
		;
farm7 (ACTION) =
		(hitms e farm2 0)
		(hitms d farm2 PanL)
		 ;


town1 (ACTION) =
		(hitms n road6 0)
		(hitms s town2 0)
		(hitms e town3 0)
		(hitms w town4 0)
		;

town2 (ACTION) =
		(hitms n town1 0)
		(hitms e town5 0)
		(hitms w town6 0)
		;

town3 (ACTION) =
		(hitms out town1 0)
		(hitms w town1 0)
		;

town4 (ACTION) =
		(hitms e town1 0)
		(hitms out town1 0)
		;

town5 (ACTION) =
		(hitms w town2 0)
		(hitms out town2 0)
		(TWN5x);

town6 (ACTION) =
		(hitms e town2 0)
		(hitms out town2 0)
		;


cel01 (ACTION) = 

		(hitms n cel02 0)
		(hitms s 0 ny)
		(hitms w cel04 0)
		(hitms u farm7 0)
		;
cel02 (ACTION) =
		(hitms n cel05 0)
		(hitms s cel01 0)
		(hitms e 0 ny)
		;

cel03 (ACTION) =
		(hitms s cel05 0)
		(hitms w cel13 0)
		(hitms ne cel09 0)
		(hitms d cel09 0)
		;

cel04 (ACTION) =
		(synvb down north)
		(hitms n cel10 0)
		(hitms e cel01 0)
		(hitms w cel08 0)
		;


MV56=($setg Cel6x 5);
MV76=($setg Cel6x 7);
MV67=( ($and ($ne @Cel6x 7)
	     ($prop dragon AWAKE)): ($say
"The ice dragon blocks your attempt to cross!\n\n")
		:         ($move .ME cel07) );

MV65=( ($and ($ne @Cel6x 5)
	     ($prop dragon AWAKE)): ($say
"The ice dragon blocks your attempt to leave!\n")
		:         ($move .ME cel05) );


cel05 (ACTION) =
		(hitms n cel03 0)
		(hitms s cel02 0)
		(hitms ne cel06 MV56)
		;

cel06 (ACTION) =
		(hitms e 0 MV67)
		(hitms w 0 MV65)
		(($eq ($loc .ME) cel06) {still here}:
			($setg LOOKP TRUE)
		)
		  ;

cel07 (ACTION) =
		(synvb out west)
		(hitms w cel06 MV76)
		;

cel08 (ACTION) =
		(hitms e cel04 0)
		(hitms w 0 ny)
		;

cel09 (ACTION) =
		(hitms n 0 ny)
		;

cel10 (ACTION) =
		(hitms s cel04 0)
		(hitms d cel11 0)
		;

cel11 (ACTION) =
		(hitms e cel12 0)
		(hitms n 0 ny)
		;

cel12 (ACTION) =
		(hitms n cel11 0)
		(hitms e 0 ny)
		;

cel13 (ACTION) = (($eq ($verb) down):
			(($prop cel13 HOLED):
				($say "You plunge into the icy waters!\n")
				($move .ME cel14)
				($exit 1)
			)
		  )
		  (($eq ($verb) drop):
		    (cdrop)
		    (($not ($prop cel13 HOLED)):
			(($ge ($prop ($dobj) WEIGH)
			      ($prop [red crystal] WEIGH)
			 ):
				($say 
"You have broken the ice!  You watch helplessly as ")
				(($sdisc ($dobj)))
				($say "
sinks swiftly into the dark and frigid depths.\n")
				($setp cel13 HOLED TRUE)
				($move hole cel13)
				($move ($dobj) .ALL)
				($exit 1)
			{else}:			{give him a hint}
				($say
"The icy floor chips a little, but remains intact.\n")
			)
		   )
		   ($exit 1)
		)
		(hitms e cel03 0)
		(hitms w 0 ny)
		;

cel14 (ACTION) =
		(($eq ($verb) up):
			(($prop cel13 HOLED):
			    ($say "You pop out through a hole in the ice!\n")
			    ($move .ME cel13)
			    ($exit 1)
		:{else}
			    ($say  "You are blocked by an icy roof above!\n")
			 )
		 )
		(hitms w cel15 0)
		
		(($eq ($loc .ME) cel14):	{ Poor sap didn't move.}
				($say
"Your breath expires.  The last thing you feel is the odd sensation
of water filling your lungs.  ") (die)
		);
