| Chase H.Q. | Routines |
| Prev: B67C | Up: Map | Next: B6D6 |
|
Takes the x and y offsets and the adornment index from the frame table at car_frames, reads that adornment's dimensions and bitmap, adjusts y for the jump height and the road's pitch, then draws it via draw_masked_sprite_rel_car.
Used by the routine at animate_hero_car.
|
||||||||||||
| draw_crash | B69E | LD E,$80 | E = 128 -- base horizontal position; the frame's own offset is added at B6AF | |||||||||
| B6A0 | LD B,$00 | Turn index into offset into car_frames (BC = A * 3) | ||||||||||
| B6A2 | LD C,A | |||||||||||
| B6A3 | RLCA | |||||||||||
| B6A4 | ADD A,C | |||||||||||
| B6A5 | LD C,A | |||||||||||
| B6A6 | LD HL,$CFB2 | HL = car_frames + BC -> car_frames[index] -- Point HL at element | ||||||||||
| B6A9 | ADD HL,BC | |||||||||||
| B6AA | LD A,(HL) | D = *HL++ + 121 -- the frame's vertical position, biased by 121 to give a screen row | ||||||||||
| B6AB | INC HL | |||||||||||
| B6AC | ADD A,$79 | |||||||||||
| B6AE | LD D,A | |||||||||||
| B6AF | LD A,(HL) | E += *HL++ -- add to horz position/offset | ||||||||||
| B6B0 | INC HL | |||||||||||
| B6B1 | ADD A,E | |||||||||||
| B6B2 | LD E,A | |||||||||||
| B6B3 | LD C,(HL) | Load offset into car_adornments | ||||||||||
| B6B4 | LD HL,$D027 | Point HL at (car_adornments + BC) | ||||||||||
| B6B7 | ADD HL,BC | |||||||||||
| B6B8 | LD B,(HL) | Read row height & advance | ||||||||||
| B6B9 | INC HL | |||||||||||
| B6BA | LD C,(HL) | Read byte width & advance | ||||||||||
| B6BB | INC HL | |||||||||||
| B6BC | LD A,(HL) | Read masked bitmap data pointer & advance | ||||||||||
| B6BD | INC HL | |||||||||||
| B6BE | LD H,(HL) | |||||||||||
| B6BF | LD L,A | |||||||||||
| B6C0 | LD A,C | Get byte width in A | ||||||||||
| B6C1 | EXX | Bank byte width in E' | ||||||||||
| B6C2 | LD E,A | |||||||||||
| B6C3 | EXX | |||||||||||
| B6C4 | LD A,($B5AB) | Read car jump offset from 'SUB x' @ B5AA | ||||||||||
| B6C7 | NEG | D -= A -- vert pos/offset - car jump offset | ||||||||||
| B6C9 | ADD A,D | |||||||||||
| B6CA | LD D,A | |||||||||||
| B6CB | LD A,($B5B0) | Read self modified value in draw_hero_car that sets the car's pitch (0/3/6) | ||||||||||
| B6CE | SRL A | 0 -> 0, 3 -> 1, 6 -> 3 | ||||||||||
| B6D0 | JR Z,draw_masked_sprite_rel_car | Jump to draw_masked_sprite_rel_car if zero | ||||||||||
|
Otherwise pitch was 3/6.
|
||||||||||||
| B6D2 | SUB $02 | D += A - 2 -- make v.shift -1/1 | ||||||||||
| B6D4 | ADD A,D | |||||||||||
| B6D5 | LD D,A | |||||||||||
|
FALL THROUGH
|
||||||||||||
| Prev: B67C | Up: Map | Next: B6D6 |