Prev: A5FB Up: Map Next: A86E
A7AA: Event: The Deep Bog
Prints that you are sinking into the bog, and the bog can be fatal. The deep bog record at CAA0 calls this.
Test the flag.
Event_TheDeepBog A7AA LD A,($C12B) Jump to Event_TheDeepBog_PrintTheSinking if *C12B is not 1D.
A7AD CP $1D
A7AF JR NZ,Event_TheDeepBog_PrintTheSinking
A7B1 SUB A Clear the byte at CAA1.
A7B2 LD ($CAA1),A Store the result at CAA1.
Say "You are slowly sink(s|d|ing|es) into the bog".
Event_TheDeepBog_PrintTheSinking A7B5 LD HL,$B153 Point HL at the message and call PrintMessage.
A7B8 CALL PrintMessage
A7BB LD A,($CAA1) Return if the deep bog script is not zero.
A7BE CP $00
A7C0 RET NZ
A7C1 JP YouAreDead Jump to YouAreDead to end the game.
Test whose turn it is.
Reached through the action list of $03 - "Curious Map" for action 1C, dispatched by TriggerAction.
A7C4 LD A,($B6EA) Jump to Action_Examine if *CurrentCharacter is not 41.
A7C7 CP $41
A7C9 JP NZ,Action_Examine
If the message is held back, the sinking message is not printed.
A7CC CALL ConditionSuppressTheMessage Call ConditionSuppressTheMessage. If the message is held back, the sinking message is not printed.
A7CF LD IY,$0000 Point IY at the extra-exit entry (97CF writes this address into A7D1).
A7D3 LD L,(IY+$01) Read the low byte of this extra exit's direction token.
A7D6 LD H,(IY+$02) Read the high byte of this extra exit's direction token.
Test the flag.
A7D9 LD A,($B6F1) Jump to Event_TheDeepBog_ReadTheDestination if *B6F1 is not 00.
A7DC CP $00
A7DE JR NZ,Event_TheDeepBog_ReadTheDestination
A7E0 LD B,$03 Count 03 passes.
Event_TheDeepBog_ReadTheExtraByte A7E2 LD A,(IY+$03) Read the next byte of this extra exit.
A7E5 LD (HL),A Store it at B153 and step on.
A7E6 INC HL
A7E7 INC IY Step to the next byte of this extra exit.
A7E9 DJNZ Event_TheDeepBog_ReadTheExtraByte Loop back to Event_TheDeepBog_ReadTheExtraByte until 03 runs out.
A7EB LD IY,($A7D1) Read the extra-exit pointer saved at A7D1.
Event_TheDeepBog_ReadTheDestination A7EF LD A,(IY+$05) Read the destination from this extra exit.
Find the location's record.
A7F2 CALL LocateLocation Call LocateLocation to locate location.
A7F5 INC IX Step IX on to the location's name.
A7F7 INC IX
A7F9 PUSH IX Save the location's name and read the location from this extra exit.
A7FB LD A,(IY+$00)
Find the location's record.
A7FE CALL LocateLocation Call LocateLocation to locate location.
A801 INC IX Step IX on to the location's name.
A803 INC IX
A805 PUSH IX Save that name and read the direction from this extra exit.
A807 LD A,(IY+$03)
A80A CALL ExitsTheDirectionWord Call ExitsTheDirectionWord to describe the direction word.
A80D PUSH DE Point HL at "{5} go[0x01] from[0x00] to{5} get to[0x00]".
A80E LD HL,$B1D0
A811 JP Response_YouSay Jump back to Response_YouSay to print the way from here to there.
Reached through the action list of $12 - "Rope" for action 2B, dispatched by TriggerAction.
A814 LD A,($B6E9) Read *B6E9.
A817 CALL ExitsFindTheExitThroughAnObject_0 Call ExitsFindTheExitThroughAnObject_0 to find the exit through the object in A.
A81A CP $FF Jump back to ResponseThatWillNotWork if no exit runs through this object.
A81C JP Z,ResponseThatWillNotWork
If the message is held back, the fatal bog is not described.
A81F CALL ConditionSuppressTheMessage Call ConditionSuppressTheMessage. If the message is held back, the fatal bog is not described.
Say "it sail(s|d|ing|es) across and.".
A822 LD HL,$AF66 Point HL at the message and call PrintMessage.
A825 CALL PrintMessage
A828 LD A,($C62B) Jump to Event_TheDeepBog_PrintTheShortFall if the location of $29 - "Wooden Boat" is not this exit's destination.
A82B CP (IX+$02)
A82E JR NZ,Event_TheDeepBog_PrintTheShortFall
A830 CALL Event_ARandomHalf Call Event_ARandomHalf to roll a random half.
A833 JR C,Event_TheDeepBog_LandTheRopeInTheBoat Jump to Event_TheDeepBog_LandTheRopeInTheBoat if the roll was below half.
A835 LD HL,$AF76 Point HL at "fall(s|d|ing|es) just short of the other side".
A838 CALL Event_ARandomHalf Call Event_ARandomHalf to roll a random half.
A83B JR C,Event_TheDeepBog_PrintTheMessage Jump to Event_TheDeepBog_PrintTheMessage if the roll was below half.
A83D LD HL,$AF82 Point HL at "[0x0b][0x08] but slide(s|d|ing|es) out again".
A840 JR Event_TheDeepBog_PrintTheMessage Jump to Event_TheDeepBog_PrintTheMessage to print "but slide(s|d|ing|es) out again".
Event_TheDeepBog_LandTheRopeInTheBoat A842 LD A,$12 Put the rope (12) into the boat's container at C61C.
A844 LD ($C61C),A
A847 LD HL,$AF8B Point HL at "lands in the boat".
A84A JR Event_TheDeepBog_PrintTheMessage Jump to Event_TheDeepBog_PrintTheMessage to print "lands in the boat".
Event_TheDeepBog_PrintTheShortFall A84C LD HL,$AF76 Point HL at "fall(s|d|ing|es) just short of the other side".
A84F CALL Event_ARandomHalf Call Event_ARandomHalf to roll a random half.
A852 JR C,Event_TheDeepBog_PrintTheMessage Jump to Event_TheDeepBog_PrintTheMessage if Event_ARandomHalf rolled below 32.
A854 LD A,(IX+$02) Read this exit's destination.
A857 LD IX,($B708) Read *B708.
A85B LD (IX+$10),A Update the object's location.
A85E LD (IX+$01),$FF Mark where this object is as unset.
A862 LD A,($B6E8) Read *CurrentObject.
A865 CALL Object_MoveContents_0 Call Object_MoveContents_0 to move what is inside the current object to the location in B.
A868 LD HL,$AF6D Point HL at "lands on the other side".
Event_TheDeepBog_PrintTheMessage A86B JP PrintMessage Jump to PrintMessage to print the message at HL.
Prev: A5FB Up: Map Next: A86E