Prev: F10E Up: Map Next: F2CA
F28B: Handler: Spawn Helicopters
Used by the routine at RunHandlers.
Just return if the number of active helicopters is already at the maximum amount for this level.
Handler_SpawnHelicopters F28B LD A,($D212) Return if *NumberActiveHelicopters is equal to *MaxHelicopterCount.
F28E LD B,A
F28F LD A,($D3F5)
F292 CP B
F293 RET Z
Add a hint of randomness to whether we proceed or not. Roughly 50% chance.
F294 CALL RandomNumber A=random number between 00-FF.
F297 CP $80 Return if A is higher than 80.
F299 RET NC
Loop to find an empty slot.
F29A LD HL,$D292 HL=D292 (Table_Helicopters-03).
Handler_SpawnHelicopters_FindSlot F29D INC HL Move the table pointer to the next helicopter table data.
F29E INC HL
F29F INC HL
F2A0 LD A,(HL) Jump to Handler_SpawnHelicopters_FindSlot if this helicopter is already active.
F2A1 AND A
F2A2 JR NZ,Handler_SpawnHelicopters_FindSlot
50/50 chance of jumping to Handler_SpawnForegroundHelicopter.
F2A4 CALL RandomNumber Get a random number of either zero or one.
F2A7 AND %00000001
F2A9 JR Z,Handler_SpawnForegroundHelicopter Jump to Handler_SpawnForegroundHelicopter if the result is zero.
Creates a background helicopter.
F2AB LD (HL),$40 Write 40 (background) to helicopter state.
F2AD INC HL Increment the helicopter table pointer by one.
F2AE LD (HL),$FC Write FC to helicopter X position.
F2B0 JR Handler_Helicopter_SetYPos Jump to Handler_Helicopter_SetYPos.
Creates a foreground helicopter.
Handler_SpawnForegroundHelicopter F2B2 LD (HL),$80 Write 80 (foreground) to helicopter state.
F2B4 INC HL Increment the helicopter table pointer by one.
F2B5 LD (HL),$24 Write 24 to helicopter X position.
Handler_Helicopter_SetYPos F2B7 INC HL Increment the helicopter table pointer by one.
F2B8 LD (HL),$03 Write 03 to helicopter Y position.
25% chance of jumping to Helicopter_Update_Count.
F2BA CALL RandomNumber Get a random number between 0-3.
F2BD AND %00000011
F2BF JR Z,Helicopter_Update_Count Jump to Helicopter_Update_Count if the random number is 0.
F2C1 LD (HL),A Write the random number to helicopter Y position.
Keep track of the number of active helicopters.
Helicopter_Update_Count F2C2 LD A,($D3F5) Increment *NumberActiveHelicopters by one.
F2C5 INC A
F2C6 LD ($D3F5),A
F2C9 RET Return.
Prev: F10E Up: Map Next: F2CA