| Dynamite Dan | Routines | 
| Prev: D1CE | Up: Map | Next: D2F0 | 
| 
Used by the routine at D1CE.
 
 | ||||||||||||
| D2BF | AND A | Are there any objects left? | ||||||||||
| D2C0 | RET Z | Return if there aren't. | ||||||||||
| D2C1 | LD L,A | Put the object count in HL. | ||||||||||
| D2C2 | LD A,($D1CD) | Get the collision attribute (D1CD). | ||||||||||
| D2C5 | CP (IY+$05) | Does it equal this one? | ||||||||||
| D2C8 | JR NZ,$D2D5 | Move forward if it doesn't. | ||||||||||
| 
The attribute matches the one collided with, now check the position.
 | ||||||||||||
| D2CA | LD E,(IY+$00) | Put the co-ordinates in DE. | ||||||||||
| D2CD | LD D,(IY+$01) | |||||||||||
| D2D0 | CALL $DB38 | Has Dan collided with it? | ||||||||||
| D2D3 | JR C,$D2DE | Yes, so remove it. | ||||||||||
| D2D5 | LD DE,$0008 | Otherwise, move to the next object. | ||||||||||
| D2D8 | ADD IY,DE | |||||||||||
| D2DA | DEC L | Decrement the object count. | ||||||||||
| D2DB | JR NZ,$D2C2 | Loop until we've looked at all objects. | ||||||||||
| D2DD | RET | |||||||||||
| 
Found the object Dan collided with, so remove it.
 | ||||||||||||
| D2DE | LD D,(IY+$01) | Put the position of the object in DE. | ||||||||||
| D2E1 | LD A,(IY+$00) | |||||||||||
| D2E4 | ADD A,C | |||||||||||
| D2E5 | DEC A | |||||||||||
| D2E6 | LD E,A | |||||||||||
| D2E7 | SET 6,(IY+$04) | Set the "object removed" flag. | ||||||||||
| D2EB | CALL $E897 | Remove the object from screen. | ||||||||||
| D2EE | POP HL | Clear the stack, so return won't pass to the calling routine (D1CE) but to the routine above that ie: do an early return. (For homework, look up "tail call optimisation"). | ||||||||||
| D2EF | RET | |||||||||||
| Prev: D1CE | Up: Map | Next: D2F0 |