RANDOMIZE TIMER PAUSE OFF DIM GLOBAL BLK(6,3,3,3),BLKPAL(6),BLKCHR(6) DIM GLOBAL MAP(15,9),BONUS(3) GLOBAL SCORE,LINES,LEVEL GLOBAL NXTBLK,CURBLK,ROT,BX,BY,FTICK GLOBAL HIGHSCORE OK=0 BONUS(0)=40 BONUS(1)=100 BONUS(2)=300 BONUS(3)=1200 FOR I=0 TO 6 READ BLKPAL(I),BLKCHR(I) FOR D=0 TO 3 FOR Y=0 TO 3 READ L$ FOR X=0 TO 3 A$=MID$(L$,X+1,1) IF A$="X" THEN BLK(I,D,Y,X)=1 NEXT X NEXT Y NEXT D NEXT I 'READ FROM PERSISTENT RAM HIGHSCORE=PEEKL($E000) GAMEPAD 1 TITLE: CLS BG SOURCE ROM(4) BG COPY 0,0,20,16 TO 0,0 ATTR (2,,,,) TEXT 1,1,"INUTILIS SOFTWARE" TEXT 1,14,"HIGHSCORE:" NUMBER 13,14,HIGHSCORE,6 WAIT VBL DO IF TIMER MOD 30<20 THEN TEXT 7,9,"START!" ELSE TEXT 7,9," " END IF IF BUTTON TAP(0,0) THEN GOTO GAMESTART WAIT VBL LOOP GAMESTART: CLS FOR Y=0 TO 15 FOR X=0 TO 9 MAP(Y,X)=0 NEXT X NEXT Y BG 1 BG SOURCE ROM(3) BG COPY 0,0,20,16 TO 0,0 ATTR (2,,,,) TEXT 14,6,"SCORE" TEXT 14,9,"LEVEL" TEXT 14,12,"LINES" SCORE=0 LINES=0 LEVEL=0 NXTBLK=INT(RND*7) CALL DRAWHUD CALL NEXTBLK DO CALL REDRAWMAP FTM=MAX(5,60-LEVEL*3) MTM=7 MTICK=MTICK+1 IF PAUSE THEN CALL GAMEPAUSE IF LEFT(0) THEN IF MTICK>=MTM THEN PLAY 3,20 SOUND 12 BX=BX-1 CALL CHECKBLK(OK) IF OK THEN MTICK=0 ELSE BX=BX+1 END IF ELSE IF RIGHT(0) THEN IF MTICK>=MTM THEN PLAY 3,20 SOUND 12 BX=BX+1 CALL CHECKBLK(OK) IF OK THEN MTICK=0 ELSE BX=BX-1 END IF ELSE IF DOWN(0) THEN IF FTICK=0 THEN PLAY 3,20 SOUND 12 FTM=4 SCORE=SCORE+1 CALL DRAWHUD ELSE IF UP TAP(0) THEN REPEAT BY=BY+1 CALL CHECKBLK(OK) IF OK THEN SCORE=SCORE+2 UNTIL NOT OK CALL DRAWHUD BY=BY-1 FTM=0 END IF OROT=ROT IF BUTTON TAP(0,0) THEN PLAY 3,40 SOUND 15 ROT=(ROT+3) MOD 4 CALL CHECKBLK(OK) IF NOT OK THEN ROT=OROT ELSE IF BUTTON TAP(0,1) THEN PLAY 3,40 SOUND 15 ROT=(ROT+1) MOD 4 CALL CHECKBLK(OK) IF NOT OK THEN ROT=OROT END IF FTICK=FTICK+1 IF FTICK>=FTM THEN FTICK=0 BY=BY+1 CALL CHECKBLK(OK) IF NOT OK THEN PLAY 3,28 SOUND 14 BY=BY-1 CALL PUTBLK CALL DRAWBLK(CURBLK,ROT,3+BX,BY) CALL CHECKLINES CALL NEXTBLK CALL CHECKBLK(OK) IF NOT OK THEN GOTO GAMEOVER END IF END IF CALL DRAWBLK(CURBLK,ROT,BX+3,BY) WAIT VBL LOOP GAMEOVER: ATTR (2,,,,) TEXT 6,7,"GAME" TEXT 6,8,"OVER" IF SCORE>HIGHSCORE THEN WAIT 30 HIGHSCORE=SCORE TEXT 6,14,"NEW" TEXT 3,15,"HIGHSCORE!" 'WRITE TO PERSISTENT RAM POKEL $E000,HIGHSCORE END IF WAIT 30 DO IF BUTTON TAP(0,0) THEN GOTO TITLE WAIT VBL LOOP SUB GAMEPAUSE BG FILL 3,0 TO 12,15 CHAR 0 ATTR (2,,,,) TEXT 6,7,"GAME" TEXT 5,8,"PAUSED" REPEAT WAIT VBL UNTIL PAUSE CALL DRAWMAP END SUB SUB NEXTBLK BG FILL 15,1 TO 18,4 CHAR 0 CURBLK=NXTBLK NXTBLK=(NXTBLK+1+INT(RND*5)) MOD 7 CALL DRAWBLK(NXTBLK,0,15,1) ROT=0 BX=3 BY=0 FTICK=0 END SUB SUB DRAWBLK(B,ROT,BX,BY) C=BLKCHR(B) ATTR (BLKPAL(B),,,,) FOR Y=0 TO 3 FOR X=0 TO 3 IF BLK(B,ROT,Y,X)=1 THEN CELL BX+X,BY+Y,C END IF NEXT X NEXT Y END SUB SUB CHECKBLK(OK) OK=-1 FOR Y=0 TO 3 FOR X=0 TO 3 IF BLK(CURBLK,ROT,Y,X)=1 THEN MX=BX+X MY=BY+Y OOB=MX<0 OR MX>9 OR MY>15 IF NOT OOB THEN OOB=MAP(MY,MX)>0 IF OOB THEN OK=0 'EXIT SUB END IF END IF NEXT X NEXT Y END SUB SUB PUTBLK FOR Y=0 TO 3 FOR X=0 TO 3 IF BLK(CURBLK,ROT,Y,X)=1 THEN MAP(BY+Y,BX+X)=1+CURBLK END IF NEXT X NEXT Y END SUB SUB REDRAWMAP FOR Y=0 TO 3 FOR X=0 TO 3 MX=BX+X MY=BY+Y IF MX>=0 AND MX<10 AND MY<16 THEN M=MAP(MY,MX) IF M>0 THEN C=BLKCHR(M-1) ATTR (BLKPAL(M-1),,,,) ELSE C=0 END IF CELL 3+MX,MY,C END IF NEXT X NEXT Y END SUB SUB DRAWMAP FOR Y=0 TO 15 FOR X=0 TO 9 M=MAP(Y,X) IF M>0 THEN C=BLKCHR(M-1) ATTR (BLKPAL(M-1),,,,) ELSE C=0 END IF CELL 3+X,Y,C NEXT X NEXT Y END SUB SUB CHECKLINES ATTR (4,,,,) FOR Y=15 TO 0 STEP -1 OK=-1 FOR X=0 TO 9 M=MAP(Y,X) IF M=0 THEN OK=0 NEXT X IF OK THEN MAP(Y,0)=-1 FOR X=0 TO 9 CELL 3+X,Y,32 NEXT X PLAY 3,20 SOUND 13 WAIT 5 END IF NEXT Y FOR I=1 TO 10 FOR Y=15 TO 1 STEP -1 IF MAP(Y,0)=-1 THEN FOR X=0 TO 9 CELL 3+X,Y,32+(I MOD 2) NEXT X END IF NEXT Y WAIT 5 NEXT I L=0 FOR Y=15 TO 1 STEP -1 IF MAP(Y,0)=-1 THEN BG SCROLL 3,0 TO 12,Y STEP 0,1 BG FILL 3,0 TO 12,0 CHAR 0 FOR YY=Y TO 1 STEP -1 FOR X=0 TO 9 MAP(YY,X)=MAP(YY-1,X) NEXT X NEXT YY FOR X=0 TO 9 MAP(0,X)=0 NEXT X Y=Y+1 LINES=LINES+1 L=L+1 IF LEVEL<20 AND LINES MOD 10=0 THEN LEVEL=LEVEL+1 WAIT 5 END IF NEXT Y IF L>0 THEN SCORE=SCORE+BONUS(L-1)*(LEVEL+1) CALL DRAWHUD END IF END SUB SUB DRAWHUD ATTR (2,,,,) NUMBER 14,7,SCORE,6 NUMBER 18,10,LEVEL,2 NUMBER 14,13,LINES,6 END SUB DATA 4,16 DATA " " DATA "XXX " DATA " X " DATA " " DATA " X " DATA "XX " DATA " X " DATA " " DATA " X " DATA "XXX " DATA " " DATA " " DATA " X " DATA " XX " DATA " X " DATA " " DATA 5,16 DATA " XX " DATA " X " DATA " X " DATA " " DATA " X" DATA " XXX" DATA " " DATA " " DATA " X " DATA " X " DATA " XX" DATA " " DATA " " DATA " XXX" DATA " X " DATA " " DATA 5,17 DATA " XX " DATA " X " DATA " X " DATA " " DATA " " DATA "XXX " DATA " X " DATA " " DATA " X " DATA " X " DATA "XX " DATA " " DATA "X " DATA "XXX " DATA " " DATA " " DATA 6,16 DATA " " DATA " XX " DATA "XX " DATA " " DATA "X " DATA "XX " DATA " X " DATA " " DATA " " DATA " XX " DATA "XX " DATA " " DATA "X " DATA "XX " DATA " X " DATA " " DATA 6,17 DATA " " DATA "XX " DATA " XX " DATA " " DATA " X " DATA " XX " DATA " X " DATA " " DATA " " DATA "XX " DATA " XX " DATA " " DATA " X " DATA " XX " DATA " X " DATA " " DATA 7,16 DATA " " DATA " XX " DATA " XX " DATA " " DATA " " DATA " XX " DATA " XX " DATA " " DATA " " DATA " XX " DATA " XX " DATA " " DATA " " DATA " XX " DATA " XX " DATA " " DATA 7,17 DATA " " DATA "XXXX" DATA " " DATA " " DATA " X " DATA " X " DATA " X " DATA " X " DATA " " DATA "XXXX" DATA " " DATA " " DATA " X " DATA " X " DATA " X " DATA " X " #1:MAIN PALETTES 002F1A0500341A000038340030343820 00383010002F0B06002C0804003B3211 #2:MAIN CHARACTERS 00000000000000000000000000000000 0060000004001800FFFFFFFFFFFFFFFF F3C3C3C3C3C3C3CF0F3F3F3F3F3F3F3F FFFF80000001FFFF00007FFFFFFFFFFF FEFDC3C3C3C3BF7F01033F3F3F3F7FFF 7F7F3E7F7F7F7F7F80FFC1809C8080FF FEFE1E7EFEFEFEFE01FFE1811F0101FF 00003C7CFCFCFCFC0000CC8C0C0C0C0C 0000000307070F0F0000030408080000 0000FCFEFFFFFFFF00000C060303C3C3 00003C7CFCFCFCFC0000CC8C0C0C0C0C 00003F3F3F3F3F3F0000030303030303 00003F7FFFFF0F0F0000C08000000000 0000FCFDFFFFC3C300000F0E0C0CC0C0 0000FFFFFFFFFFFF0000030100003030 00000F9FFFFFFFFF000033A3C3C3C3C3 FE80808080808000017E7E7E7E7E7E80 FFFEFEFEFEFEFE80017E7E7E7E7E7E80 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 607F7F7F607F7F7F9F80809FFF8080FF 00FEFEFE00FEFEFCFF0101FFFF0103C7 FCFCFCFCFCFCFCFC0C0C0C0C0C0C0C0C 0F0F0F0F0F0F0F0F0000000000000000 FFFFFFFFFFFFFFFFC3C3C3C3C3C3C3C3 FCFCFCFCFCFCFCFC0C0C0C0C0C0C0C0C 3F3F3F3F3F3F3F3F0303030303030303 0F0F0F0F0F0F0F0F0000000000000000 C3C3C3C3C3C3C3C3C0C0C0C0C0C0C0C0 FFFFFFF7EFFFFFFE3030303830010306 FFFFFFFFFFBF3F3FC3C3C3C3C3830303 DA00347FFE5A00B7FFFFCB8001A5FFFF 922875FEFF7E2893FFD78A010081D7FF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00007F7F7F3F7F7FFFFF8080FFC0809F 7878FCFEFEFCFEFE8FC70301FF0301F9 FCFCFCFCFCFCFCFC0C0C0C0C0C0C0C0C 0F0F0F0F0F0F0F0F0000000000000000 FFFFFFFFFFFFFFDFC3C3C3C3C3C3C3E3 FCFDFBF7FFFFFFFF0C0E0C0800000003 3FFFFFFFFFFFFFFF03C3430303030303 0F0F0F0F0F0F0F0F0000000000000000 C3C3C3C3C3C3C3C3C0C0C0C0C0C0C0C0 FFFFFFFFFFFFFFFF0301203030303030 3FBFFFFFFFFFFFFF0383C3C3C3C3C3C3 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 003071717F7F3F7FFFCF8E9E80C0FF80 00FCFEFE8E8E1CFEFF03017971F3FF01 7F7F3F00007F7F7F80C0FFFFFF8080FF FEFEFC0606FEFEFE0103FFF9F90101FF FFFFFFFF000000000000000000000000 3FFFF7F300000000F030303000000000 BFFFFEFC000000004303060C00000000 FEFCF8F000000000060C183000000000 7F3F1F0F000000000303030300000000 0F0F0F0F000000000000000000000000 C3C3C3C300000000C0C0C0C000000000 FFFFFFFF000000003030303000000000 FFFFFFFF00000000C3C3C3C300000000 00000F3F7F7FFFFF0000304080800C0C 0000C0E0F0F0F0F00000C06030303030 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FCFCFCFCFCFF7F3F0C0C0C0C03000000 00000000C0E0F0F000000000C0603030 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0303030303033F7D000000000000CC8E F0F0F0F0F0F0F0F03030303030303030 000080CAA6C20C000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FBFF7F3F000000000400000000000000 F0F0E0C000000000303060C000000000 EB4B4A4A000000000000000000000000 B8A8A8B8000000000000000000000000 A8C8A8AE000000000000000000000000 E6ACA2EC000000000000000000000000 60C020C0000000000000000000000000 #3:MAIN BG 00001410330134010200000000000000 00000000000000000000000000000200 04000300030003000300040005010601 02000000000000000000000000000000 00000000000002000200000000000000 00000200150116010200000000000000 00000000000000000000000000000200 02000000000000000000020025012601 02000000000000000000000000000000 00000000000002000200000000000000 00000200350136010200000000000000 00000000000000000000000000000200 02000000000000000000020001000100 02000000000000000000000000000000 00000000000002000400030003000300 03000400010001000200000000000000 00000000000000000000000000000200 00000000000000000000000001000100 02000000000000000000000000000000 00000000000002000000000000000000 00000000010001000200000000000000 00000000000000000000000000000200 03000300030003000300030001000100 02000000000000000000000000000000 00000000000002000000000000000000 00000000010001000200000000000000 00000000000000000000000000000200 00000000000000000000000001000100 02000000000000000000000000000000 00000000000002000300030003000300 03000300010001000200000000000000 00000000000000000000000000000200 00000000000000000000000001000100 02000000000000000000000000000000 00000000000002000000000000000000 00000000010001000200000000000000 00000000000000000000000000000200 03000300030003000300030001000100 02000000000000000000000000000000 00000000000002000100010001000100 01000100 #4:TITLE BG 00001410040003000300030003000300 03000300030003000300030003000300 03000300030003000300040002000000 00000000000000000000000000000000 00000003000000000000000000000000 0000020002000703080309030A030B03 0C030D030E030F034003410300030003 00030000000000000000020002001703 180319031A031B031C031D031E031F03 50035103000300030003000000000000 0000020002002703280329032A032B03 2C032D032E032F036003610362036300 64006500660000000000020002003703 380339033A033B033C033D033E033F03 70037103720373037403750376030000 00000200020000000000000000000000 00000000000000000003000000030003 00000000000000000000020002000000 00000000000300030003000300030003 00000003000300030003000000030000 00000200020010060000000000000000 00000000000000000000000000000000 00000000000300001105020002001006 00000000000600000000000000000000 00000000000000000000000011051105 11050200020010061006100700060006 00000000000000000000000000000000 00000000100610061005020002001004 00001007000611051105000000000000 00000000000000001106000000001006 10050200020010041007100710051105 11051104000000000000110710071106 11061106100410061005020002001004 10041005100510051104110411041107 11071107100710071007100410041004 10050200020000000000000000000000 00000000000000000000000000000000 00000000000000000000020004000300 03000300030003000300030003000300 03000300030003000300030003000300 03000400 #15:MAIN SOUND 2800303A000450001800846C003A0000 08006060000000002800303019FE0000 38002020000000003800505000000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 28001010000000003800909003FF0000 380060600000000028002020006F0000