| Dynamite Dan | Routines |
| Prev: D815 | Up: Map | Next: D951 |
|
Used by the routine at CFD9.
|
||||
| D895 | LD A,($C87B) | Get the lift flags. (C87B) | ||
| D898 | BIT 2,A | Is Dan standing on the lift? | ||
| D89A | JP NZ,$D92C | Jump forward if so. | ||
| D89D | LD DE,($C872) | Get Dan's co-ordinate (C872, C873) | ||
| D8A1 | LD A,$1A | Add 1A to the Y co-ordinate and store it in E. This will make DE hold a valid screen address. | ||
| D8A3 | ADD A,E | |||
| D8A4 | LD E,A | |||
| D8A5 | CALL $E909 | Convert this into an attribute address. | ||
| D8A8 | LD A,($C875) | Get Dan's current animation frame. | ||
| D8AB | CP $04 | Jump forward if is it 4 or less than 2. | ||
| D8AD | JR Z,$D8B4 | |||
| D8AF | CP $03 | |||
| D8B1 | JR C,$D8B4 | |||
| D8B3 | INC E | Otherwise move to the next column. | ||
| D8B4 | LD A,(DE) | Put the attribute found here in B. | ||
| D8B5 | LD B,A | |||
| D8B6 | INC E | Move to the next column. | ||
| D8B7 | LD A,(DE) | Put the attribute found here in C. | ||
| D8B8 | LD C,A | |||
|
See if there is a floor here.
|
||||
| D8B9 | LD HL,$CFCC | Point HL to the list of global floor attributes. | ||
| D8BC | LD D,$07 | 7 entries to check. | ||
| D8BE | LD E,(HL) | Get the attribute. | ||
| D8BF | CALL $D9AA | Does either attribute Dan's standing by match? | ||
| D8C2 | JR Z,$D917 | Jump forward if it does. | ||
| D8C4 | INC HL | Move to the next entry. | ||
| D8C5 | DEC D | Loop while there are more entries to check. | ||
| D8C6 | JR NZ,$D8BE | |||
|
Check for Dan passing over special items.
|
||||
| D8C8 | LD A,($CFC9) | Put the food attribute for this room in E. | ||
| D8CB | LD E,A | |||
| D8CC | CALL $D9AA | Is Dan near enough the food? | ||
| D8CF | JP Z,$DBB8 | Jump forward if so. | ||
| D8D2 | LD E,$38 | Is Dan standing by an oxygen tank? | ||
| D8D4 | CALL $D9AA | |||
| D8D7 | JP Z,$DE0B | Jump forward if so. | ||
| D8DA | LD E,$68 | Is Dan standing by a bank card? | ||
| D8DC | CALL $D9AA | |||
| D8DF | JP Z,$DE1B | Jump forward if so. | ||
| D8E2 | LD E,$60 | Is Dan standing by an aerosol? | ||
| D8E4 | CALL $D9AA | |||
| D8E7 | JP Z,$DE28 | Jump if so. | ||
| D8EA | LD E,$02 | Is Dan standing on something red on black? | ||
| D8EC | CALL $D9AA | |||
| D8EF | JR NZ,$D8FE | Jump if not. | ||
|
Dan's standing on a red on black object. On the bottom 8 screens, this is the raft - elsewhere it's a trampoline.
|
||||
| D8F1 | LD A,($CFCA) | Get the current room. (CFCA) | ||
| D8F4 | CP $08 | Is it less than 8? | ||
| D8F6 | JP NC,$D2F0 | Jump forward if it isn't - it's a trampoline. | ||
|
Dan's standing on the raft.
|
||||
| D8F9 | LD A,$0D | Set the height above the water to 0D. | ||
| D8FB | JP $D919 | Jump forward. | ||
| D8FE | LD E,$4F | Has Dan hit the river? | ||
| D900 | CALL $D9AA | |||
| D903 | JR Z,$D938 | Jump forward if so. | ||
| D905 | LD A,($C874) | Put some flags (C874) in B. | ||
| D908 | LD B,A | |||
| D909 | AND $51 | Reset all flags except bits 0 (jumping), 4 (rising off a trampoline) and 6 (mid-air). | ||
| D90B | JR NZ,$D912 | Jump forward if no flags remain. | ||
| D90D | LD A,$18 | Set the note to play while in mid-air (CFCB) to 18. | ||
| D90F | LD ($CFCB),A | |||
| D912 | LD A,B | Get a copy of the flags from earlier. | ||
| D913 | SET 6,A | Set bit 6 (in mid-air and falling). | ||
| D915 | JR $D94D | Move forward to write the flags to memory. | ||
| D917 | LD A,$0E | Set the height above the water to 0D. | ||
| D919 | LD ($DBED),A | |||
| D91C | LD A,($C872) | Get the lowest 3 bits of the Y co-ordinate. | ||
| D91F | AND $07 | |||
| D921 | CP $06 | Are only bits 2 and 3 set? | ||
| D923 | JR NZ,$D950 | Jump forward if not the case. | ||
| D925 | LD A,($C874) | Get some flags. (C874) | ||
| D928 | AND $11 | Reset all flags except bits 0 (jumping) and 4 (rising off trampoline) | ||
| D92A | JR NZ,$D944 | Jump forward if flags remain. | ||
|
Check Dan hasn't fallen too far.
|
||||
| D92C | LD A,($C876) | Get the height fallen by. (C876) | ||
| D92F | CP $1C | It is less than 1C? | ||
| D931 | JR C,$D944 | Jump forward if so. | ||
| D933 | CALL $CD8A | Otherwise, Dan has fallen too far, so lose a life. | ||
| D936 | JR $D944 | Jump forward to set the flags. | ||
|
Dan has fallen in the river. Oh dear.
|
||||
| D938 | LD A,$0D | Set the height above the river to 0D. | ||
| D93A | LD ($DBED),A | |||
| D93D | LD A,($C874) | Get some flags. (C874) | ||
| D940 | SET 7,A | Set bit 7 (drowning) | ||
| D942 | JR $D94D | Jump forward to write the flags to memory. | ||
|
Dan has landed safely, so reset the height fallen.
|
||||
| D944 | XOR A | Set the height to 0. | ||
| D945 | LD ($C876),A | |||
| D948 | LD A,($C874) | Get some flags. (C874) | ||
| D94B | AND $22 | Reset everything except bit 1 (facing right) and 5 (safe). | ||
| D94D | LD ($C874),A | Write the flags back to memory. | ||
|
This entry point is used by the routine at D2F0.
|
||||
| D950 | RET | |||
| Prev: D815 | Up: Map | Next: D951 |