5 DIM SK(10) 10 CALL CLEAR :: CALL SCREEN(13) :: CALL CO :: CALL Q :: CALL COLOR(1,16,13,2,16,13) :: DISPLAY AT(2,2):"DITT NAMN SOM BEF]LHAVARE?" 20 ACCEPT AT(4,8)SIZE(12)VALIDATE(UALPHA,"[]\x5c")BEEP:BEF$ 30 CALL CLEAR :: DISPLAY AT(6,2)BEEP:" GRATULERAR ";BEF$:" DU HAR NU BEF]LET \x5cVER":" M/S SP]CKHUGGAREN.": :" LYCKA TILL.." 32 CALL W 35 PO,SNK=0 :: CALL COLOR(1,15,2,2,15,2) :: CALL SCREEN(2) :: CALL CLEAR 40 X,Y=10 :: D,H,HD,EM,DM,L,S,KR=0 :: R=3 :: B=3000 :: S=400 :: BA=5000 :: TR=20 :: FOR T=1 TO 10 :: SK(T)=100 :: NEXT T 42 BX=INT(RND*70)+4 :: BY=INT(RND*60)+3 :: BF=INT(RND*2)+1 45 RO$(1)="HELT@@V" :: RO$(2)="HALVT@V" :: RO$(3)="RAKT" :: RO$(4)="HALVT@H" :: RO$(5)="HELT@@H" 60 CALL CHAR(136,"000000100A070F0FFF7D7F3F1F00000000000007050F1A1FFFB6FFFFFF000000") 70 CALL CHAR(140,"000000C040C6C7CFFFDBFFFFFF0000000000000040800080007EFEFCF8000000") 90 CALL DELSPRITE(ALL) :: CALL SK1 :: CALL SPRITE(#28,117,1,49,109,#27,104,1,81,109) :: GD,GH,GB,GS,GBA,GL,GP,GSN,GR,GKR=-1 :: GOTO 4000 100 CALL ORD(K) :: ON K+1 GOTO 4000,4000,1000,2000,3000,190,130,140,200,110,120,150,160,210,170,180 110 HD=HD-2 :: HD=(HD<-2)*2+(HD>=-2)*-HD*-(LU<>0) :: GOTO 4000 120 HD=HD+2 :: HD=(HD>2)*-2+(HD<=2)*-HD*-(LU<>0) :: GOTO 4000 130 EM=(EM=0)*-10*-(SK(5)>49) :: GOTO 4000 140 DM=(DM=0)*-1*-(SK(4)>49) :: GOTO 4000 150 EM=EM-(EM>0)*10 :: EM=(EM>200)*-200+(EM<201)*-EM :: GOTO 4000 160 EM=EM+(EM>0)*10 :: EM=(EM=0)*-10+(EM>0)*-EM :: GOTO 4000 170 IF SK(8)>29 THEN R=R-1 :: R=(R=0)*-1+(R>0)*-R :: GOTO 4000 ELSE 4000 180 IF SK(8)>29 THEN R=R+1 :: R=(R=6)*-5+(R<6)*-R :: GOTO 4000 ELSE 4000 190 P=(P=0)*-1*-(SK(1)>49) :: GOTO 4000 200 SN=(SN=0)*-1*-(SK(2)>49) :: GOTO 4000 210 LU=(LU=0)*-1*-(SK(7)>49) :: GOTO 4000 1000 A=-1 :: HF=2 :: HX=110 :: CALL DELSPRITE(ALL) :: CALL MAGNIFY(3) :: CALL SK2 :: CALL DISP(4,5,2,STR$(TR)) :: IF P THEN 1010 1005 GOSUB 5000 :: CALL ORD(K) :: IF K>0 AND K<5 AND K<>2 THEN ON K GOTO 90,1,2000,3000 ELSE 1005 1010 FOR T=12 TO 16 :: CALL HCHAR(T,7,112,20) :: NEXT T :: IF HE THEN CALL SPRITE(#4,124,15,50,HX) 1020 DX=BX-X :: DY=BY-Y 1025 IF ABS(DX)<=5 AND ABS(DY)<=5 THEN 1040 1030 L=0 :: T=0 :: A=-1 :: GOTO 1080 1040 DX=BX-X :: DY=BY-Y :: G=ATN(DY/ABS(DX))/PI*180 :: L=SQR(DX*DX+DY*DY) :: M=4+(L>2.5) 1050 IF INT(DX)=0 THEN A=(DY>0)*-180 :: GOTO 1080 ELSE IF INT(DY)=0 THEN A=(DX>0)*-90+(DX<0)*-270 :: GOTO 1080 1060 IF DX>0 THEN A=90+G ELSE IF DX<0 THEN A=270-G 1080 GOSUB 5000 :: CALL DISP(20,18,4,STR$(INT(L*200))) :: CALL DISP(4,13,3,STR$(INT(TT))) :: IF HE THEN CALL SPRITE(#4,124,15,50,HX) :: HF=HF-(HX<60)*4+(HX>190)*4 :: HX=HX+HF 1085 VI=A-TT :: IF A=-1 THEN 1095 ELSE CALL DISP(23,19,3,STR$(INT(A))) 1090 IF ABS(VI)<11 THEN SL=1 :: CALL SPRITE(#2,136,15,81+(M=4)*8,113+(M=4)*16+VI*8,#3,140,15,81+(M=4)*8,129+VI*8) :: CALL MAGNIFY(M) :: GOTO 1100 1095 SL=20 :: CALL DELSPRITE(#2,#3) 1100 CALL ORD(K) :: IF K>0 AND K<5 AND K<>2 THEN ON K GOTO 90,1,2000,3000 ELSE IF K=10 THEN 1140 1110 TT=TT+(K=14)*SL-(K=15)*SL 1120 IF TT>360 THEN TT=TT-360 ELSE IF TT<0 THEN TT=TT+360 1130 IF DY>5 OR DX>5 THEN 1020 ELSE 1040 1140 CALL SPRITE(#20,120,2,120,121,-2,0) 1150 CALL POSITION(#20,YY,XX) :: IF YY<93 THEN CALL MOTION(#20,0,0) :: GOTO 1160 ELSE 1150 1160 IF A<>-1 AND L<2.5 AND ABS(INT(VI))<4 THEN 1180 1170 CALL DELSPRITE(#20) :: GOTO 1020 1180 CALL LOCATE(#20,81-8*(M=4),XX) :: CALL PATTERN(#20,132) :: CALL COLOR(#20,11) :: CALL SPRITE(#1,132,9,81-8*(M=4),XX+3) :: CALL B2 1190 CALL DELSPRITE(#1,#2,#3,#20) :: SNK=SNK+1 :: TR=TR-1 :: PO=PO+400+SNK*SNK :: BX=INT(RND*70)+4 :: BY=INT(RND*20)+1 :: CALL DISP(4,5,2,STR$(TR)) :: BF=INT(RND*2)+1 1200 CALL MAGNIFY(3) :: CALL SPRITE(#1,128,16,81,121) :: GOTO 1020 2000 CALL DELSPRITE(ALL) :: CALL SK3 :: CALL MAGNIFY(1) 2020 SX=INT(X/26)*26+1 :: SY=INT(Y/22)*22+1 :: IF BXSX+25 OR BYSY+21 THEN 2040 2030 CALL SPRITE(#T+1,117,15,1+8*(BY-SY),17+8*(BX-SX)) 2040 GOSUB 5000 :: CALL SPRITE(#1,116,12,9+8*(Y-SY),25+8*(X-SX)) :: IF XSX+24 OR YSY+20 THEN 2060 2050 CALL ORD(K) :: IF K<5 AND K>0 AND K<>3 THEN ON K GOTO 90,1000,1,3000 ELSE 2040 2060 X=X+(XSX+24)*2 :: Y=Y+(YSY+20)*2 :: CALL DELSPRITE(ALL) :: GOTO 2020 3000 CALL SK4 3001 FOR T=1 TO 10 :: CALL DISP(T+3,14,3,STR$(SK(T))) :: NEXT T :: DISPLAY AT(17,16):BEF$&RPT$("@",12-LEN(BEF$))&"#" :: CALL DISP(21,18,3,STR$(SNK)) 3002 CALL DISP(23,18,3,STR$(PO)) 3010 GOSUB 5000 :: CALL ORD(K) :: IF K>0 AND K<4 THEN 3020 ELSE 3010 3020 ON K GOTO 90,1000,2000 4000 GOSUB 5000 :: IF D<>GD THEN CALL DISP(4,3,3,STR$(INT(D))) :: GD=D 4010 IF INT(H)<>INT(GH)THEN CALL DISP(4,9,3,STR$(INT(H))) :: GH=H 4020 IF INT(B)<>INT(GB)THEN CALL DISP(4,17,4,STR$(INT(B))) :: GB=B 4030 IF INT(S)<>INT(GS)THEN CALL DISP(4,23,3,STR$(INT(S))) :: GS=S 4040 IF INT(BA)<>INT(GBA)THEN CALL DISP(8,4,4,STR$(INT(BA))) :: GBA=BA 4050 IF R<>GR THEN CALL DISP(12,3,7,RO$(R)) :: GR=R 4060 IF R<>3 OR KR<>GKR THEN CALL SPRITE(#1,116,15,153-8*COS(KR/180*PI),201+8*SIN(KR/180*PI)) :: CALL DISP(21,15,3,STR$(INT(KR))) :: GKR=KR 4070 CALL HCHAR(15,16,96+LU*8) :: CALL HCHAR(7,28,96+P*8) :: CALL HCHAR(8,28,96+SN*8) 4080 CALL HCHAR(9,28,96+(D=0)*-8) :: CALL HCHAR(10,28,96+(TR=0)*-8) :: CALL HCHAR(11,28,96+(BA<201)*-8) :: CALL HCHAR(12,28,96+(B<50)*-8) 4090 CALL HCHAR(13,28,96+(S<50)*-8) :: CALL HCHAR(14,28,96+(DM>0)*-8) :: CALL HCHAR(15,28,96+(EM>0)*-8) 4100 GOTO 100 5000 IF EM THEN BA=BA-EM :: X=X+SIN(KR/180*PI)*H/25 :: Y=Y-COS(KR/180*PI)*H/25 5010 IF DM THEN B=B-5 :: BA=BA+20 :: S=S-0.5 5020 IF R<>3 AND H THEN KR=KR+(R=1)*45+(R=2)*22.5+(R=4)*-22.5+(R=5)*-45 :: IF KR<0 THEN KR=360+KR ELSE IF KR>360 THEN KR=KR-360 5025 IF HE THEN RANDOMIZE :: CALL PEEK(-31880,O) :: IF O<30+SNK*2 THEN CALL B :: GOSUB 6000 5030 H=EM/20 :: IF HE THEN 5040 ELSE RANDOMIZE :: CALL PEEK(-31880,O) :: IF O0 AND DM<>0 THEN CALL SOUND(-4000,EM+110,9,EM+111,9,320,20,-1,14) :: GOTO 5060 5050 IF EM<>0 AND DM=0 THEN CALL SOUND(-4000,EM+110,9,EM+111,9) ELSE IF DM<>0 AND EM=0 THEN CALL SOUND(-4000,320,20,-1,14) 5060 IF D>10 AND DM=0 AND EM<60 THEN HE=0 :: CALL COLOR(#28,1) 5070 D=D+HD :: IF D>80 THEN SK(10)=SK(10)-10 ELSE IF D<0 THEN HD,D=0 5080 IF S<0 OR SK(10)<10 THEN 5090 ELSE RETURN 5090 IF SK(10)<10 THEN 5100 ELSE 5110 5100 CALL C :: CALL PR(14) :: CALL AL :: CALL PR(15) :: CALL AL :: CALL PR(16) :: CALL AL :: GOTO 9000 5110 CALL C :: CALL PR(14) :: CALL AL :: CALL PR(17) :: CALL AL :: GOTO 9000 6000 RANDOMIZE :: CALL C :: CALL PEEK(-31880,QQ) :: IF QQ<45-10*(D<11)THEN 6010 ELSE CALL PR(13) :: RETURN 6010 CALL PR(1) :: SKA=INT(RND*10)+1 :: SK(SKA)=SK(SKA)-INT(RND*10)-8 :: CALL PR(2) :: CALL PR(SKA+2) 6020 RETURN 9000 CALL CLEAR :: CALL DELSPRITE(ALL) :: FOR T=1 TO 8 :: CALL COLOR(T,11,2) :: NEXT T 9010 DISPLAY AT(3,4)BEEP:"REDAN EFTER TRE TIMMAR": :" KOMMER EN UNDS]TTNINGS": :" UB[T OCH R]DDAR DIG OCH": :" DIN BES]TTNING." 9020 CALL W :: DISPLAY AT(3,4)BEEPERASE ALL:"TV[ DAGAR SENARE,": :" N]R DU HAR VILAT UPP DIG": :" TILLR]CKLIGT KALLAS DU" 9030 DISPLAY AT(9,3):"TILL AMIRALEN." :: CALL W :: DISPLAY AT(3,4)BEEPERASE ALL:"KRIGSR]TTEN HAR BESLUTAT ": :" ATT ";DB$;" ER." 9040 DISPLAY AT(7,4):"NI F[R H]DANEFTER KALLA": :"ER F\x5cR ";G$;"." :: CALL W 9050 DISPLAY AT(3,4)BEEPERASE ALL:"SOM KAPTEN,": :" FICK DU ";PO;" PO]NG." 9060 DISPLAY AT(23,1):"VILL DU SPELA IGEN?" :: ACCEPT AT(23,22)VALIDATE("JN"):V$ :: IF V$="J" THEN 10 ELSE CALL CLEAR :: END 19900 SUB W 19910 CALL KEY(0,K,S) :: IF S=1 THEN 19920 ELSE 19910 19920 SUBEND 20000 SUB CO :: RESTORE 20010 :: FOR T=0 TO 14 :: READ C,CC :: CALL COLOR(T,C,CC) :: NEXT T 20010 DATA 16,13,15,2,15,2,16,13,16,13,16,13,16,13,16,13,16,13,15,3,15,9,16,5,3,3,3,3,3,3 20020 SUBEND 20030 SUB Q :: RESTORE 20040 20035 READ A,A$ :: IF A=0 THEN SUBEXIT ELSE CALL CHAR(A,A$) :: GOTO 20035 20040 DATA 32,00000000000000001D1D1D1D1D1D1D1D000000FFFFFF00FFE8E8E8E8E8E8E8E8 20050 DATA 36,FFFFFF00FF000000000000070F1F1E1D000000FFFFFF00FF000000E0F0F838C8 20060 DATA 40,1D1D1E0F07000000E8E8D830E0000000 20070 DATA 64,0000000000000000,96,FFFFC3C3C3C3FFFFFFFFFFFFFFFFFFFF,104,FFFFC3C3C3C3FFFF,91,38283844447C4444280038444444443828003844447C4444 20080 DATA 128,304181800000000060000000808040300C02010100000006000000000181820C 20090 DATA 132,00004023099E4204124329084183172300081000883084481892C11238B2F9F0 20100 DATA 124,000000FE10387CFFEAFF7F3C000000000000007F081C70FFAFFFFE0000000000 20110 DATA 94,00304848300000000022240810244400,116,183C7EFFFF7E3C183C7EFFFFFFFF7E3C,112,0000000000000000 20120 DATA 120,0000000001030307000000000000000000000000008080C00000000000000000 20130 DATA 0, 20195 SUBEND 20200 SUB SK1 :: CALL MAGNIFY(1) :: CALL CLEAR :: RESTORE 20210 :: FOR T=1 TO 24 :: READ A$ :: DISPLAY AT(T,1):A$ :: NEXT T 20210 DATA," %&&&&'%&&&&'%&&&&&&'%&&&&' "," !DJUP#!FART#!DIESEL#!SYRE# "," !@@@M#!@@@K#!@@@@@L#!@@@L# "," ($$$$)($$$$)($$$$$$)($$$$)" 20220 DATA " %&&&&&&&'%&&&'%&&&&&&&&&&'"," !BATTERI#!@@@#!PERISKOP@`#"," !@@@@@AH#!@@@#!SNORKEL@@`#"," ($$$$$$$)($$$)!YTL]GE@@@`#" 20230 DATA " %&&&&&&&'%&&&'!TORPEDER@`#"," !RODER@@#!@@@#!BATTERI@@`#"," !@@@@@@@#!@@@#!DIESEL@@@`#"," ($$$$$$$)($$$)!SYRE@@@@@`#" 20240 DATA " %&&&&&&&&&&&&'!D@MOTOR@@`#"," !LUFT@PUMPAR`#!ELMOTOR@@`#"," ($$$$$$$$$$$$)($$$$$$$$$$)"," %&&&&&'" 20250 DATA " %&&&&&&&&' !@@N@@#"," !@@@@@@@@# %&&&&&&'!@@@@@#"," !@@@@@@@@# !@KURS@#!V@@@\x5c#"," !@@@@@@@@# !@@@@^@#!@@@@@#" 20260 DATA " !@@@@@@@@# ($$$$$$)!@@S@@#"," !@@@@@@@@# ($$$$$)"," ($$$$$$$$)" 20270 SUBEND 20280 SUB SK2 :: CALL CLEAR :: CALL HCHAR(6,7,38,20) :: CALL HCHAR(17,7,36,20) :: CALL VCHAR(7,6,33,10) :: CALL VCHAR(7,27,35,10) 20290 CALL HCHAR(6,6,37) :: CALL HCHAR(6,27,39) :: CALL HCHAR(17,6,40) :: CALL HCHAR(17,27,41) :: CALL VCHAR(9,6,97,6) :: CALL VCHAR(9,27,97,6) 20295 FOR I=2 TO 28 STEP 26 :: FOR T=10 TO 13 :: CALL HCHAR(T,I,97,4) :: NEXT T :: NEXT I :: CALL HCHAR(9,2,38,4) :: CALL HCHAR(9,28,38,4) 20296 CALL HCHAR(14,2,36,4) :: CALL HCHAR(14,28,36,4) 20300 DISPLAY AT(18,1):" %&&&&&&&&' %&&&&&&&'":" !@@@@@@@@# !AVST[ND#":" !@@@@@@@@# !@@@@@M@#":" !@@@@@@@@# ($$$$$$$)" 20302 DISPLAY AT(22,2):"!@@@@@@@@# %&&&&&&&'":" !@@@@@@@@# !@@@@@^@#":" ($$$$$$$$) ($$$$$$$)" 20305 DISPLAY AT(2,1):"%&&&&&&&&'":"!TORPEDER#%&&&&&&'":"!@@@@@@@@#!@@@@^@#":"($$$$$$$$)($$$$$$)" 20310 CALL SPRITE(#1,128,16,81,121) :: SUBEND 20320 SUB SK3 :: CALL CLEAR :: DISPLAY AT(1,1):"%&&&&&&&&&&&&&&&&&&&&&&&&&&'" :: FOR T=2 TO 23 :: DISPLAY AT(T,1):"!pppppppppppppppppppppppppp#" :: NEXT T 20330 DISPLAY AT(24,1):"($$$$$$$$$$$$$$$$$$$$$$$$$$)" :: SUBEND 20340 SUB SK4 :: CALL DELSPRITE(ALL) :: CALL CLEAR :: RESTORE 20350 :: FOR T=1 TO 24 :: READ A$ :: DISPLAY AT(T,1):A$ :: NEXT T :: SUBEXIT 20350 DATA %&&&&&&&&&&&&&&&&&&&&&&&&&&',!@@@@@@@@@SKADOR@@@@@@@@@@@#,!@@@@@@@@@@@@@@@@@@@@@@@@@@#,!@PERISKOP@:@@@@_@@@@@@@@@@# 20360 DATA !@SNORKEL@@:@@@@_@@@@@@@@@@#,!@TORPEDER@:@@@@_@@@@@@@@@@#,!@D@MOTOR@@:@@@@_@@@@@@@@@@#,!@ELMOTOR@@:@@@@_@@@@@@@@@@# 20370 DATA !@BATTERI@@:@@@@_@@@@@@@@@@#,!@L@PUMPAR@:@@@@_@@@@@@@@@@#,!@RODER@@@@:@@@@_@@@@@@@@@@#,!@RADAR@@@@:@@@@_@@@@@@@@@@# 20380 DATA !@SKROV@@@@:@@@@_@@@@@@@@@@#,!@@@@@@@@@@@@@@@@@@@@@@@@@@#,!@@UB[T@:@SP]CKHUGGAREN@@@@#,!@@@@@@@@@@@@@@@@@@@@@@@@@@# 20390 DATA !@BEF]LHAVARE:@@@@@@@@@@@@@#,!@@@@@@@@@@@@@@@@@@@@@@@@@@#,!@@@@@@@@@@@@@@@@@@@@@@@@@@#,!@@@@@@@@@@@@@@@@@@@@@@@@@@# 20400 DATA !@S]NKTA@SKEPP@:@@@@@@@@@@@#,!@@@@@@@@@@@@@@@@@@@@@@@@@@#,!@@@@@@@@PO]NG@:@@@@@@@@@@@#,($$$$$$$$$$$$$$$$$$$$$$$$$$) 20410 SUBEND 20500 SUB B :: FOR T=0 TO 30 STEP 4 :: CALL SOUND(-100,110,T,111,T,134,T,-7,T) :: CALL SOUND(-100,112,T,113,T,114,T,-7,T) :: NEXT T 20510 SUBEND 20600 SUB PR(V) :: ON V GOSUB 20610,20620,20630,20640,20645,20650,20660,20670,20680,20690,20700,20710,20720,20730,20740,20750 20605 SUBEXIT 20610 CALL DISP(19,3,8,"VARNING@") :: RETURN 20620 CALL DISP(21,3,8,"TR]FF@I@") :: RETURN 20630 CALL DISP(23,3,8,"PERISKOP") :: RETURN 20640 CALL DISP(23,3,8,"SNORKEL@") :: RETURN 20645 CALL DISP(23,3,8,"TORPEDER") :: RETURN 20650 CALL DISP(23,3,8,"TORPEDER") :: RETURN 20660 CALL DISP(23,3,8,"D@MOTOR@") :: RETURN 20670 CALL DISP(23,3,8,"ELMOTOR@") :: RETURN 20680 CALL DISP(23,3,8,"L@PUMPAR") :: RETURN 20690 CALL DISP(23,3,8,"RODER@@@") :: RETURN 20700 CALL DISP(23,3,8,"RADAR@@@") :: RETURN 20710 CALL DISP(23,3,8,"SKROV@@@") :: RETURN 20720 CALL DISP(19,3,8,"SJUNK@@@") :: CALL DISP(20,3,8,"BOMBEN@@") :: CALL DISP(21,3,8,"") :: CALL DISP(22,3,8,"MISSADE@") :: CALL DISP(23,3,8,"") :: RETURN 20730 FOR T=19 TO 23 :: CALL DISP(T,3,8,"ALARM@@@") :: NEXT T :: RETURN 20740 CALL DISP(19,3,8,"@@@VI@@@") :: CALL DISP(20,3,8,"SJUNKER@") :: CALL DISP(22,3,8,"@KAPTEN@") :: RETURN 20750 CALL DISP(19,3,8,"BEMANNA@") :: CALL DISP(21,3,8,"PUMPARNA") :: RETURN 20760 SUBEND 20800 SUB B2 20810 FOR T=0 TO 28 STEP 2 :: CALL SOUND(100,-7,T,110,T+2) :: CALL COLOR(#1,9,#20,11) :: CALL SOUND(-100,-7,T+2,110,T+2) :: CALL COLOR(#1,11,#20,9) :: NEXT T 20820 SUBEND 20900 SUB C :: FOR T=19 TO 23 :: CALL HCHAR(T,5,64,8) :: NEXT T :: SUBEND 30000 SUB DISP(Y,X,L,V$) :: DISPLAY AT(Y,X)SIZE(L):RPT$("@",L-LEN(V$))&V$ :: SUBEND 30010 SUB ORD(K) :: CALL KEY(3,K,S) :: IF S=0 THEN K=0 :: SUBEXIT 30020 IF(K>48)*(K<53)THEN K=K-48 :: GOTO 30050 30030 IF(K>64)*(K<76)THEN K=K-60 :: GOTO 30050 30040 K=0 30050 CALL COLOR(#27,11) :: CALL COLOR(#27,1) :: SUBEND