![]() |
Routines |
| Prev: 8DAA | Up: Map |
|
Used by the routine at 870E. First we move Eugene up or down, or change his direction.
|
||||||||
| 8DF8 | LD A,($8074) | Pick up the attribute of the last item drawn from 8074 | ||||||
| 8DFB | OR A | Have all the items been collected? | ||||||
| 8DFC | JR Z,$8E0F | Jump if so | ||||||
| 8DFE | LD A,($80DB) | Pick up Eugene's direction from 80DB | ||||||
| 8E01 | OR A | Is Eugene moving downwards? | ||||||
| 8E02 | JR Z,$8E0F | Jump if so | ||||||
| 8E04 | LD A,($80DC) | Pick up Eugene's pixel y-coordinate from 80DC | ||||||
| 8E07 | DEC A | Decrement it (moving Eugene up) | ||||||
| 8E08 | JR Z,$8E1C | Jump if Eugene has reached the top of the cavern | ||||||
| 8E0A | LD ($80DC),A | Update Eugene's pixel y-coordinate at 80DC | ||||||
| 8E0D | JR $8E24 | |||||||
| 8E0F | LD A,($80DC) | Pick up Eugene's pixel y-coordinate from 80DC | ||||||
| 8E12 | INC A | Increment it (moving Eugene down) | ||||||
| 8E13 | CP $58 | Has Eugene reached the portal yet? | ||||||
| 8E15 | JR Z,$8E1C | Jump if so | ||||||
| 8E17 | LD ($80DC),A | Update Eugene's pixel y-coordinate at 80DC | ||||||
| 8E1A | JR $8E24 | |||||||
| 8E1C | LD A,($80DB) | Toggle Eugene's direction at 80DB | ||||||
| 8E1F | XOR $01 | |||||||
| 8E21 | LD ($80DB),A | |||||||
|
Now that Eugene's movement has been dealt with, it's time to draw him.
|
||||||||
| 8E24 | LD A,($80DC) | Pick up Eugene's pixel y-coordinate from 80DC | ||||||
| 8E27 | AND $7F | Point DE at the entry in the screen buffer address lookup table at 8300 that corresponds to Eugene's y-coordinate | ||||||
| 8E29 | RLCA | |||||||
| 8E2A | LD E,A | |||||||
| 8E2B | LD D,$83 | |||||||
| 8E2D | LD A,(DE) | Point HL at the address of Eugene's location in the screen buffer at 6000 | ||||||
| 8E2E | OR $0F | |||||||
| 8E30 | LD L,A | |||||||
| 8E31 | INC DE | |||||||
| 8E32 | LD A,(DE) | |||||||
| 8E33 | LD H,A | |||||||
| 8E34 | LD DE,$80E0 | Draw Eugene to the screen buffer at 6000 | ||||||
| 8E37 | LD C,$01 | |||||||
| 8E39 | CALL $8FF4 | |||||||
| 8E3C | JP NZ,$8D06 | Kill Willy if Eugene collided with him | ||||||
| 8E3F | LD A,($80DC) | Pick up Eugene's pixel y-coordinate from 80DC | ||||||
| 8E42 | AND $78 | Point HL at the address of Eugene's location in the attribute buffer at 5C00 | ||||||
| 8E44 | RLCA | |||||||
| 8E45 | OR $07 | |||||||
| 8E47 | SCF | |||||||
| 8E48 | RL A | |||||||
| 8E4A | LD L,A | |||||||
| 8E4B | LD A,$00 | |||||||
| 8E4D | ADC A,$5C | |||||||
| 8E4F | LD H,A | |||||||
| 8E50 | LD A,($8074) | Pick up the attribute of the last item drawn from 8074 | ||||||
| 8E53 | OR A | Set the zero flag if all the items have been collected | ||||||
| 8E54 | LD A,$07 | Assume we will draw Eugene with white INK | ||||||
| 8E56 | JR NZ,$8E5F | Jump if there are items remaining to be collected | ||||||
| 8E58 | LD A,($80BD) | Pick up the value of the game clock at 80BD | ||||||
| 8E5B | RRCA | Move bits 2-4 into bits 0-2 and clear the other bits; this value (which decreases by one on each pass through the main loop) will be Eugene's INK colour | ||||||
| 8E5C | RRCA | |||||||
| 8E5D | AND $07 | |||||||
| 8E5F | LD (HL),A | Save the INK colour in the attribute buffer temporarily | ||||||
| 8E60 | LD A,($8020) | Pick up the attribute byte of the background tile for the current cavern from 8020 | ||||||
| 8E63 | AND $F8 | Combine its PAPER colour with the chosen INK colour | ||||||
| 8E65 | OR (HL) | |||||||
| 8E66 | LD (HL),A | Set the attribute byte for the top-left cell of the sprite in the attribute buffer at 5C00 | ||||||
| 8E67 | LD DE,$001F | Prepare DE for addition | ||||||
| 8E6A | INC HL | Set the attribute byte for the top-right cell of the sprite in the attribute buffer at 5C00 | ||||||
| 8E6B | LD (HL),A | |||||||
| 8E6C | ADD HL,DE | Set the attribute byte for the middle-left cell of the sprite in the attribute buffer at 5C00 | ||||||
| 8E6D | LD (HL),A | |||||||
| 8E6E | INC HL | Set the attribute byte for the middle-right cell of the sprite in the attribute buffer at 5C00 | ||||||
| 8E6F | LD (HL),A | |||||||
| 8E70 | ADD HL,DE | Set the attribute byte for the bottom-left cell of the sprite in the attribute buffer at 5C00 | ||||||
| 8E71 | LD (HL),A | |||||||
| 8E72 | INC HL | Set the attribute byte for the bottom-right cell of the sprite in the attribute buffer at 5C00 | ||||||
| 8E73 | LD (HL),A | |||||||
| 8E74 | RET | |||||||
| Prev: 8DAA | Up: Map |