SCREEN 13 DIM spriter(100) DIM spritersh(100) DIM spritel(100) DIM spritelsh(100) DIM spriteup(100) DIM spriteupsh(100) DIM brick(100) DIM block(100) DIM door(100) DIM black(100) DIM map(14, 9) spritex = 10 spritey = 6 mov = 2 'starting direction got = 0 maxy = 9 maxx = 14 FOR y = 1 TO 10 FOR x = 1 TO 10 READ spriter PSET (x, y), spriter GET (1, 1)-(10, 10), spriter NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ spritersh PSET (x, y), spritersh GET (1, 1)-(10, 10), spritersh NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ spritel PSET (x, y), spritel GET (1, 1)-(10, 10), spritel NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ spritelsh PSET (x, y), spritelsh GET (1, 1)-(10, 10), spritelsh NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ spriteup PSET (x, y), spriteup GET (1, 1)-(10, 10), spriteup NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ spriteupsh PSET (x, y), spriteupsh GET (1, 1)-(10, 10), spriteupsh NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ brick PSET (x, y), brick GET (1, 1)-(10, 10), brick NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ block PSET (x, y), block GET (1, 1)-(10, 10), block NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ door PSET (x, y), door GET (1, 1)-(10, 10), door NEXT NEXT FOR y = 1 TO 10 FOR x = 1 TO 10 READ black PSET (x, y), black GET (1, 1)-(10, 10), black NEXT NEXT FOR y = 1 TO maxy FOR x = 1 TO maxx READ map(x, y) IF map(x, y) = 0 THEN PUT (x * 10 - 10, y * 10 - 10), black IF map(x, y) = 1 THEN PUT (x * 10 - 10, y * 10 - 10), brick IF map(x, y) = 2 THEN PUT (x * 10 - 10, y * 10 - 10), block IF map(x, y) = 3 THEN PUT (x * 10 - 10, y * 10 - 10), door NEXT NEXT PUT (spritex * 10 - 10, spritey * 10 - 10), spritersh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spriter, OR DO press$ = INKEY$ 'drop right IF got = 1 AND LCASE$(press$) = "d" AND map(spritex + 1, spritey - 1) = 0 THEN IF map(spritex + 1, spritey) = 0 THEN ' drop FOR d = spritey TO maxy - 1 IF map(spritex + 1, d) = 0 THEN c = d - spritey ELSE EXIT FOR NEXT d mov = 2 got = 0 map(spritex + 1, spritey + c) = 2 PUT (spritex * 10 - 10, (spritey - 1) * 10 - 10), black, PSET PUT ((spritex + 1) * 10 - 10, (spritey + c) * 10 - 10), block PUT (spritex * 10 - 10, spritey * 10 - 10), black, PSET PUT (spritex * 10 - 10, spritey * 10 - 10), spritersh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spriter, OR END IF IF map(spritex + 1, spritey) = 1 AND got = 1 OR map(spritex + 1, spritey) = 2 AND got = 1 THEN 'stack map(spritex + 1, spritey - 1) = 2 got = 0 mov = 2 PUT (spritex * 10 - 10, (spritey - 1) * 10 - 10), black, PSET PUT (spritex * 10 - 10, spritey * 10 - 10), black, PSET PUT (spritex * 10 - 10, spritey * 10 - 10), spritersh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spriter, OR PUT ((spritex + 1) * 10 - 10, (spritey - 1) * 10 - 10), block END IF END IF 'drop left IF got = 2 AND LCASE$(press$) = "d" AND map(spritex - 1, spritey - 1) = 0 THEN IF map(spritex - 1, spritey) = 0 THEN FOR d = spritey TO maxy - 1 IF map(spritex - 1, d) = 0 THEN c = d - spritey ELSE EXIT FOR NEXT d mov = 1 got = 0 map(spritex - 1, spritey + c) = 2 PUT (spritex * 10 - 10, (spritey - 1) * 10 - 10), black, PSET PUT ((spritex - 1) * 10 - 10, (spritey + c) * 10 - 10), block PUT (spritex * 10 - 10, spritey * 10 - 10), black, PSET PUT (spritex * 10 - 10, spritey * 10 - 10), spritelsh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spritel, OR END IF IF map(spritex - 1, spritey) = 1 AND got = 2 OR map(spritex - 1, spritey) = 2 AND got = 2 THEN map(spritex - 1, spritey - 1) = 2 got = 0 mov = 1 IF spritey > 1 THEN PUT (spritex * 10 - 10, (spritey - 1) * 10 - 10), black, PSET PUT (spritex * 10 - 10, spritey * 10 - 10), black, PSET PUT (spritex * 10 - 10, spritey * 10 - 10), spritelsh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spritel, OR PUT ((spritex - 1) * 10 - 10, (spritey - 1) * 10 - 10), block END IF END IF 'pick up right IF press$ = " " AND mov = 2 AND got = 0 AND map(spritex + 1, spritey) = 2 AND map(spritex + 1, spritey - 1) = 0 THEN got = 1 map(spritex + 1, spritey) = 0 PUT ((spritex + 1) * 10 - 10, spritey * 10 - 10), black, PSET IF spritey > 1 THEN PUT (spritex * 10 - 10, (spritey - 1) * 10 - 10), block PUT (spritex * 10 - 10, spritey * 10 - 10), black, PSET PUT (spritex * 10 - 10, spritey * 10 - 10), spriteupsh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spriteup, OR END IF 'pick up left IF press$ = " " AND mov = 1 AND got = 0 AND map(spritex - 1, spritey) = 2 AND map(spritex - 1, spritey - 1) = 0 THEN got = 2 map(spritex - 1, spritey) = 0 PUT ((spritex - 1) * 10 - 10, spritey * 10 - 10), black, PSET PUT (spritex * 10 - 10, (spritey - 1) * 10 - 10), block PUT (spritex * 10 - 10, spritey * 10 - 10), black, PSET PUT (spritex * 10 - 10, spritey * 10 - 10), spriteupsh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spriteup, OR END IF 'move left IF press$ = CHR$(0) + CHR$(75) THEN IF map(spritex - 1, spritey) = 1 AND mov = 2 OR map(spritex - 1, spritey) = 2 AND mov = 2 THEN mov = 1 IF got = 1 THEN got = 2 PUT (spritex * 10 - 10, spritey * 10 - 10), black, PSET IF got = 0 THEN PUT (spritex * 10 - 10, spritey * 10 - 10), spritelsh, AND: PUT (spritex * 10 - 10, spritey * 10 - 10), spritel, OR IF got = 2 THEN PUT (spritex * 10 - 10, spritey * 10 - 10), spriteupsh, AND: PUT (spritex * 10 - 10, spritey * 10 - 10), spriteup, OR END IF IF map(spritex - 1, spritey) <> 1 AND map(spritex - 1, spritey) <> 2 THEN IF got = 1 THEN got = 2 IF mov <> 3 THEN mov = 1 IF spritex > 1 THEN spritex = spritex - 1 FOR d = spritey TO maxy - 1 IF map(spritex, d + 1) = 0 OR map(spritex, d + 1) = 3 THEN spritey = spritey + 1 ELSE EXIT FOR NEXT d END IF IF got = 2 AND map(spritex, spritey - 1) = 1 THEN got = 0 PUT ((spritex + 1) * 10 - 10, spritey * 10 - 10), block map(spritex + 1, spritey) = 2 END IF END IF END IF 'move right IF press$ = CHR$(0) + CHR$(77) THEN IF map(spritex + 1, spritey) = 1 AND mov = 1 OR map(spritex + 1, spritey) = 2 AND mov = 1 THEN mov = 2 IF got = 2 THEN got = 1 PUT (spritex * 10 - 10, spritey * 10 - 10), black, PSET IF got = 0 THEN PUT (spritex * 10 - 10, spritey * 10 - 10), spritersh, AND: PUT (spritex * 10 - 10, spritey * 10 - 10), spriter, OR IF got = 1 THEN PUT (spritex * 10 - 10, spritey * 10 - 10), spriteupsh, AND: PUT (spritex * 10 - 10, spritey * 10 - 10), spriteup, OR END IF IF map(spritex + 1, spritey) <> 1 AND map(spritex + 1, spritey) <> 2 THEN IF got = 2 THEN got = 1 IF mov <> 3 THEN mov = 2 IF spritex < maxx THEN spritex = spritex + 1 'use for loop in future FOR d = spritey TO maxy - 1 IF map(spritex, d + 1) = 0 OR map(spritex, d + 1) = 3 THEN spritey = spritey + 1 ELSE EXIT FOR NEXT d END IF IF got = 1 AND map(spritex, spritey - 1) = 1 THEN got = 0 PUT ((spritex - 1) * 10 - 10, spritey * 10 - 10), block map(spritex - 1, spritey) = 2 END IF END IF END IF 'move right up IF press$ = CHR$(0) + CHR$(72) AND mov > 1 AND map(spritex + 1, spritey - 1) <> 1 AND map(spritex + 1, spritey - 1) <> 2 AND map(spritex + 1, spritey) <> 0 AND map(spritex + 1, spritey) <> 3 AND map(spritex, spritey - 1) <> 1 AND map(spritex, _ spritey - 1) <> 2 THEN IF spritey > 1 THEN spritey = spritey - 1 spritex = spritex + 1 IF map(spritex, spritey - 1) = 1 AND got = 1 THEN got = 0 PUT ((spritex - 1) * 10 - 10, spritey * 10 - 10), black, PSET PUT ((spritex - 1) * 10 - 10, (spritey + 1) * 10 - 10), block, PSET map(spritex - 1, spritey + 1) = 2 END IF END IF END IF 'move left up IF press$ = CHR$(0) + CHR$(72) AND mov <> 2 AND map(spritex - 1, spritey - 1) <> 1 AND map(spritex - 1, spritey - 1) <> 2 AND map(spritex - 1, spritey) <> 0 AND map(spritex - 1, spritey) <> 3 AND map(spritex, spritey - 1) <> 1 AND map(spritex, _ spritey - 1) <> 2 THEN IF spritey > 1 THEN spritey = spritey - 1 spritex = spritex - 1 IF map(spritex, spritey - 1) = 1 AND got = 2 THEN got = 0 PUT ((spritex + 1) * 10 - 10, spritey * 10 - 10), black, PSET PUT ((spritex + 1) * 10 - 10, (spritey + 1) * 10 - 10), block, PSET map(spritex + 1, spritey + 1) = 2 END IF END IF END IF IF oldspritex <> spritex OR oldspritey <> spritey THEN oldspritex = spritex oldspritey = spritey FOR y = 1 TO maxy FOR x = 1 TO maxx IF map(x, y) = 0 THEN PUT (x * 10 - 10, y * 10 - 10), black, PSET IF map(x, y) = 1 THEN PUT (x * 10 - 10, y * 10 - 10), brick, PSET IF map(x, y) = 2 THEN PUT (x * 10 - 10, y * 10 - 10), block, PSET IF map(x, y) = 3 THEN PUT (x * 10 - 10, y * 10 - 10), door, PSET NEXT: NEXT IF got < 1 AND mov = 2 OR mov = 0 THEN PUT (spritex * 10 - 10, spritey * 10 - 10), spritersh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spriter, OR END IF IF got < 1 AND mov = 1 THEN PUT (spritex * 10 - 10, spritey * 10 - 10), spritelsh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spritel, OR END IF IF got = 1 OR got = 2 THEN PUT (spritex * 10 - 10, spritey * 10 - 10), spriteupsh, AND PUT (spritex * 10 - 10, spritey * 10 - 10), spriteup, OR PUT (spritex * 10 - 10, (spritey - 1) * 10 - 10), block END IF END IF IF map(spritex, spritey) = 3 THEN GOTO win IF LCASE$(press$) = "b" THEN map(spritex + 1, spritey) = 2 PUT ((spritex + 1) * 10 - 10, spritey * 10 - 10), block END IF LOOP UNTIL press$ = CHR$(27) win: END 'spriter DATA 00,00,00,04,04,04,04,00,00,00 DATA 00,00,00,66,66,66,66,00,00,00 DATA 00,00,00,66,66,66,66,66,00,00 DATA 00,00,00,66,66,66,66,00,00,00 DATA 00,00,00,00,66,66,00,00,00,00 DATA 00,00,00,01,01,01,01,00,00,66 DATA 00,00,00,01,01,01,01,01,01,00 DATA 00,00,00,01,01,01,01,00,00,00 DATA 00,00,00,01,00,00,01,00,00,00 DATA 00,00,00,01,01,00,01,01,00,00 'spriter mask DATA 255,255,255,004,004,004,004,255,255,255 DATA 255,255,255,066,066,066,066,255,255,255 DATA 255,255,255,066,066,066,066,066,255,255 DATA 255,255,255,066,066,066,066,255,255,255 DATA 255,255,255,255,066,066,255,255,255,255 DATA 255,255,255,001,001,001,001,255,255,066 DATA 255,255,255,001,001,001,001,001,001,255 DATA 255,255,255,001,001,001,001,255,255,255 DATA 255,255,255,001,255,255,001,255,255,255 DATA 255,255,255,001,001,255,001,001,255,255 'spritel DATA 00,00,00,04,04,04,04,00,00,00 DATA 00,00,00,66,66,66,66,00,00,00 DATA 00,00,66,66,66,66,66,00,00,00 DATA 00,00,00,66,66,66,66,00,00,00 DATA 00,00,00,00,66,66,00,00,00,00 DATA 66,00,00,01,01,01,01,00,00,00 DATA 00,01,01,01,01,01,01,00,00,00 DATA 00,00,00,01,01,01,01,00,00,00 DATA 00,00,00,01,00,00,01,00,00,00 DATA 00,00,01,01,00,01,01,00,00,00 'spritel mask DATA 255,255,255,004,004,004,004,255,255,255 DATA 255,255,255,066,066,066,066,255,255,255 DATA 255,255,255,066,066,066,066,066,255,255 DATA 255,255,255,066,066,066,066,255,255,255 DATA 255,255,255,255,066,066,255,255,255,255 DATA 066,255,255,001,001,001,001,255,255,255 DATA 255,001,001,001,001,001,001,255,255,255 DATA 255,255,255,001,001,001,001,255,255,255 DATA 255,255,255,001,255,255,001,255,255,255 DATA 255,255,001,001,255,001,001,255,255,255 'up sprite DATA 00,66,00,04,04,04,04,00,66,00 DATA 00,01,00,66,66,66,66,00,01,00 DATA 00,01,00,66,66,66,66,00,01,00 DATA 00,01,00,66,66,66,66,00,01,00 DATA 00,00,01,00,66,66,00,01,00,00 DATA 00,00,00,01,01,01,01,00,00,00 DATA 00,00,00,01,01,01,01,00,00,00 DATA 00,00,00,01,01,01,01,00,00,00 DATA 00,00,00,01,00,00,01,00,00,00 DATA 00,00,00,01,00,00,01,00,00,00 'upsprite mask DATA 255,066,255,004,004,004,004,255,066,255 DATA 255,001,255,066,066,066,066,255,001,255 DATA 255,001,255,066,066,066,066,255,001,255 DATA 255,001,255,066,066,066,066,255,001,255 DATA 255,255,001,255,066,066,255,001,255,255 DATA 255,255,255,001,001,001,001,255,255,255 DATA 255,255,255,001,001,001,001,255,255,255 DATA 255,255,255,001,001,001,001,255,255,255 DATA 255,255,255,001,255,255,001,255,255,255 DATA 255,255,255,001,255,255,001,255,255,255 'brick DATA 04,04,04,04,07,04,04,04,04,04 DATA 07,07,07,07,07,07,07,07,07,07 DATA 04,07,04,04,07,04,04,04,04,07 DATA 04,07,04,04,07,04,04,04,04,07 DATA 07,07,07,07,07,07,07,07,07,07 DATA 04,04,04,07,04,04,07,04,04,04 DATA 04,04,04,07,04,04,07,04,04,04 DATA 07,07,07,07,07,07,07,07,07,07 DATA 04,04,04,04,07,04,04,04,04,04 DATA 04,04,04,04,07,04,04,04,04,04 'block DATA 15,15,15,15,15,15,15,15,15,15 DATA 15,25,25,25,25,25,25,25,25,15 DATA 15,25,25,25,25,25,25,25,25,15 DATA 15,25,25,25,25,25,25,25,25,15 DATA 15,25,25,25,25,25,25,25,25,15 DATA 15,25,25,25,25,25,25,25,25,15 DATA 15,25,25,25,25,25,25,25,25,15 DATA 15,25,25,25,25,25,25,25,25,15 DATA 15,25,25,25,25,25,25,25,25,15 DATA 15,15,15,15,15,15,15,15,15,15 'door DATA 18,18,18,18,18,18,18,18,18,18 DATA 18,06,06,06,06,06,06,06,06,18 DATA 18,06,06,06,06,06,06,06,06,18 DATA 18,06,06,06,06,06,06,06,06,18 DATA 18,06,06,06,06,06,06,06,06,18 DATA 18,06,17,17,06,06,06,06,06,18 DATA 18,06,06,06,06,06,06,06,06,18 DATA 18,06,06,06,06,06,06,06,06,18 DATA 18,06,06,06,06,06,06,06,06,18 DATA 18,18,18,18,18,18,18,18,18,18 'black DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 DATA 0,0,0,0,0,0,0,0,0,0 'map DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1 DATA 1,1,0,0,0,0,0,0,0,0,0,0,0,1 DATA 1,1,0,0,0,0,0,0,0,0,0,0,2,1 DATA 1,3,0,0,0,0,0,0,0,0,0,0,1,1 DATA 1,1,0,0,0,0,0,0,0,0,1,1,1,1 DATA 1,1,0,0,1,2,0,0,0,0,1,0,0,1 DATA 1,1,1,0,1,2,0,2,0,1,1,0,0,1 DATA 1,0,1,1,1,1,1,1,1,1,0,0,0,1 DATA 1,1,1,1,1,1,1,1,1,1,1,1,1,1