Routines |
Prev: 874E | Up: Map | Next: 8866 |
8751 | LD HL,$C596 | Point HL at the start of the nasty buffer. (C596) | ||
8754 | LD B,$06 | Maximum of six characters on screen. | ||
8756 | NOP | |||
8757 | PUSH BC | Remember character count. | ||
8758 | PUSH HL | Swap HL for IX so the buffer can be indexed. | ||
8759 | POP IX | |||
875B | LD A,(IX+$00) | Get the type flag. | ||
875E | OR A | If the type is not 0, skip forward. | ||
875F | JP NZ,$887D | |||
Move a simple nasty. This entry point is used by the routine at 8964.
|
||||
8762 | LD L,(IX+$0C) | Put the current X co-ordinate in L. | ||
8765 | LD H,(IX+$0D) | Put the current Y co-ordinate in H. | ||
8768 | LD ($8962),HL | Store this in 8962. | ||
876B | LD A,(IX+$0B) | Get the current direction. | ||
876E | OR A | Is it down? | ||
876F | JR NZ,$87A6 | No, so jump forward. | ||
Moving up.
|
||||
8771 | LD B,(IX+$11) | Increment the Y co-ordinate by the speed. | ||
8774 | LD A,(IX+$0D) | |||
8777 | ADD A,B | |||
8778 | LD (IX+$0D),A | |||
877B | LD L,(IX+$01) | Put the "up" graphic in HL. | ||
877E | LD H,(IX+$02) | |||
8781 | LD A,(IX+$10) | Decrement the distance to travel. | ||
8784 | DEC A | |||
8785 | JR NZ,$8797 | Skip the next code if it is not zero. | ||
8787 | LD L,(IX+$03) | Put the "down" graphic in HL. | ||
878A | LD H,(IX+$04) | |||
878D | LD A,(IX+$0B) | Change the direction to "down". | ||
8790 | INC A | |||
8791 | LD (IX+$0B),A | |||
8794 | LD A,(IX+$0E) | Set the distance to travel back to the default. | ||
8797 | LD (IX+$10),A | |||
879A | LD A,(IX+$0F) | Increment the animation frame, looping from 0 - 7. | ||
879D | INC A | |||
879E | AND $07 | |||
87A0 | LD (IX+$0F),A | |||
87A3 | JP $8827 | Move forward to draw the nasty. | ||
Moving down.
|
||||
87A6 | CP $01 | Is the direction up? | ||
87A8 | JR NZ,$87D2 | No, so jump forward. | ||
87AA | LD A,(IX+$0D) | Decrement the Y co-ordinate by the speed. | ||
87AD | LD B,(IX+$11) | |||
87B0 | SUB B | |||
87B1 | LD (IX+$0D),A | |||
87B4 | LD A,(IX+$10) | Get the distance to travel. | ||
87B7 | LD L,(IX+$03) | Put the "down" graphic in HL. | ||
87BA | LD H,(IX+$04) | |||
87BD | DEC A | Decrement the distance to travel. | ||
87BE | JR NZ,$8797 | Skip the next code if it is not zero. | ||
87C0 | LD L,(IX+$01) | Put the "up" graphic in HL. | ||
87C3 | LD H,(IX+$02) | |||
87C6 | LD A,(IX+$0B) | Change the direction to "up". | ||
87C9 | DEC A | |||
87CA | LD (IX+$0B),A | |||
87CD | LD A,(IX+$0E) | Set the distance to travel back to the default | ||
87D0 | JR $8797 | Jump back to draw the nasty. | ||
Moving left.
|
||||
87D2 | CP $02 | Is the direction left? | ||
87D4 | JR NZ,$87FE | No, so jump forward. | ||
87D6 | LD A,(IX+$0C) | Decrement the X co-ordinate by the speed. | ||
87D9 | LD B,(IX+$11) | |||
87DC | SUB B | |||
87DD | LD (IX+$0C),A | |||
87E0 | LD A,(IX+$10) | Get the distance to travel. | ||
87E3 | LD L,(IX+$05) | Put the "left" graphic in HL. | ||
87E6 | LD H,(IX+$06) | |||
87E9 | DEC A | Decrement the distance to travel. | ||
87EA | JR NZ,$8797 | Skip the next code if it is not zero. | ||
87EC | LD L,(IX+$07) | Put the "right" graphic in HL. | ||
87EF | LD H,(IX+$08) | |||
87F2 | LD A,(IX+$0B) | Change the direction to "right". | ||
87F5 | INC A | |||
87F6 | LD (IX+$0B),A | |||
87F9 | LD A,(IX+$0E) | Set the distance to travel back to default. | ||
87FC | JR $8797 | Jump back to draw the nasty. | ||
Moving right.
|
||||
87FE | LD A,(IX+$0C) | Increment the X co-ordinate by the speed. | ||
8801 | LD B,(IX+$11) | |||
8804 | ADD A,B | |||
8805 | LD (IX+$0C),A | |||
8808 | LD L,(IX+$07) | Put the "right" graphic in HL. | ||
880B | LD H,(IX+$08) | |||
880E | LD A,(IX+$10) | Decrement the distance to travel. | ||
8811 | DEC A | |||
8812 | JR NZ,$8797 | Skip the next code if it is not zero. | ||
8814 | LD L,(IX+$05) | Put the "left" graphic in HL. | ||
8817 | LD H,(IX+$06) | |||
881A | LD A,(IX+$0B) | Change the direction to "left". | ||
881D | DEC A | |||
881E | LD (IX+$0B),A | |||
8821 | LD A,(IX+$0E) | Set the distance to travel back to the default. | ||
8824 | JP $8797 | Jump back to draw the nasty. | ||
After updating the position, the nasty can be drawn.
|
||||
8827 | EX DE,HL | Swap DE and HL over. | ||
8828 | RRA | Get the top 3 bits of animation to determine the frame to draw. | ||
8829 | AND $03 | |||
882B | LD L,A | Put this in HL. | ||
882C | LD H,$00 | |||
882E | ADD HL,HL | Multiply by 32 to get a address of graphics. | ||
882F | ADD HL,HL | |||
8830 | ADD HL,HL | |||
8831 | ADD HL,HL | |||
8832 | ADD HL,HL | |||
8833 | ADD HL,DE | Add the basic address of the graphics to get the right one. | ||
8834 | LD ($ECE0),HL | Set the graphics to draw. | ||
8837 | LD L,(IX+$0C) | Set the co-ordinates. | ||
883A | LD H,(IX+$0D) | |||
883D | LD ($ECDE),HL | |||
8840 | CALL $EBE0 | Draw the graphic. | ||
8843 | LD A,(IX+$00) | Is the status 0? | ||
8846 | OR A | |||
8847 | JR NZ,$8857 | Move on if not. | ||
The nasty's attributes needs to be drawn.
|
||||
8849 | LD HL,($8962) | Get the old position. | ||
884C | LD C,$47 | Use bright white to erase the old attribute. | ||
884E | NOP | |||
884F | NOP | |||
8850 | NOP | |||
8851 | CALL $886F | Draw these specific attributes. | ||
8854 | CALL $8866 | Draw the new attributes from the actual nasty data. | ||
All done with this nasty, move to the next. This entry point is used by the routine at 8964.
|
||||
8857 | PUSH IX | Add 14 bytes to point to the next nasty data. | ||
8859 | POP HL | |||
885A | LD DE,$0014 | |||
885D | ADD HL,DE | |||
885E | POP BC | Restore BC. | ||
885F | DJNZ $8863 | Loop back if there are more nasties to look at. | ||
8861 | EI | Otherwise re-enable interrupts and return. | ||
8862 | RET | |||
8863 | JP $8757 |
Prev: 874E | Up: Map | Next: 8866 |