Random game
Random game
Random game
  • Entry name:
     Bats 
  • Category:
    Games
  • Publisher/Developer:
    BELLCOM - Public Domain Library
  • Code:
    Stan Ockers
  • Controllers:
    Joystick
  • Maximum players:
    8
  • Programming language:
    Atari BASIC
Bats Bats Bats Bats
Listing 1
10 REM  IS AN IMPROVED (?)
15 REM VERSION OF THE GAME 
20 REM BY STAN OCKERS
30 DIM ZZ$(32):​FOR I=1 TO 32:​READ A:​ZZ$(I)=CHR$(A):​NEXT I:​GOSUB 1250:​CLR
40 DATA 104,​104,​133,​204,​104,​133,​203,​104,​133,​206,​104,​133,​205,​162,​4,​160,​0
50 DATA 177,​203,​145,​205,​136,​208,​249,​230,​204,​230,​206,​202,​208,​240,​96
60 POSITION 3,​5:​? #6;"FIRE to start":​POSITION 0,​8:​? #6;"note - use joystick"
61 POSITION 4,​9:​? #6;"to move bat":​POSITION 4,​10:​? #6;"up and down";:​GOSUB 920
65 OPEN #3,​4,​0,​"K:​"
70 GRAPHICS 18:​POKE 708,​202:​POSITION 1,​5:​? #6;"HOW MANY PLAYERS?":​POKE 764,​255:​GET #3,​NP
71 NP=NP-48:​IF NP=0 OR NP>8 THEN 70
72 GRAPHICS 18
75 CLOSE #3
80 REM 
90 DIM D$(1),​F$((INT(ADR(D$)/1024)+1)*1024-ADR(D$)-1),​PM$(384),​M$(128),​P$(128),​MM$(8)
100 RESTORE 110:​FOR I=1 TO 8:​READ A:​MM$(I)=CHR$(A):​NEXT I
110 DATA 3,​3,​12,​12,​48,​48,​192,​192
120 PM$=CHR$(0):​PM$(384)=CHR$(0):​PM$(2)=PM$:​M$=PM$:​P$=M$
130 REM 
140 POKE 704,​0:​POKE 705,​30:​POKE 706,​200:​POKE 707,​42
150 REM 
160 FOR I=1536 TO 1566:​READ A:​POKE I,​A:​NEXT I
170 DATA 104,​160,​14,​162,​6,​169,​7,​76,​92,​228,​90,​120,​150,​180,​162,​3,​222,​10,​6,​189,​10,​6,​157,​4,​208,​202,​16,​244,​76,​98,​228
180 REM 
190 DIM BATDN$(5):​BATDN$=P$:​FOR I=2 TO 4:​READ A:​BATDN$(I,​I)=CHR$(A):​NEXT I
200 DATA 24,​165,​66
210 DIM BATUP$(5):​BATUP$=P$:​FOR I=2 TO 4:​READ A:​BATUP$(I,​I)=CHR$(A):​NEXT I
220 DATA 66,​165,​24
230 POKE 54279,​ADR(PM$)/256:​POKE 559,​46:​POKE 53277,​3:​POKE 623,​4:​A=USR(1536)
240 REM 
250 DIM C$(42),​U$(42):​C$="*****$%******&":​U$=")(*****'******":​FOR I=1 TO 14:​C$(I+14)=CHR$(ASC(C$(I))-32)
260 U$(I+14)=CHR$(ASC(U$(I))-32):​C$(I+28)=CHR$(ASC(C$(I))+128):​U$(I+28)=CHR$(ASC(U$(I))+128):​NEXT I
270 DIM P(NP),​SCORE(NP),​TOTAL(NP),​BN(NP),​BONUS(NP)
280 W=7:​P=0:​POKE 82,​0
290 FOR I=1 TO NP:​SCORE(I)=0:​TOTAL(I)=0:​BN(I)=3:​BONUS(I)=1000:​NEXT I:​NXTCV=300*NP
300 REM 
310 IF W>3 THEN W=W-1
320 GOSUB 670:​GOSUB 1180
321 POKE 708,​241:​POKE 709,​92:​POKE 710,​124:​POKE 712,​20
322 GOTO 330
325 FOR I=708 TO 712:​Q=INT(255*RND(0)):​POKE I,​Q:​NEXT I
330 P=P+1:​IF P>NP THEN P=1
340 IF BN(P)=0 THEN 330
350 M$=PM$:​FOR I=0 TO 3:​M$(YST+5*W+W*(3-I))=MM$(2*I+1,​2*I+2):​NEXT I
360 REM 
370 POKE 656,​0:​POKE 657,​22:​? "PRESS fire BUTTON"
380 IF STRIG(0)<>0 THEN 380
400 ? CHR$(125):​GOSUB 1090:​POKE 656,​0:​POKE 657,​6:​? "PLAYER #";P
410 POKE 656,​1:​POKE 657,​24:​? "Round Total";:​GOSUB 1110
420 POKE 53248,​30:​YPOS=YST+20:​POKE 53278,​0:​T=0:​DIS=12
430 FOR XPOS=47 TO 200:​POKE 53248,​XPOS:​IF STICK(0)=14 THEN YPOS=YPOS-1:​P$(YPOS)=BATUP$
440 IF STICK(0)<>14 THEN YPOS=YPOS+1:​P$(YPOS)=BATDN$
450 IF PEEK(53256)>0 THEN POKE 1546,​0:​TOTAL(P)=TOTAL(P)-100:​GOTO 580
460 IF PEEK(53257)>0 THEN POKE 1547,​0:​GOSUB 1140
470 IF PEEK(53258)>0 THEN POKE 1548,​0:​GOSUB 1140
480 IF PEEK(53259)>0 THEN POKE 1549,​0:​GOSUB 1140
490 IF PEEK(53252)>0 THEN 580
500 NEXT XPOS:​P$=PM$
510 IF SCORE(P)<300 THEN 420
520 TOTAL(P)=TOTAL(P)+SCORE(P):​SCORE(P)=0:​GOSUB 1120
530 IF TOTAL(P)>BONUS(P) AND BN(P)<4 THEN BONUS(P)=BONUS(P)+1000:​BN(P)=BN(P)+1:​GOSUB 1090:​DIS=10:​T=30:​GOSUB 800
540 FOR I=1 TO 8:​GOSUB 1130:​SOUND 0,​100,​10,​10:​FOR J=0 TO 30:​NEXT J:​SOUND 0,​0,​0,​0:​GOSUB 1110:​NEXT I
550 IF P=NP THEN 310
560 GOTO 330
570 REM 
580 DIS=10:​T=9:​GOSUB 800
590 YPOS=YPOS+1:​P$(YPOS)=BATDN$:​POKE 53278,​0:​SOUND 1,​YPOS,​10,​10:​IF PEEK(53252)=0 THEN 590
600 GOSUB 810:​P$=PM$:​SCORE(P)=0:​BN(P)=BN(P)-1:​GOSUB 1090:​IF BN(P)=0 THEN POKE 656,​0:​POKE 657,​6:​? " ":​GOSUB 840
610 GOSUB 1100:​FOR I=1 TO NP:​IF BN(I)>0 THEN 540
620 NEXT I:​GOSUB 1160:​GRAPHICS 17:​POSITION 5,​2:​? #6;"GamE OveR":​FOR I=1 TO NP:​POSITION 3,​2+2*I:​? #6;"Player #";I;
630 ? #6;" = ";TOTAL(I):​NEXT I:​POSITION 3,​22:​? #6;"FIRE = AGAIN":​? #6;" STICK = END";
640 FOR I=1 TO 300:​NEXT I:​GOSUB 830:​IF FL=0 THEN 640
650 GOTO 280
660 REM 
670 GOSUB 1160:​GRAPHICS 2:​POKE 708,​0:​POKE 709,​0:​POKE 710,​0:​POKE 711,​0:​POKE 77,​0
680 DL=INT(RND(0)*(8-W))+1:​YST=8*(DL+1)
690 FOR X=0 TO 19:​GOSUB 780:​Y=0:​FOR I=R+7-DL TO R+6:​POSITION X,​Y:​? #6;C$(I,​I):​Y=Y+1:​NEXT I
700 FOR I=1 TO W:​POSITION X,​Y:​? #6;" ":​Y=Y+1:​NEXT I
710 IF DL+W>=10 THEN Y=Y-1:​POSITION X,​Y:​? #6;"'":​GOTO 730
720 GOSUB 780:​FOR I=R TO R+9-DL-W:​POSITION X,​Y:​? #6;U$(I,​I):​Y=Y+1:​NEXT I
730 IF DL<=1 THEN DL=2:​GOTO 760
740 IF DL>=10-W THEN DL=9-W:​GOTO 760
750 DL=DL+INT(RND(0)*3)-1
760 NEXT X
770 RETURN
780 R=INT(RND(0)*6)*7+1:​POKE 559,​46:​RETURN
790 REM 
800 FOR I=15 TO 0 STEP -1:​SOUND 0,​I,​DIS,​I:​FOR J=1 TO T:​NEXT J:​NEXT I:​RETURN
810 FOR I=10 TO 2 STEP -2:​SOUND 0,​RND(0)*255,​8,​I:​SOUND 1,​RND(0)*255,​8,​I:​FOR J=1 TO 30:​NEXT J:​NEXT I
820 SOUND 0,​0,​0,​0:​SOUND 1,​0,​0,​0:​RETURN
830 RESTORE 1060:​LS=30:​LL=5:​GOSUB 850:​RETURN
840 RESTORE 1010:​LS=20:​LL=10
850 FL=0
860 READ I,​J:​IF I=3 THEN RETURN
870 IF I=0 THEN 900
880 IF STRIG(0)=0 THEN FL=1:​RETURN
885 IF STICK(0)<>15 THEN GRAPHICS 0:​CLR:​POKE 764,​255:​TRAP 40000:​POKE 580,​1:​X=USR(58484):​RUN "D:​MENU"
890 SOUND 0,​I,​10,​10:​SOUND 1,​I-2,​10,​6
900 FOR I=1 TO J:​FOR K=1 TO LS:​NEXT K:​NEXT I:​SOUND 0,​0,​0,​0:​SOUND 1,​0,​0,​0
910 FOR I=1 TO LL:​NEXT I:​GOTO 860
920 RESTORE 1020:​LS=12:​LL=12:​GOSUB 850
930 IF FL=1 THEN RETURN
940 RESTORE 1040:​GOSUB 850
950 IF FL=1 THEN RETURN
960 RESTORE 1020:​GOSUB 850
970 IF FL=1 THEN RETURN
980 RESTORE 1040:​GOSUB 850
990 IF FL=1 THEN RETURN
1000 FOR I=1 TO 300:​NEXT I:​GOTO 920
1010 DATA 243,​4,​243,​4,​243,​1,​243,​4,​204,​4,​217,​1,​217,​4,​243,​1,​243,​4,​255,​1,​243,​6,​3,​3
1020 DATA 243,​1,​217,​1,​204,​1,​182,​1,​162,​1,​204,​1,​162,​1,​0,​1,​173,​1,​217,​1,​173,​1,​0,​1,​182,​1,​230,​1,​182,​1,​0,​1
1030 DATA 243,​1,​217,​1,​204,​1,​182,​1,​162,​1,​204,​1,​162,​1,​121,​1,​3,​3
1040 DATA 136,​1,​162,​1,​204,​1,​162,​1,​136,​4,​3,​3
1050 DATA 162,​1,​204,​1,​162,​1,​121,​1,​243,​4,​3,​3
1060 DATA 81,​4,​85,​2,​102,​1,​108,​1,​121,​6,​108,​1,​102,​1,​81,​2,​81,​2,​85,​2,​102,​1,​108,​1,​121,​8
1070 DATA 108,​2,​91,​2,​102,​2,​108,​2,​121,​1,​108,​1,​102,​2,​121,​2,​81,​4,​102,​4,​121,​8,​3,​3
1080 REM 
1090 POKE 656,​0:​POKE 657,​6:​? " ";:​POKE 657,​6:​FOR I=1 TO BN(P):​? "+ ";:​NEXT I:​RETURN
1100 POKE 656,​1:​POKE 657,​5:​? SCORE(P);" ":​RETURN
1110 POKE 656,​1:​POKE 657,​12:​? TOTAL(P);" ":​RETURN
1120 POKE 656,​1:​POKE 657,​5:​? " ":​RETURN
1130 POKE 656,​1:​POKE 657,​12:​? " ":​RETURN
1140 GOSUB 800:​POKE 53278,​0:​SCORE(P)=SCORE(P)+25:​GOTO 1100
1150 REM 
1160 POKE 53277,​0:​POKE 54272,​0:​FOR I=53261 TO 53264:​POKE I,​0:​NEXT I:​RETURN
1170 REM 
1180 POKE 53277,​3:​POKE 559,​46:​START=(PEEK(106)+1):​POKE 756,​START
1190 REM 
1200 A=PEEK(560)+PEEK(561)*256
1210 IF PEEK(A)<>66 THEN A=A+1:​GOTO 1210
1220 POKE A,​70:​POKE A+3,​6:​POKE A+4,​6:​POKE A+5,​6
1230 RETURN
1240 REM 
1250 POKE 106,​PEEK(106)-5:​GRAPHICS 18:​START=(PEEK(106)+1)*256:​POKE 756,​START/256:​POKE 708,​10:​POKE 709,​52
1260 POSITION 8,​1:​? #6;"BATS"
1270 A=USR(ADR(ZZ$),​57344,​START):​RESTORE 1300
1280 READ X:​IF X=-1 THEN RESTORE:​RETURN
1290 FOR Y=0 TO 7:​READ Z:​POKE X+Y+START,​Z:​NEXT Y:​GOTO 1280
1300 DATA 32,​255,​255,​127,​127,​126,​62,​62,​60
1310 DATA 40,​60,​28,​28,​24,​8,​8,​8,​8
1320 DATA 48,​255,​127,​126,​60,​56,​24,​8,​8
1330 DATA 56,​8,​24,​28,​124,​124,​254,​254,​255
1340 DATA 64,​60,​126,​126,​126,​126,​126,​127,​255
1350 DATA 72,​16,​16,​16,​16,​16,​24,​60,​60
1360 DATA 80,​255,​255,​255,​255,​255,​255,​255,​255
1370 DATA 88,​0,​24,​24,​165,​165,​66,​66,​0
1380 DATA -1	

This is non-commercial site, its content is based on Atari 8-bit home computer contents and references.
If you feel your rights are violated by showing/using any part of contents of your product represented on this page, please contact me immediatelly so I can remove it!