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 |