| Chase H.Q. | Routines |
| Prev: 8EB7 | Up: Map | Next: 8F5F |
|
Used by the routine at main_loop.
|
||||
| draw_smash_bar | 8EE7 | LD A,($A22E) | Return if the perp has not yet been sighted | |
| 8EEA | AND A | |||
| 8EEB | RET Z | |||
| 8EEC | LD A,($A230) | Return if perp_caught_phase is >= 3 (car has stopped) | ||
| 8EEF | CP $03 | |||
| 8EF1 | RET NC | |||
| 8EF2 | LD HL,$F7A2 | Back buffer address of bottom of bar | ||
| 8EF5 | LD DE,$0F10 | D = 15 = mask, E = 16 = row stride | ||
|
Draws bottom two rows
|
||||
| 8EF8 | LD B,$02 | 2 rows | ||
| 8EFA | CALL draw_smash_bar_solid_bit | Call draw_smash_bar_solid_bit | ||
| 8EFD | LD A,($A233) | Get smash_counter | ||
| 8F00 | AND A | Jump straight to drawing solid if it's zero (whole bar solid) | ||
| 8F01 | JR Z,draw_smash_bar_solid_top | |||
| 8F03 | LD C,A | Set iterations in C for call | ||
| 8F04 | EX AF,AF' | Preserve smash_counter | ||
| 8F05 | CALL draw_smash_bar_segment | Call draw_smash_bar_segment | ||
| 8F08 | EX AF,AF' | Restore smash_counter | ||
| draw_smash_bar_solid_top | 8F09 | LD C,A | Iterations = smash_counter | |
| 8F0A | ADD A,A | B = ~(A * 3) + 63 = amount of solid rows to draw | ||
| 8F0B | ADD A,C | |||
| 8F0C | CPL | |||
| 8F0D | ADD A,$3F | |||
| 8F0F | LD B,A | |||
| 8F10 | JP draw_smash_bar_solid_bit | Call draw_smash_bar_solid_bit | ||
| draw_smash_bar_segment | 8F13 | LD (HL),$81 | Set 8 pixels to "X......X" | |
|
Move to next scanline.
|
||||
| 8F15 | LD A,H | Save for checking in a moment | ||
| 8F16 | DEC H | Move to next scanline (visually upwards) | ||
| 8F17 | AND D | Would it have rolled over into the top nibble? | ||
| 8F18 | JP NZ,draw_smash_bar_segment2 | No - continue | ||
|
It rolled over.
|
||||
| 8F1B | LD A,H | Put back the bit stolen by rollover | ||
| 8F1C | ADD A,E | |||
| 8F1D | LD H,A | |||
| 8F1E | LD A,L | Move to next chunk of 16 scanlines | ||
| 8F1F | SUB $20 | |||
| 8F21 | LD L,A | |||
| 8F22 | JP NC,draw_smash_bar_segment2 | Continue if it didn't roll over | ||
| 8F25 | LD A,H | Otherwise move to the next chunk of 128 scanlines (would put us outside the back buffer) | ||
| 8F26 | SUB E | |||
| 8F27 | LD H,A | |||
| draw_smash_bar_segment2 | 8F28 | LD (HL),$81 | Set 8 pixels to "X......X" | |
| 8F2A | LD A,H | Save for checking in a moment | ||
| 8F2B | DEC H | Move to next scanline (visually upwards) | ||
| 8F2C | AND D | Would it have rolled over into the top nibble? | ||
|
It rolled over
|
||||
| 8F2D | JP NZ,draw_smash_bar_segment_cont | No - continue | ||
| 8F30 | LD A,H | Put back the bit stolen by rollover | ||
| 8F31 | ADD A,E | |||
| 8F32 | LD H,A | |||
| 8F33 | LD A,L | Move to next chunk of 16 scanlines | ||
| 8F34 | SUB $20 | |||
| 8F36 | LD L,A | |||
| 8F37 | JP NC,draw_smash_bar_segment_cont | Continue if it didn't roll over | ||
| 8F3A | LD A,H | Otherwise move to the next chunk of 128 scanlines (would put us outside the back buffer) | ||
| 8F3B | SUB E | |||
| 8F3C | LD H,A | |||
| draw_smash_bar_segment_cont | 8F3D | LD B,$01 | 1 row | |
| 8F3F | CALL draw_smash_bar_solid_bit | Call draw_smash_bar_solid_bit | ||
| 8F42 | DEC C | Loop while iterations remain | ||
| 8F43 | JP NZ,draw_smash_bar_segment | |||
| 8F46 | RET | Return | ||
| draw_smash_bar_solid_bit | 8F47 | LD (HL),$FF | Set 8 pixels to solid black | |
|
Move to next scanline.
|
||||
| 8F49 | LD A,H | Save for checking in a moment (visually upwards) | ||
| 8F4A | DEC H | Move to next scanline (visually upwards) | ||
| 8F4B | AND D | Would it have rolled over into the top nibble? | ||
| 8F4C | JP NZ,draw_smash_bar_cont | No - continue | ||
|
It rolled over.
|
||||
| 8F4F | LD A,H | Put back the bit stolen by rollover | ||
| 8F50 | ADD A,E | |||
| 8F51 | LD H,A | |||
| 8F52 | LD A,L | Move to next chunk of 16 scanlines | ||
| 8F53 | SUB $20 | |||
| 8F55 | LD L,A | |||
| 8F56 | JP NC,draw_smash_bar_cont | Continue if it didn't roll over | ||
| 8F59 | LD A,H | Otherwise move to the next chunk of 128 scanlines (would put us outside the back buffer) | ||
| 8F5A | SUB E | |||
| 8F5B | LD H,A | |||
| draw_smash_bar_cont | 8F5C | DJNZ draw_smash_bar_solid_bit | Loop while iterations remain | |
| 8F5E | RET | Return | ||
| Prev: 8EB7 | Up: Map | Next: 8F5F |