DIM SHARED c16(7, 15, 255) AS _UNSIGNED _BYTE, charload AS _UNSIGNED _BYTE: DECLARE LIBRARY ".\DATA\charset": SUB Charset_8x8 (BYVAL o AS _OFFSET): SUB Charset_8x16 (BYVAL o AS _OFFSET): END DECLARE: OPEN ".\DATA\chardata.fnt" FOR INPUT AS #1: DO UNTIL EOF(1): INPUT #1, ascii%: FOR x% = 0 TO 15: FOR y% = 0 TO 7: INPUT #1, c16(y%, x%, ascii%): NEXT y%: NEXT x%: LOOP: CLOSE #1: Charset_8x16 _OFFSET(c16(0, 0, 0))
_TITLE "FACEBLOCK x64 16col By Paul Mackay": WIDTH 30, 13: CLS: _FULLSCREEN: PRINT ">>>LOADING": FOR j = 0 TO 15: COLOR j: READ a, b, c: _PALETTECOLOR j, _RGB32(a, b, c): NEXT: DATA &h0,&h0,&h0,&h0,&h22,&hc7,&h00,&h2b,&hfb,&hd6,&h28,&h16,&hff,&h33,&h1c,&hd4,&h33,&hc7,&hff,&h40,&hfc,&h00,&hc5,&h25,&h00,&hf9,&h2f,&h00,&hc7,&hc9,&h00,&hfb,&hfe,&hcc,&hc8,&h2a,&hff,&hfc,&h36,&hca,&hca,&hca,&h80,&h80,&h80,&hff,&hff,&hff
DIM SCREENMEM%(16, 13, 70), RESTOREMAP%(15, 12), MAPDATA%(70, 8): OPEN ".\DATA\SCREENMAP.000" FOR INPUT AS #1: FOR Z1 = 0 TO 70: FOR Y1 = 1 TO 12: FOR X1 = 1 TO 15: INPUT #1, SCREENMEM%(X1, Y1, Z1): NEXT X1: NEXT Y1: NEXT Z1: CLOSE #1
CONST BLOCK = 219: CONST SPACE = 32: CONST MAN = 1: CONST BOXBOT = 249: CONST PLACEMENT = 9: CONST INPLACE = 40: WALL = 177: CONST EXTRALIFE = 63: CONST TIMEUP = 98: CONST PAGEFLIP = 133: CONST WAYUP = 100: CONST PAGEFLIPPED = 134: CONST WAYDNED = 300: CONST WAYLTED = 301: CONST WAYRTED = 302: CONST WAYUPED = 303
CONST WAYDN = 101: CONST WAYLT = 102: CONST WAYRT = 103: _CONTROLCHR OFF: _DISPLAY: GOSUB COLLOAD: SCREENFLAG0 = 0: SCREENFLAG1 = 1: DIM POWERUP&, GAMEMUSIC1&, FLIPIT&, PUSHSPACE&, INPLAC&, PLACED&, TITLE&: POWERUP& = _SNDOPEN(".\DATA\POWERUP.ogg"): PLACED& = _SNDOPEN(".\DATA\RIGHTSPOT.ogg"): INPLAC& = _SNDOPEN(".\DATA\INPLACE.ogg"): PUSHSPACE& = _SNDOPEN(".\DATA\PUSH.ogg"): GAMEMUSIC1& = _SNDOPEN(".\DATA\MUS1.ogg"): FLIPIT& = _SNDOPEN(".\DATA\FLIPV.ogg"): TITLE& = _SNDOPEN(".\DATA\TITLE.ogg")
_SNDVOL POWERUP&, 1: _SNDVOL PLACED&, 1: _SNDVOL INPLAC&, 1: _SNDVOL PUSHSPACE&, 1: _SNDVOL GAMEMUSIC1&, .5: _SNDVOL FLIPIT&, 1: _SNDVOL TITLE&, 1: DIM SCORETABLE$(9, 3), LINKTABLE$(72): GOSUB SCORETABLE: GOSUB LOADLINKTABLE
PASSWORDFLAG = 0: GOTO STARTNEW
DISPLAY: LEVFLAG = 0: K% = 1: FOR i% = 1 TO 15: FOR j% = 1 TO 12: b% = SCREENMEM%(i%, j%, Z): COLOR 0, 0: B1 = 32: B2 = 32: SELECT CASE b%: CASE INPLACE: COLOR 15, 0: B1 = 40: B2 = 41: CASE SPACE: COLOR 0, 0: B1 = SPACE: B2 = SPACE: CASE PLACEMENT: COLOR 12, 0: LEVFLAG = 1: B1 = 7: B2 = 8: CASE WALL: COLOR WC1, WC2: B1 = WD1: B2 = WD2: CASE MAN: COLOR 8, 0: B1 = 9: B2 = 10: CASE BLOCK: COLOR 4, 0: B1 = 5: B2 = 6: CASE TIMEUP: LEVFLAG = 1: COLOR 14, 0: B1 = 98: B2 = 99: CASE BOXBOT: COLOR BC1, BC2: B1 = BD1: B2 = BD2: CASE PAGEFLIP: COLOR 15, BC2: B1 = 133: B2 = 134: CASE WAYUP: COLOR 13, BC2: B1 = 100: B2 = 100
CASE WAYDN: COLOR 13, BC2: B1 = 101: B2 = 101: CASE WAYLT: COLOR 13, BC2: B1 = 102: B2 = 102: CASE WAYRT: COLOR 13, BC2: B1 = 103: B2 = 103: CASE PAGEFLIPPED: COLOR 4, 0: B1 = 5: B2 = 6
CASE WAYUPED: COLOR 4, 0: B1 = 199: B2 = 6: CASE WAYDNED: LEVFLAG = 1: COLOR 4, 0: B1 = 200: B2 = 6: CASE WAYLTED: LEVFLAG = 1: COLOR 4, 0: B1 = 234: B2 = 6: CASE WAYRTED: LEVFLAG = 1: COLOR 4, 0: B1 = 5: B2 = 235
END SELECT: _PRINTSTRING (K%, j%), CHR$(B1) + CHR$(B2): NEXT j%: K% = K% + 2: NEXT i%: COLOR , 0: RETURN
RESTOREMAP: FOR i = 1 TO 15: FOR j = 1 TO 12: SCREENMEM%(i, j, Z) = RESTOREMAP%(i, j): NEXT j: NEXT i: RETURN
SAVEMAP: FOR i = 1 TO 15: FOR j = 1 TO 12: RESTOREMAP%(i, j) = SCREENMEM%(i, j, Z): NEXT j: NEXT i: RETURN
COLGET: BC1 = MAPDATA%(Z, 1): BC2 = MAPDATA%(Z, 2): WC1 = MAPDATA%(Z, 3): WC2 = MAPDATA%(Z, 4): WD1 = MAPDATA%(Z, 5): WD2 = MAPDATA%(Z, 6): BD1 = MAPDATA%(Z, 7): BD2 = MAPDATA%(Z, 8): RETURN
COLLOAD: OPEN ".\DATA\COLDATA.fcb" FOR INPUT AS #1: FOR i = 0 TO 69: FOR j = 1 TO 8: INPUT #1, MAPDATA%(i, j): NEXT j: NEXT i: CLOSE #1: RETURN
FINDMAN: FOR x = 1 TO 15: FOR y = 1 TO 12: IF RESTOREMAP%(x, y) = MAN THEN MX% = x: MY% = y
NEXT y: NEXT x: SCREENMEM%(MX%, MY%, Z) = BOXBOT: RETURN
TI: TI = TI - 1: IF TI > 59 THEN LIVES = LIVES + 1: TI = 60: RETURN ELSE RETURN
DRAWINST: C$ = LEFT$(B$, 1): D$ = RIGHT$(B$, 569): B$ = D$ + C$: b = VAL(B$): COLOR 3, 0: _PRINTSTRING (1, 13), LEFT$(B$, 30): _DISPLAY: RETURN
PASSWORDDISPLAY: _SNDVOL GAMEMUSIC1&, .2: COLOR 15, 3: TIMER(T1) STOP: _PRINTSTRING (5, 5), "ã" + STRING$(20, "ä") + "å": _PRINTSTRING (5, 6), "Ú >>>PASSWORD        é": _PRINTSTRING (5, 7), "Ú                    é": _PRINTSTRING (5, 8), "æ" + STRING$(20, 232) + "ç": _PRINTSTRING (7, 7), LINKTABLE$(Z): _AUTODISPLAY: WHILE INKEY$ = "": _LIMIT 5: WEND: _SNDVOL GAMEMUSIC1&, .5: RETURN
FLIPIT: SWAP SCREENFLAG0, SCREENFLAG1: FOR FX = 1 TO 15: FOR FY = 1 TO 6: SWAP SCREENMEM%(FX, FY, Z), SCREENMEM%(FX, 13 - FY, Z): NEXT FY: NEXT FX
FOR FX = 1 TO 15: FOR FY = 1 TO 12: b = SCREENMEM%(FX, FY, Z): IF b = 100 THEN b = 101: SCREENMEM%(FX, FY, Z) = b: GOTO NEXTSTATEMENT ELSE IF b = 101 THEN b = 100: SCREENMEM%(FX, FY, Z) = b: GOTO NEXTSTATEMENT
NEXTSTATEMENT: NEXT FY: NEXT FX: _SNDPLAY FLIPIT&: MY% = 13 - MY%: _DISPLAY: _SNDPLAY FLIPIT&: RETURN
SWAPXR: x = .5: RETURN
SWAPXL: x = -.5: RETURN
SWAPYR: y = .2: RETURN
SWAPYL: y = -.2: RETURN
LOADLINKTABLE: OPEN ".\DATA\LINKDATA.000" FOR INPUT AS #1: i = 0: DO UNTIL EOF(1): INPUT #1, A$: D$ = "": FOR j = 1 TO LEN(A$): B$ = MID$(A$, j, 1): c = ASC(B$) - 64: D$ = D$ + CHR$(c): NEXT j: LINKTABLE$(i) = D$: i = i + 1: LOOP: CLOSE #1: RETURN
PASSWORD: OLDZ = Z: COLOR 15, 3: _SNDPAUSE GAMEMUSIC1&: TIMER(T1) STOP: _PRINTSTRING (5, 5), "ã" + STRING$(20, "ä") + "å": _PRINTSTRING (5, 6), "Ú ENTER PASSWORD     é": _PRINTSTRING (5, 7), "Ú                    é": _PRINTSTRING (5, 8), "æ" + STRING$(20, 232) + "ç": _AUTODISPLAY: IX = 0: A$ = "": I$ = "": DO: _LIMIT 5: COLOR 3, 15: _PRINTSTRING (7, 7), A$: COLOR 15, 3: I$ = INKEY$: IF I$ = CHR$(13) THEN EXIT DO ELSE IF I$ <> "" AND IX < 18 THEN A$ = A$ + I$: IX = IX + 1
    _DISPLAY: LOOP: i = 0: DO: IF LINKTABLE$(i) = A$ THEN Z = i: LEVFLAG = 2: EXIT DO ELSE IF i = 71 THEN EXIT DO
