Prev: EED7 Up: Map Next: F104
F001: Handler: Pirates
Used by the routine at InitialiseGame.
See No Pirates.
Handler_Pirates F001 LD A,($F334) Return if *LiftsPiratesFrameSkip is equal to 00.
F004 CP $00
F006 RET Z
F007 LD HL,$8E28 Write 8E28 (Graphics_Pirate) to *CHARS.
F00A LD ($5C36),HL
F00D LD IX,($5BDE) IX=*ReferencePirate.
Handler_Pirates_Loop F011 LD A,(IX+$00) Return if Pirate state (*IX+00) is equal to OFF (FF).
F014 CP $FF
F016 RET Z
F017 LD A,$10 Set INK: Pirate attribute (*IX+09).
F019 RST $10
F01A LD A,(IX+$09)
F01D RST $10
Update the sprite frame.
F01E LD A,(IX+$06) Fetch the current Pirate sprite reference (*IX+06).
F021 ADD A,$06 Add 06.
F023 LD (IX+$06),A Write it back to the current Pirate sprite reference (*IX+06).
F026 CP $4A Jump to Handler_Pirates_CheckSpriteFrames if A is not equal to 4A.
F028 JR NZ,Handler_Pirates_CheckSpriteFrames
F02A LD (IX+$06),$20 Write 20 (facing right) to Pirate sprite reference (*IX+06).
Handler_Pirates_CheckSpriteFrames F02E CP $80 Jump to Handler_Pirates_SkipSpriteFrames if A is not equal to 80.
F030 JR NZ,Handler_Pirates_SkipSpriteFrames
F032 LD (IX+$06),$50 Write 50 (facing left) to Pirate sprite reference (*IX+06).
Handler_Pirates_SkipSpriteFrames F036 CALL $EEA6 Call EEA6.
F039 LD A,C Jump to Handler_Pirate_TurnRight if C is equal to 22.
F03A CP $22
F03C JP Z,Handler_Pirate_TurnRight
F03F CP $03 Jump to Handler_Pirate_TurnLeft if C is equal to 03.
F041 JP Z,Handler_Pirate_TurnLeft
F044 PUSH DE Stash DE and BC on the stack.
F045 PUSH BC
F046 LD A,(IX+$04) Jump to Handler_Pirates_0 if the direction the Pirate is moving (*IX+04) is not right (FF).
F049 CP $FF
F04B JR NZ,Handler_Pirates_0
F04D DEC C Decrease C by two.
F04E DEC C
Handler_Pirates_0 F04F CALL $F1AF Call F1AF.
F052 POP BC Restore BC and DE from the stack.
F053 POP DE
F054 CP $FF Jump to Pirate_TurnController if A is not equal to FF.
F056 JP NZ,Pirate_TurnController
F059 PUSH BC Stash BC and DE on the stack.
F05A PUSH DE
F05B DEC B Decrease B by three.
F05C DEC B
F05D DEC B
F05E LD A,(IX+$04) Jump to Handler_Pirates_1 if the direction the Pirate is moving (*IX+04) is not right (FF).
F061 CP $FF
F063 JR NZ,Handler_Pirates_1
F065 DEC C Decrease C by two.
F066 DEC C
Handler_Pirates_1 F067 CALL ConvertCoordinateToBufferOffset Call ConvertCoordinateToBufferOffset.
F06A LD HL,$A1C4 HL=BufferRoom.
F06D LD DE,($F330) DE=*BufferRoomPointer.
F071 ADD HL,DE HL+=DE.
F072 POP DE Restore DE and BC from the stack.
F073 POP BC
F074 LD A,(HL) Jump to Pirate_TurnController if *HL is lower than 21.
F075 CP $21
F077 JP C,Pirate_TurnController
F07A LD (IX+$00),C Write C to *IX+00.
F07D LD (IX+$01),B Write B to *IX+01.
F080 LD (IX+$02),E Write E to *IX+02.
F083 LD (IX+$03),D Write D to *IX+03.
F086 CALL $E9E2 Call E9E2.
Handler_Pirates_2 F089 CALL $EED7 Call EED7.
F08C LD A,(IX+$00) Write *IX+00 to *IX+0D.
F08F LD (IX+$0D),A
F092 LD A,(IX+$01) Write *IX+01 to *IX+0E.
F095 LD (IX+$0E),A
F098 LD A,(IX+$02) Write *IX+02 to *IX+0B.
F09B LD (IX+$0B),A
F09E LD A,(IX+$03) Write *IX+03 to *IX+0F.
F0A1 LD (IX+$0F),A
F0A4 LD C,(IX+$00) C=*IX+00.
F0A7 DEC C Decrease C by one.
F0A8 SLA C Shift C left two positions (with carry).
F0AA SLA C
F0AC LD A,(IX+$02) A=*IX+02.
F0AF ADD A,C A+=C.
F0B0 LD C,A C=A.
F0B1 LD A,($F233) B=*F233.
F0B4 LD B,A
F0B5 LD A,($F231) A=*TablePlayerAttributes.
F0B8 DEC A Decrease A by one.
F0B9 SLA A Shift A left two positions (with carry).
F0BB SLA A
F0BD ADD A,B A+=B.
F0BE ADD A,$07 A+=07.
F0C0 SUB C A-=C.
F0C1 CP $10 Jump to Handler_Pirate_Next if A is higher than 10.
F0C3 JR NC,Handler_Pirate_Next
F0C5 LD B,(IX+$01) B=*IX+01.
F0C8 LD A,($F232) A=*F232.
F0CB ADD A,$02 A+=02.
F0CD SUB B A-=B.
F0CE CP $06 Jump to Handler_Pirate_Next if A is higher than 06.
F0D0 JP NC,Handler_Pirate_Next
F0D3 LD A,$02 Write 02 to *SoundFlag_General.
F0D5 LD ($FFFE),A
F0D8 JP LoseLife Jump to LoseLife.
Move onto the next Pirate.
Handler_Pirate_Next F0DB LD DE,$0010 IX+=0010.
F0DE ADD IX,DE
F0E0 JP Handler_Pirates_Loop Jump to Handler_Pirates_Loop.
Alters the direction of the Pirate to now face and move left.
Handler_Pirate_TurnLeft F0E3 LD (IX+$04),$01 Write 01 (move left) to Pirate direction (*IX+04).
F0E7 LD (IX+$06),$50 Write 50 (facing left) to Pirate sprite reference (*IX+06).
F0EB JP Handler_Pirates_2 Jump to Handler_Pirates_2.
Alters the direction of the Pirate to now face and move right.
Handler_Pirate_TurnRight F0EE LD (IX+$04),$FF Write FF (move right) to Pirate direction (*IX+04).
F0F2 LD (IX+$06),$20 Write 20 (facing right) to Pirate sprite reference (*IX+06).
F0F6 JP Handler_Pirates_2 Jump to Handler_Pirates_2.
Handle making the Pirate about-turn.
Pirate_TurnController F0F9 LD A,(IX+$04) Jump to Handler_Pirate_TurnLeft if the direction the Pirate is moving (*IX+04) is right (FF).
F0FC CP $FF
F0FE JP Z,Handler_Pirate_TurnLeft
F101 JP Handler_Pirate_TurnRight Jump to Handler_Pirate_TurnRight.
Prev: EED7 Up: Map Next: F104