' ****************************************
' MY SILLY SPRITE ROUTINE
'
' NO COLLISION DETECTION. VERY EASY TO ADD
'
' ****************************************
' BY PAUL MACKAY / i LIKE THE TEXT MODE BETTER FOR SPEED, BUT THIS LOOKS BETTER










RANDOMIZE TIMER
REM 8XSPRITES (SPRITE N0#,DATA,DATA,X,Y,COLOUR N#,ANIMATION NO#) : REM PRIORITY IS (1 LOW, 8 HIGH) = (1,2,3,4 BEHIND TEXT AND 5,6,7,8 IN FONT OF TEXT) ANIMATION = ANY AMOUNT) BUT ONLY 8 DISPLAYED AT A TIME:DIM X(8),Y(8),X1(I),Y1(I)
SWIDTH = 64 * 8: SHEIGHT = 16 * 16
DIM SHARED SPRITEMEM%(8,16,16):DIM SHARED SPRITEPO%(8,4):DIM SCREENMEM%(64, 16):DECLARE SUB SPRITE(XCOL%,YCOL%,COL%,SPRITENO%)

CLS
INPUT "X SMOOTH"; YJUMP
INPUT "Y SMOOTH"; XJUMP

SCREEN _NEWIMAGE(SWIDTH, SHEIGHT, 256)
FOR I = 1 TO 8
    FOR J = 1 TO 16
        FOR K = 1 TO 16
            READ L
            SPRITEMEM%(I, J, K) = L
        NEXT K
    NEXT J
NEXT I

REM SET COLOURS FOR SPRITES AND CHARACTER NUMBERS

SPRITE X(1), Y(1), 21, 1, 0
SPRITE X(2), Y(2), 32, 2, 0
SPRITE X(3), Y(3), 43, 3, 0
SPRITE X(4), Y(4), 54, 4, 0
SPRITE X(5), Y(5), 65, 5, 0
SPRITE X(6), Y(6), 76, 6, 0
SPRITE X(7), Y(7), 87, 7, 0
SPRITE X(8), Y(8), 98, 8, 0

FOR I = 1 TO 8: X(I) = INT(RND(1) * SHEIGHT): Y(I) = INT(RND(1) * SWIDTH): DO: B = INT(RND(1) * 2): IF B = 1 OR B = 2 THEN EXIT DO
    LOOP: IF B = 1 THEN X1(I) = -XJUMP ELSE X1(I) = XJUMP
    DO: B = INT(RND(1) * 2): IF B = 1 OR B = 2 THEN EXIT DO
    LOOP: IF B = 1 THEN Y1(I) = YJUMP ELSE Y1(I) = YJUMP
NEXT I

WHILE INKEY$ = ""
    FOR I = 1 TO 8
        IF X(I) < 1 THEN X1(I) = XJUMP ELSE IF X(I) > SHEIGHT - 17 THEN X1(I) = -XJUMP
        X(I) = X(I) + X1(I)
        IF Y(I) < 1 THEN Y1(I) = YJUMP ELSE IF Y(I) > SWIDTH - 17 THEN Y1(I) = -YJUMP
        Y(I) = Y(I) + Y1(I)
        B = SPRITEPO%(I, 3)
        SPRITE X(I), Y(I), B, I, 1
    NEXT I
    _LIMIT 266
WEND

END

SUB SPRITE (XCOL%, YCOL%, COL%, SPRITENO%, SPRITEONOFF%)
    CLS: SPRITEPO%(SPRITENO%, 1) = XCOL%: SPRITEPO%(SPRITENO%, 2) = YCOL%: SPRITEPO%(SPRITENO%, 3) = COL%: SPRITEPO%(SPRITENO%, 4) = SPRITEONOFF%
    REM SPRITES 1 TO 4 BEHIND TEXT. 4 HAVING HIGHEST PRIORITY
    FOR IPX = 1 TO 4
        CURRENT% = SPRITEPO%(IPX, 3)
        XCOL% = SPRITEPO%(IPX, 1)
        YCOL% = SPRITEPO%(IPX, 2)
        FOR I = 1 TO 8
            FOR J = 1 TO 16
                FOR K = 1 TO 16
                    L = SPRITEMEM%(IPX, J, K)
                    SELECT CASE L
                        CASE 0
                            'PSET (K + YCOL% - 1, J + XCOL% - 1), 0
                        CASE 1
                            IF SPRITEPO%(IPX, 4) = 1 THEN PSET (K + YCOL% - 1, J + XCOL% - 1), SPRITEPO%(IPX, 3)
                    END SELECT
                NEXT K
            NEXT J
        NEXT I
    NEXT IPX

    REM THIS IS WERE THE PRINT ROUTINES FOR TEXT GO : FOR I=1 TO 64:FOR J=1 TO 16:PRINT SCREENMEM%(I,J):NEXT : NEXT
    _PRINTMODE _KEEPBACKGROUND
    COLOR 7: LOCATE 6, 6: PRINT "ÛÛ 4 SPRITES IN FRONT OF TEXT": LOCATE 7, 6: PRINT "ÛÛ AND 4 SPRITES BEHIND TEXT"
    COLOR 14: LOCATE 13, 19: PRINT "ÜÜÜÜÜÜÜÜÜÜ": COLOR 6: LOCATE 13, 19: PRINT "----------"
    FOR I = 4 TO 6: COLOR 2: LOCATE 10 + I, 20: PRINT "ÛÛÛ²±°°°";: NEXT I: LINE (0, 0)-(511, 255), _RGB32(150, 150, 15), B

    REM SPRITES 8 TO 5 HIGH PRIORITY PRINT ONTO 8 = HIGHEST / ABOVE TEXT
    FOR IPX = 5 TO 8
        CURRENT% = SPRITEPO%(IPX, 3)
        XCOL% = SPRITEPO%(IPX, 1)
        YCOL% = SPRITEPO%(IPX, 2)
        FOR I = 1 TO 8
            FOR J = 1 TO 16
                FOR K = 1 TO 16
                    L = SPRITEMEM%(IPX, J, K)
                    SELECT CASE L
                        CASE 0
                            'PSET (K + YCOL% - 1, J + XCOL% - 1), 0
                        CASE 1
                            IF SPRITEPO%(IPX, 4) = 1 THEN PSET (K + YCOL% - 1, J + XCOL% - 1), SPRITEPO%(IPX, 3)
                    END SELECT
                NEXT K
            NEXT J
        NEXT I
    NEXT IPX

    _DISPLAY
END SUB




































DATA 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0
DATA 0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 0,1,0,1,1,1,0,0,0,0,1,1,1,0,1,0
DATA 1,0,0,1,0,1,0,0,0,0,1,0,1,0,0,1
DATA 1,0,0,1,1,1,0,0,0,0,1,1,1,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,1,1,1,1,1,1,0,0,0,0,1
DATA 0,1,0,0,1,0,0,0,0,0,0,1,0,0,1,0
DATA 0,1,0,0,0,1,1,1,1,1,1,0,0,0,1,0
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0
DATA 0,0,0,0,0,1,1,1,1,1,1,0,0,0,0,0

DATA 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0
DATA 0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0
DATA 0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0
DATA 1,0,1,0,1,0,1,0,1,0,1,0,1,0,0,0
DATA 0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0
DATA 0,0,1,0,0,0,1,0,0,0,1,0,0,0,0,0
DATA 0,0,0,1,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,1,0,1,0,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1
DATA 1,1,0,1,0,0,0,0,0,0,0,1,0,1,0,1
DATA 1,1,1,1,0,0,0,0,0,0,0,1,1,1,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1
DATA 1,0,1,0,1,0,0,0,0,0,0,1,0,1,0,1
DATA 1,0,1,1,1,0,0,0,0,0,0,1,1,1,0,1
DATA 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1

DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,1,0,0,0,0,1,0,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,0
DATA 0,0,0,1,0,0,0,0,0,0,0,0,1,0,0,0
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0

DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,0,1,0,0,0,0,0,0,0
DATA 1,1,1,1,1,1,1,0,1,0,0,0,0,0,0,0
DATA 1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0
DATA 1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0
DATA 1,0,1,0,1,0,1,0,1,0,0,0,0,0,0,0
DATA 1,0,1,0,1,0,1,0,1,0,0,1,1,1,0,0
DATA 1,0,1,0,1,0,1,0,1,1,1,0,0,1,0,0
DATA 1,0,1,0,1,0,1,0,1,0,0,0,1,0,0,0
DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0

DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0
DATA 0,0,0,0,1,0,0,0,0,1,0,0,0,0,0,0
DATA 0,0,0,1,0,0,1,1,0,0,1,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0

DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
DATA 0,1,0,0,0,0,0,0,0,0,1,1,1,0,0,0
DATA 0,1,1,0,0,0,0,0,0,1,0,0,0,1,0,0
DATA 0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,1,1,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,1,1,1,1,1,1,0,0,0,0,0,0,1,0,0
DATA 0,0,1,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0
DATA 0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,0
DATA 0,1,1,1,1,1,1,0,1,0,0,0,0,0,1,0
DATA 0,0,1,0,0,0,0,0,0,1,0,0,0,1,0,0
DATA 0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0

