Prev: F246 Up: Map Next: F481
F263: Action: Take
Used by the routine at Action_Get.
Action_Take F263 CALL Parser_ValidateDirectObject Call Parser_ValidateDirectObject.
F266 RET C Return if the direct object is malformed.
Start by calling the chain of items to check...
F267 JP Validate_Take_BottleOfRum Jump to Validate_Take_BottleOfRum.
Check if the player is holding the requested item?
Take_IsPlayerHoldingItem F26A CALL CheckObjectInInventory Call CheckObjectInInventory.
F26D JR NZ,Action_Take_1 Jump to Action_Take_1 if A is not equal to 59.
F26F POP HL Restore HL from the stack.
Print "You're already carrying ".
F270 LD HL,$BF10 HL=Messaging_YoureAlreadyCarrying.
F273 CALL PrintString Call PrintString.
F276 LD HL,$F29B HL=Table_ItemsWhichArePlural.
F279 LD A,E A=E.
F27A LD BC,$0001 BC=0001.
F27D CPIR CPIR.
F27F JR Z,Action_Take_0 Jump to Action_Take_0 if A is equal to 59.
Print "it.".
F281 LD HL,$BF2B HL=Messaging_It.
F284 JP PrintStringAndNewline_Alias Jump to PrintStringAndNewline_Alias.
Print "them.".
Action_Take_0 F287 LD HL,$BF2F HL=Messaging_Them.
F28A JP PrintStringAndNewline_Alias Jump to PrintStringAndNewline_Alias.
Action_Take_1 F28D LD A,($BC98) Compare *Count_InventoryItems with 05...
F290 CP $05
F292 LD B,E B=E.
F293 RET NZ Return if *Count_InventoryItems is not equal to 05.
F294 POP HL Restore HL from the stack.
Print "You can't carry any more.".
F295 LD HL,$BF35 HL=Messaging_YouCantCarryAnyMore.
F298 JP PrintStringAndNewline_Alias Jump to PrintStringAndNewline_Alias.
Table: All the items in the game which are plural.
Which is ... the jewels.
Table_ItemsWhichArePlural F29B DEFB $1D Item 1D: "The Jewels of Babylon".
The player can take the item.
TakeItem F29C LD C,$01 Load C with 01 which indicates the item will be in the players inventory.
F29E CALL Handler_UpdateObjectLocation Call Handler_UpdateObjectLocation.
F2A1 LD HL,$BC98 Increment *Count_InventoryItems by one.
F2A4 INC (HL)
F2A5 JP Response_OK_Duplicate Jump to Response_OK_Duplicate.
Was the player trying to take the bottle of rum?
Validate_Take_BottleOfRum F2A8 LD HL,$E9E7 Call MatchPhraseTokens with PhraseTokens_BottleOfRum.
F2AB CALL MatchPhraseTokens
F2AE JR NZ,Validate_Take_Fish Jump to Validate_Take_Fish if the token isn't for the bottle of rum.
F2B0 LD HL,$E87A Call CheckActiveScenicEvents with Data_ItemGroup_Bottle_1.
F2B3 CALL CheckActiveScenicEvents
F2B6 CALL Take_IsPlayerHoldingItem Call Take_IsPlayerHoldingItem.
F2B9 JP TakeItem Jump to TakeItem.
Was the player trying to take the fish?
Validate_Take_Fish F2BC LD HL,$E9CC Call MatchPhraseTokens with PhraseTokens_Fish.
F2BF CALL MatchPhraseTokens
F2C2 JR NZ,Validate_Take_Watch Jump to Validate_Take_Watch if the token isn't for the fish.
F2C4 LD HL,$E895 Call CheckActiveScenicEvents with Data_ItemGroup_Fish.
F2C7 CALL CheckActiveScenicEvents
F2CA CALL Take_IsPlayerHoldingItem Call Take_IsPlayerHoldingItem.
F2CD JP TakeItem Jump to TakeItem.
Was the player trying to take the watch?
Validate_Take_Watch F2D0 LD HL,$E9D1 Call MatchPhraseTokens with PhraseTokens_Watch.
F2D3 CALL MatchPhraseTokens
F2D6 JR NZ,Validate_Take_Shoe Jump to Validate_Take_Shoe if the token isn't for the watch.
F2D8 LD A,$19 Call ValidateItemPresent with "The distracted natives".
F2DA CALL ValidateItemPresent
F2DD JR NZ,Action_Take_2 Jump to Action_Take_2 if "The distracted natives" isn't in the current room.
Print "That's not such a good idea.".
F2DF LD HL,$DB5F HL=DB5F.
F2E2 JP PrintStringAndNewline_Alias Jump to PrintStringAndNewline_Alias.
Action_Take_2 F2E5 LD A,$17 Call Take_IsPlayerHoldingItem with "A watch".
F2E7 CALL Take_IsPlayerHoldingItem
F2EA JP TakeItem Jump to TakeItem.
Was the player trying to take the shoe?
Validate_Take_Shoe F2ED LD HL,$E9D3 Call MatchPhraseTokens with PhraseTokens_Shoe.
F2F0 CALL MatchPhraseTokens
F2F3 JR NZ,Validate_Take_Fruit Jump to Validate_Take_Fruit if the token isn't for the shoe.
F2F5 LD A,$15 Call Take_IsPlayerHoldingItem with "A shoe".
F2F7 CALL Take_IsPlayerHoldingItem
F2FA JP TakeItem Jump to TakeItem.
Was the player trying to take the fruit?
Validate_Take_Fruit F2FD LD HL,$E9D7 Call MatchPhraseTokens with PhraseTokens_Fruit.
F300 CALL MatchPhraseTokens
F303 JR NZ,Validate_Take_Rod Jump to Validate_Take_Rod if the token isn't for the fruit.
F305 LD A,$0E Call Take_IsPlayerHoldingItem with "Some fruit".
F307 CALL Take_IsPlayerHoldingItem
F30A JP TakeItem Jump to TakeItem.
Was the player trying to take the rod?
Validate_Take_Rod F30D LD HL,$E9D5 Call MatchPhraseTokens with PhraseTokens_Rod.
F310 CALL MatchPhraseTokens
F313 JR NZ,Validate_Take_Jewels Jump to Validate_Take_Jewels if the token isn't for the rod.
F315 LD A,$08 Call Take_IsPlayerHoldingItem with "A rod".
F317 CALL Take_IsPlayerHoldingItem
F31A LD A,B A=B.
F31B CALL ValidateItemPresent Call ValidateItemPresent.
F31E LD B,$08 B=08.
F320 JP Z,TakeItem Jump to TakeItem if *HL is equal to 08.
F323 LD BC,$0A09 Call TransformItem to transform item 0A ("A hole with a rod inserted to the side of the door") into item 09 ("A small round hole to the side of the door").
F326 CALL TransformItem
F329 LD BC,$3132 Call TransformItem to transform item 31 ("The door is open") into item 32 ("The door is closed").
F32C CALL TransformItem
F32F LD BC,$3315 Call Handler_UpdateObjectLocation using item "A slab of rock" to create it in The Narrow Path.
F332 CALL Handler_UpdateObjectLocation
F335 XOR A Write 00 to *EB90 to remove access to The Mighty Rock Door from The Narrow Path.
F336 LD ($EB90),A
F339 LD ($ED8D),A Write 00 to *ED8D to remove access to The Narrow Path from The Mighty Rock Door.
F33C LD B,$08 B=08.
F33E CALL TakeItem Call TakeItem.
Print "The door rolls shut.".
F341 LD HL,$DB7C HL=DB7C.
F344 JP PrintStringAndNewline_Alias Jump to PrintStringAndNewline_Alias.
Was the player trying to take the jewels?
Validate_Take_Jewels F347 LD HL,$E9DB Call MatchPhraseTokens with PhraseTokens_Jewels.
F34A CALL MatchPhraseTokens
F34D JR NZ,Validate_Take_Match Jump to Validate_Take_Match if the token isn't for the jewels.
F34F LD A,$1D Call Take_IsPlayerHoldingItem with "The Jewels of Babylon".
F351 CALL Take_IsPlayerHoldingItem
F354 JP TakeItem Jump to TakeItem.
Was the player trying to take the match?
Validate_Take_Match F357 LD HL,$E9E1 Call MatchPhraseTokens with PhraseTokens_Match.
F35A CALL MatchPhraseTokens
F35D JR NZ,Validate_Take_Plank Jump to Validate_Take_Plank if the token isn't for the match.
F35F LD HL,$E86E Call CheckActiveScenicEvents with Data_ItemGroup_Match.
F362 CALL CheckActiveScenicEvents
F365 CALL Take_IsPlayerHoldingItem Call Take_IsPlayerHoldingItem.
F368 JP TakeItem Jump to TakeItem.
Was the player trying to take the plank?
Validate_Take_Plank F36B LD HL,$E9E3 Call MatchPhraseTokens with PhraseTokens_Plank.
F36E CALL MatchPhraseTokens
F371 JR NZ,Validate_Take_Coconut Jump to Validate_Take_Coconut if the token isn't for the plank.
F373 LD HL,$E871 Call CheckActiveScenicEvents with Data_ItemGroup_Plank.
F376 CALL CheckActiveScenicEvents
F379 CALL Take_IsPlayerHoldingItem Call Take_IsPlayerHoldingItem.
F37C LD A,B A=B.
F37D CP $04 Jump to TakeItem if A is equal to 04.
F37F JP Z,TakeItem
F382 LD A,$05 A=05 (event ID: 05).
F384 CALL Handler_DestroyItemEvent Call Handler_DestroyItemEvent.
F387 LD A,$06 A=06 (event ID: 06).
F389 CALL Handler_DestroyItemEvent Call Handler_DestroyItemEvent.
F38C LD B,$04 B=04.
F38E XOR A Write 00 to:
F38F LD ($ED75),A
F392 LD ($ED80),A
F395 JP TakeItem Jump to TakeItem.
Was the player trying to take the coconut?
Validate_Take_Coconut F398 LD HL,$E9E5 Call MatchPhraseTokens with PhraseTokens_Coconut.
F39B CALL MatchPhraseTokens
F39E JR NZ,Validate_Take_Gun Jump to Validate_Take_Gun if the token isn't for the coconut.
F3A0 LD A,$07 Call Take_IsPlayerHoldingItem with "A coconut".
F3A2 CALL Take_IsPlayerHoldingItem
F3A5 JP TakeItem Jump to TakeItem.
Was the player trying to take the gun?
Validate_Take_Gun F3A8 LD HL,$E9EF Call MatchPhraseTokens with PhraseTokens_Gun.
F3AB CALL MatchPhraseTokens
F3AE JR NZ,Validate_Take_Eyepatch Jump to Validate_Take_Eyepatch if the token isn't for the gun.
F3B0 LD A,$0F Call Take_IsPlayerHoldingItem with "A gun".
F3B2 CALL Take_IsPlayerHoldingItem
F3B5 LD A,$27 Call ValidateItemPresent with "A parrot (alive)".
F3B7 CALL ValidateItemPresent
F3BA JR Z,Action_Take_3 Jump to Action_Take_3 if "A parrot (alive)" is present in the current room.
F3BC LD A,$22 A=22 (event ID: 22).
F3BE CALL Handler_DestroyItemEvent Call Handler_DestroyItemEvent.
F3C1 LD A,$88 A=88.
F3C3 CALL ScenicEventTriggered Call ScenicEventTriggered.
F3C6 LD B,$0F B=0F.
F3C8 JP TakeItem Jump to TakeItem.
Bad luck!
Action_Take_3 F3CB LD HL,$EDD7 Switch GameOver onto the stack so the next return actions a "game over".
F3CE EX (SP),HL
Print "As you start to move, the parrot squawks... The pirate wakes and quickly shoots you.".
F3CF LD HL,$DBCC HL=DBCC.
F3D2 JP PrintStringAndNewline_Alias Jump to PrintStringAndNewline_Alias.
Was the player trying to take the eyepatch?
Validate_Take_Eyepatch F3D5 LD HL,$E9F1 Call MatchPhraseTokens with PhraseTokens_Eyepatch.
F3D8 CALL MatchPhraseTokens
F3DB JR NZ,Validate_Take_KegOfGunpowder Jump to Validate_Take_KegOfGunpowder if the token isn't for the eyepatch.
F3DD LD HL,$E885 Call CheckActiveScenicEvents with Data_ItemGroup_Eyepatch.
F3E0 CALL CheckActiveScenicEvents
F3E3 CALL Take_IsPlayerHoldingItem Call Take_IsPlayerHoldingItem.
F3E6 JP TakeItem Jump to TakeItem.
Was the player trying to take the keg of gunpowder?
Validate_Take_KegOfGunpowder F3E9 LD HL,$E9F3 Call MatchPhraseTokens with PhraseTokens_KegGunPowder.
F3EC CALL MatchPhraseTokens
F3EF JR NZ,Validate_Take_Sextant Jump to Validate_Take_Sextant if the token isn't for the keg of gunpowder.
F3F1 LD HL,$E888 Call CheckActiveScenicEvents with Data_ItemGroup_CrocodileWithKeg_1.
F3F4 CALL CheckActiveScenicEvents
F3F7 CALL Take_IsPlayerHoldingItem Call Take_IsPlayerHoldingItem.
F3FA LD A,B A=B.
F3FB CP $12 Compare A with 12.
F3FD JP Z,TakeItem Jump to TakeItem if A is equal to 12.
F400 JP Response_YouCant_Duplicate Jump to Response_YouCant_Duplicate.
Was the player trying to take the sextant?
Validate_Take_Sextant F403 LD HL,$E9FB Call MatchPhraseTokens with PhraseTokens_Sextant.
F406 CALL MatchPhraseTokens
F409 JR NZ,Validate_Take_Crowbar Jump to Validate_Take_Crowbar if the token isn't for the sextant.
F40B LD A,$16 Call Take_IsPlayerHoldingItem with "A sextant".
F40D CALL Take_IsPlayerHoldingItem
F410 JP TakeItem Jump to TakeItem.
Was the player trying to take the crowbar?
Validate_Take_Crowbar F413 LD HL,$E9FD Call MatchPhraseTokens with PhraseTokens_Crowbar.
F416 CALL MatchPhraseTokens
F419 JR NZ,Validate_Take_Key Jump to Validate_Take_Key if the token isn't for the crowbar.
F41B LD A,$1E Call Take_IsPlayerHoldingItem with "A crowbar".
F41D CALL Take_IsPlayerHoldingItem
F420 JP TakeItem Jump to TakeItem.
Was the player trying to take the key?
Validate_Take_Key F423 LD HL,$E9FF Call MatchPhraseTokens with PhraseTokens_Key.
F426 CALL MatchPhraseTokens
F429 JR NZ,Validate_Take_Skull Jump to Validate_Take_Skull if the token isn't for the key.
F42B LD A,$1F Call Take_IsPlayerHoldingItem with "A key".
F42D CALL Take_IsPlayerHoldingItem
F430 JP TakeItem Jump to TakeItem.
Was the player trying to take the skull?
Validate_Take_Skull F433 LD HL,$EA01 Call MatchPhraseTokens with PhraseTokens_Skull.
F436 CALL MatchPhraseTokens
F439 JR NZ,Validate_Take_Spear Jump to Validate_Take_Spear if the token isn't for the skull.
F43B LD A,$20 Call Take_IsPlayerHoldingItem with "A human skull".
F43D CALL Take_IsPlayerHoldingItem
F440 JP TakeItem Jump to TakeItem.
Was the player trying to take the spear?
Validate_Take_Spear F443 LD HL,$EA06 Call MatchPhraseTokens with PhraseTokens_Spear.
F446 CALL MatchPhraseTokens
F449 JR NZ,Validate_Take_Parrot Jump to Validate_Take_Parrot if the token isn't for the spear.
F44B LD HL,$E8A0 Call CheckActiveScenicEvents with Data_ItemGroup_CannibalsWithSpear.
F44E CALL CheckActiveScenicEvents
F451 CALL Take_IsPlayerHoldingItem Call Take_IsPlayerHoldingItem.
F454 LD A,B A=B.
F455 CP $1A Compare A with 1A.
F457 JP Z,TakeItem Jump to TakeItem if A is equal to 1A.
F45A JP Response_YouCant_Duplicate Jump to Response_YouCant_Duplicate.
Was the player trying to take the parrot?
Validate_Take_Parrot F45D LD HL,$EA08 Call MatchPhraseTokens with PhraseTokens_Parrot.
F460 CALL MatchPhraseTokens
F463 JR NZ,Take_Invalid Jump to Take_Invalid if the token isn't for the parrot.
F465 LD HL,$E8BC Call CheckActiveScenicEvents with Data_ItemGroup_Parrot.
F468 CALL CheckActiveScenicEvents
F46B CALL Take_IsPlayerHoldingItem Call Take_IsPlayerHoldingItem.
F46E LD A,B A=B.
F46F CP $28 Compare A with 28.
F471 JP Z,TakeItem Jump to TakeItem if A is equal to 28.
Bad luck!
F474 LD HL,$EDD7 Switch GameOver onto the stack so the next return actions a "game over".
F477 EX (SP),HL
Print "As you start to move, the parrot squawks... The pirate wakes and quickly shoots you.".
F478 LD HL,$DBCC HL=DBCC.
F47B JP PrintStringAndNewline_Alias Jump to PrintStringAndNewline_Alias.
Nothing else is valid.
Take_Invalid F47E JP Response_YouCant_Duplicate Jump to Response_YouCant_Duplicate.
Prev: F246 Up: Map Next: F481