Prev: FC98 Up: Map Next: FD02
FCCD: Action: Unlock
Action_Unlock FCCD CALL Parser_ValidateDirectObject Call Parser_ValidateDirectObject.
FCD0 RET C Return if the direct object is malformed.
Was the player trying to unlock the door?
FCD1 LD HL,$EAE6 Call MatchPhraseTokens with PhraseTokens_Door_2.
FCD4 CALL MatchPhraseTokens
FCD7 JR NZ,Unlock_Invalid Jump to Unlock_Invalid if the token isn't for the door.
The player was trying to unlock the door, but is the door even in the current room?
FCD9 LD A,($BCCB) Jump to Response_YouCant_Duplicate if *CurrentRoom is room 6A: " The Mighty Rock Door".
FCDC CP $6A
FCDE JP Z,Response_YouCant_Duplicate
It's the correct door, but is it already unlocked?
FCE1 LD A,$2E Call ValidateItemPresent with "A closed door".
FCE3 CALL ValidateItemPresent
FCE6 JP NZ,Response_YouveDoneThatAlready Jump to Response_YouveDoneThatAlready if "A closed door" isn't in the current room.
And does the player have the key?
FCE9 LD A,$1F Call CheckObjectInInventory with item 1F: "A key".
FCEB CALL CheckObjectInInventory
FCEE JR Z,Unlock_Door Jump to Unlock_Door if the key is either in the room, or in the players inventory.
Print "You haven't got the key.".
FCF0 LD HL,$E604 HL=Messaging_YouHaventGotTheKey.
FCF3 JP PrintStringAndNewline_Alias Jump to PrintStringAndNewline_Alias.
Change the door state!
Unlock_Door FCF6 LD BC,$2E2D Call TransformItem to transform item 2E ("A closed door") into item 2D ("A closed door").
FCF9 CALL TransformItem
FCFC JP Response_OK_Duplicate Jump to Response_OK_Duplicate.
Nothing else is valid.
Unlock_Invalid FCFF JP Response_YouCant_Duplicate Jump to Response_YouCant_Duplicate.
Prev: FC98 Up: Map Next: FD02