Prev: 56281 Up: Map Next: 56481
56293: Handler: Helicopters
Used by the routine at RunHandlers.
Handler_Helicopters 56293 LD B,6 B=6 (maximum possible number of on-screen helicopters).
56295 LD IX,53909 IX=Table_Helicopters.
56299 XOR A Write 0 to *Flag_Orientation.
56300 LD (53831),A
Handler_Helicopters_Loop 56303 PUSH BC Stash current helicopter on the stack.
56304 LD A,(IX+0) Jump to Handler_Helicopters_Next if this helicopter is not active.
56307 LD D,A
56308 AND A
56309 JP Z,Handler_Helicopters_Next
56312 LD C,(IX+1) C=*IX+1.
56315 LD B,(IX+2) B=*IX+2.
56318 RLCA Rotate A left one position, setting the carry flag if bit 7 was set.
56319 JR C,Handler_Helicopters_3 Jump to Handler_Helicopters_3 if the carry flag is set.
56321 LD A,C Jump to Handler_Helicopters_0 if C is equal to 33.
56322 CP 33
56324 JR Z,Handler_Helicopters_0
56326 LD A,D A=D.
56327 AND %01000011 Keep only bits 0-1 and 6.
56329 INC A Increment A by one.
56330 CP 68 Jump to Handler_Helicopters_5 until A is equal to 68.
56332 JP NZ,Handler_Helicopters_5
56335 LD A,64 A=64.
56337 INC C Increment C by one.
56338 LD (IX+1),C Write C to *IX+1.
56341 JP Handler_Helicopters_5 Jump to Handler_Helicopters_5.
Handler_Helicopters_0 56344 LD B,4 B=4.
56346 LD C,32 C=32.
Handler_Helicopters_1 56348 LD A,(54262) Jump to Handler_Helicopters_2 if *NumberOnScreenHelicopters is equal to 6.
56351 CP 6
56353 JR Z,Handler_Helicopters_2
Loop to find an empty slot.
56355 LD HL,53923 HL=53923 (Table_SomethingHelicopters-4).
Handler_Helicopters_FindSlot 56358 INC HL Increment HL by four.
56359 INC HL
56360 INC HL
56361 INC HL
56362 LD A,(HL) Jump to Handler_Helicopters_FindSlot if *HL is not zero.
56363 AND A
56364 JR NZ,Handler_Helicopters_FindSlot
56366 LD (HL),B Write B to *HL.
56367 INC HL Increment HL by one.
56368 LD (HL),C Write C to *HL.
56369 INC HL Increment HL by one.
56370 CALL RandomNumber Get a random number between 0-31.
56373 AND %00011111
56375 ADD A,8 A+=8.
56377 AND %00011111 Keep only bits 0-4.
56379 LD (HL),A Write A to *HL.
56380 INC HL Increment HL by one.
56381 LD A,(IX+2) A=*IX+2.
56384 DEC A Decrease A by one.
56385 RLCA RLCA.
56386 RLCA
56387 ADD A,4 A+=4.
56389 LD (HL),A Write A to *HL.
56390 CALL RandomNumber Get a random number between 0-3.
56393 AND %00000011
56395 ADD A,(HL) A+=*HL.
56396 LD (HL),A Write A to *HL.
Handler_Helicopters_2 56397 LD (IX+0),0 Write 0 to *IX+0.
56401 LD A,(54261) Decrease *NumberActiveHelicopters by one.
56404 DEC A
56405 LD (54261),A
56408 LD A,(54262) Increment *NumberOnScreenHelicopters by one.
56411 INC A
56412 LD (54262),A
56415 JP Handler_Helicopters_Next Jump to Handler_Helicopters_Next.
Handler_Helicopters_3 56418 LD A,C Jump to Handler_Helicopters_4 if C is equal to 252.
56419 CP 252
56421 JP Z,Handler_Helicopters_4
56424 LD A,1 Write 1 to *Flag_Orientation.
56426 LD (53831),A
56429 LD A,D A=D.
56430 AND %10000011 Keep only bits 0-1 and 7.
56432 INC A Increment A by one.
56433 CP 132 Jump to Handler_Helicopters_5 if A is not equal to 132.
56435 JP NZ,Handler_Helicopters_5
56438 LD A,128 A=128.
56440 DEC C Decrease C by one.
56441 LD (IX+1),C Write C to *IX+1.
56444 JP Handler_Helicopters_5 Jump to Handler_Helicopters_5.
Handler_Helicopters_4 56447 LD B,2 B=2.
56449 LD C,252 C=252.
56451 JP Handler_Helicopters_1 Jump to Handler_Helicopters_1.
Handler_Helicopters_5 56454 LD (IX+0),A Write A to *IX+0.
56457 AND %00000011 Keep only bits 0-1.
56459 ADD A,A A+=A.
56460 ADD A,222 A+=222.
56462 CALL PrintSprite Call PrintSprite.
56465 XOR A Write 0 to *Flag_Orientation.
56466 LD (53831),A
Handler_Helicopters_Next 56469 INC IX Move onto the next helicopter table data.
56471 INC IX
56473 INC IX
56475 POP BC Restore helicopter ID from the stack.
56476 DEC B Decrease helicopter ID by one.
56477 JP NZ,Handler_Helicopters_Loop Jump to Handler_Helicopters_Loop until all helicopters have been processed.
56480 RET Return.
Prev: 56281 Up: Map Next: 56481