enchanter/globals.zap

425 lines
11 KiB
Plaintext
Raw Normal View History

2019-04-14 04:05:06 +03:00
.FUNCT NULL-F
RFALSE
.FUNCT GROUND-F
EQUAL? PRSA,V?CLIMB-FOO,V?CLIMB-ON,V?CLIMB-UP /?THN6
EQUAL? PRSA,V?BOARD \FALSE
?THN6: PRINTR "You've got better things to do."
.FUNCT CORRIDOR-F
EQUAL? PRSA,V?WALK-TO,V?THROUGH \FALSE
CALL USE-DIRECTIONS
RSTACK
.FUNCT WALLS-F
EQUAL? WALLS,PRSO \?ELS5
EQUAL? HERE,NORTH-CELL \?ELS5
CALL PERFORM,PRSA,STONE-WALL
RSTACK
?ELS5: FSET? HERE,RMUNGBIT \?ELS9
EQUAL? PRSA,V?EXAMINE \?ELS14
PRINTR "The wall is stained and noisome."
?ELS14: EQUAL? PRSA,V?LISTEN \FALSE
PRINTR "That's noisome, not noisy!"
?ELS9: EQUAL? PRSA,V?LOOK-INSIDE \FALSE
PRINTR "They're translucent, not transparent!"
.FUNCT CRETIN
EQUAL? PRSA,V?ESCAPE \?ELS5
PRINTR "There's no escaping yourself."
?ELS5: EQUAL? PRSA,V?PUT \?ELS9
EQUAL? PRSO,EGG \?ELS9
PRINTR "If you don't succeed, there will be plenty of egg on your face."
?ELS9: EQUAL? PRSA,V?BURN \?ELS15
PRINTR "Ouch!"
?ELS15: EQUAL? PRSA,V?LISTEN \?ELS19
PRINTR "Yes?"
?ELS19: EQUAL? PRSA,V?ALARM \?ELS23
PRINTR "You are obviously awake already."
?ELS23: EQUAL? PRSA,V?GUNCHO \?ELS27
PRINTI "You vanish into oblivion where, to the relief of much of the Circle, you will be unable to do much harm."
CRLF
CALL FINISH
RSTACK
?ELS27: EQUAL? PRSA,V?FROTZ \?ELS31
FSET PLAYER,ONBIT
SET 'ALWAYS-LIT,TRUE-VALUE
PRINTR "You are bathed in a sickly yellow light, bright enough to read by."
?ELS31: EQUAL? PRSA,V?BLORB \?ELS35
CALL JIGS-UP,STR?48,FALSE-VALUE
RTRUE
?ELS35: EQUAL? PRSA,V?KULCAD \?ELS37
PRINTR "You seem real enough already."
?ELS37: EQUAL? PRSA,V?EXAMINE \?ELS41
PRINTR "You are not a pretty sight."
?ELS41: EQUAL? PRSA,V?GIVE \?ELS45
PRINTR "I think you're a little confused."
?ELS45: EQUAL? PRSA,V?ATTACK,V?MUNG,V?KILL \?ELS49
PRINTR "You don't need my help to do that!"
?ELS49: EQUAL? PRSA,V?FIND \?ELS53
PRINTR "You're right here!"
?ELS53: EQUAL? PRSA,V?CUT \FALSE
EQUAL? PRSI,MAGIC-KNIFE \FALSE
PRINTR "I should think one experience with that knife would be enough. I wouldn't press my luck."
.FUNCT WINDOW-F
EQUAL? PRSA,V?LOOK-INSIDE \?ELS5
GRTR? TOD,NIGHTFALL \?ELS10
PRINTR "It's too dark to make out much of anything."
?ELS10: GETP HERE,P?TEXT
PRINT STACK
CRLF
RTRUE
?ELS5: EQUAL? PRSA,V?OPEN \?ELS18
PRINTR "You can't open it."
?ELS18: EQUAL? PRSA,V?CLOSE \FALSE
PRINTR "It already is."
.FUNCT SEA-F
EQUAL? HERE,BEACH /?ELS5
PRINTR "The sea is off beyond the beach."
?ELS5: EQUAL? PRSA,V?THROUGH \?ELS9
PRINTR "You would drown."
?ELS9: EQUAL? PRSA,V?EXAMINE \FALSE
PRINTR "The sea is very rough. I wouldn't go in."
.FUNCT FOREST-F
EQUAL? PRSA,V?THROUGH \FALSE
CALL USE-DIRECTIONS
RSTACK
.FUNCT TEMPLE-OBJ-F
EQUAL? HERE,COURTYARD-2,COURTYARD-3 /?THN6
EQUAL? HERE,COURTYARD-4,COURTYARD-7 \FALSE
?THN6: EQUAL? PRSA,V?THROUGH \?ELS12
CALL GOTO,TEMPLE
RTRUE
?ELS12: EQUAL? PRSA,V?LISTEN \FALSE
PRINTR "You can hear a howling chant coming from inside the temple."
.FUNCT COURTYARD-F
EQUAL? PRSA,V?WALK-AROUND \?ELS5
EQUAL? HERE,INSIDE-GATE /?ELS5
EQUAL? HERE,COURTYARD-7,COURTYARD-6,COURTYARD-4 \?ELS12
CALL DO-WALK,P?WEST
RSTACK
?ELS12: CALL DO-WALK,P?EAST
RSTACK
?ELS5: EQUAL? PRSA,V?THROUGH \FALSE
EQUAL? HERE,INSIDE-GATE \FALSE
CALL DO-WALK,P?EAST
RSTACK
.FUNCT TOWER-F
EQUAL? PRSA,V?BOARD,V?CLIMB-FOO,V?CLIMB-UP \?ELS5
EQUAL? HERE,PURLOINED-ROOM,SE-TOWER /?THN8
EQUAL? HERE,NW-TOWER,SW-TOWER \?ELS5
?THN8: CALL DO-WALK,P?UP
RSTACK
?ELS5: EQUAL? PRSA,V?CLIMB-FOO,V?CLIMB-DOWN \?ELS11
EQUAL? HERE,JEWEL-ROOM,MAP-ROOM /?THN14
EQUAL? HERE,ENGINE-ROOM,BEDROOM \?ELS11
?THN14: CALL DO-WALK,P?DOWN
RSTACK
?ELS11: EQUAL? PRSA,V?CLIMB-FOO,V?CLIMB-UP \FALSE
PRINTR "They are a bit far away to climb from here, and anyway the walls would be impossible to scale."
.FUNCT JUG-F,E?=0
EQUAL? PRSA,V?CLOSE,V?OPEN \?ELS3
PRINTR "The jug has no cover. It can't be opened or closed."
?ELS3: EQUAL? PRSA,V?MUNG,V?THROW \?ELS7
REMOVE PRSO
SET 'E?,TRUE-VALUE
PRINTI "The jug shatters into innumerable pieces."
CRLF
JUMP ?CND1
?ELS7: EQUAL? PRSA,V?SHAKE \?CND1
FSET? PRSO,OPENBIT \?CND1
SET 'E?,TRUE-VALUE
?CND1: EQUAL? PRSA,V?LOOK-INSIDE,V?EXAMINE \?ELS19
PRINTI "The jug is "
IN? WATER,PRSO /?ELS26
PRINTR "empty."
?ELS26: GETP WATER,P?SIZE
GET JUG-AMTS,STACK
PRINT STACK
CRLF
RTRUE
?ELS19: ZERO? E? /FALSE
IN? WATER,PRSO \TRUE
PRINTI "The water spills to the ground and evaporates."
CRLF
REMOVE WATER
RTRUE
.FUNCT WATER-FUNCTION,AV,W,PI?
EQUAL? PRSA,V?EXAMINE \?ELS3
EQUAL? PRSO,GLOBAL-WATER \?ELS3
EQUAL? HERE,BEACH \?ELS8
PRINTR "The ocean streches out as far as the eye can see to the south and east."
?ELS8: EQUAL? HERE,FOREST-2 \?ELS12
PRINTR "The water is dark and murky, and lily pads cover most of the surface. I wouldn't drink the stuff."
?ELS12: PRINTR "The brook runs slowly through thick vegetation."
?ELS3: EQUAL? PRSA,V?THROUGH \?ELS20
EQUAL? PRSO,GLOBAL-WATER \?ELS20
PRINTR "You have better things to do with your time than go swimming."
?ELS20: EQUAL? PRSA,V?DRINK-FROM \?ELS26
EQUAL? PRSO,GLOBAL-WATER \?ELS26
CALL V-DRINK-FROM
RTRUE
?ELS26: EQUAL? PRSA,V?SGIVE /FALSE
EQUAL? PRSA,V?THROUGH \?ELS32
PRINTR "Swimming here is fraught with peril."
?ELS32: EQUAL? PRSA,V?FILL \?ELS36
SET 'W,PRSI
SET 'PRSA,V?PUT
SET 'PRSI,PRSO
SET 'PRSO,W
SET 'PI?,FALSE-VALUE
JUMP ?CND1
?ELS36: EQUAL? PRSO,GLOBAL-WATER,WATER \?ELS38
SET 'W,PRSO
SET 'PI?,FALSE-VALUE
JUMP ?CND1
?ELS38: SET 'W,PRSI
SET 'PI?,TRUE-VALUE
?CND1: EQUAL? W,GLOBAL-WATER \?CND41
EQUAL? PRSA,V?DRINK /FALSE
SET 'W,WATER
EQUAL? PRSA,V?PUT,V?TAKE \?CND41
REMOVE W
?CND41: ZERO? PI? /?ELS52
SET 'PRSI,W
JUMP ?CND50
?ELS52: SET 'PRSO,W
?CND50: LOC WINNER >AV
EQUAL? PRSA,V?PUT,V?TAKE \?ELS60
ZERO? PI? \?ELS60
ZERO? PRSI /?ELS67
EQUAL? PRSI,JUG /?ELS67
EQUAL? PRSI,SEA,GLOBAL-WATER \?ELS74
PRINTI "Ok, but there was plenty enough there already."
CRLF
REMOVE W
RTRUE
?ELS74: GETP PRSI,P?CAPACITY
ZERO? STACK /?ELS78
PRINTI "The water leaks out of the "
PRINTD PRSI
PRINTI " and evaporates immediately."
CRLF
REMOVE W
RTRUE
?ELS78: PRINTI "The "
PRINTD PRSI
PRINTR " isn't a very good container."
?ELS67: IN? JUG,WINNER \?ELS86
FSET? JUG,OPENBIT /?ELS91
PRINTR "The jug is closed."
?ELS91: CALL GLOBAL-IN?,GLOBAL-WATER,HERE
ZERO? STACK /?ELS95
IN? WATER,JUG \?THN101
GETP WATER,P?SIZE
LESS? STACK,4 \?ELS100
?THN101: MOVE WATER,JUG
PUTP WATER,P?SIZE,4
PRINTI "The jug is now full of "
EQUAL? HERE,BEACH \?ELS107
FSET WATER,RMUNGBIT
PRINTI "sea"
JUMP ?CND105
?ELS107: EQUAL? HERE,FOREST-2 \?ELS111
FSET WATER,RMUNGBIT
PRINTI "foul algae-infested "
JUMP ?CND105
?ELS111: FCLEAR WATER,RMUNGBIT
?CND105: PRINTR "water."
?ELS100: PRINTR "The jug is already full."
?ELS95: PRINTR "The only water here is in the jug."
?ELS86: IN? PRSO,JUG \?ELS127
EQUAL? PRSA,V?TAKE \?ELS127
ZERO? PRSI \?ELS127
SET 'PRSO,JUG
CALL ITAKE
SET 'PRSO,W
RETURN PRSO
?ELS127: PRINTR "The water slips through your fingers."
?ELS60: ZERO? PI? /?ELS135
PRINTR "Nice try."
?ELS135: EQUAL? PRSA,V?GIVE,V?DROP \?ELS140
REMOVE WATER
EQUAL? PRSI,SEA,GLOBAL-WATER \?ELS145
PRINTR "Ok, but there was plenty enough there already."
?ELS145: PRINTR "The water spills to the ground and evaporates."
?ELS140: EQUAL? PRSA,V?POUR-ON \?ELS153
REMOVE WATER
PRINTI "The water cascades off the "
PRINTD PRSI
PRINTR " and onto the ground."
?ELS153: EQUAL? PRSA,V?THROW \FALSE
PRINTI "The water splashes over everything and evaporates."
CRLF
REMOVE WATER
RTRUE
.FUNCT SKY-F,EL
FSET? HERE,ONBIT \?ELS5
EQUAL? PRSA,V?EXAMINE \?ELS5
DIV TOD,10 >EL
PRINTI "It would be "
GET TIME-TABLE,EL
PRINT STACK
PRINTI " now."
GRTR? TOD,NIGHTFALL \?CND10
PRINTI " Bright stars shine down on the earth."
?CND10: CRLF
RTRUE
?ELS5: PRINTR "That would be difficult from here."
.FUNCT NOT-HERE-OBJECT-F,TBL,PRSO?=1,OBJ
EQUAL? PRSO,NOT-HERE-OBJECT \?ELS3
EQUAL? PRSI,NOT-HERE-OBJECT \?ELS3
PRINTR "Those things aren't here!"
?ELS3: EQUAL? PRSO,NOT-HERE-OBJECT \?ELS9
SET 'TBL,P-PRSO
JUMP ?CND1
?ELS9: SET 'TBL,P-PRSI
SET 'PRSO?,FALSE-VALUE
?CND1: ZERO? PRSO? /?CND12
EQUAL? PRSA,V?ZIFMIA /?THN19
EQUAL? PRSA,V?CAST \?CND12
EQUAL? PRSO,SUMMON-SPELL \?CND12
?THN19: CALL FIND-NOT-HERE,TBL,PRSO? >OBJ
ZERO? OBJ /FALSE
EQUAL? OBJ,NOT-HERE-OBJECT \TRUE
?CND12: EQUAL? WINNER,PLAYER \?ELS33
PRINTI "You can't see any "
CALL NOT-HERE-PRINT,PRSO?
PRINTI " here!"
CRLF
JUMP ?CND31
?ELS33: PRINTI "The "
PRINTD WINNER
PRINTI " seems confused. ""I don't see any "
CALL NOT-HERE-PRINT,PRSO?
PRINTI " here!"""
CRLF
?CND31: SET 'P-CONT,FALSE-VALUE
SET 'QUOTE-FLAG,FALSE-VALUE
RTRUE
.FUNCT FIND-NOT-HERE,TBL,PRSO?,M-F,OBJ
CALL MOBY-FIND,TBL >M-F
ZERO? DEBUG /?CND1
PRINTI "[Moby-found "
PRINTN M-F
PRINTI " objects"
PRINTI "]"
CRLF
?CND1: GRTR? M-F,1 \?CND7
GET TBL,1
GETP STACK,P?GLOBAL >OBJ
ZERO? OBJ /?CND7
SET 'M-F,1
SET 'P-MOBY-FOUND,OBJ
?CND7: EQUAL? 1,M-F \?ELS16
ZERO? DEBUG /?CND17
PRINTI "[Namely: "
PRINTD P-MOBY-FOUND
PRINTI "]"
CRLF
?CND17: ZERO? PRSO? /?ELS25
SET 'PRSO,P-MOBY-FOUND
RFALSE
?ELS25: SET 'PRSI,P-MOBY-FOUND
RFALSE
?ELS16: ZERO? PRSO? \?ELS30
PRINTI "You wouldn't find any "
CALL NOT-HERE-PRINT,PRSO?
PRINTR " there."
?ELS30: RETURN NOT-HERE-OBJECT
.FUNCT GLOBAL-NOT-HERE-PRINT,OBJ
SET 'P-CONT,FALSE-VALUE
SET 'QUOTE-FLAG,FALSE-VALUE
PRINTI "You can't see"
EQUAL? OBJ,GLOBAL-KRILL /?CND3
PRINTI " any"
?CND3: EQUAL? OBJ,PRSO \?ELS10
CALL PRSO-PRINT
JUMP ?CND8
?ELS10: CALL PRSI-PRINT
?CND8: PRINTR " here."
.FUNCT NOT-HERE-PRINT,PRSO?,?TMP1
ZERO? P-OFLAG /?ELS5
ZERO? P-XADJ /?CND7
PRINTB P-XADJN
?CND7: ZERO? P-XNAM /FALSE
PRINTB P-XNAM
RTRUE
?ELS5: ZERO? PRSO? /?ELS18
GET P-ITBL,P-NC1 >?TMP1
GET P-ITBL,P-NC1L
CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
RSTACK
?ELS18: GET P-ITBL,P-NC2 >?TMP1
GET P-ITBL,P-NC2L
CALL BUFFER-PRINT,?TMP1,STACK,FALSE-VALUE
RSTACK
.FUNCT BELBOZ-F
EQUAL? PRSA,V?ZIFMIA \?ELS5
PRINTI "A vision of the great Belboz begins to take shape before you, but "
GETP HERE,P?TMAZE
ZERO? STACK /?ELS12
PRINTR "as soon as he realizes where you are, he disappears, a look of fear upon his face."
?ELS12: PRINTR "with a curt word and a waggle of his finger, he disappears again, shaking his head in disappointment."
?ELS5: EQUAL? PRSA,V?WHO,V?EXAMINE \FALSE
PRINTR "Belboz is, in effect, your boss, professor, patron, and ultimate superior. He is the head of the Circle of Enchanters."
.FUNCT GLOBAL-ROOM-F
EQUAL? PRSA,V?EXAMINE,V?LOOK \?ELS5
CALL PERFORM,V?LOOK
RTRUE
?ELS5: EQUAL? PRSA,V?WALK-AROUND \FALSE
PRINTR "Walking around the room reveals nothing else of interest. If you want to move elsewhere, simply indicate the direction you wish to move in."
.FUNCT BRAMBLES-F
CALL OUTSIDE?,HERE
ZERO? STACK \?ELS5
PRINTR "The only brambles here are in your head."
?ELS5: EQUAL? PRSA,V?LOOK-INSIDE,V?SEARCH \FALSE
PRINTR "There's nothing in the brambles now. Count your blessings."
.FUNCT GLOBAL-HOLE-F
EQUAL? PRSA,V?DIG \?ELS5
PRINTR "It's not worth the bother."
?ELS5: CALL GLOBAL-NOT-HERE-PRINT,GLOBAL-HOLE
RSTACK
.ENDI