|  | Routines | 
| Prev: D4AC | Up: Map | Next: D5A0 | 
| 
Used by the routine at D215.
 | ||||
| D4B6 | LD (IX+$0C),$00 | Set question to not visble | ||
| D4BA | PUSH IX | Save IX and BC | ||
| D4BC | PUSH BC | |||
| D4BD | CALL $D5D7 | Reset sound volume chanels | ||
| D4C0 | CALL $D8A3 | Copy screen display file into room graphic data buffer | ||
| D4C3 | LD BC,$4E20 | SET BC = 20.000 | ||
| D4C6 | CALL $C8DB | Wait some time ~1s (128 t-states 20.000 times) | ||
| D4C9 | LD IX,$AB41 | Point IX to the text defintion for SPEED UP | ||
| D4CD | LD B,$01 | Set B to the number of rows to draw | ||
| D4CF | CALL $A13E | Draw the windows into the display file | ||
| D4D2 | LD HL,$1CE8 | Set A07D the Bonus Windows Loop Counter (7200 loops) | ||
| D4D5 | LD ($A07D),HL | |||
| D4D8 | CALL $A375 | Set A a random number between 1-4 | ||
| D4DB | AND $03 | |||
| D4DD | INC A | |||
| D4DE | LD ($A06F),A | Set A06F to the number of bonus screen to show (0-speed up 1-shield loss 2-1000 bonus 3-energy loss 4-100 rapid shots) | ||
| D4E1 | SLA A | Set into IX the address of the text defintion corresponding to the number of bonus | ||
| D4E3 | LD E,A | |||
| D4E4 | LD D,$00 | |||
| D4E6 | LD HL,$D4AC | |||
| D4E9 | ADD HL,DE | |||
| D4EA | LD E,(HL) | |||
| D4EB | INC HL | |||
| D4EC | LD D,(HL) | |||
| D4ED | PUSH DE | |||
| D4EE | POP IX | |||
| D4F0 | CALL $A307 | Print the line of text into the windows | ||
| D4F3 | INC IX | Increment pointer for the next bonus line | ||
| D4F5 | LD BC,($A07D) | Set BC to the Bonus Windows Counter | ||
| D4F9 | PUSH BC | Save BC | ||
| D4FA | CALL $A477 | Check FIRE pressed | ||
| D4FD | POP BC | Restore BC | ||
| D4FE | JP Z,$D52F | If FIRE key pressed jump to handle the bonus selected | ||
| D501 | DEC BC | Decrement counter | ||
| D502 | LD A,B | Jump back and wait for keypressed if counter has not reached zero | ||
| D503 | OR C | |||
| D504 | JP NZ,$D4F9 | |||
| D507 | LD HL,($A07D) | Reset loop counter (substract 200 loops to the previous counter) | ||
| D50A | LD DE,$00C8 | |||
| D50D | AND A | |||
| D50E | SBC HL,DE | |||
| D510 | LD ($A07D),HL | |||
| D513 | LD A,H | If loop counter less than 256 then jump to handle the bonus on screen | ||
| D514 | OR A | |||
| D515 | JP Z,$D52F | |||
| D518 | LD A,($A06F) | Increment the bonus windows number | ||
| D51B | INC A | |||
| D51C | LD ($A06F),A | |||
| D51F | CP $05 | if bonus number equals 5 then point to the first bonus | ||
| D521 | JP NZ,$D4F0 | |||
| D524 | LD IX,$AB41 | |||
| D528 | XOR A | |||
| D529 | LD ($A06F),A | |||
| D52C | JP $D4F0 | Jump back and show the next bonus | ||
| 
handle bonus selected
 | ||||
| D52F | LD A,($A06F) | Check bonus slected | ||
| D532 | OR A | is speed up? | ||
| D533 | JP Z,$D55D | Jump to handle speed up bonus | ||
| D536 | CP $01 | is shield loss? | ||
| D538 | JP Z,$D56D | Jump to handle shield loss | ||
| D53B | CP $02 | is 1000 bouns points? | ||
| D53D | JP Z,$D578 | Jump to handle bonus points | ||
| D540 | CP $03 | is energy loss? | ||
| D542 | JP Z,$D584 | handle energy loss | ||
| D545 | CP $04 | is rapid shots? | ||
| D547 | JP Z,$D590 | handle rapid shots | ||
| 
return to normal game
 | ||||
| D54A | LD BC,$4E20 | Set BC to 20.000 | ||
| D54D | CALL $C8DB | Wait some time ~1s (128 t-states 20.000 times) | ||
| D550 | CALL $D5AE | Reset sound data buffer | ||
| D553 | POP BC | Restore BC and IX | ||
| D554 | POP IX | |||
| D556 | CALL $A28A | Copy room graphic buffer to display file | ||
| D559 | CALL $C8BF | Copy room color attribute buffer to attribute file | ||
| D55C | RET | |||
| 
handle speed up
 | ||||
| D55D | LD A,$01 | Set Rex fast speed | ||
| D55F | LD ($A072),A | |||
| D562 | LD A,$C8 | Set speed up duration to 200 | ||
| D564 | LD ($A073),A | |||
| D567 | LD HL,$AB41 | Set HL to point to the bonus text definition address | ||
| D56A | JP $D54A | Jump back and return to normal game | ||
| 
handle shield loss
 | ||||
| D56D | LD L,$14 | loss quantity to L = 20 | ||
| D56F | CALL $99CE | Handle shield loss | ||
| D572 | LD HL,$AB54 | Set HL to point to the bonus text definition address | ||
| D575 | JP $D54A | Jump back and return to normal game | ||
| 
handle bonus points
 | ||||
| D578 | LD DE,$000A | Set A to the bonus points obtained (*100) | ||
| D57B | CALL $9A27 | Increment score | ||
| D57E | LD HL,$AB67 | Set HL to point to the bonus text definition address | ||
| D581 | JP $D54A | Jump back and return to normal game | ||
| 
handle energy loss
 | ||||
| D584 | CALL $BA3D | Handle double weapon energy loss | ||
| D587 | CALL $A1A5 | Draw HUD | ||
| D58A | LD HL,$AB7A | Set HL to point to the bonus text definition address | ||
| D58D | JP $D54A | Jump back and return to normal game | ||
| 
handle rapid shots
 | ||||
| D590 | LD A,$01 | Set rapid shots | ||
| D592 | LD ($A040),A | |||
| D595 | LD A,$64 | Set number of rapid shots | ||
| D597 | LD ($A041),A | |||
| D59A | LD HL,$AB8D | Set HL to point to the bonus text definition address | ||
| D59D | JP $D54A | Jump back and return to normal game | ||
| Prev: D4AC | Up: Map | Next: D5A0 |