• Contact
  • Journal
  • Home
  • TRS80
  • Pyramid
  • Code
  • Site
  • Page
  • Amiga
    • Rainbow Islands
      • 1loader-dec
      • 1loader
      • boot
      • orig-boot
      • Journal
  • Arcade
    • Asteroids 80%
      • Hardware
      • RAMUse
      • Code

      • DVG
      • VectorROM

      • Journal
    • Crazy Climber 1%
      • BigSpriteGraphics.pdf
      • Buildings.pdf
      • cclimber.asm
      • CharEnc.inc
      • CrazyClimberMemoryMapInfo.pdf
      • GraphicsAndCharacterAssetInfo.pdf
      • MemoryMap.inc
    • Defender 75%
      • RAMUse
      • Hardware
      • Bank1
      • Bank2
      • Bank3
      • Bank7
      • BankFixed
      • Mapping.txt
      • SoundHardware
      • SoundRAMUse
      • SoundCode
      • Defender-Theory-Early.pdf
      • Defender-Theory-Later.pdf
      • Defender.CPU.jpg
      • Defender.ROM.B&W.jpg
      • Defender.Vid.B&W.jpg
      • SoundROM.txt
    • Frogger (Sound)
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Hardware
      • RAMUse
      • Code

      • GFX

      • Journal
    • Galaga 5%
      • CPU1 (Main)
      • CPU2 (Secondary)
      • CPU3 (Sound)
      • GFX1 (Characters)
      • GFX2 (Sprites)
      • PROMcolors
      • PROMpaletteChar
      • PROMpaletteSprite

      • CPU1Fix

      • Journal
    • Moon Patrol 75%
      • Hardware
      • RAMUse
      • Code

      • GFX1 (Text)
      • GFX2 (Sprites)
      • GFX3 (Mountains)
      • GFX4 (Hills)
      • GFX5 (City)
      • ImageBackgroundColors
      • SpriteColors
      • SpriteColorSets
      • TextColors

      • MoonPatrolSound
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Journal
    • Omega Race 10%
      • Hardware
      • RAMUse
      • MainBoard

      • SoundHardware
      • SoundRAMUse
      • SoundBoard

      • DVGPROM
      • VectorROM

      • Journal
    • Phoenix 70%
      • Hardware
      • RAMUse
      • Code

      • Background
      • Foreground

      • Journal

      • Scramble HHi
        • phoenixj-func-main2.pdf
        • phoenixj-func-main2.scap
        • phoenixj.asm-may2025.txt
        • phoenixj.asm-may2025.txt.pdf
    • Space Invaders
      • invaders.asm
      • Hardware
      • RAMUse
      • Code

      • Journal
    • Time Pilot (Sound)
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Hardware
      • RAMUse
      • Code

      • Journal
    • Sea Wolf 1%
      • Hardware
      • RAMUse
      • Code

      • Journal
    • Scramble 1%
      • SoundHardware
      • SoundRAMUse
      • SoundCode

      • Journal
  • Atari2600
    • Stella (Hardware Info)
    • Asteroids 5%
      • RAMUse
      • Code

      • Journal
    • Battle Zone 1%
      • RAMUse
      • Code

      • Journal
    • Chess 1%
      • RAMUse
      • Code

      • Journal
    • Combat 10%
      • RAMUse
      • Code
      • CodePAL

      • Journal
    • Double Gap
      • Code
      • DoubleGap.asm

      • Journal
    • Entombed 1%
      • RAMUse
      • Code

      • Journal
    • ET 1%
      • RAMUse
      • Code

      • Journal
    • Burger Time 1%
      • RAMUse
      • CodeBank0
      • CodeBank1
      • CodeBank2
      • CodeBank3
      • CodeBank4
      • CodeBank5
      • CodeBank6
      • CodeBank7

      • Journal
    • Missile Command 1%
      • RAMUse
      • Code

      • Journal
    • Space Invaders 1%
      • RAMUse
      • Code

      • Journal
  • CoCo
    • Hardware
    • Early Work
    • Pyramid
      • RAMUse
      • Code

      • Journal
    • Raaka Tu
      • RAMUse
      • Code

      • Journal
    • Bedlam
      • RAMUse
      • Code

      • Journal
    • Madness & Minotaur
      • Walk Through
        • after_start.txt
        • after_start.cas
        • after_1.txt
        • after_1.cas
        • after_2.txt
        • after_2.cas
        • after_3.txt
        • after_3.cas
        • after_4.txt
        • after_4.cas
        • after_5.txt
        • after_5.cas
        • after_6.txt
        • after_6.cas
        • after_7.txt
        • after_7.cas
        • after_8.txt
        • after_8.cas
        • after_9.txt
        • after_9.cas
        • after_10.txt
        • after_10.cas
        • after_11.txt
        • after_11.cas
        • after_12.txt
        • after_12.cas
        • after_13.txt
        • after_13.cas
        • after_14.txt
        • after_14.cas
        • after_15.txt
        • after_15.cas
        • after_16.txt
        • after_16.cas
        • after_17.txt
        • after_17.cas
        • after_18.txt
        • after_18.cas
        • after_19.txt
        • after_19.cas
        • after_20.txt
        • after_20.cas
        • after_21.txt
        • after_21.cas
        • after_22.txt
        • after_22.cas
        • after_23.txt
        • after_23.cas
        • after_24.txt
        • after_24.cas
        • after_25.txt
        • after_25.cas
      • RAMUse
      • Code

      • SaveGameViewer

      • Journal
    • Mega-Bug
      • RAMUse
      • Code

      • Journal
    • Popcorn
      • RAMUse
      • Code

      • Journal
    • Daggorath
      • RAMUse
      • Code

      • Level Maps

      • Journal
    • Downland 5%
      • RAMUse
      • Code

      • Journal
    • Audio Analyzer 5%
      • RAMUse
      • Code

      • Journal
    • Doubleback
      • RAMUse
      • Code

      • Journal
  • NES
    • Zelda 5%
      • Hardware
      • RAMUse
      • Bank0
      • Bank1
      • Bank2
      • Bank3
      • Bank4
      • Bank5
      • Bank6
      • Bank7

      • Journal
    • Kid Icarus 1%
      • Hardware
      • RAMUse
      • Bank0
      • Bank1
      • Bank2
      • Bank3
      • Bank4
      • Bank5
      • Bank6
      • Bank7

      • Journal
  • Gameboy
    • Hardware
    • Link's Awakening 1%
      • RAMUse
      • Bank00
      • Bank01
      • Bank02
      • Bank03
      • Bank04
      • Bank05
      • Bank06
      • Bank07
      • Bank08
      • Bank09
      • Bank0A
      • Bank0B
      • Bank0C
      • Bank0D
      • Bank0E
      • Bank0F
      • Bank10
      • Bank11
      • Bank12
      • Bank13
      • Bank14
      • Bank15
      • Bank16
      • Bank17
      • Bank18
      • Bank19
      • Bank1A
      • Bank1B
      • Bank1C
      • Bank1D
      • Bank1E
      • Bank1F

      • Journal
    • Tetris 1%
      • RAMUse
      • Code

      • Journal
  • TRS80
    • HardwareLevel2
    • HardwareLevel1
    • HardwareDisk
    • HauntedHouse
      • RAMUse1
      • Code1
      • RAMUse2
      • Code2

      • Journal
    • Pyramid
      • RAMUse
      • Code

      • RAMUse1
      • Code1

      • Journal
    • RaakaTu
      • RAMUse
      • Code

      • Journal
    • Bedlam
      • RAMUse
      • Code

      • Journal
    • Xenos
      • RAMUse
      • Code
      • Section1
      • Section2
      • Section3
      • Section4
      • Section5
      • Section6
      • Section7
      • Section8
      • Section9
      • SSVDOBJS
      • USVDOBJS

      • Journal
  • Virus
    • Morris Worm 1%
      • Journal
    • Stoned
      • Journal

  • Tools
    • Blend
      • blend.zip

      • Journal
  • Pyramid (For TRS80 Level 2 ROM)
  • Start
  • Get Object Info
  • Process Room Scripts
  • Run Script
  • Script Command PASS
  • Script Command FAIL
  • Command 7: StopIfPassElseContinue
  • Parse User Input
  • Tokenize the input
  • Print Packed
  • Wait for key
  • Print Char
  • Prompt And Read Line
  • Input Buffer
  • Packed strings
  • Character Table
  • Room Table
  • Room Scripts
  • Ambient Light Table
  • Object Data
  • Game Variables
  • Object Info
  • Script Commands
  • After Every Step
  • Command 1: MoveToRoom
  • Command 24: MoveObjectToCurrentRoom
  • Command 25: MoveObjectIntoContainer
  • Command 2: AssertObjectIsInPack
  • Command 3: AssertObjectIsInCurrentRoomOrPack
  • Command 26: AssertObjectIsInCurrentRoom
  • Command 13: AssertPackIsEmptyExceptForEmerald
  • Command 10: AssertRandomIsLessOrEqual
  • Command 12: MoveToRoomIfItWasLastRoom (UNUSED)
  • Command 22: GetUserInputObject
  • Command 4: Print
  • Command 11: DropObject (UNUSED)
  • Command 14: MoveToLastRoom
  • Command 15: PrintInventory
  • Command 16: PrintRoomDescription
  • Command 17: AssertObjectMatchesUserInput
  • Command 18: GetObjectFromRoom
  • Command 23: DropUserInputObject
  • Command 20: PrintOK
  • Command 21: MoveObjectToRoom
  • Command 8: PrintScore
  • Command 9: PrintScoreAndStop
  • Command 27: LoadGame
  • Command 28: SaveGame
  • Command 29: RandomizeDirections
    • Word Table
  • General Command Handler
  • Room descriptions (packed)
  • Object descriptions (packed)
  • Miscalaneous messages (packed)

Pyramid (For TRS80 Level 2 ROM)

RAM Usage

Hardware Info

Start

Start:
4300: 31 BF 47        LD      SP,TopOfStack       ; Small stack space
4303: 3E 0E           LD      A,$0E               ; Turn on ....
4305: CD 33 00        CALL    PrintChar           ; ... the cursor
4308: 21 82 47        LD      HL,WelcomeMsg       ; "WELCOME TO PYRAMID!!"
430B: CD D0 45        CALL    PrintPlain          ; Print the message
430E: CD EE 45        CALL    WaitForKey          ; Wait for a key

4311: 3E 01           LD      A,$01               ; Starting room is ...
4313: 32 3F 50        LD      (currentRoom),A     ; ... room 1
4316: CD 45 52        CALL    DescribeRoom        ; Print room description

GameLoop:
4319: 97              SUB     A                   ; A=0
431A: 32 7B 46        LD      (noun),A            ; Clear noun (object within reach)
431D: 32 7C 46        LD      (verb),A            ; Clear verb (throw, north, rub, etc)
4320: 32 7D 46        LD      (grammar),A         ; Grammar type (verb, verb+nounInReach, verb+nounInPack)
4323: CD CF 43        CALL    ParseUserInput      ; Get user input line and parse
4326: 3A 3F 50        LD      A,(currentRoom)     ; Room number
4329: 21 88 48        LD      HL,RoomTable        ; Room descriptors
432C: CD 6B 43        CALL    TableOffsetFourBytes; Get 4 bytes for room
432F: 23              INC     HL                  ; Skip over ...
4330: 23              INC     HL                  ; ... to room's script pointer
4331: 7E              LD      A,(HL)              ; Script ...
4332: 23              INC     HL                  ; ... pointer ...
4333: 66              LD      H,(HL)              ; ... to ...
4334: 6F              LD      L,A                 ; ... HL
4335: CD 7D 43        CALL    ProcessRoomScript   ; Process the room script
4338: C2 4A 43        JP      NZ,$434A            ; ZF clear ... script was successful. Move on.
433B: 21 B0 59        LD      HL,GeneralCommandHandler; General script
433E: CD 7D 43        CALL    ProcessRoomScript   ; Process the script
4341: C2 4A 43        JP      NZ,$434A            ; Process the script
4344: 21 71 74        LD      HL,PS_7F            ; General fail message (one of 4 that changes)
4347: CD AE 45        CALL    PrintPacked         ; Print message
434A: CD D9 50        CALL    AfterEveryStep      ; After every turn
434D: C3 19 43        JP      GameLoop            ; Back to get user input

Get Object Info

Every object has a room number. The object might be physically in the room. Or the object might be inside another object that is physically in the room -- or so on recursively.

This function traverses the containers to find out the room number this object and any containers are in.

GetObjectInfo:
; Recurse through carriers to find the room number of the requested object.
; Return HL points to the top level object entry.
; Return ZF is set if top level object room number matches E.
4350: 21 E7 4F        LD      HL,ObjectData       ; Information about all the objects
4353: CD 61 43        CALL    TableOffsetTwoBytes ; Room number to 2-byte table entry
4356: 7E              LD      A,(HL)              ; Upper bit set means 2nd byte is object number
4357: E6 80           AND     $80                 ; Is this object being carried by another?
4359: 23              INC     HL                  ; Second byte (S is not affected)
435A: 7E              LD      A,(HL)              ; Get location (S is not affected)
435B: C2 50 43        JP      NZ,GetObjectInfo    ; If this is being carried, recurse to the carrier
435E: 2B              DEC     HL                  ; Back to first entry for return
435F: BB              CP      E                   ; Room number matches E?
4360: C9              RET                         

TableOffsetTwoBytes:
; HL = HL + (A-1)*2
4361: D5              PUSH    DE                  ; Hold DE
4362: EB              EX      DE,HL               ; HL to DE for later add
4363: 6F              LD      L,A                 ; LSB ...
4364: 2D              DEC     L                   ; ... minus one
4365: 26 00           LD      H,$00               ; Upper byte is 0
4367: 29              ADD     HL,HL               ; Times 2 (2 byte entries)
4368: 19              ADD     HL,DE               ; Offset into table
4369: D1              POP     DE                  ; Restore DE
436A: C9              RET                         ; HL = HL + (A-1)*2

TableOffsetFourBytes:
; HL = HL + (A-1)*4
436B: D5              PUSH    DE                  ; Hold DE
436C: EB              EX      DE,HL               ; HL to DE for later add
436D: 6F              LD      L,A                 ; LSB ...
436E: 2D              DEC     L                   ; ... minus one
436F: 26 00           LD      H,$00               ; Upper byte is 0
4371: 29              ADD     HL,HL               ; Times 2
4372: 29              ADD     HL,HL               ; Times 4 (4 byte entries)
4373: 19              ADD     HL,DE               ; Offset into table
4374: D1              POP     DE                  ; Restore DE
4375: C9              RET                         ; HL = HL + (A-1)*4

SetObjectLocation:
; Set object's location by recursing containers to the top
; level container and setting the room number.
; E is the new room number for the top level container
4376: CD 50 43        CALL    GetObjectInfo       ; Find the parent container
4379: 23              INC     HL                  ; Second entry is location
437A: 73              LD      (HL),E              ; Set the room number of the parent container
437B: 2B              DEC     HL                  ; Back to 1st entry
437C: C9              RET                         

Process Room Scripts

Each room is a collection of verb and the script commands that go with each verb. We look through the verb-map for the room and run the list of script commands for that verb.

As soon as an individual command fails, we stop the processing of the list. As long as the commands are passing, we continue to run them.

Interestingly, if a command list for a verb FAILS, we continue looking for verb matches in the collection. That allows for multiple command lists to be given for the same verb.

If the user verb matches the collection and all the commands pass, we return with NOT ZERO as a sign of success. If there is no match or if any of the commands fail, we return with ZERO as a sign of failure.

; Process the user input against the script for a room
ProcessRoomScript:
437D: 7E              LD      A,(HL)              ; Next byte from script
437E: A7              AND     A                   ; Are we at the end?
437F: C8              RET     Z                   ; Yes, we are done. Return ZERO as FAIL.
;
4380: 3A 7C 46        LD      A,(verb)            ; User's input verb
4383: BE              CP      (HL)                ; Does the input verb match the script verb?
4384: 23              INC     HL                  ; Point to next byte
4385: CA 8F 43        JP      Z,$438F             ; Yes, dive into this script
4388: 4E              LD      C,(HL)              ; No, get the length of this verb section
4389: 06 00           LD      B,$00               ; No script section over 256 bytes!
438B: 09              ADD     HL,BC               ; Jump to next section
438C: C3 7D 43        JP      ProcessRoomScript   ; Try next script verb
;
438F: CD 96 43        CALL    RunScript           ; Run the script
4392: C0              RET     NZ                  ; All the commands passed. Return not ZERO as SUCCESS
4393: C3 7D 43        JP      ProcessRoomScript   ; In case there are duplicate verbs -- others might succeed

Run Script

RunScript:
4396: E5              PUSH    HL                  ; Hold the script pointer
4397: 4E              LD      C,(HL)              ; Get the length
4398: 06 00           LD      B,$00               ; Point to the end ...
439A: 09              ADD     HL,BC               ; ... of the script
439B: E3              EX      (SP),HL             ; Now the end of the script is on the stack
439C: 23              INC     HL                  ; Next byte is the command
;
RunScriptCommand:
439D: 7E              LD      A,(HL)              ; Get the command number
439E: 23              INC     HL                  ; Next in command
439F: E5              PUSH    HL                  ; Hold our pointer
43A0: 21 9F 50        LD      HL,ScriptCommands   ; Table of script commands
43A3: CD 61 43        CALL    TableOffsetTwoBytes ; Offset into table
43A6: 7E              LD      A,(HL)              ; Hold LSB from table
43A7: 23              INC     HL                  ; Get the ...
43A8: 66              LD      H,(HL)              ; ... msb to H
43A9: 6F              LD      L,A                 ; HL now points to the routine to run
43AA: E9              JP      (HL)                ; Jump to the command

Script Command PASS

When an individual command succeeds, it comes here. If there are no more commands left in the script, we return with ZF cleared as a sign of success. If there are commands left, we continue running the next one.

ScriptCommandPASS:
43AB: E1              POP     HL                  ; The current script pointer
43AC: D1              POP     DE                  ; The calculated end of the script
43AD: 7C              LD      A,H                 ; Are we at the ...
43AE: BA              CP      D                   ; ... end of the script?
43AF: C2 BA 43        JP      NZ,$43BA            ; No ... keep going
43B2: 7D              LD      A,L                 ; Are we at the ...
43B3: BB              CP      E                   ; ... end of the script?
43B4: C2 BA 43        JP      NZ,$43BA            ; No ... keep going
43B7: F6 01           OR      $01                 ; Clear the ZERO flag for success
43B9: C9              RET                         ; Done
;
43BA: D5              PUSH    DE                  ; Put the calculated end of script back on stack
43BB: C3 9D 43        JP      RunScriptCommand    ; Run the next command

Script Command FAIL

When an individual command fails, it comes here. We return ZF set as a sign of failure. No more commands are run.

ScriptCommandFAIL:
43BE: E1              POP     HL                  ; Pop the script pointer
43BF: E1              POP     HL                  ; Pop the calculated end of the script
43C0: AF              XOR     A                   ; Set the ZERO flag meaning failure
43C1: C9              RET                         

Command 7: StopIfPassElseContinue

StopIfPassElseContinue:
; Run the list of commands (a sub-script). We always return SUCCESS, but if the list completes
; successfully all the way to the end, we abort the outer script. If the sub-script fails,
; the we pass to the next command in the outer script.
;
; This gives us the ability to code a line of if/else commands. We keep trying the sub-lists
; until one finishes completely.
;
43C2: E1              POP     HL                  ; Pop the current pointer
43C3: CD 96 43        CALL    RunScript           ; Run the list of commands
43C6: E5              PUSH    HL                  ; Current script position
43C7: CA AB 43        JP      Z,ScriptCommandPASS ; The list failed ... treat that as a PASS
; The subscript failed. Bail out (with a PASS)
43CA: E1              POP     HL                  ; Pop the current pointer
43CB: E1              POP     HL                  ; Pop the calculated end of list
43CC: F6 01           OR      $01                 ; Return NOT ZERO ... a PASS
43CE: C9              RET                         

Parse User Input

ParseUserInput:
43CF: CD 05 46        CALL    PromptAndReadLine   ; Get the command line from the player
43D2: CD A2 44        CALL    ParseInputString    ; Parse the input string
43D5: 2A AA 45        LD      HL,(nounPointer)    ; Pointer to the noun word
43D8: 3A A8 45        LD      A,(numBytesWordData); Number of bytes ...
43DB: 47              LD      B,A                 ; ... in word data
43DC: 3A 7D 46        LD      A,(grammar)         ; Verb grammar
43DF: FE 03           CP      $03                 ; Value 3 means stand alone verb
43E1: CA CF 43        JP      Z,ParseUserInput    ; We needed a noun before but didn't get one. Get it now.
43E4: 3A 7B 46        LD      A,(noun)            ; Do we have ..
43E7: A7              AND     A                   ; ... a noun?
43E8: C2 1C 44        JP      NZ,$441C            ; Yes, go check it
43EB: 3A 7C 46        LD      A,(verb)            ; Otherwise, do we have ...
43EE: A7              AND     A                   ; ... a verb?
43EF: C2 0D 44        JP      NZ,$440D            ; Yes, go handle it
;
; General error message ... didn't understand a thing
43F2: 3A 7E 46        LD      A,(nextErrorString) ; Last general error message
43F5: 3C              INC     A                   ; Point to next
43F6: E6 03           AND     $03                 ; Roll around over 4 messages
43F8: 32 7E 46        LD      (nextErrorString),A ; For next time
43FB: 21 7F 46        LD      HL,PtrErrorString1  ; Table of general error messages
43FE: 07              RLCA                        ; Two bytes each
43FF: 4F              LD      C,A                 ; All ...
4400: 06 00           LD      B,$00               ; ... this ...
4402: 09              ADD     HL,BC               ; ... to ...
4403: 7E              LD      A,(HL)              ; ... add ...
4404: 23              INC     HL                  ; ... C ...
4405: 66              LD      H,(HL)              ; ... to ...
4406: 6F              LD      L,A                 ; ... HL
4407: CD D0 45        CALL    PrintPlain          ; Print the error
440A: C3 CF 43        JP      ParseUserInput      ; Back for more
;
440D: 3A 7D 46        LD      A,(grammar)         ; Action word type
4410: FE C0           CP      $C0                 ; 11_000_000 means single word command
4412: C8              RET     Z                   ; Input is just one word, we are done
4413: 21 FD 46        LD      HL,unknownVerb      ; Unknown verb
4416: CD D0 45        CALL    PrintPlain          ; Print "verb WHAT?" (was expecting an object)
4419: C3 CF 43        JP      ParseUserInput      ; Try again
;
; Validate noun
441C: 22 AA 45        LD      (nounPointer),HL    ; Save pointer to noun word data
441F: 3A A1 44        LD      A,(isLoneObject)    ; Was the last input an object and ...
4422: A7              AND     A                   ; ...  we then asked for a verb?
4423: C2 8E 44        JP      NZ,$448E            ; Yes, skip checking the noun (use what we have)
4426: 7E              LD      A,(HL)              ; Get the object number
4427: 23              INC     HL                  ; Next word
4428: 22 AA 45        LD      (nounPointer),HL    ; Noun word data pointer
442B: 1E FF           LD      E,$FF               ; Backpack location
442D: C5              PUSH    BC                  ; Save BC
442E: CD 50 43        CALL    GetObjectInfo       ; Look up the requested object
4431: C1              POP     BC                  ; Restore BC
4432: CA 86 44        JP      Z,$4486             ; Object is actually in pack ... go use it
4435: 3A 7D 46        LD      A,(grammar)         ; Grammar type
4438: FE 40           CP      $40                 ; 01_000_000 means noun-in-pack
443A: CA 4E 44        JP      Z,$444E             ; Yes, check the backpack
443D: 2A AA 45        LD      HL,(nounPointer)    ; Noun word pointer
4440: 2B              DEC     HL                  ; Back up the word pointer
4441: 3A 3F 50        LD      A,(currentRoom)     ; Is ...
4444: 5F              LD      E,A                 ; ... this ...
4445: 7E              LD      A,(HL)              ; ... object ...
4446: C5              PUSH    BC                  ; ... in the ...
4447: CD 50 43        CALL    GetObjectInfo       ; ... current room?
444A: C1              POP     BC                  ; Restore BC
444B: CA 86 44        JP      Z,$4486             ; Yes, go use it
444E: 2A AA 45        LD      HL,(nounPointer)    ; Restore word data pointer
4451: 05              DEC     B                   ; All objects of this name tried?
4452: C2 26 44        JP      NZ,$4426            ; No ... keep looking for matching object
;
; Object not found (either not in pack or not in room depending on verb requirements)
4455: 3A 7D 46        LD      A,(grammar)         ; Grammar type
4458: FE 40           CP      $40                 ; 01_000_000 means noun-in-pack
445A: C2 63 44        JP      NZ,$4463            ; Error ... can't find noun in room
445D: 21 98 46        LD      HL,MsgNotCarrying   ; "YOU_AREN'T_CARRYING_IT."
4460: C3 7C 44        JP      $447C               ; Print error and back to try again
4463: 21 87 46        LD      HL,MsgISeeNo        ; "I_SEE_NO_"
4466: CD D0 45        CALL    PrintPlain          ; First fragment
4469: 3E 01           LD      A,$01               ; Replace '?' with ...
446B: 32 FB 46        LD      (unknownNounPunct),A; ... no-CR terminator.
446E: 21 D3 46        LD      HL,unknownNoun      ; Buffer for unknown word
4471: CD D0 45        CALL    PrintPlain          ; Print unknown word
4474: 3E 3F           LD      A,$3F               ; Restore the ...
4476: 32 FB 46        LD      (unknownNounPunct),A; ... question mark character
4479: 21 91 46        LD      HL,MsgHere          ; "_HERE."
447C: CD D0 45        CALL    PrintPlain          ; Print the last fragment of error
447F: 97              SUB     A                   ; Clear ...
4480: 32 7B 46        LD      (noun),A            ; ... the unknown noun
4483: C3 CF 43        JP      ParseUserInput      ; Back to try again
;
; Found object
4486: 2A AA 45        LD      HL,(nounPointer)    ; 
4489: 2B              DEC     HL                  ; Back up to start
448A: 7E              LD      A,(HL)              ; Get the object number
448B: 32 7B 46        LD      (noun),A            ; Hold the noun
448E: 3A 7C 46        LD      A,(verb)            ; Get the verb
4491: A7              AND     A                   ; Noun and verb?
4492: C0              RET     NZ                  ; Yes, done
4493: 21 B0 46        LD      HL,MsgWhatDoWith    ; "WHAT_DO_YOU_WANT_ME_TO_DO_WITH_THE_"+noun+"?"
4496: CD D0 45        CALL    PrintPlain          ; Print first fragment
4499: 3E 01           LD      A,$01               ; Flag that we ...
449B: 32 A1 44        LD      (isLoneObject),A    ; ... are prompting for a verb only
449E: C3 CF 43        JP      ParseUserInput      ; Back to get user input

isLoneObject:
44A1: 00 ; 1 if there was a lone object given last input

Tokenize the input

Parse the input into words.

ParseInputString:
44A2: 21 5A 46        LD      HL,inputBuffer      ; Start of user input buffer
44A5: 97              SUB     A                   ; Clear the ...
44A6: 32 A9 45        LD      (bufferHasSomething),A; ... buffer-has-something flag
44A9: 32 7D 46        LD      (grammar),A         ; ... and the grammar
;
44AC: 11 CE 56        LD      DE,wordTable        ; Pointer to all the words we know
44AF: EB              EX      DE,HL               ; Now HL=words we know, DE=where we are in the input
44B0: 22 79 47        LD      (currentParsePtr),HL; Hold our current spot in the word table
44B3: EB              EX      DE,HL               ; Now HL=where we are in input, DE=where we are in words
;
; Skip over blank spaces before next word
44B4: 7E              LD      A,(HL)              ; Ignore ...
44B5: FE 20           CP      $20                 ; ... all ...
44B7: C2 BE 44        JP      NZ,$44BE            ; ... leading ...
44BA: 23              INC     HL                  ; ... blank ...
44BB: C3 B4 44        JP      $44B4               ; ... spaces
44BE: 22 7B 47        LD      (startOfWord),HL    ; start of this word
44C1: A7              AND     A                   ; Nothing but spaces?
44C2: CA 5C 45        JP      Z,$455C             ; Yes, we are done parsing
;
44C5: 3E 01           LD      A,$01               ; There is SOMETHING ...
44C7: 32 A9 45        LD      (bufferHasSomething),A; ... in the buffer
44CA: E5              PUSH    HL                  ; Hold the pointer
44CB: 1A              LD      A,(DE)              ; First byte of word table
44CC: A7              AND     A                   ; Reached the end of the table?
44CD: CA 67 45        JP      Z,$4567             ; Done tokenizing ... now have a look at the words
44D0: 32 81 47        LD      (wordBeingTested),A ; Hold 1st byte of word being tested
44D3: E6 07           AND     $07                 ; Number of bytes ...
44D5: 4F              LD      C,A                 ; ... in ...
44D6: 32 7D 47        LD      (charsInWord),A     ; ... current word text
44D9: 3A 81 47        LD      A,(wordBeingTested) ; We'll need that info byte several times
44DC: E6 38           AND     $38                 ; Number ...
44DE: 0F              RRCA                        ; ... of ...
44DF: 0F              RRCA                        ; ... bytes ...
44E0: 0F              RRCA                        ; ... in ...
44E1: 47              LD      B,A                 ; word data
44E2: EB              EX      DE,HL               ; Save our current ...
44E3: 22 79 47        LD      (currentParsePtr),HL; ... position in the input
44E6: EB              EX      DE,HL               ; Shuffle our pointers back
44E7: 13              INC     DE                  ; Get next from ...
44E8: 1A              LD      A,(DE)              ; ... input buffer
44E9: BE              CP      (HL)                ; Does it match the word we are testing?
44EA: C2 4E 45        JP      NZ,FindEndOfTestWord; No, try next word
44ED: 23              INC     HL                  ; Next in input
44EE: 13              INC     DE                  ; Next in word text
44EF: 0D              DEC     C                   ; All characters of word being tested?
44F0: C2 E8 44        JP      NZ,$44E8            ; No, keep testing
44F3: 3A 7D 47        LD      A,(charsInWord)     ; Number of characters in the test word
44F6: FE 06           CP      $06                 ; Six is the max size EXCEPT FOR "SCEPTER" WHICH IS 7 -- BUG?
44F8: CA 05 45        JP      Z,FindEndOfInputWord; Six matched ... ignore the rest of the input
;
44FB: 7E              LD      A,(HL)              ; Not six ... is the next input ...
44FC: FE 20           CP      $20                 ; ... a space?
44FE: CA 13 45        JP      Z,$4513             ; Yes ... we are ready for next word
4501: A7              AND     A                   ; Maybe the end of the input buffer?
4502: C2 53 45        JP      NZ,FindEndOfTestData; No ... not a match
;
FindEndOfInputWord:
4505: 7E              LD      A,(HL)              ; Next in buffer is ...
4506: FE 20           CP      $20                 ; ... a space?
4508: CA 13 45        JP      Z,$4513             ; Yes, end of word success
450B: A7              AND     A                   ; End of input buffer?
450C: CA 13 45        JP      Z,$4513             ; Yes, end of word success
450F: 23              INC     HL                  ; Next character in input
4510: C3 05 45        JP      FindEndOfInputWord  ; Find end of word
;
4513: 3A 81 47        LD      A,(wordBeingTested) ; 
4516: E6 C0           AND     $C0                 ; Is the word a noun? (anything else is a verb)
4518: CA 2D 45        JP      Z,$452D             ; Yes ... record the noun
451B: 32 7D 46        LD      (grammar),A         ; Hold the verb's grammar
451E: 1A              LD      A,(DE)              ; Get the verb number ...
451F: 32 7C 46        LD      (verb),A            ; ... from script (lots of words might map to same number)
4522: E5              PUSH    HL                  ; Hold input pointer
4523: 21 FD 46        LD      HL,unknownVerb      ; Storage for unknownVerb
4526: CD 85 45        CALL    CopyWord            ; Copy input to the unknownVerb storage
4529: E1              POP     HL                  ; Restore pointer
452A: C3 46 45        JP      $4546               ; Skip spaces and next word
;
452D: 1A              LD      A,(DE)              ; Store the ...
452E: 32 7B 46        LD      (noun),A            ; ... noun number (several words might match)
4531: EB              EX      DE,HL               ; Get HL into position
4532: 22 AA 45        LD      (nounPointer),HL    ; Store pointer to noun
4535: EB              EX      DE,HL               ; Restore pointer positions
4536: 78              LD      A,B                 ; Number of bytes ...
4537: 32 A8 45        LD      (numBytesWordData),A; ... of data for this word
453A: 97              SUB     A                   ; Clear the ...
453B: 32 A1 44        LD      (isLoneObject),A    ; ... isLoneObject flag (we have a verb)
453E: E5              PUSH    HL                  ; Hold
453F: 21 D3 46        LD      HL,unknownNoun      ; Copy the ...
4542: CD 85 45        CALL    CopyWord            ; ... input noun
4545: E1              POP     HL                  ; Restore
4546: 7E              LD      A,(HL)              ; From input
4547: FE 20           CP      $20                 ; Is it a space?
4549: D1              POP     DE                  ; Restore
454A: CA AC 44        JP      Z,$44AC             ; Yes ... decode the next word
454D: C9              RET                         ; Done
;
FindEndOfTestWord:
454E: 13              INC     DE                  ; Skip ...
454F: 0D              DEC     C                   ; ... all characters ...
4550: C2 4E 45        JP      NZ,FindEndOfTestWord; ... in test word
;
FindEndOfTestData:
4553: 13              INC     DE                  ; Next in word text data
4554: 05              DEC     B                   ; Reached the end of the test word?
4555: C2 53 45        JP      NZ,FindEndOfTestData; No, move to the end
;
4558: E1              POP     HL                  ; Restore pointer to input
4559: C3 B4 44        JP      $44B4               ; Skip blank spaces in input
;
455C: 3A A9 45        LD      A,(bufferHasSomething); Is the buffer ...
455F: A7              AND     A                   ; ... empty?
4560: C0              RET     NZ                  ; YES, we are done
;
4561: 3E 03           LD      A,$03               ; Stand alone ...
4563: 32 7D 46        LD      (grammar),A         ; ... verb
4566: C9              RET                         ; Done
;
4567: E1              POP     HL                  ; Restore pointer to input
4568: 97              SUB     A                   ; Zero the ...
4569: 32 7C 46        LD      (verb),A            ; ... verb
456C: 32 7B 46        LD      (noun),A            ; And the noun
456F: 7E              LD      A,(HL)              ; Next input
4570: FE 20           CP      $20                 ; Is it a space?
4572: C2 79 45        JP      NZ,SkipInputWord    ; No, go process it
4575: 23              INC     HL                  ; Skip ...
4576: C3 6F 45        JP      $456F               ; ... blank spaces
;
SkipInputWord:
4579: 7E              LD      A,(HL)              ; End of ...
457A: A7              AND     A                   ; ... user input?
457B: C8              RET     Z                   ; Yes, we are done
457C: FE 20           CP      $20                 ; Space?
457E: CA AC 44        JP      Z,$44AC             ; Yes, go lookup any word that follows
4581: 23              INC     HL                  ; Keep skipping ...
4582: C3 79 45        JP      SkipInputWord       ; ... input word

CopyWord:
4585: EB              EX      DE,HL               ; Now DE=storage
4586: 2A 7B 47        LD      HL,(startOfWord)    ; 
4589: 06 28           LD      B,$28               ; 40 chars max in storage for word
458B: 7E              LD      A,(HL)              ; From input buffer
458C: A7              AND     A                   ; End of the buffer?
458D: CA 9F 45        JP      Z,$459F             ; Yes ... done
4590: FE 20           CP      $20                 ; Is it a space betwen words?
4592: CA 9F 45        JP      Z,$459F             ; Yes ... done
4595: 12              LD      (DE),A              ; Store input word char to storage
4596: 23              INC     HL                  ; Next input
4597: 13              INC     DE                  ; Next storage
4598: 05              DEC     B                   ; Count down remaining storage
4599: 78              LD      A,B                 ; Storage all ...
459A: FE 01           CP      $01                 ; ... full?
459C: C2 8B 45        JP      NZ,$458B            ; No ... keep copying
459F: 3E 40           LD      A,$40               ; Fill ...
45A1: 12              LD      (DE),A              ; ... remainder of ...
45A2: 13              INC     DE                  ; ... storage ...
45A3: 05              DEC     B                   ; ... with ...
45A4: C2 9F 45        JP      NZ,$459F            ; ... the "@" character
45A7: C9              RET                         

numBytesWordData:
45A8: 00

bufferHasSomething:
45A9: 00 ; 0 if the input buffer is empty or 1 if there is input

nounPointer:
45AA: 00 00

; unused
45AC: 00 00

Print Packed

PrintPacked:
; Unpack a message (or multiple packed messages) and print.
; HL is pointer to message
45AE: 7E              LD      A,(HL)              ; Next byte of data
45AF: A7              AND     A                   ; Return if we are ...
45B0: C8              RET     Z                   ; ... at the end
;
45B1: 23              INC     HL                  ; Next in string
45B2: 11 5A 46        LD      DE,inputBuffer      ; Destination buffer
45B5: CD C2 47        CALL    UnpackStringToScreen; Unpack the string
45B8: 7E              LD      A,(HL)              ; Character from string
45B9: A7              AND     A                   ; 0 means end with a carriage return?
45BA: CA E7 45        JP      Z,PrintCarriageReturn; Yes, print carriage return and out
45BD: FE 01           CP      $01                 ; 1 means end with nothing?
45BF: C8              RET     Z                   ; Yes, just return
45C0: 47              LD      B,A                 ; Print ...
45C1: E5              PUSH    HL                  ; ... the ...
45C2: CD FF 45        CALL    PrintChar           ; ... character
45C5: E1              POP     HL                  ; Restore pointer to string
45C6: 7E              LD      A,(HL)              ; Character we just printed
45C7: FE 0A           CP      $0A                 ; Line feed means start a new unpack/print?
45C9: 23              INC     HL                  ; Point to next character
45CA: CA AE 45        JP      Z,PrintPacked       ; Yes, start a new unpack/print
45CD: C3 B8 45        JP      $45B8               ; No, continue with current unpacked string

PrintPlain:
; HL points to message terminated by
;  - 0 : add a CR on the end and return
;  - 1 : no CR on the end and return
; Return with B holding last character (if any) sent to ROM routine.
;
45D0: 7E              LD      A,(HL)              ; Next character
45D1: A7              AND     A                   ; 0 means end with a line feed?
45D2: CA E7 45        JP      Z,PrintCarriageReturn; Yes, print line feed and out
45D5: FE 01           CP      $01                 ; 1 means end with nothing?
45D7: C8              RET     Z                   ; Yes, just return
45D8: FE 40           CP      $40                 ; Character is 40 (ignore)?
45DA: CA E3 45        JP      Z,$45E3             ; Yes, just ingore the character
45DD: 47              LD      B,A                 ; Print ...
45DE: E5              PUSH    HL                  ; ... the ...
45DF: CD FF 45        CALL    PrintChar           ; ... character
45E2: E1              POP     HL                  ; Restore pointer to string
45E3: 23              INC     HL                  ; Next character in string
45E4: C3 D0 45        JP      PrintPlain          ; 
;
PrintCarriageReturn:
45E7: 06 0D           LD      B,$0D               ; Print ...
45E9: 78              LD      A,B                 ; ... carriage ...
45EA: CD FF 45        CALL    PrintChar           ; ... return
45ED: C9              RET                         

Wait for key

WaitForKey:
45EE: D5              PUSH    DE                  ; ROM routine mangles this
45EF: 3A 74 47        LD      A,(keyWaitCounter)  ; Bump the ...
45F2: 3C              INC     A                   ; ... counter used for ...
45F3: 32 74 47        LD      (keyWaitCounter),A  ; ... random numbers
45F6: CD 2B 00        CALL    GetKey              ; Call the ROM routine to scan the keyboard
45F9: A7              AND     A                   ; Any key typed?
45FA: CA EF 45        JP      Z,$45EF             ; No, keep waiting
45FD: D1              POP     DE                  ; Restore our DE
45FE: C9              RET                         ; Return key in A

Print Char

PrintChar:
45FF: D5              PUSH    DE                  ; ROM routine mangles this
4600: CD 33 00        CALL    PrintChar           ; Send character A to the screen
4603: D1              POP     DE                  ; Restore our DE
4604: C9              RET                         

Prompt And Read Line

PromptAndReadLine:
4605: 06 3A           LD      B,$3A               ; Colon ":"
4607: 78              LD      A,B                 ; User starts typing after ...
4608: CD FF 45        CALL    PrintChar           ; ... the colon
460B: 21 5A 46        LD      HL,inputBuffer      ; Start of the input buffer
460E: 0E 00           LD      C,$00               ; Input character count (0 to start)
;
4610: E5              PUSH    HL                  ; Hold ...
4611: C5              PUSH    BC                  ; ... all ...
4612: D5              PUSH    DE                  ; ... our registers
4613: CD EE 45        CALL    WaitForKey          ; 
4616: D1              POP     DE                  ; Restore ...
4617: C1              POP     BC                  ; ... all ...
4618: E1              POP     HL                  ; ... our registers
4619: 47              LD      B,A                 ; Key from the user
461A: FE 08           CP      $08                 ; Backspace?
461C: CA 41 46        JP      Z,BackSpace         ; Yes, handle erasing a character
461F: 77              LD      (HL),A              ; Store the key in the bufer
4620: CD FF 45        CALL    PrintChar           ; Echo the key to the screen
4623: FE 0D           CP      $0D                 ; Was it an ENTER?
4625: CA 57 46        JP      Z,InputDone         ; Yes, we are done
4628: 0C              INC     C                   ; Increment the character count
4629: 23              INC     HL                  ; Next in buffer
462A: 11 7A 46        LD      DE,OnePastInput     ; One past the end of the input buffer
462D: 7C              LD      A,H                 ; Overflowed the ...
462E: BA              CP      D                   ; ... buffer?
462F: DA 10 46        JP      C,$4610             ; No, keep taking keys
4632: 7D              LD      A,L                 ; Overflowed the ...
4633: BB              CP      E                   ; ... buffer?
4634: DA 10 46        JP      C,$4610             ; No, keep taking keys
4637: 06 08           LD      B,$08               ; Print ...
4639: 78              LD      A,B                 ; ... backspace to ...
463A: CD FF 45        CALL    PrintChar           ; ... ignore input
463D: 2B              DEC     HL                  ; Remove the input from the end of the buffer
463E: C3 10 46        JP      $4610               ; Back for more input

BackSpace:
4641: 2B              DEC     HL                  ; Back up the buffer pointer
4642: 3E 46           LD      A,$46               ; Underflowed the ...
4644: BC              CP      H                   ; ... buffer?
4645: DA 4E 46        JP      C,$464E             ; No ... keep it
4648: 7D              LD      A,L                 ; Underflowed the ...
4649: FE 5A           CP      $5A                 ; ... buffer?
464B: DA 0B 46        JP      C,$460B             ; Yes ... set to start of buffer
464E: 3E 08           LD      A,$08               ; Remove the character ...
4650: 47              LD      B,A                 ; ... from the ...
4651: CD FF 45        CALL    PrintChar           ; ... screen
4654: C3 10 46        JP      $4610               ; Back for more input

InputDone:
4657: 36 00           LD      (HL),$00            ; Put the null terminator on the end of the input
4659: C9              RET                         

Input Buffer

; Input buffer (with some uninitialized leftover data!)
; The buffer is 41 bytes (room for a null terminator after 40)
; Again, look 99 bytes down for the last assembly's data.
; Interestingly, the data 99 down overlaps a reserved area too,
; which lets us see the assembly BEFORE THAT!
inputBuffer:
; UNINITIALIZED MEMORY
465A: 41 4E 54 20 4D 45 20 54 4F 20 44 4F 20 57 49 54  ; WANT_ME_TO_DO_WIT
466A: 48 20 54 48 45 20 2C 41 0D 12 30 30 30 30 20 20  ; H_THE_ ,A<CR>?000__  ; 18 bytes, whatever the instruction is

; The 2nd line is long ... total length of 18, but the double space after "0000"
; means it has no leading label. The text of the line would be 10 characters. There
; are no 8080 opcodes that long, so the instruction likely references a label or
; constant (like MVI H,123H).
; 8080 instructions that end with ",A": "MOV x,A" where X is: B,C,D,E,H,L,M,A
; Z80 "LD (xxxx),A" would be a "STA" opcode. We are looking for a "LD r,A" Z80
; op followed by an instruction that references a label. There are lots and lots
; of those.

; Hole within the hole:
; --  "---------------,A"  0D  ; Must be "MOV x,A" where x is B,C,D,E,H,L,M,A
; 12  "0000  -----------"  --  ; Double-space means no label, and we know the length (10)

OnePastInput: ; Really UNUSED, but having this makes a label reference above
467A: 00

noun:
467B: 00

verb:
467C: 00

grammar:
467D: 00

nextErrorString:
467E: 00    ; Which error string do we show next? 0, 1, 2, or 3

PtrErrorString1:
; 61	 WHAT?
467F: 25 47 ; " WHAT?"
PtrErrorString2:
; 60	 I DON'T KNOW THAT WORD.
4681: 2C 47 ; "I DON'T KNOW THAT WORD."
PtrErrorString3:
; 13	 I DON'T UNDERSTAND THAT!
4683: 44 47 ; "I DON'T UNDERSTAND."
PtrErrorString4:
4685: 58 47 ; "I DON'T KNOW WHAT YOU MEAN."

; I_SEE_NO_
MsgISeeNo:
4687: 49 20 53 45 45 20 4E 4F 20 01

; _HERE.
MsgHere:
4691: 20 48 45 52 45 2E 00

; YOU_AREN'T_CARRYING_IT.
MsgNotCarrying:
4698: 59 4F 55 20 41 52 45 4E 27 54 20 43 41 52 52 59 49 4E 47 20 49 54 2E 00

; WHAT_DO_YOU_WANT_ME_TO_DO_WITH_THE_
MsgWhatDoWith:
46B0: 57 48 41 54 20 44 4F 20 59 4F 55 20 57 41 4E 54 20 4D 45 20 54 4F 20 44 4F 20 57 49 54 48 20 54
46D0: 48 45 20

; 40 byte buffer for unknown noun word
unknownNoun:
; UNINITIALIZED MEMORY
46D3: 4F 57 20 54 48 41 54 20 57 4F ; OW_THAT_WO
46DD: 52 44 2E 00 49 20 44 4F 4E 27 ; RD.*I_DON'
46E7: 54 20 55 4E 44 45 52 53 54 41 ; T_UNDERSTA
46F1: 4E 44 2E 00 49 20 44 4F 4E 27 ; ND.*I_DON'

unknownNounPunct:
; "?"
46FB: 3F 00 ; The code changes this depending on the sentence

; 40 byte buffer for unknown verb (followed by WHAT?)
unknownVerb:
; UNINITIALIZED MEMORY
; This is from the source code a few bytes down
46FD: 4B 4E 4F 57 20 57 48 41 54 20 ; KNOW_WHAT_
4707: 59 4F 55 20 4D 45 41 4E 2E 00 ; YOU_MEAN.*
4711: 00 00 00 00 00 00 00 00 00 00 ;
471B: 00 00 00 00 57 45 4C 43 4F 4D ;     WELCOM

ErrorString1:
;" WHAT?"
4725: 20 57 48 41 54 3F 00

ErrorString2:
; "I DON'T KNOW THAT WORD."
472C: 49 20 44 4F 4E 27 54 20 4B 4E 4F 57 20 54 48 41 54 20 57 4F 52 44 2E 00

ErrorString3:
; "I DON'T UNDERSTAND."
4744: 49 20 44 4F 4E 27 54 20 55 4E 44 45 52 53 54 41 4E 44 2E 00

ErrorString4:
; "I DON'T KNOW WHAT YOU MEAN."
4758: 49 20 44 4F 4E 27 54 20 4B 4E 4F 57 20 57 48 41 54 20 59 4F 55 20 4D 45 41 4E 2E 00

keyWaitCounter:
4774: 00 ; Entropy for random numbers

; unused
4775: 00 00 00 00

currentParsePtr:
4779: 00 00

startOfWord:
477B: 00 00 ; Input buffer start of word we are tokenizing

charsInWord:
477D: 00 ; Number of characters in the test word while tokenizing

; unused
477E: 00 00 00

wordBeingTested:
4781: 00

; "WELCOME TO PYRAMID!!"
WelcomeMsg:
4782: 57 45 4C 43 4F 4D 45 20 54 4F 20 50 59 52 41 4D 49 44 21 21 00

; The next 40 bytes (there is that magic number 40 again) are uninitalized
; memory reserved for the stack. The uninitialized memory contains the output of
; a previous assembly, but with a different origin. You'll find these live
; instructions in this final assembly at 47FA below -- just 99 bytes from here.
; 99 bytes of compiled code was added above this between the final assembly and
; the assembly before this. We get a peek at the system one step before the
; final assembly.
;
;                ; Disassembly of the PREVIOUS state of the code.
;                ; See 47FA below for this code in its final position.
; UNINITIALIZED MEMORY
4797: E1         ;     POP     HL
4798: CA B8 47   ;     JP      Z,$47B8
479B: 3E 00      ;     LD      A,$00
479D: CE 00      ;     ADC     $00
479F: 29         ;     ADD     HL,HL
47A0: 44         ;     LD      B,H
47A1: 85         ;     ADD     A,L
47A2: 2A 22 48   ;     LD      HL,($4822)
47A5: 95         ;     SUB     L
47A6: 4F         ;     LD      C,A
47A7: 78         ;     LD      A,B
47A8: 9C         ;     SBC     H
47A9: 47         ;     LD      B,A
47AA: C5         ;     PUSH    BC
47AB: D2 B0 47   ;     JP      NC,$47B0
47AE: 09         ;     ADD     HL,BC
47AF: E3         ;     EX      (SP),HL
47B0: 21 B7 47   ;     LD      HL,$47B7
47B3: 3F         ;     CCF
47B4: C3 90 47   ;     JP      $4790
47B7: 00         ;
47B8: 01 F9 47   ;     LD      NC,$47F9
47BB: 09         ;     ADD     HL,BC
47BC: 7E         ;     LD      A,(HL)
47BD: C1         ;     POP     BC
47BE: E1         ;     POP     HL

TopOfStack:
; The Z80 stack decrements before write. The 40 bytes above are the uninitialized
; memory reserved for the statck.
47BF: 00 

EmptyString:
47C0: 00 00 ; For objects that have no descriptions

Packed strings

By limiting a character to 40 possible values, we can pack three characters into 2 bytes:

40 x 40 x 40 = 64,000 (just shy of 65,536)

The 40 characters from CharTable: ?!2_"'<>/03ABCDEFGHIJKLMNOPQRSTUVWXYZ-,.

The first byte of a packed string is the number of words to unpack. Other printable characters may be listed after that with a 0 terminating the string.

For instance, PS_02:

; YOU_ARE_IN_THE_DESERT.
07 C7 DE 94 14 4B 5E 96 96 DB 72 F5 59 3E 62 2E 00

There are 7 words to unpack (14 bytes) followed by the "2E" period and the null terminator 0.

Each double word is listed LSB first. The first word to unpack is 0xDEC7.

val = 0x1494
c1 = val % 40  # 31 -> 'U'
val //= 40
c2 = val % 40  # 25 -> 'O'
val //= 40
c3 = val % 40  # 35 -> 'Y'

Which gives us 'YOU' (reversed order).

Next is 1419:

c1 = 28  -> 'R'
c2 = 11  -> 'A'
c3 = 3   -> '_' (really the space character)

Bringing us to "YOU_AR", and so on.

UnpackStringToScreen:
47C2: 32 84 48        LD      (unpackNumWords),A  ; Number of words to unpack
47C5: 3E 01           LD      A,$01               ; We are unpacking to ...
47C7: 32 87 48        LD      (unpackFlagToScreen),A; ... the screen
47CA: C3 D4 47        JP      $47D4               ; Do the unpack
;
UnpackStringToBuffer:  ; Never used
47CD: 32 84 48        LD      (unpackNumWords),A  ; Number of words to unpack
47D0: 97              SUB     A                   ; We are unpacking to ...
47D1: 32 87 48        LD      (unpackFlagToScreen),A; ... the buffer
;
; HL points to data to unpack
; DE points to unpack buffer (just 3 bytes if going to screen)
47D4: E5              PUSH    HL                  ; Hold the pointer to the words
;
47D5: 06 03           LD      B,$03               ; Three characters to extract from word
47D7: E1              POP     HL                  ; Get the ...
47D8: 7E              LD      A,(HL)              ; ... MSB of the word
47D9: 23              INC     HL                  ; Get the ...
47DA: 4E              LD      C,(HL)              ; ... LSB of the word
47DB: 23              INC     HL                  ; Update the pointer ...
47DC: E5              PUSH    HL                  ; ... to the words
47DD: 61              LD      H,C                 ; Data word ...
47DE: 6F              LD      L,A                 ; ... to HL
47DF: 13              INC     DE                  ; Skip to end ...
47E0: 13              INC     DE                  ; ... we are storing in reverse
47E1: EB              EX      DE,HL               ; Now HL=buffer and DE=data
47E2: E5              PUSH    HL                  ; Hold pointer to the buffer
47E3: C5              PUSH    BC                  ; Hold our count to 3
;
47E4: 21 28 00        LD      HL,$0028            ; The value of ...
47E7: 22 85 48        LD      (valueOfForty),HL   ; ... 40 for division (repeated subtraction)
47EA: 21 1A 48        LD      HL,shiftCount       ; We stop after ...
47ED: 36 11           LD      (HL),$11            ; ... 16 shifts (end + 1 = 17)
47EF: 01 00 00        LD      BC,$0000            ; Value we are extracting
47F2: C5              PUSH    BC                  ; Hold the value on the stack
47F3: 7B              LD      A,E                 ; Shift ...
47F4: 17              RLA                         ; ... DE ...
47F5: 5F              LD      E,A                 ; ... left ...
47F6: 7A              LD      A,D                 ; ... one ...
47F7: 17              RLA                         ; ... bit ...
47F8: 57              LD      D,A                 ; ... bit goes to CF
47F9: 35              DEC     (HL)                ; All shifts done?
47FA: E1              POP     HL                  ; Current extracted value from stack
47FB: CA 1B 48        JP      Z,$481B             ; Yes, store the extracted character
47FE: 3E 00           LD      A,$00               ; Left bit ...
4800: CE 00           ADC     $00                 ; ... to A
4802: 29              ADD     HL,HL               ; Value = value * 2
4803: 44              LD      B,H                 ; MSB
4804: 85              ADD     A,L                 ;
4805: 2A 85 48        LD      HL,(valueOfForty)   ; 
4808: 95              SUB     L                   ;
4809: 4F              LD      C,A                 ;
480A: 78              LD      A,B                 ; TODO figure out the exact math here
480B: 9C              SBC     H                   ;
480C: 47              LD      B,A                 ;
480D: C5              PUSH    BC                  ;
480E: D2 13 48        JP      NC,$4813            ; Less than 40 ... skip adding
4811: 09              ADD     HL,BC               ; Greater or equal, add to the extracted value
4812: E3              EX      (SP),HL             ; New value back to stack
4813: 21 1A 48        LD      HL,shiftCount       ; 
4816: 3F              CCF                         ; Clear carry for next math
4817: C3 F3 47        JP      $47F3               ; Do all bits

shiftCount:
481A: 00  ; Count of shifts during the unpack algorithm

481B: 01 5C 48        LD      BC,CharTable        ; Offset to character table
481E: 09              ADD     HL,BC               ; Offset to the character in the table
481F: 7E              LD      A,(HL)              ; Get the character
4820: C1              POP     BC                  ; Restore the count in B
4821: E1              POP     HL                  ; Restore the pointer to buffer
4822: 77              LD      (HL),A              ; Store the character in the buffer
4823: 2B              DEC     HL                  ; Working backwards in sets of 3
4824: 05              DEC     B                   ; All 3 values extracted?
4825: C2 E2 47        JP      NZ,$47E2            ; No, go get them all
4828: 3A 87 48        LD      A,(unpackFlagToScreen); Unpacking to ...
482B: A7              AND     A                   ; ... a buffer?
482C: CA 44 48        JP      Z,$4844             ; Yes, skip screen printing
;
482F: E5              PUSH    HL                  ; Hold ...
4830: C5              PUSH    BC                  ; ... our ...
4831: D5              PUSH    DE                  ; ... progress ...
4832: 1E 03           LD      E,$03               ; Three characters to print
4834: 23              INC     HL                  ; Next to print
4835: 46              LD      B,(HL)              ; Get the character
4836: E5              PUSH    HL                  ; Hold the buffer pointer
4837: 78              LD      A,B                 ; To B
4838: CD FF 45        CALL    PrintChar           ; Print the unpacked character
483B: E1              POP     HL                  ; Restore buffer pointer
483C: 23              INC     HL                  ; Next in buffer
483D: 1D              DEC     E                   ; All 3 printed?
483E: C2 35 48        JP      NZ,$4835            ; No, print the 3 we just unpacked
4841: D1              POP     DE                  ; Restore ...
4842: C1              POP     BC                  ; ... our ...
4843: E1              POP     HL                  ; ... progress
;
4844: EB              EX      DE,HL               ; Now HL=data and DE=buffer
4845: 13              INC     DE                  ; Will be next in buffer
4846: 3A 87 48        LD      A,(unpackFlagToScreen); Are we unpacking ...
4849: A7              AND     A                   ; ... to the screen?
484A: C2 50 48        JP      NZ,$4850            ; Yes ... reuse this 3-byte buffer
484D: 13              INC     DE                  ; No, move to the ...
484E: 13              INC     DE                  ; ... next 3-byte slot ...
484F: 13              INC     DE                  ; ... in the buffer
4850: 3A 84 48        LD      A,(unpackNumWords)  ; Count down ...
4853: 3D              DEC     A                   ; ... number of ...
4854: 32 84 48        LD      (unpackNumWords),A  ; ... words
4857: C2 D5 47        JP      NZ,$47D5            ; Go back for all the words
485A: E1              POP     HL                  ; Point to the next character after the words in the string
485B: C9              RET                         

Character Table

; Character compression table
CharTable:
485C: 3F 21 32 20 22 27 3C 3E 2F 30 33                 ; ?!2_"'<>/03
4867: 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50  ; ABCDEFGHIJKLMNOP
4877: 51 52 53 54 55 56 57 58 59 5A 2D 2C 2E           ; QRSTUVWXYZ-,.

unpackNumWords:
4884: 00

valueOfForty:  ; Used in dividing by 40
4885: 00 00

unpackFlagToScreen:
4887: 00 ; Set to 1 to print the characters or 0 to buffer unpack to the buffer

Room Table

Each entry is 4 bytes. The first word is the packed room description. The second word is the room's command script.

Woods 1-8 rewritten left out. New desert sequence added here as 1-6.

The following messages in loc.c are regular prints here: 16, 20, 21, 22, 26, 31, 32, 40, 59, 89, 90

Large sequences left out of Pyramid:
  - 107 - 112 "Witt's end" (replaced with Land of the Dead)
  - 69 - 79 "Secret canyon area"
  - 115 - 140 "Repository, Dragon, and Bear"

Single rooms missing from Pyramid:
  - 35 "Shadowing figure peering back at you" (mirror from 110, which was removed)
  - 66 "Swiss cheese room" (better in a cave)
  - 95 "Sparkling waterfall" (probably not a lot of these in a pyramid) TRIDENT here
  - 113 "Underground reservoir" (probably not a lot of these in a pyramid)
  - 91 "Steep incline"  
  - 97 "Oriental room"
  - 98 "Misty carvern"
  - 101 "Dark room" STONE TABLET congrats on bringing light

Rusty door in 94. Oil to get access to 95 and the trident.

Four of these missing single rooms were ported to Pyramid but later removed likely to fit the game in 16K.

Which of these 4 were made the port? My best guesses above

RoomTable:
;
; 81 rooms numbered starting at 1
;      Description   Script
4888: DB 5B CC 49 ; PS_00 room_1    new "before entrance"
488C: 10 5C E1 49 ; PS_01 room_2    new "in entrance" (wood's woodsRoom3 wellhouse)
4890: 57 5C F2 49 ; PS_02 room_3    new "desert"
4894: 57 5C 03 4A ; PS_02 room_4    new "desert"
4898: 57 5C 14 4A ; PS_02 room_5    new "desert"
489C: 57 5C 25 4A ; PS_02 room_6    new "desert"
;
48A0: 68 5C 36 4A ; PS_03 room_7    woodsRoom9
48A4: E2 5C 47 4A ; PS_04 room_8    woodsRoom10
48A8: 28 5D 58 4A ; PS_05 room_9    woodsRoom11
48AC: 7D 5D 69 4A ; PS_06 room_10   woodsRoom12
48B0: A0 5D 7E 4A ; PS_07 room_11   woodsRoom13
48B4: 1E 5E 87 4A ; PS_08 room_12   woodsRoom14
48B8: 8E 5E 9D 4A ; PS_09 room_13   woodsRoom15
48BC: 69 5F C8 4A ; PS_0A room_14   woodsRoom18
48C0: AB 5F D1 4A ; PS_0B room_15   woodsRoom17
48C4: 08 60 0D 4B ; PS_0C room_16   woodsRoom19
48C8: 3C 60 48 4B ; PS_0D room_17   woodsRoom29
48CC: 55 60 51 4B ; PS_0E room_18   woodsRoom27
48D0: 85 60 90 4B ; PS_0F room_19   woodsRoom41
48D4: F1 60 A9 4B ; PS_10 room_20   woodsRoom60
48D8: 5F 61 BE 4B ; PS_11 room_21   woodsRoom61
48DC: AC 61 C7 4B ; PS_12 room_22   woodsRoom62
48E0: D8 61 D8 4B ; PS_13 room_23   woodsRoom63
48E4: E0 61 E1 4B ; PS_14 room_24   woodsRoom30
48E8: 18 62 F2 4B ; PS_15 room_25   woodsRoom28
48EC: 58 62 07 4C ; PS_16 room_26   woodsRoom33
48F0: B0 62 14 4C ; PS_17 room_27   woodsRoom34
;
48F4: C8 62 21 4C ; PS_18 room_28   woodsRoom42
48F8: C8 62 36 4C ; PS_18 room_29   woodsRoom80
48FC: C8 62 47 4C ; PS_18 room_30   woodsRoom45
4900: C8 62 60 4C ; PS_18 room_31   woodsRoom87
4904: C8 62 69 4C ; PS_18 room_32   woodsRoom43
4908: C8 62 76 4C ; PS_18 room_33   woodsRoom44
490C: C8 62 87 4C ; PS_18 room_34   woodsRoom50
4910: C8 62 98 4C ; PS_18 room_35   woodsRoom52
4914: C8 62 B1 4C ; PS_18 room_36   woodsRoom55
4918: C8 62 C2 4C ; PS_18 room_37   woodsRoom49
491C: C8 62 CB 4C ; PS_18 room_38   woodsRoom51
4920: C8 62 DC 4C ; PS_18 room_39   woodsRoom53
4924: C8 62 E9 4C ; PS_18 room_40   woodsRoom84
4928: C8 62 F6 4C ; PS_18 room_41   woodsRoom83
492C: D8 61 03 4D ; PS_13 room_42   woodsRoom46
4930: D8 61 08 4D ; PS_13 room_43   woodsRoom47
4934: D8 61 0D 4D ; PS_13 room_44   woodsRoom82
4938: D8 61 12 4D ; PS_13 room_45   woodsRoom48
493C: D8 61 17 4D ; PS_13 room_46   woodsRoom54
4940: D8 61 1C 4D ; PS_13 room_47   woodsRoom86
4944: D8 61 21 4D ; PS_13 room_48   woodsRoom56
4948: D8 61 26 4D ; PS_13 room_49   woodsRoom58
494C: D8 61 2B 4D ; PS_13 room_50   woodsRoom85
4950: D8 61 30 4D ; PS_13 room_51   woodsRoom81
4954: EA 62 41 4D ; PS_19 room_52   woodsRoom57
4958: D8 61 56 4D ; PS_13 room_53   woodsRoom114
;
495C: 49 63 5B 4D ; PS_1A room_54   woodsRoom36
4960: A6 63 68 4D ; PS_1B room_55   woodsRoom37
4964: DA 63 75 4D ; PS_1C room_56   woodsRoom38
4968: 1F 64 93 4D ; PS_1D room_57   woodsRoom39
496C: 7A 64 9C 4D ; PS_1E room_58   woodsRoom64
4970: 0A 65 B1 4D ; PS_1F room_59   woodsRoom106
4974: A1 65 BE 4D ; PS_20 room_60   woodsRoom108
4978: D5 65 06 4E ; PS_21 room_61   woodsRoom103
497C: 82 66 21 4E ; PS_22 room_62   woodsRoom102
4980: E0 66 2A 4E ; PS_23 room_63   woodsRoom104
4984: 07 67 33 4E ; PS_24 room_64   woodsRoom105
4988: 29 67 3C 4E ; PS_25 room_65   woodsRoom65
498C: 89 67 65 4E ; PS_26 room_66   woodsRoom68
4990: 00 00 00 00 ; unused 67           ?woodsRoom66
4994: D2 6B 3B 4F ; PS_31 room_68   woodsRoom94
4998: 00 00 00 00 ; unused 69           ?woodsRoom69
499C: B1 6B 32 4F ; PS_30 room_70   woodsRoom93
49A0: 5C 6B 25 4F ; PS_2F room_71   woodsRoom92
49A4: 25 68 6E 4E ; PS_27 room_72   woodsRoom96
49A8: 82 68 77 4E ; PS_28 room_73   woodsRoom99
;
; Rooms 73 and 76 are the "tight squeeze" with the emerald. In the
; In the Woods implementation, there are 5 rooms here. His ORIENT
; room (97) and his DARK room (101) are dead-ends with one passage
; each. I suspect these were the two
49AC: 00 00 00 00 ; unused 74         ?
49B0: 00 00 00 00 ; unused 75         ?woodsRoom91,95,  97,98,101
;
49B4: F6 68 86 4E ; PS_29 room_76   woodsRoom100
49B8: F3 6A 0E 4F ; PS_2E room_77   woodsRoom88
49BC: 3F 69 9B 4E ; PS_2A room_78   woodsRoom67
49C0: 21 6A A8 4E ; PS_2B room_79   woodsRoom24
49C4: 4B 6A B1 4E ; PS_2C room_80   woodsRoom23
49C8: 9D 6A BE 4E ; PS_2D room_81   woodsRoom25

Room Scripts

RoomScripts:

room_1:
; PS_00
; YOU_ARE_STANDING_BEFORE_THE_ENTRANCE_OF_A_PYRAMID.__AROUND_YOU__
; IS_A_DESERT.
;
49CC: 01 03     ; N
49CE: 01 02     ;     MoveToRoom(room_2) new
49D0: 02 03     ; E
49D2: 01 03     ;     MoveToRoom(room_3) new
49D4: 03 03     ; S
49D6: 01 04     ;     MoveToRoom(room_4) new
49D8: 04 03     ; W
49DA: 01 05     ;     MoveToRoom(room_5) new
49DC: 0B 03     ; IN
49DE: 01 02     ;     MoveToRoom(room_2) new
49E0: 00

room_2:
; PS_01
; YOU_ARE_IN_THE_ENTRANCE_TO_THE_PYRAMID.__A_HOLE_IN_THE_FLOOR____
; LEADS_TO_A_PASSAGE_BENEATH_THE_SURFACE.
;
49E1: 03 03     ; S
49E3: 01 01     ;    MoveToRoom(room_1) new
49E5: 0A 03     ; D
49E7: 01 07     ;    MoveToRoom(room_7) woodsRoom9
49E9: 0C 03     ; OUT
49EB: 01 01     ;    MoveToRoom(room_1) new
49ED: 12 03     ; PANEL
49EF: 01 1A     ;    MoveToRoom(room_26) woodsRoom33
49F1: 00

room_3:
; PS_02
; YOU_ARE_IN_THE_DESERT.
;
49F2: 01 03     ; N
49F4: 01 06     ;    MoveToRoom(room_6) new
49F6: 02 03     ; E
49F8: 01 03     ;    MoveToRoom(room_3) new
49FA: 03 03     ; S
49FC: 01 04     ;    MoveToRoom(room_4) new
49FE: 04 03     ; W
4A00: 01 01     ;    MoveToRoom(room_1) new
4A02: 00

room_4:
; PS_02
; YOU_ARE_IN_THE_DESERT.
;
4A03: 01 03     ; N
4A05: 01 01     ;    MoveToRoom(room_1) new
4A07: 02 03     ; E
4A09: 01 03     ;    MoveToRoom(room_3) new
4A0B: 03 03     ; S
4A0D: 01 04     ;    MoveToRoom(room_4) new
4A0F: 04 03     ; W
4A11: 01 05     ;    MoveToRoom(room_5) new
4A13: 00

room_5:
; PS_02
; YOU_ARE_IN_THE_DESERT.
;
4A14: 01 03     ; N
4A16: 01 06     ;    MoveToRoom(room_6) new
4A18: 02 03     ; E
4A1A: 01 01     ;    MoveToRoom(room_1) new
4A1C: 03 03     ; S
4A1E: 01 04     ;    MoveToRoom(room_4) new
4A20: 04 03     ; W
4A22: 01 05     ;    MoveToRoom(room_5) new
4A24: 00

room_6:
; PS_02
; YOU_ARE_IN_THE_DESERT.
;
4A25: 01 03     ; N
4A27: 01 06     ;    MoveToRoom(room_6) new
4A29: 02 03     ; E
4A2B: 01 03     ;    MoveToRoom(room_3) new
4A2D: 03 03     ; S
4A2F: 01 01     ;    MoveToRoom(room_1) new
4A31: 04 03     ; W
4A33: 01 05     ;    MoveToRoom(room_5) new
4A35: 00

room_7: ; woodsRoom9
; PS_03
; YOU_ARE_IN_A_SMALL_CHAMBER_BENEATH_A_HOLE_FROM_THE_SURFACE.__A__
; LOW_CRAWL_LEADS_INWARD_TO_THE_WEST.__HIEROGLYPHICS_ON_THE_WALL__
; TRANSLATE,_"CURSE_ALL_WHO_ENTER_THIS_SACRED_CRYPT."
;
4A36: 09 03     ; U
4A38: 01 02     ;    MoveToRoom(room_2) new
4A3A: 0C 03     ; OUT
4A3C: 01 02     ;    MoveToRoom(room_2) new
4A3E: 04 03     ; W
4A40: 01 08     ;    MoveToRoom(room_8) woodsRoom10
4A42: 0B 03     ; IN
4A44: 01 08     ;    MoveToRoom(room_8) woodsRoom10
4A46: 00

room_8: ; woodsRoom10
; PS_04
; YOU_ARE_CRAWLING_OVER_PEBBLES_IN_A_LOW_PASSAGE.__THERE_IS_A_DIM_
; LIGHT_AT_THE_EAST_END_OF_THE_PASSAGE.
;
4A47: 02 03     ; E
4A49: 01 07     ;    MoveToRoom(room_7) woodsRoom9
4A4B: 0C 03     ; OUT
4A4D: 01 07     ;    MoveToRoom(room_7) woodsRoom9
4A4F: 04 03     ; W
4A51: 01 09     ;    MoveToRoom(room_9) woodsRoom11
4A53: 0B 03     ; IN
4A55: 01 09     ;    MoveToRoom(room_9) woodsRoom11
4A57: 00

room_9: ; woodsRoom11
; PS_05
; YOU_ARE_IN_A_ROOM_FILLED_WITH_BROKEN_POTTERY_SHARDS_OF_ANCIENT__
; EGYPTIAN_CRAFTS.__AN_AWKWARD_CORRIDOR_LEADS_UPWARD_AND_WEST.
;
4A58: 02 03     ; E
4A5A: 01 08     ;    MoveToRoom(room_8) woodsRoom10
4A5C: 0B 03     ; IN
4A5E: 01 0A     ;    MoveToRoom(room_10) woodsRoom12
4A60: 09 03     ; U
4A62: 01 0A     ;    MoveToRoom(room_10) woodsRoom12
4A64: 04 03     ; W
4A66: 01 0A     ;    MoveToRoom(room_10) woodsRoom12
4A68: 00

room_10: ; woodsRoom12
; PS_06
; YOU_ARE_IN_AN_AWKWARD_SLOPING_EAST/WEST_CORRIDOR.
;
4A69: 0A 03     ; D
4A6B: 01 09     ;    MoveToRoom(room_9) woodsRoom11
4A6D: 02 03     ; E
4A6F: 01 09     ;    MoveToRoom(room_9) woodsRoom11
4A71: 0B 03     ; IN
4A73: 01 0B     ;    MoveToRoom(room_11) woodsRoom13
4A75: 04 03     ; W
4A77: 01 0B     ;    MoveToRoom(room_11) woodsRoom13
4A79: 09 03     ; U
4A7B: 01 0B     ;    MoveToRoom(room_11) woodsRoom13
4A7D: 00

room_11: ; woodsRoom13
; PS_07
; YOU_ARE_IN_A_SPLENDID_CHAMBER_THIRTY_FEET_HIGH.__THE_WALLS_ARE__
; FROZEN_RIVERS_OF_ORANGE_STONE.__AN_AWKWARD_CORRIDOR_AND_A_GOOD__
; PASSAGE_EXIT_FROM_THE_EAST_AND_WEST_SIDES_OF_THE_CHAMBER.
;
4A7E: 02 03     ; E
4A80: 01 0A     ;    MoveToRoom(room_10) woodsRoom12
4A82: 04 03     ; W
4A84: 01 0C     ;    MoveToRoom(room_12) woodsRoom14
4A86: 00

room_12: ; woodsRoom14
; PS_08
; AT_YOUR_FEET_IS_A_SMALL_PIT_BREATHING_TRACES_OF_WHITE_MIST.__AN_
; EAST_PASSAGE_ENDS_HERE_EXCEPT_FOR_A_SMALL_CRACK_LEADING_ON._____
; ROUGH_STONE_STEPS_LEAD_DOWN_THE_PIT.
;
4A87: 02 03     ; E
4A89: 01 0B     ;    MoveToRoom(room_11) woodsRoom13
4A8B: 0A 0B     ; D
4A8D: 07 07     ;    StopIfPassElseContinue
4A8F: 02 25     ;        AssertObjectIsInPack(obj_GOLD)
4A91: 04 71 71  ;        Print(PS_6B:"YOU_ARE_AT_THE_BOTTOM_OF_THE_PIT_WITH_A_BROKEN_NECK.")
4A94: 05        ;        PrintScoreAndStop
4A95: 01 0D     ;    MoveToRoom(room_13) woodsRoom15
4A97: 04 04     ; W
4A99: 04 96 71  ;    Print(PS_6C:"THE_CRACK_IS_FAR_TOO_SMALL_FOR_YOU_TO_FOLLOW.")
4A9C: 00

room_13: ; woodsRoom15
; PS_09
; YOU_ARE_AT_ONE_END_OF_A_VAST_HALL_STRETCHING_FORWARD_OUT_OF_____
; SIGHT_TO_THE_WEST.__THERE_ARE_OPENINGS_TO_EITHER_SIDE.__NEARBY,_
; A_WIDE_STONE_STAIRCASE_LEADS_DOWNWARD.__THE_HALL_IS_VERY_MUSTY__
; AND_A_COLD_WIND_BLOWS_UP_THE_STAIRCASE.__THERE_IS_A_PASSAGE_AT__
; THE_TOP_OF_A_DOME_BEHIND_YOU.__ROUGH_STONE_STEPS_LEAD_UP_THE____
; DOME.
;
4A9D: 03 03     ; S
4A9F: 01 0E     ;    MoveToRoom(room_14) woodsRoom18
4AA1: 04 03     ; W
4AA3: 01 0F     ;    MoveToRoom(room_15) woodsRoom17
4AA5: 0A 03     ; D
4AA7: 01 10     ;    MoveToRoom(room_16) woodsRoom19
4AA9: 01 03     ; N
4AAB: 01 10     ;    MoveToRoom(room_16) woodsRoom19
4AAD: 09 0A     ; U
4AAF: 07 06     ;    StopIfPassElseContinue
4AB1: 02 25     ;        AssertObjectIsInPack(obj_GOLD)
4AB3: 04 B6 71  ;        Print(PS_6D:"THE_DOME_IS_UNCLIMBABLE.")
4AB6: 01 0C     ;    MoveToRoom(room_12) woodsRoom14
4AB8: 02 0A     ; E
4ABA: 07 06     ;    StopIfPassElseContinue
4ABC: 02 25     ;        AssertObjectIsInPack(obj_GOLD)
4ABE: 04 B6 71  ;        Print(PS_6D:"THE_DOME_IS_UNCLIMBABLE.")
4AC1: 01 0C     ;    MoveToRoom(room_12) woodsRoom14
4AC3: 20 03     ; word_20 ; in CCA loc.c this is GO_Y2 -- command: "GO Y2" or "Y2"
4AC5: 01 1A     ;    MoveToRoom(room_26) woodsRoom33
4AC7: 00

room_14: ; woodsRoom18
; PS_0A
; THIS_IS_A_LOW_ROOM_WITH_A_HIEROGLYPH_ON_THE_WALL.__IT_TRANSLATES
; "YOU_WON'T_GET_IT_UP_THE_STEPS".
;
4AC8: 0C 03     ; OUT
4ACA: 01 0D     ;    MoveToRoom(room_13) woodsRoom15
4ACC: 01 03     ; N
4ACE: 01 0D     ;    MoveToRoom(room_13) woodsRoom15
4AD0: 00

room_15: ; woodsRoom17
; PS_0B
; YOU_ARE_ON_THE_EAST_BANK_OF_A_BOTTOMLESS_PIT_STRETCHING_ACROSS__
; THE_HALL.__THE_MIST_IS_QUITE_THICK_HERE,_AND_THE_PIT_IS_TOO_WIDE
; TO_JUMP.
;
4AD1: 02 03     ; E
4AD3: 01 0D     ;    MoveToRoom(room_13) woodsRoom15
4AD5: 10 0C     ; JUMP
4AD7: 07 06     ;    StopIfPassElseContinue
4AD9: 03 01     ;        AssertObjectIsInCurrentRoomOrPack(obj_bridge_15)
4ADB: 04 C8 71  ;        Print(PS_6E:"I_RESPECTFULLY_SUGGEST_YOU_GO_ACROSS_THE_BRIDGE_INSTEAD_OF______
;                                     JUMPING.")
4ADE: 04 FA 71  ;    Print(PS_6F:"YOU_DIDN'T_MAKE_IT.")
4AE1: 05        ;    PrintScoreAndStop
4AE2: 04 0A     ; W
4AE4: 07 05     ;    StopIfPassElseContinue
4AE6: 03 01     ;        AssertObjectIsInCurrentRoomOrPack(obj_bridge_15)
4AE8: 01 12     ;        MoveToRoom(room_18) woodsRoom27
4AEA: 04 09 72  ;    Print(PS_70:"THERE_IS_NO_WAY_ACROSS_THE_BOTTOMLESS_PIT.")
4AED: 0D 05     ; CROSS
4AEF: 03 01     ;    AssertObjectIsInCurrentRoomOrPack(obj_bridge_15)
4AF1: 01 12     ;    MoveToRoom(room_18) woodsRoom27
4AF3: 23 18     ; WAVE
4AF5: 11 11     ;    AssertObjectMatchesUserInput(obj_SCEPTER)
4AF7: 07 0C     ;    StopIfPassElseContinue
4AF9: 03 01     ;        AssertObjectIsInCurrentRoomOrPack(obj_bridge_15)
4AFB: 15 01 00  ;        MoveObjectToRoom(obj_bridge_15, room_0)
4AFE: 15 02 00  ;        MoveObjectToRoom(obj_bridge_18, room_0)
4B01: 04 DE 7B  ;        Print(PS_AE:"THE_STONE_BRIDGE_HAS_RETRACTED!")
4B04: 18 01     ;    MoveObjectToCurrentRoom(obj_bridge_15)
4B06: 15 02 12  ;    MoveObjectToRoom(obj_bridge_18, room_18)
4B09: 04 F5 7B  ;    Print(PS_AF:"A_STONE_BRIDGE_NOW_SPANS_THE_BOTTOMLESS_PIT.")
4B0C: 00

room_16: ; woodsRoom19
; PS_0C
; YOU_ARE_IN_THE_PHARAOH'S_CHAMBER,_WITH_PASSAGES_OFF_IN_ALL______
; DIRECTIONS.
;
4B0D: 09 03     ; U
4B0F: 01 0D     ;    MoveToRoom(room_13) woodsRoom15
4B11: 02 03     ; E
4B13: 01 0D     ;    MoveToRoom(room_13) woodsRoom15
4B15: 03 0A     ; S
4B17: 07 06     ;    StopIfPassElseContinue
4B19: 03 0B     ;        AssertObjectIsInCurrentRoomOrPack(obj_SERPENT)
4B1B: 04 27 72  ;        Print(PS_71:"YOU_CAN'T_GET_BY_THE_SERPENT.")
4B1E: 01 11     ;    MoveToRoom(room_17) woodsRoom29
4B20: 01 0A     ; N
4B22: 07 06     ;    StopIfPassElseContinue
4B24: 03 0B     ;        AssertObjectIsInCurrentRoomOrPack(obj_SERPENT)
4B26: 04 27 72  ;        Print(PS_71:"YOU_CAN'T_GET_BY_THE_SERPENT.")
4B29: 01 19     ;    MoveToRoom(room_25) woodsRoom28
4B2B: 04 0A     ; W
4B2D: 07 06     ;    StopIfPassElseContinue
4B2F: 03 0B     ;        AssertObjectIsInCurrentRoomOrPack(obj_SERPENT)
4B31: 04 27 72  ;        Print(PS_71:"YOU_CAN'T_GET_BY_THE_SERPENT.")
4B34: 01 18     ;    MoveToRoom(room_24) woodsRoom30
4B36: 26 10     ; THROW
4B38: 11 14     ;    AssertObjectMatchesUserInput(obj_BIRD_boxed)
4B3A: 03 0B     ;    AssertObjectIsInCurrentRoomOrPack(obj_SERPENT)
4B3C: 15 0B 00  ;    MoveObjectToRoom(obj_SERPENT, room_0)
4B3F: 18 13     ;    MoveObjectToCurrentRoom(obj_BIRD)
4B41: 15 14 00  ;    MoveObjectToRoom(obj_BIRD_boxed, room_0)
4B44: 04 A1 7C  ;    Print(PS_B4:"THE_BIRD_STATUE_COMES_TO_LIFE_AND_ATTACKS_THE_SERPENT_AND_IN_AN_
;                                 ASTOUNDING_FLURRY,_DRIVES_THE_SERPENT_AWAY.__THE_BIRD_TURNS_BACK
;                                 INTO_A_STATUE.")
4B47: 00

room_17: ; woodsRoom29
; PS_0D
; YOU_ARE_IN_THE_SOUTH_SIDE_CHAMBER.
;
4B48: 01 03     ; N
4B4A: 01 10     ;    MoveToRoom(room_16) woodsRoom19
4B4C: 0C 03     ; OUT
4B4E: 01 10     ;    MoveToRoom(room_16) woodsRoom19
4B50: 00

room_18: ; woodsRoom27
; PS_0E
; YOU_ARE_ON_THE_WEST_SIDE_OF_THE_BOTTOMLESS_PIT_IN_THE_HALL_OF___
; GODS.
;
4B51: 10 0C     ; JUMP
4B53: 07 06     ;    StopIfPassElseContinue
4B55: 03 02     ;        AssertObjectIsInCurrentRoomOrPack(obj_bridge_18)
4B57: 04 C8 71  ;        Print(PS_6E:"I_RESPECTFULLY_SUGGEST_YOU_GO_ACROSS_THE_BRIDGE_INSTEAD_OF______
;                                     JUMPING.")
4B5A: 04 FA 71  ;    Print(PS_6F:"YOU_DIDN'T_MAKE_IT.")
4B5D: 05        ;    PrintScoreAndStop
4B5E: 02 0A     ; E
4B60: 07 05     ;    StopIfPassElseContinue
4B62: 03 02     ;        AssertObjectIsInCurrentRoomOrPack(obj_bridge_18)
4B64: 01 0F     ;        MoveToRoom(room_15) woodsRoom17
4B66: 04 09 72  ;    Print(PS_70:"THERE_IS_NO_WAY_ACROSS_THE_BOTTOMLESS_PIT.")
4B69: 01 06     ; N
4B6B: 04 3D 72  ;    Print(PS_72:"YOU_HAVE_CRAWLED_THROUGH_A_VERY_LOW_WIDE_PASSAGE_PARALLEL_TO_AND
;                                 NORTH_OF_THE_HALL_OF_GODS.")
4B6E: 01 13     ;    MoveToRoom(room_19) woodsRoom41
4B70: 0D 05     ; CROSS
4B72: 03 02     ;    AssertObjectIsInCurrentRoomOrPack(obj_bridge_18)
4B74: 01 0F     ;    MoveToRoom(room_15) woodsRoom17
4B76: 23 18     ; WAVE
4B78: 11 11     ;    AssertObjectMatchesUserInput(obj_SCEPTER)
4B7A: 07 0C     ;    StopIfPassElseContinue
4B7C: 03 02     ;        AssertObjectIsInCurrentRoomOrPack(obj_bridge_18)
4B7E: 15 02 00  ;        MoveObjectToRoom(obj_bridge_18, room_0)
4B81: 15 01 00  ;        MoveObjectToRoom(obj_bridge_15, room_0)
4B84: 04 DE 7B  ;        Print(PS_AE:"THE_STONE_BRIDGE_HAS_RETRACTED!")
4B87: 18 02     ;    MoveObjectToCurrentRoom(obj_bridge_18)
4B89: 15 01 0F  ;    MoveObjectToRoom(obj_bridge_15, room_15)
4B8C: 04 F5 7B  ;    Print(PS_AF:"A_STONE_BRIDGE_NOW_SPANS_THE_BOTTOMLESS_PIT.")
4B8F: 00

room_19: ; woodsRoom41
; PS_0F
; YOU_ARE_AT_THE_WEST_END_OF_THE_HALL_OF_GODS.___A_LOW_WIDE_PASS__
; CONTINUES_WEST_AND_ANOTHER_GOES_NORTH.__TO_THE_SOUTH_IS_A_LITTLE
; PASSAGE_SIX_FEET_OFF_THE_FLOOR.
;
4B90: 03 03     ; S
4B92: 01 1C     ;    MoveToRoom(room_28) woodsRoom42
4B94: 09 03     ; U
4B96: 01 1C     ;    MoveToRoom(room_28) woodsRoom42
4B98: 11 03     ; CLIMB
4B9A: 01 1C     ;    MoveToRoom(room_28) woodsRoom42
4B9C: 02 03     ; E
4B9E: 01 12     ;    MoveToRoom(room_18) woodsRoom27
4BA0: 01 03     ; N
4BA2: 01 12     ;    MoveToRoom(room_18) woodsRoom27
4BA4: 04 03     ; W
4BA6: 01 14     ;    MoveToRoom(room_20) woodsRoom60
4BA8: 00

room_20: ; woodsRoom60
; PS_10
; YOU_ARE_AT_EAST_END_OF_A_VERY_LONG_HALL_APPARENTLY_WITHOUT_SIDE_
; CHAMBERS.__TO_THE_EAST_A_LOW_WIDE_CRAWL_SLANTS_UP.__TO_THE_NORTH
; A_ROUND_TWO_FOOT_HOLE_SLANTS_DOWN.
;
4BA9: 02 03     ; E
4BAB: 01 13     ;    MoveToRoom(room_19) woodsRoom41
4BAD: 09 03     ; U
4BAF: 01 13     ;    MoveToRoom(room_19) woodsRoom41
4BB1: 04 03     ; W
4BB3: 01 15     ;    MoveToRoom(room_21) woodsRoom61
4BB5: 01 03     ; N
4BB7: 01 16     ;    MoveToRoom(room_22) woodsRoom62
4BB9: 0A 03     ; D
4BBB: 01 16     ;    MoveToRoom(room_22) woodsRoom62
4BBD: 00

room_21: ; woodsRoom61
; PS_11
; YOU_ARE_AT_THE_WEST_END_OF_A_VERY_LONG_FEATURELESS_HALL.__THE___
; HALL_JOINS_UP_WITH_A_NARROW_NORTH/SOUTH_PASSAGE.
;
4BBE: 02 03     ; E
4BC0: 01 14     ;    MoveToRoom(room_20) woodsRoom60
4BC2: 01 03     ; N
4BC4: 01 16     ;    MoveToRoom(room_22) woodsRoom62
4BC6: 00

room_22: ; woodsRoom62
; PS_12
; YOU_ARE_AT_A_CROSSOVER_OF_A_HIGH_N/S_PASSAGE_AND_A_LOW_E/W_ONE.
;
4BC7: 04 03     ; W
4BC9: 01 14     ;    MoveToRoom(room_20) woodsRoom60
4BCB: 01 03     ; N
4BCD: 01 17     ;    MoveToRoom(room_23) woodsRoom63
4BCF: 02 03     ; E
4BD1: 01 18     ;    MoveToRoom(room_24) woodsRoom30
4BD3: 03 03     ; S
4BD5: 01 15     ;    MoveToRoom(room_21) woodsRoom61
4BD7: 00

room_23: ; woodsRoom63
; PS_13
; DEAD_END.
;
4BD8: 03 03     ; S
4BDA: 01 16     ;    MoveToRoom(room_22) woodsRoom62
4BDC: 0C 03     ; OUT
4BDE: 01 16     ;    MoveToRoom(room_22) woodsRoom62
4BE0: 00

room_24: ; woodsRoom30
; PS_14
; YOU_ARE_IN_THE_WEST_THRONE_CHAMBER.__A_PASSAGE_CONTINUES_WEST___
; AND_UP_FROM_HERE.
;
4BE1: 02 03     ; E
4BE3: 01 10     ;    MoveToRoom(room_16) woodsRoom19
4BE5: 0C 03     ; OUT
4BE7: 01 10     ;    MoveToRoom(room_16) woodsRoom19
4BE9: 04 03     ; W
4BEB: 01 16     ;    MoveToRoom(room_22) woodsRoom62
4BED: 09 03     ; U
4BEF: 01 16     ;    MoveToRoom(room_22) woodsRoom62
4BF1: 00

room_25: ; woodsRoom28
; PS_15
; YOU_ARE_IN_A_LOW_N/S_PASSAGE_AT_A_HOLE_IN_THE_FLOOR.__THE_HOLE__
; GOES_DOWN_TO_AN_E/W_PASSAGE.
;
4BF2: 0C 03     ; OUT
4BF4: 01 10     ;    MoveToRoom(room_16) woodsRoom19
4BF6: 03 03     ; S
4BF8: 01 10     ;    MoveToRoom(room_16) woodsRoom19
4BFA: 01 03     ; N
4BFC: 01 1A     ;    MoveToRoom(room_26) woodsRoom33
4BFE: 20 03     ; word_20 ; in CCA loc.c this is GO_Y2 -- command: "GO Y2" or "Y2"
4C00: 01 1A     ;    MoveToRoom(room_26) woodsRoom33
4C02: 0A 03     ; D
4C04: 01 36     ;    MoveToRoom(room_54) woodsRoom36
4C06: 00

room_26: ; woodsRoom33 -- this is the Y2 room (with a panel instead of a Y2 rock)
; PS_16
; YOU_ARE_IN_A_LARGE_ROOM,_WITH_A_PASSAGE_TO_THE_SOUTH,_AND_A_WALL
; OF_BROKEN_ROCK_TO_THE_EAST.__THERE_IS_A_PANEL_ON_THE_NORTH_WALL.
;
4C07: 12 03     ; PANEL
4C09: 01 02     ;    MoveToRoom(room_2) new
4C0B: 03 03     ; S
4C0D: 01 19     ;    MoveToRoom(room_25) woodsRoom28
4C0F: 02 03     ; E
4C11: 01 1B     ;    MoveToRoom(room_27) woodsRoom34
4C13: 00

room_27: ; woodsRoom34
; PS_17
; YOU_ARE_IN_THE_CHAMBER_OF_ANUBIS.
;
4C14: 0A 03     ; D
4C16: 01 1A     ;    MoveToRoom(room_26) woodsRoom33
4C18: 20 03     ; word_20 ; in CCA loc.c this is GO_Y2 -- command: "GO Y2" or "Y2"
4C1A: 01 1A     ;    MoveToRoom(room_26) woodsRoom33
4C1C: 09 03     ; U
4C1E: 01 0D     ;    MoveToRoom(room_13) woodsRoom15
4C20: 00

room_28: ; woodsRoom42
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4C21: 01 03     ; N
4C23: 01 1C     ;    MoveToRoom(room_28) woodsRoom42
4C25: 02 03     ; E
4C27: 01 20     ;    MoveToRoom(room_32) woodsRoom43
4C29: 03 03     ; S
4C2B: 01 1E     ;    MoveToRoom(room_30) woodsRoom45
4C2D: 04 03     ; W
4C2F: 01 1D     ;    MoveToRoom(room_29) woodsRoom80
4C31: 09 03     ; U
4C33: 01 13     ;    MoveToRoom(room_19) woodsRoom41
4C35: 00

room_29: ; woodsRoom80
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4C36: 01 03     ; N
4C38: 01 1C     ;    MoveToRoom(room_28) woodsRoom42
4C3A: 02 03     ; E
4C3C: 01 33     ;    MoveToRoom(room_51) woodsRoom81
4C3E: 03 03     ; S
4C40: 01 1D     ;    MoveToRoom(room_29) woodsRoom80
4C42: 04 03     ; W
4C44: 01 1D     ;    MoveToRoom(room_29) woodsRoom80
4C46: 00

room_30: ; woodsRoom45
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4C47: 01 03     ; N
4C49: 01 20     ;    MoveToRoom(room_32) woodsRoom43
4C4B: 02 03     ; E
4C4D: 01 2A     ;    MoveToRoom(room_42) woodsRoom46
4C4F: 03 03     ; S
4C51: 01 2B     ;    MoveToRoom(room_43) woodsRoom47
4C53: 04 03     ; W
4C55: 01 1C     ;    MoveToRoom(room_28) woodsRoom42
4C57: 09 03     ; U
4C59: 01 1F     ;    MoveToRoom(room_31) woodsRoom87
4C5B: 0A 03     ; D
4C5D: 01 1F     ;    MoveToRoom(room_31) woodsRoom87
4C5F: 00

room_31: ; woodsRoom87
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4C60: 09 03     ; U
4C62: 01 1E     ;    MoveToRoom(room_30) woodsRoom45
4C64: 0A 03     ; D
4C66: 01 1E     ;    MoveToRoom(room_30) woodsRoom45
4C68: 00

room_32: ; woodsRoom43
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4C69: 02 03     ; E
4C6B: 01 1E     ;    MoveToRoom(room_30) woodsRoom45
4C6D: 03 03     ; S
4C6F: 01 21     ;    MoveToRoom(room_33) woodsRoom44
4C71: 04 03     ; W
4C73: 01 1C     ;    MoveToRoom(room_28) woodsRoom42
4C75: 00

room_33: ; woodsRoom44
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4C76: 01 03     ; N
4C78: 01 2C     ;    MoveToRoom(room_44) woodsRoom82
4C7A: 02 03     ; E
4C7C: 01 20     ;    MoveToRoom(room_32) woodsRoom43
4C7E: 03 03     ; S
4C80: 01 22     ;    MoveToRoom(room_34) woodsRoom50
4C82: 0A 03     ; D
4C84: 01 2D     ;    MoveToRoom(room_45) woodsRoom48
4C86: 00

room_34: ; woodsRoom50
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4C87: 02 03     ; E
4C89: 01 21     ;    MoveToRoom(room_33) woodsRoom44
4C8B: 03 03     ; S
4C8D: 01 23     ;    MoveToRoom(room_35) woodsRoom52
4C8F: 04 03     ; W
4C91: 01 25     ;    MoveToRoom(room_37) woodsRoom49
4C93: 0A 03     ; D
4C95: 01 26     ;    MoveToRoom(room_38) woodsRoom51
4C97: 00

room_35: ; woodsRoom52
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4C98: 01 03     ; N
4C9A: 01 24     ;    MoveToRoom(room_36) woodsRoom55
4C9C: 02 03     ; E
4C9E: 01 26     ;    MoveToRoom(room_38) woodsRoom51
4CA0: 03 03     ; S
4CA2: 01 23     ;    MoveToRoom(room_35) woodsRoom52
4CA4: 04 03     ; W
4CA6: 01 22     ;    MoveToRoom(room_34) woodsRoom50
4CA8: 09 03     ; U
4CAA: 01 27     ;    MoveToRoom(room_39) woodsRoom53
4CAC: 0A 03     ; D
4CAE: 01 2F     ;    MoveToRoom(room_47) woodsRoom86
4CB0: 00

room_36: ; woodsRoom55
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4CB1: 01 03     ; N
4CB3: 01 24     ;    MoveToRoom(room_36) woodsRoom55
4CB5: 02 03     ; E
4CB7: 01 34     ;    MoveToRoom(room_52) woodsRoom57
4CB9: 04 03     ; W
4CBB: 01 23     ;    MoveToRoom(room_35) woodsRoom52
4CBD: 0A 03     ; D
4CBF: 01 30     ;    MoveToRoom(room_48) woodsRoom56
4CC1: 00

room_37: ; woodsRoom49
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4CC2: 02 03     ; E
4CC4: 01 22     ;    MoveToRoom(room_34) woodsRoom50
4CC6: 04 03     ; W
4CC8: 01 26     ;    MoveToRoom(room_38) woodsRoom51
4CCA: 00

room_38: ; woodsRoom51
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4CCB: 02 03     ; E
4CCD: 01 23     ;    MoveToRoom(room_35) woodsRoom52
4CCF: 03 03     ; S
4CD1: 01 27     ;    MoveToRoom(room_39) woodsRoom53
4CD3: 04 03     ; W
4CD5: 01 25     ;    MoveToRoom(room_37) woodsRoom49
4CD7: 09 03     ; U
4CD9: 01 22     ;    MoveToRoom(room_34) woodsRoom50
4CDB: 00

room_39: ; woodsRoom53
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4CDC: 01 03     ; N
4CDE: 01 23     ;    MoveToRoom(room_35) woodsRoom52
4CE0: 03 03     ; S
4CE2: 01 2E     ;    MoveToRoom(room_46) woodsRoom54
4CE4: 04 03     ; W
4CE6: 01 26     ;    MoveToRoom(room_38) woodsRoom51
4CE8: 00

room_40: ; woodsRoom84
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4CE9: 01 03     ; N
4CEB: 01 34     ;    MoveToRoom(room_52) woodsRoom57
4CED: 04 03     ; W
4CEF: 01 29     ;    MoveToRoom(room_41) woodsRoom83
4CF1: 08 03     ; NW
4CF3: 01 35     ;    MoveToRoom(room_53) woodsRoom114
4CF5: 00

room_41: ; woodsRoom83
; PS_18
; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
;
4CF6: 02 03     ; E
4CF8: 01 28     ;    MoveToRoom(room_40) woodsRoom84
4CFA: 03 03     ; S
4CFC: 01 34     ;    MoveToRoom(room_52) woodsRoom57
4CFE: 04 03     ; W
4D00: 01 32     ;    MoveToRoom(room_50) woodsRoom85
4D02: 00

room_42: ; woodsRoom46
; PS_13
; DEAD_END.
;
4D03: 04 03     ; W
4D05: 01 1E     ;    MoveToRoom(room_30) woodsRoom45
4D07: 00

room_43: ; woodsRoom47
; PS_13
; DEAD_END.
;
4D08: 02 03     ; E
4D0A: 01 1E     ;    MoveToRoom(room_30) woodsRoom45
4D0C: 00

room_44: ; woodsRoom82
; PS_13
; DEAD_END.
;
4D0D: 03 03     ; S
4D0F: 01 21     ;    MoveToRoom(room_33) woodsRoom44
4D11: 00

room_45: ; woodsRoom48
; PS_13
; DEAD_END.
;
4D12: 09 03     ; U
4D14: 01 21     ;    MoveToRoom(room_33) woodsRoom44
4D16: 00

room_46: ; woodsRoom54
; PS_13
; DEAD_END.
;
4D17: 04 03     ; W
4D19: 01 27     ;    MoveToRoom(room_39) woodsRoom53
4D1B: 00

room_47: ; woodsRoom86
; PS_13
; DEAD_END.
;
4D1C: 09 03     ; U
4D1E: 01 23     ;    MoveToRoom(room_35) woodsRoom52
4D20: 00

room_48: ; woodsRoom56
; PS_13
; DEAD_END.
;
4D21: 09 03     ; U
4D23: 01 24     ;    MoveToRoom(room_36) woodsRoom55
4D25: 00

room_49: ; woodsRoom58
; PS_13
; DEAD_END.
;
4D26: 02 03     ; E
4D28: 01 34     ;    MoveToRoom(room_52) woodsRoom57
4D2A: 00

room_50: ; woodsRoom85
; PS_13
; DEAD_END.
;
4D2B: 02 03     ; E
4D2D: 01 29     ;    MoveToRoom(room_41) woodsRoom83
4D2F: 00

room_51: ; woodsRoom81
; PS_13
; DEAD_END.
;
4D30: 04 03     ; W
4D32: 01 1D     ;    MoveToRoom(room_29) woodsRoom80
4D34: 21 0B     ; DROP
4D36: 11 29     ;    AssertObjectMatchesUserInput(obj_COINS)
4D38: 15 29 00  ;    MoveObjectToRoom(obj_COINS, room_0)
4D3B: 18 23     ;    MoveObjectToCurrentRoom(obj_BATTERIES_fresh)
4D3D: 04 58 7C  ;    Print(PS_B2:"THERE_ARE_NOW_SOME_FRESH_BATTERIES_HERE.")
4D40: 00

room_52: ; woodsRoom57
; PS_19
; YOU_ARE_ON_THE_BRINK_OF_A_LARGE_PIT.__YOU_COULD_CLIMB_DOWN,_BUT_
; YOU_WOULD_NOT_BE_ABLE_TO_CLIMB_BACK_UP.__THE_MAZE_CONTINUES_ON__
; THIS_LEVEL.
;
4D41: 01 03     ; N
4D43: 01 29     ;    MoveToRoom(room_41) woodsRoom83
4D45: 02 03     ; E
4D47: 01 28     ;    MoveToRoom(room_40) woodsRoom84
4D49: 03 03     ; S
4D4B: 01 31     ;    MoveToRoom(room_49) woodsRoom58
4D4D: 04 03     ; W
4D4F: 01 24     ;    MoveToRoom(room_36) woodsRoom55
4D51: 0A 03     ; D
4D53: 01 0B     ;    MoveToRoom(room_11) woodsRoom13
4D55: 00

room_53: ; woodsRoom114 CHEST_ROOM1
; PS_13
; DEAD_END.
;
4D56: 06 03     ; SE
4D58: 01 28     ;    MoveToRoom(room_40) woodsRoom84
4D5A: 00

room_54: ; woodsRoom36
; PS_1A
; YOU_ARE_IN_A_DIRTY_BROKEN_PASSAGE.__TO_THE_EAST_IS_A_CRAWL.__TO_
; THE_WEST_IS_A_LARGE_PASSAGE.__ABOVE_YOU_IS_A_HOLE_TO_ANOTHER____
; PASSAGE.
;
4D5B: 02 03     ; E
4D5D: 01 37     ;    MoveToRoom(room_55) woodsRoom37
4D5F: 04 03     ; W
4D61: 01 39     ;    MoveToRoom(room_57) woodsRoom39
4D63: 09 03     ; U
4D65: 01 19     ;    MoveToRoom(room_25) woodsRoom28
4D67: 00

room_55: ; woodsRoom37
; PS_1B
; YOU_ARE_ON_THE_BRINK_OF_A_SMALL_CLEAN_CLIMBABLE_PIT.__A_CRAWL___
; LEADS_WEST.
;
4D68: 04 03     ; W
4D6A: 01 36     ;    MoveToRoom(room_54) woodsRoom36
4D6C: 0A 03     ; D
4D6E: 01 38     ;    MoveToRoom(room_56) woodsRoom38
4D70: 11 03     ; CLIMB
4D72: 01 38     ;    MoveToRoom(room_56) woodsRoom38
4D74: 00

room_56: ; woodsRoom38
; PS_1C
; YOU_ARE_IN_THE_BOTTOM_OF_A_SMALL_PIT_WITH_A_LITTLE_STREAM,_WHICH
; ENTERS_AND_EXITS_THROUGH_TINY_SLITS.
;
4D75: 09 03     ; U
4D77: 01 37     ;    MoveToRoom(room_55) woodsRoom37
4D79: 0C 03     ; OUT
4D7B: 01 37     ;    MoveToRoom(room_55) woodsRoom37
4D7D: 11 03     ; CLIMB
4D7F: 01 37     ;    MoveToRoom(room_55) woodsRoom37
4D81: 0A 04     ; D
4D83: 04 7B 72  ;    Print(PS_73:"YOU_DON'T_FIT_THROUGH_TWO-INCH_SLIT!")
4D86: 27 0B     ; FILL
4D88: 07 06     ;    StopIfPassElseContinue
4D8A: 02 1C     ;        AssertObjectIsInPack(obj_WATER)
4D8C: 04 37 7B  ;        Print(PS_AC:"YOUR_BOTTLE_IS_ALREADY_FULL.")
4D8F: 19 1C 1B  ;    MoveObjectIntoContainer(obj_WATER, obj_BOTTLE)
4D92: 00

room_57: ; woodsRoom39
; PS_1D
; YOU_ARE_IN_A_THE_ROOM_OF_BES,_WHOSE_PICTURE_IS_ON_THE_WALL._____
; THERE_IS_A_BIG_HOLE_IN_THE_FLOOR.__THERE_IS_A_PASSAGE_LEADING___
; EAST.
;
4D93: 02 03     ; E
4D95: 01 36     ;    MoveToRoom(room_54) woodsRoom36
4D97: 0A 03     ; D
4D99: 01 3A     ;    MoveToRoom(room_58) woodsRoom64
4D9B: 00

room_58: ; woodsRoom64
; PS_1E
; YOU_ARE_AT_A_COMPLEX_JUNCTION.__A_LOW_HANDS_AND_KNEES_PASSAGE___
; FROM_THE_NORTH_JOINS_A_HIGHER_CRAWL_FROM_THE_EAST_TO_MAKE_A_____
; WALKING_PASSAGE_GOING_WEST.__THERE_IS_ALSO_A_LARGE_ROOM_ABOVE.__
; THE_AIR_IS_DAMP_HERE.
;
4D9C: 01 03     ; N
4D9E: 01 3D     ;    MoveToRoom(room_61) woodsRoom103
4DA0: 02 03     ; E
4DA2: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DA4: 04 03     ; W
4DA6: 01 41     ;    MoveToRoom(room_65) woodsRoom65
4DA8: 09 03     ; U
4DAA: 01 39     ;    MoveToRoom(room_57) woodsRoom39
4DAC: 11 03     ; CLIMB
4DAE: 01 39     ;    MoveToRoom(room_57) woodsRoom39
4DB0: 00

room_59: ; woodsRoom106
; PS_1F
; YOU_ARE_IN_THE_UNDERWORLD_ANTEROOM_OF_SEKER.__PASSAGES_GO_EAST,_
; WEST,_AND_UP.__HUMAN_BONES_ARE_STREWN_ABOUT_ON_THE_FLOOR._______
; HIEROGLYPHICS_ON_THE_WALL_ROUGHLY_TRANSLATE_TO_"THOSE_WHO_______
; PROCEED_EAST_MAY_NEVER_RETURN."
;
4DB1: 02 03     ; E
4DB3: 01 3C     ;    MoveToRoom(room_60) woodsRoom108
4DB5: 04 03     ; W
4DB7: 01 41     ;    MoveToRoom(room_65) woodsRoom65
4DB9: 09 03     ; U
4DBB: 01 3A     ;    MoveToRoom(room_58) woodsRoom64
4DBD: 00

room_60: ; woodsRoom108
; PS_20
; YOU_ARE_AT_THE_LAND_OF_DEAD.__PASSAGES_LEAD_OFF_IN_>ALL<________
; DIRECTIONS.
;
4DBE: 01 07     ; N
4DC0: 07 03     ;    StopIfPassElseContinue
4DC2: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DC4: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DC6: 02 07     ; E
4DC8: 07 03     ;    StopIfPassElseContinue
4DCA: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DCC: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DCE: 03 07     ; S
4DD0: 07 03     ;    StopIfPassElseContinue
4DD2: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DD4: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DD6: 05 07     ; NE
4DD8: 07 03     ;    StopIfPassElseContinue
4DDA: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DDC: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DDE: 06 07     ; SE
4DE0: 07 03     ;    StopIfPassElseContinue
4DE2: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DE4: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DE6: 07 07     ; SW
4DE8: 07 03     ;    StopIfPassElseContinue
4DEA: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DEC: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DEE: 08 07     ; NW
4DF0: 07 03     ;    StopIfPassElseContinue
4DF2: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DF4: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DF6: 09 07     ; U
4DF8: 07 03     ;    StopIfPassElseContinue
4DFA: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DFC: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4DFE: 04 06     ; W
4E00: 04 CF 72  ;    Print(PS_75:"YOU_HAVE_CRAWLED_AROUND_IN_SOME_LITTLE_HOLES_AND_FOUND_YOUR_WAY_
;                                 BLOCKED_BY_A_FALLEN_SLAB.__YOU_ARE_NOW_BACK_IN_THE_MAIN_PASSAGE.")
4E03: 01 3C     ;    MoveToRoom(room_60) woodsRoom108
4E05: 00

room_61: ; woodsRoom103
; PS_21
; YOU'RE_IN_A_LARGE_ROOM_WITH_ANCIENT_DRAWINGS_ON_ALL_WALLS.______
; THE_PICTURES_DEPICT_ATUM,_A_PHARAOH_WEARING_THE_DOUBLE_CROWN.___
; A_SHALLOW_PASSAGE_PROCEEDS_DOWNWARD,_AND_A_SOMEWHAT_STEEPER_ONE_
; LEADS_UP.__A_LOW_HANDS_AND_KNEES_PASSAGE_ENTERS_FROM_THE_SOUTH.
;
4E06: 03 11     ; S
4E08: 07 06     ;    StopIfPassElseContinue
4E0A: 02 17     ;        AssertObjectIsInPack(obj_SARCOPH_full)
4E0C: 04 27 73  ;        Print(PS_76:"YOU_CAN'T_FIT_THIS_BIG_SARCOPHAGUS_THROUGH_THAT_LITTLE_PASSAGE!")
4E0F: 07 06     ;    StopIfPassElseContinue
4E11: 02 18     ;        AssertObjectIsInPack(obj_SARCOPH_empty)
4E13: 04 27 73  ;        Print(PS_76:"YOU_CAN'T_FIT_THIS_BIG_SARCOPHAGUS_THROUGH_THAT_LITTLE_PASSAGE!")
4E16: 01 3A     ;    MoveToRoom(room_58) woodsRoom64
4E18: 09 03     ; U
4E1A: 01 3E     ;    MoveToRoom(room_62) woodsRoom102
4E1C: 0A 03     ; D
4E1E: 01 3F     ;    MoveToRoom(room_63) woodsRoom104
4E20: 00

room_62: ; woodsRoom102
; PS_22
; YOU_ARE_IN_A_CHAMBER_WHOSE_WALL_CONTAINS_A_PICTURE_OF_A_MAN_____
; WEARING_THE_LUNAR_DISK_ON_HIS_HEAD.__HE_IS_THE_GOD_KHONS,_THE___
; MOON_GOD.
;
4E21: 0A 03     ; D
4E23: 01 3D     ;    MoveToRoom(room_61) woodsRoom103
4E25: 0C 03     ; OUT
4E27: 01 3D     ;    MoveToRoom(room_61) woodsRoom103
4E29: 00

room_63: ; woodsRoom104
; PS_23
; YOU_ARE_IN_A_LONG_SLOPING_CORRIDOR_WITH_RAGGED_WALLS._
;
4E2A: 09 03     ; U
4E2C: 01 3D     ;    MoveToRoom(room_61) woodsRoom103
4E2E: 0A 03     ; D
4E30: 01 40     ;    MoveToRoom(room_64) woodsRoom105
4E32: 00

room_64: ; woodsRoom105
; PS_24
; YOU_ARE_IN_A_CUL-DE-SAC_ABOUT_EIGHT_FEET_ACROSS.
;
4E33: 09 03     ; U
4E35: 01 3F     ;    MoveToRoom(room_63) woodsRoom104
4E37: 0C 03     ; OUT
4E39: 01 3F     ;    MoveToRoom(room_63) woodsRoom104
4E3B: 00

room_65: ; woodsRoom65
; PS_25
; YOU_ARE_IN_THE_CHAMBER_OF_HORUS,_A_LONG_EAST/WEST_PASSAGE_WITH__
; HOLES_EVERYWHERE.__TO_EXPLORE_AT_RANDOM,_SELECT_NORTH,_SOUTH,___
; UP,_OR_DOWN.
;
4E3C: 02 03     ; E
4E3E: 01 3A     ;    MoveToRoom(room_58) woodsRoom64
4E40: 04 03     ; W
4E42: 01 4E     ;    MoveToRoom(room_78) woodsRoom67
4E44: 09 07     ; U
4E46: 07 03     ;    StopIfPassElseContinue
4E48: 0A CC     ;        AssertRandomIsLessOrEqual(204)
4E4A: 01 48     ;    MoveToRoom(room_72) woodsRoom96
4E4C: 01 07     ; N
4E4E: 07 03     ;    StopIfPassElseContinue
4E50: 0A CC     ;        AssertRandomIsLessOrEqual(204)
4E52: 01 49     ;    MoveToRoom(room_73) woodsRoom99
4E54: 03 07     ; S
4E56: 07 03     ;    StopIfPassElseContinue
4E58: 0A CC     ;        AssertRandomIsLessOrEqual(204)
4E5A: 01 42     ;    MoveToRoom(room_66)
4E5C: 0A 07     ; D
4E5E: 07 03     ;    StopIfPassElseContinue
4E60: 0A CC     ;        AssertRandomIsLessOrEqual(204)
4E62: 01 3B     ;    MoveToRoom(room_59) woodsRoom106
4E64: 00

room_66: ; woodsRoom68
; PS_26
; YOU_ARE_IN_A_LARGE_LOW_CIRCULAR_CHAMBER_WHOSE_FLOOR_IS_AN_______
; IMMENSE_SLAB_FALLEN_FROM_THE_CEILING.__EAST_AND_WEST_THERE_ONCE_
; WHERE_LARGE_PASSAGES,_BUT_THEY_ARE_NOW_FILLED_WITH_SAND.________
; LOW_SMALL_PASSAGES_GO_NORTH_AND_SOUTH.
;
4E65: 01 03     ; N
4E67: 01 41     ;    MoveToRoom(room_65) woodsRoom65
4E69: 03 03     ; S
4E6B: 01 50     ;    MoveToRoom(room_80) woodsRoom23
4E6D: 00

room_72: ; woodsRoom96
; PS_27
; YOU_ARE_IN_THE_PRIEST'S_BEDROOM.__THE_WALLS_ARE_COVERED_WITH____
; CURTAINS,_THE_FLOOR_WITH_A_THICK_PILE_CARPET.__MOSS_COVERS_THE__
; CEILING.
;
4E6E: 04 03     ; W
4E70: 01 41     ;    MoveToRoom(room_65) woodsRoom65
4E72: 0C 03     ; OUT
4E74: 01 41     ;    MoveToRoom(room_65) woodsRoom65
4E76: 00

room_73: ; woodsRoom99
; PS_28
; THIS_IS_THE_CHAMBER_OF_THE_HIGH_PRIEST.___ANCIENT_DRAWINGS_COVER
; THE_WALLS.__AN_EXTREMELY_TIGHT_TUNNEL_LEADS_WEST.__IT_LOOKS_LIKE
; A_TIGHT_SQUEEZE.__ANOTHER_PASSAGE_LEADS_SE.
;
4E77: 04 09     ; W
4E79: 07 04     ;    StopIfPassElseContinue
4E7B: 0D        ;        AssertPackIsEmptyExceptForEmerald
4E7C: 01 4C     ;        MoveToRoom(room_76) woodsRoom100
4E7E: 04 53 73  ;    Print(PS_77:"SOMETHING_YOU'RE_CARRYING_WON'T_FIT_THROUGH_THE_TUNNEL_WITH_YOU.
;                                 YOU'D_BEST_TAKE_INVENTORY_AND_DROP_SOMETHING.")
4E81: 06 03     ; SE
4E83: 01 41     ;    MoveToRoom(room_65) woodsRoom65
4E85: 00

room_76: ; woodsRoom100
; PS_29
; YOU_ARE_IN_THE_HIGH_PRIEST'S_TREASURE_ROOM_LIT_BY_AN_EERIE_GREEN
; LIGHT.__A_NARROW_TUNNEL_EXITS_TO_THE_EAST.
;
4E86: 02 09     ; E
4E88: 07 04     ;    StopIfPassElseContinue
4E8A: 0D        ;        AssertPackIsEmptyExceptForEmerald
4E8B: 01 49     ;        MoveToRoom(room_73) woodsRoom99
4E8D: 04 53 73  ;    Print(PS_77:"SOMETHING_YOU'RE_CARRYING_WON'T_FIT_THROUGH_THE_TUNNEL_WITH_YOU.
;                                 YOU'D_BEST_TAKE_INVENTORY_AND_DROP_SOMETHING.")
4E90: 0C 09     ; OUT
4E92: 07 04     ;    StopIfPassElseContinue
4E94: 0D        ;        AssertPackIsEmptyExceptForEmerald
4E95: 01 49     ;        MoveToRoom(room_73) woodsRoom99
4E97: 04 53 73  ;    Print(PS_77:"SOMETHING_YOU'RE_CARRYING_WON'T_FIT_THROUGH_THE_TUNNEL_WITH_YOU.
;                                 YOU'D_BEST_TAKE_INVENTORY_AND_DROP_SOMETHING.")
4E9A: 00

room_78: ; woodsRoom67
; PS_2A
; YOU_ARE_AT_THE_EAST_END_OF_THE_TWOPIT_ROOM.__THE_FLOOR_HERE_IS__
; LITTERED_WITH_THIN_ROCK_SLABS,_WHICH_MAKE_IT_EASY_TO_DESCEND_THE
; PITS.__THERE_IS_A_PATH_HERE_BYPASSING_THE_PITS_TO_CONNECT_______
; PASSAGES_EAST_AND_WEST.__THERE_ARE_HOLES_ALL_OVER,_BUT_THE_ONLY_
; BIG_ONE_IS_ON_THE_WALL_DIRECTLY_OVER_THE_WEST_PIT_WHERE_YOU_____
; CAN'T_GET_TO_IT.
;
4E9B: 02 03     ; E
4E9D: 01 41     ;    MoveToRoom(room_65) woodsRoom65
4E9F: 04 03     ; W
4EA1: 01 50     ;    MoveToRoom(room_80) woodsRoom23
4EA3: 0A 03     ; D
4EA5: 01 4F     ;    MoveToRoom(room_79) woodsRoom24
4EA7: 00

room_79: ; woodsRoom24
; PS_2B
; YOU_ARE_AT_THE_BOTTOM_OF_THE_EASTERN_PIT_IN_THE_TWOPIT_ROOM.
;
4EA8: 09 03     ; U
4EAA: 01 4E     ;    MoveToRoom(room_78) woodsRoom67
4EAC: 0C 03     ; OUT
4EAE: 01 4E     ;    MoveToRoom(room_78) woodsRoom67
4EB0: 00

room_80: ; woodsRoom23
; PS_2C
; YOU_ARE_AT_THE_WEST_END_OF_THE_TWOPIT_ROOM.__THERE_IS_A_LARGE___
; HOLE_IN_THE_WALL_ABOVE_THE_PIT_AT_THIS_END_OF_THE_ROOM.
;
4EB1: 02 03     ; E
4EB3: 01 4E     ;    MoveToRoom(room_78) woodsRoom67
4EB5: 04 03     ; W
4EB7: 01 42     ;    MoveToRoom(room_66) woodsRoom68
4EB9: 0A 03     ; D
4EBB: 01 51     ;    MoveToRoom(room_81) woodsRoom25
4EBD: 00

room_81: ; woodsRoom25
; PS_2D
; YOU_ARE_AT_THE_BOTTOM_OF_THE_WEST_PIT_IN_THE_TWOPIT_ROOM.__THERE
; IS_A_LARGE_HOLE_IN_THE_WALL_ABOUT_TWENTY_FIVE_FEET_ABOVE_YOU.
;
4EBE: 09 03     ; U
4EC0: 01 50     ;    MoveToRoom(room_80) woodsRoom23
4EC2: 0C 03     ; OUT
4EC4: 01 50     ;    MoveToRoom(room_80) woodsRoom23
4EC6: 11 16     ; CLIMB
4EC8: 07 08     ;    StopIfPassElseContinue
4ECA: 03 09     ;        AssertObjectIsInCurrentRoomOrPack(obj_PLANT_C)
4ECC: 04 9E 73  ;        Print(PS_78:"YOU_CLAMBER_UP_THE_PLANT_AND_SCURRY_THROUGH_THE_HOLE_AT_THE_TOP.")
4ECF: 01 4D     ;        MoveToRoom(room_77) woodsRoom88
4ED1: 07 06     ;    StopIfPassElseContinue
4ED3: 03 08     ;        AssertObjectIsInCurrentRoomOrPack(obj_PLANT_B)
4ED5: 04 CB 73  ;        Print(PS_79:"YOU'VE_CLIMBED_UP_THE_PLANT_AND_OUT_OF_THE_PIT.")
4ED8: 01 50     ;    MoveToRoom(room_80) woodsRoom23
4EDA: 04 7D 7D  ;    Print(PS_B8:"THERE_IS_NOTHING_HERE_TO_CLIMB.__USE_UP_OR_OUT_TO_LEAVE_THE_PIT.")
4EDD: 24 2F     ; POUR
4EDF: 11 1C     ;    AssertObjectMatchesUserInput(obj_WATER)
4EE1: 15 1C 00  ;    MoveObjectToRoom(obj_WATER, room_0)
4EE4: 07 0E     ;    StopIfPassElseContinue
4EE6: 03 07     ;        AssertObjectIsInCurrentRoomOrPack(obj_PLANT_A)
4EE8: 15 07 00  ;        MoveObjectToRoom(obj_PLANT_A, room_0)
4EEB: 18 08     ;        MoveObjectToCurrentRoom(obj_PLANT_B)
4EED: 04 02 7D  ;        Print(PS_B5:"THE_PLANT_SPURTS_INTO_FURIOUS_GROWTH_FOR_A_FEW_SECONDS.")
4EF0: 04 71 6E  ;        Print(PS_4C:"THERE_IS_A_TWELVE_FOOT_BEAN_STALK_STRETCHING_UP_OUT_OF_THE_PIT,_
;                                     BELLOWING_"WATER..._WATER..."")
4EF3: 07 0E     ;    StopIfPassElseContinue
4EF5: 03 08     ;        AssertObjectIsInCurrentRoomOrPack(obj_PLANT_B)
4EF7: 15 08 00  ;        MoveObjectToRoom(obj_PLANT_B, room_0)
4EFA: 18 09     ;        MoveObjectToCurrentRoom(obj_PLANT_C)
4EFC: 04 29 7D  ;        Print(PS_B6:"THE_PLANT_GROWS_EXPLOSIVELY,_ALMOST_FILLING_THE_BOTTOM_OF_THE___
;                                     PIT.")
4EFF: 04 B1 6E  ;        Print(PS_4D:"THERE_IS_A_GIGANTIC_BEAN_STALK_STRETCHING_ALL_THE_WAY_UP_TO_THE_
;                                     HOLE.")
4F02: 15 09 00  ;    MoveObjectToRoom(obj_PLANT_C, room_0)
4F05: 18 07     ;    MoveObjectToCurrentRoom(obj_PLANT_A)
4F07: 04 59 7D  ;    Print(PS_B7:"YOU'VE_OVER-WATERED_THE_PLANT!__IT'S_SHRIVELING_UP!")
4F0A: 04 45 6E  ;    Print(PS_4B:"THERE_IS_A_TINY_PLANT_IN_THE_PIT,_MURMURING_"WATER,_WATER,_..."")
4F0D: 00

room_77: ; woodsRoom88
; PS_2E
; YOU_ARE_IN_A_LONG,_NARROW_CORRIDOR_STRETCHING_OUT_OF_SIGHT_TO___
; THE_WEST.__AT_THE_EASTERN_END_IS_A_HOLE_THROUGH_WHICH_YOU_CAN___
; SEE_A_PROFUSION_OF_LEAVES.
;
4F0E: 02 03     ; E
4F10: 01 51     ;    MoveToRoom(room_81) woodsRoom25
4F12: 0A 03     ; D
4F14: 01 51     ;    MoveToRoom(room_81) woodsRoom25
4F16: 11 03     ; CLIMB
4F18: 01 51     ;    MoveToRoom(room_81) woodsRoom25
4F1A: 10 05     ; JUMP
4F1C: 04 71 71  ;    Print(PS_6B:"YOU_ARE_AT_THE_BOTTOM_OF_THE_PIT_WITH_A_BROKEN_NECK.")
4F1F: 05        ;    PrintScoreAndStop
4F20: 04 03     ; W
4F22: 01 47     ;    MoveToRoom(room_71) woodsRoom92
4F24: 00

room_71: ; woodsRoom92
; PS_2F
; YOU_ARE_IN_THE_CHAMBER_OF_OSIRIS._THE_CEILING_IS_TOO_HIGH_UP_FOR
; YOUR_LAMP_TO_SHOW_IT.__PASSAGES_LEAD_EAST,_NORTH,_AND_SOUTH.
;
4F25: 01 03     ; N
4F27: 01 44     ;    MoveToRoom(room_68) woodsRoom94
4F29: 02 03     ; E
4F2B: 01 46     ;    MoveToRoom(room_70) woodsRoom93
4F2D: 03 03     ; S
4F2F: 01 4D     ;    MoveToRoom(room_77) woodsRoom88
4F31: 00

room_70: ; woodsRoom93
; PS_30
; THE_PASSAGE_HERE_IS_BLOCKED_BY_A_FALLEN_BLOCK.
;
4F32: 03 03     ; S
4F34: 01 47     ;    MoveToRoom(room_71) woodsRoom92
4F36: 0C 03     ; OUT
4F38: 01 47     ;    MoveToRoom(room_71) woodsRoom92
4F3A: 00

room_68: ; woodsRoom94
; PS_31
; YOU_ARE_IN_THE_CHAMBER_OF_NEKHEBET,_A_WOMAN_WITH_THE_HEAD_OF_A__
; VULTURE,_WEARING_THE_CROWN_OF_EGYPT.__A_PASSAGE_EXITS_TO_THE____
; SOUTH.
;
4F3B: 03 03     ; S
4F3D: 01 47     ;    MoveToRoom(room_71) woodsRoom92
4F3F: 0C 03     ; OUT
4F41: 01 47     ;    MoveToRoom(room_71) woodsRoom92
4F43: 00

4F44: FF

Ambient Light Table

When we calculate the score, we look at the upper bit in each room. If the bit is set, the second value is added to the score. This mechanism is not used by the existing code -- probably an old feature.

This is the beginning of the save-to-tape. Maybe at one time, the ambient light changed? It doesn't now, and there is no need to save this table. We could have just started saving with the object data.

; 2 bytes per room
; * 0x4000 means there is light in the room (no need for a lamp)
; * 0x0000 means you better have a lamp
;
; 2nd byte is BCD score if upper bit is set of 1st byte

AmbientLightTable:
4F45: 40 00    ;  1 (has natural light)
4F47: 40 00    ;  2 (has natural light)
4F49: 40 00    ;  3 (has natural light)
4F4B: 40 00    ;  4 (has natural light)
4F4D: 40 00    ;  5 (has natural light)
4F4F: 40 00    ;  6 (has natural light)
4F51: 40 00    ;  7 (has natural light)
4F53: 00 00    ;  8
4F55: 00 00    ;  9
4F57: 00 00    ;  10
4F59: 00 00    ;  11
4F5B: 00 00    ;  12
4F5D: 00 00    ;  13
4F5F: 00 00    ;  14
4F61: 00 00    ;  15
4F63: 00 00    ;  16
4F65: 00 00    ;  17
4F67: 00 00    ;  18
4F69: 00 00    ;  19
4F6B: 00 00    ;  20
4F6D: 00 00    ;  21
4F6F: 00 00    ;  22
4F71: 00 00    ;  23
4F73: 00 00    ;  24
4F75: 00 00    ;  25
4F77: 00 00    ;  26
4F79: 00 00    ;  27
4F7B: 00 00    ;  28
4F7D: 00 00    ;  29
4F7F: 00 00    ;  30
4F81: 00 00    ;  31
4F83: 00 00    ;  32
4F85: 00 00    ;  33
4F87: 00 00    ;  34
4F89: 00 00    ;  35
4F8B: 00 00    ;  36
4F8D: 00 00    ;  37
4F8F: 00 00    ;  38
4F91: 00 00    ;  39
4F93: 00 00    ;  40
4F95: 00 00    ;  41
4F97: 00 00    ;  42
4F99: 00 00    ;  43
4F9B: 00 00    ;  44
4F9D: 00 00    ;  45
4F9F: 00 00    ;  46
4FA1: 00 00    ;  47
4FA3: 00 00    ;  48
4FA5: 00 00    ;  49
4FA7: 00 00    ;  50
4FA9: 00 00    ;  51
4FAB: 00 00    ;  52
4FAD: 00 00    ;  53
4FAF: 00 00    ;  54
4FB1: 00 00    ;  55
4FB3: 00 00    ;  56
4FB5: 00 00    ;  57
4FB7: 00 00    ;  58
4FB9: 00 00    ;  59
4FBB: 00 00    ;  60
4FBD: 00 00    ;  61
4FBF: 00 00    ;  62
4FC1: 00 00    ;  63
4FC3: 00 00    ;  64
4FC5: 00 00    ;  65
4FC7: 00 00    ;  66
4FC9: 00 00    ;  67
4FCB: 00 00    ;  68
4FCD: 00 00    ;  69
4FCF: 00 00    ;  70
4FD1: 00 00    ;  71
4FD3: 00 00    ;  72
4FD5: 00 00    ;  73
4FD7: 00 00    ;  74
4FD9: 00 00    ;  75
4FDB: 40 00    ;  76 (has light -- "LIT_BY_AN_ERRIE_GREEN_LIGHT")
4FDD: 00 00    ;  77
4FDF: 00 00    ;  78
4FE1: 00 00    ;  79
4FE3: 00 00    ;  80
4FE5: 00 00    ;  81

Object Data

; This two-byte table contains the object's attributes ("isTreasure" and "isGettable")
; and the object's current location (a room or inside another object).
;
; The code references the objects by numeric id, but I have given them unique names
; in the table below. All object names begin with "#". All word names begin with "_".
;
; The format of the two bytes are:
;
;   MCT----- RRRRRRRR
;
;   M - if set, the second byte is an object number (container). if clear, the second byte is a room number.
;   C - if set, object can be picked up.
;   T - if set, object is treasure.
;
;   RRRRRRRR - Second byte is the object's location (containing object or room number).

ObjectData:
; Object data table (2 bytes)
;             MCT             #    Name                 Start location
4FE7: 00 00 ; 000_00000 00  ; 1    obj_bridge_15        *
4FE9: 00 00 ; 000_00000 00  ; 2    obj_bridge_18        *
4FEB: 00 00 ;               ; 3
4FED: 00 00 ;               ; 4
4FEF: 00 00 ;               ; 5
4FF1: 00 33 ; 000_00000 33  ; 6    obj_MACHINE          (Room 51)
4FF3: 00 51 ; 000_00000 51  ; 7    obj_PLANT_A          (Room 81)
4FF5: 00 00 ; 000_00000 00  ; 8    obj_PLANT_B          *
4FF7: 00 00 ; 000_00000 00  ; 9    obj_PLANT_C          *
4FF9: 00 00 ;               ; 10
4FFB: 00 10 ; 000_00000 10  ; 11   obj_SERPENT          (Room 16)
4FFD: 00 00 ;               ; 12
4FFF: 00 00 ;               ; 13
5001: 40 02 ; 010_00000 02  ; 14   obj_LAMP_off         (Room 2)
5003: 40 00 ; 010_00000 00  ; 15   obj_LAMP_on          *
5005: 40 08 ; 010_00000 08  ; 16   obj_BOX              (Room 8)
5007: 40 09 ; 010_00000 09  ; 17   obj_SCEPTER          (Room 9)
5009: 40 48 ; 010_00000 48  ; 18   obj_PILLOW           (Room 72)
500B: 40 0B ; 010_00000 0B  ; 19   obj_BIRD             (Room 11)
500D: 00 00 ; 000_00000 00  ; 20   obj_BIRD_boxed       *
500F: 00 00 ; 000_00000 00  ; 21   obj_POTTERY          *
5011: 60 00 ; 011_00000 00  ; 22   obj_PEARL            *
5013: 40 3D ; 010_00000 3D  ; 23   obj_SARCOPH_full     (Room 61)
5015: 40 00 ; 010_00000 00  ; 24   obj_SARCOPH_empty    *
5017: 40 3B ; 010_00000 3B  ; 25   obj_MAGAZINES        (Room 59)
5019: 40 02 ; 010_00000 02  ; 26   obj_FOOD             (Room 2)
501B: 40 02 ; 010_00000 02  ; 27   obj_BOTTLE           (Room 2)
501D: C0 1B ; 110_00000 1B  ; 28   obj_WATER            (Room 27)
501F: 00 00 ;               ; 29 ? oil (in the bottle) from the easter pit
5021: 00 38 ; 000_00000 38  ; 30   obj_STREAM_56        (Room 56)
5023: 60 4C ; 011_00000 4C  ; 31   obj_EMERALD          (Room 76)
5025: 60 00 ; 011_00000 00  ; 32   obj_VASE_pillow      *
5027: 60 49 ; 011_00000 49  ; 33   obj_VASE_solo        (Room 73)
5029: 60 44 ; 011_00000 44  ; 34   obj_KEY              (Room 68)
502B: 40 00 ; 010_00000 00  ; 35   obj_BATTERIES_fresh  *
502D: 40 00 ; 010_00000 00  ; 36   obj_BATTERIES_worn   *
502F: 60 0E ; 011_00000 0E  ; 37   obj_GOLD             (Room 14)
5031: 60 11 ; 011_00000 11  ; 38   obj_DIAMNODS         (Room 17)
5033: 60 19 ; 011_00000 19  ; 39   obj_SILVER           (Room 25)
5035: 60 12 ; 011_00000 12  ; 40   obj_JEWELRY          (Room 18)
5037: 60 18 ; 011_00000 18  ; 41   obj_COINS            (Room 24)
5039: 60 00 ; 011_00000 00  ; 42   obj_CHEST            *
503B: 60 47 ; 011_00000 47  ; 43   obj_NEST             (Room 71)
503D: 40 00 ; 010_00000 00  ; 44   obj_LAMP_dead        *

Game Variables

currentRoom:
503F: 01

bcdTurnCountLSB:
5040: 00

bcdTurnCountMSB:
5041: 00

lampOnTurnCount:
5042: 00 00 ; Number of turns the lamp has been on

lastRoom:
5044: 00

numObjInPack:
5045: 00

numResurrected:
5046: 00 ; Number of times resurrected?

Object Info

The LoadGame code restores the 1st four bytes of this table even though only the 1st byte is mangled (bug in code?).

ObjectDescriptions:
; Object descriptions (44 objects)
; For packable objects each slot points to a message pair. The first is the long
; description and the second is the short description for the backpack.
;                  # Name              Description
5047: 58 6D     ;  1 obj_bridge_15        PS_40 Stone bridge room 15
5049: 58 6D     ;  2 obj_bridge_18        PS_40 Stone bridge room 18
504B: C0 47     ;  3                   -Never used (points to empty string)
504D: C0 47     ;  4                   -Never used (points to empty string)
504F: C0 47     ;  5                   -Never used (points to empty string)
5051: E1 6E     ;  6 obj_MACHINE          PS_4E Vending Machine
5053: 45 6E     ;  7 obj_PLANT_A          PS_4B Tiny plant
5055: 71 6E     ;  8 obj_PLANT_B          PS_4C Twelve foot beanstalk
5057: B1 6E     ;  9 obj_PLANT_C          PS_4D Giant beanstalk
5059: 00 00     ; 10                   -Never used (points to null)
505B: 3A 6D     ; 11 obj_SERPENT          PS_3F Serpent bars the way
505D: 00 00     ; 12                   -Never used (points to null)
505F: 00 00     ; 13                   -Never used (points to null)
5061: 2E 6C     ; 14 obj_LAMP_off         PS_32 Lamp (not lit)
5063: 53 6C     ; 15 obj_LAMP_on          PS_34 Lamp (lit)
5065: 75 6C     ; 16 obj_BOX              PS_36 Statue box
5067: 9E 6C     ; 17 obj_SCEPTER          PS_38 Scepter
5069: 12 6D     ; 18 obj_PILLOW           PS_3D Pillow
506B: CD 6C     ; 19 obj_BIRD             PS_3A Statue
506D: EB 6C     ; 20 obj_BIRD_boxed       PS_3B Statue in box
506F: ED 70     ; 21 obj_POTTERY          PS_66 Pottery
5071: 47 71     ; 22 obj_PEARL            PS_69 Pearl
5073: 78 6D     ; 23 obj_SARCOPH_full     PS_41 Sarcophagus with pearl
5075: 78 6D     ; 24 obj_SARCOPH_empty    PS_41 Sarcophagus empty
5077: B1 6D     ; 25 obj_MAGAZINES        PS_43 Magazines
5079: EC 6D     ; 26 obj_FOOD             PS_45 Food
507B: 04 6E     ; 27 obj_BOTTLE           PS_47 Bottle
507D: 20 6E     ; 28 obj_WATER            PS_49 Water in the bottle
507F: C0 47     ; 29                   -Never used (points to empty string)
5081: C0 47     ; 30 obj_STREAM_56        EmptyString Stream in room 56
5083: 14 71     ; 31 obj_EMERALD          PS_67 Emerald
5085: C5 70     ; 32 obj_VASE_pillow      PS_65 Vase on pillow
5087: A2 70     ; 33 obj_VASE_solo        PS_63 Vase
5089: 7E 70     ; 34 obj_KEY              PS_61 Key
508B: 30 6F     ; 35 obj_BATTERIES_fresh  PS_4F Batteries
508D: 4F 6F     ; 36 obj_BATTERIES_worn   PS_51 Worn-out batteries
508F: 7B 6F     ; 37 obj_GOLD             PS_53 Gold Nugget
5091: AB 6F     ; 38 obj_DIAMNODS         PS_55 Diamonds
5093: CA 6F     ; 39 obj_SILVER           PS_57 Silver
5095: EA 6F     ; 40 obj_JEWELRY          PS_59 Jewelry
5097: 0E 70     ; 41 obj_COINS            PS_5B Coins
5099: 2B 70     ; 42 obj_CHEST            PS_5D Chest
509B: 52 70     ; 43 obj_NEST             PS_5F Nest of golden eggs
509D: 2E 6C     ; 44 obj_LAMP_dead        PS_32 Lamp (dead)

Script Commands

; This lookup table holds the pointers to the individual script commands. Each command
; reads 1 or 2 bytes of data from the script. The number of extra bytes read is show
; for reference in the table.

ScriptCommands:
;    Address   Number Bytes Name
509F: 8A 51   ;   1     1   MoveToRoom(room_num)
50A1: C8 52   ;   2     1   AssertObjectIsInPack(obj_num)
50A3: D7 52   ;   3     1   AssertObjectIsInCurrentRoomOrPack(obj_num)
50A5: 5E 53   ;   4     2   Print(ps_num)
50A7: 49 54   ;   5     0   PrintScoreAndStop
50A9: 00 00   ;   6     -   -
50AB: C2 43   ;   7     1   StopIfPassElseContinue
50AD: C7 54   ;   8     0   PrintScore
50AF: EF 55   ;   9     0   PrintScoreAndStop
50B1: 18 53   ;  10     1   AssertRandomIsLessOrEqual
50B3: 6B 53   ;  11     1   DropObject(obj_num) (NEVER USED)
50B5: 32 53   ;  12     1   MoveToRoomIfItWasLastRoom(room_num) (NEVER USED)
50B7: FB 52   ;  13     0   AssertPackIsEmptyExceptForEmerald
50B9: 81 53   ;  14     0   MoveToLastRoom
50BB: 9B 53   ;  15     0   PrintInventory
50BD: DB 53   ;  16     0   PrintRoomDescription
50BF: E1 53   ;  17     1   AssertObjectMatchesUserInput(obj_num)
50C1: EF 53   ;  18     1   GetObjectFromRoom(obj_num)
50C3: 00 00   ;  19     -   -
50C5: 2B 54   ;  20     0   PrintOK
50C7: 34 54   ;  21     2   MoveObjectToRoom(obj_num,room_num)
50C9: 43 53   ;  22     0   GetUserInputObject
50CB: 24 54   ;  23     0   DropUserInputObject
50CD: A5 52   ;  24     1   MoveObjectToCurrentRoom(obj_num)
50CF: B3 52   ;  25     2   MoveObjectIntoContainer(obj_num,obj_num)
50D1: EA 52   ;  26     1   AssertObjectIsInCurrentRoom(obj_num)
50D3: F5 55   ;  27     0   LoadGame
50D5: 54 56   ;  28     0   SaveGame
50D7: 94 56   ;  29     0   RandomizeDirections

After Every Step

; This processing takes place after every user input.[[br]]
;  1. Increment the count on the lamp and the number of turns.[[br]]
;  2.  Warn the player if the lamp is going dim and change the batteries automatically.
AfterEveryStep:
50D9: 3E 0F           LD      A,$0F               ; obj_LAMP_on
50DB: 21 E7 4F        LD      HL,ObjectData       ; Object table
50DE: CD 61 43        CALL    TableOffsetTwoBytes ; Lookup the object info
50E1: 23              INC     HL                  ; Location
50E2: 7E              LD      A,(HL)              ; Is the ...
50E3: A7              AND     A                   ; ... lamp turned on?
50E4: CA 34 51        JP      Z,CheckAutoBatteries; No, bump BCD turn count and out
50E7: 2A 42 50        LD      HL,(lampOnTurnCount); Bump ...
50EA: 23              INC     HL                  ; ... turns the lamp ...
50EB: 22 42 50        LD      (lampOnTurnCount),HL; ... has been on
50EE: 7C              LD      A,H                 ; Has lamp been ...
50EF: FE 01           CP      $01                 ; ... on 256 turns or more?
50F1: C2 34 51        JP      NZ,CheckAutoBatteries; No, bump BCD turn count and out
50F4: 7D              LD      A,L                 ; Has lamp been lit ...
50F5: FE 22           CP      $22                 ; ... exactly 256+34 = 290 turns?
50F7: C2 03 51        JP      NZ,$5103            ; No, skip message
50FA: 21 C5 79        LD      HL,PS_A6            ; "YOUR_LAMP_IS_GETTING_DIM."
50FD: CD AE 45        CALL    PrintPacked         ; Print message
5100: C3 77 51        JP      BumpBCDTurnCount    ; Bump BCD turn count and out
5103: FE 36           CP      $36                 ; Has lamp been lit 256+54 = 310 turns?
5105: C2 34 51        JP      NZ,CheckAutoBatteries; No, bump BCD turn count and out
5108: 3E 0F           LD      A,$0F               ; obj_LAMP_on
510A: 21 E7 4F        LD      HL,ObjectData       ; Object table
510D: CD 61 43        CALL    TableOffsetTwoBytes ; Look up the object info
5110: 23              INC     HL                  ; Point to location
5111: 46              LD      B,(HL)              ; Current location of the obj_LAMP_on
5112: 36 00           LD      (HL),$00            ; The obj_LAMP_on is now out of play
5114: 21 E7 4F        LD      HL,ObjectData       ; Look up ...
5117: 3E 2C           LD      A,$2C               ; ... info for ...
5119: CD 61 43        CALL    TableOffsetTwoBytes ; ... obj_LAMP_dead
511C: 23              INC     HL                  ; Location
511D: 70              LD      (HL),B              ; Replace the obj_LAMP_on with obj_LAMP_dead
511E: 3E 23           LD      A,$23               ; obj_BATTERIES_fresh
5120: 1E FF           LD      E,$FF               ; Fresh batteries in ...
5122: CD 50 43        CALL    GetObjectInfo       ; ... backpack?
5125: CA 34 51        JP      Z,CheckAutoBatteries; Yes, automatically replace them
5128: 21 4A 7A        LD      HL,PS_A7            ; "YOUR_LAMP_HAS_RUN_OUT_OF_POWER."
512B: CD AE 45        CALL    PrintPacked         ; Print the message
512E: CD 45 52        CALL    DescribeRoom        ; Describe the dark room
5131: C3 77 51        JP      BumpBCDTurnCount    ; Bump the BCD turn count and out
;
CheckAutoBatteries:
5134: 2A 42 50        LD      HL,(lampOnTurnCount); Get the turns the lamp has been on
5137: 11 2C 01        LD      DE,$012C            ; Match 300 turns
513A: 7C              LD      A,H                 ; Has lamp been on ...
513B: BA              CP      D                   ; ... 300 turns?
513C: DA 77 51        JP      C,BumpBCDTurnCount  ; No, bump the BCD turn count and out
513F: 7D              LD      A,L                 ; Has lamp been on ...
5140: BB              CP      E                   ; ... 300 turns?
5141: DA 77 51        JP      C,BumpBCDTurnCount  ; No, bump the BCD turn count and out
5144: 3E 23           LD      A,$23               ; Are the ...
5146: 1E FF           LD      E,$FF               ; obj_BATTERIES_fresh ...
5148: CD 50 43        CALL    GetObjectInfo       ; ... in the backpack?
514B: C2 77 51        JP      NZ,BumpBCDTurnCount ; No, bump the BCD turn count and out
514E: 3E 2C           LD      A,$2C               ; Is the ...
5150: 1E FF           LD      E,$FF               ; ... obj_LAMP_dead ...
5152: CD 50 43        CALL    GetObjectInfo       ; ... in the backpack?
5155: C2 77 51        JP      NZ,BumpBCDTurnCount ; No, bump the BCD turn count and out
5158: 23              INC     HL                  ; The obj_LAMP_dead ...
5159: 36 00           LD      (HL),$00            ; ... is now out of play
515B: 3E 23           LD      A,$23               ; Get the ...
515D: 21 E7 4F        LD      HL,ObjectData       ; ... info for ...
5160: CD 61 43        CALL    TableOffsetTwoBytes ; ... obj_BATTERIES_fresh
5163: 23              INC     HL                  ; Fresh batteries ...
5164: 36 00           LD      (HL),$00            ; ... are now out of play
5166: 23              INC     HL                  ; Bump to ...
5167: 23              INC     HL                  ; ... obj_BATTERIES_worn
5168: 36 FF           LD      (HL),$FF            ; Worn out batteries are now ...
516A: 1E FF           LD      E,$FF               ; ... in the backpack
516C: 3E 0F           LD      A,$0F               ; obj_LAMP_on
516E: CD 76 43        CALL    SetObjectLocation   ; Move the obj_LAMP_on to the backpack
5171: 21 91 7A        LD      HL,PS_A9            ; "REPLACING__THE_BATTERIES."
5174: CD AE 45        CALL    PrintPacked         ; Print message
;
BumpBCDTurnCount:
5177: 3A 40 50        LD      A,(bcdTurnCountLSB) ; Get the lower BCD turn count
517A: C6 01           ADD     $01                 ; Add one to ...
517C: 27              DAA                         ; ... BCD value
517D: 32 40 50        LD      (bcdTurnCountLSB),A ; Store new BCD value
5180: 3A 41 50        LD      A,(bcdTurnCountMSB) ; Get the upper BCD turn count
5183: CE 00           ADC     $00                 ; Add any ...
5185: 27              DAA                         ; ... carry from lower
5186: 32 41 50        LD      (bcdTurnCountMSB),A ; Update upper BCD count
5189: C9              RET                         

Command 1: MoveToRoom

This routine moves the player to a new room. If there is light in the new room or light in the old room then the move always works. Otherwise there is a 60% chance the move kills you.

If there is light in the new room then the room description is printed.

After every move the code checks the pack for treasures. If there are 2 or more treasures then the Mummy moves them all to room 53 (the hard-to-find room in the maze). Then the code moves the chest to room 53. Up till now the chest has been in room 0 (out of play). The only way to make the chest appear in the maze is to encounter the mummy. Once the chest is in a room (any room) the mummy no longer appears. You only see the mummy once.

The mummy says he is going to take the treasures and "PUT_THEM_IN_THE_CHEST_DEEP_IN_THE_MAZE!". But he only puts them in the same room -- not actually in the chest. The code does not utilize the container relationship.

MoveToRoom:
518A: E1              POP     HL                  ; Get the ...
518B: 46              LD      B,(HL)              ; ... target room number
518C: 23              INC     HL                  ; Next byte
518D: E5              PUSH    HL                  ; Update script pointer
518E: 3A 3F 50        LD      A,(currentRoom)     ; Checking ...
5191: 5F              LD      E,A                 ; ... current room
5192: 3E 0F           LD      A,$0F               ; obj_LAMP_on
5194: CD 50 43        CALL    GetObjectInfo       ; Is the lit-lamp in this room?
5197: CA DA 51        JP      Z,$51DA             ; Yes, there is light. Make the move.
519A: 1E FF           LD      E,$FF               ; Backpack room number
519C: 3E 0F           LD      A,$0F               ; obj_LAMP_on
519E: CD 50 43        CALL    GetObjectInfo       ; Is the lit-lamp in the backpack?
51A1: CA DA 51        JP      Z,$51DA             ; Yes, there is light. Make the move.
51A4: 21 45 4F        LD      HL,AmbientLightTable; Ambient light table
51A7: 3A 3F 50        LD      A,(currentRoom)     ; Get the light setting ...
51AA: CD 61 43        CALL    TableOffsetTwoBytes ; ... for the current room
51AD: 7E              LD      A,(HL)              ; Get the ambient light level of the room
51AE: E6 40           AND     $40                 ; Check the bit
51B0: C2 DA 51        JP      NZ,$51DA            ; There is light in the current room. Make the move.
51B3: 78              LD      A,B                 ; Room we are moving to
51B4: 21 45 4F        LD      HL,AmbientLightTable; Ambient light table
51B7: CD 61 43        CALL    TableOffsetTwoBytes ; Get the light setting ...
51BA: 7E              LD      A,(HL)              ; ... for the destination room
51BB: E6 40           AND     $40                 ; Check the bit
51BD: C2 DA 51        JP      NZ,$51DA            ; There is light in the next room. Make the move.
51C0: 58              LD      E,B                 ; Destination room
51C1: 3E 0F           LD      A,$0F               ; obj_LAMP_on
51C3: CD 50 43        CALL    GetObjectInfo       ; Is the lit-lamp in the next room?
51C6: CA DA 51        JP      Z,$51DA             ; Yes, there is light. Make the move.
51C9: 3A 74 47        LD      A,(keyWaitCounter)  ; Random number (key-input wait counter)
51CC: FE 67           CP      $67                 ; random(255) < 103? That's 40% of the time.
51CE: DA DA 51        JP      C,$51DA             ; Yes, we were lucky. Make the move.
51D1: 21 04 79        LD      HL,PS_A1            ; "YOU_FELL_INTO_A_PIT_AND_BROKE_EVERY_BONE_IN_YOUR_BODY. "
51D4: CD AE 45        CALL    PrintPacked         ; Print message
51D7: C3 49 54        JP      PlayerDied          ; The player died. Resurrect the player.
;
51DA: 3A 3F 50        LD      A,(currentRoom)     ; Copy current room number ...
51DD: 32 44 50        LD      (lastRoom),A        ; ... to last room number
51E0: 78              LD      A,B                 ; Move player to ...
51E1: 32 3F 50        LD      (currentRoom),A     ; ... current room
51E4: CD 45 52        CALL    DescribeRoom        ; Print room and room description (with objects)
51E7: 3E 2A           LD      A,$2A               ; obj_CHEST
51E9: 21 E7 4F        LD      HL,ObjectData       ; object info
51EC: CD 61 43        CALL    TableOffsetTwoBytes ; Look up the info on the chest
51EF: 23              INC     HL                  ; Get the ...
51F0: 7E              LD      A,(HL)              ; ... room number of the chest
51F1: A7              AND     A                   ; Has the chest been placed in the maze?
51F2: C2 42 52        JP      NZ,$5242            ; Yes, skip themMummy
;
51F5: 21 E7 4F        LD      HL,ObjectData       ; object info
51F8: 0E 2C           LD      C,$2C               ; 44 objects total
51FA: 06 00           LD      B,$00               ; Count number of treasures
51FC: 7E              LD      A,(HL)              ; Attribute of object
51FD: E6 20           AND     $20                 ; Is object a treasure?
51FF: 23              INC     HL                  ; Point to 2nd entry
5200: CA 0A 52        JP      Z,$520A             ; Not an object, move to next object
5203: 7E              LD      A,(HL)              ; Is the object ...
5204: FE FF           CP      $FF                 ; ... in the backpack?
5206: C2 0A 52        JP      NZ,$520A            ; No, move to next object
5209: 04              INC     B                   ; Bump the treasure count
520A: 23              INC     HL                  ; Next object
520B: 0D              DEC     C                   ; All objects checked?
520C: C2 FC 51        JP      NZ,$51FC            ; No, go back for all of them
;
520F: 78              LD      A,B                 ; Two (or more) treasures ...
5210: FE 02           CP      $02                 ; ... in the backpack?
5212: DA 42 52        JP      C,$5242             ; No, skip the mummy
;
5215: 21 E7 4F        LD      HL,ObjectData       ; Object info
5218: 0E 2C           LD      C,$2C               ; 44 objects to check
521A: 7E              LD      A,(HL)              ; Get the object attribute
521B: E6 20           AND     $20                 ; Is the object treasure?
521D: 23              INC     HL                  ; Next byte in entry
521E: CA 30 52        JP      Z,$5230             ; Not a treasure, move to next object
5221: 7E              LD      A,(HL)              ; Get the object location
5222: FE FF           CP      $FF                 ; In the backpack?
5224: C2 30 52        JP      NZ,$5230            ; Not in the backpack, move to next object
5227: 36 35           LD      (HL),$35            ; Move the object to the treasure room in the maze
5229: 3A 45 50        LD      A,(numObjInPack)    ; Number of objects in pack
522C: 3D              DEC     A                   ; No longer carying ...
522D: 32 45 50        LD      (numObjInPack),A    ; ... this object
5230: 23              INC     HL                  ; Next object
5231: 0D              DEC     C                   ; Have we checked all objects?
5232: C2 1A 52        JP      NZ,$521A            ; No, go back for them all
5235: 1E 35           LD      E,$35               ; room_53 in the maze
5237: 3E 2A           LD      A,$2A               ; obj_CHEST
5239: CD 76 43        CALL    SetObjectLocation   ; Place the chest in the maze
523C: 21 4C 7B        LD      HL,PS_AD            ; "_____SUDDENLY,_A_MUMMY_CREEPS_UP_BEHIND_YOU!!"
523F: CD AE 45        CALL    PrintPacked         ; Print the message
;
5242: C3 AB 43        JP      ScriptCommandPASS   ; Move passed. Continue the script.

DescribeRoom:
5245: 3A 3F 50        LD      A,(currentRoom)     ; Get the current room number
5248: 21 45 4F        LD      HL,AmbientLightTable; Ambient light table
524B: CD 61 43        CALL    TableOffsetTwoBytes ; Look up the lighting info
524E: 7E              LD      A,(HL)              ; Is there ...
524F: E6 40           AND     $40                 ; ... natural light?
5251: C2 71 52        JP      NZ,$5271            ; Yes, show the room description
5254: 3A 3F 50        LD      A,(currentRoom)     ; Get the current room number
5257: 5F              LD      E,A                 ; Is the ...
5258: 3E 0F           LD      A,$0F               ; ... obj_LAMP_ON ...
525A: CD 50 43        CALL    GetObjectInfo       ; ... in the current room?
525D: CA 71 52        JP      Z,$5271             ; Yes, there is light. Show the room description
5260: 1E FF           LD      E,$FF               ; Is the ...
5262: 3E 0F           LD      A,$0F               ; ... obj_LAMP_ON ...
5264: CD 50 43        CALL    GetObjectInfo       ; ... in the backpack?
5267: CA 71 52        JP      Z,$5271             ; Yes, there is light. Show the room description
526A: 21 76 79        LD      HL,PS_A4            ; "IT_IS_NOW_PITCH_DARK.__IF_YOU_PROCEED,_YOU_"
526D: CD AE 45        CALL    PrintPacked         ; Print the warning
5270: C9              RET                         ; Out
;
5271: 3A 3F 50        LD      A,(currentRoom)     ; Get the current room number
5274: 21 88 48        LD      HL,RoomTable        ; Room info table
5277: CD 6B 43        CALL    TableOffsetFourBytes; Look up 4-byte entry
527A: 7E              LD      A,(HL)              ; Get the description LSB
527B: 23              INC     HL                  ; Next byte
527C: 66              LD      H,(HL)              ; Get the dscription MSB
527D: 6F              LD      L,A                 ; Move description LSB to HL
527E: CD AE 45        CALL    PrintPacked         ; Print the room description
;
5281: 06 00           LD      B,$00               ; Object number (counting up from 1 to 44)
5283: 04              INC     B                   ; Checking this object number
5284: 3A 3F 50        LD      A,(currentRoom)     ; Checking ...
5287: 5F              LD      E,A                 ; ... current room
5288: 78              LD      A,B                 ; Have we checked ...
5289: FE 2D           CP      $2D                 ; ... all objects?
528B: D0              RET     NC                  ; Yes, done
;
528C: CD 50 43        CALL    GetObjectInfo       ; Get the info about the object
528F: C2 83 52        JP      NZ,$5283            ; Ignore object if it isn't in the current room
5292: 78              LD      A,B                 ; Object number
5293: 21 47 50        LD      HL,ObjectDescriptions; Object description table
5296: CD 61 43        CALL    TableOffsetTwoBytes ; Look up the object's description
5299: 7E              LD      A,(HL)              ; Get the LSB
529A: 23              INC     HL                  ; Next byte of pointer
529B: 66              LD      H,(HL)              ; Get the description MSB
529C: 6F              LD      L,A                 ; Description pointer now in HL
529D: C5              PUSH    BC                  ; Hold our object count
529E: CD AE 45        CALL    PrintPacked         ; Print the object's long description
52A1: C1              POP     BC                  ; Restore the object count
52A2: C3 83 52        JP      $5283               ; Go back for all objects

Command 24: MoveObjectToCurrentRoom

MoveObjectToCurrentRoom:
52A5: E1              POP     HL                  ; Get script pointer
52A6: 3A 3F 50        LD      A,(currentRoom)     ; Get current room
52A9: 5F              LD      E,A                 ; Object destination
52AA: 7E              LD      A,(HL)              ; Object number from script
52AB: 23              INC     HL                  ; Update ...
52AC: E5              PUSH    HL                  ; ... the script pointer
52AD: CD 76 43        CALL    SetObjectLocation   ; Move the object
52B0: C3 AB 43        JP      ScriptCommandPASS   ; Command passes

Command 25: MoveObjectIntoContainer

MoveObjectIntoContainer:
52B3: E1              POP     HL                  ; Get script pointer
52B4: 7E              LD      A,(HL)              ; Get object number from script
52B5: 23              INC     HL                  ; Next byte in script
52B6: 46              LD      B,(HL)              ; Get the destination object number from script
52B7: 23              INC     HL                  ; Update ...
52B8: E5              PUSH    HL                  ; ... the script pointer
52B9: 21 E7 4F        LD      HL,ObjectData       ; Lookup the ...
52BC: CD 61 43        CALL    TableOffsetTwoBytes ; ... target object
52BF: 7E              LD      A,(HL)              ; Set ...
52C0: F6 80           OR      $80                 ; ... the "is carried" ...
52C2: 77              LD      (HL),A              ; ... flag on the target object
52C3: 23              INC     HL                  ; Being carried by ...
52C4: 70              LD      (HL),B              ; ... container
52C5: C3 2B 54        JP      PrintOK             ; Print OK and command passes

Command 2: AssertObjectIsInPack

This command checks if the requested object is in the backpack.

AssertObjectIsInPack:
52C8: E1              POP     HL                  ; Get the next ...
52C9: 7E              LD      A,(HL)              ; ... byte from ...
52CA: 23              INC     HL                  ; ... the script
52CB: E5              PUSH    HL                  ; Update the script pointer
52CC: 1E FF           LD      E,$FF               ; Room location of pack
52CE: CD 50 43        CALL    GetObjectInfo       ; Find the object. Is it in the pack (at E)?
52D1: CA AB 43        JP      Z,ScriptCommandPASS ; Yes, command passes
52D4: C3 BE 43        JP      ScriptCommandFAIL   ; No, command fails

Command 3: AssertObjectIsInCurrentRoomOrPack

This command checks if the requested object is accessible (current room or backpack).

AssertObjectIsInCurrentRoomOrPack:
52D7: E1              POP     HL                  ; Get the next ...
52D8: 46              LD      B,(HL)              ; ... byte from ...
52D9: 23              INC     HL                  ; ... the script
52DA: E5              PUSH    HL                  ; Update the script pointer
52DB: 3A 3F 50        LD      A,(currentRoom)     ; Current room number
52DE: 5F              LD      E,A                 ; Check for current room
52DF: 78              LD      A,B                 ; Requested object number
52E0: CD 50 43        CALL    GetObjectInfo       ; Get the info about the object
52E3: CA AB 43        JP      Z,ScriptCommandPASS ; It is in the room. Return SUCCESS
52E6: 78              LD      A,B                 ; Object number
52E7: C3 CC 52        JP      $52CC               ; Check the backpack for the object

Command 26: AssertObjectIsInCurrentRoom

This command checks if the request object (or object's top level container) is in the current room.

AssertObjectIsInCurrentRoom:
52EA: E1              POP     HL                  ; Get the script pointer
52EB: 3A 3F 50        LD      A,(currentRoom)     ; Checking ...
52EE: 5F              LD      E,A                 ; ... current room
52EF: 7E              LD      A,(HL)              ; Requested object number
52F0: 23              INC     HL                  ; Update ...
52F1: E5              PUSH    HL                  ; ... script pointer
52F2: CD 50 43        CALL    GetObjectInfo       ; Get the info about the object
52F5: CA AB 43        JP      Z,ScriptCommandPASS ; Success if parent container is in the current room
52F8: C3 BE 43        JP      ScriptCommandFAIL   ; Otherwise the command fails

Command 13: AssertPackIsEmptyExceptForEmerald

This very specific command checks if the backpack is empty or has just the emerald. This is used in the script for room_73, the "TIGHT_SQUEEZE" from the "CHAMBER_OF_THE_HIGH_PRIEST".

AssertPackIsEmptyExceptForEmerald:
52FB: 21 E7 4F        LD      HL,ObjectData       ; 
52FE: 0E 01           LD      C,$01               ; Start checking with object 1
5300: 23              INC     HL                  ; Location of object
5301: 79              LD      A,C                 ; Is this object ...
5302: FE 1F           CP      $1F                 ; ... the obj_EMERALD?
5304: CA 0D 53        JP      Z,$530D             ; Yes, ignore it
5307: 7E              LD      A,(HL)              ; Get the location
5308: FE FF           CP      $FF                 ; Is this object in the backpack?
530A: CA BE 43        JP      Z,ScriptCommandFAIL ; Yes, fail
530D: 23              INC     HL                  ; Next object data
530E: 0C              INC     C                   ; Next object number
530F: 79              LD      A,C                 ; Past the ...
5310: FE 2D           CP      $2D                 ; ... last object?
5312: C2 00 53        JP      NZ,$5300            ; No, keep checking
5315: C3 AB 43        JP      ScriptCommandPASS   ; Success

Command 10: AssertRandomIsLessOrEqual

This command is a very specific move command. If the random value is less than or equal to the given target value, then the player stays in the same room. The code prints the "crawled around" message and reprints the current room description and the command returns success. If the random value is greater than the given value, the command fails.

This script command is used in two rooms: room_65 (CHAMBER_OF_HORUS) and room_60 (LAND_OF_DEAD). In all cases, it is wrapped in a "StopIfPassElseContinue" like this:

4DEE: 08 07     ; NW
4DF0: 07 03     ;    StopIfPassElseContinue
4DF2: 0A F0     ;        AssertRandomIsLessOrEqual(240)
4DF4: 01 3B     ;    MoveToRoom(room_59) woodsRoom106

Most of the time (random values 0 through 240) the command passes and the player stays put. But for values 241 through 255, the command fails and the player moves to room_59 (ANTEROOM_OF_SEKER).

AssertRandomIsLessOrEqual:
5318: E1              POP     HL                  ; Get target ...
5319: 46              LD      B,(HL)              ; ... value from script
531A: 23              INC     HL                  ; Update the ...
531B: E5              PUSH    HL                  ; ... script pointer
531C: 3A 74 47        LD      A,(keyWaitCounter)  ; Get the randomish number
531F: B8              CP      B                   ; Compare with target value
5320: CA 26 53        JP      Z,$5326             ; The same means pass
5323: D2 BE 43        JP      NC,ScriptCommandFAIL; Less than means pass
5326: 21 95 72        LD      HL,PS_74            ; "WOUND_UP_BACK__IN_THE_MAIN_PASSAGE."
5329: CD AE 45        CALL    PrintPacked         ; Print message
532C: CD 45 52        CALL    DescribeRoom        ; Reprint the current room description
532F: C3 AB 43        JP      ScriptCommandPASS   ; Pass

Command 12: MoveToRoomIfItWasLastRoom (UNUSED)

This command moves the player to the target room but only if the target room was the last room.

If the target room is not the last room, the command fails.

This command is not used in any script.

MoveToRoomIfItWasLastRoom:
5332: E1              POP     HL                  ; Get destination ...
5333: 46              LD      B,(HL)              ; ... room
5334: 23              INC     HL                  ; Update the ...
5335: E5              PUSH    HL                  ; ... script pointer
5336: 3A 44 50        LD      A,(lastRoom)        ; Get the last room
5339: B8              CP      B                   ; Is target room the last room?
533A: C2 BE 43        JP      NZ,ScriptCommandFAIL; No, reject the move (fail)
533D: E1              POP     HL                  ; Back the script ...
533E: 2B              DEC     HL                  ; ... pointer up so we ...
533F: E5              PUSH    HL                  ; ... can call MoveToRoom
5340: C3 8A 51        JP      MoveToRoom          ; Normal move to room (with lighting checks)

Command 22: GetUserInputObject

GetUserInputObject:
5343: 3A 7B 46        LD      A,(noun)            ; Get the object number the player requested
5346: 1E FF           LD      E,$FF               ; Get the ...
5348: CD 50 43        CALL    GetObjectInfo       ; ... target object's info
534B: C2 57 53        JP      NZ,$5357            ; It isn't in the backpack. No error here.
534E: 21 60 75        LD      HL,PS_87            ; "YOU_ARE_ALREADY_CARRYING_IT."
5351: CD AE 45        CALL    PrintPacked         ; Print the error
5354: C3 AB 43        JP      ScriptCommandPASS   ; Success (the object is in backpack as requested!)
;
5357: 3A 7B 46        LD      A,(noun)            ; Get the input noun again
535A: 47              LD      B,A                 ; Handle the actual ...
535B: C3 F4 53        JP      GetToBackpack       ; ... GET operation

Command 4: Print

This command unpacks a string and prints it. This command always succeeds.

Print:
535E: E1              POP     HL                  ; Get the script pointer
535F: 5E              LD      E,(HL)              ; Get the LSB of the string
5360: 23              INC     HL                  ; Next in script
5361: 56              LD      D,(HL)              ; Get the MSB of the string
5362: 23              INC     HL                  ; Update the ...
5363: E5              PUSH    HL                  ; ... script pointer
5364: EB              EX      DE,HL               ; String pointer now in HL
5365: CD AE 45        CALL    PrintPacked         ; Print the packed string
5368: C3 AB 43        JP      ScriptCommandPASS   ; Printing is always a success

Command 11: DropObject (UNUSED)

DropObject:
536B: E1              POP     HL                  ; Get the target ...
536C: 46              LD      B,(HL)              ; ... object from the script
536D: 23              INC     HL                  ; Update the ...
536E: E5              PUSH    HL                  ; ... script pointer
536F: 3A 45 50        LD      A,(numObjInPack)    ; Decrease ...
5372: 3D              DEC     A                   ; ... number of objects ...
5373: 32 45 50        LD      (numObjInPack),A    ; ... in pack
5376: 3A 3F 50        LD      A,(currentRoom)     ; Current room
5379: 5F              LD      E,A                 ; Move ...
537A: 78              LD      A,B                 ; ... object to ...
537B: CD 76 43        CALL    SetObjectLocation   ; ... current room
537E: C3 2B 54        JP      PrintOK             ; Print OK and command passes

Command 14: MoveToLastRoom

This command is only used by the "BACK" command to return the player to the last room.

This command always passes but prints a message if there was no last room.

5381: 3A 44 50        LD      A,(lastRoom)        ; Was there ...
5384: A7              AND     A                   ; ... a last room?
5385: CA 92 53        JP      Z,$5392             ; No, print error and pass
5388: 47              LD      B,A                 ; Hold last room
5389: 3A 3F 50        LD      A,(currentRoom)     ; Current room ...
538C: 32 44 50        LD      (lastRoom),A        ; ... to last room
538F: C3 E0 51        JP      $51E0               ; Continue with MoveToRoom logic (lighting, mummy, etc)
;
5392: 21 33 75        LD      HL,PS_86            ; "SORRY,_BUT_I_NO_LONGER_SEEM_TO_REMEMBER_HOW_IT_WAS_YOU_GOT_HERE."
5395: CD AE 45        CALL    PrintPacked         ; Print string
5398: C3 AB 43        JP      ScriptCommandPASS   ; Command passes

Command 15: PrintInventory

PrintInventory:
539B: 3A 45 50        LD      A,(numObjInPack)    ; Is there anything in ...
539E: A7              AND     A                   ; ... the backpack?
539F: C2 AB 53        JP      NZ,$53AB            ; Yes, go list the contents
;
53A2: 21 A6 75        LD      HL,PS_89            ; "YOU'RE_NOT_CARRYING_ANYTHING."
53A5: CD AE 45        CALL    PrintPacked         ; Print the message
53A8: C3 AB 43        JP      ScriptCommandPASS   ; Command passes
;
53AB: 21 BC 75        LD      HL,PS_8A            ; "YOU_ARE_CURRENTLY_HOLDING_THE_FOLLOWING:"
53AE: CD AE 45        CALL    PrintPacked         ; Print the banner
53B1: 06 00           LD      B,$00               ; Object number through loop
53B3: 1E FF           LD      E,$FF               ; Backpack room number
53B5: 04              INC     B                   ; Next (or first) object number
53B6: 78              LD      A,B                 ; Have we checked ...
53B7: FE 2D           CP      $2D                 ; ... all objects?
53B9: D2 AB 43        JP      NC,ScriptCommandPASS; Yes, command passes
;
53BC: CD 50 43        CALL    GetObjectInfo       ; Get the object info
53BF: C2 B3 53        JP      NZ,$53B3            ; Object is not in backpack, move to next object
53C2: 78              LD      A,B                 ; Object number
53C3: 21 47 50        LD      HL,ObjectDescriptions; Object info table
53C6: CD 61 43        CALL    TableOffsetTwoBytes ; Look up the description
53C9: 7E              LD      A,(HL)              ; Description LSB
53CA: 23              INC     HL                  ; Next entry
53CB: 66              LD      H,(HL)              ; Description MSB
53CC: 6F              LD      L,A                 ; HL now points to long description
53CD: 7E              LD      A,(HL)              ; Skip ...
53CE: 23              INC     HL                  ; ... to ...
53CF: A7              AND     A                   ; ... short ...
53D0: C2 CD 53        JP      NZ,$53CD            ; ... description
53D3: C5              PUSH    BC                  ; Hold our counter
53D4: CD AE 45        CALL    PrintPacked         ; Print the short description
53D7: C1              POP     BC                  ; Restore the counter
53D8: C3 B3 53        JP      $53B3               ; Check all objects

Command 16: PrintRoomDescription

PrintRoomDescription:
53DB: CD 45 52        CALL    DescribeRoom        ; Print the room description (with objects)
53DE: C3 AB 43        JP      ScriptCommandPASS   ; Command passes

Command 17: AssertObjectMatchesUserInput

AssertObjectMatchesUserInput:
53E1: E1              POP     HL                  ; Get the script pointer
53E2: 46              LD      B,(HL)              ; Get the target object
53E3: 23              INC     HL                  ; Update the ...
53E4: E5              PUSH    HL                  ; ... script pointer
53E5: 3A 7B 46        LD      A,(noun)            ; Does user noun ...
53E8: B8              CP      B                   ; ... match the target object?
53E9: C2 BE 43        JP      NZ,ScriptCommandFAIL; No, command fails
53EC: C3 AB 43        JP      ScriptCommandPASS   ; yes, command passes

Command 18: GetObjectFromRoom

GetObjectFromRoom:
53EF: E1              POP     HL                  ; Get the script pointer
53F0: 46              LD      B,(HL)              ; Get the object number
53F1: 23              INC     HL                  ; Update ...
53F2: E5              PUSH    HL                  ; ... script pointer
53F3: 78              LD      A,B                 ; To parameter register
;
GetToBackpack:
53F4: CD 50 43        CALL    GetObjectInfo       ; Look up the target object
53F7: 7E              LD      A,(HL)              ; Is this object ...
53F8: E6 40           AND     $40                 ; ... able to be picked up?
53FA: C2 06 54        JP      NZ,$5406            ; Yes, skip the error
53FD: 21 D9 75        LD      HL,PS_8B            ; "DON'T_BE_RIDICULOUS!"
5400: CD AE 45        CALL    PrintPacked         ; Print the message
5403: C3 AB 43        JP      ScriptCommandPASS   ; Command passes
;
5406: 3A 45 50        LD      A,(numObjInPack)    ; Get number of objects in pack
5409: FE 08           CP      $08                 ; Eight is our max
540B: DA 17 54        JP      C,$5417             ; We have room for another, go get it
540E: 21 75 75        LD      HL,PS_88            ; "YOU_CAN'T_CARRY_ANYTHING_MORE."
5411: CD AE 45        CALL    PrintPacked         ; Print the message
5414: C3 AB 43        JP      ScriptCommandPASS   ; Command passes
;
5417: 3C              INC     A                   ; Add one ...
5418: 32 45 50        LD      (numObjInPack),A    ; ... to pack count
541B: 78              LD      A,B                 ; Object number
541C: 1E FF           LD      E,$FF               ; Backpack location
541E: CD 76 43        CALL    SetObjectLocation   ; Move the object to the backpack
5421: C3 2B 54        JP      PrintOK             ; Print OK and command passes

Command 23: DropUserInputObject

DropUserInputObject:
5424: 3A 7B 46        LD      A,(noun)            ; Get the player's ...
5427: 47              LD      B,A                 ; ... noun input
5428: C3 6F 53        JP      $536F               ; Continue with drop

Command 20: PrintOK

PrintOK:
542B: 21 2F 75        LD      HL,PS_85            ; "OK_"
542E: CD AE 45        CALL    PrintPacked         ; Print string
5431: C3 AB 43        JP      ScriptCommandPASS   ; Command passes

Command 21: MoveObjectToRoom

MoveObjectToRoom:
5434: E1              POP     HL                  ; Get the script pointer
5435: 7E              LD      A,(HL)              ; Get the object number
5436: 23              INC     HL                  ; Next in script
5437: 5E              LD      E,(HL)              ; Get the room number
5438: 23              INC     HL                  ; Update the ...
5439: E5              PUSH    HL                  ; ... script pointer
543A: 21 E7 4F        LD      HL,ObjectData       ; Look up the ...
543D: CD 61 43        CALL    TableOffsetTwoBytes ; ... target object
5440: 7E              LD      A,(HL)              ; Clear the ...
5441: E6 7F           AND     $7F                 ; ... being-carried flag
5443: 77              LD      (HL),A              ; Store the new attributes
5444: 23              INC     HL                  ; Location entry
5445: 73              LD      (HL),E              ; Object now in target room
5446: C3 AB 43        JP      ScriptCommandPASS   ; Command passes

PlayerDied:
5449: 3A 46 50        LD      A,(numResurrected)  ; Number of resurrections
544C: 3C              INC     A                   ; Add one ...
544D: 32 46 50        LD      (numResurrected),A  ; ... to the count
5450: FE 03           CP      $03                 ; Third time (or more)?
5452: D2 BC 54        JP      NC,ThirdResurrection; Yes, do the 3rd
5455: FE 02           CP      $02                 ; 2nd time?
5457: CA B0 54        JP      Z,SecondResurrection; Yes, do the 2nd
;
; First time we initialize the message pointer
545A: 21 B4 7E        LD      HL,PS_BC            ; "ALL_RIGHT.__BUT_DON'T_BLAME_ME"
545D: 22 C5 54        LD      (NextResurrectMessage),HL; Next resurrection message
5460: 21 AA 7D        LD      HL,PS_B9            ; "YOU_SEEM_TO_HAVE_GOTTEN_YOURSELF_KILLED."
5463: CD AE 45        CALL    PrintPacked         ; Print the message
5466: CD EE 45        CALL    WaitForKey          ; Wait for the user
5469: FE 59           CP      $59                 ; Is it a "Y" for yes to continuing on?
546B: C2 EF 55        JP      NZ,PrintScoreAndStop; No, print score and stop
546E: 2A C5 54        LD      HL,(NextResurrectMessage); Print resurrection ...
5471: CD AE 45        CALL    PrintPacked         ; ... message
5474: 21 02 50        LD      HL,$5002            ; obj_LAMP_off to ...
5477: 36 01           LD      (HL),$01            ; ... room_1
5479: 23              INC     HL                  ; Point to ...
547A: 23              INC     HL                  ; ... obj_LAMP_on
547B: 36 00           LD      (HL),$00            ; Move it out of play
547D: 21 E7 4F        LD      HL,ObjectData       ; Object data
5480: 3A 3F 50        LD      A,(currentRoom)     ; Player's ...
5483: 47              LD      B,A                 ; ... current room
5484: 3E FF           LD      A,$FF               ; Backpack location
5486: 0E 2C           LD      C,$2C               ; 44 objects to check
;
5488: 23              INC     HL                  ; Next (or first) object
5489: BE              CP      (HL)                ; Is object in backpack
548A: C2 97 54        JP      NZ,$5497            ; No ... leave this object where it is
548D: 70              LD      (HL),B              ; Change backpack to current room
548E: 3A 45 50        LD      A,(numObjInPack)    ; Decrement ...
5491: 3D              DEC     A                   ; ... count of objects ...
5492: 32 45 50        LD      (numObjInPack),A    ; ... in pack
5495: 3E FF           LD      A,$FF               ; Retore backpack location (had to use A)
5497: 23              INC     HL                  ; Next object
5498: 0D              DEC     C                   ; All done?
5499: C2 88 54        JP      NZ,$5488            ; No, drop all objects in backpack
549C: 3E 02           LD      A,$02               ; Resurrect player ...
549E: 32 3F 50        LD      (currentRoom),A     ; ... in the entrance (past the lamp at 1 ... sneaky)
54A1: CD 45 52        CALL    DescribeRoom        ; Print the room description
54A4: 31 BF 47        LD      SP,$47BF            ; Reset the stack pointer
54A7: 21 00 00        LD      HL,$0000            ; Reset the ...
54AA: 22 42 50        LD      (lampOnTurnCount),HL; ... lamp time (very generous)
54AD: C3 19 43        JP      GameLoop            ; Back to the top of the game loop

SecondResurrection:
54B0: 21 4E 7F        LD      HL,PS_BD            ; Next resurrection ...
54B3: 22 C5 54        LD      (NextResurrectMessage),HL; ... message "WHERE_DID_I_PUT_ORANGE_SMOKE"
54B6: 21 1D 7E        LD      HL,PS_BA            ; "YOU_CLUMBSY_OAF,_YOU'VE_DONE_IT_AGAIN
54B9: C3 63 54        JP      $5463               ; Print the message and ressurect

ThirdResurrection:
54BC: 21 79 7E        LD      HL,PS_BB            ; "HOW_CAN_I_REINCARNATE_YOU____WITHOUT_ORANGE_SMOKE?"
54BF: CD AE 45        CALL    PrintPacked         ; Print message
54C2: C3 EF 55        JP      PrintScoreAndStop   ; All lives gone. Print score and stop.

NextResurrectMessage:
54C5: 00 00

54C7: CD CD 54        CALL    PrintScore          ; Print the score
54CA: C3 AB 43        JP      ScriptCommandPASS   ; Command passes

Command 8: PrintScore

PrintScore:
54CD: 21 00 00        LD      HL,$0000            ; Clear score tally
54D0: 22 B2 55        LD      (scoreTempLSB),HL   ; 
54D3: 21 45 4F        LD      HL,AmbientLightTable; 
54D6: 0E 51           LD      C,$51               ; 81 rooms to check
54D8: 7E              LD      A,(HL)              ; First byte
54D9: E6 80           AND     $80                 ; Was something scored in this room?
54DB: 23              INC     HL                  ; Next room
54DC: CA F0 54        JP      Z,$54F0             ; No ... next room
54DF: 3A B2 55        LD      A,(scoreTempLSB)    ; BCD LSB
54E2: 86              ADD     A,(HL)              ; Add in the score from the room
54E3: 27              DAA                         ; Adjust for BCD
54E4: 32 B2 55        LD      (scoreTempLSB),A    ; Update LSB
54E7: 3A B3 55        LD      A,(scoreTempMSB)    ; Carry into ...
54EA: CE 00           ADC     $00                 ; ... the MSB
54EC: 27              DAA                         ; Adjust for BCD
54ED: 32 B3 55        LD      (scoreTempMSB),A    ; Update MSB
54F0: 23              INC     HL                  ; Next room
54F1: 0D              DEC     C                   ; All rooms checked?
54F2: C2 D8 54        JP      NZ,$54D8            ; No ... check them all
;
54F5: 21 E7 4F        LD      HL,ObjectData       ; Now check the objects
54F8: 0E 2C           LD      C,$2C               ; 44 objects to check
54FA: 7E              LD      A,(HL)              ; First byte of object
54FB: E6 20           AND     $20                 ; Is this a treasure?
54FD: 23              INC     HL                  ; Next in table
54FE: CA 21 55        JP      Z,$5521             ; Not a treasure, skip it
5501: 7E              LD      A,(HL)              ; Location of object
5502: FE 02           CP      $02                 ; Is this object (or parent container) in room 2?
5504: 06 20           LD      B,$20               ; Score 20 points (BCD) if it is
5506: CA 10 55        JP      Z,$5510             ; It is in the target room ... go score it
5509: FE FF           CP      $FF                 ; Is it in the backpack?
550B: C2 21 55        JP      NZ,$5521            ; No, next object
550E: 06 05           LD      B,$05               ; Score 5 points if the object is in the backpack
5510: 3A B2 55        LD      A,(scoreTempLSB)    ; BCD LSB
5513: 80              ADD     A,B                 ; Add in score from the object
5514: 27              DAA                         ; Adjust for BCD
5515: 32 B2 55        LD      (scoreTempLSB),A    ; Update LSB
5518: 3A B3 55        LD      A,(scoreTempMSB)    ; Carry into ...
551B: CE 00           ADC     $00                 ; ... the MSB
551D: 27              DAA                         ; Adjust for BCD
551E: 32 B3 55        LD      (scoreTempMSB),A    ; Update the MSB
;
5521: 23              INC     HL                  ; Next in object table
5522: 0D              DEC     C                   ; Have we processed all objects?
5523: C2 FA 54        JP      NZ,$54FA            ; No, go check them all
;
5526: 3A 46 50        LD      A,(numResurrected)  ; Number of deaths
5529: A7              AND     A                   ; No penalty if ...
552A: CA 48 55        JP      Z,$5548             ; ... we haven't died
552D: 4F              LD      C,A                 ; Penalized 10 points for each death
552E: 06 90           LD      B,$90               ; BCD value for "-10"
5530: 3A B2 55        LD      A,(scoreTempLSB)    ; LSB of score
5533: 80              ADD     A,B                 ; Add penalty (negative)
5534: 27              DAA                         ; Adjust for BCD
5535: 32 B2 55        LD      (scoreTempLSB),A    ; Update LSB
5538: DA 44 55        JP      C,$5544             ; No borrow ... move on
553B: 3A B3 55        LD      A,(scoreTempMSB)    ; MSB of score
553E: C6 99           ADD     $99                 ; BCD value for "-1" (borrow)
5540: 27              DAA                         ; Adjust for BCD
5541: 32 B3 55        LD      (scoreTempMSB),A    ; Update the MSB
5544: 0D              DEC     C                   ; All deaths subtracted off?
5545: C2 30 55        JP      NZ,$5530            ; No ... do them all
;
5548: 3A B3 55        LD      A,(scoreTempMSB)    ; Is score ...
554B: FE 90           CP      $90                 ; ... positive?
554D: DA 78 55        JP      C,$5578             ; Yes ... print a space for the sign
5550: 3E 2D           LD      A,$2D               ; Add a "-" to ...
5552: 32 BF 55        LD      (scoreSign),A       ; ... the score string
5555: 3A B3 55        LD      A,(scoreTempMSB)    ; 
5558: 47              LD      B,A                 ;
5559: 3E 99           LD      A,$99               ; TODO decode the math
555B: 90              SUB     B                   ; Negative values need fixing up to make them right
555C: 32 B3 55        LD      (scoreTempMSB),A    ; 
555F: 3A B2 55        LD      A,(scoreTempLSB)    ; 
5562: 47              LD      B,A                 ;
5563: 3E 99           LD      A,$99               ; TODO BCD math for negatives
5565: 90              SUB     B                   ;
5566: C6 01           ADD     $01                 ;
5568: 27              DAA                         ;
5569: 32 B2 55        LD      (scoreTempLSB),A    ; 
556C: 3A B3 55        LD      A,(scoreTempMSB)    ; 
556F: CE 00           ADC     $00                 ;
5571: 27              DAA                         ;
5572: 32 B3 55        LD      (scoreTempMSB),A    ; 
5575: C3 7D 55        JP      $557D               ; Now update the turns
;
5578: 3E 20           LD      A,$20               ; Space means "+" ...
557A: 32 BF 55        LD      (scoreSign),A       ; ... in the score message
;
557D: 21 C0 55        LD      HL,scoreSpot        ; Turn count in the score message
5580: 3A B3 55        LD      A,(scoreTempMSB)    ; MSB of calculated score
5583: CD A2 55        CALL    BinaryToASCII       ; Add MSB of score to string
5586: 3A B2 55        LD      A,(scoreTempLSB)    ; LSB of calculated score
5589: CD A2 55        CALL    BinaryToASCII       ; Add LSB of score to string
558C: 21 E3 55        LD      HL,turnSpot         ; Turn count spot in string
558F: 3A 41 50        LD      A,(bcdTurnCountMSB) ; Add MSB of turn ...
5592: CD A2 55        CALL    BinaryToASCII       ; ... count to string
5595: 3A 40 50        LD      A,(bcdTurnCountLSB) ; Add LSB of turn ...
5598: CD A2 55        CALL    BinaryToASCII       ; ... count to string
559B: 21 B4 55        LD      HL,ScoreString      ; The string we just built
559E: CD D0 45        CALL    PrintPlain          ; Print the constructed score
55A1: C9              RET                         

BinaryToASCII:
55A2: F5              PUSH    AF                  ; Hold the lower nibble
55A3: 0F              RRCA                        ; Roll ...
55A4: 0F              RRCA                        ; ... to ...
55A5: 0F              RRCA                        ; ... upper ...
55A6: 0F              RRCA                        ; ... nibble
55A7: CD AB 55        CALL    $55AB               ; Convert and store the upper digit
55AA: F1              POP     AF                  ; Restore the lower nibble, convert, and store
;
55AB: E6 0F           AND     $0F                 ; Only keep 4 bits
55AD: C6 30           ADD     $30                 ; Binary to ASCII digit
55AF: 77              LD      (HL),A              ; Store in buffer
55B0: 23              INC     HL                  ; Bump buffer
55B1: C9              RET                         

scoreTempLSB:
55B2: 00 

scoreTempMSB:
55B3: 00           

ScoreString:
; YOU_SCORED_______OUT_OF_A_POSSIBLE_0220,_USING______TURNS.
55B4: 59 4F 55 20 53 43 4F 52 45 44 20 
scoreSign:
55BF: 20 
scoreSpot:
55C0: 20 20 20 20 20 4F 55 54 20 4F 46 20 41 20 50 4F 53 53 49 42
55D4: 4C 45 20 30 32 32 30 2C 20 55 53 49 4E 47 20 
turnSpot:
55E3: 20 20 20 20 20 54 55 52 4E 53 2E 00

Command 9: PrintScoreAndStop

PrintScoreAndStop:
55EF: CD CD 54        CALL    PrintScore          ; Print the score

EndlessLoop:
55F2: C3 F2 55        JP      EndlessLoop         ; Endless loop ... game over

Command 27: LoadGame

LoadGame:
RCONT: ; Label appears in unitialized memory in Code1.md!
55F5: 21 A0 7F        LD      HL,PS_BE            ; "READY CASSETTE"
55F8: CD AE 45        CALL    PrintPacked         ; Print message
55FB: CD EE 45        CALL    WaitForKey          ; Wait on key
55FE: FE 08           CP      $08                 ; Backspace?
5600: CA AB 43        JP      Z,ScriptCommandPASS ; Yes ... abort operation
5603: FE 0D           CP      $0D                 ; Enter?
5605: C2 FB 55        JP      NZ,$55FB            ; No ... keep waiting
5608: 97              SUB     A                   ; Make a zero
5609: CD 12 02        CALL    TapeOn              ; Turn on cassette 0
560C: CD 96 02        CALL    ReadTapeLeader      ; Read tape leader
560F: 21 45 4F        LD      HL,AmbientLightTable; Load destination
5612: 01 03 01        LD      BC,$0103            ; 259 bytes
5615: 1E 00           LD      E,$00               ; Initialize checksum
5617: E5              PUSH    HL                  ; ROM function ...
5618: C5              PUSH    BC                  ; ... mangles ...
5619: D5              PUSH    DE                  ; ... these
561A: CD 35 02        CALL    ReadTapeByte        ; Read one byte of data
561D: D1              POP     DE                  ; ROM function ...
561E: C1              POP     BC                  ; ... mangles ...
561F: E1              POP     HL                  ; ... these
5620: 77              LD      (HL),A              ; Store the byte
5621: 83              ADD     A,E                 ; Add to ...
5622: 5F              LD      E,A                 ; ... checksum
5623: 23              INC     HL                  ; Next destination
5624: 0B              DEC     BC                  ; All done?
5625: 78              LD      A,B                 ; Remember, DEC doesn't ...
5626: B1              OR      C                   ; ... affect the zero flag
5627: C2 17 56        JP      NZ,$5617            ; Nope ... do all $103 bytes
562A: D5              PUSH    DE                  ; Hold
562B: CD 35 02        CALL    ReadTapeByte        ; Read the checksum
562E: D1              POP     DE                  ; Restore
562F: BB              CP      E                   ; Checksum OK?
5630: CA 3F 56        JP      Z,$563F             ; Yes ... out
5633: 21 AC 7F        LD      HL,PS_BF            ; "CHECKSUM_ERROR"
5636: CD AE 45        CALL    PrintPacked         ; Print error message
5639: CD F8 01        CALL    TapeOff             ; Turn off tape drive
;
; We already wrote bytes to our memory, and we got a checksum error. We are going back
; to the top, but if the player aborts the load at the top of this function, then the
; game continues with corrupt data. Oops.
;
563C: C3 F5 55        JP      RCONT               ; Go back and try again
;
563F: CD F8 01        CALL    TapeOff             ; Turn off the tape
;
; We loaded 103 bytes starting at 4F45. This overwrites part of the object descriptions, which we
; manually reset here. ?? why are we reading more than we need ??
;
5642: 21 58 6D        LD      HL,$6D58            ; Reset the ...
5645: 22 47 50        LD      (ObjectDescriptions),HL; ... obj_bridge_15 ...
5648: 22 49 50        LD      ($5049),HL          ; ... and obj_bridge_18 descriptions.
564B: CD 45 52        CALL    DescribeRoom        ; Print the current room description after the load
564E: 31 BF 47        LD      SP,$47BF            ; Abandon previous stack
5651: C3 19 43        JP      GameLoop            ; Back to input loop

Command 28: SaveGame

Save 4F45 through 5047 That's one too many and picks up a byte from the ObjectDescriptions table (read only). The LoadGame code restores the first four bytes of this ObjectDescriptions table for some reason.

5654: 21 A0 7F        LD      HL,PS_BE            ; "READY_CASSETTE"
5657: CD AE 45        CALL    PrintPacked         ; Print the message
565A: CD EE 45        CALL    WaitForKey          ; Get a key
565D: FE 08           CP      $08                 ; Backspace means abort?
565F: CA AB 43        JP      Z,ScriptCommandPASS ; Yes, abort saving and command passes
5662: FE 0D           CP      $0D                 ; ENTER for ready?
5664: C2 5A 56        JP      NZ,$565A            ; No, keep waiting for backspace or ENTER
;
5667: 97              SUB     A                   ; Turn on ...
5668: CD 12 02        CALL    TapeOn              ; ... cassette 1
566B: CD 87 02        CALL    WriteTapeLeader     ; Write the tape leader
566E: 21 45 4F        LD      HL,AmbientLightTable; 4F45 ...
5671: 01 03 01        LD      BC,$0103            ; ... through 5047 ?? too many??
5674: 1E 00           LD      E,$00               ; Checksum as we go
5676: E5              PUSH    HL                  ; Hold the memory pointer
5677: C5              PUSH    BC                  ; Hold the count
5678: 7E              LD      A,(HL)              ; Get the next byte to write
5679: 83              ADD     A,E                 ; Add byte ...
567A: 5F              LD      E,A                 ; ... into checksum
567B: D5              PUSH    DE                  ; Hold the checksum
567C: 7E              LD      A,(HL)              ; Get the byte again
567D: CD 64 02        CALL    WriteTapeByte       ; Write the byte in A to tape
5680: D1              POP     DE                  ; Restore checksum
5681: C1              POP     BC                  ; Restore count
5682: E1              POP     HL                  ; Restore memory pointer
5683: 23              INC     HL                  ; Point to next byte
5684: 0B              DEC     BC                  ; Decrement the count
5685: 78              LD      A,B                 ; Any bits ...
5686: B1              OR      C                   ; ... set (means not zero)?
5687: C2 76 56        JP      NZ,$5676            ; Yes, keep writing memory to cassette
568A: 7B              LD      A,E                 ; The checksum
568B: CD 64 02        CALL    WriteTapeByte       ; Write the checksum byte in A to tape
568E: CD F8 01        CALL    TapeOff             ; Turn the tape off
5691: C3 AB 43        JP      ScriptCommandPASS   ; 

Command 29: RandomizeDirections

5694: 3A 74 47        LD      A,(keyWaitCounter)  ; Random value
5697: E6 03           AND     $03                 ; 0, 1, 2, or 3
5699: 47              LD      B,A                 ; To B
569A: 21 CC 49        LD      HL,room_1           ; start of room scripts
CNALL: ; This is the label from the actual 8080 source code (see Code1)
569D: 7E              LD      A,(HL)              ; Get the verb number
569E: 23              INC     HL                  ; Next byte
569F: A7              AND     A                   ; End of script for this room?
56A0: CA 9D 56        JP      Z,CNALL             ; Yes ... ignore the terminator and move to next room
56A3: FE FF           CP      $FF                 ; FF means the end of all room scripts
56A5: CA C2 56        JP      Z,$56C2             ; We are done, print message and out
56A8: FE 05           CP      $05                 ; Is this verb in the script a compass direction?
56AA: D2 B8 56        JP      NC,$56B8            ; No, skip over this command list
56AD: 80              ADD     A,B                 ; Roll the verb
56AE: 2B              DEC     HL                  ; Point back to the verb
56AF: E6 03           AND     $03                 ; Limit to verbs 1-4
56B1: C2 B6 56        JP      NZ,CNAL2            ; Are we in 1, 2, or 3? Yes, keep it
56B4: 3E 04           LD      A,$04               ; We rolled around. 0 becomes 4.
CNAL2: ; This is the label from the actual 8080 source code (see Code1)
56B6: 77              LD      (HL),A              ; New verb number
56B7: 23              INC     HL                  ; Point to list length
56B8: 7E              LD      A,(HL)              ; Get the length
56B9: 85              ADD     A,L                 ; Add ...
56BA: 6F              LD      L,A                 ; ... length ...
56BB: 7C              LD      A,H                 ; ... to ...
56BC: CE 00           ADC     $00                 ; ... script ...
56BE: 67              LD      H,A                 ; ... pointer
56BF: C3 9D 56        JP      CNALL               ; Try all the verbs in all rooms
;
56C2: 21 B8 7F        LD      HL,PS_C0            ; "I_NO_LONGER_SEEM_TO_KNOW_WHICH_WAY_IS_NORTH!"
56C5: CD AE 45        CALL    PrintPacked         ; Print message
56C8: 31 BF 47        LD      SP,$47BF            ; Reset stack
56CB: C3 19 43        JP      GameLoop            ; Back to top of game loop

Word Table

Pyramid has a table of known words. Every word has a grammar that describes how it can be used. For instance, LAMP is a noun. The verb NORTH is a single-word command that requires no noun (in fact it is an error to give one). The verb DROP requires a noun that is in the inventory, but the verb DRINK works on a noun that is in the room or the pack.

Multiple words can refer to the same thing. LAMP and LANTERN, for instance, mean the same thing. So do GET and STEAL.

Since multiple nouns can have the same word for a name the game logic must be careful not to ever have two nouns with the same noun in the same place. The "dead lamp", for instance, is never around when the "lit lamp" is. When checking to see if a noun is accessible the code must check every noun since multiple nouns can have the same name.

The input routine parses the user input and returns a VERB and a NOUN based on the grammar of the words. The game scripts are assured that the grammar is correct and the noun is something the user has access to (in the pack or room).

WordTable:
; Info + text + data
;   Info byte:
;   AA_BBB_CCC
;
;   AA = Grammar
;      0 = Noun
;      1 = Verb (and needs noun in pack)
;      2 = Verb (and needs noun in pack or room)
;      3 = Verb (stand alone)
;
;   BBB = number of bytes in token data
;   CCC = number of bytes in token text
;
; Object words
; A single name can refer to several objects. The object data is
; the search order for finding objects in the pack or room. For
; instance, the LAMP refers to:
;   1) 0x0E unlit lamp
;   2) 0x0F lit lamp
;   3) 0x2C dead lamp
;
wordTable:
; Nouns
;                               Objects     AA BBB CCC Word
56CE: 1C 4C 41 4D 50            0E 0F 2C  ; 00_011_100 LAMP
56D6: 1E 4C 41 4E 54 45 52      0E 0F 2C  ; 00_011_110 LANTER
56E0: 0B 42 4F 58               10        ; 00_001_011 BOX
56E5: 0F 53 43 45 50 54 45 52   11        ; 00_001_111 SCEPTER
56EE: 14 42 49 52 44            13 14     ; 00_010_100 BIRD
56F5: 16 53 54 41 54 55 45      13 14     ; 00_010_110 STATUE
56FE: 0E 50 49 4C 4C 4F 57      12        ; 00_001_110 PILLOW
5706: 0E 56 45 4C 56 45 54      12        ; 00_001_110 VELVET
570E: 0E 53 45 52 50 45 4E      0B        ; 00_001_110 SERPEN
5716: 16 53 41 52 43 4F 50      17 18     ; 00_010_110 SARCOP
571F: 0E 4D 41 47 41 5A 49      19        ; 00_001_110 MAGAZI
5727: 0D 49 53 53 55 45         19        ; 00_001_101 ISSUE
572E: 0E 45 47 59 50 54 49      19        ; 00_001_110 EGYPTI
5736: 0C 46 4F 4F 44            1A        ; 00_001_100 FOOD
573C: 0E 42 4F 54 54 4C 45      1B        ; 00_001_110 BOTTLE
5744: 15 57 41 54 45 52         1C 1E     ; 00_010_101 WATER
574C: 1D 50 4C 41 4E 54         07 08 09  ; 00_011_101 PLANT
5755: 1E 42 45 41 4E 53 54      07 08 09  ; 00_011_110 BEANST
575F: 0E 4D 41 43 48 49 4E      06        ; 00_001_110 MACHIN
5767: 0E 56 45 4E 44 49 4E      06        ; 00_001_110 VENDIN
576F: 16 42 41 54 54 45 52      23 24     ; 00_010_110 BATTER
5778: 0C 47 4F 4C 44            25        ; 00_001_100 GOLD
577E: 0E 4E 55 47 47 45 54      25        ; 00_001_110 NUGGET
5786: 0E 44 49 41 4D 4F 4E      26        ; 00_001_110 DIAMON
578E: 0E 53 49 4C 56 45 52      27        ; 00_001_110 SILVER
5796: 0C 42 41 52 53            27        ; 00_001_100 BARS
579C: 0E 4A 45 57 45 4C 52      28        ; 00_001_110 JEWELR
57A4: 0D 43 4F 49 4E 53         29        ; 00_001_101 COINS
57AB: 0D 43 48 45 53 54         2A        ; 00_001_101 CHEST
57B2: 0E 54 52 45 41 53 55      2A        ; 00_001_110 TREASU
57BA: 0C 45 47 47 53            2B        ; 00_001_100 EGGS
57C0: 0B 45 47 47               2B        ; 00_001_011 EGG
57C5: 0C 4E 45 53 54            2B        ; 00_001_100 NEST
57CB: 0B 4B 45 59               22        ; 00_001_011 KEY
57D0: 14 56 41 53 45            20 21     ; 00_010_100 VASE
57D7: 0E 53 48 41 52 44 53      15        ; 00_001_110 SHARDS
57DF: 0E 50 4F 54 54 45 52      15        ; 00_001_110 POTTER
57E7: 0E 45 4D 45 52 41 4C      1F        ; 00_001_110 EMERAL
57EF: 0D 50 45 41 52 4C         16        ; 00_001_101 PEARL
;
; Verbs
57F6: C9 4E                     01        ; 11_001_001 N
57F9: CD 4E 4F 52 54 48         01        ; 11_001_101 NORTH
5800: C9 45                     02        ; 11_001_001 E
5803: CC 45 41 53 54            02        ; 11_001_100 EAST
5809: C9 53                     03        ; 11_001_001 S
580C: CD 53 4F 55 54 48         03        ; 11_001_101 SOUTH
5813: C9 57                     04        ; 11_001_001 W
5816: CC 57 45 53 54            04        ; 11_001_100 WEST
581C: CA 4E 45                  05        ; 11_001_010 NE
5820: CE 4E 4F 52 54 48 45      05        ; 11_001_110 NORTHE
5828: CA 53 45                  06        ; 11_001_010 SE
582C: CE 53 4F 55 54 48 45      06        ; 11_001_110 SOUTHE
5834: CA 53 57                  07        ; 11_001_010 SW
5838: CE 53 4F 55 54 48 57      07        ; 11_001_110 SOUTHW
5840: CA 4E 57                  08        ; 11_001_010 NW
5844: CE 4E 4F 52 54 48 57      08        ; 11_001_110 NORTHW
584C: C9 55                     09        ; 11_001_001 U
584F: CA 55 50                  09        ; 11_001_010 UP
5853: C9 44                     0A        ; 11_001_001 D
5856: CC 44 4F 57 4E            0A        ; 11_001_100 DOWN
585C: CA 49 4E                  0B        ; 11_001_010 IN
5860: CE 49 4E 53 49 44 45      0B        ; 11_001_110 INSIDE
5868: CB 4F 55 54               0C        ; 11_001_011 OUT
586D: CE 4F 55 54 53 49 44      0C        ; 11_001_110 OUTSID
5875: CD 43 52 4F 53 53         0D        ; 11_001_101 CROSS
587C: CC 4C 45 46 54            0E        ; 11_001_100 LEFT
5882: CD 52 49 47 48 54         0F        ; 11_001_101 RIGHT
5889: CC 4A 55 4D 50            10        ; 11_001_100 JUMP
588F: CD 43 4C 49 4D 42         11        ; 11_001_101 CLIMB
5896: CD 50 41 4E 45 4C         12        ; 11_001_101 PANEL
589D: CC 42 41 43 4B            14        ; 11_001_100 BACK
58A3: CC 53 57 49 4D            16        ; 11_001_100 SWIM
58A9: CA 4F 4E                  17        ; 11_001_010 ON
58AD: CB 4F 46 46               18        ; 11_001_011 OFF
58B2: CC 51 55 49 54            19        ; 11_001_100 QUIT
58B8: CC 53 54 4F 50            19        ; 11_001_100 STOP
58BE: CD 53 43 4F 52 45         1A        ; 11_001_101 SCORE
58C5: CE 49 4E 56 45 4E 54      1B        ; 11_001_110 INVENT
58CD: CC 4C 4F 4F 4B            1C        ; 11_001_100 LOOK
58D3: CC 48 45 4C 50            1D        ; 11_001_100 HELP
58D9: CC 46 49 4E 44            1E        ; 11_001_100 FIND
;                               20        ; 11_001_010 Y2 would go here. 20 is referenced in the scripts.
58DF: 4C 44 52 4F 50            21        ; 01_001_100 DROP
58E5: 4E 52 45 4C 45 41 53      21        ; 01_001_110 RELEAS
58ED: 4C 46 52 45 45            21        ; 01_001_100 FREE
58F3: 4E 44 49 53 43 41 52      21        ; 01_001_110 DISCAR
58FB: CD 4C 49 47 48 54         17        ; 11_001_101 LIGHT
5902: 4C 57 41 56 45            23        ; 01_001_100 WAVE
5908: 4D 53 48 41 4B 45         23        ; 01_001_101 SHAKE
590F: 4D 53 57 49 4E 47         23        ; 01_001_101 SWING
5916: 4C 50 4F 55 52            24        ; 01_001_100 POUR
591C: 4B 52 55 42               25        ; 01_001_011 RUB
5921: 4D 54 48 52 4F 57         26        ; 01_001_101 THROW
5928: 4C 54 4F 53 53            26        ; 01_001_100 TOSS
592E: 4C 46 49 4C 4C            27        ; 01_001_100 FILL
5934: 8C 54 41 4B 45            28        ; 10_001_100 TAKE
593A: 8B 47 45 54               28        ; 10_001_011 GET
593F: 8D 43 41 52 52 59         28        ; 10_001_101 CARRY
5946: 8D 43 41 54 43 48         28        ; 10_001_101 CATCH
594D: 8D 53 54 45 41 4C         28        ; 10_001_101 STEAL
5954: 8E 43 41 50 54 55 52      28        ; 10_001_110 CAPTUR
595C: 8C 4F 50 45 4E            29        ; 10_001_100 OPEN
5962: 8E 41 54 54 41 43 4B      2C        ; 10_001_110 ATTACK
596A: 8C 4B 49 4C 4C            2C        ; 10_001_100 KILL
5970: 8B 48 49 54               2C        ; 10_001_011 HIT
5975: 8D 46 49 47 48 54         2C        ; 10_001_101 FIGHT
597C: 8C 46 45 45 44            2D        ; 10_001_100 FEED
5982: 8B 45 41 54               2E        ; 10_001_011 EAT
5987: 8D 44 52 49 4E 4B         2F        ; 10_001_101 DRINK
598E: 8D 42 52 45 41 4B         30        ; 10_001_101 BREAK
5995: 8D 53 4D 41 53 48         30        ; 10_001_101 SMASH
599C: CC 4C 4F 41 44            3A        ; 11_001_100 LOAD
59A2: CC 53 41 56 45            3B        ; 11_001_100 SAVE
59A8: CD 50 4C 55 47 48         39        ; 11_001_101 PLUGH
59AF: 00

General Command Handler

This script is used when the room doesn't have a script for the input command.

GeneralCommandHandler:
59B0: 01 04     ; N
59B2: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59B5: 02 04     ; E
59B7: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59BA: 03 04     ; S
59BC: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59BF: 04 04     ; W
59C1: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59C4: 05 04     ; NE
59C6: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59C9: 06 04     ; SE
59CB: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59CE: 07 04     ; SW
59D0: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59D3: 08 04     ; NW
59D5: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59D8: 09 04     ; U
59DA: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59DD: 0A 04     ; D
59DF: 04 ED 73  ;    Print(PS_7A:"THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.")
59E2: 0B 04     ; IN
59E4: 04 0D 74  ;    Print(PS_7B:"I_DON'T_KNOW_IN_FROM_OUT_HERE.__USE_COMPASS_POINTS.")
59E7: 0C 04     ; OUT
59E9: 04 0D 74  ;    Print(PS_7B:"I_DON'T_KNOW_IN_FROM_OUT_HERE.__USE_COMPASS_POINTS.")
59EC: 0E 04     ; LEFT
59EE: 04 31 74  ;    Print(PS_7C:"I_AM_UNSURE_HOW_YOU_ARE_FACING.__USE_COMPASS_POINTS.")
59F1: 0F 04     ; RIGHT
59F3: 04 31 74  ;    Print(PS_7C:"I_AM_UNSURE_HOW_YOU_ARE_FACING.__USE_COMPASS_POINTS.")
59F6: 12 04     ; PANEL
59F8: 04 56 74  ;    Print(PS_7D:"NOTHING_HAPPENS.")
59FB: 14 02     ; BACK
59FD: 0E        ;    MoveToLastRoom
59FE: 16 04     ; SWIM
5A00: 04 63 74  ;    Print(PS_7E:"I_DON'T_KNOW_HOW.")
5A03: 17 18     ; ON
5A05: 07 0C     ;    StopIfPassElseContinue
5A07: 02 0E     ;        AssertObjectIsInPack(obj_LAMP_off)
5A09: 15 0E 00  ;        MoveObjectToRoom(obj_LAMP_off, room_0)
5A0C: 15 0F FF  ;        MoveObjectToRoom(obj_LAMP_on, room_255)
5A0F: 04 8F 74  ;        Print(PS_80:"YOUR_LAMP_IS_NOW_ON.")
5A12: 07 06     ;    StopIfPassElseContinue
5A14: 02 0F     ;        AssertObjectIsInPack(obj_LAMP_on)
5A16: 04 8F 74  ;        Print(PS_80:"YOUR_LAMP_IS_NOW_ON.")
5A19: 04 9F 74  ;    Print(PS_81:"YOU_HAVE_NO_SOURCE_OF_LIGHT.")
5A1C: 18 18     ; OFF
5A1E: 07 0C     ;    StopIfPassElseContinue
5A20: 02 0F     ;        AssertObjectIsInPack(obj_LAMP_on)
5A22: 15 0F 00  ;        MoveObjectToRoom(obj_LAMP_on, room_0)
5A25: 15 0E FF  ;        MoveObjectToRoom(obj_LAMP_off, room_255)
5A28: 04 B4 74  ;        Print(PS_82:"YOUR_LAMP_IS_NOW_OFF.")
5A2B: 07 06     ;    StopIfPassElseContinue
5A2D: 02 0E     ;        AssertObjectIsInPack(obj_LAMP_off)
5A2F: 04 B4 74  ;        Print(PS_82:"YOUR_LAMP_IS_NOW_OFF.")
5A32: 04 9F 74  ;    Print(PS_81:"YOU_HAVE_NO_SOURCE_OF_LIGHT.")
5A35: 19 02     ; QUIT
5A37: 09        ;    PrintScoreAndStop
5A38: 1A 02     ; SCORE
5A3A: 08        ;    PrintScore
5A3B: 1B 02     ; INVENT
5A3D: 0F        ;    PrintInventory
5A3E: 1C 02     ; LOOK
5A40: 10        ;    PrintRoomDescription
5A41: 1D 04     ; HELP
5A43: 04 C4 74  ;    Print(PS_83:"I'M_AS_CONFUSED_AS_YOU_ARE.")
5A46: 1E 04     ; FIND
5A48: 04 D8 74  ;    Print(PS_84:"I_CAN_ONLY_TELL_YOU_WHAT_YOU_SEE_AS_YOU_MOVE_ABOUT_AND__________
;                                 MANIPULATE_THINGS.__I_CAN_NOT_TELL_YOU_WHERE_REMOTE_THINGS_ARE.")
5A4B: 28 47     ; TAKE
5A4D: 07 06     ;    StopIfPassElseContinue
5A4F: 11 07     ;        AssertObjectMatchesUserInput(obj_PLANT_A)
5A51: 04 61 7A  ;        Print(PS_A8:"THE_PLANT_HAS_EXCEPTIONALLY_DEEP_ROOTS_AND_CANNOT_BE_PULLED_____
;                                     FREE.")
5A54: 07 17     ;    StopIfPassElseContinue
5A56: 11 13     ;        AssertObjectMatchesUserInput(obj_BIRD)
5A58: 07 06     ;        StopIfPassElseContinue
5A5A: 02 11     ;            AssertObjectIsInPack(obj_SCEPTER)
5A5C: 04 C7 7A  ;            Print(PS_AA:"AS_YOU_APPROACH_THE_STATUE,_IT_COMES_TO_LIFE_AND_FLIES_ACROSS___
;                                         THE_CHAMBER_WHERE_IT_LANDS_AND_RETURNS_TO_STONE.")
5A5F: 07 09     ;        StopIfPassElseContinue
5A61: 02 10     ;            AssertObjectIsInPack(obj_BOX)
5A63: 15 13 00  ;            MoveObjectToRoom(obj_BIRD, room_0)
5A66: 19 14 10  ;            MoveObjectIntoContainer(obj_BIRD_boxed, obj_BOX)
5A69: 04 14 7B  ;        Print(PS_AB:"YOU_CAN_LIFT_THE_STATUE,_BUT_YOU_CANNOT_CARRY_IT.")
5A6C: 07 0A     ;    StopIfPassElseContinue
5A6E: 11 20     ;        AssertObjectMatchesUserInput(obj_VASE_pillow)
5A70: 12 21     ;        GetObjectFromRoom(obj_VASE_solo)
5A72: 15 20 00  ;        MoveObjectToRoom(obj_VASE_pillow, room_0)
5A75: 18 12     ;        MoveObjectToCurrentRoom(obj_PILLOW)
5A77: 07 0D     ;    StopIfPassElseContinue
5A79: 11 1E     ;        AssertObjectMatchesUserInput(obj_STREAM_56)
5A7B: 07 06     ;        StopIfPassElseContinue
5A7D: 02 1C     ;            AssertObjectIsInPack(obj_WATER)
5A7F: 04 37 7B  ;            Print(PS_AC:"YOUR_BOTTLE_IS_ALREADY_FULL.")
5A82: 19 1C 1B  ;        MoveObjectIntoContainer(obj_WATER, obj_BOTTLE)
5A85: 07 0C     ;    StopIfPassElseContinue
5A87: 11 12     ;        AssertObjectMatchesUserInput(obj_PILLOW)
5A89: 1A 20     ;        AssertObjectIsInCurrentRoom(obj_VASE_pillow)
5A8B: 15 20 00  ;        MoveObjectToRoom(obj_VASE_pillow, room_0)
5A8E: 18 21     ;        MoveObjectToCurrentRoom(obj_VASE_solo)
5A90: 12 12     ;        GetObjectFromRoom(obj_PILLOW)
5A92: 16        ;    GetUserInputObject
5A93: 21 17     ; DROP
5A95: 07 14     ;    StopIfPassElseContinue
5A97: 11 21     ;        AssertObjectMatchesUserInput(obj_VASE_solo)
5A99: 15 21 00  ;        MoveObjectToRoom(obj_VASE_solo, room_0)
5A9C: 07 08     ;        StopIfPassElseContinue
5A9E: 1A 12     ;            AssertObjectIsInCurrentRoom(obj_PILLOW)
5AA0: 18 20     ;            MoveObjectToCurrentRoom(obj_VASE_pillow)
5AA2: 04 15 7C  ;            Print(PS_B0:"THE_VASE_IS_NOW_RESTING,_DELICATELY,_ON_A_VELVET_PILLOW.")
5AA5: 18 15     ;        MoveObjectToCurrentRoom(obj_POTTERY)
5AA7: 04 3D 7C  ;        Print(PS_B1:"THE_VASE_DROPS_WITH_A_DELICATE_CRASH.")
5AAA: 17        ;    DropUserInputObject
5AAB: 26 0E     ; THROW
5AAD: 07 0B     ;    StopIfPassElseContinue
5AAF: 11 21     ;        AssertObjectMatchesUserInput(obj_VASE_solo)
5AB1: 15 21 00  ;        MoveObjectToRoom(obj_VASE_solo, room_0)
5AB4: 18 15     ;        MoveObjectToCurrentRoom(obj_POTTERY)
5AB6: 04 75 7C  ;        Print(PS_B3:"YOU_HAVE_TAKEN_THE_VASE_AND_HURLED_IT_DELICATELY_TO_THE_GROUND.")
5AB9: 17        ;    DropUserInputObject
5ABA: 29 36     ; OPEN
5ABC: 07 1C     ;    StopIfPassElseContinue
5ABE: 11 17     ;        AssertObjectMatchesUserInput(obj_SARCOPH_full)
5AC0: 07 06     ;        StopIfPassElseContinue
5AC2: 02 17     ;            AssertObjectIsInPack(obj_SARCOPH_full)
5AC4: 04 01 77  ;            Print(PS_94:"I'D_ADVISE_YOU_TO_PUT_DOWN_THE_SARCOPHAGUS_BEFORE_OPENING_IT!!")
5AC7: 07 0E     ;        StopIfPassElseContinue
5AC9: 02 22     ;            AssertObjectIsInPack(obj_KEY)
5ACB: 04 BE 76  ;            Print(PS_93:"A_GLISTENING_PEARL_FALLS_OUT_OF_THE_SARCOPHAGUS_AND_ROLLS_AWAY._
;                                         THE_SARCOPHAGUS_SNAPS_SHUT_AGAIN.")
5ACE: 15 16 40  ;            MoveObjectToRoom(obj_PEARL, room_64)
5AD1: 15 17 00  ;            MoveObjectToRoom(obj_SARCOPH_full, room_0)
5AD4: 18 18     ;            MoveObjectToCurrentRoom(obj_SARCOPH_empty)
5AD6: 04 6B 77  ;        Print(PS_96:"YOU_DON'T_HAVE_ANYTHING_STRONG_ENOUGH_TO_OPEN_THE_SARCOPHAGUS.")
5AD9: 07 14     ;    StopIfPassElseContinue
5ADB: 11 18     ;        AssertObjectMatchesUserInput(obj_SARCOPH_empty)
5ADD: 07 06     ;        StopIfPassElseContinue
5ADF: 02 18     ;            AssertObjectIsInPack(obj_SARCOPH_empty)
5AE1: 04 01 77  ;            Print(PS_94:"I'D_ADVISE_YOU_TO_PUT_DOWN_THE_SARCOPHAGUS_BEFORE_OPENING_IT!!")
5AE4: 07 06     ;        StopIfPassElseContinue
5AE6: 02 22     ;            AssertObjectIsInPack(obj_KEY)
5AE8: 04 2D 77  ;            Print(PS_95:"THE_SARCOPHAGUS_CREAKS_OPEN,_REVEALING_NOTHING_INSIDE.__IT______
;                                         PROMPTLY_SNAPS_SHUT_AGAIN.")
5AEB: 04 6B 77  ;        Print(PS_96:"YOU_DON'T_HAVE_ANYTHING_STRONG_ENOUGH_TO_OPEN_THE_SARCOPHAGUS.")
5AEE: 04 97 77  ;    Print(PS_97:"I_DON'T_KNOW_HOW_TO_LOCK_OR_UNLOCK_SUCH_A_THING.")
5AF1: 23 04     ; WAVE
5AF3: 04 56 74  ;    Print(PS_7D:"NOTHING_HAPPENS.")
5AF6: 24 0E     ; POUR
5AF8: 07 09     ;    StopIfPassElseContinue
5AFA: 11 1C     ;        AssertObjectMatchesUserInput(obj_WATER)
5AFC: 15 1C 00  ;        MoveObjectToRoom(obj_WATER, room_0)
5AFF: 04 E9 75  ;        Print(PS_8C:"YOUR_BOTTLE_IS_EMPTY_AND_THE_GROUND_IS_WET.")
5B02: 04 08 76  ;    Print(PS_8D:"YOU_CAN'T_POUR_THAT.")
5B05: 25 12     ; RUB
5B07: 07 06     ;    StopIfPassElseContinue
5B09: 11 0E     ;        AssertObjectMatchesUserInput(obj_LAMP_off)
5B0B: 04 18 76  ;        Print(PS_8E:"RUBBING_THE_ELECTRIC_LAMP_IS_NOT_PARTICULARLY_REWARDING.________
;                                     ANYWAY,_NOTHING_EXCITING_HAPPENS.")
5B0E: 07 06     ;    StopIfPassElseContinue
5B10: 11 0F     ;        AssertObjectMatchesUserInput(obj_LAMP_on)
5B12: 04 18 76  ;        Print(PS_8E:"RUBBING_THE_ELECTRIC_LAMP_IS_NOT_PARTICULARLY_REWARDING.________
;                                     ANYWAY,_NOTHING_EXCITING_HAPPENS.")
5B15: 04 5B 76  ;    Print(PS_8F:"PECULIAR.__NOTHING_UNEXPECTED_HAPPENS.")
5B18: 27 12     ; FILL
5B1A: 07 06     ;    StopIfPassElseContinue
5B1C: 11 1B     ;        AssertObjectMatchesUserInput(obj_BOTTLE)
5B1E: 04 77 76  ;        Print(PS_90:"THERE_IS_NOTHING_HERE_WITH_WHICH_TO_FILL_THE_BOTTLE.")
5B21: 07 06     ;    StopIfPassElseContinue
5B23: 11 21     ;        AssertObjectMatchesUserInput(obj_VASE_solo)
5B25: 04 D9 75  ;        Print(PS_8B:"DON'T_BE_RIDICULOUS!")
5B28: 04 AE 76  ;    Print(PS_92:"YOU_CAN'T_FILL_THAT.")
5B2B: 2C 2D     ; ATTACK
5B2D: 07 09     ;    StopIfPassElseContinue
5B2F: 11 13     ;        AssertObjectMatchesUserInput(obj_BIRD)
5B31: 15 13 00  ;        MoveObjectToRoom(obj_BIRD, room_0)
5B34: 04 B9 77  ;        Print(PS_98:"THE_BIRD_STATUE_IS_NOW_DEAD.__ITS_BODY_DISAPPEARS.")
5B37: 07 09     ;    StopIfPassElseContinue
5B39: 11 14     ;        AssertObjectMatchesUserInput(obj_BIRD_boxed)
5B3B: 15 14 00  ;        MoveObjectToRoom(obj_BIRD_boxed, room_0)
5B3E: 04 B9 77  ;        Print(PS_98:"THE_BIRD_STATUE_IS_NOW_DEAD.__ITS_BODY_DISAPPEARS.")
5B41: 07 06     ;    StopIfPassElseContinue
5B43: 11 17     ;        AssertObjectMatchesUserInput(obj_SARCOPH_full)
5B45: 04 DD 77  ;        Print(PS_99:"THE_STONE_IS_VERY_STRONG_AND_IS_IMPERVIOUS_TO_ATTACK.")
5B48: 07 06     ;    StopIfPassElseContinue
5B4A: 11 18     ;        AssertObjectMatchesUserInput(obj_SARCOPH_empty)
5B4C: 04 DD 77  ;        Print(PS_99:"THE_STONE_IS_VERY_STRONG_AND_IS_IMPERVIOUS_TO_ATTACK.")
5B4F: 07 06     ;    StopIfPassElseContinue
5B51: 11 0B     ;        AssertObjectMatchesUserInput(obj_SERPENT)
5B53: 04 03 78  ;        Print(PS_9A:"ATTACKING_THE_SERPENT_BOTH_DOESN'T_WORK_AND_IS_VERY_DANGEROUS.")
5B56: 04 2F 78  ;    Print(PS_9B:"YOU_CAN'T_BE_SERIOUS!")
5B59: 30 04     ; BREAK
5B5B: 04 3F 78  ;    Print(PS_9C:"IT_IS_BEYOND_YOUR_POWER_TO_DO_THAT.")
5B5E: 2E 23     ; EAT
5B60: 07 09     ;    StopIfPassElseContinue
5B62: 11 1A     ;        AssertObjectMatchesUserInput(obj_FOOD)
5B64: 15 1A 00  ;        MoveObjectToRoom(obj_FOOD, room_0)
5B67: 04 59 78  ;        Print(PS_9D:"THANK_YOU,_IT_WAS_DELICIOUS!")
5B6A: 07 06     ;    StopIfPassElseContinue
5B6C: 11 0A     ;        AssertObjectMatchesUserInput(obj_UNUSED_10)
5B6E: 04 6E 78  ;        Print(PS_9E:"I_THINK_I_JUST_LOST_MY_APPETITE.")
5B71: 07 06     ;    StopIfPassElseContinue
5B73: 11 13     ;        AssertObjectMatchesUserInput(obj_BIRD)
5B75: 04 6E 78  ;        Print(PS_9E:"I_THINK_I_JUST_LOST_MY_APPETITE.")
5B78: 07 06     ;    StopIfPassElseContinue
5B7A: 11 14     ;        AssertObjectMatchesUserInput(obj_BIRD_boxed)
5B7C: 04 6E 78  ;        Print(PS_9E:"I_THINK_I_JUST_LOST_MY_APPETITE.")
5B7F: 04 D9 75  ;    Print(PS_8B:"DON'T_BE_RIDICULOUS!")
5B82: 2F 15     ; DRINK
5B84: 07 09     ;    StopIfPassElseContinue
5B86: 11 1C     ;        AssertObjectMatchesUserInput(obj_WATER)
5B88: 15 1C 00  ;        MoveObjectToRoom(obj_WATER, room_0)
5B8B: 04 9C 76  ;        Print(PS_91:"THE_BOTTLE_IS_NOW_EMPTY.")
5B8E: 07 06     ;    StopIfPassElseContinue
5B90: 11 1E     ;        AssertObjectMatchesUserInput(obj_STREAM_56)
5B92: 04 86 78  ;        Print(PS_9F:"YOU_HAVE_TAKEN_A_DRINK_FROM_THE_STREAM.__THE_WATER_TASTES_______
;                                     STRONGLY_OF_MINERALS,_BUT_IS_NOT_UNPLEASANT.__IT_IS_EXTREMELY___
;                                     COLD.")
5B95: 04 2F 78  ;    Print(PS_9B:"YOU_CAN'T_BE_SERIOUS!")
5B98: 2D 38     ; FEED
5B9A: 07 06     ;    StopIfPassElseContinue
5B9C: 11 13     ;        AssertObjectMatchesUserInput(obj_BIRD)
5B9E: 04 E1 78  ;        Print(PS_A0:"IT'S_NOT_HUNGRY.__BESIDES,_YOU_HAVE_NO_BIRD_SEED.")
5BA1: 07 06     ;    StopIfPassElseContinue
5BA3: 11 14     ;        AssertObjectMatchesUserInput(obj_BIRD_boxed)
5BA5: 04 E1 78  ;        Print(PS_A0:"IT'S_NOT_HUNGRY.__BESIDES,_YOU_HAVE_NO_BIRD_SEED.")
5BA8: 07 10     ;    StopIfPassElseContinue
5BAA: 11 0B     ;        AssertObjectMatchesUserInput(obj_SERPENT)
5BAC: 07 09     ;        StopIfPassElseContinue
5BAE: 02 14     ;            AssertObjectIsInPack(obj_BIRD_boxed)
5BB0: 15 14 00  ;            MoveObjectToRoom(obj_BIRD_boxed, room_0)
5BB3: 04 2B 79  ;            Print(PS_A2:"THE_SERPENT_HAS_NOW_DEVOURED_YOUR_BIRD_STATUE.")
5BB6: 04 4C 79  ;        Print(PS_A3:"THERE_IS_NOTHING_HERE_IT_WANTS_TO_EAT_-_EXCEPT_PERHAPS_YOU.")
5BB9: 07 06     ;    StopIfPassElseContinue
5BBB: 11 17     ;        AssertObjectMatchesUserInput(obj_SARCOPH_full)
5BBD: 04 A7 79  ;        Print(PS_A5:"I'M_GAME.__WOULD_YOU_CARE_TO_EXPLAIN_HOW?")
5BC0: 07 06     ;    StopIfPassElseContinue
5BC2: 11 18     ;        AssertObjectMatchesUserInput(obj_SARCOPH_empty)
5BC4: 04 A7 79  ;        Print(PS_A5:"I'M_GAME.__WOULD_YOU_CARE_TO_EXPLAIN_HOW?")
5BC7: 07 06     ;    StopIfPassElseContinue
5BC9: 11 0D     ;        AssertObjectMatchesUserInput(obj_UNUSED_13)
5BCB: 04 4C 79  ;        Print(PS_A3:"THERE_IS_NOTHING_HERE_IT_WANTS_TO_EAT_-_EXCEPT_PERHAPS_YOU.")
5BCE: 04 D9 75  ;    Print(PS_8B:"DON'T_BE_RIDICULOUS!")
5BD1: 39 02     ; PLUGH
5BD3: 1D        ;    RandomizeDirections
5BD4: 3A 02     ; LOAD
5BD6: 1B        ;    LoadGame
5BD7: 3B 02     ; SAVE
5BD9: 1C        ;    SaveGame
5BDA: 00

Room descriptions (packed)

; adventure.dat ??
; YOU_ARE_STANDING_BEFORE_THE_ENTRANCE_OF_A_PYRAMID.__AROUND_YOU__
; IS_A_DESERT.
PS_00: ; room_1
5BDB: 19 C7 DE 94 14 55 5E 50 BD 90 5A C4 6A 59 60 5B
5BEB: B1 5F BE 30 15 EB BF 17 98 B8 16 7B 14 14 A8 6B
5BFB: 48 9B 5D 94 14 30 A1 1B 58 1B A1 D5 15 7B 14 F5
5C0B: 59 3E 62 2E 00

; adventure.dat ??
; YOU_ARE_IN_THE_ENTRANCE_TO_THE_PYRAMID.__A_HOLE_IN_THE_FLOOR____
; LEADS_TO_A_PASSAGE_BENEATH_THE_SURFACE.
PS_01: ; room_2
5C10: 22 C7 DE 94 14 4B 5E 96 96 DB 72 9E 61 D0 B0 9B
5C20: 53 6B BF 5F BE F3 16 CF B0 17 79 43 13 A9 15 DB
5C30: 8B 83 7A 5F BE 56 15 44 A0 3B 13 3F 16 0D 47 89
5C40: 17 7B 14 55 A4 09 B7 44 5E 8F 61 82 49 82 17 55
5C50: 5E 30 C6 D7 46 2E 00

; adventure.dat ??
; YOU_ARE_IN_THE_DESERT.
PS_02: ; room_3, room_4, room_5, room_6
5C57: 07 C7 DE 94 14 4B 5E 96 96 DB 72 F5 59 3E 62 2E
5C67: 00

; 9	 YOU ARE IN A SMALL CHAMBER BENEATH A 3X3 STEEL GRATE TO THE
; 9	 SURFACE. A LOW CRAWL OVER COBBLES LEADS INWARD TO THE WEST.
; woods9
;
; YOU_ARE_IN_A_SMALL_CHAMBER_BENEATH_A_HOLE_FROM_THE_SURFACE.__A__
; LOW_CRAWL_LEADS_INWARD_TO_THE_WEST.__HIEROGLYPHICS_ON_THE_WALL__
; TRANSLATE,_"CURSE_ALL_WHO_ENTER_THIS_SACRED_CRYPT."
PS_03: ; room_7
5C68: 3B C7 DE 94 14 4B 5E 83 96 5F 17 46 48 DA 14 64
5C78: 48 23 62 70 4D 96 5F 03 71 A9 15 DB 8B 79 68 56
5C88: 90 DB 72 34 BA C5 65 DB 63 7B 14 49 16 C5 CE D9
5C98: B0 0E 8A 86 5F CB B5 33 9B 33 B1 6B BF 5F BE F7
5CA8: 17 17 BA 4A 13 34 79 FE 9E E2 DE E5 78 C0 16 82
5CB8: 17 59 5E 46 48 56 13 D0 B0 BB B8 FE BD 6D 13 3D
5CC8: C6 43 5E F3 8C 29 D1 30 15 F4 BD 82 17 4B 7B 05
5CD8: B7 66 B1 E4 14 EE DE 2E 22 00

; 10	 YOU ARE CRAWLING OVER COBBLES IN A LOW PASSAGE. THERE IS A
; 10	 DIM LIGHT AT THE EAST END OF THE PASSAGE.
; woods10
;
; YOU_ARE_CRAWLING_OVER_PEBBLES_IN_A_LOW_PASSAGE.__THERE_IS_A_DIM_
; LIGHT_AT_THE_EAST_END_OF_THE_PASSAGE.
PS_04: ; room_8
5CE2: 21 C7 DE 94 14 45 5E D9 B0 90 8C D1 6A 74 CA DF
5CF2: 16 F6 4C 4B 62 83 7A 4E 45 6B A1 55 A4 09 B7 DB
5D02: 63 82 17 2F 62 D5 15 7B 14 8F 5A 43 16 2E 6D 96
5D12: 14 82 17 47 5E 66 49 30 15 11 58 96 64 DB 72 55
5D22: A4 09 B7 45 2E 00

; 11	 YOU ARE IN A DEBRIS ROOM, FILLED WITH STUFF WASHED IN FROM
; 11	 THE SURFACE. A LOW WIDE PASSAGE WITH COBBLES BECOMES
; 11	 PLUGGED WITH MUD AND DEBRIS HERE,BUT AN AWKWARD CANYON
; 11	 LEADS UPWARD AND WEST.
; 11	 A NOTE ON THE WALL SAYS 'MAGIC WORD XYZZY'.
; woods11
;
; YOU_ARE_IN_A_ROOM_FILLED_WITH_BROKEN_POTTERY_SHARDS_OF_ANCIENT__
; EGYPTIAN_CRAFTS.__AN_AWKWARD_CORRIDOR_LEADS_UPWARD_AND_WEST.
PS_05: ; room_9
5D28: 29 C7 DE 94 14 4B 5E 83 96 39 17 DB 9F 0E 67 E6
5D38: 8B FB 17 53 BE 79 4F B0 85 E9 16 3F C0 7B B4 1B
5D48: B8 4D B1 B8 16 90 14 47 54 B3 9A 29 15 EE DE 90
5D58: 78 E4 14 5E 47 5B BB 90 14 99 14 73 88 33 B1 44
5D68: 55 06 B2 A3 A0 E3 8B 0B 5C F1 C5 2E 49 90 14 19
5D78: 58 66 62 2E 00

; 12	 YOU ARE IN AN AWKWARD SLOPING EAST/WEST CANYON.
; woods12
;
; YOU_ARE_IN_AN_AWKWARD_SLOPING_EAST/WEST_CORRIDOR.
PS_06: ; room_10
5D7D: 10 C7 DE 94 14 4B 5E 83 96 83 96 A9 D1 2E 49 5E
5D8D: 17 63 A0 AB 98 95 5F E1 BC 66 62 E1 14 73 B3 84
5D9D: 5B 2E 00

; 13	 YOU ARE IN A SPLENDID CHAMBER THIRTY FEET HIGH. THE WALLS
; 13	 ARE FROZEN RIVERS OF ORANGE STONE. AN AWKWARD CANYON AND A
; 13	 GOOD PASSAGE EXIT FROM EAST AND WEST SIDES OF THE CHAMBER.
; woods13
;
; YOU_ARE_IN_A_SPLENDID_CHAMBER_THIRTY_FEET_HIGH.__THE_WALLS_ARE__
; FROZEN_RIVERS_OF_ORANGE_STONE.__AN_AWKWARD_CORRIDOR_AND_A_GOOD__
; PASSAGE_EXIT_FROM_THE_EAST_AND_WEST_SIDES_OF_THE_CHAMBER.
PS_07: ; room_11
5DA0: 3D C7 DE 94 14 4B 5E 83 96 62 17 F0 8B 86 5A DA
5DB0: 14 64 48 23 62 63 BE D3 B3 4F 15 73 62 89 73 9B
5DC0: 76 82 17 59 5E 46 48 C3 B5 5B B1 5C 15 EF A1 94
5DD0: 96 CF 7B 8B B3 C3 9E AB A0 B7 98 66 17 0F A0 3B
5DE0: F4 83 48 FD 49 14 D0 05 58 BC A0 09 79 83 AF 33
5DF0: 98 49 45 36 A0 52 13 65 49 77 47 3A 15 73 7B 79
5E00: 68 56 90 DB 72 95 5F 03 BC 33 98 B5 D0 15 BC FF
5E10: 78 D1 B5 96 64 DB 72 1B 54 AF 91 52 2E 00

; 14	 AT YOUR FEET IS A SMALL PIT BREATHING TRACES OF WHITE MIST. AN
; 14	 EAST PASSAGE ENDS HERE EXCEPT FOR A SMALL CRACK LEADING ON.
; woods14
;
; AT_YOUR_FEET_IS_A_SMALL_PIT_BREATHING_TRACES_OF_WHITE_MIST.__AN_
; EAST_PASSAGE_ENDS_HERE_EXCEPT_FOR_A_SMALL_CRACK_LEADING_ON._____
; ROUGH_STONE_STEPS_LEAD_DOWN_THE_PIT.
PS_08: ; room_12
5E1E: 36 73 49 C7 DE 88 AF 36 60 D5 15 7B 14 E3 B8 F3
5E2E: 8C 96 A5 BC 14 96 5F 90 73 D6 6A C5 B0 4B 62 C3
5E3E: 9E 23 D1 DB BD D5 92 9B C1 90 14 23 15 F3 B9 55
5E4E: A4 09 B7 47 5E 4D 98 9F 15 5B B1 1D 63 EE 61 59
5E5E: 15 83 AF 5F 17 46 48 E4 14 DD 46 3F 16 03 47 AB
5E6E: 98 27 A0 3B 13 54 13 29 A1 15 71 80 BF 55 5E F2
5E7E: BD CE B5 86 5F 09 15 03 D2 5F BE E3 16 54 2E 00

; 15	 YOU ARE AT ONE END OF A VAST HALL STRETCHING FORWARD OUT OF
; 15	 SIGHT TO THE WEST. THERE ARE OPENINGS TO EITHER SIDE. NEARBY, A WIDE
; 15	 STONE STAIRCASE LEADS DOWNWARD. THE HALL IS FILLED WITH
; 15	 WISPS OF WHITE MIST SWAYING TO AND FRO ALMOST AS IF ALIVE.
; 15	 A COLD WIND BLOWS UP THE STAIRCASE. THERE IS A PASSAGE
; 15	 AT THE TOP OF A DOME BEHIND YOU.
; woods15
;
; YOU_ARE_AT_ONE_END_OF_A_VAST_HALL_STRETCHING_FORWARD_OUT_OF_____
; SIGHT_TO_THE_WEST.__THERE_ARE_OPENINGS_TO_EITHER_SIDE.__NEARBY,_
; A_WIDE_STONE_STAIRCASE_LEADS_DOWNWARD.__THE_HALL_IS_VERY_MUSTY__
; AND_A_COLD_WIND_BLOWS_UP_THE_STAIRCASE.__THERE_IS_A_PASSAGE_AT__
; THE_TOP_OF_A_DOME_BEHIND_YOU.__ROUGH_STONE_STEPS_LEAD_UP_THE____
; DOME.
PS_09: ; room_13
5E8E: 6C C7 DE 94 14 43 5E 11 BC 5B 98 8E 61 B8 16 7B
5E9E: 14 D5 C9 0A BC 46 48 66 17 76 B1 23 54 AB 98 04
5EAE: 68 14 D0 11 58 73 C6 C3 9E 3B 13 5B 17 2E 6D 89
5EBE: 17 82 17 59 5E 66 62 3B F4 5F BE 5B B1 2F 49 C2
5ECE: 16 93 61 C5 98 89 17 2B 15 5F BE 95 AF FF 78 3B
5EDE: F4 63 98 03 B1 03 EE FB 17 DB 59 09 BA 5B 98 FB
5EEE: B9 2D 7B 57 49 3F 16 0D 47 09 15 21 D2 2E 49 3B
5EFE: F4 5F BE 9B 15 F3 8C 4B 7B 74 CA 4F DB 66 C6 3B
5F0E: DB 8E 48 7B 14 3E 55 19 58 8E 7A B6 14 85 A1 B2
5F1E: 17 82 17 55 5E 4B BD 13 B1 BF B7 56 13 F4 72 4B
5F2E: 5E C3 B5 DB 16 D3 B9 9B 6C 73 49 82 17 56 5E 53
5F3E: A0 C3 9E 46 45 E7 9F AF 14 90 73 1B 58 3F A1 54
5F4E: 13 29 A1 15 71 80 BF 55 5E F2 BD CE B5 86 5F B2
5F5E: 17 82 17 3B 5E 46 13 E7 9F 2E 00

; 18	 THIS IS A LOW ROOM WITH A CRUDE NOTE ON THE WALL.
; 18	 IT SAYS 'YOU WON'T GET IT UP THE STEPS'.
; woods18
;
; THIS_IS_A_LOW_ROOM_WITH_A_HIEROGLYPH_ON_THE_WALL.__IT_TRANSLATES
; "YOU_WON'T_GET_IT_UP_THE_STEPS".
PS_0A: ; room_14
5F69: 20 63 BE CB B5 C3 B5 49 16 D4 CE 3F A0 FB 17 53
5F79: BE 4A 45 34 79 FE 9E E2 DE C0 16 82 17 59 5E 46
5F89: 48 3B F4 73 7B EB BF 9E 9A 7F 49 03 B6 1B A1 40
5F99: D2 F3 23 B6 6C D6 15 B2 17 82 17 55 5E F2 BD 07
5FA9: B6 00

; 17	 YOU ARE ON THE EAST BANK OF A FISSURE SLICING CLEAR ACROSS
; 17	 THE HALL. THE MIST IS QUITE THICK HERE, AND THE FISSURE IS
; 17	 TOO WIDE TO JUMP.
; woods17
;
; YOU_ARE_ON_THE_EAST_BANK_OF_A_BOTTOMLESS_PIT_STRETCHING_ACROSS__
; THE_HALL.__THE_MIST_IS_QUITE_THICK_HERE,_AND_THE_PIT_IS_TOO_WIDE
; TO_JUMP.
PS_0B: ; room_15
5FAB: 2D C7 DE 94 14 51 5E 96 96 DB 72 95 5F 04 BC 95
5FBB: 48 B8 16 7B 14 06 4F 7F BF F5 8B D2 B5 73 7B 0C
5FCB: BA 7D 62 90 73 C3 6A B9 55 CB B9 82 17 4A 5E 46
5FDB: 48 3B F4 5F BE 6B 16 F3 B9 4B 7B AB AD DB BD 63
5FEB: BE 8B 54 F4 72 B3 63 8E 48 82 17 52 5E 73 7B 4B
5FFB: 7B 81 BF FB 17 F6 59 CC 9C 72 C5 2E 00

; 19	 YOU ARE IN THE HALL OF THE MOUNTAIN KING, WITH PASSAGES
; 19	 OFF IN ALL DIRECTIONS.
; woods19
;
; YOU_ARE_IN_THE_PHARAOH'S_CHAMBER,_WITH_PASSAGES_OFF_IN_ALL______
; DIRECTIONS.
PS_0C: ; room_16
6008: 19 C7 DE 94 14 4B 5E 96 96 DB 72 5B A5 D1 B0 65
6018: 71 DA 14 64 48 46 62 FB 17 53 BE 55 A4 09 B7 4B
6028: 62 D0 9E D0 15 8E 14 FB 89 3B 13 03 15 65 B1 91
6038: BE AF 9A 00

; 29	 YOU ARE IN THE SOUTH SIDE CHAMBER.
; woods29
;
; YOU_ARE_IN_THE_SOUTH_SIDE_CHAMBER.
PS_0D: ; room_17
603C: 0B C7 DE 94 14 4B 5E 96 96 DB 72 47 B9 53 BE 46
604C: B8 45 5E 4F 72 74 4D 2E 00

; 27	 YOU ARE ON THE WEST SIDE OF THE FISSURE IN THE HALL OF MISTS.
; woods27
;
; YOU_ARE_ON_THE_WEST_SIDE_OF_THE_BOTTOMLESS_PIT_IN_THE_HALL_OF___
; GODS.
PS_0E: ; room_18
6055: 17 C7 DE 94 14 51 5E 96 96 DB 72 B5 D0 15 BC FF
6065: 78 B8 16 82 17 44 5E 0E A1 EE 9F 65 62 E3 16 0B
6075: BC 96 96 DB 72 4E 72 11 8A 7B 64 81 15 2F 5C 00

; 41	 YOU ARE AT THE WEST END OF HALL OF MISTS. A LOW WIDE CRAWL
; 41	 CONTINUES WEST AND ANOTHER GOES NORTH. TO THE SOUTH IS A
; 41	 LITTLE PASSAGE 6 FEET OFF THE FLOOR.
;
; YOU_ARE_AT_THE_WEST_END_OF_THE_HALL_OF_GODS.___A_LOW_WIDE_PASS__
; CONTINUES_WEST_AND_ANOTHER_GOES_NORTH.__TO_THE_SOUTH_IS_A_LITTLE
; PASSAGE_SIX_FEET_OFF_THE_FLOOR.
PS_0F: ; room_19
6085: 35 C7 DE 94 14 43 5E 16 BC DB 72 B5 D0 07 BC 33
6095: 98 C3 9E 5F BE 9B 15 F3 8C C3 9E 36 6E 5B BB 43
60A5: 13 49 16 D9 CE FF 78 DB 16 CB B9 E1 14 C3 9A E7
60B5: 9A D9 B5 66 62 90 14 03 58 06 9A F4 72 81 15 4B
60C5: 62 04 9A 77 BE 56 13 D6 9C DB 72 47 B9 53 BE 4B
60D5: 7B 4E 45 8E 7B F2 8B 65 49 77 47 5B 17 08 D5 36
60E5: 60 B8 16 96 64 DB 72 89 67 C7 A0 00

; 60	 YOU ARE AT THE EAST END OF A VERY LONG HALL APPARENTLY
; 60	 WITHOUT SIDE CHAMBERS. TO THE EAST A LOW WIDE CRAWL SLANTS
; 60	 UP. TO THE NORTH A ROUND TWO FOOT HOLE SLANTS DOWN.
;
; YOU_ARE_AT_EAST_END_OF_A_VERY_LONG_HALL_APPARENTLY_WITHOUT_SIDE_
; CHAMBERS.__TO_THE_EAST_A_LOW_WIDE_CRAWL_SLANTS_UP.__TO_THE_NORTH
; A_ROUND_TWO_FOOT_HOLE_SLANTS_DOWN.
PS_10: ; room_20
60F1: 36 C7 DE 94 14 43 5E 07 BC 66 49 30 15 11 58 83
6101: 64 CF 17 7B B4 80 8D CA 6A 46 48 92 14 54 A4 9E
6111: 61 FB 8E 56 D1 87 74 15 BC FF 78 DA 14 64 48 3D
6121: 62 3B F4 6B BF 5F BE 23 15 F3 B9 4E 45 6B A1 46
6131: D1 45 5E D9 B0 15 8A 50 8B 0B C0 F7 C5 56 13 D6
6141: 9C DB 72 04 9A 5B BE 39 17 8E C5 91 17 C8 9C 46
6151: A0 A9 15 DB 8B BB B8 CD 9A 09 15 27 D2 00

; 61	 YOU ARE AT THE WEST END OF A VERY LONG FEATURELESS HALL.
;
; YOU_ARE_AT_THE_WEST_END_OF_A_VERY_LONG_FEATURELESS_HALL.__THE___
; HALL_JOINS_UP_WITH_A_NARROW_NORTH/SOUTH_PASSAGE.
PS_11: ; room_21
615F: 25 C7 DE 94 14 43 5E 16 BC DB 72 B5 D0 07 BC 33
616F: 98 C3 9E 58 45 43 62 49 16 AB 98 63 66 74 C0 3F
617F: 61 CB B9 4E 72 9B 8F 82 17 3B 5E 9B 15 F3 8C FB
618F: 80 8B 9A D3 C5 56 D1 03 71 8B 16 79 B3 D0 CE BE
619F: A0 DD 71 36 A1 12 71 65 49 77 47 2E 00

; 62	 YOU ARE AT A CROSSOVER OF A HIGH N/S PASSAGE AND A LOW E/W ONE.
;
; YOU_ARE_AT_A_CROSSOVER_OF_A_HIGH_N/S_PASSAGE_AND_A_LOW_E/W_ONE.
PS_12: ; room_22
61AC: 15 C7 DE 94 14 43 5E 03 BC E4 14 E5 A0 4F A1 91
61BC: AF 83 64 A3 15 13 6D 5D 97 DB 16 D3 B9 9B 6C 8E
61CC: 48 7B 14 89 8D 20 15 D1 CE 7F 98 00

; 63	 DEAD END
;
; DEAD_END.
PS_13: ; room_23, room_42, room_43, room_44, room_45, room_46, room_47, room_48, room_49, room_50, room_51, room_53
61D8: 03 E3 59 07 58 57 98 00

; 30	 YOU ARE IN THE WEST SIDE CHAMBER OF HALL OF MT KING.
; 30	 A PASSAGE CONTINUES WEST AND UP HERE.
; woods31
;
; YOU_ARE_IN_THE_WEST_THRONE_CHAMBER.__A_PASSAGE_CONTINUES_WEST___
; AND_UP_FROM_HERE.
PS_14: ; room_24
61E0: 1B C7 DE 94 14 4B 5E 96 96 DB 72 B5 D0 16 BC F9
61F0: 74 5B 98 1B 54 AF 91 1B B5 7B 14 55 A4 09 B7 45
6200: 5E 1E A0 9F 7A 4B 62 B5 D0 FB BB 90 14 17 58 08
6210: A3 FF B2 9F 15 7F B1 00

; 28	 YOU ARE IN A LOW N/S PASSAGE AT A HOLE IN THE FLOOR.
; 28	 THE HOLE GOES DOWN TO AN E/W PASSAGE.
; woods28
;
; YOU_ARE_IN_A_LOW_N/S_PASSAGE_AT_A_HOLE_IN_THE_FLOOR.__THE_HOLE__
; GOES_DOWN_TO_AN_E/W_PASSAGE.
PS_15: ; room_25
6218: 1E C7 DE 94 14 4B 5E 83 96 49 16 D0 CE 8B 36 55
6228: A4 09 B7 43 5E 03 BC A9 15 DB 8B 83 7A 5F BE 56
6238: 15 44 A0 3B F4 5F BE A9 15 DB 8B 81 15 4B 62 89
6248: 5B 96 96 C3 9C 87 96 2B 37 55 A4 09 B7 45 2E 00

; 33	 YOU ARE IN A LARGE ROOM, WITH A PASSAGE TO THE SOUTH,
; 33	 A PASSAGE TO THE WEST, AND A WALL OF BROKEN ROCK TO
; 33	 THE EAST. THERE IS A LARGE 'Y2' ON A ROCK IN ROOMS CENTER.
; woods33
;
; YOU_ARE_IN_A_LARGE_ROOM,_WITH_A_PASSAGE_TO_THE_SOUTH,_AND_A_WALL
; OF_BROKEN_ROCK_TO_THE_EAST.__THERE_IS_A_PANEL_ON_THE_NORTH_WALL.
PS_16: ; room_26
6258: 2A C7 DE 94 14 4B 5E 83 96 3B 16 B7 B1 39 17 FE
6268: 9F FB 17 53 BE 52 45 65 49 77 47 89 17 82 17 55
6278: 5E 36 A1 73 76 8E 48 7B 14 0E D0 78 8D BC 14 97
6288: 9F 94 96 5D 9E 89 17 82 17 47 5E 66 49 3B F4 5F
6298: BE 5B B1 4B 7B 52 45 8F 48 11 8A 96 96 DB 72 04
62A8: 9A 53 BE 0E D0 4C 2E 00

; adventure.dat ??
; YOU_ARE_IN_THE_CHAMBER_OF_ANUBIS.
PS_17: ; room_27
62B0: 0B C7 DE 94 14 4B 5E 96 96 DB 72 1B 54 AF 91 91
62C0: AF 83 64 E4 9A 6F 7B 00

; YOU_ARE_IN_A_MAZE_OF_TWISTY_PASSAGES,_ALL_ALIKE.
PS_18: ; room_28, room_29, room_30, room_31, room_32, room_33, room_34, room_35, room_36, room_37, room_38, room_39, room_40, room_41
62C8: 10 C7 DE 94 14 4B 5E 83 96 63 16 5B E3 C3 9E BB
62D8: C0 13 BA DB 16 D3 B9 B5 6C 03 EE F3 8C 43 48 BF
62E8: 85 00

; YOU_ARE_ON_THE_BRINK_OF_A_LARGE_PIT.__YOU_COULD_CLIMB_DOWN,_BUT_
; YOU_WOULD_NOT_BE_ABLE_TO_CLIMB_BACK_UP.__THE_MAZE_CONTINUES_ON__
; THIS_LEVEL.
PS_19: ; room_52
62EA: 2E C7 DE 94 14 51 5E 96 96 DB 72 73 4F 4B 99 C3
62FA: 9E 4E 45 31 49 52 5E 97 7B 5B 13 1B A1 47 55 B3
630A: 8B C3 54 A3 91 89 5B F3 9B F6 4F 51 18 59 C2 2E
631A: A1 10 58 F3 A0 5B 4D B6 46 56 5E C5 9C 8F 8C 84
632A: 4B DD 46 B2 17 3B F4 5F BE 63 16 5B E3 40 55 90
633A: BE 35 C4 C0 16 56 13 95 73 3F 16 6E CA 2E 00

; 36	 YOU ARE IN A DIRTY BROKEN PASSAGE. TO THE EAST IS A CRAWL.
; 36	 TO THE WEST IS A LARGE PASSAGE. ABOVE YOU IS A HOLE TO
; 36	 ANOTHER PASSAGE.
; woods36
;
; YOU_ARE_IN_A_DIRTY_BROKEN_PASSAGE.__TO_THE_EAST_IS_A_CRAWL.__TO_
; THE_WEST_IS_A_LARGE_PASSAGE.__ABOVE_YOU_IS_A_HOLE_TO_ANOTHER____
; PASSAGE.
PS_1A: ; room_54
6349: 2D C7 DE 94 14 4B 5E 83 96 03 15 D3 B3 BC 14 97
6359: 9F 92 96 65 49 77 47 3B F4 6B BF 5F BE 23 15 F3
6369: B9 4B 7B 45 45 D9 B0 9B 8F 89 17 82 17 59 5E 66
6379: 62 D5 15 7B 14 54 8B 9B 6C 55 A4 09 B7 DB 63 84
6389: 14 4F A1 51 18 4B C2 C3 B5 A9 15 DB 8B 6B BF 99
6399: 48 5F BE 7B AF 52 13 65 49 77 47 2E 00

; 37	 YOU ARE ON THE BRINK OF A SMALL CLEAN CLIMBABLE PIT.
; 37	 A CRAWL LEADS WEST.
;
; YOU_ARE_ON_THE_BRINK_OF_A_SMALL_CLEAN_CLIMBABLE_PIT.__A_CRAWL___
; LEADS_WEST.
PS_1B: ; room_55
63A6: 19 C7 DE 94 14 51 5E 96 96 DB 72 73 4F 4B 99 C3
63B6: 9E 55 45 8E 91 05 8A E3 8B 85 96 8F 8C C4 4C DB
63C6: 8B 96 A5 3B F4 45 45 D9 B0 FB 89 3F 16 0D 47 F7
63D6: 17 17 BA 00

; 38	 YOU ARE IN THE BOTTOM OF A SMALL PIT WITH A LITTLE
; 38	 STREAM, WHICH ENTERS AND EXITS THROUGH TINY SLITS.
;
; YOU_ARE_IN_THE_BOTTOM_OF_A_SMALL_PIT_WITH_A_LITTLE_STREAM,_WHICH
; ENTERS_AND_EXITS_THROUGH_TINY_SLITS.
PS_1C: ; room_56
63DA: 21 C7 DE 94 14 4B 5E 96 96 DB 72 06 4F 7F BF B8
63EA: 16 7B 14 E3 B8 F3 8C 96 A5 FB 17 53 BE 4E 45 8E
63FA: 7B DB 8B 0C BA 8F 5F 19 EE 85 73 F0 72 F4 BD C3
640A: B5 33 98 23 63 0B C0 6C BE 29 A1 16 71 A3 7A 5E
641A: 17 8D 7B 2E 00

; YOU_ARE_IN_A_THE_ROOM_OF_BES,_WHOSE_PICTURE_IS_ON_THE_WALL._____
; THERE_IS_A_BIG_HOLE_IN_THE_FLOOR.__THERE_IS_A_PASSAGE_LEADING___
; EAST.
PS_1D: ; room_57
641F: 2C C7 DE 94 14 4B 5E 83 96 82 17 54 5E 3F A0 B8
642F: 16 AF 14 33 BB 29 D1 9B B7 85 A5 74 C0 4B 5E D1
643F: B5 96 96 DB 72 0E D0 9B 8F 3B 13 82 17 2F 62 D5
644F: 15 7B 14 09 4E A9 15 DB 8B 83 7A 5F BE 56 15 44
645F: A0 3B F4 5F BE 5B B1 4B 7B 52 45 65 49 77 47 3F
646F: 16 03 47 AB 98 47 13 66 49 2E 00

; 64	 YOU ARE AT A COMPLEX JUNCTION. A LOW HANDS AND KNEES
; 64	 PASSAGE FROM THE NORTH JOINS A HIGHER CRAWL
; 64	 FROM THE EAST TO MAKE  A WALKING PASSAGE GOING WEST
; 64	 THERE IS ALSO A LARGE ROOM ABOVE. THE AIR IS DAMP HERE.
; 64	 A SIGN IN MIDAIR HERE SAYS 'CAVE UNDER CONSTRUCTION BEYOND
; 64	 THIS POINT. PROCEED AT OWN RISK.'
;
; YOU_ARE_AT_A_COMPLEX_JUNCTION.__A_LOW_HANDS_AND_KNEES_PASSAGE___
; FROM_THE_NORTH_JOINS_A_HIGHER_CRAWL_FROM_THE_EAST_TO_MAKE_A_____
; WALKING_PASSAGE_GOING_WEST.__THERE_IS_ALSO_A_LARGE_ROOM_ABOVE.__
; THE_AIR_IS_DAMP_HERE.
PS_1E: ; room_58
647A: 47 C7 DE 94 14 43 5E 03 BC E1 14 E6 93 13 63 F0
648A: 81 03 56 27 A0 43 13 49 16 CA CE 8E 48 C3 B5 33
649A: 98 0F 87 4B 62 55 A4 09 B7 3B 5E 5C 15 DB 9F 5F
64AA: BE 99 16 C2 B3 F9 15 9D 7A 7B 14 89 73 F4 72 E4
64BA: 14 FE 49 5C 15 DB 9F 5F BE 23 15 F3 B9 6B BF 8D
64CA: 91 43 5E 3B 13 59 13 45 48 91 7A DB 16 D3 B9 9B
64DA: 6C 3B 6E AB 98 B5 D0 9B C1 82 17 2F 62 D5 15 8E
64EA: 14 2B B9 4E 45 31 49 54 5E 3F A0 84 14 4F A1 3B
64FA: F4 5F BE 8B 14 8B AF C6 B5 72 48 9F 15 7F B1 00

; YOU_ARE_IN_THE_UNDERWORLD_ANTEROOM_OF_SEKER.__PASSAGES_GO_EAST,_
; WEST,_AND_UP.__HUMAN_BONES_ARE_STREWN_ABOUT_ON_THE_FLOOR._______
; HIEROGLYPHICS_ON_THE_WALL_ROUGHLY_TRANSLATE_TO_"THOSE_WHO_______
; PROCEED_EAST_MAY_NEVER_RETURN."
PS_1F: ; room_59
650A: 4A C7 DE 94 14 4B 5E 96 96 DB 72 8E C5 41 62 B6
651A: A0 03 58 BF 9A 01 B3 51 90 95 64 17 61 1B B5 DB
652A: 16 D3 B9 B5 6C 81 15 23 15 16 BA F7 17 16 BA 90
653A: 14 17 58 9B A8 AF 15 90 91 B9 14 75 98 94 14 55
654A: 5E EF BF 03 D2 B9 46 73 C6 03 A0 5F BE 56 15 44
655A: A0 3B F4 3B 13 4A 13 34 79 FE 9E E2 DE E5 78 C0
656A: 16 82 17 59 5E 46 48 39 17 7A C4 FB 8E EB BF 9E
657A: 9A 7F 49 89 17 7E 13 85 74 59 5E 6B 74 3B 13 3B
658A: 13 F9 A6 A7 53 07 58 66 49 63 16 50 DB CF 62 94
659A: AF 8F 62 E7 B2 22 00

; YOU_ARE_AT_THE_LAND_OF_DEAD.__PASSAGES_LEAD_OFF_IN_>ALL<________
; DIRECTIONS.
PS_20: ; room_60
65A1: 19 C7 DE 94 14 43 5E 16 BC DB 72 50 8B 11 58 86
65B1: 64 86 5F 3B F4 55 A4 09 B7 4B 62 E3 8B 11 58 83
65C1: 66 83 7A 8E 2D 73 8A 3B 13 3B 13 03 15 65 B1 91
65D1: BE AF 9A 00

; YOU'RE_IN_A_LARGE_ROOM_WITH_ANCIENT_DRAWINGS_ON_ALL_WALLS.______
; THE_PICTURES_DEPICT_ATUM,_A_PHARAOH_WEARING_THE_DOUBLE_CROWN.___
; A_SHALLOW_PASSAGE_PROCEEDS_DOWNWARD,_AND_A_SOMEWHAT_STEEPER_ONE_
; LEADS_UP.__A_LOW_HANDS_AND_KNEES_PASSAGE_ENTERS_FROM_THE_SOUTH.
PS_21: ; room_61
65D5: 55 C7 DE AF 23 D0 15 7B 14 54 8B 9B 6C 01 B3 59
65E5: 90 82 7B 90 14 47 54 B3 9A EB 5B 50 D1 CB 6E 03
65F5: A0 46 48 F3 17 0D 8D 3B F4 3B 13 82 17 52 5E E6
6605: 78 2F C6 C6 B5 E3 61 F3 55 8F 49 B3 95 52 45 54
6615: 72 BA 48 F7 17 33 49 AB 98 5F BE 09 15 B6 C3 45
6625: 5E 09 B3 1B 9C 43 13 5A 17 46 48 6B A1 55 A4 09
6635: B7 52 5E F5 B2 26 60 C6 B5 80 A1 14 D0 73 5D 8E
6645: 48 7B 14 3F B9 FA 62 73 49 FF B9 DF 61 91 AF 5B
6655: 98 E3 8B 0B 5C F7 C5 43 13 49 16 CA CE 8E 48 C3
6665: B5 33 98 0F 87 4B 62 55 A4 09 B7 47 5E BF 9A 8B
6675: B3 79 68 56 90 DB 72 47 B9 77 BE 20 00

; YOU_ARE_IN_A_CHAMBER_WHOSE_WALL_CONTAINS_A_PICTURE_OF_A_MAN_____
; WEARING_THE_LUNAR_DISK_ON_HIS_HEAD.__HE_IS_THE_GOD_KHONS,_THE___
; MOON_GOD.
PS_22: ; room_62
6682: 2D C7 DE 94 14 4B 5E 83 96 DA 14 64 48 23 62 29
6692: D1 9B B7 0E D0 05 8A 1E A0 D0 47 C3 B5 E3 16 0F
66A2: 56 5B B1 C3 9E 4F 45 83 48 3B 13 F7 17 33 49 AB
66B2: 98 5F BE 4F 16 D4 97 03 15 8B B8 03 A0 95 73 9F
66C2: 15 17 47 4A 13 4B 5E D6 B5 DB 72 36 6E 1A 16 1D
66D2: A0 16 EE DB 72 4F 13 40 A0 81 15 44 2E 00

; YOU_ARE_IN_A_LONG_SLOPING_CORRIDOR_WITH_RAGGED_WALLS._
PS_23: ; room_63
66E0: 12 C7 DE 94 14 4B 5E 83 96 49 16 AB 98 C9 B8 90
66F0: A5 C5 6A BC A0 09 79 99 AF 82 7B 2B 17 F7 6C 19
6700: 58 46 48 5B BB 20 00

; YOU_ARE_IN_A_CUL-DE-SAC_ABOUT_EIGHT_FEET_ACROSS.
PS_24: ; room_64
6707: 10 C7 DE 94 14 4B 5E 83 96 E7 14 56 8F A5 63 CB
6717: 46 B9 46 73 C6 C9 60 33 75 67 66 03 BC B9 55 EF
6727: B9 00

; 65	 YOU ARE IN BEDQUILT, A LONG EAST/WEST PASSAGE WITH HOLES EVERYWHERE.
; 65	 TO EXPLORE AT RANDOM SELECT NORTH, SOUTH, UP, OR DOWN.
;
; YOU_ARE_IN_THE_CHAMBER_OF_HORUS,_A_LONG_EAST/WEST_PASSAGE_WITH__
; HOLES_EVERYWHERE.__TO_EXPLORE_AT_RANDOM,_SELECT_NORTH,_SOUTH,___
; UP,_OR_DOWN.
PS_25: ; room_65
6729: 2E C7 DE 94 14 4B 5E 96 96 DB 72 1B 54 AF 91 91
6739: AF 8A 64 BF A0 33 BB 4E 45 11 A0 23 15 F8 B9 B5
6749: D0 12 BC 65 49 77 47 FB 17 53 BE A9 15 F5 8B 38
6759: 15 43 62 1F D1 7F B1 56 13 C7 9C A6 D8 AF A0 96
6769: 14 2B 17 49 98 B3 95 AE B7 E6 5F 99 16 C2 B3 15
6779: EE 36 A1 73 76 57 13 73 A8 A3 A0 89 5B 4E 2E 00

; 68	 YOU ARE IN A LARGE LOW CIRCULAR CHAMBER WHOSE FLOOR IS AN
; 68	 IMMENSE SLAB FALLEN FROM THE CEILING(SLAB ROOM). EAST AND
; 68	 WEST THERE ONCE WERE LARGE PASSAGES, BUT THEY ARE NOW FILLED
; 68	 WITH BOULDERS. LOW SMALL PASSAGES GO NORTH AND SOUTH, AND THE
; 68	 SOUTH ONE QUICKLY BENDS WEST AROUND THE BOULDERS.
;
; YOU_ARE_IN_A_LARGE_LOW_CIRCULAR_CHAMBER_WHOSE_FLOOR_IS_AN_______
; IMMENSE_SLAB_FALLEN_FROM_THE_CEILING.__EAST_AND_WEST_THERE_ONCE_
; WHERE_LARGE_PASSAGES,_BUT_THEY_ARE_NOW_FILLED_WITH_SAND.________
; LOW_SMALL_PASSAGES_GO_NORTH_AND_SOUTH.
PS_26: ; room_66
6789: 4C C7 DE 94 14 4B 5E 83 96 3B 16 B7 B1 49 16 C5
6799: CE 2D 7B 3B C5 85 AF 4F 72 74 4D FA 17 D7 A0 56
67A9: 15 44 A0 D5 15 90 14 3B 13 3B 13 CF 15 30 92 9B
67B9: B7 BB B8 88 4B 46 48 83 61 79 68 56 90 DB 72 AB
67C9: 53 90 8C 5B 70 23 15 F3 B9 8E 48 F7 17 F3 B9 5F
67D9: BE 5B B1 0D A0 59 5E F4 72 4E 5E 31 49 52 5E 65
67E9: 49 77 47 33 BB F6 4F 82 17 3B 63 2F 49 99 16 C8
67F9: CE 46 7A F3 5F 56 D1 15 71 8E 48 3B F4 3B 13 3B
6809: 13 89 8D 5F 17 46 48 DB 16 D3 B9 B5 6C 81 15 99
6819: 16 C2 B3 90 14 15 58 36 A1 48 2E 00

; YOU_ARE_IN_THE_PRIEST'S_BEDROOM.__THE_WALLS_ARE_COVERED_WITH____
; CURTAINS,_THE_FLOOR_WITH_A_THICK_PILE_CARPET.__MOSS_COVERS_THE__
; CEILING.
PS_27: ; room_72
6825: 2D C7 DE 94 14 4B 5E 96 96 DB 72 F3 A6 66 62 CB
6835: 23 66 4D 01 B3 DB 95 82 17 59 5E 46 48 C3 B5 5B
6845: B1 48 55 2F 62 19 58 82 7B 3B 13 E7 14 BB B3 9D
6855: 7A 16 EE DB 72 89 67 A3 A0 56 D1 03 71 82 17 DD
6865: 78 E3 16 DB 8B 14 53 F6 A4 3B F4 C5 93 C5 B5 4F
6875: A1 8B B3 5F BE 45 13 CE 60 91 7A 2E 00

; THIS_IS_THE_CHAMBER_OF_THE_HIGH_PRIEST.___ANCIENT_DRAWINGS_COVER
; THE_WALLS.__AN_EXTREMELY_TIGHT_TUNNEL_LEADS_WEST.__IT_LOOKS_LIKE
; A_TIGHT_SQUEEZE.__ANOTHER_PASSAGE_LEADS_SE.
PS_28: ; room_73
6882: 39 63 BE CB B5 D6 B5 DB 72 1B 54 AF 91 91 AF 96
6892: 64 DB 72 89 73 12 71 07 B2 17 BA 3B 13 8D 48 30
68A2: 79 06 BC D9 B0 91 7A C5 B5 4F A1 C2 B3 59 5E 46
68B2: 48 5B BB 90 14 3A 15 EF BF 2E 92 56 DB 7A 79 16
68C2: BC 98 C5 33 61 E3 8B 0B 5C B5 D0 9B C1 D6 15 49
68D2: 16 A5 9F 43 16 A3 85 83 17 2E 6D 63 17 27 C4 7F
68E2: E3 43 13 06 9A F4 72 DB 16 D3 B9 9B 6C E3 8B 0B
68F2: 5C BF B7 00

; YOU_ARE_IN_THE_HIGH_PRIEST'S_TREASURE_ROOM_LIT_BY_AN_EERIE_GREEN
; LIGHT.__A_NARROW_TUNNEL_EXITS_TO_THE_EAST.
PS_29: ; room_76
68F6: 23 C7 DE 94 14 4B 5E 96 96 DB 72 89 73 12 71 07
6906: B2 F5 B9 D6 B5 63 B1 34 BA 54 5E 3F A0 43 16 04
6916: BC 43 DB 87 96 33 62 49 5E 67 B1 83 99 2E 6D 3B
6926: F4 50 45 3C 49 6B A1 70 C0 6E 98 3A 15 8D 7B 89
6936: 17 82 17 47 5E 66 49 2E 00

; 67	 YOU ARE IN THE TWOPIT ROOM. THE FLOOR
; 67	 HERE IS LITTERED WITH THIN ROCK SLABS, WHICH MAKE IT
; 67	 EASY TO DESCEND THE PITS. THERE IS A PATH HERE BYPASSING
; 67	 THE PITS TO CONNECT PASSAGES FROM EAST AND WEST.THERE
; 67	 ARE HOLES ALL OVER, BUT THE ONLY BIG ONE IS ON THE WALL
; 67	 DIRECTLY OVER THE EAST PIT WHERE YOU CAN'T GET TO IT.
;
; YOU_ARE_AT_THE_EAST_END_OF_THE_TWOPIT_ROOM.__THE_FLOOR_HERE_IS__
; LITTERED_WITH_THIN_ROCK_SLABS,_WHICH_MAKE_IT_EASY_TO_DESCEND_THE
; PITS.__THERE_IS_A_PATH_HERE_BYPASSING_THE_PITS_TO_CONNECT_______
; PASSAGES_EAST_AND_WEST.__THERE_ARE_HOLES_ALL_OVER,_BUT_THE_ONLY_
; BIG_ONE_IS_ON_THE_WALL_DIRECTLY_OVER_THE_WEST_PIT_WHERE_YOU_____
; CAN'T_GET_TO_IT.
PS_2A: ; room_78
693F: 70 C7 DE 94 14 43 5E 16 BC DB 72 95 5F 07 BC 33
694F: 98 C3 9E 5F BE 91 17 63 A0 14 BC 3F A0 3B F4 5F
695F: BE 56 15 44 A0 9F 15 5B B1 4B 7B 43 16 3F C0 66
696F: B1 FB 17 53 BE 63 BE 94 96 5D 9E 5E 17 BD 46 19
697F: EE 85 73 0F 71 17 48 D6 15 23 15 BB BA 6B BF F5
698F: 59 B0 53 16 58 F2 72 8D 7B 3B F4 5F BE 5B B1 4B
699F: 7B 52 45 82 49 9F 15 5B B1 92 50 65 49 91 7A 82
69AF: 17 52 5E 8D 7B 89 17 E1 14 CF 99 F3 55 3B 13 3B
69BF: 13 55 A4 09 B7 4B 62 95 5F 03 BC 33 98 B5 D0 9B
69CF: C1 82 17 2F 62 94 14 4A 5E BF 9F C3 B5 F3 8C 4F
69DF: A1 F3 B4 F6 4F 82 17 51 5E 93 99 B3 14 D1 6A 5B
69EF: 98 4B 7B 03 A0 5F BE F3 17 F3 8C 94 5A E6 5F FB
69FF: 8E 4F A1 96 AF DB 72 B5 D0 12 BC 73 7B 1F D1 5B
6A0F: B1 C7 DE 3B 13 45 13 85 48 09 BC 73 62 6B BF 97
6A1F: 7B 00

; woods24 YOU ARE AT THE BOTTOM OF THE EASTERN PIT IN THE TWOPIT ROOM.  THERE IS
; woods24 A SMALL POOL OF OIL IN ONE CORNER OF THE PIT.
;
; YOU_ARE_AT_THE_BOTTOM_OF_THE_EASTERN_PIT_IN_THE_TWOPIT_ROOM.
PS_2B: ; room_79
6A21: 14 C7 DE 94 14 43 5E 16 BC DB 72 06 4F 7F BF B8
6A31: 16 82 17 47 5E 66 49 38 62 E3 16 0B BC 96 96 DB
6A41: 72 C1 C0 96 A5 39 17 FF 9F 00

; woods23    YOU ARE AT THE WEST END OF THE TWOPIT ROOM.  THERE IS A LARGE HOLE IN
; woods23    THE WALL ABOVE THE PIT AT THIS END OF THE ROOM.
;
; YOU_ARE_AT_THE_WEST_END_OF_THE_TWOPIT_ROOM.__THERE_IS_A_LARGE___
; HOLE_IN_THE_WALL_ABOVE_THE_PIT_AT_THIS_END_OF_THE_ROOM.
PS_2C: ; room_80
6A4B: 27 C7 DE 94 14 43 5E 16 BC DB 72 B5 D0 07 BC 33
6A5B: 98 C3 9E 5F BE 91 17 63 A0 14 BC 3F A0 3B F4 5F
6A6B: BE 5B B1 4B 7B 4E 45 31 49 3B 5E A9 15 DB 8B 83
6A7B: 7A 5F BE F3 17 F3 8C B9 46 5B CA 5F BE E3 16 03
6A8B: BC 16 BC 95 73 30 15 11 58 96 64 DB 72 01 B3 4D
6A9B: 2E 00

; 25    YOU ARE AT THE BOTTOM OF THE WESTERN PIT IN THE TWOPIT ROOM.  THERE IS
; 25    A LARGE HOLE IN THE WALL ABOUT 25 FEET ABOVE YOU.
; woods25
;
; YOU_ARE_AT_THE_BOTTOM_OF_THE_WEST_PIT_IN_THE_TWOPIT_ROOM.__THERE
; IS_A_LARGE_HOLE_IN_THE_WALL_ABOUT_TWENTY_FIVE_FEET_ABOVE_YOU.
PS_2D: ; room_81
6A9D: 29 C7 DE 94 14 43 5E 16 BC DB 72 06 4F 7F BF B8
6AAD: 16 82 17 59 5E 66 62 E3 16 0B BC 96 96 DB 72 C1
6ABD: C0 96 A5 39 17 FF 9F 56 13 F4 72 D5 60 7B 14 54
6ACD: 8B 9B 6C 7E 74 4B 5E 96 96 DB 72 0E D0 03 8A 07
6ADD: 4F 16 BC B0 D0 FB C0 18 67 48 5E 36 60 84 14 4F
6AED: A1 51 18 55 2E 00

; YOU_ARE_IN_A_LONG,_NARROW_CORRIDOR_STRETCHING_OUT_OF_SIGHT_TO___
; THE_WEST.__AT_THE_EASTERN_END_IS_A_HOLE_THROUGH_WHICH_YOU_CAN___
; SEE_A_PROFUSION_OF_LEAVES.
PS_2E: ; room_77
6AF3: 33 C7 DE 94 14 4B 5E 83 96 49 16 CE 98 8B 16 79
6B03: B3 C5 CE BC A0 09 79 95 AF EF BF 9A BD 91 7A C7
6B13: 16 11 BC 95 64 7A 79 16 BC BB 9C 82 17 59 5E 66
6B23: 62 3B F4 73 49 5F BE 23 15 FF B9 C3 B2 8E 61 D5
6B33: 15 7B 14 7E 74 56 5E F9 74 7A C4 FA 17 DA 78 51
6B43: 18 45 C2 83 48 55 13 1B 60 52 45 F8 B2 5B C6 03
6B53: A0 C3 9E E3 8B 75 CA 2E 00

; YOU_ARE_IN_THE_CHAMBER_OF_OSIRIS._THE_CEILING_IS_TOO_HIGH_UP_FOR
; YOUR_LAMP_TO_SHOW_IT.__PASSAGES_LEAD_EAST,_NORTH,_AND_SOUTH.
PS_2F: ; room_71
6B5C: 29 C7 DE 94 14 4B 5E 96 96 DB 72 1B 54 AF 91 91
6B6C: AF 91 64 54 B8 6F 7B 82 17 45 5E CE 60 91 7A D5
6B7C: 15 89 17 CA 9C 7A 79 B2 17 59 15 91 B4 23 C6 4F
6B8C: 8B 16 A3 D5 9C 89 74 D6 15 3B F4 55 A4 09 B7 4B
6B9C: 62 E3 8B 07 58 66 49 10 EE BE A0 73 76 8E 48 61
6BAC: 17 82 C6 2E 00

; THE_PASSAGE_HERE_IS_BLOCKED_BY_A_FALLEN_BLOCK.
PS_30: ; room_70
6BB1: 0F 5F BE DB 16 D3 B9 9B 6C F4 72 4B 5E C4 B5 75
6BC1: 8D A6 85 C3 14 7B 14 CE 65 F0 8B B6 14 5D 9E 2E
6BD1: 00

; YOU_ARE_IN_THE_CHAMBER_OF_NEKHEBET,_A_WOMAN_WITH_THE_HEAD_OF_A__
; VULTURE,_WEARING_THE_CROWN_OF_EGYPT.__A_PASSAGE_EXITS_TO_THE____
; SOUTH.
PS_31: ; room_68
6BD2: 2C C7 DE 94 14 4B 5E 96 96 DB 72 1B 54 AF 91 91
6BE2: AF 90 64 1A 61 AF 5F 73 C1 59 45 E3 9F 99 96 82
6BF2: 7B 82 17 4A 5E 86 5F B8 16 7B 14 DF 17 4F 8E 7E
6C02: B1 F7 17 33 49 AB 98 5F BE E4 14 80 A1 B8 16 29
6C12: 15 EE DE 3B F4 52 45 65 49 77 47 3A 15 8D 7B 89
6C22: 17 82 17 3B 5E 55 13 36 A1 48 2E 00

Object descriptions (packed)

; THERE_IS_A_SHINY_BRASS_LAMP_NEARBY.
PS_32:
6C2E: 0B 5F BE 5B B1 4B 7B 55 45 90 73 44 DB D5 B0 CE
6C3E: B5 72 48 8F 16 2C 49 59 2E 00

; BRASS_LANTERN
PS_33:
6C48: 04 6B 4F CB B9 50 8B F4 BD 4E 00

; THERE_IS_A_LAMP_SHINING_NEARBY.
PS_34:
6C53: 0A 5F BE 5B B1 4B 7B 4E 45 72 48 5A 17 93 7A AB
6C63: 98 63 98 03 B1 2E 00

; BRASS_LANTERN
PS_35:
6C6A: 04 6B 4F CB B9 50 8B F4 BD 4E 00

; THERE_IS_A_SMALL_STATUE_BOX_DISCARDED_NEARBY.
PS_36:
6C75: 0F 5F BE 5B B1 4B 7B 55 45 8E 91 15 8A 56 BD 1B
6C85: C4 0A 4F 03 15 53 B7 3F B1 10 58 94 5F 9F 50 00

; STATUE_BOX
PS_37:
6C95: 03 FB B9 67 C0 B9 14 58 00

; A_THREE_FOOT_SCEPTER_WITH_AN_ANKH_ON_AN_END_LIES_NEARBY.
PS_38:
6C9E: 12 56 45 EF 74 48 5E 46 A0 55 17 EE 61 23 62 56
6CAE: D1 03 71 83 96 5A 99 C0 16 90 14 30 15 0E 58 35
6CBE: 79 8F 16 2C 49 59 2E 00

; SCEPTER
PS_39:
6CC6: 02 57 B7 3F A7 52 00

; A_STATUE_OF_THE_BIRD_GOD_IS_SITTING_HERE.
PS_3A:
6CCD: 0D 55 45 56 BD 1B C4 C3 9E 5F BE B3 14 33 B1 36
6CDD: 6E D5 15 5B 17 43 C0 AB 98 F4 72 45 2E 00

; THERE_IS_A_BIRD_STATUE_IN_THE_BOX.
PS_3B:
6CEB: 0B 5F BE 5B B1 4B 7B 44 45 2E 7B 66 17 8F 49 4B
6CFB: 5E 96 96 DB 72 0A 4F 2E 00

; BIRD_STATUE_IN_BOX
PS_3C:
6D04: 06 14 4E 15 58 56 BD 1B C4 83 7A 0A 4F 00

; A_SMALL_VELVET_PILLOW_LIES_ON_THE_FLOOR.
PS_3D:
6D12: 0D 55 45 8E 91 18 8A 50 61 73 62 8E A5 89 8D 43
6D22: 16 4B 62 03 A0 5F BE 56 15 44 A0 2E 00

; VELVET_PILLOW
PS_3E:
6D2F: 04 6E CA 76 CA E3 16 09 8D 57 00

; A_HUGE_GREEN_FIERCE_SERPENT_BARS_THE_WAY!
PS_3F:
6D3A: 0D 4A 45 77 C4 84 15 30 60 53 15 2D 62 55 5E 3A
6D4A: 62 9E 61 AB 14 8B B3 5F BE F3 17 59 21 00

; A_STONE_BRIDGE_NOW_SPANS_THE_BOTTOMLESS_PIT.
PS_40:
6D58: 0E 55 45 80 BF 44 5E 06 B2 9B 6C 09 9A 62 17 9D
6D68: 48 82 17 44 5E 0E A1 EE 9F 65 62 E3 16 54 2E 00

; THERE_IS_A_SARCOPHAGUS_HERE_WITH_IT'S_COVER_TIGHTLY_CLOSED.
PS_41:
6D78: 13 5F BE 5B B1 4B 7B 55 45 2D 49 62 A0 87 47 CA
6D88: B5 2F 62 FB 17 53 BE 75 7B C5 B5 4F A1 96 AF 7A
6D98: 79 13 BF DE 14 D7 A0 44 2E 00

; SARCOPHAGUS_>GROAN<
PS_42:
6DA2: 06 14 B7 42 55 49 72 4B C6 84 2E 10 9E 3C 00

; THERE_ARE_A_FEW_RECENT_ISSUES_OF_"EGYPTIAN_WEEKLY"_MAGAZINE_HERE
PS_43:
6DB1: 15 5F BE 5B B1 2F 49 7B 14 79 66 2F 17 B0 53 0B
6DC1: BC E7 B9 4B 62 C3 9E 69 1B EE DE 90 78 F7 17 1E
6DD1: 61 63 DB 89 91 73 4A 5B 98 F4 72 45 00

; "EGYPTIAN_WEEKLY"
PS_44:
6DDE: 05 69 1B EE DE 90 78 F7 17 1E 61 59 22 00

; THERE_IS_FOOD_HERE.
PS_45:
6DEC: 06 5F BE 5B B1 4B 7B 01 68 0A 58 2F 62 2E 00

; TASTY_FOOD
PS_46:
6DFB: 03 55 BD FB C0 01 68 44 00

; THERE_IS_A_BOTTLE_HERE.
PS_47:
6E04: 07 5F BE 5B B1 4B 7B 44 45 0E A1 DB 8B F4 72 45
6E14: 2E 00

; SMALL_BOTTLE
PS_48:
6E16: 04 E3 B8 F3 8C 06 4F FF BE 00

; THERE_IS_WATER_IN_THE_BOTTLE.
PS_49:
6E20: 09 5F BE 5B B1 4B 7B 16 D0 23 62 83 7A 5F BE B9
6E30: 14 46 C0 45 2E 00

; WATER_IN_THE_BOTTLE
PS_4A:
6E36: 06 16 D0 23 62 83 7A 5F BE B9 14 46 C0 45 00

; THERE_IS_A_TINY_PLANT_IN_THE_PIT,_MURMURING_"WATER,_WATER,_..."
PS_4B:
6E45: 15 5F BE 5B B1 4B 7B 56 45 A3 7A E6 16 9E 48 D0
6E55: 15 82 17 52 5E 96 7B 77 16 B7 B2 10 B2 BC 6A 16
6E65: D0 46 62 F3 17 F4 BD 1F EE DC F9 00

; THERE_IS_A_TWELVE_FOOT_BEAN_STALK_STRETCHING_UP_OUT_OF_THE_PIT,_
; BELLOWING_"WATER..._WATER..."
PS_4C:
6E71: 1F 5F BE 5B B1 4B 7B 56 45 AE D0 5B CA 01 68 04
6E81: BC 90 5F 66 17 45 48 66 17 76 B1 23 54 AB 98 D3
6E91: C5 36 A1 B8 16 82 17 52 5E 96 7B AF 14 09 8D 50
6EA1: D1 BC 6A 16 D0 47 62 DB F9 16 D0 47 62 DC F9 00

; THERE_IS_A_GIGANTIC_BEAN_STALK_STRETCHING_ALL_THE_WAY_UP_TO_THE_
; HOLE.
PS_4D:
6EB1: 17 5F BE 5B B1 4B 7B 49 45 73 79 C3 9A C4 51 90
6EC1: 5F 66 17 45 48 66 17 76 B1 23 54 AB 98 46 48 82
6ED1: 17 59 5E 3B 4A D3 C5 6B BF 5F BE A9 15 FF 8B 00

; THERE_IS_A_MASSIVE_VENDING_MACHINE_HERE.__THE_INSTRUCTIONS_ON_IT
; READ-_"DROP_COINS_HERE_TO_RECIEVE_FRESH_BATTERIES".
PS_4E:
6EE1: 26 5F BE 5B B1 4B 7B 4F 45 65 49 CF 7B CF 17 43
6EF1: 98 AB 98 85 91 90 73 4A 5E 2F 62 3B F4 5F BE D0
6F01: 15 0C BA E6 C3 C0 7A D1 B5 8B 96 EF BF 15 47 6E
6F11: 13 02 B3 E1 14 9D 7A 9F 15 5B B1 6B BF 65 B1 38
6F21: 79 48 5E 75 B1 04 71 8E 49 33 62 4C 62 2E 00

; THERE_ARE_FRESH_BATTERIES_HERE.
PS_4F:
6F30: 0A 5F BE 5B B1 2F 49 5C 15 5A 62 AB 14 3F C0 07
6F40: B2 CA B5 2F 62 2E 00

; BATTERIES
PS_50:
6F47: 03 D6 4C F4 BD 35 79 00

; SOME_WORN-OUT_BATTERIES_HAVE_BEEN_DISCARDED_NEARBY.
PS_51:
6F4F: 11 3F B9 59 5E B8 A0 47 EB 04 BC 8E 49 33 62 4B
6F5F: 62 58 72 44 5E 30 60 03 15 53 B7 3F B1 10 58 94
6F6F: 5F 9F 50 00

; BATTERIES
PS_52:
6F73: 03 D6 4C F4 BD 35 79 00

; THERE_IS_A_LARGE_SPARKLING_NUGGET_OF_GOLD_HERE!
PS_53:
6F7B: 0F 5F BE 5B B1 4B 7B 4E 45 31 49 55 5E 54 A4 C3
6F8B: 86 AB 98 E9 9A B6 6C B8 16 81 15 B3 8B F4 72 45
6F9B: 21 00

; LARGE_GOLD_NUGGET
PS_54:
6F9D: 05 54 8B 9B 6C 3E 6E 10 58 79 C4 45 54 00

; THERE_ARE_DIAMONDS_HERE!
PS_55:
6FAB: 08 5F BE 5B B1 2F 49 03 15 71 48 4D 98 9F 15 59
6FBB: B1 00

; SEVERAL_DIAMONDS
PS_56:
6FBD: 05 B8 B7 2B 62 06 8A 8F 78 0E A0 53 00

; THERE_ARE_BARS_OF_SILVER_HERE!
PS_57:
6FCA: 0A 5F BE 5B B1 2F 49 AB 14 8B B3 C3 9E 4E B8 74
6FDA: CA 9F 15 59 B1 00

; SILVER_BARS
PS_58:
6FE0: 03 4E B8 74 CA AB 14 52 53 00

; THERE_IS_PRECIOUS_JEWELRY_HERE!
PS_59:
6FEA: 0A 5F BE 5B B1 4B 7B EF A6 51 54 4B C6 79 7F 4C
6FFA: 61 4A DB 2F 62 21 00

; PRECIOUS_JEWELRY
PS_5A:
7001: 05 EF A6 51 54 4B C6 79 7F 4C 61 59 00

; THERE_ARE_MANY_COINS_HERE!
PS_5B:
700E: 08 5F BE 5B B1 2F 49 63 16 7B 9B 3B 55 8B 9A F4
701E: 72 45 21 00

; RARE_COINS
PS_5C:
7022: 03 D4 B0 45 5E 50 9F 53 00

; THE_PHARAOH'S_TREASURE_CHEST_IS_HERE!
PS_5D:
702B: 0C 5F BE E2 16 2B 49 15 9F D6 B5 63 B1 34 BA 45
703B: 5E F5 72 0B BC CA B5 2F 62 21 00

; TREASURE_CHEST
PS_5E:
7046: 04 EF BF 67 49 5B B1 1F 54 53 54 00

; THERE_IS_A_LARGE_NEST_HERE,_FULL_OF_GOLDEN_EGGS!
PS_5F:
7052: 10 5F BE 5B B1 4B 7B 4E 45 31 49 50 5E 66 62 9F
7062: 15 7E B1 5F 15 F3 8C C3 9E 3E 6E F0 59 29 15 C9
7072: 6E 00

; GOLDEN_EGGS
PS_60:
7074: 03 3E 6E F0 59 29 15 47 53 00

; THERE_IS_A_JEWEL-ENCRUSTED_KEY_HERE!
PS_61:
707E: 0C 5F BE 5B B1 4B 7B 4C 45 F7 62 57 8F 24 98 66
708E: C6 F3 5F BB 85 9F 15 59 B1 00

; JEWELED_KEY
PS_62:
7098: 03 79 7F 3F 61 0D 58 45 59 00

; THERE_IS_A_DELICATE,_PRECIOUS,_VASE_HERE!
PS_63:
70A2: 0D 5F BE 5B B1 4B 7B 46 45 43 61 16 53 B3 63 EF
70B2: A6 51 54 6E C6 CB 17 9B B7 F4 72 45 21 00

; VASE
PS_64:
70C0: 01 D5 C9 45 00

; THE_VASE_IS_NOW_RESTING,_DELICATELY,_ON_A_VELVET_PILLOW.
PS_65:
70C5: 12 5F BE CB 17 9B B7 4B 7B 09 9A 2F 17 03 BA CE
70D5: 98 FF 14 85 8C 7F 49 1E 8F C0 16 7B 14 6E CA 76
70E5: CA E3 16 09 8D 57 2E 00

; THE_FLOOR_IS_LITTERED_WITH_WORTHLESS_SHARDS_OF_POTTERY.
PS_66:
70ED: 12 5F BE 56 15 44 A0 D5 15 43 16 3F C0 66 B1 FB
70FD: 17 53 BE 44 D2 66 BE 65 62 5A 17 2E 49 D1 B5 92
710D: 64 0E A1 43 62 2E 00

; THERE_IS_AN_EMERALD_HERE_THE_SIZE_OF_A_PLOVER'S_EGG!
PS_67:
7114: 11 5F BE 5B B1 4B 7B 83 48 67 61 CE B0 0A 58 2F
7124: 62 82 17 55 5E 6F 7C B8 16 7B 14 09 A6 74 CA CB
7134: 23 79 60 21 00

; EGG-SIZED_EMERALD
PS_68:
7139: 05 79 60 DB EB 66 E3 2F 15 2B 62 4C 44 00

; OFF_TO_ONE_SIDE_LIES_A_GLISTENING_PEARL!
PS_69:
7147: 0D D0 9E 89 17 C0 16 55 5E FF 78 43 16 4B 62 49
7157: 45 95 8C F0 BD 91 7A DF 16 36 49 21 00

; GLISTENING_PEARL
PS_6A:
7164: 05 C3 6D FF B9 10 99 D2 6A 94 5F 4C 00

Miscalaneous messages (packed)

; 20	 YOU ARE AT THE BOTTOM OF THE PIT WITH A BROKEN NECK.
; woods20
;
; YOU_ARE_AT_THE_BOTTOM_OF_THE_PIT_WITH_A_BROKEN_NECK.
PS_6B:
7171: 11 C7 DE 94 14 43 5E 16 BC DB 72 06 4F 7F BF B8
7181: 16 82 17 52 5E 73 7B 56 D1 03 71 BC 14 97 9F 90
7191: 96 DD 5F 2E 00

; 16	 THE CRACK IS FAR TOO SMALL FOR YOU TO FOLLOW.
; woods16
;
; THE_CRACK_IS_FAR_TOO_SMALL_FOR_YOU_TO_FOLLOW.
PS_6C:
7196: 0F 5F BE E4 14 DD 46 D5 15 4B 15 96 AF 2B A0 E3
71A6: B8 F3 8C 04 68 51 18 56 C2 C8 9C C6 9F 8F A1 00

; 22	 THE DOME IS UNCLIMBABLE
; woods22
;
; THE_DOME_IS_UNCLIMBABLE.
PS_6D:
71B6: 08 5F BE 09 15 1B 92 4B 7B 8D C5 8F 8C C4 4C FF
71C6: 8B 00

; I_RESPECTFULLY_SUGGEST_YOU_GO_ACROSS_THE_BRIDGE_INSTEAD_OF______
; JUMPING.
PS_6E:
71C8: 18 54 77 62 62 E6 5F EE 68 FB 8E 29 BA B5 6C 1B
71D8: BC 1B A1 2B 6E E4 46 E5 A0 82 17 44 5E 06 B2 9B
71E8: 6C 9D 7A E3 BD 11 58 7B 64 3B 13 FF 15 E3 93 CF
71F8: 98 00

; 21	 YOU DIDN'T MAKE IT
; woods21
;
; YOU_DIDN'T_MAKE_IT.
PS_6F:
71FA: 06 C7 DE 03 15 45 5B 0F BC 17 48 D6 15 2E 00

; 31	 THERE IS NO WAY ACROSS THE FISSURE.
;
; THERE_IS_NO_WAY_ACROSS_THE_BOTTOMLESS_PIT.
PS_70:
7209: 0E 5F BE 5B B1 4B 7B EB 99 1B D0 85 14 05 B3 D6
7219: B5 DB 72 06 4F 7F BF F5 8B D2 B5 97 7B 00

; 32	 YOU CAN'T GET BY THE SNAKE
; woods32
;
; YOU_CAN'T_GET_BY_THE_SERPENT.
PS_71:
7227: 09 C7 DE D3 14 E6 96 77 15 04 BC 56 DB DB 72 B4
7237: B7 F0 A4 54 2E 00

; 40	 YOU HAVE CRAWLED THROUGH A VERY LOW WIDE PASSAGE PARALLEL
; 40	 TO AND NORTH OF THE HALL OF MISTS.
; woods40 and woods59
;
; YOU_HAVE_CRAWLED_THROUGH_A_VERY_LOW_WIDE_PASSAGE_PARALLEL_TO_AND
; NORTH_OF_THE_HALL_OF_GODS.
PS_72:
723D: 1E C7 DE 9B 15 5B CA AB 55 BF D1 16 58 F9 74 7A
724D: C4 7B 14 74 CA 4E DB 6B A1 46 D1 52 5E 65 49 77
725D: 47 DB 16 CE B0 EE 8B 89 17 90 14 59 5B C2 B3 B8
726D: 16 82 17 4A 5E 46 48 B8 16 81 15 2F 5C 00

; no crowther
; woods95   YOU DON'T FIT THROUGH A TWO-INCH SLIT!
;
; YOU_DON'T_FIT_THROUGH_TWO-INCH_SLIT!
PS_73:
727B: 0C C7 DE 09 15 E6 96 53 15 16 BC F9 74 7A C4 91
728B: 17 1B A2 1A 98 5E 17 71 7B 00

; 56	 YOU HAVE CRAWLED AROUND IN SOME LITTLE HOLES AND WOUND UP
; 56	 BACK IN THE MAIN PASSAGE.
; woods56
;
; YOU_HAVE_CRAWLED_AROUND_IN_SOME_LITTLE_HOLES_AND_WOUND_UP_BACK__
; IN_THE_MAIN_PASSAGE.
PS_74:
7295: 1C C7 DE 9B 15 5B CA AB 55 BF D1 03 58 07 B3 33
72A5: 98 83 7A 3F B9 4E 5E 8E 7B DB 8B 7E 74 4B 62 8E
72B5: 48 01 18 8E C5 B2 17 AB 14 8B 54 D0 15 82 17 4F
72C5: 5E D0 47 DB 16 D3 B9 BF 6C 00

; no crowther
; woods126   YOU HAVE CRAWLED AROUND IN SOME LITTLE HOLES AND FOUND YOUR WAY
; woods126   BLOCKED BY A RECENT CAVE-IN.  YOU ARE NOW BACK IN THE MAIN PASSAGE.
;
; YOU_HAVE_CRAWLED_AROUND_IN_SOME_LITTLE_HOLES_AND_FOUND_YOUR_WAY_
; BLOCKED_BY_A_FALLEN_SLAB.__YOU_ARE_NOW_BACK_IN_THE_MAIN_PASSAGE.
PS_75:
72CF: 2A C7 DE 9B 15 5B CA AB 55 BF D1 03 58 07 B3 33
72DF: 98 83 7A 3F B9 4E 5E 8E 7B DB 8B 7E 74 4B 62 8E
72EF: 48 59 15 8E C5 51 18 23 C6 1B D0 B6 14 5D 9E F3
72FF: 5F 7B 50 48 45 46 48 83 61 BB B8 1B 51 51 18 43
730F: C2 5B B1 09 9A AB 14 8B 54 83 7A 5F BE 63 16 83
731F: 7A 55 A4 09 B7 45 2E 00

; YOU_CAN'T_FIT_THIS_BIG_SARCOPHAGUS_THROUGH_THAT_LITTLE_PASSAGE!
PS_76:
7327: 15 C7 DE D3 14 E6 96 53 15 16 BC 95 73 B3 14 D5
7337: 6A 2D 49 62 A0 87 47 D6 B5 F9 74 7A C4 82 17 73
7347: 49 96 8C FF BE DB 16 D3 B9 99 6C 00

; SOMETHING_YOU'RE_CARRYING_WON'T_FIT_THROUGH_THE_TUNNEL_WITH_YOU.
; YOU'D_BEST_TAKE_INVENTORY_AND_DROP_SOMETHING.
PS_77:
7353: 24 3F B9 82 62 91 7A 51 18 A4 C2 45 5E 3C 49 D0
7363: DD D9 6A 05 A0 08 BC 73 7B 6C BE 29 A1 16 71 DB
7373: 72 70 C0 6E 98 FB 17 53 BE C7 DE 51 F9 96 C2 AF
7383: 14 F3 B9 4D BD 4B 5E 0F 9B C9 9A 7B B4 8E 48 0C
7393: 15 53 A0 3F B9 82 62 91 7A 2E 00

; woods26   YOU CLAMBER UP THE PLANT AND SCURRY THROUGH THE HOLE AT THE TOP.
; YOU_CLAMBER_UP_THE_PLANT_AND_SCURRY_THROUGH_THE_HOLE_AT_THE_TOP.
PS_78:
739E: 15 C7 DE DE 14 64 48 23 62 D3 C5 5F BE E6 16 9E
73AE: 48 90 14 15 58 34 56 7B B4 6C BE 29 A1 16 71 DB
73BE: 72 7E 74 43 5E 16 BC DB 72 82 BF 2E 00

; YOU'VE_CLIMBED_UP_THE_PLANT_AND_OUT_OF_THE_PIT.
PS_79:
73CB: 0F C7 DE 4F 24 DE 14 64 7A F3 5F D3 C5 5F BE E6
73DB: 16 9E 48 90 14 11 58 73 C6 C3 9E 5F BE E3 16 54
73EB: 2E 00

; 9	 THERE IS NO WAY TO GO THAT DIRECTION.
;
; THERE_IS_NO_WAY_FOR_YOU_TO_GO_THAT_DIRECTION.
PS_7A:
73ED: 0F 5F BE 5B B1 4B 7B EB 99 1B D0 59 15 9B AF 1B
73FD: A1 6B BF 2B 6E 5B BE 06 BC 2F 7B 03 56 27 A0 00

; 11	 I DON'T KNOW IN FROM OUT HERE. USE COMPASS POINTS OR NAME
; 11	 SOMETHING IN THE GENERAL DIRECTION YOU WANT TO GO.
;
; I_DON'T_KNOW_IN_FROM_OUT_HERE.__USE_COMPASS_POINTS.
PS_7B:
740D: 11 46 77 05 A0 0D BC 09 9A D0 15 5C 15 DB 9F 36
741D: A1 9F 15 7F B1 57 13 9B B7 3F 55 55 A4 D2 B5 50
742D: 9F 2F C0 00

; 10	 I AM UNSURE HOW YOU ARE FACING. USE COMPASS POINTS OR
; 10	 NEARBY OBJECTS.
;
; I_AM_UNSURE_HOW_YOU_ARE_FACING.__USE_COMPASS_POINTS.
PS_7C:
7431: 11 43 77 57 90 A7 9A 5B B1 89 74 51 18 43 C2 5B
7441: B1 C5 65 91 7A 3B F4 57 C6 E1 14 DB 93 CB B9 7B
7451: A6 CD 9A 2E 00

; 42	 NOTHING HAPPENS.
;
; NOTHING_HAPPENS.
PS_7D:
7456: 05 06 9A 90 73 CA 6A EA 48 9D 61 2E 00

; I_DON'T_KNOW_HOW.
PS_7E: ; (only used for SWIM)
7463: 05 46 77 05 A0 0D BC 09 9A A9 15 57 2E 00

; 12	 I DON'T KNOW HOW TO APPLY THAT WORD HERE.
;
; I_DON'T_KNOW_HOW_TO_APPLY_THAT_WORD_HERE.
PS_7F:
7471: 0D 46 77 05 A0 0D BC 09 9A A9 15 D6 CE C3 9C A6
7481: A6 56 DB 56 72 01 18 33 B1 F4 72 45 2E 00

; 39	 YOUR LAMP IS NOW ON.
;
; YOUR_LAMP_IS_NOW_ON.
PS_80:
748F: 06 C7 DE 8E AF 72 48 D5 15 99 16 D1 CE 4E 2E 00

; 38	 YOU HAVE NO SOURCE OF LIGHT.
;
; YOU_HAVE_NO_SOURCE_OF_LIGHT.
PS_81:
749F: 09 C7 DE 9B 15 5B CA EB 99 47 B9 17 B1 B8 16 43
74AF: 16 2E 6D 2E 00

; 40	 YOUR LAMP IS NOW OFF.
;
; YOUR_LAMP_IS_NOW_OFF.
PS_82:
74B4: 07 C7 DE 8E AF 72 48 D5 15 99 16 D1 CE A7 66 00

; 68	 I'M AS CONFUSED AS YOU ARE.
;
; I'M_AS_CONFUSED_AS_YOU_ARE.
PS_83:
74C4: 09 9F 77 95 14 E1 14 9F 98 A6 B7 95 14 51 18 43
74D4: C2 7F B1 00

; 59	 I CAN ONLY TELL YOU WHAT YOU SEE AS YOU MOVE ABOUT
; 59	 AND MANIPULATE THINGS. I CANNOT TELL YOU WHERE REMOTE THINGS
; 59	 ARE.
;
; I_CAN_ONLY_TELL_YOU_WHAT_YOU_SEE_AS_YOU_MOVE_ABOUT_AND__________
; MANIPULATE_THINGS.__I_CAN_NOT_TELL_YOU_WHERE_REMOTE_THINGS_ARE.
PS_84:
74D8: 2A 45 77 83 48 16 A0 56 DB 46 61 51 18 59 C2 56
74E8: 72 51 18 55 C2 1B 60 4B 49 C7 DE 71 16 5B CA B9
74F8: 46 73 C6 8E 48 3B 13 3B 13 3B 13 63 16 12 99 3B
7508: C5 DB BD 63 BE C5 98 3B F4 45 77 83 48 06 9A 7F
7518: 17 F3 8C C7 DE FA 17 2F 62 2F 17 C6 93 56 5E 90
7528: 73 CB 6E 2F 49 2E 00

; 54	 OK
;
; OK_
PS_85:
752F: 01 8B 9F 00

; SORRY,_BUT_I_NO_LONGER_SEEM_TO_REMEMBER_HOW_IT_WAS_YOU_GOT_HERE.
PS_86:
7533: 15 44 B9 9E B4 BF 14 0B BC 99 16 49 16 B7 98 95
7543: AF 2F 60 89 17 2F 17 2F 92 74 4D A9 15 CB CE 19
7553: BC 4B 49 C7 DE 81 15 0A BC 2F 62 2E 00

; 24	 YOU ARE ALREADY CARRYING IT!
;
; YOU_ARE_ALREADY_CARRYING_IT.
PS_87:
7560: 09 C7 DE 94 14 43 5E EF 8D 13 47 D3 14 83 B3 91
7570: 7A D6 15 2E 00

; YOU_CAN'T_CARRY_ANYTHING_MORE.__YOU'LL_HAVE_TO_DROP_SOMETHING___
; FIRST.
PS_88:
7575: 17 C7 DE D3 14 E6 96 D3 14 83 B3 90 14 82 DF 91
7585: 7A 71 16 7F B1 5B 13 1D A1 F3 8C 58 72 56 5E C6
7595: 9C 02 B3 61 17 36 92 90 73 BB 6A 53 15 A6 B3 2E
75A5: 00

; YOU'RE_NOT_CARRYING_ANYTHING.
PS_89:
75A6: 09 C7 DE AF 23 99 16 05 BC 3C 49 D0 DD C3 6A 96
75B6: 9B 90 73 47 2E 00

; YOU_ARE_CURRENTLY_HOLDING_THE_FOLLOWING:
PS_8A:
75BC: 0D C7 DE 94 14 45 5E 3C C6 9E 61 FB 8E 7E 74 90
75CC: 5A D6 6A DB 72 FE 67 89 8D 91 7A 3A 00

; DON'T_BE_RIDICULOUS!
PS_8B:
75D9: 06 80 5B F3 23 5B 4D 06 B2 E7 78 87 8D 53 21 00

; 77	 YOUR BOTTLE IS EMPTY AND THE GROUND IS WET.
; YOUR_BOTTLE_IS_EMPTY_AND_THE_GROUND_IS_WET.
PS_8C:
75E9: 0E C7 DE 84 AF 0E A1 DB 8B 4B 7B 72 61 FB C0 8E
75F9: 48 82 17 49 5E 07 B3 33 98 4B 7B B6 D0 2E 00

; 78	 YOU CAN'T POUR THAT.
;
; YOU_CAN'T_POUR_THAT.
PS_8D:
7608: 06 C7 DE D3 14 E6 96 E9 16 23 C6 5B BE 54 2E 00

; 75	 RUBBING THE ELECTRIC LAMP IS NOT PARTICULARLY REWARDING.
; 75	 ANYWAY, NOTHING EXCITING HAPPENS.
;
; RUBBING_THE_ELECTRIC_LAMP_IS_NOT_PARTICULARLY_REWARDING.________
; ANYWAY,_NOTHING_EXCITING_HAPPENS.
PS_8E:
7618: 20 E4 B3 10 4E D6 6A DB 72 3F 61 0C 56 CB 78 4F
7628: 8B 0B A3 D0 B5 F3 A0 54 A4 85 BE 3B C5 93 B2 2F
7638: 17 14 D0 90 5A 5B 70 3B 13 3B 13 90 14 F3 DF B3
7648: E0 06 9A 90 73 C7 6A 9B D6 90 BE CA 6A EA 48 9D
7658: 61 2E 00

; 76	 PECULIAR.  NOTHING UNEXPECTED HAPPENS.
;
; PECULIAR.__NOTHING_UNEXPECTED_HAPPENS.
PS_8F:
765B: 0C E5 A4 43 C5 47 49 50 13 02 A1 91 7A B0 17 2A
766B: 63 E6 5F F3 5F 52 72 F0 A4 53 2E 00

; THERE_IS_NOTHING_HERE_WITH_WHICH_TO_FILL_THE_BOTTLE.
PS_90:
7677: 11 5F BE 5B B1 4B 7B 06 9A 90 73 CA 6A 2F 62 FB
7687: 17 53 BE 23 D1 13 54 6B BF 0E 67 16 8A DB 72 06
7697: 4F FF BE 2E 00

; THE_BOTTLE_IS_NOW_EMPTY.
PS_91:
769C: 08 5F BE B9 14 46 C0 4B 5E D0 B5 6B A1 72 61 1F
76AC: C1 00

; YOU_CAN'T_FILL_THAT.
PS_92:
76AE: 06 C7 DE D3 14 E6 96 53 15 F3 8C 5B BE 54 2E 00

; A_GLISTENING_PEARL_FALLS_OUT_OF_THE_SARCOPHAGUS_AND_ROLLS_AWAY._
; THE_SARCOPHAGUS_SNAPS_SHUT_AGAIN.
PS_93:
76BE: 20 49 45 95 8C F0 BD 91 7A DF 16 36 49 4B 15 0D
76CE: 8D C7 16 11 BC 96 64 DB 72 14 B7 42 55 49 72 4B
76DE: C6 8E 48 39 17 0D 8D 99 14 5F 4A 82 17 55 5E 2D
76EE: 49 62 A0 87 47 D5 B5 D2 97 D5 B5 76 75 89 14 D0
76FE: 47 2E 00

; I'D_ADVISE_YOU_TO_PUT_DOWN_THE_SARCOPHAGUS_BEFORE_OPENING_IT!!
PS_94:
7701: 14 96 77 86 14 15 CB 5B 5E 1B A1 6B BF 76 A7 09
7711: 15 03 D2 5F BE 53 17 21 B1 5B A5 35 6F AF 14 04
7721: 68 51 5E F0 A4 91 7A D6 15 21 21 00

; THE_SARCOPHAGUS_CREAKS_OPEN,_REVEALING_NOTHING_INSIDE.__IT______
; PROMPTLY_SNAPS_SHUT_AGAIN.
PS_95:
772D: 1E 5F BE 53 17 21 B1 5B A5 35 6F E4 14 8D 5F D1
773D: B5 F0 A4 14 EE CF 62 43 48 AB 98 06 9A 90 73 CB
774D: 6A 9B 9A FF 59 4B 13 FB BB 3B 13 EC 16 F2 9F 13
775D: BF 60 17 ED 48 5A 17 73 C6 73 47 A7 7A 00

; YOU_DON'T_HAVE_ANYTHING_STRONG_ENOUGH_TO_OPEN_THE_SARCOPHAGUS.
PS_96:
776B: 14 C7 DE 09 15 E6 96 9B 15 5B CA A3 48 63 BE AB
777B: 98 0C BA 11 A0 30 15 29 A1 16 71 D1 9C F0 A4 82
778B: 17 55 5E 2D 49 62 A0 87 47 53 2E 00

; I_DON'T_KNOW_HOW_TO_LOCK_OR_UNLOCK_SUCH_A_THING.
PS_97:
7797: 10 46 77 05 A0 0D BC 09 9A A9 15 D6 CE CE 9C 5D
77A7: 9E C4 16 B0 17 75 8D D5 83 DA C3 7B 14 63 BE CF
77B7: 98 00

; THE_BIRD_STATUE_IS_NOW_DEAD.__ITS_BODY_DISAPPEARS.
PS_98:
77B9: 10 5F BE B3 14 33 B1 FB B9 67 C0 D5 15 99 16 C6
77C9: CE 86 5F 3B F4 8D 7B B9 14 FB 5C 95 5A EA 48 94
77D9: 5F 53 2E 00

; THE_STONE_IS_VERY_STRONG_AND_IS_IMPERVIOUS_TO_ATTACK.
PS_99:
77DD: 11 5F BE 66 17 0F A0 D5 15 CF 17 7B B4 0C BA 11
77ED: A0 90 14 0B 58 CB B5 DF 93 13 B4 35 A1 89 17 96
77FD: 14 45 BD 4B 2E 00

; ATTACKING_THE_SERPENT_BOTH_DOESN'T_WORK_AND_IS_VERY_DANGEROUS.
PS_9A:
7803: 14 8E 49 DD 46 91 7A 82 17 55 5E 3A 62 9E 61 B9
7813: 14 53 BE 77 5B 05 B9 19 BC B5 A0 90 14 0B 58 D8
7823: B5 43 62 FB 14 B7 98 07 B3 53 2E 00

; 25	 YOU CAN'T BE SERIOUS!
;
; YOU_CAN'T_BE_SERIOUS!
PS_9B:
782F: 07 C7 DE D3 14 E6 96 AF 14 57 17 11 B2 49 C6 00

; IT_IS_BEYOND_YOUR_POWER_TO_DO_THAT.
PS_9C:
783F: 0B 73 7B 4B 7B 7B 4D 0E A0 51 18 23 C6 89 A6 23
784F: 62 6B BF 6B 5B 5B BE 54 2E 00

; THANK_YOU,_IT_WAS_DELICIOUS!
PS_9D:
7859: 09 5B BE 4B 99 C7 DE 0B EE 19 BC 4B 49 EE 59 DB
7869: 78 35 A1 21 00

; I_THINK_I_JUST_LOST_MY_APPETITE.
PS_9E:
786E: 0A 56 77 90 73 CB 83 FF 15 F3 B9 85 8D 0F BC 43
787E: DB 9F A6 96 BE 45 2E 00

; YOU_HAVE_TAKEN_A_DRINK_FROM_THE_STREAM.__THE_WATER_TASTES_______
; STRONGLY_OF_MINERALS,_BUT_IS_NOT_UNPLEASANT.__IT_IS_EXTREMELY___
; COLD.
PS_9F:
7886: 2C C7 DE 9B 15 5B CA 4D BD 83 61 46 45 10 B2 C8
7896: 83 FF B2 82 17 55 5E EF BF 7F 48 56 13 DB 72 16
78A6: D0 23 62 55 BD F5 BD 3B 13 3B 13 66 17 00 B3 D3
78B6: 6D B8 16 6B 16 74 98 4D 48 04 EE 73 C6 4B 7B 06
78C6: 9A B0 17 FF A5 53 49 D7 9A 4B 13 0B BC C7 B5 4C
78D6: D9 67 61 FB 8E 45 13 BE 9F 2E 00

; IT'S_NOT_HUNGRY.__BESIDES,_YOU_HAVE_NO_BIRD_SEED.
PS_A0:
78E1: 10 75 7B D0 B5 F3 A0 70 75 C3 6E 3B F4 75 4D FF
78F1: 78 33 BB C7 DE 9B 15 5B CA EB 99 14 4E 15 58 26
7901: 60 2E 00

; 23	 YOU FELL INTO A PIT AND BROKE EVERY BONE IN YOUR BODY!
;
; YOU_FELL_INTO_A_PIT_AND_BROKE_EVERY_BONE_IN_YOUR_BODY.
PS_A1:
7904: 12 C7 DE 4F 15 F3 8C 9E 7A C3 9C E3 16 03 BC 33
7914: 98 79 4F 9B 85 CF 62 7B B4 00 4F 4B 5E 9B 96 34
7924: A1 B9 14 1F 5D 20 00

; 45	 THE LITTLE BIRD IS NOW DEAD. ITS BODY DISAPPEARS.
;
; THE_SERPENT_HAS_NOW_DEVOURED_YOUR_BIRD_STATUE.
PS_A2:
792B: 0F 5F BE 57 17 1F B3 B3 9A 55 72 99 16 C6 CE D9
793B: 62 2F C6 1B 58 34 A1 B3 14 33 B1 FB B9 67 C0 2E
794B: 00

; THERE_IS_NOTHING_HERE_IT_WANTS_TO_EAT_-_EXCEPT_PERHAPS_YOU.
PS_A3:
794C: 13 5F BE 5B B1 4B 7B 06 9A 90 73 CA 6A 2F 62 D6
795C: 15 F3 17 CD 9A 89 17 23 15 1D BC 3A 15 B2 53 12
796C: BC 32 62 ED 48 51 18 55 2E 00

; 16	 IT IS NOW PITCH BLACK. IF YOU PROCEED YOU WILL LIKELY
; 16	 FALL INTO A PIT.
;
; IT_IS_NOW_PITCH_DARK.__IF_YOU_PROCEED,_YOU_WILL_LIKELY_FALL_INTO
; A_PIT.
PS_A4:
7976: 17 73 7B 4B 7B 09 9A E3 16 9A BD FB 14 6F B2 4B
7986: 13 9B 64 1B A1 F9 A6 A7 53 73 5D C7 DE FB 17 F3
7996: 8C 8D 8C 53 61 4B 15 F3 8C 9E 7A FB 9D 96 A5 2E
79A6: 00

; I'M_GAME.__WOULD_YOU_CARE_TO_EXPLAIN_HOW?
PS_A5:
79A7: 0D 9F 77 73 15 3F 92 59 13 2E A1 1B 58 1B A1 14
79B7: 53 56 5E C7 9C A6 D8 D0 47 A9 15 57 3F 00

; YOUR_LAMP_IS_GETTING_DIM.__YOU'D_BEST_START_WRAPPING_THIS_UP,___
; UNLESS_YOU_CAN_FIND_SOME_FRESH_BATTERIES.__I_SEEM_TO_RECALL_____
; THERE_IS_A_VENDING_MACHINE_IN_THE_MAZE.__BRING_SOME_COINS_WITH__
; YOU.
PS_A6:
79C5: 41 C7 DE 8E AF 72 48 D5 15 77 15 43 C0 AB 98 8F
79D5: 5A 3B F4 C7 DE 73 21 75 4D 15 BC 54 BD 19 BC D2
79E5: B0 90 A5 D6 6A 95 73 B2 17 FB ED B0 17 F5 8B DB
79F5: B5 1B A1 10 53 53 15 33 98 3F B9 48 5E 75 B1 04
7A05: 71 8E 49 33 62 6F 62 4B 13 57 17 5B 61 6B BF 65
7A15: B1 46 48 3B 13 56 13 F4 72 4B 5E C3 B5 CF 17 43
7A25: 98 AB 98 85 91 90 73 4B 5E 96 96 DB 72 9C 91 DB
7A35: 63 BC 14 91 7A 61 17 1B 92 3B 55 8B 9A 56 D1 FB
7A45: 70 C7 DE 2E 00

; YOUR_LAMP_HAS_RUN_OUT_OF_POWER.
PS_A7:
7A4A: 0A C7 DE 8E AF 72 48 9B 15 D4 B5 83 C5 36 A1 B8
7A5A: 16 E9 16 B4 D0 2E 00

; THE_PLANT_HAS_EXCEPTIONALLY_DEEP_ROOTS_AND_CANNOT_BE_PULLED_____
; FREE.
PS_A8:
7A61: 17 5F BE E6 16 9E 48 9B 15 C7 B5 97 D6 43 A7 0B
7A71: A0 13 8D FF 14 D3 61 01 B3 0B C0 8E 48 D3 14 D9
7A81: 99 04 BC 52 5E 46 C5 F3 5F 3B 13 5C 15 3F 60 00

; YOUR_LAMP_IS_GETTING_DIM.__I'M_TAKING_THE_LIBERTY_OF_REPLACING__
; THE_BATTERIES.
PS_A9:
7A91: 1A C7 DE 8E AF 72 48 D5 15 77 15 43 C0 AB 98 8F
7AA1: 5A 3B F4 9F 77 7B 17 50 86 D6 6A DB 72 84 8C 3E
7AB1: 62 51 DB 94 64 E6 61 DB 46 AB 98 82 17 44 5E 8E
7AC1: 49 33 62 6F 62 00

; 26	 THE BIRD WAS UNAFRAID WHEN YOU ENTERED, BUT AS YOU APPROACH
; 26	 IT BECOMES DISTURBED AND YOU CANNOT CATCH IT.
;
; AS_YOU_APPROACH_THE_STATUE,_IT_COMES_TO_LIFE_AND_FLIES_ACROSS___
; THE_CHAMBER_WHERE_IT_LANDS_AND_RETURNS_TO_STONE.
PS_AA:
7AC7: 25 4B 49 C7 DE 92 14 F9 A6 DA 46 82 17 55 5E 56
7AD7: BD 3E C4 D6 15 E1 14 35 92 89 17 43 16 5B 66 8E
7AE7: 48 56 15 35 79 85 14 05 B3 BB B5 82 17 45 5E 4F
7AF7: 72 74 4D FA 17 2F 62 D6 15 3B 16 4D 98 90 14 14
7B07: 58 8F 62 DD B2 89 17 66 17 0F A0 2E 00

; woods27	 YOU CAN CATCH THE BIRD, BUT YOU CANNOT CARRY IT.
;
; YOU_CAN_LIFT_THE_STATUE,_BUT_YOU_CANNOT_CARRY_IT.
PS_AB:
7B14: 10 C7 DE D3 14 8E 96 5E 79 82 17 55 5E 56 BD 3E
7B24: C4 BF 14 1B BC 1B A1 10 53 06 9A D3 14 83 B3 D6
7B34: 15 2E 00

; YOUR_BOTTLE_IS_ALREADY_FULL.
PS_AC:
7B37: 09 C7 DE 84 AF 0E A1 DB 8B 4B 7B 4C 48 86 5F 48
7B47: DB 46 C5 2E 00

; _____SUDDENLY,_A_MUMMY_CREEPS_UP_BEHIND_YOU!!______"I'M_THE_____
; KEEPER_OF_THE_TOMB",__HE_WAILS,_"I_TAKE_THESE_TREASURES_AND_PUT_
; THEM_IN_THE_CHEST_DEEP_IN_THE_MAZE!"__HE_GRABS_YOUR_TREASURE_AND
; VANISHES_INTO_THE_GLOOM.
PS_AD:
7B4C: 48 3B 13 55 13 FE C3 96 61 B3 E0 4F 45 6F C5 45
7B5C: DB 67 B1 0B A7 D3 C5 6A 4D 8E 7A 51 18 E9 C1 3B
7B6C: 13 3B 13 FD 1B 56 90 DB 72 3B 13 17 16 DF 61 91
7B7C: AF 96 64 DB 72 7F BF C6 4B 4A 13 59 5E CE 47 33
7B8C: BB FB 1B 4D BD 56 5E F5 72 56 5E 63 B1 34 BA 4B
7B9C: 62 8E 48 EF 16 16 BC EF 72 D0 15 82 17 45 5E F5
7BAC: 72 06 BC 32 60 D0 15 82 17 4F 5E 6F 4A E3 06 9F
7BBC: 15 84 15 BD 46 51 18 23 C6 EF BF 67 49 5B B1 8E
7BCC: 48 D0 C9 5A 7B 4B 62 9E 7A D6 9C DB 72 C9 6D FF
7BDC: 9F 00

; THE_STONE_BRIDGE_HAS_RETRACTED!
PS_AE:
7BDE: 0A 5F BE 66 17 0F A0 BC 14 01 79 4A 5E 4B 49 76
7BEE: B1 C5 B0 E6 BD 21 00

; 112	 A CRYSTAL BRIDGE NOW SPANS THE FISSURE.
;
; A_STONE_BRIDGE_NOW_SPANS_THE_BOTTOMLESS_PIT.
PS_AF:
7BF5: 0E 55 45 80 BF 44 5E 06 B2 9B 6C 09 9A 62 17 9D
7C05: 48 82 17 44 5E 0E A1 EE 9F 65 62 E3 16 54 2E 00

; THE_VASE_IS_NOW_RESTING,_DELICATELY,_ON_A_VELVET_PILLOW.
PS_B0:
7C15: 12 5F BE CB 17 9B B7 4B 7B 09 9A 2F 17 03 BA CE
7C25: 98 FF 14 85 8C 7F 49 1E 8F C0 16 7B 14 6E CA 76
7C35: CA E3 16 09 8D 57 2E 00

; THE_VASE_DROPS_WITH_A_DELICATE_CRASH.
PS_B1:
7C3D: 0C 5F BE CB 17 9B B7 F9 5B 0B A7 56 D1 03 71 FF
7C4D: 14 85 8C 7F 49 E4 14 5A 49 2E 00

; THERE_ARE_NOW_SOME_FRESH_BATTERIES_HERE.
PS_B2:
7C58: 0D 5F BE 5B B1 2F 49 99 16 D5 CE E7 9F 5C 15 5A
7C68: 62 AB 14 3F C0 07 B2 CA B5 2F 62 2E 00

; YOU_HAVE_TAKEN_THE_VASE_AND_HURLED_IT_DELICATELY_TO_THE_GROUND.
PS_B3:
7C75: 15 C7 DE 9B 15 5B CA 4D BD 83 61 5F BE CB 17 9B
7C85: B7 8E 48 AF 15 7F B2 0B 58 06 BC 43 61 16 53 53
7C95: 61 89 17 82 17 49 5E 07 B3 57 98 00

; 30	 THE LITTLE BIRD ATTACKS THE GREEN SNAKE, AND IN AN
; 30	 ASTOUNDING FLURRY DRIVES THE SNAKE AWAY.
;
; THE_BIRD_STATUE_COMES_TO_LIFE_AND_ATTACKS_THE_SERPENT_AND_IN_AN_
; ASTOUNDING_FLURRY,_DRIVES_THE_SERPENT_AWAY.__THE_BIRD_TURNS_BACK
; INTO_A_STATUE.
PS_B4:
7CA1: 2F 5F BE B3 14 33 B1 FB B9 67 C0 E1 14 35 92 89
7CB1: 17 43 16 5B 66 8E 48 96 14 45 BD CB 87 5F BE 57
7CC1: 17 1F B3 B3 9A 8E 48 D0 15 90 14 95 14 87 BF 43
7CD1: 98 AB 98 8F 67 83 B3 06 EE 18 B2 4B 62 5F BE 57
7CE1: 17 1F B3 B3 9A F3 49 DB E0 82 17 44 5E 2E 7B 8F
7CF1: 17 DD B2 AB 14 9B 54 C9 9A 7B 14 FB B9 67 C0 2E
7D01: 00

; THE_PLANT_SPURTS_INTO_FURIOUS_GROWTH_FOR_A_FEW_SECONDS.
PS_B5:
7D02: 12 5F BE E6 16 9E 48 62 17 3E C6 CB B5 C9 9A 5F
7D12: 15 11 B2 4B C6 B9 6E 02 D3 59 15 83 AF 4F 15 D5
7D22: CE E1 5F 4D 98 2E 00

; THE_PLANT_GROWS_EXPLOSIVELY,_ALMOST_FILLING_THE_BOTTOM_OF_THE___
; PIT.
PS_B6:
7D29: 16 5F BE E6 16 9E 48 84 15 85 A1 3A 15 09 A6 58
7D39: B8 53 61 03 EE 31 8D F3 B9 0E 67 90 8C D6 6A DB
7D49: 72 06 4F 7F BF B8 16 82 17 3B 5E E3 16 54 2E 00

; YOU'VE_OVER-WATERED_THE_PLANT!__IT'S_SHRIVELING_UP!
PS_B7:
7D59: 11 C7 DE 4F 24 C8 16 45 62 16 D0 2F 62 16 58 DB
7D69: 72 FB A5 B1 9A 4B 13 65 BC 5A 17 18 B2 43 61 AB
7D79: 98 D1 C5 00

; THERE_IS_NOTHING_HERE_TO_CLIMB.__USE_UP_OR_OUT_TO_LEAVE_THE_PIT.
PS_B8:
7D7D: 15 5F BE 5B B1 4B 7B 06 9A 90 73 CA 6A 2F 62 89
7D8D: 17 DE 14 64 7A 3B F4 57 C6 B2 17 C4 16 C7 16 16
7D9D: BC CE 9C 98 5F 56 5E DB 72 96 A5 2E 00

; OH_DEAR,_YOU_SEEM_TO_HAVE_GOTTEN_YOURSELF_KILLED.__I_MIGHT_BE___
; ABLE_TO_HELP_YOU_OUT,_BUT_I'VE_NEVER_REALLY_DONE_THIS_BEFORE.___
; DO_YOU_WANT_ME_TO_TRY_TO_REINCARNATE_YOU?
PS_B9:
7DAA: 38 13 9F E3 59 F3 B4 C7 DE 57 17 5B 61 6B BF 58
7DBA: 72 49 5E 0E A1 83 61 C7 DE 97 B3 03 8C 4E 86 E6
7DCA: 8B 3B F4 4F 77 7A 79 04 BC 3B 5E 84 14 DB 8B 6B
7DDA: BF EE 72 1B A3 1B A1 36 A1 04 EE 73 C6 A8 77 50
7DEA: 5E CF 62 94 AF 8E 5F FB 8E 80 5B 56 5E 95 73 AF
7DFA: 14 04 68 DB 63 46 13 DB 9C 1B A1 10 D0 0F BC 56
7E0A: 5E D6 9C 7B B4 6B BF 6B B1 13 98 CB B2 DB BD C7
7E1A: DE 3F 00

; YOU_CLUMSY_OAF,_YOU'VE_DONE_IT_AGAIN!__I_DON'T_KNOW_HOW_LONG_I__
; CAN_KEEP_THIS_UP.__DO_YOU_WANT_ME_TO_TRY_REINCARNATING_YOU______
; AGAIN?
PS_BA:
7E1D: 2C C7 DE DE 14 75 C5 51 DB 66 47 51 18 A8 C2 46
7E2D: 5E 0F A0 D6 15 89 14 D0 47 BB 06 46 77 05 A0 0D
7E3D: BC 09 9A A9 15 CE CE 11 A0 BB 15 D3 14 8D 96 32
7E4D: 60 82 17 4B 7B F7 C5 46 13 DB 9C 1B A1 10 D0 0F
7E5D: BC 56 5E D6 9C 7B B4 6B B1 13 98 CB B2 90 BE DB
7E6D: 6A 1B A1 3B 13 43 13 0B 6C 4E 3F 00

; I_SEEM_TO_BE_OUT_OF_ORANGE_SMOKE.__HOW_CAN_I_REINCARNATE_YOU____
; WITHOUT_ORANGE_SMOKE?
PS_BB:
7E79: 1C 55 77 2F 60 89 17 AF 14 C7 16 11 BC 91 64 D0
7E89: B0 9B 6C F1 B8 BF 85 4A 13 6B A1 10 53 BB 15 6B
7E99: B1 13 98 CB B2 DB BD C7 DE 3B 13 FB 17 69 BE 73
7EA9: C6 AB A0 B7 98 5F 17 97 9F 3F 00

; ALL_RIGHT.__BUT_DON'T_BLAME_ME_IF_SOMETHING_GOES_WR.............
; ______________________----__POOF_!!__----_______________________
; YOU_ARE_ENGULFED_IN_A_CLOUD_OF_ORANGE_SMOKE.__COUGHING_AND______
; GASPING,_YOU_EMERGE_FROM_THE_SMOKE.
PS_BC:
7EB4: 4B 46 48 33 17 2E 6D 3B F4 F6 4F 09 15 E6 96 B6
7EC4: 14 67 48 67 16 C8 15 61 17 36 92 90 73 C9 6A B5
7ED4: 9E 04 18 FF F9 FF F9 FF F9 FF F9 3B F4 3B 13 3B
7EE4: 13 3B 13 3B 13 3B 13 3B 13 5D 13 2D ED 52 13 38
7EF4: A0 E9 12 5D 13 2D ED 3B 13 3B 13 3B 13 3B 13 3B
7F04: 13 3B 13 3B 13 5B 13 1B A1 2F 49 30 15 2E 6F 66
7F14: 66 D0 15 7B 14 C9 54 F3 C3 C3 9E AB A0 B7 98 5F
7F24: 17 97 9F 3B F4 47 55 23 6D AB 98 8E 48 3B 13 3B
7F34: 13 15 6C 90 A5 33 70 C7 DE 2F 15 31 62 48 5E FF
7F44: B2 82 17 55 5E BD 93 45 2E 00

; OKAY,_NOW_WHERE_DID_I_PUT_MY_ORANGE_SMOKE?..._>POOF!<___________
; EVERYTHING_DISAPPEARS_IN_A_DENSE_CLOUD_OF_ORANGE_SMOKE.
PS_BD:
7F4E: 27 93 9F B3 E0 09 9A FA 17 2F 62 03 15 0B 58 EF
7F5E: 16 0F BC 51 DB D0 B0 9B 6C F1 B8 98 85 FF F9 F2
7F6E: 13 38 A0 33 07 3B 13 3B 13 3B 13 38 15 43 62 63
7F7E: BE AB 98 95 5A EA 48 94 5F CB B5 83 96 FF 14 97
7F8E: 9A DE 14 26 A1 B8 16 C4 16 91 48 55 5E BD 93 45
7F9E: 2E 00

; READY_CASSETTE
PS_BE:
7FA0: 04 63 B1 FB 5C 15 53 B6 B7 54 45 00

; CHECKSUM_ERROR
PS_BF:
7FAC: 04 1F 54 A5 54 5B C5 3C 62 4F 52 00

; OH,_NO!__I_LOST_MY_COMPASS.__I_NO_LONGER_SEEM_TO_KNOW_WHICH_WAY_
; IS_NORTH!
PS_C0:
7FB8: 18 36 9F 99 16 BB 06 4E 77 E6 A0 7B 16 E1 14 DB
7FC8: 93 EF B9 4B 13 99 16 49 16 B7 98 95 AF 2F 60 89
7FD8: 17 20 16 6B A1 23 D1 13 54 1B D0 D5 15 99 16 C2
7FE8: B3 21 00

Some bytes on the end of the tape:

39 00 39 00 39 00 39 00 39 00 39 00 39 00 39 00 39 00 39 00 47 78 00 43 FF FF