i = i + 1: LOOP: _SNDLOOP GAMEMUSIC1&: LIVES = LIVES - 1: RETURN
DRAWGLIF: FOR i = 1 TO 7: COLOR i + Z, i + Z + 1: _PRINTSTRING (1, i), STRING$(30, "}"): NEXT i: COLOR 11, 11: _PRINTSTRING (X1, Y1 + 1), " —‘–”–‘—‘—™š ˜™˜“š– ": _PRINTSTRING (X1, Y1 + 2), " —‘—•• —‘—™š ššš šš ": _PRINTSTRING (X1, Y1 + 3), " ‘ ‘‘’‘“‘“‘’“ ‘ “’’ ": X1 = X1 + x: Y1 = Y1 + y
IF X1 > 11 THEN GOSUB SWAPXL ELSE IF X1 < 2 THEN GOSUB SWAPXR
IF Y1 > 4 THEN GOSUB SWAPYL: Z = Z + 1 ELSE IF Y1 < 1 THEN GOSUB SWAPYR: Z = Z + 1
IF Z > 7 THEN Z = 1
_DISPLAY: RETURN



STARTNEW: GOSUB TITLE
LIVES = 3: Z = 4: GOSUB SAVEMAP: GOSUB FINDMAN: SCREENMEM%(MX%, MY%, Z) = BOXBOT: GOSUB COLGET: GOSUB DISPLAY
T1 = _FREETIMER
_SNDLOOP GAMEMUSIC1&: TI = 60: ON TIMER(T1, 1) GOSUB TI: TIMER(T1) ON: COLOR 15: _PRINTSTRING (1, 13), "TIME:": _PRINTSTRING (23, 13), "LIVES:"
MAIN: DO
    _LIMIT 200
    IF _KEYDOWN(27) THEN EXIT DO
    IF _KEYDOWN(42) THEN GOSUB FLIPIT
    IF _KEYDOWN(34304) THEN GOSUB RESTOREMAP: GOSUB PASSWORD: IF LEVFLAG = 2 THEN TIMER(T1) STOP: TI = 60: GOSUB SAVEMAP: GOSUB FINDMAN: GOSUB COLGET: GOSUB DISPLAY: TIMER(T1) ON: GOTO MAIN
    IF _KEYDOWN(19200) THEN
        MX% = MX% - 1: TEMPMAN% = SCREENMEM%(MX%, MY%, Z): TILE% = SCREENMEM%(MX% - 1, MY%, Z)
        IF TEMPMAN% = WALL THEN MX% = MX% + 1: GOTO DONEMOVE
        IF TEMPMAN% = WAYRTED OR TEMPMAN% = WAYUPED OR TEMPMAN% = WAYDNED THEN MX% = MX% + 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WALL THEN MX% = MX% + 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = INPLACE THEN MX% = MX% + 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = BLOCK THEN MX% = MX% + 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = WALL THEN MX% = MX% + 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = INPLACE THEN MX% = MX% + 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = BOXBOT THEN SCREENMEM%(MX% - 1, MY%, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = BLOCK THEN MX% = MX% + 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = TIMEUP THEN SCREENMEM%(MX% - 1, MY%, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: TI = TI + 5: _SNDPLAYCOPY POWERUP&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = TIMEUP THEN SCREENMEM%(MX% - 1, MY%, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = BOXBOT: TI = TI + 5: _SNDPLAYCOPY POWERUP&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = PAGEFLIP THEN SCREENMEM%(MX% - 1, MY%, Z) = PAGEFLIPPED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = PLACEMENT THEN SCREENMEM%(MX% - 1, MY%, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY INPLAC&: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = PLACEMENT THEN SCREENMEM%(MX% - 1, MY%, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: _SNDPLAYCOPY PLACED&: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = BOXBOT THEN SCREENMEM%(MX% - 1, MY%, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = PAGEFLIPPED AND TILE% = BOXBOT THEN SCREENMEM%(MX% - 1, MY%, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = PAGEFLIP: GOSUB FLIPIT: GOTO DONEMOVE
        IF TEMPMAN% = WAYLTED AND TILE% = WAYLT THEN SCREENMEM%(MX% - 1, MY%, Z) = WAYLTED: SCREENMEM%(MX%, MY%, Z) = WAYLT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = WAYLTED AND TILE% = BOXBOT THEN SCREENMEM%(MX% - 1, MY%, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = WAYLT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYLT THEN SCREENMEM%(MX% - 1, MY%, Z) = WAYLTED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYUP THEN SCREENMEM%(MX% - 1, MY%, Z) = WAYUPED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYDN THEN SCREENMEM%(MX% - 1, MY%, Z) = WAYDNED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% <> BOXBOT THEN MX% = MX% + 1: GOTO DONEMOVE
    END IF
    IF _KEYDOWN(19712) THEN
        MX% = MX% + 1: TEMPMAN% = SCREENMEM%(MX%, MY%, Z): TILE% = SCREENMEM%(MX% + 1, MY%, Z)
        IF TEMPMAN% = WALL THEN MX% = MX% - 1: GOTO DONEMOVE
        IF TEMPMAN% = WAYLTED OR TEMPMAN% = WAYDNED OR TEMPMAN% = WAYUPED THEN MX% = MX% - 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WALL THEN MX% = MX% - 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = INPLACE THEN MX% = MX% - 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = BLOCK THEN MX% = MX% - 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = WALL THEN MX% = MX% - 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = INPLACE THEN MX% = MX% - 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = BOXBOT THEN SCREENMEM%(MX% + 1, MY%, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = BLOCK THEN MX% = MX% - 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = TIMEUP THEN SCREENMEM%(MX% + 1, MY%, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: TI = TI + 5: _SNDPLAYCOPY POWERUP&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = TIMEUP THEN SCREENMEM%(MX% + 1, MY%, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = BOXBOT: TI = TI + 5: _SNDPLAYCOPY POWERUP&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = PAGEFLIP THEN SCREENMEM%(MX% + 1, MY%, Z) = PAGEFLIPPED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = PLACEMENT THEN SCREENMEM%(MX% + 1, MY%, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY INPLAC&: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = PLACEMENT THEN SCREENMEM%(MX% + 1, MY%, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: _SNDPLAYCOPY PLACED&: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = BOXBOT THEN SCREENMEM%(MX% + 1, MY%, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = PAGEFLIPPED AND TILE% = BOXBOT THEN SCREENMEM%(MX% + 1, MY%, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = PAGEFLIP: GOSUB FLIPIT: GOTO DONEMOVE
        IF TEMPMAN% = WAYRTED AND TILE% = WAYRT THEN SCREENMEM%(MX% + 1, MY%, Z) = WAYRTED: SCREENMEM%(MX%, MY%, Z) = WAYRT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = WAYRTED AND TILE% = BOXBOT THEN SCREENMEM%(MX% + 1, MY%, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = WAYRT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYRT THEN SCREENMEM%(MX% + 1, MY%, Z) = WAYRTED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYUP THEN SCREENMEM%(MX% + 1, MY%, Z) = WAYUPED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYDN THEN SCREENMEM%(MX% + 1, MY%, Z) = WAYDNED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% <> BOXBOT THEN MX% = MX% - 1: GOTO DONEMOVE
    END IF
    IF _KEYDOWN(18432) THEN
        MY% = MY% - 1: TEMPMAN% = SCREENMEM%(MX%, MY%, Z): TILE% = SCREENMEM%(MX%, MY% - 1, Z)
        IF TEMPMAN% = WALL THEN MY% = MY% + 1
        IF TEMPMAN% = WAYDNED OR TEMPMAN% = WAYLTED OR TEMPMAN% = WAYRTED THEN MY% = MY% + 1
        IF TEMPMAN% = BLOCK AND TILE% = WALL THEN MY% = MY% + 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = INPLACE THEN MY% = MY% + 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = BLOCK THEN MY% = MY% + 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = INPLACE THEN MY% = MY% + 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = WALL THEN MY% = MY% + 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = INPLACE THEN MY% = MY% + 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = BOXBOT THEN SCREENMEM%(MX%, MY% - 1, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = PLACEMENT THEN SCREENMEM%(MX%, MY% - 1, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY INPLAC&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = PAGEFLIP THEN SCREENMEM%(MX%, MY% - 1, Z) = PAGEFLIPPED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = TIMEUP THEN SCREENMEM%(MX%, MY% - 1, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: TI = TI + 5: _SNDPLAYCOPY POWERUP&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = TIMEUP THEN SCREENMEM%(MX%, MY% - 1, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = BOXBOT: TI = TI + 5: _SNDPLAYCOPY POWERUP&: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = PLACEMENT THEN SCREENMEM%(MX%, MY% - 1, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: _SNDPLAYCOPY PLACED&: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = BOXBOT THEN SCREENMEM%(MX%, MY% - 1, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = PAGEFLIPPED AND TILE% = BOXBOT THEN SCREENMEM%(MX%, MY% - 1, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = PAGEFLIP: GOSUB FLIPIT: GOTO DONEMOVE
        IF TEMPMAN% = WAYUPED AND TILE% = WAYUP THEN SCREENMEM%(MX%, MY% - 1, Z) = WAYRTED: SCREENMEM%(MX%, MY%, Z) = WAYUP: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = WAYUPED AND TILE% = BOXBOT THEN SCREENMEM%(MX%, MY% - 1, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = WAYUP: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYLT THEN SCREENMEM%(MX%, MY% - 1, Z) = WAYLTED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYUP THEN SCREENMEM%(MX%, MY% - 1, Z) = WAYUPED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYRT THEN SCREENMEM%(MX%, MY% - 1, Z) = WAYRTED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% <> BOXBOT THEN MY% = MY% + 1: GOTO DONEMOVE
    END IF
    IF _KEYDOWN(20480) THEN
        MY% = MY% + 1: TEMPMAN% = SCREENMEM%(MX%, MY%, Z): TILE% = SCREENMEM%(MX%, MY% + 1, Z)
        IF TEMPMAN% = WALL THEN MY% = MY% - 1
        IF TEMPMAN% = WAYUPED OR TEMPMAN% = WAYLTED OR TEMPMAN% = WAYRTED THEN MY% = MY% - 1
        IF TEMPMAN% = BLOCK AND TILE% = WALL THEN MY% = MY% - 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = INPLACE THEN MY% = MY% - 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = BLOCK THEN MY% = MY% - 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = BLOCK THEN MY% = MY% - 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = WALL THEN MY% = MY% - 1: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = INPLACE THEN MY% = MY% - 1: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = BOXBOT THEN SCREENMEM%(MX%, MY% + 1, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = PLACEMENT THEN SCREENMEM%(MX%, MY% + 1, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY INPLAC&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = PAGEFLIP THEN SCREENMEM%(MX%, MY% + 1, Z) = PAGEFLIPPED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = TIMEUP THEN SCREENMEM%(MX%, MY% + 1, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: TI = TI + 5: _SNDPLAYCOPY POWERUP&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = TIMEUP THEN SCREENMEM%(MX%, MY% + 1, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = BOXBOT: TI = TI + 5: _SNDPLAYCOPY POWERUP&: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = PLACEMENT THEN SCREENMEM%(MX%, MY% + 1, Z) = INPLACE: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: _SNDPLAYCOPY PLACED&: GOTO DONEMOVE
        IF TEMPMAN% = INPLACE AND TILE% = BOXBOT THEN SCREENMEM%(MX%, MY% + 1, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = PLACEMENT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = PAGEFLIPPED AND TILE% = BOXBOT THEN SCREENMEM%(MX%, MY% + 1, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = PAGEFLIP: GOSUB FLIPIT: GOTO DONEMOVE
        IF TEMPMAN% = WAYDNED AND TILE% = WAYDN THEN SCREENMEM%(MX%, MY% + 1, Z) = WAYDNED: SCREENMEM%(MX%, MY%, Z) = WAYUP: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = WAYDNED AND TILE% = BOXBOT THEN SCREENMEM%(MX%, MY% + 1, Z) = BLOCK: SCREENMEM%(MX%, MY%, Z) = WAYDN: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYDN THEN SCREENMEM%(MX%, MY% + 1, Z) = WAYDNED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAYCOPY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYLT THEN SCREENMEM%(MX%, MY% + 1, Z) = WAYLTED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% = WAYRT THEN SCREENMEM%(MX%, MY% + 1, Z) = WAYRTED: SCREENMEM%(MX%, MY%, Z) = BOXBOT: _SNDPLAY PUSHSPACE&: GOTO DONEMOVE
        IF TEMPMAN% = BLOCK AND TILE% <> BOXBOT THEN MY% = MY% - 1: GOTO DONEMOVE
    END IF

    REM PLACEMENT=PAD / INPLACE IS BOX ON PLACEMENT


    IF _KEYDOWN(9) THEN TIMER(T1) STOP: TI = 60: GOSUB RESTOREMAP: GOSUB FINDMAN: GOSUB COLGET: LIVES = LIVES - 1: TIMER(T1) ON: IF SCREENFLAG0 = 1 THEN GOSUB FLIPIT: GOSUB DISPLAY
    IF TI < 0 THEN TIMER(T1) STOP: TI = 60: GOSUB RESTOREMAP: GOSUB FINDMAN: GOSUB COLGET: LIVES = LIVES - 1: GOSUB FLIPIT: TIMER(T1) ON: IF SCREENFLAG0 = 1 THEN GOSUB FLIPIT: GOSUB DISPLAY
    IF LIVES < 0 THEN EXIT DO
    DONEMOVE: GOSUB DISPLAY: COLOR 8, 0: _PRINTSTRING (MX% * 2 - 1, MY%), CHR$(9) + CHR$(10): BR = TI \ 4: IF BR > 21 THEN BR = 21
    _PRINTSTRING (6, 13), STRING$(BR, "ñ") + " ": _PRINTSTRING (29, 13), STR$(LIVES): _DISPLAY: _DELAY 0.09
    IF LEVFLAG = 0 AND PASSWORDFLAG = 0 THEN TIMER(T1) STOP: TI = 60: Z = Z + 1: GOSUB SAVEMAP: GOSUB FINDMAN: GOSUB COLGET: GOSUB DISPLAY: TIMER(T1) ON: IF SCREENFLAG0 = 1 THEN GOSUB FLIPIT: GOSUB DISPLAY
    IF LEVFLAG = 0 AND PASSWORDFLAG = 1 THEN TIMER(T1) STOP: GOSUB PASSWORDDISPLAY: TI = 60: Z = Z + 1: GOSUB SAVEMAP: GOSUB FINDMAN: GOSUB COLGET: GOSUB DISPLAY: TIMER(T1) ON: IF SCREENFLAG0 = 1 THEN GOSUB FLIPIT: GOSUB DISPLAY
    _KEYCLEAR
LOOP

END
'LENGTH IS 576 - ADJUST D$ FOR MORE OR LESS
TITLE: B$ = "     >>> INSTRUCTIONS <<<    [ESC] TO QUIT GAME   PUSH ALL BLOCKS ONTO THE PADS \ SOUNDS EASY DONT ITÞÞÞ YOU HAVE A TIME LIMIT AND JUST THREE LIVES AND 70 LEVELSÞÞÞ USING THE ARROW KEYS TO MOVEÞ BLOCKS CAN ONLY BE MOVED WHEN NOTHING IS BEHIND THEM [PUSH ONE BLOCK AT A TIME ONLY]    THIS VERSION HAS A BONUS LIFE WHEN THE TIME BAR TOPS OVER (70SECS) HAS A NEW TILE% <FLIP SCREEN UPSIDE DOWN> ALSO HAS A TIME BONUSÞÞ THIS GAME IS INSPIRED BY SOKOBANÞÞÞ THIS IS CREATED IN TEXT MODE [0] USING USER DEFINED CHARACTERS <HAND DRAWN BY ME> THIS IS WRITTEN BY PAUL MACKAYÞÞÞ THIS GAME IS AUSTRALIAN MADEÞÞÞÞ    TO ENTER A PASSWORD YOU PRESS [F12] DURING GAME PLAY "
T0 = _FREETIMER: ON TIMER(T0, .06) GOSUB DRAWGLIF: T1 = _FREETIMER: ON TIMER(T1, .13) GOSUB DRAWINST: Z = 0: x = .5: y = .2: X1 = 1: Y1 = 1: TIMER(T0) ON: TIMER(T1) ON: _SNDLOOP TITLE&: WHILE INKEY$ = "": _LIMIT 50: WEND: COLOR , 0: CLS: TIMER(T0) STOP: TIMER(T1) STOP: TIMER(T0) FREE: TIMER(T1) FREE: _SNDSTOP TITLE&: IF I$ = CHR$(27) THEN SYSTEM ELSE RETURN










REM SOON, HARDDISK FILE AND WORKING.. NEED TO WORK OUT A SCORING ROUTING EG. WHAT IS WORTH A POINT

SCORETABLE:
SCORETABLE$(1, 1) = "FACEBLOCK ": SCORETABE$(1, 2) = "IN COMPLETE": SCORETABLE$(1, 3) = "999999": SCORETABLE$(2, 1) = "F ACEBLOCK": SCORETABE$(2, 2) = "IN COMPLETE": SCORETABLE$(2, 3) = "999999": SCORETABLE$(3, 1) = "FAC EBLOCK": SCORETABE$(3, 2) = "IN COMPLETE": SCORETABLE$(3, 3) = "999999"
SCORETABLE$(4, 1) = "FACE BLOCK": SCORETABE$(4, 2) = "IN COMPLETE": SCORETABLE$(4, 3) = "999999": SCORETABLE$(5, 1) = "FACEB LOCK": SCORETABE$(5, 2) = "IN COMPLETE": SCORETABLE$(5, 3) = "999999": SCORETABLE$(6, 1) = "FACEBLO CK": SCORETABE$(6, 2) = "IN COMPLETE": SCORETABLE$(6, 3) = "999999"
SCORETABLE$(7, 1) = "FACEBLOC K": SCORETABE$(7, 2) = "IN COMPLETE": SCORETABLE$(7, 3) = "999999": SCORETABLE$(8, 1) = " FACEBLOCK": SCORETABE$(8, 2) = "IN COMPLETE": SCORETABLE$(8, 3) = "999999": SCORETABLE$(9, 1) = " ACEBLOCK ": SCORETABE$(9, 2) = "IN COMPLETE": SCORETABLE$(9, 3) = "999999"
RETURN
