RANDOMIZE TIMER GAMEPAD 1 PAUSE OFF GLOBAL SCORE, LEVEL, LIFE GLOBAL PLAYER,DOT,PILL,PLAYERPASS,PLAYERLEFT,PLAYERRIGHT,DOORWAY,PLAYERUP,PLAYERDOWN GLOBAL BONUSEMPTY,BONUSCHERRY,BONUSLIFE PLAYER=23 DOT=22 PILL=21 PLAYERPASS=18 PLAYERLEFT=19 PLAYERRIGHT=20 PLAYERUP=16 PLAYERDOWN=17 DOORWAY=29 BONUSEMPTY=25 BONUSCHERRY=26 BONUSLIFE=27 DIM GLOBAL XDIR(4),YDIR(4) FOR I=1 TO 4 READ XDIR(I),YDIR(I) NEXT I DATA 1,0,0,1,-1,0,0,-1 DIM GLOBAL XGHOST(4),YGHOST(4),GHOST(4),DGHOST(4),IGHOST(4) RESET: LEVEL=0 SCORE=0 LIFE=2 NEXTLEVEL: RESTORE RESETGHOSTS CLS PLAY 0,32,15 WAIT 15 PLAY 0,37,30 WAIT 60 BG 0 FOR I=1 TO 4 PAL 3+I READ XGHOST(I),YGHOST(I),GHOST(I) DGHOST(I)=1 CELL XGHOST(I),YGHOST(I),GHOST(I) IGHOST(I)=0 NEXT I RESETGHOSTS: DATA 8,7,32,9,7,32,10,7,32,11,7,32 REM IGHOST REM 0=ATTACK REM 1=RUN REM 2=EATEN BG 0 PX=9 PY=11 PAL 1 CELL 9,11,PLAYER CALL SHOWLIFE(1) CALL SHOWSCORE(LEVEL*10000) INC LEVEL BG 1 BG SOURCE ROM(LEVEL+2) BG COPY 0,0,20,16 TO 0,0 FOR Y=0 TO 15 CELL 20,Y,20 CELL 31,Y,19 NEXT Y FOR X=0 TO 19 CELL X,16,17 CELL X,31,16 NEXT X GLOBAL TOTALDOTS CALL SHOWTOTALDOTS DO IMOVE=(IMOVE+1) MOD 10 IF IMOVE=0 THEN IF LIFE>0 THEN UD=UP(0) OR DOWN(0) LR=LEFT(0) OR RIGHT(0) IF RIGHT(0) AND NOT UD THEN CALL MOVEPLAYER(PX,PY,1,0) IF LEFT(0) AND NOT UD THEN CALL MOVEPLAYER(PX,PY,-1,0) IF DOWN(0) AND NOT LR THEN CALL MOVEPLAYER(PX,PY,0,1) IF UP(0) AND NOT LR THEN CALL MOVEPLAYER(PX,PY,0,-1) END IF IF RND(25)=1 THEN CALL ADDBONUS IF RND(33)=1 THEN CALL REMOVEBONUS FOR I=1 TO 4 OK=0 CALL MOVEGHOST(I,OK) NEXT I IF LIFE=0 AND PAUSE THEN GOTO RESET END IF IF PAUSE THEN PLAY 0,70,1 IF RND(10)=0 THEN PLAY 1,90,1 CALL SHOWLIFE(1) END IF END IF WAIT VBL LOOP SUB MOVEGHOST(I,OK) REM ALWAYS CHECK D D0, D-1 DM, D+1 DP X=XGHOST(I) Y=YGHOST(I) D=DGHOST(I) D0=DGHOST(I) DM=DGHOST(I)-1 DP=DGHOST(I)+1 IF DM<1 THEN DM=4 IF DP>4 THEN DP=1 XCHECKM=X+XDIR(DM) YCHECKM=Y+YDIR(DM) XCHECK0=X+XDIR(D0) YCHECK0=Y+YDIR(D0) XCHECKP=X+XDIR(DP) YCHECKP=Y+YDIR(DP) BG 1 CELLCHECK10=CELL.C(XCHECK0,YCHECK0) CELLCHECK1M=CELL.C(XCHECKM,YCHECKM) CELLCHECK1P=CELL.C(XCHECKP,YCHECKP) BG 0 CELLCHECK00=CELL.C(XCHECK0,YCHECK0) CELLCHECK0M=CELL.C(XCHECKM,YCHECKM) CELLCHECK0P=CELL.C(XCHECKP,YCHECKP) GCOLOR=CELL.A(X,Y) GCELL=CELL.C(X,Y) IF CELLCHECK10=1 OR CELLCHECK10=18 OR CELLCHECK00<>0 THEN OK0=0 ELSE OK0=-1 IF CELLCHECK1M=1 OR CELLCHECK1M=18 OR CELLCHECK0M<>0 THEN OKM=0 ELSE OKM=-1 IF CELLCHECK1P=1 OR CELLCHECK1P=18 OR CELLCHECK0P<>0 THEN OKP=0 ELSE OKP=-1 IF CELLCHECK00=23 OR CELLCHECK00=24 THEN PGOT00=-1 ELSE PGOT00=0 IF CELLCHECK0M=23 OR CELLCHECK0M=24 THEN PGOT0M=-1 ELSE PGOT0M=0 IF CELLCHECK0P=23 OR CELLCHECK0P=24 THEN PGOT0P=-1 ELSE PGOT0P=0 BG 0 CELL X,Y,0 REM CHECK FOR PLAYER NEARBY IF PGOT00 OR PGOT0M OR PGOT0P THEN IF IGHOST(I)=0 THEN PLAY 0,60,5 BG 0 PAL 1 IF PGOT00 THEN CELL XCHECK0,YCHECK0,30 ELSE IF PGOT0M THEN CELL XCHECKM,YCHECKM,30 ELSE IF PGOT0P THEN CELL XCHECKP,YCHECKP,30 END IF CALL SHOWLIFE(-1) ELSE IF IGHOST(I)=1 THEN IGHOST(I)=2 CALL SHOWSCORE(500) PLAY 0,90,1 END IF END IF REM LOOK AROUND FIRST IGO=99 IWANT=RND(2)-1 IF IWANT=0 AND OK0 THEN IGO=0 IF IWANT=-1 AND OKM THEN IGO=-1 IF IWANT=1 AND OKP THEN IGO=1 IF IGO=0 THEN X=XCHECK0 Y=YCHECK0 D=D0 ELSE IF IGO=-1 THEN X=XCHECKM Y=YCHECKM D=DM ELSE IF IGO=1 THEN X=XCHECKP Y=YCHECKP D=DP ELSE REM AUTO MOVE IF OK0 THEN X=XCHECK0 Y=YCHECK0 D=D0 ELSE R=RND(1) IF R=0 AND OKM THEN X=XCHECKM Y=YCHECKM D=DM ELSE IF R=1 AND OKP THEN X=XCHECKP Y=YCHECKP D=DP ELSE IF OKM THEN X=XCHECKM Y=YCHECKM D=DM ELSE IF OKP THEN X=XCHECKP Y=YCHECKP D=DP ELSE REM STUCK... D=D+1 IF D>4 THEN D=1 END IF END IF END IF BG 0 PAL I+3 CELL X,Y,32+IGHOST(I) XGHOST(I)=X YGHOST(I)=Y DGHOST(I)=D BG 1 IF IGHOST(I)=2 THEN SPAWN=CELL.C(X,Y) IF SPAWN=3 THEN IGHOST(I)=0 END IF END SUB SUB MOVEPLAYER(X,Y,MX,MY) XCHECK=X+MX YCHECK=Y+MY BG 1 CELLCHECK1=CELL.C(XCHECK,YCHECK) BG 0 CELLCHECK0=CELL.C(XCHECK,YCHECK) IF ((CELLCHECK1>17 AND CELLCHECK1<=31) OR CELLCHECK1=0) AND (CELLCHECK0=0 OR CELLCHECK0>=46) THEN CELL X,Y,0 X=X+MX Y=Y+MY IF CELLCHECK1=DOORWAY THEN GOTO NEXTLEVEL IF YCHECK=0 THEN Y=14 IF YCHECK=15 THEN Y=1 IF CELLCHECK1=PLAYERLEFT THEN X=19 IF CELLCHECK1=PLAYERRIGHT THEN X=0 IF MX<0 OR MY<0 THEN XFLIP=1 ELSE XFLIP=0 PAL 1 CELL X,Y,PLAYER+XFLIP IF CELLCHECK1=BONUSCHERRY THEN BG 1 PAL 2 CELL X,Y,BONUSEMPTY PLAY 0,90,2 CALL SHOWSCORE(100) END IF IF CELLCHECK1=BONUSLIFE THEN BG 1 PAL 2 CELL X,Y,BONUSEMPTY PLAY 0,90,2 CALL SHOWLIFE(1) END IF IF CELLCHECK1=DOT THEN BG 1 CELL X,Y,0 CALL SHOWTOTALDOTS PLAY 0,70,1 CALL SHOWSCORE(10) END IF IF CELLCHECK1=PILL THEN BG 1 CELL X,Y,0 FOR I=1 TO 4 IF IGHOST(I)=0 THEN IGHOST(I)=1 NEXT I PLAY 0,90,5 END IF END IF END SUB SUB SHOWTOTALDOTS TOTALDOTS=0 BG 1 FOR Y=0 TO 15 FOR X=0 TO 19 IF CELL.C(X,Y)=22 THEN INC TOTALDOTS NEXT X NEXT Y BG 0 PAL 1 NUMBER 8,15,TOTALDOTS,3 TEXT 6,0,"LEVEL" NUMBER 11,0,LEVEL,1 IF TOTALDOTS=0 THEN BG 1 PAL 1 CELL 10,11,DOORWAY END IF END SUB SUB SHOWSCORE(PLUS) SCORE=SCORE+PLUS BG 0 PAL 3 NUMBER 13,0,SCORE,7 END SUB SUB SHOWLIFE(PLUS) LIFE=LIFE+PLUS IF LIFE<0 THEN LIFE=0 IF LIFE>5 THEN LIFE=5 BG 0 PAL 1 FOR I=1 TO 5 IF LIFE>=I THEN CHARNUM=46 ELSE CHARNUM=47 CELL I-1,0,CHARNUM NEXT I END SUB SUB ADDBONUS IADD=0 BG 1 PAL 2 FOR Y=0 TO 15 FOR X=0 TO 19 IF CELL.C(X,Y)=BONUSEMPTY AND IADD=0 THEN CELL X,Y,BONUSCHERRY IF RND(5)=0 THEN CELL X,Y,BONUSLIFE IADD=1 END IF NEXT X NEXT Y END SUB SUB REMOVEBONUS IREMOVE=0 BG 1 PAL 2 FOR Y=0 TO 15 FOR X=0 TO 19 IF CELL.C(X,Y)=BONUSCHERRY AND IREMOVE=0 THEN CELL X,Y,BONUSEMPTY IREMOVE=1 END IF NEXT X NEXT Y END SUB #1:MAIN PALETTES 00070302003C281400302010003F3F00 003F0E00003F3300003F0B00003F3B00 #2:MAIN CHARACTERS 00000000000000000000000000000000 007E7E7E7E7E7E00FFFFFFE7E7FFFFFF FFFFE7DBDBE7FFFFFFFFFFE7E7FFFFFF 55AA55AA55AA55AAFFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFFFFFFFFFFFFFEFC783EFEFEFFF FFFFFFFFFFFFFFFFFFF7F7F7C1E3F7FF FFFFE7DBDBE7FFFFFFFFFFE7E7FFFFFF FFFFFFFFFFFFFFFFFFFFEFCF81CFEFFF FFFFFFFFFFFFFFFFFFFFF7F381F3F7FF 00182442422418000000183C3C180000 00000018180000000000000000000000 3E7CF8F0F0F87C3E0020200000000000 7C3E1F0F0F1F3E7C0004040000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FF9F6F6F97EDEDF3F0ED9B9BFBF3F3FF FFFFDFFFFFFFFFFFFFC3A78F8F87C3FF FFFFE7C3C3E7FFFFFFE7DBBDBDDBE7FF FFFFE7C3C3C3C3FFFFE7DBBDBDBDBDFF 0081C3E7FFFF7E3C0000000020702000 AA55AA55AA55AA55FFFFFFFFFFFFFFFF 00002424000000003C7EDBFFFFFFFFA5 000024666600000000005ABD99FF0000 000024240000000000005A7E00000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 003C787070783C000000200000000000 003C787070783C00003C787070783C00 #3:BG 1 00001410010001000100010001000100 01000100010001000100010001000100 01000100010001000100010001001501 16011601010016011601160116011601 16011601160116011601010016011601 15010100010016010100160101001601 01001601010001000100010016010100 16010100160101001601010001001601 01001601160116010100160116011601 16011601160101001601160116010100 16010100010016010100010016010100 01001601010001000100010016010100 01001601010001001601010001001601 16011601160116011601160116011601 16011601160116011601160116011601 16010100010001001601010016010100 16010200020002000200020002001601 0100160101001601010001001F011201 16010100160101001601020003000300 03000300020016010100160101001601 12011F01010001001601010016011601 16010200020002000200020002001601 16011601010016010100010001001601 16010100160101281601160116011902 19021601160116010100160101001601 16010100010016010100010016010100 01000100120112011201120101000100 01001601010001001601010001001601 16011601160116011601160112011F01 1F011201160116011601160116011601 16010100010016010100160101001601 01001601120112011201120116010100 16010100160101001601010001001601 01001601010016010100160101000100 01000100160101001601010016010100 16010100010015011601160101001601 16011601160116011601160116011601 16010100160116011501010001000100 01000100010001000100010001000100 01000100010001000100010001000100 01000100 #4:BG 2 00001410010001000100010001000100 01000100010001000100010001000100 0100010001000100010001001F011F01 12011601160116010100160115010200 02001501160101001601160116011201 1F011F011F0101000100160101001601 01001601010001000100010016010100 160101001601010001001F011F010100 16011601010016011601160116010200 02001601160116011601010016011601 01001F011F0101001601010001000100 01000100010001000100010001000100 010001000100160101001F011F010100 16011601160116011601160116011601 16011601160116011601160116011601 01001F011F0101000100160101000100 16010200020002000200020002001601 010001001601010001001F011F011201 16011601160116011601020003000300 03000300020016011601160116011601 12011F011F0101001601010001000100 16010200020002000200020002001601 010001000100160101001F011F010100 16010200160116011601160116011902 19021601160116011601160102001601 01001F011F0101001601010016010100 01000100010012011201010001000100 010016010100160101001F011F010100 160116011601010013011F011F011F01 1F011F011F0114010100160116011601 01001F011F0101001601010002000100 01000100010001000100010001000100 010002000100160101001F011F010100 16010100160116011601010016010200 02001601010016011601160101000000 01001F011F0112011601160116010100 16011501160101000100160115011601 010016011601160112011F0101000100 01000100010001000100010001000100 01000100010001000100010001000100 01000100