![]() |
Routines |
| Prev: 8D73 | Up: Map | Next: 8DF8 |
|
Used by the routine at 870E.
|
||||
| 8DAA | LD IY,$80BE | Point IY at the first byte of the first horizontal guardian definition at 80BE | ||
|
The guardian-drawing loop begins here.
|
||||
| 8DAE | LD A,(IY+$00) | Pick up the first byte of the guardian definition | ||
| 8DB1 | CP $FF | Have we dealt with all the guardians yet? | ||
| 8DB3 | RET Z | Return if so | ||
| 8DB4 | OR A | Is this guardian definition blank? | ||
| 8DB5 | JR Z,$8DF1 | If so, skip it and consider the next one | ||
| 8DB7 | LD DE,$001F | Prepare DE for addition | ||
| 8DBA | LD L,(IY+$01) | Point HL at the address of the guardian's location in the attribute buffer at 5C00 | ||
| 8DBD | LD H,(IY+$02) | |||
| 8DC0 | AND $7F | Reset bit 7 (which specifies the animation speed) of the attribute byte, ensuring no FLASH | ||
| 8DC2 | LD (HL),A | Set the attribute bytes for the guardian in the buffer at 5C00 | ||
| 8DC3 | INC HL | |||
| 8DC4 | LD (HL),A | |||
| 8DC5 | ADD HL,DE | |||
| 8DC6 | LD (HL),A | |||
| 8DC7 | INC HL | |||
| 8DC8 | LD (HL),A | |||
| 8DC9 | LD C,$01 | Prepare C for the call to the drawing routine at 8FF4 later on | ||
| 8DCB | LD A,(IY+$04) | Pick up the animation frame (0-7) | ||
| 8DCE | RRCA | Multiply it by 32 | ||
| 8DCF | RRCA | |||
| 8DD0 | RRCA | |||
| 8DD1 | LD E,A | Copy the result to E | ||
| 8DD2 | LD A,($8407) | Pick up the number of the current cavern from 8407 | ||
| 8DD5 | CP $07 | Are we in one of the first seven caverns? | ||
| 8DD7 | JR C,$8DE3 | Jump if so | ||
| 8DD9 | CP $09 | Are we in The Endorian Forest? | ||
| 8DDB | JR Z,$8DE3 | Jump if so | ||
| 8DDD | CP $0F | Are we in The Sixteenth Cavern? | ||
| 8DDF | JR Z,$8DE3 | Jump if so | ||
| 8DE1 | SET 7,E | Add 0x80 to E (the horizontal guardians in this cavern use frames 4-7 only) | ||
| 8DE3 | LD D,$81 | Point DE at the graphic data for the appropriate guardian sprite (at 8100+E) | ||
| 8DE5 | LD L,(IY+$01) | Point HL at the address of the guardian's location in the screen buffer at 6000 | ||
| 8DE8 | LD H,(IY+$03) | |||
| 8DEB | CALL $8FF4 | Draw the guardian to the screen buffer at 6000 | ||
| 8DEE | JP NZ,$8D06 | Kill Willy if the guardian collided with him | ||
|
The current guardian definition has been dealt with. Time for the next one.
|
||||
| 8DF1 | LD DE,$0007 | Point IY at the first byte of the next horizontal guardian definition | ||
| 8DF4 | ADD IY,DE | |||
| 8DF6 | JR $8DAE | Jump back to deal with the next horizontal guardian | ||
| Prev: 8D73 | Up: Map | Next: 8DF8 |