Prev: 59865 Up: Map Next: 60051
59874: Erase Sprite Trail
Used by the routines at Handler_Player and Handler_Pirates.
Clears the character-wide strip left behind when a sprite moves.
Input
IX Sprite data
B Current vertical position
C Current horizontal position
D Current vertical offset
E Current horizontal offset
EraseSpriteTrail 59874 LD A,C A=C.
59875 SUB (IX+13) A-=*IX+13.
59878 JR Z,EraseSpriteTrail_TestHorizontal Jump to EraseSpriteTrail_TestHorizontal if the result is zero.
59880 CP 255 Compare A with 255.
59882 PUSH AF Stash AF on the stack.
59883 CALL Z,EraseSpriteTrail_EraseLeftColumn Call EraseSpriteTrail_EraseLeftColumn if A is equal to 255.
59886 POP AF Restore AF from the stack.
59887 CALL NZ,EraseSpriteTrail_EraseRightColumn Call EraseSpriteTrail_EraseRightColumn if A is not equal to 255.
59890 JR EraseSpriteTrail_TestVertical Jump to EraseSpriteTrail_TestVertical.
EraseSpriteTrail_TestHorizontal 59892 LD A,E Jump to EraseSpriteTrail_TestVertical if E is equal to *IX+11.
59893 CP (IX+11)
59896 JR Z,EraseSpriteTrail_TestVertical
59898 CP 3 Call EraseSpriteTrail_EraseRightColumn if E is equal to 3.
59900 CALL Z,EraseSpriteTrail_EraseRightColumn
EraseSpriteTrail_TestVertical 59903 LD A,B A=B.
59904 SUB (IX+14) A-=*IX+14.
59907 JR Z,EraseSpriteTrail_TestVerticalOffset Jump to EraseSpriteTrail_TestVerticalOffset if the result is zero.
EraseSpriteTrail_CompareVerticalDelta 59909 CP 255 Compare A with 255.
59911 PUSH AF Stash AF on the stack.
59912 CALL Z,EraseSpriteTrail_EraseUpRow Call EraseSpriteTrail_EraseUpRow if A was equal to 255 (on line EraseSpriteTrail_CompareVerticalDelta).
59915 POP AF Restore AF from the stack.
59916 CALL NZ,EraseSpriteTrail_EraseDownRow Call EraseSpriteTrail_EraseDownRow if A was not equal to 255 (on line EraseSpriteTrail_CompareVerticalDelta).
59919 JR EraseSpriteTrail_Return Jump to EraseSpriteTrail_Return.
EraseSpriteTrail_TestVerticalOffset 59921 LD A,D Jump to EraseSpriteTrail_Return if D is equal to *IX+15.
59922 CP (IX+15)
59925 JR Z,EraseSpriteTrail_Return
59927 CP 3 Call EraseSpriteTrail_EraseDownRow if D is equal to 3.
59929 CALL Z,EraseSpriteTrail_EraseDownRow
EraseSpriteTrail_Return 59932 RET Return.
EraseSpriteTrail_EraseLeftColumn 59933 PUSH BC Stash BC and DE on the stack.
59934 PUSH DE
59935 LD C,(IX+13) C=*IX+13.
59938 LD B,(IX+14) B=*IX+14.
59941 LD D,(IX+8) D=*IX+8.
59944 LD E,1 E=1.
59946 LD A,(IX+15) Jump to EraseSpriteTrail_EraseLeftTiles if *IX+15 is equal to 3.
59949 CP 3
59951 JR Z,EraseSpriteTrail_EraseLeftTiles
59953 INC D Increment D by one.
EraseSpriteTrail_EraseLeftTiles 59954 CALL PrintSpriteUpdateBuffer Call PrintSpriteUpdateBuffer.
59957 POP DE Restore DE and BC from the stack.
59958 POP BC
59959 RET Return.
EraseSpriteTrail_EraseRightColumn 59960 PUSH BC Stash BC and DE on the stack.
59961 PUSH DE
59962 LD A,(IX+13) A=*IX+13.
59965 LD C,(IX+7) C=*IX+7.
59968 SUB C A-=C.
59969 LD C,A C=A.
59970 LD B,(IX+14) B=*IX+14.
59973 LD D,(IX+8) D=*IX+8.
59976 LD E,1 E=1.
59978 LD A,(IX+3) Jump to EraseSpriteTrail_EraseRightTiles if *IX+3 is equal to 3.
59981 CP 3
59983 JR Z,EraseSpriteTrail_EraseRightTiles
59985 INC D Increment D by one.
EraseSpriteTrail_EraseRightTiles 59986 CALL PrintSpriteUpdateBuffer Call PrintSpriteUpdateBuffer.
59989 POP DE Restore DE and BC from the stack.
59990 POP BC
59991 RET Return.
EraseSpriteTrail_EraseDownRow 59992 PUSH BC Stash BC and DE on the stack.
59993 PUSH DE
59994 LD A,(IX+14) A=*IX+14.
59997 LD D,(IX+8) D=*IX+8.
60000 SUB D A-=D.
60001 LD B,A B=A.
60002 LD E,(IX+7) E=*IX+7.
60005 LD C,(IX+13) C=*IX+13.
60008 LD D,1 D=1.
60010 LD A,(IX+2) Jump to EraseSpriteTrail_EraseDownTiles if *IX+2 is equal to 3.
60013 CP 3
60015 JR Z,EraseSpriteTrail_EraseDownTiles
60017 INC E Increment E by one.
EraseSpriteTrail_EraseDownTiles 60018 CALL PrintSpriteUpdateBuffer Call PrintSpriteUpdateBuffer.
60021 POP DE Restore DE and BC from the stack.
60022 POP BC
60023 RET Return.
EraseSpriteTrail_EraseUpRow 60024 PUSH BC Stash BC and DE on the stack.
60025 PUSH DE
60026 LD C,(IX+13) C=*IX+13.
60029 LD B,(IX+14) B=*IX+14.
60032 LD D,1 D=1.
60034 LD E,(IX+7) E=*IX+7.
60037 LD A,(IX+11) Jump to EraseSpriteTrail_EraseUpTiles if *IX+11 is equal to 3.
60040 CP 3
60042 JR Z,EraseSpriteTrail_EraseUpTiles
60044 INC E Increment E by one.
EraseSpriteTrail_EraseUpTiles 60045 CALL PrintSpriteUpdateBuffer Call PrintSpriteUpdateBuffer.
60048 POP DE Restore DE and BC from the stack.
60049 POP BC
60050 RET Return.
Prev: 59865 Up: Map Next: 60051