KEY OFF: SCREEN 1: COLOR 0, 1: CLS '******* VISA STARTBILD ********** DEF SEG = &HB800: BLOAD "alcatraz.pic", 0: DEF SEG FOR X = 110 TO 122: LINE (98, 59)-(X, 103): NEXT 'str†lkastare DO FOR X = 110 TO 186 LINE (98, 59)-(X, 103), 0: LINE (98, 59)-(X + 13, 103) WHILE T! = TIMER: WEND: T! = TIMER IF INKEY$ <> "" THEN EX = -1: EXIT FOR NEXT IF EX THEN EXIT DO FOR X = 186 TO 110 STEP -1 LINE (98, 59)-(X + 13, 103), 0: LINE (98, 59)-(X, 103) WHILE T! = TIMER: WEND: T! = TIMER IF INKEY$ <> "" THEN EX = -1: EXIT FOR NEXT IF EX THEN EXIT DO LOOP ' *********** INTROTEXT **************** SCREEN 0: WIDTH 80: COLOR 6: CLS PRINT TAB(14); " FLYKTEN FR¸N ALCATRAZ": PRINT PRINT TAB(14); "Oskyldigt d”mda sitter du och din kompis Arne insp„rrade" PRINT TAB(14); "i Alcatraz. Nu g„ller det att ta sig ut...": PRINT PRINT TAB(14); "Se till att CAPS LOCK „r p†, s† att du skriver alla" PRINT TAB(14); "kommandon med stora bokst„ver. F”r det mesta skall du" PRINT TAB(14); "skriva tv† ord, t ex TA PALLEN. Ibland r„cker det med" PRINT TAB(14); "ett ord, medan det vid andra tillf„llen kr„vs en l„ngre" PRINT TAB(14); "mening. Du f†r pr”va dig fram tills n†got h„nder. (Prog-" PRINT TAB(14); "rammet kommenterar f”r det mesta inte felaktiga kommandon.)" PRINT : GOSUB help: PRINT PRINT TAB(14); "Alla ord kan f”rkortas till fyra bokst„ver, men i ”vrigt" PRINT TAB(14); "skall du skriva meningar p† riktig svenska.": PRINT PRINT TAB(24); "Tryck ENTER f”r att b”rja." WHILE INKEY$ <> CHR$(13): WEND '********** INLˇSNING AV PLATSER, SAKER OCH VERB ****** ASR = 23: AV = 18: AP = 13 'antal saker, verb, platser R = 1: TID = -10 'startrum, nedr„kning av sovtid f”r vakt PUNKT$ = CHR$(29) + CHR$(29) + "." 'backa och s„tt punkt DIM S0$(ASR + 1), S$(ASR + 1), SP(ASR + 1), V$(AV), P$(AP), VS(AP, 4), BESK(AP) FOR I = 1 TO AP: READ P$(I), VS(I, 1), VS(I, 2), VS(I, 3), VS(I, 4): NEXT FOR I = 1 TO ASR: READ S0$(I), S$(I), SP(I): NEXT FOR I = 1 TO AV: READ V$(I): NEXT CLS slingan: '****************** SLINGAN ****************** ' ======= DU ˇR... ======= PRINT : PRINT "Du „r "; P$(R); "." IF BESK(R) = 0 THEN BESK(R) = 1 'platsbeskrivning bara 1:a g†ngen ON R GOSUB r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12, r13 END IF PRINT "Du kan g† "; : K = 0 FOR I = 1 TO 4 IF VS(R, I) > 0 THEN PRINT S0$(I); ", "; : K = 1 NEXT IF K = 0 THEN PRINT "ingenstans." ELSE PRINT PUNKT$ IF (SP(20) < 5 AND R <> 5) OR SP(20) = 6 OR SP(20) > 7 THEN SP(20) = R 'Arne f”ljer PRINT "Du ser "; : K = 0 FOR I = 5 TO ASR IF SP(I) = R THEN PRINT S0$(I); ", "; : K = 1 NEXT IF K = 0 THEN PRINT "ingenting s„rskilt." ELSE PRINT PUNKT$ slingan2: ' ======== VAKTEN ======== IF TID < 0 THEN TID = TID + 1 'vakten indisponerad ELSE IF SP(21) = -1 THEN SP(21) = 3: SP(22) = -1: IF R = 3 THEN PRINT "Vakten vaknar." ELSEIF SP(21) = 2 THEN SP(21) = 3 'vakten g†r tillbaka till vaktrummet ELSEIF SP(21) = 1 AND VS(1, 4) > 0 THEN PRINT "Vakten g†r ut ur cellen och l†ser d”rren efter sig." VS(1, 4) = 0: VS(2, 2) = 0: SP(21) = 2 END IF IF SP(21) = R AND R <> 1 THEN PRINT "Vakten griper dig och l†ser in dig p† ett betydligt s„krare st„lle." GOTO gameover END IF END IF slingan3: ' == VAD VILL DU G™RA ? == NR = NR + 1 'r„kna kommandon IF NR > 50 AND SP(21) <> 3 THEN PRINT "N„r vakten p† din avdelning inte p† utsatt tid ringer till centralvakten" PRINT "f”r att avge rapport, uppst†r viss nervositet. B„st att kolla, tycker de..." GOSUB alarm: GOTO gameover END IF PRINT USING "##"; NR; : INPUT ". Vad vill du g”ra"; A$ IF A$ = "N" OR A$ = "™" OR A$ = "V" OR A$ = "S" THEN A$ = "G¸ " + A$ A$ = A$ + " ": Y = 0 FOR X = 1 TO AV 's”k verbet IF INSTR(A$, V$(X)) = 1 THEN EXIT FOR NEXT IF X > AV THEN GOTO slingan2 'verbet ej funnet FOR Y = 1 TO ASR 's”k substantivet/v„derstrecket IF INSTR(A$, S$(Y)) > 2 AND (Y < 5 OR SP(Y) = 0 OR SP(Y) = R) THEN EXIT FOR NEXT IF R = 10 AND X <> 16 THEN PRINT "Tyv„rr drunknar du. Pr”va att simma n„sta g†ng!": GOTO gameover END IF IF X = 18 THEN SYSTEM GO = 1 ' ***************** VERBEN ******************* SELECT CASE X CASE 1 ' ========== G¸ ========== IF Y > 4 THEN GO = 2 ELSEIF VS(R, Y) = 0 THEN PRINT "Du kan inte g† †t det h†llet.": GO = 2 ELSE R = VS(R, Y) IF R = 8 AND (SP(11) = 0 OR SP(12) = 0 OR SP(13) = 0 OR SP(14) = 0 OR SP(15) = 0) THEN SP(20) = 8: PRINT "Du drar upp Arne med hj„lp av lakanet." END IF END IF CASE 2 ' ========== TA ========== IF (Y = 5 OR Y = 6 OR Y = 7 OR (Y > 10 AND Y < 19) OR Y = 17 OR Y = 18) AND SP(Y) = R THEN SP(Y) = 0: PRINT "O.K. Du har tagit "; S0$(Y); "." IF Y = 15 AND R = 8 THEN VS(8, 2) = 11 ELSEIF Y = 8 OR Y = 10 OR (Y > 19 AND Y < 24) THEN PRINT "Sk„mtare d„r!": GO = 2 ELSE GO = 2 END IF CASE 3 ' ========= SLˇPPA ======= IF SP(Y) = 0 THEN SP(Y) = R ELSE GO = 2 CASE 4 ' ========= ANVˇNDA ====== IF R = 1 AND Y = 5 AND SP(5) = 0 AND VS(1, 4) = 0 THEN VS(1, 4) = 2: VS(2, 2) = 1 PRINT "Det var inte l„tt, men nu „r l†set uppdyrkat." ELSEIF R = 4 AND Y = 5 AND SP(5) = 0 AND VS(4, 4) = 0 THEN PRINT "Oturligt nog klarar inte dyrken det h„r l†set.": GO = 2 ELSE GO = 2 END IF CASE 5 ' ========== ˇTA ========= IF Y = 17 THEN PRINT "MMM... Men vad nu? I t†rtan finns en dyrk!": SP(5) = R: SP(17) = -1: SP(18) = R ELSEIF Y = 18 THEN PRINT "Du „ter upp resten av t†rtan. Raap!": SP(18) = -1 ELSEIF Y < 17 THEN PRINT "Lite sv†rsm„lt?": GO = 2 ELSEIF Y = 20 OR Y = 21 THEN PRINT "ˇven kannibaler kokar sin mat f”rst!": GO = 2 ELSE GO = 2 END IF CASE 6 ' ======== INVENTERA ===== PRINT "Du har "; : K = 0 FOR I = 5 TO ASR IF SP(I) = 0 THEN PRINT S0$(I); ", "; : K = 1 NEXT IF K = 0 THEN PRINT "ingenting med dig." ELSE PRINT PUNKT$ GO = 2 CASE 7 ' ======= SE SIG OM ====== BESK(R) = 0 CASE 8 ' ======= UNDERS™KA ====== IF Y = 8 AND SP(7) = -1 THEN SP(7) = R PRINT "I skrivbordsl†dan hittar du en nyckelknippa. Reservnycklar, st†r det" PRINT "p† en vidh„ngande lapp. Nycklarna g†r uppenbarligen till cellerna." ELSEIF Y = 11 OR Y = 12 THEN PRINT "Lakanen „r tv† till antalet, ca 2 meter l†nga och av starkt bomullstyg.": GO = 2 ELSEIF Y = 13 OR Y = 14 THEN PRINT "Lakanen „r tv† till antalet och hopknutna till 4 meters l„ngd.": GO = 2 ELSEIF Y = 15 THEN PRINT "Lakanen „r fyra till antalet och hopknutna till 8 meters l„ngd.": GO = 2 ELSEIF Y = 16 THEN PRINT "Luckan saknar l†s.": GO = 2 ELSEIF Y = 17 OR Y = 18 THEN PRINT "T†rtan „r en gr„ddt†rta garnerad med jordgubbar och ser mycket god ut.": GO = 2 ELSEIF Y = 22 THEN TID = 0 PRINT "Du har uppenbarligen inga talanger som ficktjuv, och vakten" PRINT "vaknar av din behandling." END IF CASE 9 ' ========= HJˇLP ======== GOSUB help: PRINT : GO = 3 CASE 10 ' ========= KASTA ======== IF (Y = 17 OR Y = 18) AND SP(Y) = 0 AND (SP(21) = R OR SP(22) = R) AND INSTR(A$, "P¸ VAKT") > 0 THEN PRINT "Vilken fulltr„ff! Vakten f”rs”ker febrilt f† bort gr„dden ur ”gonen." TID = -2: SP(Y) = -1: SP(22) = -1: SP(21) = R ELSEIF Y = 6 AND SP(6) = 0 AND (SP(21) = R OR SP(22) = R) AND INSTR(A$, "P¸ VAKT") > 0 THEN PRINT "Vakten blir arg n„r du kastar pallen p† honom..." GO = 4 END IF IF SP(Y) = 0 THEN SP(Y) = R CASE 11 ' ========= TRYCKA ======= IF R = 3 AND Y = 9 THEN PRINT "Smart att trycka p† larmknappen! B„ttre lycka n„sta g†ng!" GOSUB alarm: GO = 4 ELSEIF R = 1 AND Y = 19 AND (SP(21) = 3 OR SP(22) = 3) AND VS(1, 4) = 2 THEN PRINT "Du ringer p† vakten. N„r vakten uppt„cker att d”rren „r uppl†st" PRINT "springer han tillbaka och utl”ser larmet." GOSUB alarm: GO = 4 ELSEIF R = 1 AND Y = 19 AND (SP(21) = 3 OR SP(22) = 3) THEN PRINT "Du ringer p† vakten, och strax d„rp† skramlar det i l†set. Vakten" PRINT "kommer in. - G† p† muggen nu igen! Var t†rtan inte bra?" TID = 0: SP(21) = 1: SP(22) = -1: VS(1, 4) = 2: VS(2, 2) = 1: GO = 3 END IF CASE 12 ' ========= VˇNTA ======== PRINT "Du s„tter dig ner och l†ter n†gra minuter g†.": GO = 2 CASE 13 ' ======== ™PPNA ========= IF Y = 16 THEN PRINT "Du rycker upp luckan.": VS(13, 2) = 8: SP(16) = -1: SP(23) = 13 ELSEIF ((R = 1 OR R = 2) AND VS(1, 4) = 0) OR ((R = 4 OR R = 5) AND VS(4, 4) = 0) THEN PRINT "Celld”rren „r l†st!": GO = 2 ELSE GO = 2 END IF CASE 14 ' ========= L¸SA ========= IF SP(7) <> 0 THEN PRINT "Du har ingen nyckel!": GO = 2 ELSEIF INSTR(A$, "UPP") = 0 THEN IF (R = 1 OR R = 2) AND VS(1, 4) = 2 THEN VS(1, 4) = 0: VS(2, 2) = 0: PRINT "Du l†ser celld”rren." IF (R = 4 OR R = 5) AND VS(5, 2) = 4 THEN VS(5, 2) = 0: VS(4, 4) = 0: PRINT "Du l†ser celld”rren." ELSE IF (R = 1 OR R = 2) AND VS(1, 4) = 0 THEN VS(1, 4) = 2: VS(2, 2) = 1: PRINT "Du l†ser upp celld”rren." IF (R = 4 OR R = 5) AND VS(5, 2) = 0 THEN VS(5, 2) = 4: VS(4, 4) = 5: PRINT "Du l†ser upp celld”rren." ELSE GO = 2 END IF CASE 15 ' ========= KNYTA ======== IF (INSTR(A$, "IHOP") > 0 OR INSTR(A$, "SAMM") > 0) AND Y > 10 AND Y < 15 THEN IF Y = 11 THEN SP(11) = -1: SP(13) = 0: PRINT "Du knyter ihop Arnes lakan." ELSEIF Y = 12 THEN SP(12) = -1: SP(14) = 0: PRINT "Du knyter ihop dina lakan." ELSEIF SP(13) = 0 AND SP(14) = 0 THEN SP(13) = -1: SP(14) = -1: SP(15) = 0: PRINT "Du knyter ihop alla lakan." END IF ELSEIF R = 8 AND Y > 10 AND Y < 16 AND INSTR(A$, "R™R") > 0 THEN SP(Y) = R: PRINT "Lakanet „r nu ordentligt fastknutet vid r”ret och n†r " IF Y = 15 THEN PRINT "n„stan „nda ner till marken.": VS(8, 2) = 9 ELSEIF Y < 13 THEN PRINT "en liten bit nerf”r muren." ELSEIF Y < 15 THEN PRINT "halvv„gs ner till marken." END IF ELSE GO = 2 END IF CASE 16 ' ========= SIMMA ======== IF R <> 10 THEN PRINT "Du tr„nar torrsimm en stund.": GO = 2 ELSE PRINT "Det h„r var lite l„ngre „n n„r du tog j„rnm„rket." PRINT "Hur som helst lyckas du och Arne ta er iland p† r„tt sida sj”n." PRINT : PRINT TAB(21); "*** GRATULERAR, NI KLARADE FLYKTEN ***" GO = 5 END IF CASE 17 ' ===== STˇLLA SIG P¸ ==== IF INSTR(A$, " P¸ ") > 0 AND (Y = 6 OR Y = 8 OR Y = 20) THEN PRINT "O.K. Du st†r nu p† "; S0$(Y); "." IF Y = 20 THEN PRINT "(Efter diverse gymnastiska ”vningar.)" IF R = 7 THEN R = 13 END IF END IF IF R <> 13 THEN GO = 2 CASE ELSE END SELECT ON GO GOTO slingan, slingan2, slingan3, gameover, gameover2 ' ************ PLATSBESKRIVNINGAR ************ r1: PRINT "Din cell „r mycket sparsamt m”blerad. Ovanf”r ett bord vid den" PRINT "”stra v„ggen sitter ett litet gallert„ckt f”nster. St„ller du" PRINT "dig p† pallen och tittar ut har du en fin havsutsikt." PRINT "En brits „r f„st med g†ngj„rn i den norra v„ggen. Bredvid d”rren" PRINT "sitter en ringklocka f”r att kalla p† vakten. Det „r allt." IF SP(17) <> 1 THEN RETURN PRINT "Ja visst ja, det „r din f”delsedag idag. N†gon har haft v„nlig-" PRINT "heten att skicka dig en t†rta. F„ngelseledningen har haft den" PRINT "„nnu st”rre v„nligheten att l†ta dig f† t†rtan." RETURN r2: PRINT "Din cell ligger i ”stra „nden av den h„r korridoren." PRINT "Det var ett tag sedan den kostades p† n†got underh†ll," PRINT "och putsen flagar fr†n v„ggarna. V„stra „nden ”ppnar sig" PRINT "mot vaktrummet, "; IF SP(22) = 3 THEN PRINT "varifr†n man h”r ljudliga snarkningar." ELSE PRINT PUNKT$ RETURN r3: PRINT "Fr†n vaktrummet g†r det korridorer i alla v„derstreck." PRINT "Mitt i rummet st†r ett skrivbord. P† bordet finns f”rutom" PRINT "kaffefl„ckar och spelkort en telefon och en larmknapp." PRINT "P† v„ggen bredvid kaffeautomaten sitter ett portr„tt" PRINT "f”rest„llande presidenten. "; IF SP(22) = 3 THEN PRINT "Vid bordet sitter en sovande vakt." ELSE PRINT RETURN r4: PRINT "Korridoren avslutas i norr med en bastant st†ld”rr." PRINT "I s”der ser man in i vaktrummet." RETURN r5: IF SP(20) = 5 THEN SP(20) = 4 PRINT "Arne sitter p† sin brits. Han tittar upp n„r d”rren ”ppnas." PRINT "Gissa om han ser f”rv†nad ut n„r han ser vem som ”ppnade!" PRINT "Arne springer ut i korridoren." END IF RETURN r6: PRINT "Korridoren slutar i v„ster vid en trappa som leder ned till andra" PRINT "avdelningar av f„ngelset. Ovanf”r trappan sitter en TV-kamera." RETURN r7: PRINT "Den h„r korridoren „r lik de andra bortsett fr†n att det p†" PRINT "den ”stra v„ggen, uppe vid taket, sitter en lucka." RETURN r8: PRINT "Takavsatsen sluttar svagt mot ”ster. Bortsett fr†n" PRINT "ett uppstickande r”r, antagligen fr†n ett expansionsk„rl," PRINT "finns h„r ingenting. Du tittar ned fr†n takkanten och" PRINT "bed”mer avst†ndet till marken till ca 8 meter. Klipporna" PRINT "d„r nere ser spetsiga och farliga ut." RETURN r9: IF SP(20) = 7 THEN PRINT "Du gl”mde Arne!": RETURN gameover PRINT "Mellan den m„ktiga muren och vattnet finns bara en smal" PRINT "sv†rframkomlig klippa. V†gorna sl†r upp ”ver era f”tter." RETURN r10: PRINT "Ni vadar ut i det kalla vattnet och dras ut med en v†g." RETURN r11: RETURN gameover r12: PRINT "Det „r strax ocks† den utryckande vaktstyrkan!" GOSUB alarm: RETURN gameover r13: RETURN gameover: ' ************** GAME OVER ********** PRINT PRINT TAB(34); " GAME OVER" gameover2: PRINT PRINT TAB(34); "TRYCK ENTER" WHILE INKEY$ <> CHR$(13): WEND: SYSTEM alarm: FOR I = 1 TO 5 FOR J = 0 TO 25: PLAY "mbmlt255l64o2fc": NEXT J T! = TIMER: WHILE TIMER - T! < .5: WEND NEXT I RETURN help: PRINT TAB(14); "Du kan anv„nda f”ljande verb:" PRINT TAB(14); "G¸ (N osv eller bara N osv), TA, SLˇPPA, ANVˇNDA," PRINT TAB(14); "ˇTA, KASTA P¸, TRYCKA, L¸SA /UPP, ™PPNA, KNYTA IHOP/VID," PRINT TAB(14); "UNDERS™KA, SIMMA, STˇLLA SIG P¸, VˇNTA, INVENTERA," PRINT TAB(14); "SE (sig omkring), HJˇLP (se denna lista), SLUTA (spelet)." RETURN ' ************** DATA ************** ' ==== PLATSER (RUM) ===== DATA i cellen,0,0,0,0 DATA i den ”stra korridoren,0,0,0,3 DATA i vaktrummet,4,2,7,6 DATA i den norra korridoren utanf”r Arnes cell,0,0,3,0 DATA i Arnes cell,0,0,0,0 DATA i den v„stra korridoren,0,3,0,12 DATA i den s”dra korridoren,3,0,0,0 DATA ute p† en takavsats,0,11,0,7 DATA nere p† klipporna,0,10,0,0 DATA i sj”n,0,0,0,0 DATA ihj„lslagen nere bland klipporna,0,0,0,0 DATA i trappan,0,0,0,0 DATA uppe vid luckan,3,0,0,0 ' === VˇDERSTRECK, SAKER & PERSONER === DATA N," N ",99,™," ™ ",99,S," S ",99,V," V ",99 DATA dyrken,DYRK,-1 DATA pallen,PALL,1,nyckelknippan,NYCK,-1 DATA skrivbordet,SKRI,3,larmknappen,LARM,3 DATA britsen,BRIT,1,Arnes lakan,LAKA,5 DATA dina lakan,LAKA,1,Arnes hopknutna lakan,LAKA,-1 DATA dina hopknutna lakan,LAKA,-1,fyra hopknutna lakan,LAKA,-1 DATA luckan,LUCK,13,f”delsedagst†rtan,T¸RT,1 DATA den delvis upp„tna t†rtan,T¸RT,-1,ringklockan,RING,1 DATA Arne,"ARNE",5,vakten,VAKT,-1 DATA den sovande vakten,VAKT,3,”ppningen,xyz,-1 ' ========= VERB ======== DATA "G¸ ","TA ",SLˇP,ANVˇ,ˇTA DATA INVE,"SE ",UNDE,HJˇL,KAST DATA TRYC,VˇNT,™PPN,L¸S,KNYT DATA SIMM,STˇL,SLUT