Prev: F292 Up: Map Next: F5B6
F2A7: Action: Kill
Fight the opponent the player named.
Action_Kill F2A7 CALL Parser_ValidateTwoDirectObjects Call Parser_ValidateTwoDirectObjects.
F2AA RET C Return if the direct object is malformed.
F2AB JP Validate_Kill_ElfSword Jump to Validate_Kill_ElfSword.
Does the player hold the bow and some arrows?
Kill_CheckBowAndArrows F2AE LD A,$03 Call IsObjectCarried with item 03: "A bow".
F2B0 CALL IsObjectCarried
F2B3 JR NZ,Kill_NoBow Jump to Kill_NoBow if "A bow" isn't held.
F2B5 LD A,$04 Call IsObjectCarried with item 04: "Some arrows".
F2B7 CALL IsObjectCarried
F2BA RET Z Return if "Some arrows" is held.
Print "You have no arrows.".
F2BB LD HL,$DED1 HL=Messaging_YouHaveNoArrows.
F2BE JR Kill_WeaponReply Jump to Kill_WeaponReply.
Print "You're not carrying a bow.".
Kill_NoBow F2C0 LD HL,$DF29 HL=Messaging_YoureNotCarryingABow.
Kill_WeaponReply F2C3 POP DE Restore DE from the stack.
F2C4 JP PrintResponse Jump to PrintResponse.
Does the player hold the sword?
Kill_CheckSword F2C7 LD A,$0A Call IsObjectCarried with item 0A: "A sword".
F2C9 CALL IsObjectCarried
F2CC RET Z Return if "A sword" is held.
Print "You're not carrying the sword.".
F2CD LD HL,$DF72 HL=Messaging_YoureNotCarryingTheSword.
F2D0 POP DE Restore DE from the stack.
F2D1 JP PrintResponse Jump to PrintResponse.
Print "You fire an arrow:-".
Kill_AnnounceArrow F2D4 PUSH AF Stash AF on the stack.
F2D5 LD HL,$DEE5 HL=Messaging_YouFireAnArrow.
F2D8 JR Kill_ResolveAttack_Print Jump to Kill_ResolveAttack_Print.
Print "You swing the sword:-".
Kill_ResolveAttack F2DA PUSH AF Stash AF on the stack.
F2DB LD HL,$DF5C HL=Messaging_YouSwingTheSword.
Kill_ResolveAttack_Print F2DE CALL PrintStringAndNewline Call PrintStringAndNewline.
F2E1 POP AF Restore AF from the stack.
F2E2 AND A Return if this attack cannot miss.
F2E3 RET Z
F2E4 CALL GenerateRandomNumber Call GenerateRandomNumber.
F2E7 RET NZ Return if the blow lands.
Print "Bad luck.You missed.".
F2E8 LD HL,$DEF9 HL=Messaging_BadLuckYouMissed.
F2EB POP DE Restore DE from the stack.
F2EC JP PauseAndPrintResponse Jump to PauseAndPrintResponse.
Turn the defeated scenic event into its corpse.
Kill_ApplyCombatResult F2EF LD HL,$BB4D Call TransformItem to turn the defeated scenic event into its corpse.
F2F2 LD A,(HL)
F2F3 SUB $80
F2F5 ADD A,$13
F2F7 LD B,(HL)
F2F8 LD C,A
F2F9 CALL TransformItem
F2FC RET Return.
Turn the second defeated scenic event into its corpse.
Kill_ApplySecondCombatResult F2FD LD HL,$BB4D Call TransformItem to turn the second defeated scenic event into its corpse.
F300 LD A,(HL)
F301 SUB $83
F303 ADD A,$18
F305 LD B,(HL)
F306 LD C,A
F307 CALL TransformItem
F30A RET Return.
Was the player trying to kill ... the elf with the sword?
Validate_Kill_ElfSword F30B LD HL,$E87D Jump to Validate_Kill_ElfBow unless the player named the elf with the sword.
F30E CALL Parser_AdvanceToSeparator
F311 JR NZ,Validate_Kill_ElfBow
F313 LD HL,$E711 Call Parser_SkipToken to skip to the object named by this phrase.
F316 CALL Parser_SkipToken
F319 BIT 7,A Jump back to Response_HesAlreadyDead when the named opponent is already dead.
F31B JP Z,Response_HesAlreadyDead
F31E LD ($BB4D),A Call Kill_CheckSword.
F321 CALL Kill_CheckSword
F324 LD A,$0A Call Kill_ResolveAttack.
F326 CALL Kill_ResolveAttack
F329 CALL Kill_ApplyCombatResult Call Kill_ApplyCombatResult.
F32C LD A,($BB4D) Jump to Kill_ElfSword_Done unless the value 82 matches.
F32F CP $82
F331 JR NZ,Kill_ElfSword_Done
F333 LD A,$86 Remove object 86 (the centaur) from the game.
F335 CALL Handler_RemoveItemFromPlay
Kill_ElfSword_Done F338 LD HL,$DF44 Print "Your blow strikes true.".
F33B CALL PausePrintStringAndScroll
Print "The Elf is dead.".
F33E LD HL,$DFA3 HL=Messaging_TheElfIsDead.
F341 JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... the elf with the bow?
Validate_Kill_ElfBow F344 LD HL,$E881 Jump to Validate_Kill_WarriorSword unless the player named the elf with the bow.
F347 CALL Parser_AdvanceToSeparator
F34A JR NZ,Validate_Kill_WarriorSword
F34C LD HL,$E711 Call Parser_SkipToken to skip to the object named by this phrase.
F34F CALL Parser_SkipToken
F352 BIT 7,A Jump back to Response_HesAlreadyDead when the named opponent is already dead.
F354 JP Z,Response_HesAlreadyDead
F357 LD ($BB4D),A Call Kill_CheckBowAndArrows.
F35A CALL Kill_CheckBowAndArrows
F35D LD A,$05 Call Kill_AnnounceArrow.
F35F CALL Kill_AnnounceArrow
F362 CALL Kill_ApplyCombatResult Call Kill_ApplyCombatResult.
F365 LD A,($BB4D) Jump to Kill_ElfBow_Done unless the value 82 matches.
F368 CP $82
F36A JR NZ,Kill_ElfBow_Done
F36C LD A,$86 Remove object 86 (the centaur) from the game.
F36E CALL Handler_RemoveItemFromPlay
Kill_ElfBow_Done F371 LD HL,$DF0E Print "Well done! A perfect shot.".
F374 CALL PausePrintStringAndScroll
Print "The Elf is dead.".
F377 LD HL,$DFA3 HL=Messaging_TheElfIsDead.
F37A JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... the warrior with the sword?
Validate_Kill_WarriorSword F37D LD HL,$E885 Jump to Validate_Kill_WarriorBow unless the player named the dead warrior.
F380 CALL Parser_AdvanceToSeparator
F383 JR NZ,Validate_Kill_WarriorBow
F385 LD HL,$E71F Call Parser_SkipToken to skip to the object named by this phrase.
F388 CALL Parser_SkipToken
F38B BIT 7,A Jump back to Response_ItsAlreadyDead when the named opponent is already dead.
F38D JP Z,Response_ItsAlreadyDead
F390 LD ($BB4D),A Call Kill_CheckSword.
F393 CALL Kill_CheckSword
F396 LD A,$01 Call Kill_ResolveAttack.
F398 CALL Kill_ResolveAttack
F39B CALL Kill_ApplySecondCombatResult Call Kill_ApplySecondCombatResult.
F39E LD HL,$DF44 Print "Your blow strikes true.".
F3A1 CALL PausePrintStringAndScroll
Print "The lizard falls to the ground. It is dead.".
F3A4 LD HL,$DFB4 HL=Messaging_TheLizardFallsToTheGround.
F3A7 JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... the warrior with the bow?
Validate_Kill_WarriorBow F3AA LD HL,$E88E Jump to Validate_Kill_MonsterBow unless the player named the dead warrior.
F3AD CALL Parser_AdvanceToSeparator
F3B0 JR NZ,Validate_Kill_MonsterBow
F3B2 LD HL,$E71F Call Parser_SkipToken to skip to the object named by this phrase.
F3B5 CALL Parser_SkipToken
F3B8 BIT 7,A Jump back to Response_ItsAlreadyDead when the named opponent is already dead.
F3BA JP Z,Response_ItsAlreadyDead
F3BD LD ($BB4D),A Call Kill_CheckBowAndArrows.
F3C0 CALL Kill_CheckBowAndArrows
F3C3 LD A,$05 Call Kill_AnnounceArrow.
F3C5 CALL Kill_AnnounceArrow
F3C8 CALL Kill_ApplySecondCombatResult Call Kill_ApplySecondCombatResult.
F3CB LD HL,$DF0E Print "Well done! A perfect shot.".
F3CE CALL PausePrintStringAndScroll
Print "The lizard falls to the ground. It is dead.".
F3D1 LD HL,$DFB4 HL=Messaging_TheLizardFallsToTheGround.
F3D4 JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... the slime monster with the bow?
Validate_Kill_MonsterBow F3D7 LD HL,$E8A4 Jump to Validate_Kill_Dragon unless the player named the monster with the bow.
F3DA CALL Parser_AdvanceToSeparator
F3DD JR NZ,Validate_Kill_Dragon
F3DF CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
F3E2 LD A,$05 Call Kill_AnnounceArrow.
F3E4 CALL Kill_AnnounceArrow
F3E7 LD A,$1E Destroy "A monster from the slime".
F3E9 CALL Handler_DestroyItem
F3EC LD HL,$DF0E Print "Well done! A perfect shot.".
F3EF CALL PausePrintStringAndScroll
Print "The stricken monster slides back into the oozing slime.".
F3F2 LD HL,$E009 HL=Messaging_TheStrickenMonsterSlides.
F3F5 JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... the dragon?
Validate_Kill_Dragon F3F8 LD HL,$E897 Jump to Validate_Kill_WoodNymph unless the player named the glowing rock.
F3FB CALL Parser_AdvanceToSeparator
F3FE JR NZ,Validate_Kill_WoodNymph
F400 LD A,$16 Jump to Response_ItsAlreadyDead if "A dragon. It is watching you" is not here.
F402 CALL ValidateItemPresent
F405 JP NZ,Response_ItsAlreadyDead
F408 CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
F40B XOR A Call Kill_AnnounceArrow.
F40C CALL Kill_AnnounceArrow
F40F LD BC,$1617 Call TransformItem to transform "A dragon. It is watching you" into "A dead dragon".
F412 CALL TransformItem
Print "You have killed it.".
F415 LD HL,$DFE0 HL=Messaging_YouHaveKilledIt.
F418 JP PauseAndPrintResponse Jump to PauseAndPrintResponse.
Was the player trying to kill ... the wood nymph?
Validate_Kill_WoodNymph F41B LD HL,$E89B Jump to Validate_Kill_DemonsSword unless the player named a closed door.
F41E CALL Parser_AdvanceToSeparator
F421 JR NZ,Validate_Kill_DemonsSword
F423 LD A,$8A Jump to Response_ShesAlreadyDead if object 8A (the wood nymph) is not here.
F425 CALL ValidateItemPresent
F428 JP NZ,Response_ShesAlreadyDead
F42B CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
F42E XOR A Call Kill_AnnounceArrow.
F42F CALL Kill_AnnounceArrow
F432 LD BC,$8A1C Call TransformItem to transform 8A into "The body of a wood nymph".
F435 CALL TransformItem
F438 LD A,$89 Destroy object 89 (the nymph's glimpse).
F43A CALL Handler_DestroyItem
Print "You have killed her.".
F43D LD HL,$DFF4 HL=Messaging_YouHaveKilledHer.
F440 JP PauseAndPrintResponse Jump to PauseAndPrintResponse.
Was the player trying to kill ... the demons with the sword?
Validate_Kill_DemonsSword F443 LD HL,$E8A8 Jump to Validate_Kill_DemonsBow unless the player named the log bridge.
F446 CALL Parser_AdvanceToSeparator
F449 JR NZ,Validate_Kill_DemonsBow
F44B CALL Kill_CheckSword Call Kill_CheckSword.
F44E LD A,$0A Call Kill_ResolveAttack.
F450 CALL Kill_ResolveAttack
F453 LD A,$29 Destroy "Some demons are attacking you. They scream and jab at you with vicious tridents".
F455 CALL Handler_DestroyItem
This action changes the map:
F458 LD A,$49 Write 49 to *Exit_CavernEast to open up eastbound access to In a Rock Passage from The Cavern of Silence.
F45A LD ($EADA),A
Print "The demons scream with panic, then fade away.".
F45D LD HL,$E041 HL=Messaging_TheDemonsScreamWithPanic.
F460 JP PauseAndPrintResponse Jump to PauseAndPrintResponse.
Was the player trying to kill ... the demons with the bow?
Validate_Kill_DemonsBow F463 LD HL,$E8AC Jump to Validate_Kill_BlacksmithSword unless the player named the log bridge.
F466 CALL Parser_AdvanceToSeparator
F469 JR NZ,Validate_Kill_BlacksmithSword
F46B CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
Print "Arrows have no effect.".
F46E LD HL,$E06F HL=Messaging_ArrowsHaveNoEffect.
F471 JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... the blacksmith with the sword?
Validate_Kill_BlacksmithSword F474 LD HL,$E8B0 Jump to Validate_Kill_BlacksmithBow unless the player named the ring being worn.
F477 CALL Parser_AdvanceToSeparator
F47A JR NZ,Validate_Kill_BlacksmithBow
F47C LD A,$27 Jump to Response_HesAlreadyDead when "The body of the blacksmith" is here.
F47E CALL ValidateItemPresent
F481 JP Z,Response_HesAlreadyDead
F484 CALL Kill_CheckSword Call Kill_CheckSword.
F487 XOR A Call Kill_ResolveAttack.
F488 CALL Kill_ResolveAttack
Fight the Korl warrior.
Kill_BlacksmithBody F48B LD HL,$E77A Call Parser_SkipToken to skip to the object named by this phrase.
F48E CALL Parser_SkipToken
F491 LD B,A Call TransformItem to turn the warrior into the dead blacksmith.
F492 LD C,$27
F494 CALL TransformItem
Print "You have killed him.".
F497 LD HL,$E086 HL=Messaging_YouHaveKilledHim.
F49A JP PauseAndPrintResponse Jump to PauseAndPrintResponse.
Was the player trying to kill ... the blacksmith with the bow?
Validate_Kill_BlacksmithBow F49D LD HL,$E8B4 Jump to Validate_Kill_ZarnSword unless the player named the ring being worn.
F4A0 CALL Parser_AdvanceToSeparator
F4A3 JR NZ,Validate_Kill_ZarnSword
F4A5 LD A,$27 Jump to Response_HesAlreadyDead when "The body of the blacksmith" is here.
F4A7 CALL ValidateItemPresent
F4AA JP Z,Response_HesAlreadyDead
F4AD CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
F4B0 XOR A Call Kill_AnnounceArrow.
F4B1 CALL Kill_AnnounceArrow
F4B4 JP Kill_BlacksmithBody Jump back to Kill_BlacksmithBody to finish off the warrior.
Was the player trying to kill ... Zarn with the sword?
Validate_Kill_ZarnSword F4B7 LD HL,$E8B8 Jump to Validate_Kill_ZarnBow unless the player named the log bridge.
F4BA CALL Parser_AdvanceToSeparator
F4BD JR NZ,Validate_Kill_ZarnBow
F4BF LD A,$2A Jump to Response_HesAlreadyDead if "The Wizard,Zarn. He prepares to cast a spell over you" is not here.
F4C1 CALL ValidateItemPresent
F4C4 JP NZ,Response_HesAlreadyDead
F4C7 CALL Kill_CheckSword Call Kill_CheckSword.
F4CA LD A,$05 Call Kill_ResolveAttack.
F4CC CALL Kill_ResolveAttack
F4CF LD BC,$2A2B Call TransformItem to transform "The Wizard,Zarn. He prepares to cast a spell over you" into "The body of the Wizard".
F4D2 CALL TransformItem
F4D5 LD HL,$BA3F Arm Princess Mara's arrival, then pause and print "Your blow strikes true." and start a new line.
F4D8 SET 0,(HL)
F4DA LD HL,$DF44
F4DD CALL PausePrintStringAndScroll
Print "The Wizard falls to the floor. He is dead. The Princess says:- "My brave warrior,let us leave. Lead and I will follow."".
F4E0 LD HL,$E09B HL=Messaging_TheWizardFallsToTheFloor.
F4E3 JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... Zarn with the bow?
Validate_Kill_ZarnBow F4E6 LD HL,$E8BC Jump to Validate_Kill_PrincessSword unless the player named the log bridge.
F4E9 CALL Parser_AdvanceToSeparator
F4EC JR NZ,Validate_Kill_PrincessSword
F4EE LD A,$2A Jump to Response_HesAlreadyDead if "The Wizard,Zarn. He prepares to cast a spell over you" is not here.
F4F0 CALL ValidateItemPresent
F4F3 JP NZ,Response_HesAlreadyDead
F4F6 CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
Print "Arrows have no effect.".
F4F9 LD HL,$E06F HL=Messaging_ArrowsHaveNoEffect.
F4FC JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... Princess Mara with the sword?
Validate_Kill_PrincessSword F4FF LD HL,$E8C0 Jump to Validate_Kill_PrincessBow unless the player named the princess with the sword.
F502 CALL Parser_AdvanceToSeparator
F505 JR NZ,Validate_Kill_PrincessBow
F507 LD A,$2C Jump to Response_ShesAlreadyDead if "The Princess,Mara" is not here.
F509 CALL ValidateItemPresent
F50C JP NZ,Response_ShesAlreadyDead
F50F CALL Kill_CheckSword Call Kill_CheckSword.
F512 XOR A Call Kill_ResolveAttack.
F513 CALL Kill_ResolveAttack
Fight the witch.
Kill_PrincessBody F516 LD BC,$2C2D Call TransformItem to transform "The Princess,Mara" into "The body of the Princess".
F519 CALL TransformItem
F51C LD HL,$BA3F Stop Princess Mara appearing, then pause and print "You have killed her." and return to the game loop.
F51F RES 0,(HL)
F521 LD HL,$DFF4
F524 JP PauseAndPrintResponse
Was the player trying to kill ... Princess Mara with the bow?
Validate_Kill_PrincessBow F527 LD HL,$E8C4 Jump to Validate_Kill_WarriorSword2 unless the player named the princess with the bow.
F52A CALL Parser_AdvanceToSeparator
F52D JR NZ,Validate_Kill_WarriorSword2
F52F LD A,$2C Jump to Response_ShesAlreadyDead if "The Princess,Mara" is not here.
F531 CALL ValidateItemPresent
F534 JP NZ,Response_ShesAlreadyDead
F537 CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
F53A XOR A Call Kill_AnnounceArrow.
F53B CALL Kill_AnnounceArrow
F53E JP Kill_PrincessBody Jump back to Kill_PrincessBody to finish off the witch.
Was the player trying to kill ... the warrior with the sword?
Validate_Kill_WarriorSword2 F541 LD HL,$E8C8 Jump to Validate_Kill_WarriorBow2 unless the player named the warrior with the sword.
F544 CALL Parser_AdvanceToSeparator
F547 JR NZ,Validate_Kill_WarriorBow2
F549 LD A,$8C Jump to Response_HesAlreadyDead if object 8C is not here.
F54B CALL ValidateItemPresent
F54E JP NZ,Response_HesAlreadyDead
F551 CALL Kill_CheckSword Call Kill_CheckSword.
F554 LD A,$05 Call Kill_ResolveAttack.
F556 CALL Kill_ResolveAttack
F559 LD HL,$DF44 The sword lands, with "Your blow strikes true.".
Fight the blacksmith.
Kill_WarriorBody F55C CALL PausePrintStringAndScroll Call PausePrintStringAndScroll to pause, then print that message and start a new line.
F55F LD BC,$8C34 Call TransformItem to transform 8C into "A dead warrior".
F562 CALL TransformItem
Print "You have killed him.".
F565 LD HL,$E086 HL=Messaging_YouHaveKilledHim.
F568 JP PrintResponse Jump to PrintResponse.
Was the player trying to kill ... the warrior with the bow?
Validate_Kill_WarriorBow2 F56B LD HL,$E8D1 Jump to Validate_Kill_SpiderBow unless the player named the warrior with the bow.
F56E CALL Parser_AdvanceToSeparator
F571 JR NZ,Validate_Kill_SpiderBow
F573 LD A,$8C Jump to Response_HesAlreadyDead if object 8C is not here.
F575 CALL ValidateItemPresent
F578 JP NZ,Response_HesAlreadyDead
F57B CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
F57E LD A,$05 Call Kill_AnnounceArrow.
F580 CALL Kill_AnnounceArrow
F583 LD HL,$DF0E Print "Well done! A perfect shot." and strike the blacksmith.
F586 JP Kill_WarriorBody
Was the player trying to kill ... the giant spider with the bow?
Validate_Kill_SpiderBow F589 LD HL,$E8DA Jump to Kill_YouCant unless the player named the spider with the bow.
F58C CALL Parser_AdvanceToSeparator
F58F JR NZ,Kill_YouCant
F591 LD A,$41 Jump to Response_ItsAlreadyDead if "A giant spider. It advances toward you" is not here.
F593 CALL ValidateItemPresent
F596 JP NZ,Response_ItsAlreadyDead
F599 CALL Kill_CheckBowAndArrows Call Kill_CheckBowAndArrows.
F59C LD A,$05 Call Kill_AnnounceArrow.
F59E CALL Kill_AnnounceArrow
F5A1 LD BC,$4142 Call TransformItem to transform "A giant spider. It advances toward you" into "The body of a giant spider".
F5A4 CALL TransformItem
F5A7 LD HL,$DF0E Print "Well done! A perfect shot.".
F5AA CALL PausePrintStringAndScroll
Print "You have killed it.".
F5AD LD HL,$DFE0 HL=Messaging_YouHaveKilledIt.
F5B0 JP PrintResponse Jump to PrintResponse.
Nothing else is valid.
Kill_YouCant F5B3 JP Response_YouCant_GameLoop Jump to Response_YouCant_GameLoop.
Prev: F292 Up: Map Next: F5B6