.SEGMENT "FENSHIRE" .FUNCT PLAIN-F,RARG,PIECE EQUAL? RARG,M-LOOK \?CCL3 PRINTI "You are on an amazingly flat plain of " ADD RANK,FILE MOD STACK,2 ZERO? STACK \?CCL6 PRINTI "sun-bleached sand" JUMP ?CND4 ?CCL6: PRINTI "deep, rich loam" ?CND4: PRINTI ". The plain seems to stretch endlessly in all directions" EQUAL? RANK,1,8 /?CCL8 EQUAL? FILE,1,8 \?CND7 ?CCL8: PRINTI ", except to the " EQUAL? RANK,1 \?CCL13 PRINTI "north" EQUAL? FILE,1 \?CCL16 PRINTI " and west" JUMP ?CND11 ?CCL16: EQUAL? FILE,8 \?CND11 PRINTI " and east" JUMP ?CND11 ?CCL13: EQUAL? RANK,8 \?CCL19 PRINTI "south" EQUAL? FILE,1 \?CCL22 PRINTI " and west" JUMP ?CND11 ?CCL22: EQUAL? FILE,8 \?CND11 PRINTI " and east" JUMP ?CND11 ?CCL19: EQUAL? FILE,1 \?CCL25 PRINTI "west" JUMP ?CND11 ?CCL25: PRINTI "east" ?CND11: PRINTI ", where the world seems to end in a gray void" ?CND7: PRINTC 46 RTRUE ?CCL3: EQUAL? RARG,M-END \FALSE CALL FIND-IN,HERE,BLACKBIT >PIECE ZERO? PIECE \?PEN31 CALL FIND-IN,HERE,WHITEBIT >PIECE ?PEN31: ZERO? PIECE /FALSE FSET? PIECE,TOUCHBIT /FALSE FSET PIECE,TOUCHBIT RANDOM 100 LESS? 30,STACK /FALSE PRINTI " The " ICALL2 DPRINT,PIECE PRINTR " notices your cloak and bows gracefully. ""Greetings, Lordship. It's been a long time between moves -- I'll bet you've got a great one planned!""" .FUNCT PLAIN-MOVEMENT-F,RARG ZERO? RARG \FALSE EQUAL? RANK,1 \?PRD6 EQUAL? PRSO,P?NW,P?NE,P?NORTH /?CCL4 ?PRD6: EQUAL? RANK,8 \?PRD9 EQUAL? PRSO,P?SW,P?SE,P?SOUTH /?CCL4 ?PRD9: EQUAL? FILE,8 \?PRD12 EQUAL? PRSO,P?SE,P?NE,P?EAST /?CCL4 ?PRD12: EQUAL? FILE,1 \?CND1 EQUAL? PRSO,P?SW,P?NW,P?WEST \?CND1 ?CCL4: PRINTI "The world ends at a gray void in that direction." CRLF RFALSE ?CND1: EQUAL? PRSO,P?NW,P?NE,P?NORTH \?CND17 DEC 'RANK ?CND17: EQUAL? PRSO,P?SW,P?SE,P?SOUTH \?CND19 INC 'RANK ?CND19: EQUAL? PRSO,P?NE,P?SE,P?EAST \?CND21 INC 'FILE ?CND21: EQUAL? PRSO,P?NW,P?SW,P?WEST \?CND23 DEC 'FILE ?CND23: ICALL STORE,PLAIN-OFFSET,PLAIN-LOC SUB RANK,1 MUL STACK,8 ADD STACK,FILE SUB STACK,1 >PLAIN-LOC ICALL UNSTORE,PLAIN-OFFSET,PLAIN-LOC RETURN PLAIN .SEGMENT "0" .FUNCT PIECE-F,ARG,CNT FSET? WINNER,BLACKBIT /?CTR2 FSET? WINNER,WHITEBIT \?CCL3 ?CTR2: ZERO? TIME-STOPPED /?CCL8 SET 'P-CONT,-1 PRINTI "Seemingly frozen," ICALL2 TPRINT,WINNER PRINTR " is unresponsive." ?CCL8: EQUAL? PRSA,V?WALK \?CCL10 EQUAL? PRSO,P?UP,P?OUT,P?IN /?CTR9 EQUAL? PRSO,P?DOWN \?CCL10 ?CTR9: SET 'DIR-CNT,0 PRINT CANNOT-TRAVEL ICALL1 STOP RTRUE ?CCL10: EQUAL? PRSA,V?WALK \?PRD18 ZERO? P-WALK-DIR \?CCL16 ?PRD18: EQUAL? PRSA,V?MOVE \?CTR15 EQUAL? PRSO,INTDIR /?CCL16 ?CTR15: SET 'DIR-CNT,0 EQUAL? PRSA,V?WALK \?CCL25 CALL NOUN-USED?,PRSO,W?ONE ZERO? STACK /?CCL25 PRINTI "[The proper way to ask" ICALL2 TPRINT,WINNER PRINTR " to move is simply to tell the direction(s), as in >CHARACTER, NW.NW]" ?CCL25: SET 'P-CONT,-1 PRINTR """You can tell me directions. That's it.""" ?CCL16: EQUAL? HERE,PLAIN,CONSTRUCTION /?CCL29 SET 'P-CONT,-1 PRINTR """The terrain is strange and unfamiliar; I am too terrified to move!""" ?CCL29: EQUAL? DIR-CNT,7 \?CCL31 SET 'DIR-CNT,0 SET 'P-CONT,-1 PRINTR """Too many directions!""" ?CCL31: EQUAL? PRSA,V?MOVE \?CND32 CALL1 DIRECTION-CONVERSION >PRSO ?CND32: PUT PIECE-MOVE-TABLE,DIR-CNT,PRSO IGRTR? 'DIR-CNT,1 \?CCL36 EQUAL? WINNER,WHITE-KNIGHT,BLACK-KNIGHT /?CCL36 SUB DIR-CNT,2 GET PIECE-MOVE-TABLE,STACK EQUAL? PRSO,STACK /?CCL36 SET 'DIR-CNT,0 COPYT PIECE-MOVE-TABLE,0,16 PRINT CANNOT-TRAVEL ICALL1 STOP RTRUE ?CCL36: ZERO? P-CONT \?CTR40 ZERO? M-PTR /?CCL41 ?CTR40: SET 'CLOCK-WAIT,TRUE-VALUE RTRUE ?CCL41: SET 'DIR-CNT,0 ICALL1 MOVE-PIECE RTRUE ?CCL3: EQUAL? PRSA,V?ENTER \?CCL45 EQUAL? PRSO,WHITE-CASTLE \?CCL45 CALL NOUN-USED?,WHITE-CASTLE,W?MAN ZERO? STACK \?CCL45 PRINTR "Oddly, there doesn't seem to be any entrance." ?CCL45: EQUAL? PRSA,V?ENTER \?CCL50 EQUAL? PRSO,BLACK-KNIGHT,WHITE-KNIGHT \?CCL50 CALL NOUN-USED?,PRSO,W?HORSE ZERO? STACK /?CCL50 PRINTR "The horse isn't large enough for two riders." ?CCL50: EQUAL? PRSA,V?MOVE \?CCL55 PRINTI "Perhaps you should tell" ICALL1 TPRINT-PRSO PRINTR " the direction(s)." ?CCL55: EQUAL? PRSA,V?GIVE \?CCL57 FSET? PRSO,TRYTAKEBIT /?CCL57 CALL FIND-IN,PRSO,TRYTAKEBIT ZERO? STACK \?CCL57 FSET? PRSI,WHITEBIT /?CTR56 FSET? PRSI,BLACKBIT \?CCL57 ?CTR56: ZERO? TIME-STOPPED /?CND64 ICALL PERFORM,V?TELL,PRSI RTRUE ?CND64: MOVE PRSO,PRSI PRINTI "The " ICALL2 DPRINT,PRSI PRINTI " takes" ICALL1 TPRINT-PRSO PRINTC 46 EQUAL? PRSO,PIGEON \?CCL68 CALL2 META-LOC,PERCH EQUAL? HERE,STACK /?CCL68 EQUAL? HERE,OUBLIETTE \?CTR67 EQUAL? REMOVED-PERCH-LOC,OUBLIETTE /?CCL68 ?CTR67: CALL2 PIECE-TAKES-PIGEON,PRSI RSTACK ?CCL68: PRINTR " ""Your graciousness is not unappreciated, your Lordship.""" ?CCL57: EQUAL? PRSA,V?ASK-FOR \FALSE LOC PRSI FSET? STACK,WHITEBIT /?CCL75 LOC PRSI FSET? STACK,BLACKBIT \FALSE ?CCL75: ICALL PERFORM,V?TAKE,PRSI RTRUE .FUNCT PIECE-TAKES-PIGEON,PIECE,DO-CR ASSIGNED? 'DO-CR /?CND1 SET 'DO-CR,TRUE-VALUE ?CND1: ICALL2 MOVE-TO-PERCH,PIECE PRINTI " Instantly," EQUAL? PIECE,WHITE-CASTLE \?CCL5 PRINTI " the tower" JUMP ?CND3 ?CCL5: ICALL2 TPRINT,PIECE ?CND3: PRINTI " seems to grow more distant without moving. Within seconds," EQUAL? PIECE,WHITE-CASTLE \?CCL8 PRINTI " the tower" JUMP ?CND6 ?CCL8: ICALL2 TPRINT,PIECE ?CND6: PRINTI " is gone." ZERO? DO-CR /TRUE CRLF RTRUE .FUNCT MOVE-PIECE,CNT,DIR,NEW-RANK,NEW-FILE,NEW-LOC,X,OFFSET,BLOCK,?TMP1 SET 'NEW-RANK,RANK SET 'NEW-FILE,FILE SUB NEW-RANK,1 MUL STACK,8 >?TMP1 SUB NEW-FILE,1 ADD ?TMP1,STACK >NEW-LOC SET 'CNT,0 ?PRG1: GET PIECE-MOVE-TABLE,CNT >DIR EQUAL? DIR,FALSE-VALUE /?REP2 EQUAL? DIR,P?NORTH,P?NE,P?NW \?CND5 DEC 'NEW-RANK ?CND5: EQUAL? DIR,P?EAST,P?NE,P?SE \?CND7 INC 'NEW-FILE ?CND7: EQUAL? DIR,P?SOUTH,P?SE,P?SW \?CND9 INC 'NEW-RANK ?CND9: EQUAL? DIR,P?WEST,P?SW,P?NW \?CND11 DEC 'NEW-FILE ?CND11: INC 'CNT EQUAL? HERE,CONSTRUCTION \?CND13 EQUAL? WINNER,BLACK-KNIGHT,WHITE-KNIGHT /?CND13 CALL OBSTRUCTION,NEW-LOC,DIR ZERO? STACK /?CND13 SET 'BLOCK,TRUE-VALUE EQUAL? DIR,P?EAST \?CCL20 EQUAL? NEW-LOC,47 \?CCL20 PRINTI """Appearances deceive you -- such a move would send me off the edge of the world!""" CRLF JUMP ?REP2 ?CCL20: PRINTI """My word! There appears to be a wall in the way!""" CRLF JUMP ?REP2 ?CND13: SUB NEW-RANK,1 MUL STACK,8 >?TMP1 SUB NEW-FILE,1 ADD ?TMP1,STACK >NEW-LOC GET PIECE-MOVE-TABLE,CNT ZERO? STACK /?PRG1 EQUAL? WINNER,BLACK-KNIGHT,WHITE-KNIGHT /?PRG1 CALL2 PIECE-AT-NEW-LOC?,NEW-LOC ZERO? STACK /?PRG1 SET 'BLOCK,TRUE-VALUE PRINTI """Alas, the path between here and there is not unobstructed.""" CRLF ?REP2: GET PIECE-MOVE-TABLE,0 CALL2 DIR-TO-STRING,STACK >DIR COPYT PIECE-MOVE-TABLE,0,16 ZERO? BLOCK \TRUE CALL ILLEGAL-MOVE?,NEW-LOC,NEW-RANK,NEW-FILE >X EQUAL? X,M-FATAL \?CCL32 PRINTR """That land is occupied!""" ?CCL32: ZERO? X /?CCL34 PRINT CANNOT-TRAVEL CALL1 STOP RSTACK ?CCL34: GRTR? NEW-RANK,8 /?CTR35 GRTR? NEW-FILE,8 /?CTR35 LESS? NEW-RANK,1 /?CTR35 LESS? NEW-FILE,1 \?CCL36 ?CTR35: PRINTI """You would have me plunge off the end of the world" EQUAL? HERE,CONSTRUCTION \?CND41 PRINTI " -- or whatever passes for the end of the world in this forsaken badland" ?CND41: PRINTR "!""" ?CCL36: CALL2 TAKE-PIECE?,NEW-LOC ZERO? STACK \FALSE REMOVE WINNER PRINTI """I'm off!"" The " PRINTD WINNER EQUAL? WINNER,WHITE-KNIGHT,BLACK-KNIGHT \?CCL47 PRINTI " and his steed jump high into the air and vanish! A moment later, you hear a proud whinny in the distance." JUMP ?CND45 ?CCL47: PRINTI " moves out of sight to the " PRINT DIR PRINTC 46 ?CND45: CRLF EQUAL? WINNER,WHITE-PAWN \?CCL50 EQUAL? HERE,PLAIN \?CCL50 LESS? NEW-LOC,8 \?CCL50 ICALL ROB,WHITE-PAWN,WHITE-QUEEN SET 'WINNER,WHITE-QUEEN JUMP ?CND48 ?CCL50: EQUAL? WINNER,BLACK-PAWN \?CND48 EQUAL? HERE,PLAIN \?CND48 GRTR? NEW-LOC,55 \?CND48 ICALL ROB,BLACK-PAWN,BLACK-QUEEN SET 'WINNER,BLACK-QUEEN ?CND48: EQUAL? HERE,PLAIN \?CCL60 SET 'OFFSET,PLAIN-OFFSET JUMP ?CND58 ?CCL60: SET 'OFFSET,CONSTRUCTION-OFFSET ?CND58: ADD NEW-LOC,OFFSET ICALL PIECE-SNARF,STACK,WINNER CALL PUT-IN-STORAGE,OFFSET,WINNER,NEW-LOC RSTACK .FUNCT DIR-TO-STRING,DIR EQUAL? DIR,P?UP \?CCL3 RETURN STR?912 ?CCL3: EQUAL? DIR,P?DOWN \?CCL5 RETURN STR?913 ?CCL5: EQUAL? DIR,P?NORTH \?CCL7 RETURN STR?198 ?CCL7: EQUAL? DIR,P?NE \?CCL9 RETURN STR?828 ?CCL9: EQUAL? DIR,P?EAST \?CCL11 RETURN STR?827 ?CCL11: EQUAL? DIR,P?SE \?CCL13 RETURN STR?263 ?CCL13: EQUAL? DIR,P?SOUTH \?CCL15 RETURN STR?199 ?CCL15: EQUAL? DIR,P?SW \?CCL17 RETURN STR?826 ?CCL17: EQUAL? DIR,P?WEST \?CCL19 RETURN STR?824 ?CCL19: EQUAL? DIR,P?NW \FALSE RETURN STR?825 .FUNCT PIECE-SNARF,NEW-LOC,SNARFER,OBJ,CNT,TOOK-PIGEON ?PRG1: LESS? CNT,STORAGE-TABLE-LENGTH \?REP2 GET STORAGE-TABLE,CNT EQUAL? STACK,NEW-LOC \?CND3 ADD CNT,1 GET STORAGE-TABLE,STACK >OBJ FSET? OBJ,TAKEBIT \?CND3 FSET? OBJ,TRYTAKEBIT /?CND3 CALL FIND-IN,OBJ,TRYTAKEBIT ZERO? STACK \?CND3 EQUAL? OBJ,PIGEON \?CND12 SET 'TOOK-PIGEON,TRUE-VALUE ?CND12: MOVE OBJ,SNARFER PUT STORAGE-TABLE,CNT,0 ADD CNT,1 PUT STORAGE-TABLE,STACK,0 ?CND3: ADD CNT,2 >CNT JUMP ?PRG1 ?REP2: ZERO? TOOK-PIGEON /FALSE CALL2 MOVE-TO-PERCH,SNARFER RSTACK .FUNCT TAKE-PIECE?,NEW-LOC,TAKEE,VAL CALL2 PIECE-AT-NEW-LOC?,NEW-LOC >TAKEE ZERO? TAKEE \?CCL3 RETURN VAL ?CCL3: FSET? TAKEE,WHITEBIT \?PRD7 FSET? WINNER,WHITEBIT /?CTR4 ?PRD7: FSET? TAKEE,BLACKBIT \?CCL5 FSET? WINNER,BLACKBIT \?CCL5 ?CTR4: PRINTI """I cannot attack one of my own side!""" CRLF SET 'VAL,TRUE-VALUE RETURN VAL ?CCL5: ICALL PIECE-AT-NEW-LOC?,NEW-LOC,TRUE-VALUE RETURN VAL .FUNCT ILLEGAL-MOVE?,NEW-LOC,NEW-RANK,NEW-FILE,TAKEE,OLD-LOC EQUAL? HERE,PLAIN \?CCL3 SET 'OLD-LOC,PLAIN-LOC JUMP ?CND1 ?CCL3: SET 'OLD-LOC,CONSTRUCTION-LOC ?CND1: EQUAL? WINNER,WHITE-KNIGHT,BLACK-KNIGHT \?CCL6 SUB OLD-LOC,NEW-LOC EQUAL? STACK,6,10,15 /FALSE SUB OLD-LOC,NEW-LOC EQUAL? STACK,17,-6,-10 /FALSE SUB OLD-LOC,NEW-LOC EQUAL? STACK,-15,-17 /FALSE RTRUE ?CCL6: EQUAL? WINNER,WHITE-KING,BLACK-KING \?CCL14 SUB OLD-LOC,NEW-LOC EQUAL? STACK,1,7,8 /FALSE SUB OLD-LOC,NEW-LOC EQUAL? STACK,9,-1,-7 /FALSE SUB OLD-LOC,NEW-LOC EQUAL? STACK,-8,-9 /FALSE RTRUE ?CCL14: EQUAL? WINNER,BLACK-BISHOP \?CCL22 GRTR? OLD-LOC,NEW-LOC \?CCL25 SUB OLD-LOC,NEW-LOC MOD STACK,7 ZERO? STACK /FALSE SUB OLD-LOC,NEW-LOC MOD STACK,9 ZERO? STACK /FALSE RTRUE ?CCL25: SUB NEW-LOC,OLD-LOC MOD STACK,7 ZERO? STACK /FALSE SUB NEW-LOC,OLD-LOC MOD STACK,9 ZERO? STACK /FALSE RTRUE ?CCL22: EQUAL? WINNER,WHITE-CASTLE \?CCL37 EQUAL? RANK,NEW-RANK /FALSE EQUAL? FILE,NEW-FILE /FALSE RTRUE ?CCL37: EQUAL? WINNER,WHITE-QUEEN,BLACK-QUEEN \?CCL44 EQUAL? RANK,NEW-RANK /FALSE EQUAL? FILE,NEW-FILE /FALSE GRTR? NEW-LOC,OLD-LOC \?CCL51 SUB NEW-LOC,OLD-LOC MOD STACK,7 ZERO? STACK /FALSE SUB NEW-LOC,OLD-LOC MOD STACK,9 ZERO? STACK /FALSE ?CCL51: GRTR? OLD-LOC,NEW-LOC \TRUE SUB OLD-LOC,NEW-LOC MOD STACK,7 ZERO? STACK /FALSE SUB OLD-LOC,NEW-LOC MOD STACK,9 ZERO? STACK /FALSE RTRUE ?CCL44: EQUAL? WINNER,BLACK-PAWN \?CCL63 CALL2 PIECE-AT-NEW-LOC?,NEW-LOC >TAKEE EQUAL? OLD-LOC,14 \?CCL66 EQUAL? NEW-LOC,30 \?CCL66 ZERO? TAKEE /FALSE RETURN 2 ?CCL66: SUB NEW-LOC,OLD-LOC EQUAL? STACK,7,9 \?CCL75 ZERO? TAKEE \FALSE RTRUE ?CCL75: SUB NEW-LOC,OLD-LOC EQUAL? STACK,8 \TRUE ZERO? TAKEE /FALSE RETURN 2 ?CCL63: EQUAL? WINNER,WHITE-PAWN \?CCL87 CALL2 PIECE-AT-NEW-LOC?,NEW-LOC >TAKEE EQUAL? OLD-LOC,49 \?CCL90 EQUAL? NEW-LOC,33 \?CCL90 ZERO? TAKEE /FALSE RETURN 2 ?CCL90: SUB OLD-LOC,NEW-LOC EQUAL? STACK,7,9 \?CCL99 ZERO? TAKEE \FALSE RTRUE ?CCL99: SUB OLD-LOC,NEW-LOC EQUAL? STACK,8 \TRUE ZERO? TAKEE /FALSE RETURN 2 ?CCL87: PRINTR "Bug7" .FUNCT PIECE-AT-NEW-LOC?,NEW-LOC,TAKE-PIECE,CNT,TAKEE EQUAL? HERE,CONSTRUCTION \?CCL3 PUSH CONSTRUCTION-OFFSET JUMP ?CND1 ?CCL3: PUSH PLAIN-OFFSET ?CND1: ADD NEW-LOC,STACK >NEW-LOC ?PRG4: GET STORAGE-TABLE,CNT EQUAL? NEW-LOC,STACK \?CND6 ADD CNT,1 GET STORAGE-TABLE,STACK >TAKEE FSET? TAKEE,WHITEBIT /?CCL9 FSET? TAKEE,BLACKBIT \?CND6 ?CCL9: ZERO? TAKE-PIECE /?REP5 ICALL ROB,TAKEE,WINNER PUT STORAGE-TABLE,CNT,0 JUMP ?REP5 ?CND6: ADD CNT,2 >CNT LESS? CNT,STORAGE-TABLE-LENGTH /?PRG4 ?REP5: ZERO? TAKEE /FALSE FSET? TAKEE,WHITEBIT /?CTR19 FSET? TAKEE,BLACKBIT \FALSE ?CTR19: RETURN TAKEE .FUNCT OBSTRUCTION,L,DIR,CALLED-BY-EXIT-F,CHANGE EQUAL? DIR,P?NORTH \?CCL3 INTBL? L,NORTH-EXITS,11 /?CTR2 ADD L,100 INTBL? STACK,NORTH-EXITS,11 \?CCL3 ?CTR2: SET 'CHANGE,-8 JUMP ?CND1 ?CCL3: EQUAL? DIR,P?NE \?CCL9 INTBL? L,NE-EXITS,17 \?CCL9 SET 'CHANGE,-7 JUMP ?CND1 ?CCL9: EQUAL? DIR,P?EAST \?CCL13 EQUAL? L,47 \?CCL16 ZERO? CALLED-BY-EXIT-F /?CCL16 SET 'CHANGE,100 JUMP ?CND1 ?CCL16: INTBL? L,EAST-EXITS,15 \?CND1 SET 'CHANGE,1 JUMP ?CND1 ?CCL13: EQUAL? DIR,P?SE \?CCL21 INTBL? L,SE-EXITS,7 /?CTR20 ADD L,100 INTBL? STACK,SE-EXITS,7 \?CCL21 ?CTR20: SET 'CHANGE,9 JUMP ?CND1 ?CCL21: EQUAL? DIR,P?SOUTH \?CCL27 ADD L,8 INTBL? STACK,NORTH-EXITS,11 /?CTR26 ADD L,108 INTBL? STACK,NORTH-EXITS,11 \?CCL27 ?CTR26: SET 'CHANGE,8 JUMP ?CND1 ?CCL27: EQUAL? DIR,P?SW \?CCL33 ADD L,7 INTBL? STACK,NE-EXITS,17 \?CCL33 SET 'CHANGE,7 JUMP ?CND1 ?CCL33: EQUAL? DIR,P?WEST \?CCL37 SUB L,1 INTBL? STACK,EAST-EXITS,15 \?CCL37 SET 'CHANGE,-1 JUMP ?CND1 ?CCL37: EQUAL? DIR,P?NW \?CND1 SUB L,9 INTBL? STACK,SE-EXITS,7 /?CCL40 ADD L,91 INTBL? STACK,SE-EXITS,7 \?CND1 ?CCL40: SET 'CHANGE,-9 ?CND1: ZERO? CALLED-BY-EXIT-F /?CCL47 RETURN CHANGE ?CCL47: ZERO? CHANGE /TRUE RFALSE .ENDSEG .SEGMENT "LOWER" .FUNCT CONSTRUCTION-ENTER-F,RARG ZERO? RARG \FALSE SET 'CONSTRUCTION-LOC,47 RETURN CONSTRUCTION .SEGMENT "0" .FUNCT HAMMER-F EQUAL? PRSA,V?KILL \?CCL3 EQUAL? PRSI,HAMMER \?CCL3 ICALL PERFORM,V?MUNG,PRSO,HAMMER RTRUE ?CCL3: EQUAL? PRSA,V?MUNG \FALSE EQUAL? PRSI,HAMMER \FALSE FSET? PRSO,ANIMATEDBIT \FALSE PRINTI "Fortunately," ICALL1 TPRINT-PRSO PRINTR " evades your blow." .ENDSEG .SEGMENT "LOWER" .FUNCT CONSTRUCTION-F,RARG,CNT EQUAL? RARG,M-LOOK \?CCL3 INTBL? CONSTRUCTION-LOC,NORTH-EXITS,11 \?CND4 INC 'CNT ?CND4: INTBL? CONSTRUCTION-LOC,NE-EXITS,17 \?CND6 INC 'CNT ?CND6: INTBL? CONSTRUCTION-LOC,EAST-EXITS,15 \?CND8 INC 'CNT ?CND8: INTBL? CONSTRUCTION-LOC,SE-EXITS,7 \?CND10 INC 'CNT ?CND10: ADD CONSTRUCTION-LOC,8 INTBL? STACK,NORTH-EXITS,11 \?CND12 INC 'CNT ?CND12: ADD CONSTRUCTION-LOC,7 INTBL? STACK,NE-EXITS,17 \?CND14 INC 'CNT ?CND14: SUB CONSTRUCTION-LOC,1 INTBL? STACK,EAST-EXITS,15 \?CND16 INC 'CNT ?CND16: SUB CONSTRUCTION-LOC,9 INTBL? STACK,SE-EXITS,7 \?CND18 INC 'CNT ?CND18: PRINTI "You are in an abandoned underground construction site, roughly octagonal in shape. " GRTR? CNT,0 \?CND20 PRINTI "There " EQUAL? CNT,1 \?CCL24 PRINTI "is an exit" JUMP ?CND22 ?CCL24: PRINTI "are exits" ?CND22: PRINTI " to the " INTBL? CONSTRUCTION-LOC,NORTH-EXITS,11 \?CND25 PRINTI "north" DEC 'CNT ICALL2 AND-OR-COMMA,CNT ?CND25: INTBL? CONSTRUCTION-LOC,NE-EXITS,17 \?CND27 PRINTI "northeast" DEC 'CNT ICALL2 AND-OR-COMMA,CNT ?CND27: INTBL? CONSTRUCTION-LOC,EAST-EXITS,15 \?CND29 PRINTI "east" DEC 'CNT ICALL2 AND-OR-COMMA,CNT ?CND29: INTBL? CONSTRUCTION-LOC,SE-EXITS,7 \?CND31 PRINTI "southeast" DEC 'CNT ICALL2 AND-OR-COMMA,CNT ?CND31: ADD CONSTRUCTION-LOC,8 INTBL? STACK,NORTH-EXITS,11 \?CND33 PRINTI "south" DEC 'CNT ICALL2 AND-OR-COMMA,CNT ?CND33: ADD CONSTRUCTION-LOC,7 INTBL? STACK,NE-EXITS,17 \?CND35 PRINTI "southwest" DEC 'CNT ICALL2 AND-OR-COMMA,CNT ?CND35: SUB CONSTRUCTION-LOC,1 INTBL? STACK,EAST-EXITS,15 \?CND37 PRINTI "west" DEC 'CNT ICALL2 AND-OR-COMMA,CNT ?CND37: SUB CONSTRUCTION-LOC,9 INTBL? STACK,SE-EXITS,7 \?CND39 PRINTI "northwest" DEC 'CNT ICALL2 AND-OR-COMMA,CNT ?CND39: PRINTI ". " ?CND20: EQUAL? CONSTRUCTION-LOC,47 \?CND41 PRINTI "Also, a heavily used passage leads east. " ?CND41: PRINTI "Engraved on the wall is the number " PRINTN CONSTRUCTION-LOC PRINTC 46 RTRUE ?CCL3: EQUAL? RARG,M-ENTER \FALSE DIV CONSTRUCTION-LOC,8 ADD STACK,1 >RANK MOD CONSTRUCTION-LOC,8 ADD STACK,1 >FILE CALL UNSTORE,CONSTRUCTION-OFFSET,CONSTRUCTION-LOC RSTACK .FUNCT AND-OR-COMMA,CNT EQUAL? CNT,1 \?CCL3 PRINTI " and " RTRUE ?CCL3: GRTR? CNT,1 \FALSE PRINTI ", " RTRUE .FUNCT CONSTRUCTION-MOVEMENT-F,RARG,CHANGE ZERO? RARG \FALSE ICALL STORE,CONSTRUCTION-OFFSET,CONSTRUCTION-LOC CALL OBSTRUCTION,CONSTRUCTION-LOC,PRSO,TRUE-VALUE >CHANGE EQUAL? CHANGE,100 \?CND3 RETURN FIELD-OFFICE ?CND3: DIV CONSTRUCTION-LOC,8 ADD STACK,1 >RANK MOD CONSTRUCTION-LOC,8 ADD STACK,1 >FILE ZERO? CHANGE \?CCL7 ICALL UNSTORE,CONSTRUCTION-OFFSET,CONSTRUCTION-LOC ICALL1 CANT-GO RFALSE ?CCL7: ADD CONSTRUCTION-LOC,CHANGE >CONSTRUCTION-LOC ICALL UNSTORE,CONSTRUCTION-OFFSET,CONSTRUCTION-LOC RETURN CONSTRUCTION .SEGMENT "0" .FUNCT REMOVE-ANY-PIECE,L,TAKER,TAKEE,CNT ?PRG1: LESS? CNT,STORAGE-TABLE-LENGTH \TRUE GET STORAGE-TABLE,CNT EQUAL? STACK,L \?CND3 ADD CNT,1 GET STORAGE-TABLE,STACK >TAKEE FSET? TAKEE,WHITEBIT /?CCL8 FSET? TAKEE,BLACKBIT \?CND3 ?CCL8: ICALL ROB,TAKEE,TAKER PUT STORAGE-TABLE,CNT,0 ADD CNT,1 PUT STORAGE-TABLE,STACK,0 ?CND3: ADD CNT,2 >CNT JUMP ?PRG1 .FUNCT PUT-IN-STORAGE,OFFSET,OBJ,L,CNT ?PRG1: GET STORAGE-TABLE,CNT ZERO? STACK \?CCL5 ADD L,OFFSET PUT STORAGE-TABLE,CNT,STACK ADD CNT,1 PUT STORAGE-TABLE,STACK,OBJ RTRUE ?CCL5: ADD CNT,2 >CNT JUMP ?PRG1 .ENDSEG .SEGMENT "VILLAGE" .SEGMENT "FENSHIRE" .SEGMENT "LOWER" .FUNCT STORE,OFFSET,L,RM,CNT,F,N ASSIGNED? 'RM /?CND1 SET 'RM,HERE ?CND1: FIRST? RM >F /?PRG4 ?PRG4: ZERO? F /TRUE NEXT? F >N /?CND6 ?CND6: EQUAL? F,PROTAGONIST /?CND10 ?PRG12: EQUAL? F,JESTER \?CCL16 ICALL1 REMOVE-J JUMP ?CND10 ?CCL16: GET STORAGE-TABLE,CNT ZERO? STACK \?CCL18 ADD L,OFFSET PUT STORAGE-TABLE,CNT,STACK ADD CNT,1 PUT STORAGE-TABLE,STACK,F ADD CNT,2 >CNT REMOVE F ?CND10: SET 'F,N JUMP ?PRG4 ?CCL18: ADD CNT,2 >CNT JUMP ?PRG12 .FUNCT UNSTORE,OFFSET,L,RM,CNT,?TMP1 ASSIGNED? 'RM /?PRG3 SET 'RM,HERE ?PRG3: LESS? CNT,STORAGE-TABLE-LENGTH \TRUE GET STORAGE-TABLE,CNT >?TMP1 ADD L,OFFSET EQUAL? ?TMP1,STACK \?CND5 ADD CNT,1 GET STORAGE-TABLE,STACK MOVE STACK,RM PUT STORAGE-TABLE,CNT,0 ADD CNT,1 PUT STORAGE-TABLE,STACK,0 ?CND5: ADD CNT,2 >CNT JUMP ?PRG3 .ENDSEG .ENDI