![]() |
Routines |
| Prev: 96D1 | Up: Map | Next: 9797 |
|
Used by the routine at 940C.
|
||||
| 96D9 | LD A,($5C7C) | Is Monty at the bottom of the screen? | ||
| 96DC | CP $41 | |||
| 96DE | JP NC,$943C | Jump back to the main loop if not. | ||
| 96E1 | LD HL,$2F02 | Initialize the minecart's position to X=02 y=2F | ||
| 96E4 | LD ($9797),HL | Store this | ||
| 96E7 | LD HL,$3702 | Initialize Monty's position to X=02 y=37 | ||
| 96EA | LD ($5C7B),HL | Store this. | ||
| 96ED | LD B,$80 | Run for 80 times. | ||
| 96EF | PUSH BC | Store BC | ||
| 96F0 | LD HL,$5C7B | Increment Monty's x co-ordinate. | ||
| 96F3 | INC (HL) | |||
| 96F4 | LD HL,$9797 | Increment the minecart's x co-ordinate. | ||
| 96F7 | INC (HL) | |||
| 96F8 | LD HL,($5C7B) | Set Monty's co-ordinates as the location to print. | ||
| 96FB | LD ($ECDE),HL | |||
| 96FE | LD HL,$861C | Set the graphic to Monty right (861C). | ||
| 9701 | LD ($ECE0),HL | |||
| 9704 | CALL $EBE0 | Print the graphic. | ||
| 9707 | LD HL,($9797) | Set the minecart's co-ordinates as the location to print. | ||
| 970A | LD ($ECDE),HL | |||
| 970D | LD HL,$6F80 | Set the graphic to the minecart (6F80). | ||
| 9710 | LD A,($848E) | Cycle Monty's current frame from 0 to 7. This is used in the animation cycle for the minecart. | ||
| 9713 | INC A | |||
| 9714 | AND $07 | |||
| 9716 | LD ($848E),A | |||
| 9719 | RRCA | Put the lowest 3 bits in B. | ||
| 971A | AND $03 | |||
| 971C | LD B,A | |||
| 971D | LD DE,$0020 | Set DE to move forward a graphic frame with each iteration. | ||
| 9720 | OR A | If the frame is 0, skip ahead. | ||
| 9721 | JR Z,$9726 | |||
| 9723 | ADD HL,DE | Move to the next row. | ||
| 9724 | DJNZ $9723 | |||
| 9726 | LD ($ECE0),HL | Set the graphic frame as the one to draw. | ||
| 9729 | CALL $EBE0 | Draw the minecart. | ||
| 972C | POP BC | Restore BC and loop if there is more to do. | ||
| 972D | DJNZ $96EF | |||
|
The minecart has now hit the buffers. Tip it.
|
||||
| 972F | LD HL,$7780 | 7780 is the empty graphic. | ||
| 9732 | LD ($ECE0),HL | Set the graphic to draw. | ||
| 9735 | LD HL,($5C7B) | Set at the current position. | ||
| 9738 | LD ($ECDE),HL | |||
| 973B | CALL $EBE0 | Draw the graphic. | ||
| 973E | LD HL,$3F98 | Set a new position to 98 3F. | ||
| 9741 | LD ($5C7B),HL | |||
| 9744 | LD B,$20 | Run for 20 times. | ||
| 9746 | PUSH BC | Remember BC. | ||
| 9747 | LD A,B | Put the next frame in DE. | ||
| 9748 | DEC A | |||
| 9749 | AND $18 | |||
| 974B | ADD A,A | |||
| 974C | ADD A,A | |||
| 974D | LD E,A | |||
| 974E | LD D,$00 | |||
| 9750 | PUSH DE | Remember this. | ||
| 9751 | LD HL,$7000 | Add to the base offset of the tipping minecart graphic (7000). | ||
| 9754 | ADD HL,DE | |||
| 9755 | LD ($ECE0),HL | Set this as the graphic to print. | ||
| 9758 | LD HL,($9797) | Set the location to be X = 97 Y = 97. | ||
| 975B | LD ($ECDE),HL | |||
| 975E | CALL $EBE0 | Draw the graphic. | ||
| 9761 | LD HL,($5C7B) | Get Monty's position. | ||
| 9764 | LD ($ECDE),HL | Set this as the position of the next sprite to update. (ECDE). | ||
| 9767 | POP DE | Restore DE. | ||
| 9768 | ADD HL,DE | No effect, HL is overwritten in the next instruction. | ||
| 9769 | LD HL,$9799 | Set the location to be X = 97 Y = 99. | ||
| 976C | LD ($ECE0),HL | |||
| 976F | CALL $EBE0 | Draw the graphic. | ||
| 9772 | LD IX,$5C7B | Move monty 1 to the right and 1 down. | ||
| 9776 | INC (IX+$00) | |||
| 9779 | DEC (IX+$01) | |||
| 977C | POP BC | Restore BC. | ||
| 977D | DJNZ $9746 | Loop while there is still more to draw. | ||
|
Monty has fallen off the edge, put him in the next room.
|
||||
| 977F | LD A,$11 | Set A to 11 to set up some flags. | ||
| 9781 | LD HL,$A1C0 | Set the position to X = C0 Y = A1. | ||
| 9784 | LD ($5C7B),HL | |||
| 9787 | LD ($964B),HL | |||
| 978A | LD ($9649),A | Set the current room to 11. | ||
| 978D | XOR A | Reset distance fallen. | ||
| 978E | LD ($8D58),A | |||
| 9791 | LD ($8498),A | Reset time jumping. | ||
| 9794 | JP $940C | Enter the new room. | ||
| Prev: 96D1 | Up: Map | Next: 9797 |