Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 100 REM BASIC WEEK 3: UNDER THE SEA
- 110 REM HTTP://REDDIT.COM/R/RETROBATTLESTATIONS
- 120 REM WRITTEN BY FOZZTEXX
- 130 REM ATARI VERSION BY GIBSTOV
- 150 DIM DAT(14,2),DAT$(250),SP$(40),SEA$(3),KE$(1),S$(40),T$(2),BLANK$(120),AIR$(16)
- 160 DIM ENEMYW(3),ENEMYX(3),ENEMYY(3),ENEMYXV(3),ENEMYYV(3),ENEMYC(3),ENEMYHIT(3),FOODX(3),FOODY(3),BUBBLEX(3),BUBBLEY(3)
- 170 DIM BUBBLES(3),ENEMIES(3),FOOD(3)
- 180 TURTLE=1:DEAD=3:OVER=11
- 190 BLANK$(1)=" ":BLANK$(120)=" ":BLANK$(2)=BLANK$:AIR$(1)="#":AIR$(16)="#":AIR$(2)=AIR$
- 200 REM CLEAR SCREEN AND SETUP VARIABLES
- 210 GRAPHICS 0:POKE 82,0:POKE 752,1:DTPR=1:RESTORE 9000
- 220 COLS = 39:ROWS = 22:REM COLUMNS AND ROWS OF SCREEN
- 230 GOSUB 2010:TURTLEWIDTH = DAT(1,2) - DAT(1,1) + 1:TURTLEHEIGHT = 2
- 250 FOR EE = 1 TO 3:ENEMYW(EE) = DAT(3+EE,2) - DAT(3+EE,1) + 1:NEXT EE
- 280 AIRMAX = 10:SEA$ = "-_."
- 290 TURTLEY = 18:SURFACE = 4:GOSUB 4100:SCORE = -10:GOSUB 4510
- 300 REM PLAY GAME
- 310 X = 1:Y = SURFACE:POSITION X-1,Y-1
- 320 FOR I = 1 TO COLS:SS=INT(RND(0) * 3) + 1:PRINT SEA$(SS,SS);:NEXT I
- 330 GOSUB 5140:GOSUB 6660:GOSUB 6140
- 340 LASTY = TURTLEY
- 350 FOR TURTLEX = 1 TO COLS
- 360 IF LASTY <> TURTLEY THEN GOSUB 3510
- 370 GOSUB 5010:GOSUB 6510:GOSUB 6010
- 380 SP=1:SPR=2:X = TURTLEX:Y = TURTLEY:GOSUB 1510
- 390 LASTY = TURTLEY:GOSUB 2510
- 400 IF KE = 63 OR JY=14 THEN D = -1:GOSUB 3010
- 410 IF KE = 23 OR JY = 13 THEN D = 1: GOSUB 3010
- 420 IF KE = 47 OR KE = 28 THEN END
- 430 IF TURTLEY = SURFACE + 1 THEN GOTO 450
- 440 IF TURTLEX = (COLS / 4) OR TURTLEX = (COLS / 4) * 3 THEN GOSUB 4010
- 450 IF TURTLEY = SURFACE + 1 AND AIR < AIRMAX THEN GOSUB 4100
- 460 NEXT TURTLEX
- 470 GOTO 310
- 1500 REM DRAW SPRITE IN SP$ AT X,Y
- 1510 IF X < 1 OR X > COLS OR Y < 1 OR Y > ROWS THEN RETURN
- 1520 FOR I=0 TO SPR-1:SB=DAT(SP+I,1):SE=DAT(SP+I,2)
- 1530 SL = SE-SB:IF SL + X > COLS THEN SL = COLS - X
- 1540 IF ERASE=1 THEN SP$=BLANK$(1,SL+1):GOTO 1560
- 1550 SP$=DAT$(SB, SB + SL)
- 1560 POSITION X-1,Y-1+I:PRINT SP$;
- 1570 NEXT I
- 1580 ERASE=0
- 1590 RETURN
- 1600 REM ERASE SPRITE
- 1610 ERASE=1:GOTO 1510
- 2000 REM LOAD A SPRITE FROM DATA INTO DAT$
- 2010 DTPR=0
- 2020 FOR I=1 TO 14
- 2030 DTPR=DTPR+1
- 2040 READ T$,S$
- 2050 DAT(I,1)=DTPR:DAT$(DTPR)=S$:DTPR=LEN(DAT$):DAT(I,2)=DTPR
- 2060 NEXT I
- 2080 RETURN
- 2500 REM READ THE KEYBOARD
- 2510 KE = PEEK(764):JY=STICK(0):POKE 764,255
- 2520 RETURN
- 3000 REM PLAYER WANTS TO MOVE TURTLE UP OR DOWN
- 3010 TURTLEY = TURTLEY + D
- 3020 IF TURTLEY <= SURFACE THEN TURTLEY = SURFACE + 1
- 3030 IF TURTLEY > ROWS - TURTLEHEIGHT + 1 THEN TURTLEY = ROWS - TURTLEHEIGHT + 1
- 3040 RETURN
- 3500 REM TURTLE MOVED UP OR DOWN, ERASE FROM PREVIOUS LINE
- 3510 Y = LASTY:IF LASTY > TURTLEY THEN Y = Y + TURTLEHEIGHT - 1
- 3520 X = TURTLEX:SP=TURTLE:SPR=2:GOSUB 1610
- 3530 RETURN
- 4000 REM SHOW REMAINING AIR
- 4010 AIR = AIR - 1:IF AIR < 0 THEN AIR = 0
- 4020 IF AIR > AIRMAX THEN AIR = AIRMAX
- 4030 POSITION 20,1
- 4040 PRINT "AIR: |";
- 4050 IF AIR > 0 THEN PRINT AIR$(1,AIR);
- 4060 IF AIR < AIRMAX THEN PRINT BLANK$(1,AIRMAX - AIR);
- 4070 PRINT "|";
- 4080 IF AIR = 0 THEN GOTO 4110
- 4090 RETURN
- 4100 AIR = AIRMAX:GOTO 4030
- 4110 FOR I = TURTLEY TO SURFACE + 1 STEP -1
- 4120 X = TURTLEX:Y = I:SP=DEAD:SPR=1:GOSUB 1510
- 4130 Y = Y + 1:SP=DEAD:SPR=1:GOSUB 1610
- 4140 NEXT I
- 4150 X = 1:Y = 10
- 4160 SP = OVER:SPR=4:GOSUB 1510
- 4170 X = 1:Y = ROWS - 2:POSITION X-1,Y-1
- 4180 END
- 4500 REM DISPLAY SCORE
- 4510 SCORE = SCORE + 10
- 4520 POSITION 1,1:PRINT "SCORE: ";SCORE;
- 4540 RETURN
- 5000 REM TAKE CARE OF BUBBLES
- 5010 FOR BB = 1 TO NUMBUBBLES
- 5020 IF INT(BUBBLEY(BB)) <= SURFACE THEN GOTO 5120
- 5030 NWY = BUBBLEY(BB) - (ROWS / COLS)
- 5040 X = BUBBLEX(BB):Y = INT(BUBBLEY(BB))
- 5050 GOSUB 5510:IF HIT = 0 THEN GOTO 5080
- 5060 AIR = AIR + 2:IF BUBBLES(BB) = 10 THEN AIR = AIR + 1
- 5070 GOSUB 4010:NWY = ROWS + COLS
- 5080 IF INT(NWY) = Y THEN GOTO 5110
- 5090 SP=9:SPR=1:GOSUB 1610:SP = BUBBLES(BB):Y = INT(NWY)
- 5100 IF Y > SURFACE THEN GOSUB 1510
- 5110 BUBBLEY(BB) = NWY
- 5120 NEXT BB
- 5130 RETURN
- 5140 NUMBUBBLES = INT(RND(0) * 3) + 1:FOR BB = 1 TO NUMBUBBLES
- 5150 BUBBLEX(BB) = INT(RND(0) * COLS) + 1:BUBBLEY(BB) = ROWS - INT(RND(0) * 3)
- 5160 BUBBLES(BB) = INT(RND(0) * 2) + 9
- 5170 NEXT BB:RETURN
- 5500 REM HIT DETECTION
- 5510 HIT = 0
- 5520 IF X < TURTLEX + TURTLEWIDTH - 2 THEN RETURN
- 5530 IF X > TURTLEX + TURTLEWIDTH + 1 THEN RETURN
- 5540 IF Y < TURTLEY - 1 THEN RETURN
- 5550 IF Y > TURTLEY + 1 THEN RETURN
- 5560 HIT = 1:RETURN
- 6000 REM TAKE CARE OF ENEMIES
- 6010 FOR EE = 1 TO NUMENEMIES
- 6020 IF INT(ENEMYY(EE)) <= SURFACE THEN GOTO 6120
- 6030 NWX = ENEMYX(EE) + ENEMYXV(EE):NWY = ENEMYY(EE) + ENEMYYV(EE)
- 6040 X = INT(ENEMYX(EE)):Y = INT(ENEMYY(EE))
- 6050 IF ENEMYHIT(EE) = 1 THEN GOTO 6070
- 6060 GOSUB 5510:IF HIT = 1 THEN GOSUB 4010:ENEMYHIT(EE) = 1
- 6070 IF INT(NWX) = X AND INT(NWY) = Y THEN GOTO 6110
- 6080 SP = ENEMYC(EE):SPR=1:GOSUB 1610
- 6090 SP = ENEMYC(EE):SPR=1:X = INT(NWX):Y = INT(NWY)
- 6100 IF Y > SURFACE THEN GOSUB 1510
- 6110 ENEMYX(EE) = NWX:ENEMYY(EE) = NWY
- 6120 NEXT EE
- 6130 RETURN
- 6140 IF NUMENEMIES < 1 THEN 6160
- 6145 FOR EE = 1 TO NUMENEMIES:SP = ENEMYC(EE):SPR=1
- 6150 X = INT(ENEMYX(EE)):Y = INT(ENEMYY(EE)):GOSUB 1610:NEXT EE
- 6160 NUMENEMIES = INT(RND(0) * 3) + 1:FOR EE = 1 TO NUMENEMIES
- 6170 ENEMYX(EE)=INT(RND(0)*COLS)+1:ENEMYY(EE)=ROWS-INT(RND(0)*(ROWS - SURFACE))
- 6180 ENEMYXV(EE) = RND(0):ENEMYYV(EE) = RND(0) * ((ROWS - SURFACE) / COLS)
- 6190 ENEMYC(EE) = INT(RND(0) * 3) + 4:ENEMYHIT(EE) = 0
- 6200 IF ENEMYX(EE) > COLS / 2 THEN ENEMYXV(EE) = - ENEMYXV(EE)
- 6210 IF ENEMYY(EE) > ROWS / 2 THEN ENEMYYV(EE) = - ENEMYYV(EE)
- 6220 NEXT EE:RETURN
- 6500 REM TAKE CARE OF FOOD
- 6510 FOR FF = 1 TO NUMFOOD
- 6520 X = FOODX(FF):Y = INT(FOODY(FF)):GOSUB 5510
- 6530 IF HIT = 1 THEN GOSUB 4510:SP=7:SPR=1:GOSUB 1610:FOODY(FF) = ROWS + COLS
- 6640 NEXT FF
- 6650 RETURN
- 6660 SP=7:SPR=1:FOR FF=1 TO NUMFOOD:X = FOODX(FF):Y = FOODY(FF):GOSUB 1610:NEXT FF
- 6670 NUMFOOD = INT(RND(0) * 3) + 1:FOR FF = 1 TO NUMFOOD
- 6680 FOODX(FF)=INT(RND(0) * COLS) + 1:FOODY(FF)=ROWS - INT(RND(0) * (ROWS - SURFACE))
- 6690 FOOD(FF) = INT(RND(0) * 2) + 7
- 6700 X = FOODX(FF):Y = FOODY(FF):SP = FOOD(FF):SPR=1:GOSUB 1510
- 6710 NEXT FF:RETURN
- 8999 REM ----------------
- 9000 DATA SP, _-%#%#]O
- 9010 DATA SE, )
- 9020 DATA SE, -OOOO]X
- 9030 DATA SE,^;;^
- 9040 DATA SE,<><
- 9050 DATA SE,$
- 9060 DATA SE,x
- 9070 DATA SE,y
- 9080 DATA SE,o
- 9090 DATA SE,O
- 9100 DATA SP, _ _ __ _ __ _
- 9110 DATA SP,/ \ / \ |\ /| | / \ | | | | \
- 9120 DATA SP,| _ |_| | \/ | |-- * | | \ / |-- |_/
- 9130 DATA SE,\_/ | | | | |__ \_/ V |__ | \
Add Comment
Please, Sign In to add comment