Routines |
Prev: DBD9 | Up: Map | Next: DCA1 |
Used by the routine at RunHandlers.
|
||||
Handler_Helicopters | DBE5 | LD B,$06 | B=06 (maximum possible number of on-screen helicopters). | |
DBE7 | LD IX,$D295 | IX=Table_Helicopters. | ||
DBEB | XOR A | Write 00 to *Flag_Orientation. | ||
DBEC | LD ($D247),A | |||
Handler_Helicopters_Loop | DBEF | PUSH BC | Stash current helicopter on the stack. | |
DBF0 | LD A,(IX+$00) | Jump to Handler_Helicopters_Next if this helicopter is not active. | ||
DBF3 | LD D,A | |||
DBF4 | AND A | |||
DBF5 | JP Z,Handler_Helicopters_Next | |||
DBF8 | LD C,(IX+$01) | C=*IX+01. | ||
DBFB | LD B,(IX+$02) | B=*IX+02. | ||
DBFE | RLCA | Rotate A left one position, setting the carry flag if bit 7 was set. | ||
DBFF | JR C,Handler_Helicopters_3 | Jump to Handler_Helicopters_3 if the carry flag is set. | ||
DC01 | LD A,C | Jump to Handler_Helicopters_0 if C is equal to 21. | ||
DC02 | CP $21 | |||
DC04 | JR Z,Handler_Helicopters_0 | |||
DC06 | LD A,D | A=D. | ||
DC07 | AND %01000011 | Keep only bits 0-1 and 6. | ||
DC09 | INC A | Increment A by one. | ||
DC0A | CP $44 | Jump to Handler_Helicopters_5 until A is equal to 44. | ||
DC0C | JP NZ,Handler_Helicopters_5 | |||
DC0F | LD A,$40 | A=40. | ||
DC11 | INC C | Increment C by one. | ||
DC12 | LD (IX+$01),C | Write C to *IX+01. | ||
DC15 | JP Handler_Helicopters_5 | Jump to Handler_Helicopters_5. | ||
Handler_Helicopters_0 | DC18 | LD B,$04 | B=04. | |
DC1A | LD C,$20 | C=20. | ||
Handler_Helicopters_1 | DC1C | LD A,($D3F6) | Jump to Handler_Helicopters_2 if *NumberOnScreenHelicopters is equal to 06. | |
DC1F | CP $06 | |||
DC21 | JR Z,Handler_Helicopters_2 | |||
Loop to find an empty slot.
|
||||
DC23 | LD HL,$D2A3 | HL=D2A3 (Table_SomethingHelicopters-04). | ||
Handler_Helicopters_FindSlot | DC26 | INC HL | Increment HL by four. | |
DC27 | INC HL | |||
DC28 | INC HL | |||
DC29 | INC HL | |||
DC2A | LD A,(HL) | Jump to Handler_Helicopters_FindSlot if *HL is not zero. | ||
DC2B | AND A | |||
DC2C | JR NZ,Handler_Helicopters_FindSlot | |||
DC2E | LD (HL),B | Write B to *HL. | ||
DC2F | INC HL | Increment HL by one. | ||
DC30 | LD (HL),C | Write C to *HL. | ||
DC31 | INC HL | Increment HL by one. | ||
DC32 | CALL RandomNumber | Get a random number between 0-31. | ||
DC35 | AND %00011111 | |||
DC37 | ADD A,$08 | A+=08. | ||
DC39 | AND %00011111 | Keep only bits 0-4. | ||
DC3B | LD (HL),A | Write A to *HL. | ||
DC3C | INC HL | Increment HL by one. | ||
DC3D | LD A,(IX+$02) | A=*IX+02. | ||
DC40 | DEC A | Decrease A by one. | ||
DC41 | RLCA | RLCA. | ||
DC42 | RLCA | |||
DC43 | ADD A,$04 | A+=04. | ||
DC45 | LD (HL),A | Write A to *HL. | ||
DC46 | CALL RandomNumber | Get a random number between 0-3. | ||
DC49 | AND %00000011 | |||
DC4B | ADD A,(HL) | A+=*HL. | ||
DC4C | LD (HL),A | Write A to *HL. | ||
Handler_Helicopters_2 | DC4D | LD (IX+$00),$00 | Write 00 to *IX+00. | |
DC51 | LD A,($D3F5) | Decrease *NumberActiveHelicopters by one. | ||
DC54 | DEC A | |||
DC55 | LD ($D3F5),A | |||
DC58 | LD A,($D3F6) | Increment *NumberOnScreenHelicopters by one. | ||
DC5B | INC A | |||
DC5C | LD ($D3F6),A | |||
DC5F | JP Handler_Helicopters_Next | Jump to Handler_Helicopters_Next. | ||
Handler_Helicopters_3 | DC62 | LD A,C | Jump to Handler_Helicopters_4 if C is equal to FC. | |
DC63 | CP $FC | |||
DC65 | JP Z,Handler_Helicopters_4 | |||
DC68 | LD A,$01 | Write 01 to *Flag_Orientation. | ||
DC6A | LD ($D247),A | |||
DC6D | LD A,D | A=D. | ||
DC6E | AND %10000011 | Keep only bits 0-1 and 7. | ||
DC70 | INC A | Increment A by one. | ||
DC71 | CP $84 | Jump to Handler_Helicopters_5 if A is not equal to 84. | ||
DC73 | JP NZ,Handler_Helicopters_5 | |||
DC76 | LD A,$80 | A=80. | ||
DC78 | DEC C | Decrease C by one. | ||
DC79 | LD (IX+$01),C | Write C to *IX+01. | ||
DC7C | JP Handler_Helicopters_5 | Jump to Handler_Helicopters_5. | ||
Handler_Helicopters_4 | DC7F | LD B,$02 | B=02. | |
DC81 | LD C,$FC | C=FC. | ||
DC83 | JP Handler_Helicopters_1 | Jump to Handler_Helicopters_1. | ||
Handler_Helicopters_5 | DC86 | LD (IX+$00),A | Write A to *IX+00. | |
DC89 | AND %00000011 | Keep only bits 0-1. | ||
DC8B | ADD A,A | A+=A. | ||
DC8C | ADD A,$DE | A+=DE. | ||
DC8E | CALL PrintSprite | Call PrintSprite. | ||
DC91 | XOR A | Write 00 to *Flag_Orientation. | ||
DC92 | LD ($D247),A | |||
Handler_Helicopters_Next | DC95 | INC IX | Move onto the next helicopter table data. | |
DC97 | INC IX | |||
DC99 | INC IX | |||
DC9B | POP BC | Restore helicopter ID from the stack. | ||
DC9C | DEC B | Decrease helicopter ID by one. | ||
DC9D | JP NZ,Handler_Helicopters_Loop | Jump to Handler_Helicopters_Loop until all helicopters have been processed. | ||
DCA0 | RET | Return. |
Prev: DBD9 | Up: Map | Next: DCA1 |