Routines |
Prev: 959A | Up: Map | Next: 961E |
95C8 | LD HL,($85D3) | Pick up Willy's attribute buffer coordinates from 85D3 | ||
95CB | LD B,$00 | Initialise B to 0 (in case Willy is not standing on a ramp) | ||
95CD | LD A,($80DA) | Pick up the direction byte of the ramp definition for the current room from 80DA | ||
95D0 | AND $01 | Point HL at one of the cells under Willy's feet (the one on the left if the ramp goes up to the left, the one on the right if the ramp goes up to the right) | ||
95D2 | ADD A,$40 | |||
95D4 | LD E,A | |||
95D5 | LD D,$00 | |||
95D7 | ADD HL,DE | |||
95D8 | LD A,($80C4) | Pick up the ramp's attribute byte from 80C4 | ||
95DB | CP (HL) | Is Willy on or just above the ramp? | ||
95DC | JR NZ,$95F8 | Jump if not | ||
95DE | LD A,($85D1) | Pick up the airborne status indicator from 85D1 | ||
95E1 | OR A | Is Willy airborne? | ||
95E2 | JR NZ,$95F8 | Jump if so | ||
Willy is standing on a ramp. Calculate the offset that needs to be added to the y-coordinate stored at 85CF to obtain Willy's true y-coordinate.
|
||||
95E4 | LD A,($85D2) | Pick up Willy's current animation frame (0-3) from 85D2 | ||
95E7 | AND $03 | B=0, 4, 8 or 12 | ||
95E9 | RLCA | |||
95EA | RLCA | |||
95EB | LD B,A | |||
95EC | LD A,($80DA) | Pick up the direction byte of the ramp definition for the current room from 80DA | ||
95EF | AND $01 | A=B (if the ramp goes up to the left) or 12-B (if the ramp goes up to the right) | ||
95F1 | DEC A | |||
95F2 | XOR $0C | |||
95F4 | XOR B | |||
95F5 | AND $0C | |||
95F7 | LD B,A | Copy this value to B | ||
Now B holds a y-coordinate offset of 0, 4, 8 or 12 if Willy is standing on a ramp, or 0 otherwise.
|
||||
95F8 | LD HL,($85D3) | Pick up Willy's attribute buffer coordinates from 85D3 | ||
95FB | LD DE,$001F | Prepare DE for later addition | ||
95FE | LD C,$0F | Set C=0x0F for the top two rows of cells (to make the routine at 961E force white INK) | ||
9600 | CALL $961E | Check and set the attribute byte for the top-left cell | ||
9603 | INC HL | Move HL to the next cell to the right | ||
9604 | CALL $961E | Check and set the attribute byte for the top-right cell | ||
9607 | ADD HL,DE | Move HL down a row and back one cell to the left | ||
9608 | CALL $961E | Check and set the attribute byte for the mid-left cell | ||
960B | INC HL | Move HL to the next cell to the right | ||
960C | CALL $961E | Check and set the attribute byte for the mid-right cell | ||
960F | LD A,($85CF) | Pick up Willy's y-coordinate from 85CF | ||
9612 | ADD A,B | Add the y-coordinate offset calculated earlier (to get Willy's true y-coordinate if he's standing on a ramp) and transfer the result to C | ||
9613 | LD C,A | |||
9614 | ADD HL,DE | Move HL down a row and back one cell to the left; at this point HL may be pointing at one of the cells in the top row of the buffer at 5E00, which is a bug | ||
9615 | CALL $961E | Check and set the attribute byte for the bottom-left cell | ||
9618 | INC HL | Move HL to the next cell to the right | ||
9619 | CALL $961E | Check and set the attribute byte for the bottom-right cell | ||
961C | JR $9637 | Draw Willy to the screen buffer at 6000 |
Prev: 959A | Up: Map | Next: 961E |