REM * 96&97 = PLAYER SHIP REM * 104&105 = PLAYER MISSILES LEFT & RIGHT REM * 106 = WATER REM * 107 = SUBMARINE >>> LEFT SIDE REM * 108 = SUBMARINE >>> RIGHT SIDE REM * 109 = SUBMARINE <<< LEFT SIDE REM * 110 = SUBMARINE <<< RIGHT SIDE REM * 111 = ENEMY MISSILE REM * 112 = EXPLOSION REM * 120 = GROUND #1 REM * 121 = GROUND #2 REM * 128 = CLOUD LEFT REM * 129 = CLOUD MIDDLE REM * 130 = CLOUD RIGHT REM * 131 = CLOUD TOP ( ABOVE MIDDLE ) REM * EF = ENEMY FIRE REM * E = ENEMY PRESENT OR NOT REM * EX = ENEMY X REM * EY = ENEMY Y REM * X = PLAYER X REM * Y = PLAYER Y REM * EFX=ENEMY FIRE X REM * EFY= ENEMY FIRE Y REM * A1= PLAYER FIRE X 1 REM * A2= PLAYER FIRE X 2 REM * A3= PLAYER FIRE Y 1 REM * A4= PLAYER FIRE Y 2 1 RANDOMIZE 2 FOR L=1 TO 20 3 READ Z,Z$ 4 CALL CHAR(Z,Z$) 5 NEXT L 10 CALL CLEAR 11 PRINT "DEFINE YOUR CONTROLS"::: 12 INPUT "KEY FOR LEFT MOVE ":Z$ 13 LM=ASC(Z$) 14 INPUT "KEY FOR RIGHT MOVE ":Z$ 15 RM=ASC(Z$) 16 INPUT "KEY FOR FIRE 1 ":Z$ 17 FI1=ASC(Z$) 18 INPUT "KEY FOR FIRE 2 ":z$ 19 FI2=ASC(Z$) 20 CALL CLEAR 21 CALL SCREEN(16) 25 PRINT :::::::: 30 PRINT TAB(10);"SUBKILLER":::: 35 PRINT " A TI BASIC GAME":" BY RETROSPECT"::: 40 PRINT " PRESS SPACE TO START"::::::: 45 CALL KEY(0,K,ST) 50 IF K=32 THEN 900 ELSE 45 900 gosub 32150 REM * PLACE CLOUDS 1000 FOR Q=1 TO 32 1001 CX=INT(10*RND)+2 1002 CY=INT(26*RND)+3 1003 GOSUB 32220 1004 NEXT Q REM * PLACE SEA & GROUND 1050 CALL HCHAR(14,1,106,320) 1051 FOR Q=1 TO 31 STEP 2 1052 CALL HCHAR(24,Q,120) 1053 CALL HCHAR(24,Q+1,121) 1054 NEXT Q REM * PLACE PLAYER 1055 X=13 1056 Y=15 1057 CALL HCHAR(X,Y,96) 1058 CALL HCHAR(X,Y+1,97) REM * COLOURS ON 1060 GOSUB 32190 REM * VARIABLES FOR GAME REM * E = ENEMY OFF REM * EF = ENEMY NOT FIRING REM * F1 = PLAYER FIRE 1 OFF REM * F2 = PLAYER FIRE 2 OFF REM * S = PLAYER SCORE DECLARED AS NULL 1065 E=0 1070 EF=0 1075 F1=0 1080 F2=0 1085 S=0 REM * MAIN LOOP 1100 GOSUB 4100 1105 GOSUB 4200 1110 GOSUB 4300 1115 GOSUB 4400 1120 GOSUB 4500 1125 GOSUB 4600 1130 GOSUB 4700 1135 GOSUB 4800 1140 GOSUB 4900 1145 GOSUB 5000 1150 GOTO 1100 REM * PLAYER LEFT? 4100 CALL KEY(0,K,ST) 4105 IF K=LM THEN 4110 ELSE 4199 4110 A=Y 4111 Y=Y-1 4115 IF Y<2 THEN 4120 ELSE 4125 4120 Y=2 4125 CALL HCHAR(X,A,32,2) 4126 CALL HCHAR(X,Y,96) 4130 CALL HCHAR(X,Y+1,97) 4199 RETURN REM * PLAYER RIGHT? 4200 CALL KEY(0,K,ST) 4205 IF K=RM THEN 4210 ELSE 4299 4210 A=Y 4211 Y=Y+1 4215 IF Y>29 THEN 4220 ELSE 4225 4220 Y=29 4225 CALL HCHAR(X,A,32,2) 4226 CALL HCHAR(X,Y,96) 4230 CALL HCHAR(X,Y+1,97) 4299 RETURN REM * FIRE 1 ACTIVATE? 4300 CALL KEY(0,K,ST) 4305 IF K=FI1 THEN 4310 ELSE 4399 4310 IF F1=1 THEN 4399 4315 F1=1 4320 A1=X+1 4321 A3=Y-1 4322 CALL HCHAR(A1,A3,104) 4323 CALL SOUND(-100,110,30,110,30,3000,30,-4,0) 4399 RETURN REM * FIRE 1 INCREMENT? 4400 IF F1=1 THEN 4405 ELSE 4499 4405 AA=A1 4410 BB=A3 4415 A1=A1+1 4420 CALL HCHAR(AA,BB,106) 4425 IF A1=24 THEN 4430 ELSE 4440 4430 F1=0 4435 GOTO 4499 4440 GOSUB 31100 4445 CALL HCHAR(A1,A3,104) 4499 RETURN REM * FIRE 2 ACTIVATE? 4500 CALL KEY(0,K,ST) 4505 IF K=FI2 THEN 4510 ELSE 4599 4510 IF F2=1 THEN 4599 4515 F2=1 4520 A2=X+1 4521 A4=Y+2 4522 CALL HCHAR(A2,A4,105) 4523 CALL SOUND(-100,110,30,110,30,6000,30,-4,0) 4599 RETURN REM * FIRE 2 INCREMENT? 4600 IF F2=1 THEN 4605 ELSE 4699 4605 AA=A2 4610 BB=A4 4615 A2=A2+1 4620 CALL HCHAR(AA,BB,106) 4625 IF A2=24 THEN 4630 ELSE 4640 4630 F2=0 4635 GOTO 4699 4640 GOSUB 31100 4645 CALL HCHAR(A2,A4,105) 4699 RETURN REM * IS THERE AN ENEMY? 4700 IF E=0 THEN 4705 ELSE 4799 4705 rem 4710 rem 4715 rem 4716 call hchar(14,1,106,320) 4720 E=1 4725 ET=INT(2*RND)+1 4730 ON ET GOTO 4735,4745 4735 Z=INT(7*RND)+15 4736 EX=Z 4737 EY=1 4738 CALL HCHAR(EX,EY,107) 4739 CALL HCHAR(EX,EY+1,108) 4740 GOTO 4799 4745 Z=INT(7*RND)+15 4746 EX=Z 4747 EY=32 4748 CALL HCHAR(EX,EY,110) 4749 CALL HCHAR(EX,EY-1,109) 4799 RETURN REM * IF THERE'S AN ENEMY, MOVE IT 4800 IF E=1 THEN 4805 ELSE 4899 4805 ON ET GOTO 4810,4850 REM >>> 4810 EA=EX 4811 EB=EY 4812 EY=EY+1 4813 IF EY>31 THEN 4814 ELSE 4817 4814 E=0 4815 CALL HCHAR(EX,1,106,32) 4816 GOTO 4899 4817 CALL HCHAR(EA,EB,106) 4818 CALL HCHAR(EX,EY,107) 4819 CALL HCHAR(EX,EY+1,108) 4820 if f1=1 then 4821 else 4825 4821 if A1=ex then 4822 else 4825 4822 if A3=ey then 31400 4823 if A3=ey+1 then 31400 4825 if f2=1 then 4826 else 4849 4826 if A2=ex then 4827 else 4899 4827 if A4=ey then 31500 4828 if A4=ey+1 then 31500 4849 GOTO 4899 REM <<< 4850 EA=EX 4851 EB=EY 4852 EY=EY-1 4853 IF EY<2 THEN 4814 4855 CALL HCHAR(EA,EB,106) 4856 CALL HCHAR(EX,EY,110) 4857 CALL HCHAR(EX,EY-1,109) 4860 if f1=1 then 4861 else 4865 4861 if A1=ex then 4862 else 4865 4862 if A3=ey then 31500 4863 if A3=ey-1 then 31500 4865 if f2=1 then 4866 else 4899 4866 if A2=ex then 4867 else 4899 4867 if A4=ey then 31500 4868 if A4=ey-1 then 31500 4899 RETURN REM * CAN ENEMY FIRE? 4900 IF E=1 THEN 4905 ELSE 4999 4905 IF EF=0 THEN 4910 ELSE 4999 4910 IF EY=Y THEN 4915 ELSE 4999 4915 EF=1 4920 FX=EX 4925 FY=EY 4930 CALL HCHAR(FX,FY,111) 4935 CALL SOUND(-100,110,30,110,30,1000,30,-4,0) 4999 RETURN REM * ENEMY FIRE INCREMENT? 5000 IF EF=1 THEN 5005 ELSE 5099 5005 FA=FX 5010 FB=FY 5015 FX=FX-1 5020 IF FX=13 THEN 31200 5025 CALL HCHAR(FA,FB,106) 5030 CALL HCHAR(FX,FY,111) 5035 REM COLLISIONS 5099 RETURN REM * CHECK FOR ENEMY COLLISION 31100 IF F1=1 THEN 31105 ELSE 31150 31105 IF E=1 THEN 31110 ELSE 31199 31110 CALL GCHAR(A1,A3,CH) 31111 IF CH>106 THEN 31112 ELSE 31150 31112 CALL HCHAR(14,1,106,320) 31113 CALL SOUND(250,110,30,110,30,950,30,-8,0) 31114 call sound(150,110,30,110,30,775,30,-8,0) 31115 call sound(500,110,30,110,30,1250,30,-8,0) 31116 S=S+1 31117 F1=0 31118 E=0 31120 REM 31150 IF F2=1 THEN 31155 ELSE 31199 31155 IF E=1 THEN 31160 ELSE 31199 31160 CALL GCHAR(A2,A4,CH) 31161 IF CH>106 THEN 31162 ELSE 31199 31162 CALL HCHAR(14,1,106,320) 31163 CALL SOUND(250,110,30,110,30,950,30,-8,0) 31164 call sound(150,110,30,110,30,775,30,-8,0) 31165 call sound(500,110,30,110,30,1250,30,-8,0) 31166 S=S+1 31167 F2=0 31168 E=0 31199 RETURN REM * ENEMY BOMB EXPLODES AT SURFACE 31200 CALL HCHAR(FX,FY,112) 31205 CALL SOUND(-500,110,30,110,30,1250,30,-8,0) 31210 IF FY=Y THEN 31215 31211 IF FY=Y+1 THEN 31215 ELSE 31230 31215 CALL HCHAR(FX,Y-1,112,3) 31216 CALL HCHAR(FX-1,Y-1,112,3) 31217 CALL SOUND(500,110,30,110,30,2000,30,-8,0) 31218 CALL SOUND(500,110,30,110,30,1750,30,-8,0) 31219 CALL SOUND(500,110,30,110,30,1500,30,-8,0) 31220 CALL SOUND(1000,110,30,110,30,1250,30,-8,0) 31221 FOR DELAY=1 TO 500 31222 NEXT DELAY 31223 GOTO 31300 31230 CALL HCHAR(FX,FY,32) 31235 call hchar(fx+1,fy,106) 31240 EF=0 31250 GOTO 5099 REM * GAME OVER AND SCORE 31300 CALL CLEAR 31305 PRINT "YOU WERE KILLED":"BY AN ENEMY MISSILE"::"YOU SCORED";S:: 31310 INPUT "ANOTHER GAME Y OR N: ":YN$ 31315 IF YN$="Y" THEN 20 31320 END ! * ENEMY MOVES INTO PLAYER MISSILE 1 31400 CALL HCHAR(14,1,106,320) 31401 CALL SOUND(250,110,30,110,30,950,30,-8,0) 31402 call sound(150,110,30,110,30,775,30,-8,0) 31403 call sound(500,110,30,110,30,1250,30,-8,0) 31404 S=S+1 31405 F1=0 31410 E=0 31420 GOTO 4899 ! * ENEMY MOVES INTO PLAYER MISSILE 2 31500 CALL HCHAR(14,1,106,320) 31501 CALL SOUND(250,110,30,110,30,950,30,-8,0) 31502 call sound(150,110,30,110,30,775,30,-8,0) 31503 call sound(500,110,30,110,30,1250,30,-8,0) 31504 S=S+1 31505 F2=0 31510 E=0 31520 GOTO 4899 REM * GRAPHICS DATA 32100 DATA 96,010B2BFFFF7F3F0F,97,80D0D4FFFFFEFCF0,98,0000183C3C180000,99,0000183C3C180000,100,0000002A1C3E1C2A 32110 DATA 104,0000183C3C180000,105,0000183C3C180000,106,0000000000000000,107,0202BFFFFFFFBF00,108,6070FCFEFEFEFC00 32120 DATA 109,060E3F7F7F7F3F00,110,4040FDFFFFFFFD00,111,002A1C3E1C2A0000,112,492A0063002A4900 32130 DATA 120,00E0F0FCFFFFFFFF,121,00070F3FFFFFFFFF 32140 DATA 128,020D2F79D7FFFF4C,129,EEFFF7FFFBF7C76E,130,40B0F49EEBFFFF32,131,000000083C7E6BFC REM * COLOURS OFF 32150 FOR L=9 TO 13 32160 CALL COLOR(L,2,2) 32165 NEXT L 32170 CALL SCREEN(2) 32175 CALL CLEAR 32180 RETURN REM * COLOURS ON 32190 CALL SCREEN(8) 32192 CALL COLOR(9,2,8) 32195 CALL COLOR(10,2,5) 32200 CALL COLOR(11,12,5) 32205 CALL COLOR(12,13,5) 32210 CALL COLOR(13,16,8) 32215 RETURN REM * PLACE A CLOUD @ CX,CY 32220 CALL HCHAR(CX,CY,128) 32225 CALL HCHAR(CX,CY+1,129) 32230 CALL HCHAR(CX,CY+2,130) 32235 CALL HCHAR(CX-1,CY+1,131) 32340 RETURN