![]() |
Routines |
| Prev: 8EF1 | Up: Map | Next: 8FC5 |
|
Used by the routine at 870E.
|
||||
| 8F63 | XOR A | Initialise the attribute of the last item drawn at 8074 to 0x00 (in case there are no items left to draw) | ||
| 8F64 | LD ($8074),A | |||
| 8F67 | LD IY,$8075 | Point IY at the first byte of the first item definition at 8075 | ||
|
The item-drawing loop begins here.
|
||||
| 8F6B | LD A,(IY+$00) | Pick up the first byte of the item definition | ||
| 8F6E | CP $FF | Have we dealt with all the items yet? | ||
| 8F70 | JR Z,$8FBA | Jump if so | ||
| 8F72 | OR A | Has this item already been collected? | ||
| 8F73 | JR Z,$8FAE | If so, skip it and consider the next one | ||
| 8F75 | LD E,(IY+$01) | Point DE at the address of the item's location in the attribute buffer at 5C00 | ||
| 8F78 | LD D,(IY+$02) | |||
| 8F7B | LD A,(DE) | Pick up the current attribute byte at the item's location | ||
| 8F7C | AND $07 | Is the INK white (which happens if Willy is touching the item)? | ||
| 8F7E | CP $07 | |||
| 8F80 | JR NZ,$8F8E | Jump if not | ||
|
Willy is touching this item, so add it to his collection.
|
||||
| 8F82 | LD HL,$842C | Add 100 to the score | ||
| 8F85 | CALL $90FE | |||
| 8F88 | LD (IY+$00),$00 | Set the item's attribute byte to 0x00 so that it will be skipped the next time | ||
| 8F8C | JR $8FAE | Jump forward to consider the next item | ||
|
This item has not been collected yet.
|
||||
| 8F8E | LD A,(IY+$00) | Pick up the item's current attribute byte | ||
| 8F91 | AND $F8 | Keep the BRIGHT and PAPER bits, and set the INK to 3 (magenta) | ||
| 8F93 | OR $03 | |||
| 8F95 | LD B,A | Store this value in B | ||
| 8F96 | LD A,(IY+$00) | Pick up the item's current attribute byte again | ||
| 8F99 | AND $03 | Keep only bits 0 and 1 and add the value in B; this maintains the BRIGHT and PAPER bits, and cycles the INK colour through 3, 4, 5 and 6 | ||
| 8F9B | ADD A,B | |||
| 8F9C | LD (IY+$00),A | Store the new attribute byte | ||
| 8F9F | LD (DE),A | Update the attribute byte at the item's location in the buffer at 5C00 | ||
| 8FA0 | LD ($8074),A | Store the new attribute byte at 8074 as well | ||
| 8FA3 | LD D,(IY+$03) | Point DE at the address of the item's location in the screen buffer at 6000 | ||
| 8FA6 | LD HL,$80B4 | Point HL at the item graphic for the current cavern (at 80B4) | ||
| 8FA9 | LD B,$08 | There are eight pixel rows to copy | ||
| 8FAB | CALL $92D5 | Draw the item to the screen buffer at 6000 | ||
|
The current item definition has been dealt with. Time for the next one.
|
||||
| 8FAE | INC IY | Point IY at the first byte of the next item definition | ||
| 8FB0 | INC IY | |||
| 8FB2 | INC IY | |||
| 8FB4 | INC IY | |||
| 8FB6 | INC IY | |||
| 8FB8 | JR $8F6B | Jump back to deal with the next item | ||
|
All the items have been dealt with. Check whether there were any left.
|
||||
| 8FBA | LD A,($8074) | Pick up the attribute of the last item drawn at 8074 | ||
| 8FBD | OR A | Were any items drawn? | ||
| 8FBE | RET NZ | Return if so (some remain to be collected) | ||
| 8FBF | LD HL,$808F | Ensure that the portal is flashing by setting bit 7 of its attribute byte at 808F | ||
| 8FC2 | SET 7,(HL) | |||
| 8FC4 | RET | |||
| Prev: 8EF1 | Up: Map | Next: 8FC5 |