REM "CALIMARI CARL" AN OPRY99ER GAME (2010)
REM GRAPHICAL CONTRIBUTIONS BY SOMETIMES99ER
REM CODE HAS BEEN CUT INTO MOSTLY SINGLE LINE STATEMENTS FOR ASSEMBLY CONVERSION[/b]
[b]
REM TITLE SCREEN
REM SET UP SCREEN AND COLORS FOR TITLE SCREEN
100 CALL CLEAR
101 CALL SCREEN(6)
102 CALL COLOR(2,16,1,3,16,1,4,2,1)
REM CHARACTER DEFINITIONS FOR TITLE
110 CALL CHAR(33,"6090906")
120 CALL CHAR(40,"00071F3F3F7F7F7E00FFFFFFFFFFFF0000FEFEFEFEFEFE00007E7E7E7E7E7E7E")
130 CALL CHAR(44,"007E7E7E7E7E7E007E7E7E7E7E7E7E7E007F7F7F7F7F7F0000E0F8FCFCFEFE7E")
140 CALL CHAR(48,"007F7F7F7F7F7F7E00FFFFFFFFFFFF7E7EFEFEFEFEFEFE7E7E7F7F3F3F1F07")
150 CALL CHAR(52,"7E7F7F7F7F7F7F007EFEFEFEFEFEFE007E7E7E7E7E7E7E")
160 CALL CHAR(56,"0080C0C0C0C0C0C0FFFFC0C0C0C0C0C0FFFF000000000000C0C")
170 CALL CHAR(60,"7F3F000000000000C0C0C0C0C0C0C0C00301")
REM DISPLAY "CALIMARI CARL" **DESIGNED BY SOMETIMES99ER
180 DISPLAY AT(4,3):"()*8 +,8 ,8()*8 +8"
190 DISPLAY AT(5,3):"-9:; -9; <;-9:; -="
200 DISPLAY AT(6,3):"-= ./-+01/./(*+8-= ./(*-="
210 DISPLAY AT(7,3):"-= 02-----02-9-=-= 02-9-="
220 DISPLAY AT(8,3):"3)*4566666456=6=3)*456=6="
230 DISPLAY AT(9,3):">::::::::::::;<;>:::::;<;"
REM CHARACTER DEFINITIONS FOR DIVER
240 CALL CHAR(88,"00000101030707077FFFFFFFFFFFFFFF80C0E0F0F8F8FEFF0707070707030F11")
250 CALL CHAR(92,"FFFFFFFFFFFFFFFFFFFFFFFFFFFEFCF060F87C7F3F3F0F0000000001FFFFFF1F")
260 CALL CHAR(96,"111F0FFFFFFFFFFFFFFFFFFCFCFFFFFFE0E0D8641800F8FEFF7F7F7F7FFFFFFF")
270 CALL CHAR(100,"FFFFFEFCF8F0E0E0FF87000000000000FFFFFF1E00000000FFFFFFFFFFFFFFFE")
280 CALL CHAR(104,"C0C0C080000000000000000000000101011F7F7FFFFFFFFEFEFEFEFEFE7E7EFE")
290 CALL CHAR(108,"030307070F0F1F1FFEFCF8F0F1F1F1F1FEFEFFFFFFFFFFFF3F3F3F3F3F3F3F1F")
300 CALL CHAR(112,"F1E1E1E1E1E1C0C0FFFFFFFFFFFFFEFC")
REM DISPLAY DIVER
310 DISPLAY AT(13,14):"XYZ"
311 DISPLAY AT(14,14):"[\]"
320 DISPLAY AT(15,12):"^_`ab"
321 DISPLAY AT(16,14):"cdef"
330 DISPLAY AT(17,14):"gh"
331 DISPLAY AT(18,12):"ijk"
340 DISPLAY AT(19,12):"lmn"
341DISPLAY AT(20,12):"opq"
350 DISPLAY AT(19,12):"lmn"
351 DISPLAY AT(20,12):"opq"
REM BUBBLE ANIMATION AND KSCAN FOR MOVING INTO MAIN GAME
360 W=RND*20+15
361 A=A+1
362 IF A>6 THEN A=1
370 CALL SPRITE(#A,33,16,98,142,-4,SGN(RND-.5))
380 CALL KEY(0,K,S)
381 IF S<>0 THEN 400
390 W=W-1
391 IF W<0 THEN 360 ELSE 380
REM PREPARE SCREEN AND CHARSETS FOR GAME
400 CALL CLEAR
410 CALL DELSPRITE(ALL)
420 CALL CHARSET
430 CALL CLEAR
440 CALL SCREEN(8)
450 CALL MAGNIFY(3)
REM CHARACTER DEFS AND COLORS
460 CALL CHAR(128,"0000010303071FFF")
470 CALL CHAR(129,"00408080C0E0FCFF")
480 CALL CHAR(112,"FFFFFFFFFFFFFFFF")
490 CALL COLOR(11,8,1,13,8,1)
500 CALL CHAR(96,"00010305071F3763CD09091B121200000080C0A0E0F8ECC6B39090D848480000")
510 CALL CHAR(100,"00042011084003131303400811200400002004881002C0C8C8C0021088042000") :: CALL CHAR(88,"18245ABDBD5A2418")
520 CALL CHAR(108,"0000006031190F1F704000000000000000000000E0EEFFEEA050280000000000")
530 CALL CHAR(116,"0000000031111F7F400000000000000000000000E0EEFFEEA050280000000000")
REM DRAW WAVES AT TOP OF SCREEN
540 FOR LW=1 TO 31 STEP 2
550 CALL HCHAR(1,LW,128)
560 NEXT LW
570 FOR RW=2 TO 32 STEP 2
580 CALL HCHAR(1,RW,129)
590 NEXT RW
600 REM **INIT VARIABLES**
REM PLAYER'S LOCATION
610 PY=160
620 PX=16
REM LIVES
630 L=3
REM OXYGEN
640 OX=20
REM POINTS
650 POI=0
REM SET SPRITES AND PUT THE ENEMIES IN MOTION
660 CALL SPRITE(#1,108,2,PY,PX)
670 CALL SPRITE(#2,96,5,32,200,0,18,#3,96,5,64,180,0,16,#4,96,5,96,86,0,20)
REM SET UP THE OXYGEN TANK AND CHECK FOR "IN BOUNDS"
680 TY=INT(RND*22)+2
690 TX=INT(RND*30)+2
700 IF TY>20 THEN TY=20
710 IF TY<4 THEN TY=4
720 IF TX<2 THEN TX=2
730 IF TX>30 THEN TX=20
740 DISPLAY AT(TY,TX):CHR$(88);
REM PLACE IMPORTANT VALUES ON SCREEN
750 DISPLAY AT(24,2):"BREATH "&STR$(OX);
760 DISPLAY AT(24,13):"POINTS "&STR$(POI);
770 DISPLAY AT(23,2):"LIVES "&STR$(L);
780 DISPLAY AT(24,8):CHR$(112);
790 DISPLAY AT(24,19):CHR$(112);
800 DISPLAY AT(23,7):CHR$(112);
REM CALL REST OF COLORS FOR GAME
810 CALL COLOR(13,8,2,11,8,1,8,16,1,2,2,8,3,2,8,5,2,8,6,2,8,7,2,8,4,2,8)
REM GAME LOOP START
REM CHECK FOR SPRITE COINC
820 CALL COINC(ALL,M)
830 IF M<>0 THEN GOTO 970
REM KSCAN FOR JOYSTICK
840 CALL JOYST(1,X,Y)
REM SET AUTO MOTION FOR PC SPRITE
850 CALL MOTION(#1,(-Y*2),(X*2))
REM SECOND CHECK FOR SPRITE COINC
860 CALL COINC(ALL,C)
870 IF C<>0 THEN GOTO 970
REM CHECK FOR TANK COLLISION
880 CALL COINC(#1,TY*8,TX*8,12,K)
890 IF K<>0 THEN GOTO 1100
REM INCREASE COUNTER AND DECREASE OXYGEN
900 CO=CO+1
910 IF CO=2 THEN OX=OX-1
920 IF CO=2 THEN CO=0
REM DISPLAY CURRENT OXYGEN LEVEL
930 IF OX<10 THEN DISPLAY AT(24,8):CHR$(112)&CHR$(112)&STR$(OX);
940 IF OX>=10 THEN DISPLAY AT(24,8):CHR$(112)&STR$(OX);
REM IF OXYGEN IS 0, THEN GOTO LOSE LIFE SEQUENCE
950 IF OX=0 THEN GOTO 970
960 GOTO 820
**************************************************
******* A COLLISION HAPPENED WITH AN ENEMY*******
**************************************************
REM DELETE SPRITES AND DISPLAY MESSAGE ONSCREEN
970 CALL DELSPRITE(ALL)
980 DISPLAY AT(10,10):"OCTOPUS FOOD";
REM DELAY LOOP #1
990 FOR DL=1 TO 300
1000 NEXT DL
1010 DISPLAY AT(10,10):"WHAT A SHAME";
REM DELAY LOOP #2
1020 FOR DL=1 TO 300
1030 NEXT DL
REM CLEAR MESSAGE AND EXISTING OXYGEN TANK
1040 DISPLAY AT(10,10):" ";
1050 DISPLAY AT(TY,TX):" ";
REM DECREASE LIVES, RESET OXYGEN TO 20
1060 L=L-1
1070 IF L<0 THEN GOTO 1160
1080 OX=20
REM RETURN TO GAME LOOP
1090 GOTO 660
********************************
*A TANK WAS RETRIEVED**********
*SO INCREASE POINTS AND OXYGEN*
********************************
1100 CALL SOUND(100,220,1,440,1,659,1)
REM INCREASE POINTS AND OXYGEN
1110 POI=POI+100
1120 OX=OX+10
REM OXYGEN LIMIT IS 50
1130 IF OX>50 THEN OX=50
1140 DISPLAY AT(TY,TX):CHR$(112);
REM RETURN TO GAME LOOP
1150 GOTO 680
*********************************
*YOU ARE OUT OF LIVES, GAME OVER*
*********************************
REM CLEAR SCREEN AND SET COLORS
1160 CALL CLEAR
1170 CALL SCREEN(9)
1180 FOR X=1 TO 12
1190 CALL COLOR(X,2,1)
1200 NEXT X
REM DISPLAY MESSAGE AND HOLD
1210 DISPLAY AT(10,8):"YOU LOSE, YA WANK!";
1220 GOTO 1220