Routines
 Prev: 959A Up: Map Next: 961E
95C8: Check and set the attribute bytes for Willy's sprite in the buffer at 5C00
 Used by the routine at 89AD. Sets the attribute bytes in the buffer at 5C00 for the six cells (in three rows of two) occupied by or under Willy's sprite, or kills Willy if any of the cells contains a nasty. 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