10 ! IKON800.GAM (BAC-fil) 20 ! \versatt och konventerad till ABC800M av 30 ! Bertil M}rtensson W & M, Lund 1984. 40 ! B|r g} p} alla ABC800-806-datorer med 80 teckens bredd. 50 ! 60 ! \versatt efter The St Petersburg Ikon 70 ! Your Computer, c 1984 John Ransley 80 ! 90 ! 95 EXTEND : INTEGER 100 ; CHR$(12) 110 ; ,"Jakten efter St Petersburg-ikonen b|rjar. " : ; : Z=FNPaus(2000) 120 ; TAB(16) "Kan du hitta den? "; : Z=FNPaus(1000) : ; "Och ta dig ut igen?" : Z=FNPaus(2000) 130 ; : ; : ; 140 ! ---- SET UP OBJECT ARRAYS -------- 150 ! 160 DIM Pl(15),Sn$(15),Ln$(15) 170 ! 180 ! -----FILL OBJECT ARRAYS -------- 190 ! 200 FOR X=1 TO 12 : READ Pl(X),Sn$(X),Ln$(X) : NEXT X 210 ! 220 ! ----- DATA FOR OBJECT ARRAYS ------- 230 ! 240 DATA 2,RADBAND,H{r finns ett s|ndrigt radband 250 DATA 6,M\SSA,Du hittar en engelsk officersm|ssa 260 DATA 11,BOKRULLE,H{r ligger en illustrerad bokrulle 270 DATA 13,KNIV,En nazistkniv ligger framf|r dig 280 DATA 17,EN B\NBOK,Du ser en uppslagen b|nbok 290 DATA 18,MYNT,N}gra mynt ligger kringsl{ngda 300 DATA 20,ELIXIR,Du ser en flaska elixir 310 DATA 27,NYCKLAR, Du hittar en gammal knippa nycklar 320 DATA 29,VERKTYG,H{r ligger n}gra gamla verktyg 330 DATA 31,CIGARRG\RDEL,Du l{gger m{rke till en holl{ndsk cigarrg|rdel 340 DATA 34,LJUS,N}gra f} oanv{nda ljus ligger kvargl|mda 350 DATA 35,REP, Du ser n}gra gamla stumpar rep 360 ! 370 ! ---- SET STATUS OF CHALLENGE ------ 380 ! 390 Pw=1 : Nz=1 : Cl=1 : Fw=1 : Dk=1 400 ! 410 ! ------ SET CURRENT POSITION ---- 420 ! 430 Cp=23 440 ! 450 GOTO 530 460 ! 470 ! -------- SET NEW POSITION -------- 480 ! 490 Cp=Np 500 ! 510 ! ----- SIGNPOST TO LOCATION -------- 520 ! 530 IF Cp<7 THEN ON Cp GOTO 2260,2280,2300,2320,2340,2360 540 IF Cp<13 THEN ON Cp-6 GOTO 2380,2400,2420,2440,2460,2480 550 IF Cp<19 THEN ON Cp-12 GOTO 2500,2520,2540,2560,2580,2600 560 IF Cp<25 THEN ON Cp-18 GOTO 2620,2640,2660,2680,2700,2730 570 IF Cp<31 THEN ON Cp-24 GOTO 2750,2770,2790,2820,2840,2860 580 IF Cp<37 THEN ON Cp-30 GOTO 2880,2900,2950,3030,3050,3070 590 ! 600 ! ----- PRINT OBJECT NAME IN RIGHT LOCATION ------ 610 ! 620 FOR X=1 TO 12 630 IF Pl(X)=Cp THEN ; Ln$(X) 640 NEXT X 650 Z=FNPaus(1000) 660 ! 670 ! 680 ! ----- CHECK IF CHALLENGE ----- 690 ! 700 IF Cp=5 AND Pw=1 THEN 3120 710 IF Cp=8 AND Nz=1 THEN 3130 720 IF Cp=12 AND Cl=1 THEN 3140 730 IF Cp=19 AND Fw=1 THEN 3150 740 IF Cp=25 AND Fw=1 THEN 3150 750 IF Cp=26 AND Dk=1 THEN 3160 760 IF Cp=26 AND Dk=1 THEN 3160 770 ! 780 ! ---- DISPLAY POSSIBLE MOVES ----- 790 ! 800 ; 810 ; "Du kan g}"; 820 IF N>0 ; " norrut"; 830 IF S>0 ; " s|derut"; 840 IF \>0 ; " |sterut"; 850 IF V>0 ; " v{sterut"; 860 ; ". "; 870 ! 880 ! ---- NEW INSTRUCTIONS ----- 890 ! 900 ! 910 ; "Vad vill du g|ra"; : INPUT I$ 920 IF ASCII(LEFT$(I$,1))>96 ; "Du m}ste anv{nda stora bokst{ver. "; : GOTO 910 930 ; 940 ! --- BLOCK MOVE IF CHALLENGE EXISTS ---- 950 ! 960 IF Cp=5 AND Pw=1 GOTO 1240 970 IF Cp=8 AND Nz=1 GOTO 1240 980 IF Cp=12 AND Cl=1 GOTO 1240 990 IF Cp=19 AND Fw=1 GOTO 1240 1000 IF Cp=25 AND Fw=1 GOTO 1240 1010 IF Cp=26 AND Dk=1 GOTO 1240 1020 ! 1030 ! 1040 ! ---- CHECK KEY ENTERED ----- 1050 ! 1060 IF I$="N" OR I$="S" OR I$="\" OR I$="V" GOTO 1130 1070 ! 1080 ! --- JUMP TO OTHER OPTIONS ---- 1090 GOTO 1300 1100 ! 1110 ! --- CHANGE POSITION VALUE ---- 1120 ! 1130 IF I$="N" AND N>0 THEN Np=Cp-6 : GOTO 490 1140 IF I$="S" AND S>0 THEN Np=Cp+6 : GOTO 490 1150 IF I$="\" AND \>0 THEN Np=Cp+1 : GOTO 490 1160 IF I$="V" AND V>0 THEN Np=Cp-1 : GOTO 490 1170 ! 1180 ! ---- BLOCK ILLEGAL MOVE IF N,S,E,W = 0 1190 ! 1200 ; "Om|jligt." : GOTO 490 1210 ! 1220 ! ---- BLOCK ESCAPE FROM CHALLENGE ---- 1230 ! 1240 IF I$="N" OR I$="S" OR I$="\" OR I$="V" THEN 1260 1250 GOTO 1300 1260 ; "Det kan du ju inte {n!" : GOTO 900 1270 ! 1280 ! --- CHECK OTHER SINGLE LETTER INPUT ---- 1290 ! 1300 IF I$="I" GOTO 1690 1310 IF I$="H" GOTO 1780 1320 IF I$="SLUTA" GOTO 3330 1330 ! 1340 ! 1350 ! ---- CHECK FOR SPECIAL COMMANDS ------ 1360 ! 1370 IF I$="SV[LJA ELIXIR" AND Cp=5 THEN 2060 1380 IF I$="STRYPA NAZIST" AND Cp=8 THEN 2090 1390 IF I$="STOPPA IN MYNT" AND Cp=12 THEN 2120 1400 IF I$="SIMMA I VATTEN" AND Cp=19 OR Cp=25 THEN 2150 1410 IF I$="T[NDA LJUS" AND Cp=26 THEN 2190 1420 ! 1430 ! ---- SCAN TWO-WORD COMMAND ------ 1440 ! 1450 FOR W=1 TO LEN(I$) 1460 IF MID$(I$,W,1)=" " THEN 1520 1470 NEXT W 1480 ; "Utom N, S, \, V, SLUTA beh|ver jag tv} ord." : GOTO 900 1490 ! 1500 ! ---- SPLIT INTO VERB AND NOUN ---- 1510 ! 1520 FOR Sp=1 TO LEN(I$) 1530 IF MID$(I$,Sp,1)=" " THEN 1550 1540 NEXT Sp 1550 Ve$=LEFT$(I$,Sp-1) 1560 No$=RIGHT$(I$,Sp+1) 1570 ! 1580 ! --- SCAN VE$ FOR COMMAND ---- 1590 ! 1600 IF Ve$="TA" OR Ve$="TAGA" OR Ve$="GRIPA" GOTO 1870 1610 IF Ve$="L[MNA" OR Ve$="SL[PPA" GOTO 1970 1620 ! 1630 ! --- VERB NOT RECOGNIZED ---- 1640 ! 1650 ; "Beklagar, du kan inte " I$ "." : GOTO 900 1660 ! 1670 ! ----- MAKING INVENTORY ----- 1680 ! 1690 ; "Du har "; 1700 In=0 : FOR L=1 TO 12 1710 IF Pl(L)=-1 ; Sn$(L) : In=In+1 1720 NEXT L 1730 IF In=0 THEN ; "ingenting i bagaget." 1740 GOTO 800 1750 ! 1760 ! --- RESPOND TO HELP REQUEST --- 1770 ! 1780 IF Cp=5 ; "Inget annat att dricka?" : GOTO 900 1790 IF Cp=12 ; "F|r{ndring i l|sningen?" : GOTO 900 1800 IF Cp=8 THEN ; "Snara framtill?" : GOTO 900 1810 IF Cp=19 OR Cp=25 ; "En d}lig hantverkare?" : GOTO 900 1820 IF Cp=26 ; "Lite ljus kanske hj{lper?" : GOTO 900 1830 ; "Beklagar, kan inte hj{lpa dig." : GOTO 900 1840 ! 1850 ! ---- GETTING OBJECTS ------- 1860 ! 1870 FOR G=1 TO 12 1880 IF Sn$(G)=No$ THEN 1900 1890 NEXT G 1900 IF Pl(G)=-1 ; "Du har ju " Sn$(G) "." : GOTO 800 1910 IF Pl(G)<>Cp THEN ; Sn$(G) " finns inte h{r." : GOTO 800 1920 ; "Du har tagit " Sn$(G) : Pl(G)=-1 1930 GOTO 800 1940 ! 1950 ! ---- DROPPING OBJECTS ----- 1960 ! 1970 FOR L=1 TO 12 1980 IF Sn$(L)=No$ THEN 2000 1990 NEXT L 2000 IF Pl(L)<>-1 ; "Du har inte " Sn$(L) : GOTO 800 2010 ; "Du har l{mnat " Sn$(L) : Pl(L)=Cp 2020 GOTO 800 2030 ! 2040 ! ---- CHALLENGE ROUTINE ---- 2050 ! 2060 IF Pl(7)=-1 ; "Elixiret verkar!" : Pw=0 : GOTO 800 2070 ; "Du har inte elixiret!" : GOTO 3330 2080 ! 2090 IF Pl(12)=-1 ; "Han faller samman medvetsl|s." : Nz=0 : GOTO 800 2100 ; "Du har inget rep." : GOTO 3330 2110 ! 2120 IF Pl(6)=-1 THEN Cl=0 : GOTO 3190 2130 ; "Men du har ju inga mynt." : GOTO 900 2140 ! 2150 IF Pl(9)=-1 THEN 2170 2160 ; "Du har simmat i s{kerhet." : Fw=0 : GOTO 800 2170 ; "Verktygen tynger ner dig. Du drunknar... " : GOTO 3330 2180 ! 2190 IF Pl(11)=-1 THEN Dk=1 : GOTO 2210 2200 ; "Du har tyv{rr inget ljus." : GOTO 900 2210 ; "Nu kan du se fram}t." : Dk=0 : GOTO 800 2220 ! 2230 ! 2240 ! --- LOCATION DESCRIPTIONS AND EXIT DATA ---- 2250 ! 2260 ; "Du har kommit fram till Tsarernas Gravkapell." 2270 N=0 : S=7 : \=2 : V=0 : GOTO 620 2280 ; "Du g}r in i Tsarernas Gravkapell." 2290 N=0 : S=8 : \=3 : V=0 : GOTO 620 2300 ; "Du st}r i Viskningarnas Sal. Det ekar - ekar - ek..." 2310 N=0 : S=9 : \=4 : V=2 : GOTO 620 2320 ; "Du {r i nedre delen av Viskningarnas Sal. Ssss..." 2330 N=0 : S=0 : \=5 : V=3 : GOTO 620 2340 ; "Du st}r framf|r en drickfont{n." 2350 N=0 : S=11 : \=6 : V=0 : GOTO 620 2360 ; "H{r finns sp}r av gamla rustningar och vapen." 2370 N=0 : S=0 : \=0 : V=5 : GOTO 620 2380 ; "H{r {r St Peters iskalla, tysta gravkammare." 2390 N=1 : S=13 : \=8 : V=0 : GOTO 620 2400 ; "Du vandrar in i en stor marmorsal, 40 x 54.3 meter." 2410 N=2 : S=14 : \=0 : V=0 : GOTO 620 2420 ; "Du {r i F{ngelset f|r Oskyldigt D|mda!" 2430 N=0 : S=15 : \=0 : V=0 : GOTO 620 2440 ; "Du {r i F{ngelset f|r Fullkomligt Oskyldigt D|mda." 2450 N=0 : S=0 : \=0 : V=9 : GOTO 620 2460 ; "Framf|r dig ligger nu dammh|ljda arkivsamlingar." 2470 N=5 : S=17 : \=11 : V=0 : GOTO 620 2480 ; "Du st}r nu framf|r en f|rseglad kammare med rostig d|rr." 2490 N=0 : S=0 : \=0 : V=11 : GOTO 620 2500 ; "Du stannar upp framf|r Sorgernas Altare." 2510 N=7 : S=19 : \=0 : V=0 : GOTO 620 2520 ; "Kristallklart mineralvatten bubblar fram ur marken." 2530 N=8 : S=20 : \=0 : V=13 : GOTO 620 2540 ; "Du vandrar genom De Or{ttvist D|mdas H}lor." 2550 N=0 : S=0 : \=16 : V=0 : GOTO 620 2560 ; "Det {r iskallt i De Or{ttvist D|mdas F{ngelse." 2570 N=10 : S=0 : \=0 : V=0 : GOTO 620 2580 ; "Du kommer in i ett tomt gammalt kanslirum. Dammigt." 2590 N=11 : S=23 : \=18 : V=16 : GOTO 620 2600 ; "Du vandrar utefter V|rdnadens Korridor." 2610 N=0 : S=24 : \=0 : V=17 : GOTO 620 2620 ; "Framf|r dig ligger en |versv{mmad korridor." 2630 N=13 : S=25 : \=0 : V=0 : GOTO 620 2640 ; "Rakt fram sv{nger Kardinalernas Katakomb." 2650 N=14 : S=26 : \=21 : V=19 : GOTO 620 2660 ; "Du ser en trappa ner fr}n Galleriet." 2670 N=15 : S=0 : \=22 : V=20 : GOTO 620 2680 ; "Du tr{der in i ett litet f|rrum." 2690 N=0 : S=28 : \=23 : V=21 : GOTO 620 2700 ; "Du st}r framf|r ing}ngen till Kryptorna i" 2710 ; "Klostret Zagorsk. Den ryska vinden viner." 2720 N=17 : S=29 : \=24 : V=22 : GOTO 620 2730 ; "Du vandrar utmed V|rdnadens Korridor." 2740 N=18 : S=30 : \=0 : V=23 : GOTO 620 2750 ; "Framf|r dig ligger en |versv{mmad passage." 2760 N=19 : S=0 : \=26 : V=0 : GOTO 620 2770 ; "Du ramlar in i en dyster kammare." 2780 N=20 : S=32 : \=0 : V=25 : GOTO 620 2790 ; "Fr}n detta Galleri kan du bara se" 2800 ; "tv} stentrappor..." 2810 N=21 : S=33 : \=0 : V=0 : GOTO 620 2820 ; "Du ser trappor som leder till ett Galleri" 2830 N=22 : S=0 : \=0 : V=27 : GOTO 620 2840 ; "Du kommer in i ett nerlagt gammalt klockrum." 2850 N=0 : S=35 : \=30 : V=28 : GOTO 620 2860 ; "En g}ng tillverkades klockrep i detta rum." 2870 N=0 : S=36 : \=0 : V=29 : GOTO 620 2880 ; "Ett tegelvalv kommer inom synh}ll." 2890 N=25 : S=0 : \=0 : V=0 : GOTO 620 2900 ; "H{r {r marken hal..." 2910 N=0 : S=0 : \=33 : V=31 : GOTO 620 2920 ! 2930 ! --- PERIL ROUTINE ---- 2940 ! 2950 ; "Ett d}ligt beslut. Du har hamnat i Martyrernas Kapell" 2960 ; "d{r skrikande SP\KEN genomborrar dig med gl|dande" 2970 ; "spikar som de en g}ng korsf{sts med...!!!" 2980 ! 2990 ! --- DROP OUT OF PROGRAM --- 3000 ! 3010 Z=FNPaus(4000) : GOTO 3330 3020 ! 3030 ; "Detta {r ljusbutiken." 3040 N=28 : S=0 : \=35 : V=0 : GOTO 620 3050 ; "H{r l}g den gamla repbutiken." 3060 N=29 : S=0 : \=36 : V=34 : GOTO 620 3070 ; "Du kommer in i den lilla Botg|ringscellen." 3080 N=0 : S=0 : \=0 : V=35 : GOTO 620 3090 ! 3100 ! --- PRINT CHALLENGE ---- 3110 ! 3120 ; "VE! Du drack giftigt vatten...!" : GOTO 900 3130 ; "Den mordlyste nazisten ANGRIPER!" : GOTO 900 3140 ; "Den har en st}ld|rr med en konstig springa." : GOTO 900 3150 ; "Vattnet {r f|r djupt f|r att man ska kunna vada igenom det." : GOTO 900 3160 ; "Det {r s} m|rkt s} du ser ingenting." : GOTO 900 3170 ! 3180 ! ---- SUCCESS ROUTINE ---- 3190 ; "Lycka till! Du har |ppnat kammaren." 3200 ; 3210 ; "Och Ikonens oskattbara sk|nhet bl{ndar dig!" 3220 ; "Nu g{ller det bara att s{kert hitta v{gen tillbaka" 3230 ; "till Kryptornas Ing}ng..." : GOTO 800 3240 ! 3250 ! ---- END ROUTINE --- 3260 ! 3270 ; "Du har n}tt slutet p} ett f|rs|k att finna" 3280 ; "St. Petersburgikonen. Vill du f|rs|ka igen"; 3290 INPUT I$ 3300 IF I$="J" OR I$="j" THEN 390 3310 END 3320 ! ---- END ROUTINE --- 3330 ; "Du har n}tt slutet p} detta f|rs|k att hitta" 3340 ; "St. Petersburgikonen. Fler f|rs|k"; 3350 INPUT I$ 3360 IF I$="J" OR I$="j" THEN 390 3370 END 3380 DEF FNPaus(L{ngd) 3390 FOR X=1 TO L{ngd 3400 NEXT X 3410 RETURN 0 3420 FNEND