![]() |
Routines |
Prev: 8D0F | Up: Map |
Used by the routine at 870E.
|
||||||||
8D73 | LD HL,$5C17 | Point HL at the cell at (0,23) in the attribute buffer at 5C00 (the source of the light beam) | ||||||
8D76 | LD DE,$0020 | Prepare DE for addition (the beam travels vertically downwards to start with) | ||||||
The beam-drawing loop begins here.
|
||||||||
8D79 | LD A,($8029) | Pick up the attribute byte of the floor tile for the cavern from 8029 | ||||||
8D7C | CP (HL) | Does HL point at a floor tile? | ||||||
8D7D | RET Z | Return if so (the light beam stops here) | ||||||
8D7E | LD A,($803B) | Pick up the attribute byte of the wall tile for the cavern from 803B | ||||||
8D81 | CP (HL) | Does HL point at a wall tile? | ||||||
8D82 | RET Z | Return if so (the light beam stops here) | ||||||
8D83 | LD A,$27 | A=0x27 (INK 7: PAPER 4) | ||||||
8D85 | CP (HL) | Does HL point at a tile with this attribute value? | ||||||
8D86 | JR NZ,$8D98 | Jump if not (the light beam is not touching Willy) | ||||||
8D88 | EXX | Switch to the shadow registers briefly (to preserve DE and HL) | ||||||
8D89 | CALL $8A3C | Decrease the air supply by four units | ||||||
8D8C | CALL $8A3C | |||||||
8D8F | CALL $8A3C | |||||||
8D92 | CALL $8A3C | |||||||
8D95 | EXX | Switch back to the normal registers (restoring DE and HL) | ||||||
8D96 | JR $8DA5 | Jump forward to draw the light beam over Willy | ||||||
8D98 | LD A,($8020) | Pick up the attribute byte of the background tile for the cavern from 8020 | ||||||
8D9B | CP (HL) | Does HL point at a background tile? | ||||||
8D9C | JR Z,$8DA5 | Jump if so (the light beam will not be reflected at this point) | ||||||
8D9E | LD A,E | Toggle the value in DE between 32 and -1 (and therefore the direction of the light beam between vertically downwards and horizontally to the left): the light beam has hit a guardian | ||||||
8D9F | XOR $DF | |||||||
8DA1 | LD E,A | |||||||
8DA2 | LD A,D | |||||||
8DA3 | CPL | |||||||
8DA4 | LD D,A | |||||||
8DA5 | LD (HL),$77 | Draw a portion of the light beam with attribute value 0x77 (INK 7: PAPER 6: BRIGHT 1) | ||||||
8DA7 | ADD HL,DE | Point HL at the cell where the next portion of the light beam will be drawn | ||||||
8DA8 | JR $8D79 | Jump back to draw the next portion of the light beam |
Prev: 8D0F | Up: Map |