Prev: 64538 Up: Map Next: 64694
64569: Handler: Vehicle
Used by the routine at RunHandlers.
Output
B Vehicle Y sprite co-ordinates (if active)
C Vehicle X sprite co-ordinates (if active)
Are vehicles permitted to be spawned on this level?
Handler_Vehicle 64569 LD A,(54273) Return if vehicle spawning is set to be off (*VehicleCounter is equal to 254).
64572 CP 254
64574 RET Z
Just return if a a vehicle is already being displayed.
64575 CP 255 Jump to Handler_Vehicle_Movement if a vehicle is already active (*VehicleCounter is equal to 255).
64577 JR Z,Handler_Vehicle_Movement
Else the counter is a counter, so count it down.
64579 DEC A Decrease *VehicleCounter by one.
64580 LD (54273),A
64583 RET NZ Return if *VehicleCounter is still in progress.
Else the countdown is complete so set the counter/ state that a vehicle is spawned and spawn a random vehicle!
64584 LD A,255 Write 255 to *VehicleCounter.
64586 LD (54273),A
Spawn a new vehicle:
There are four vehicle types.
64589 CALL RandomNumber Get a random number between 0-3.
64592 AND %00000011
64594 LD (54274),A Write A to *VehicleType.
Randomly bring the vehicle in from either the left or right hand side of the play area.
64597 CALL RandomNumber Get a random number which is either zero or one.
64600 AND %00000001
64602 JR NZ,Handler_SpawnVehicleRight Jump to Handler_SpawnVehicleRight if the random number is one.
Vehicle moves from left-to-right.
64604 LD A,20 Write 20 to *VehicleYPosition.
64606 LD (54276),A
64609 LD A,250 Write 250 to *VehicleXPosition.
64611 LD (54275),A
64614 JR Handler_Vehicle_Movement Jump to Handler_Vehicle_Movement.
Bit 7 signifies that this vehicle moves from right-to-left.
Handler_SpawnVehicleRight 64616 LD A,148 Write 148 (20 + bit 7 set) to *VehicleYPosition.
64618 LD (54276),A
64621 LD A,32 Write 32 to *VehicleXPosition.
64623 LD (54275),A
Handler_Vehicle_Movement 64626 LD A,(54276) A=*VehicleYPosition.
64629 CP 128 Jump to Handler_MoveVehicle_RightToLeft if A is higher than 128 (if bit 7 is set).
64631 JR NC,Handler_MoveVehicle_RightToLeft
64633 LD B,A B=vehicle Y position.
Handles moving the vehicle from the left-to-right hand side of the play area.
64634 LD A,(54275) A=*VehicleXPosition.
64637 INC A Increment A by one.
Handler_Vehicle_SetXPos 64638 LD (54275),A Write A to *VehicleXPosition.
Check if the vehicle is off-screen.
64641 CP 32 Jump to Handler_Vehicle_SetCountdown if A is equal to 32.
64643 JR Z,Handler_Vehicle_SetCountdown
64645 LD C,A C=vehicle X position.
Has the vehicle been destroyed?
64646 LD A,(54274) A=*VehicleType.
64649 CP 3 Return if the vehicle has been destroyed (*VehicleType is equal to 3).
64651 RET Z
64652 ADD A,A A=59+(A*2).
Vehicle Type Vehicle Sprite ID Sprite
0 Tank 59 sprite-59-left
1 Car 61 sprite-61-left
2 Police car 63 sprite-63-left
64653 ADD A,59
64655 CALL PrintSprite Call PrintSprite.
64658 XOR A Write 0 to *Flag_Orientation.
64659 LD (53831),A
64662 RET Return.
Handles moving the vehicle from the right-to-left hand side of the play area.
Handler_MoveVehicle_RightToLeft 64663 AND %01111111 Strip off the right-to-left flag.
64665 LD B,A B=vehicle Y position.
64666 LD A,1 Write 1 to *Flag_Orientation.
64668 LD (53831),A
64671 LD A,(54275) A=*VehicleXPosition.
64674 DEC A Decrease A by one.
Check if the vehicle is off-screen.
64675 CP 250 Jump to Handler_Vehicle_SetXPos if A is not equal to 250.
64677 JR NZ,Handler_Vehicle_SetXPos
Initialise a new countdown.
Handler_Vehicle_SetCountdown 64679 CALL RandomNumber Get a random number between 8-23.
64682 AND %00001111
64684 ADD A,8
64686 LD (54273),A Write the random number to *VehicleCounter.
64689 XOR A Write 0 to *Flag_Orientation.
64690 LD (53831),A
64693 RET Return.
Prev: 64538 Up: Map Next: 64694