home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 176-200 / apd198 / prodigal_son.amos / prodigal_son.amosSourceCode
AMOS Source Code  |  1991-04-16  |  22KB  |  742 lines

  1. ' Prodigal Son Adventure 
  2. ' Copyright 1991 John Filsak 
  3. '  
  4. Procedure CREDIT_OR_BLAME
  5.    ' Most of the ideas for this game came from the fertile minds
  6.    ' of a group of children who attended a half-term holiday club 
  7.    ' run by the United Reformed Church, Bulwell, Nottingham.  All 
  8.    ' I have done is write the code, and add a few little ideas of 
  9.    ' my own.  The game doesn't set out to be a brilliant commercial 
  10.    ' product, merely something to while away a pleasant hour or two.
  11.    '
  12.    ' The game has been fairly thoroughly play-tested, and I have  
  13.    ' tried to think of most things that people might attempt to do. 
  14.    ' Nevertheless, it is almost impossible to cover everything in 
  15.    ' a game of this kind.  If you come across a problem that is to
  16.    ' do with the coding of the game (and NOT your inability to solve
  17.    ' any of the puzzles), please get in touch, and we will probably 
  18.    ' be able to sort something out. 
  19.    '
  20.    ' Have fun!
  21.    '                                                     John Filsak
  22.    '                                                  88 Cantrell Rd
  23.    '                                                         Bulwell
  24.    '                                              Nottingham NG6 9HJ
  25.    '                                                   (0602) 763868
  26. End Proc
  27. '
  28. Break Off 
  29. Screen Open 0,320,176,4,LORES
  30. Palette $9AF,$FB8,$5 : Curs Off : Cls 0 : Paper 0
  31. Screen Open 1,400,64,2,Hires
  32. Palette $9AF,$5 : Curs Off 
  33. Screen Display 1,205,227,,
  34. Screen 0
  35. Wind Open 1,0,0,39,22,1
  36. Limit Mouse 112,50 To 442,300
  37. Title Top "Prodigal Son Adventure"
  38. Dim EX$(6),EX(6),WD$(19),W$(12),LOC$(20),WAY$(20),OB$(28),OB(28),M$(74)
  39. Global M$(),OB(),LOC,M,LOST,TAKEN
  40. Repeat 
  41.    Clw : Cdown : Centre "Prodigal Son Adventure" : Print 
  42.    Centre Pen$(1)+Chr$(169)+" 1991, John Filsak"+Pen$(2)
  43.    Repeat 
  44.       Locate 0,4
  45.       Input " What is your name? ";NAME$
  46.    Until NAME$<>""
  47.    NAME$=Upper$(Left$(NAME$,1))+Lower$(Mid$(NAME$,2))
  48.    Print : W["Please wait, "+NAME$+" ..."]
  49.    Curs Off : INITIALISE : INIT_M
  50.    Clw : WORDS : Print 
  51.    W["Welcome to the Prodigal Son Adventure."]
  52.    Print : W["This game is based on a story told by Jesus."]
  53.    Print : W["You, "+NAME$+", are the Prodigal Son."]
  54.    W["A knowledge of the original story may be helpful (or not!)."]
  55.    Print : W[Pen$(1)+"HAPPY ADVENTURING!"+Pen$(2)]
  56.    Print : Print " Click mouse."
  57.    Repeat : Until Mouse Click
  58.    Clw 
  59.    MAIN_LOOP
  60.    Print Pen$(1)
  61.    If WON=1
  62.       W[M$(64)+NAME$+M$(53)]
  63.    Else 
  64.       W[M$(54)+NAME$+M$(63)]
  65.    End If 
  66.    Print Pen$(2) : Print " Play again? (Y/N)"
  67.    CHOOSE["YN"] : Print Mid$("YN",Param,1)
  68. Until Param=2
  69. '
  70. Procedure BUY
  71.    Shared MONEY,TIE,DRINK
  72.    If MONEY>0
  73.       If LOC=6 and OB(14)=LOST
  74.          OB(14)=TAKEN
  75.          MONEY
  76.       Else 
  77.          If LOC=10
  78.             W[M$(15)]
  79.             DRINK=1
  80.             MONEY
  81.          Else 
  82.             If LOC=19
  83.                W[M$(22)]
  84.                MONEY
  85.                TIE=1
  86.             Else 
  87.                W[M$(3)]
  88.             End If 
  89.          End If 
  90.       End If 
  91.    Else 
  92.       W[M$(13)]
  93.    End If 
  94. End Proc
  95. Procedure CHOOSE[A$]
  96.    Clear Key : Curs On 
  97.    Print " Type your answer: ";
  98.    Repeat 
  99.       I$=Upper$(Inkey$)
  100.    Until Instr(A$,I$)
  101.    Curs Off 
  102. End Proc[Instr(A$,I$)]
  103. Procedure DCRYPT[A$]
  104.    For A=1 To Len(A$)
  105.       B$=Mid$(A$,A,1)
  106.       B$=Chr$(Asc(B$)-7)
  107.       C$=C$+B$
  108.    Next 
  109.    C$=Flip$(C$)
  110. End Proc[C$]
  111. Procedure DRVE
  112.    Shared DRIVING,MENDED,WILD
  113.    If DRIVING>0
  114.       W[M$(56)]
  115.    Else 
  116.       If OB(4)=LOC
  117.          If MENDED=1
  118.             DRIVING=2
  119.          Else 
  120.             DRIVING=1
  121.          End If 
  122.          W[M$(5)]
  123.          OB(4)=26
  124.          If LOC=5 and WILD=1
  125.             W[M$(74)]
  126.          End If 
  127.       Else 
  128.          W[M$(11)]
  129.       End If 
  130.    End If 
  131. End Proc
  132. Procedure EAT
  133.    Shared SICK,GAME_OVER,WON
  134.    If LOC=20
  135.       W[M$(23)]
  136.       MONEY
  137.    Else 
  138.       If LOC=11
  139.          W[M$(40)]
  140.          Inc SICK
  141.          If SICK=1
  142.             OB(18)=TAKEN
  143.             W[M$(58)]
  144.             M$(66)=M$(67)
  145.          End If 
  146.          If SICK>1
  147.             W[M$(41)]
  148.             GAME_OVER=1
  149.          End If 
  150.       Else 
  151.          If LOC=1
  152.             W[M$(51)]
  153.             GAME_OVER=1
  154.             WON=1
  155.          Else 
  156.             W[M$(11)]
  157.          End If 
  158.       End If 
  159.    End If 
  160. End Proc
  161. Procedure EXAMINE
  162.    Shared OB$(),L,EX(),EX$()
  163.    For A=4 To 27
  164.       If(OB(A)=LOC or(OB(A)=L and(A=27 or A=26)) or OB(A)=TAKEN or OB(A)=26) and(A<>5 and A<>8 and A<>12 and A<>23 and A<>24 and A<>22 and A<>15 and A<>13)
  165.          Inc B : EX(B)=A
  166.          A$=A$+Mid$(Str$(B),2)
  167.       End If 
  168.    Next 
  169.    If B=0
  170.       W[M$(71)]
  171.    Else 
  172.       W[M$(70)]
  173.       For A=1 To B
  174.          EX$(A)=Mid$(OB$(EX(A)),Instr(OB$(EX(A))," "))+"."
  175.          W[Str$(A)+" The"+EX$(A)]
  176.       Next 
  177.       CHOOSE[A$]
  178.       Print Param
  179.       If EX(Param)=25
  180.          W[M$(55)]
  181.       Else 
  182.          If EX(Param)=4
  183.             W[M$(72)]
  184.          Else 
  185.             If EX(Param)=18 and LOC=11
  186.                W[M$(24)]
  187.                OB(18)=LOST
  188.                OB(23)=TAKEN
  189.                OB(15)=LOST
  190.                OB(1)=2
  191.             Else 
  192.                If EX(Param)=18 and LOC<>11
  193.                   W[M$(42)]
  194.                   OB(18)=LOST
  195.                Else 
  196.                   If EX(Param)=10
  197.                      W[M$(14)]
  198.                   Else 
  199.                      If EX(Param)=16
  200.                         W[M$(17)]
  201.                      Else 
  202.                         If EX(Param)=21
  203.                            W[M$(73)]
  204.                         Else 
  205.                            If EX(Param)=17
  206.                               W[M$(25)+Mid$(OB$(7),Instr(OB$(7)," "))+EX$(Param)]
  207.                            Else 
  208.                               W[M$(25)+EX$(Param)]
  209.                            End If 
  210.                         End If 
  211.                      End If 
  212.                   End If 
  213.                End If 
  214.             End If 
  215.          End If 
  216.       End If 
  217.    End If 
  218. End Proc
  219. Procedure GAMBLE
  220.    Shared MONEY,WILD,Z
  221.    If MONEY>0 and LOC=15
  222.       W[M$(21)]
  223.       MONEY : MONEY
  224.       WILD=1 : Inc Z
  225.       Print : W[M$(57)]
  226.       If Z=1
  227.          W[M$(61)]
  228.       Else 
  229.          W[M$(62)]
  230.       End If 
  231.    Else 
  232.       If MONEY<1 and LOC=15
  233.          W[M$(13)]
  234.       Else 
  235.          W[M$(11)]
  236.       End If 
  237.    End If 
  238. End Proc
  239. Procedure GIVE
  240.    Shared MONEY,DRINK
  241.    If DRINK=1 and LOC=10 and OB(16)<>TAKEN
  242.       W[M$(16)]
  243.       OB(16)=TAKEN
  244.       OB(8)=LOST
  245.    Else 
  246.       W[M$(11)]
  247.    End If 
  248. End Proc
  249. Procedure GOT
  250.    Shared OB$()
  251.    Print 
  252.    For A=0 To 27
  253.       If OB(A)=TAKEN
  254.          W["You have "+Lower$(OB$(A))+"."]
  255.       End If 
  256.    Next 
  257. End Proc
  258. Procedure GT_OUT
  259.    Shared DRIVING
  260.    If DRIVING>0
  261.       OB(4)=LOC
  262.       W[M$(9)]
  263.       DRIVING=0
  264.    Else 
  265.       W[M$(11)]
  266.    End If 
  267. End Proc
  268. Procedure INITIALISE
  269.    Shared J$,OB$(),LOC$(),WAY$(),GAME_OVER,SICK,WON,DRIVING,WILD,MONEY
  270.    Shared TIE,DRINK,MENDED,Z,GRILLE,JOB,WLD,LOCKED,LEFT
  271.    LOC=2 : TAKEN=35 : LOST=37 : GAME_OVER=0 : WLD=0 : WILD=0 : SICK=0 : JOB=0
  272.    DRIVING=0 : MONEY=0 : TIE=0 : DRINK=0 : MENDED=0 : Z=0 : GRILLE=0
  273.    LEFT=0 : LOCKED=0
  274.    For A=1 To 20
  275.       Read A$,B$
  276.       DCRYPT[A$] : LOC$(A)=Param$
  277.       DCRYPT[B$] : WAY$(A)=Param$
  278.    Next 
  279.    For A=1 To 28
  280.       Read A$,OB(A)
  281.       DCRYPT[A$] : OB$(A)=Param$
  282.    Next 
  283.    Read A$ : DCRYPT[A$] : J$=Param$
  284.    For A=0 To 74
  285.       Read A$
  286.       DCRYPT[A$] : M$(A)=Param$
  287.    Next 
  288.    Data "tvvy'nupupk'y|v�'up","L","ltvo'{h","LZ","khvy'ulwv'lo{'uv","L^"
  289.    Data "�yhku|vi'shuvp{huyl{up'uh'{h","LZ^","zzluylksp~'lo{'up","^","ljpmmV'{yvwzzhW'lo{'up","L"
  290.    Data "{lly{Z'onpO'lo{'up","^ZU","tvvy~voz'yhj'klz|'h'up","L","ltvo'tvym'yhm'3{lly{z'upht'h'up","^ZLU"
  291.    Data "i|w'h'up","^","�{znpw'lo{'up","Z","ljpmmv'z.{ulnh'l{h{zl'uh'up","U"
  292.    Data "{lly{z'lkpz'h'up","LZ","ltvo'tvym'yhm'3{lly{z'upht'h'up","^LZU"
  293.    Data "vupzhj'h'up","Z^","tyhm'h'{h","LU","luhs'�y{u|vj'h'up","^L","tvvy'ryhk'3lnuhy{z'h'up","U^"
  294.    Data "t|pyvwtl'nupo{vsj'h'up","U","{uhy|h{zly'lo{'up","U","ylo{hm'y|v`",37
  295.    Data "uvzylw'zlshz'H",8,"yltyhm'lo[",16,"hkvrZ'H",2,"kyh|n'ylkyvi'H",4
  296.    Data "znpw'�ssltz'mv'kylo'H",11,"lupojht'nupkul}'H",18,"wthy{'nuprvvs4�{zypo{'H",10
  297.    Data "wv{z'z|i'H",3,"kuhi'ylii|y'H",3,"kllk'�{ylwvyw'y|v`",2,"�luvt'mv'z{vS",37
  298.    Data "�luvt'ltvZ",37,"{yvwzzhw'H",37,"�luvt'vU",35,"ylwhw'mv'ljlpw'H",37
  299.    Data "ulrv{'H",20,"hlkp'uH",37,"�lr'H",37,"{lrjp{'z|i'H",37
  300.    Data "kvvm'npw'mv'{lrj|i'H",11,"{yhlo'y|v�'up'ljhlw'kuh'�vq'kuh'3l}vs'z.ylo{hm'y|v`",37
  301.    Data "lkpyw'vu'kuh'zkulpym'vu'3�luvt'vU",43,"z|i'H",37,"ljp{vu'H",13
  302.    Data "kyhj'zzhw'jp{zhsw'H",37,"zl{vuruhi'unplyvm'mv'kh~'H",37
  303.    Data "ksvolz|vo'kuh'�spthm'y|v�'mv'�uhwtvj'{hlyn'H",1,"IVQHZZPN"
  304.    Data "(�h~'{ho{'vn'{.uhj'|v`","5kuhttvj'{ho{'kuh{zylku|'{.uvk'P'3�yyvz't.P"
  305.    Data "5{yvwzuhy{'kllu'ss.|v`''5khvy'nupkup~'kuh'nuvs'h'z.{P","(lylo'{uh~'|v�'nupo{vu'zp'lylo["
  306.    Data "5{ultvt'lo{'{h'lylo'nupo{�uh'sslz'v{'{uh~'{.uvk'|v`","5yhj'y|v�'up'~vu'lyh'|v`''5RV"
  307.    Data "5yhj'y|v�'up'lyh'|v`","(yhj'h'up'�h~'{ho{'vn'{.uhj'|v`","(ryv~'{.uzlvk'yhj'lo["
  308.    Data "5lsjpol}'lo{'mv'{|v'lyh'|v`''5RV","5yhj'lo{'klkult'l}ho'|v`''({uhpsspyI"
  309.    Data "({ho{'vk'{.uhj'|v`","(|v�'{ls'{.uv~'loZ","(�luvt'�uh'{vn'{.ul}ho'|v`"
  310.    Data "5[YHW'HKVRZ'LUP\ULN'Az�hz'{P","5ozrupyk'mv'oz{vs'�|i'|v`"
  311.    Data "5ylwhw'mv'ljlpw'h'|v�'zl}pn'kuh'rupyk'lo{'yvm'|v�'zruho{'lO"
  312.    Data "(IVQHZZPN'Az�hz'{P","(�lr'h'|v�'zl}pn'kuh'yhj'y|v�'zlrh{'loZ"
  313.    Data "5�luvt'ltvz'|v�'zl}pn'kuh'kllk'y|v�'zlrh{'{ulnh'lo["
  314.    Data "5lylo'up'ltvj'v{'�luvt'on|vul'{vn'{.ul}ho'|v�'{|i'3�yyvz't.P"
  315.    Data "5zwhoylw'3ltp{'{lu'rj|s'yl{{lI''5kupru|'zp'lu|{yvm'mv'sllo~'lo["
  316.    Data "5lp{'klkk|{z4kuvthpk'o{p~'3zlo{vsj'~lu'l}pzulwl'y|v�'up'svvj'�yl}'sllm'|v`"
  317.    Data "5z|vpjpslk'z.{P''5kvvm'yljpu'kl{zh{'yl}lu'l}ho'|v`"
  318.    Data "50|v�'l}ho'ss.lo'mp/'{uh}ylz'z.ylo{hm'y|v�'zh'ivq'h'nup{{ln'kuh'ltvo'nupvn'mmv'yl{{li'li'ks|v~'|v�'rupo{'kuh'zzlt'{onpy'h'up'ly.|v�'{ho{'lzpshly'|v`"
  319.    Data "�yhupkyv'uh'{z|q'z.{P","5lp{'h'{|vo{p~'lylo{'up'kl~vssh'{vu'ly.|v`"
  320.    Data "50�ssh|{ul}l/'zltvj'z|i'H","({lrjp{'h'{vn'{.ul}ho'|v`"
  321.    Data "5�h~'z{p'uv'zlvn'z|i'lo[","5z|i'lo{'uv'{ln'|v`","5zulwwho'nupo{vU"
  322.    Data "555'nup{ph^","Fz|i'lo{'{|vih'vk'v{'nupvn'|v�'lyh'{ho^"
  323.    Data "(yhj'y|v�'up'ly.|v`","5ltvo'{h'mmv'|v�'zwvyk'{P"
  324.    Data "5{lrjp{'z|i'h'zlj|kvyw'�ssh|{ul}l'kuh'zkupyn'kuh'zyypo~'lupojht'lo["
  325.    Data "5�h~'y|v�'zyhi'lsspyn'H","5ulwv'�spzpvu'zl{hyn'lsspyn'H","5klrjvs'zp'yvvk'lo["
  326.    Data "5rjpz'�s{ulsvp}'lyh'|v`''5{p'zl{zh{'{|i'3lsipyyvo'zrvvs'�suv'{vu'{P"
  327.    Data "5yhli'uhj'tl{z�z'klulrhl~'y|v�'uho{'lyvt'z.{P''5{ho{'luvk'l}ho'{.uks|voz'|v`"
  328.    Data "(zh~'{p'{ho~'ylitltly'{.uhj'|v`","5ulwv'�ssh|khyn'zrhlyj'yvvk'lo["
  329.    Data "Azivq'llyo{'mv'ljpvoj'lo{'|v�'zylmmv'loZ","Bznpw'lo{'nupkllM'8'"
  330.    Data "Bz~vj'lo{'nuprspT'9'","5ivq'lo{'{vn'l}.|v`''5RV"
  331.    Data "5ryv~'yvm'{pmu|'|v�'zlrht'kuh'z{y|o'{p'lylo~'|v�'zrjpr'~vj'h'3�sl{hu|{yvmu\"
  332.    Data "5y|vuvo'y|v�'up'�{yhw'h'�vqul'kuh'ltvJ''5{yhlo'�t'up'kuh'ltvo'�t'up'ljhsw'klnlsp}pyw'h'l}ho'z�h~sh'ss.|v`''(uvz'�t'ly.|v`''Fivq'H'Az�hz'lO"
  333.    Data "5z{mpn'kuh'l}vs'o{p~'|v�'nupyl~voz'3|v�'zltvjsl~'lO"
  334.    Data "(uphnh'ltvo'ly.|v�'lz|hjli'3kl{zh{'yl}l'l}.|v�'kvvm'{zli'lo{'zp'zpo[''5zkuhs'unplyvm'up'z{uhy|h{zly'�juhm'{lnyvM"
  335.    Data "5{l|xuhi'h'{h'y|vuvo'mv'{zl|n'lo{'lyh'|v`","5ly|{ul}kh'lo{'klozpupm'l}ho'|v`''5"
  336.    Data "'3ltp{'zpo{'klklljj|z'{vu'l}ho'|v`","5ZZHW'[YLZUP'Az�hz'{P","(nupvk'lyh'|v`"
  337.    Data "5yhl'y|v�'up'zylwzpo~'ylpw|vyj'lo[","5on|vo{'3hlkp'uh'|v�'zl}pn'{P"
  338.    Data "5zljulmmv'�julyy|j'yvm'|v�'z{zlyyh'kyh|n'lo[","(lylo'yhj'y|v�'kllu'ss.|v`"
  339.    Data "(ZZLUYLKSP^'LO['ON\VYO['ZZHW'Az�hz'lO","(`LUVT'`UU\M'MV'LYH^LI'Az�hz'lO"
  340.    Data "5uphnh'�y{'lzhlsW''5","'3luvk'ssl^","5{lrjp{'z|i'y|v�'{hl'znpw'lo{'3�sl{hu|{yvmu\"
  341.    Data "5�ynu|o'lyh'|v`","5�ynu|o'sllm'ssp{z'|v`","5ylo'nup�yyhT':'"
  342.    Data "(lthn'zpo{'mv'{upvw'lo{'{vu'zp'{ho{'{|I''5yl{mh'yl}l'�spwwho'l}ps'kuh'klpyyht'{ln'|v`"
  343.    Data "Flupthl'v{'{uh~'|v�'vk'{ho^","5lylo'lsihupthl'nupo{vu'zp'lylo[","(rjly~'h'mv'{pi'h'z.{P"
  344.    Data "5on|vul'�ynu|o'ly.|v�'mp'lsipkl'li'{z|q'{onpt'{p'{|i'3s|m~h'zrvvs'{P"
  345.    Data "5uphnh'�y{'kuh'{zvw'ylkyvi'lo{'v{'rjhi'vn'~vU"
  346. End Proc
  347. Procedure INIT_M
  348.    Shared W$()
  349.    For A=1 To 12
  350.       Read A$
  351.       If A$<>""
  352.          DCRYPT[A$] : W$(A)=Param$
  353.       End If 
  354.    Next 
  355.    Data "ZL","ZL^","Z","ZLU","^LU","Z^","LU","ZL","ZU^","","U","U"
  356. End Proc
  357. Procedure INSERT
  358.    Shared DRIVING,MENDED,GRILLE
  359.    If OB(10)=TAKEN and(DRIVING=1 or OB(4)=LOC)
  360.       OB(10)=LOST
  361.       If DRIVING=1 : DRIVING=2 : End If 
  362.       W[M$(10)]
  363.       MENDED=1
  364.    Else 
  365.       If LOC=18 and OB(17)=TAKEN
  366.          OB(17)=LOST
  367.          W[M$(36)]
  368.          OB(20)=LOC
  369.       Else 
  370.          If LOC=13 and OB(26)=TAKEN
  371.             GRILLE=1
  372.             W[M$(38)]
  373.             OB(26)=LOST
  374.          Else 
  375.             W[M$(11)]
  376.          End If 
  377.       End If 
  378.    End If 
  379. End Proc
  380. Procedure JOB
  381.    Shared JOB,GAME_OVER,WAY$()
  382.    If LOC=16 and OB(16)=TAKEN
  383.       W[M$(44)]
  384.       W[M$(45)]
  385.       W[M$(46)]
  386.       W[M$(68)]
  387.       W["Which will you choose?"]
  388.       CHOOSE["123"]
  389.       Print Mid$("123",Param,1) : Print 
  390.       W[M$(47)] : Print : Wait 40
  391.       If Param=1
  392.          JOB=1
  393.          OB(3)=LOST
  394.       End If 
  395.       If Param=2
  396.          W[M$(48)]
  397.          GAME_OVER=1
  398.       End If 
  399.       If Param=3
  400.          W[M$(69)]
  401.          GAME_OVER=1
  402.       End If 
  403.    Else 
  404.       If LOC=2 and MONEY<1 and OB(16)=TAKEN and OB(23)=LOST
  405.          W[M$(49)]
  406.          WAY$(2)="WSE"
  407.          OB(22)=TAKEN
  408.          OB(16)=LOST
  409.       Else 
  410.          W[M$(31)]
  411.       End If 
  412.    End If 
  413. End Proc
  414. Procedure MAIN_LOOP
  415.    Shared DRIVING,GAME_OVER,LOC$(),OB$()
  416.    Repeat 
  417.       Print : W["You are "+LOC$(LOC)+"."]
  418.       If DRIVING>0 Then W[M$(6)]
  419.       If LOC=1
  420.          W[M$(52)]
  421.          OB(1)=1
  422.       End If 
  423.       For A=0 To 28
  424.          If OB(A)=LOC
  425.             W[OB$(A)+" is here."]
  426.          End If 
  427.       Next 
  428.       If LOC=2 and OB(23)=TAKEN
  429.          W[M$(50)]
  430.          OB(23)=LOST
  431.       End If 
  432.       If LOC=11 and OB(20)=TAKEN
  433.          W[M$(65)]
  434.          OB(20)=LOST
  435.       End If 
  436.       GOT
  437.       If LOC=11 and OB(23)<>TAKEN
  438.          W[M$(66)]
  439.       End If 
  440.       Print 
  441.       MAKE_MOVE
  442.       If OB(27)=TAKEN
  443.          Print : W["You are "+LOC$(4)+"."]
  444.          W[M$(59)]
  445.          GAME_OVER=1
  446.       End If 
  447.    Until GAME_OVER
  448. End Proc
  449. Procedure MAKE_MOVE
  450.    Shared J$,WD$(),BUS,M$,WLD
  451.    Repeat 
  452.       Print " Pick a word."
  453.       Screen 1
  454.       B=0
  455.       Repeat 
  456.          A=Mouse Zone
  457.          If A<20
  458.             If A<>B
  459.                If B<>0
  460.                   If B<6
  461.                      Y=3 : X=B-1
  462.                   End If 
  463.                   If B>=6 and B<11
  464.                      Y=4 : X=B-6
  465.                   End If 
  466.                   If B>=11 and B<16
  467.                      Y=5 : X=B-11
  468.                   End If 
  469.                   If B>=16
  470.                      Y=6 : X=B-16
  471.                   End If 
  472.                   Print At(X*9+1,Y);WD$(B)
  473.                End If 
  474.                Inverse On 
  475.                If A<>0
  476.                   If A<6
  477.                      Y=3 : X=A-1
  478.                   End If 
  479.                   If A>=6 and A<11
  480.                      Y=4 : X=A-6
  481.                   End If 
  482.                   If A>=11
  483.                      Y=5 : X=A-11
  484.                   End If 
  485.                   If A>=16
  486.                      Y=6 : X=A-16
  487.                   End If 
  488.                   Print At(X*9+1,Y);WD$(A)
  489.                End If 
  490.                Inverse Off 
  491.                B=A
  492.             End If 
  493.          End If 
  494.       Until Mouse Click
  495.       M=Mouse Zone
  496.       Print At(X*9+1,Y);WD$(M)
  497.       Screen 0
  498.       If M>0 : Clw : Cdown : End If 
  499.       If M=2 : M$="E" : End If 
  500.       If M=1 : M$="N" : End If 
  501.       If M=4 : M$="W" : End If 
  502.       If M=3 : M$="S" : End If 
  503.       If M=19
  504.          Print : Clear Key : Curs On 
  505.          Input " Enter the secret word: ";M$
  506.          M$=Upper$(M$) : Curs Off 
  507.          If M$<>J$
  508.             W["That's not it!"]
  509.             Print : M=0
  510.          End If 
  511.       End If 
  512.       If BUS=1 and M<>14 : W[M$(33)] : End If 
  513.    Until M>0 and(BUS=0 or M=14)
  514.    If M<>19 : W[WD$(M)-" "+":"] : End If 
  515.    If WLD=1
  516.       On M Proc MMOVE,MMOVE,MMOVE,MMOVE,QUIT,NOGO,DRVE,NOGO,EXAMINE,NOGO,NOGO,NOGO,NOGO,NOGO,NOGO,TAKE,WAAIT,NOGO,JOB
  517.    Else 
  518.       On M Proc NEWROOM,NEWROOM,NEWROOM,NEWROOM,QUIT,BUY,DRVE,EAT,EXAMINE,GAMBLE,GIVE,INSERT,GT_OUT,RIDE,SELL,TAKE,WAAIT,UNLOCK,JOB
  519.    End If 
  520. End Proc
  521. Procedure MMOVE
  522.    Shared M$,W$(),L,WILD,WLD
  523.    GO=Instr(W$(L),Left$(M$,1))
  524.    If GO=0
  525.       W[M$(0)]
  526.    Else 
  527.       L=L+3*(M=1)-3*(M=3)+(M=4)-(M=2)
  528.       If L=3 and OB(26)<>TAKEN : OB(26)=L : End If 
  529.       If L=12 and OB(27)<>TAKEN : OB(27)=L : End If 
  530.       If OB(26)=TAKEN or OB(27)=TAKEN
  531.          W$(7)="NES"
  532.       End If 
  533.       If L=10 : WILD=0 : LOC=4 : WLD=0 : End If 
  534.    End If 
  535. End Proc
  536. Procedure MONEY
  537.    Shared MONEY
  538.    Dec MONEY
  539.    If MONEY<3
  540.       OB(12)=LOST
  541.       OB(13)=TAKEN
  542.    End If 
  543.    If MONEY<1
  544.       OB(13)=LOST
  545.       OB(15)=TAKEN
  546.    End If 
  547. End Proc
  548. Procedure NEWROOM
  549.    Shared WLD,WILD,LOCKED,GAME_OVER,GRILLE,TIE,DRIVING,M$,WAY$(),LEFT,MONEY,JOB
  550.    GO=Instr(WAY$(LOC),M$)
  551.    If LOC=4 and M=4 Then LEFT=2
  552.    If LOC=2 and M=2 Then LEFT=1
  553.    If GO=0
  554.       W[M$(0)]
  555.    Else 
  556.       If DRIVING=1
  557.          W[M$(8)]
  558.       Else 
  559.          If(LOC=3 and M=2 and DRIVING<2 and LEFT=1) or(LOC=3 and M=4 and LEFT=2 and DRIVING<2)
  560.             W[M$(2)]
  561.          Else 
  562.             If(LOC=4 and OB(14)=LOST and(M=2 or M=3)) or(LOC=16 and M=1 and JOB=0)
  563.                W[M$(12)]
  564.             Else 
  565.                If LOC=14 and M=2 and TIE=0
  566.                   W[M$(26)]
  567.                Else 
  568.                   If LOC=13 and M=3 and GRILLE=0
  569.                      W[M$(37)]
  570.                   Else 
  571.                      If LOC=18 and M=4 and LOCKED=0
  572.                         W[M$(39)]
  573.                      Else 
  574.                         A=LOC
  575.                         LOC=LOC+5*(M=1)-5*(M=3)+(M=4)-(M=2)
  576.                      End If 
  577.                      If DRIVING=2 and(LOC=1 or LOC=6 or LOC=12 or LOC=10 or LOC=15 or LOC=18 or LOC=19)
  578.                         W[M$(7)]
  579.                         LOC=A
  580.                      End If 
  581.                      If LOC=20 and M=3 and MONEY<1
  582.                         W[M$(20)]
  583.                         LOC=A
  584.                      End If 
  585.                      If LOC=5 and WILD=1
  586.                         WLD=1
  587.                         WILD
  588.                      End If 
  589.                   End If 
  590.                End If 
  591.             End If 
  592.          End If 
  593.       End If 
  594.    End If 
  595. End Proc
  596. Procedure NOGO
  597.    W[M$(11)-"!"+" here!"]
  598. End Proc
  599. Procedure QUIT
  600.    Shared GAME_OVER
  601.    Print " Are you sure?  (Y/N) "
  602.    CHOOSE["YN"]
  603.    Print Mid$("YN",Param,1)
  604.    If Param=1 Then GAME_OVER=1
  605.    Print 
  606. End Proc
  607. Procedure RIDE
  608.    Shared BUS,DRIVING,SICK
  609.    If LOC=3 and OB(20)=TAKEN and DRIVING=0 and BUS=1
  610.       W[M$(30)]
  611.       Wait 100
  612.       W[M$(35)]
  613.       OB(20)=LOST
  614.       LOC=2
  615.       If SICK>0
  616.          OB(1)=2
  617.       End If 
  618.    Else 
  619.       If LOC=3 and DRIVING=2 and BUS=1
  620.          W[M$(34)]
  621.          W[M$(29)]
  622.       Else 
  623.          If LOC=3 and BUS=1 and OB(20)<>TAKEN
  624.             W[M$(28)]
  625.             W[M$(29)]
  626.          Else 
  627.             W[M$(11)]
  628.          End If 
  629.       End If 
  630.    End If 
  631.    BUS=0
  632.    OB(24)=LOST
  633. End Proc
  634. Procedure SELL
  635.    Shared MONEY,DRIVING
  636.    If LOC=12 and OB(11)=TAKEN
  637.       OB(11)=LOST
  638.       OB(12)=TAKEN
  639.       OB(15)=LOST
  640.       MONEY=6
  641.       W[M$(19)]
  642.    Else 
  643.       If LOC=8 and MONEY<1 and(OB(4)=LOC or OB(4)=26)
  644.          W[M$(18)]
  645.          OB(19)=TAKEN
  646.          OB(4)=LOST
  647.          OB(2)=LOST
  648.          DRIVING=0
  649.       Else 
  650.          W[M$(4)]
  651.       End If 
  652.    End If 
  653. End Proc
  654. Procedure TAKE
  655.    Shared L
  656.    For A=10 To 27
  657.       If(OB(A)=LOC and A<>21 and A<>24 and A<>25) or(OB(A)=L and A<>21)
  658.          OB(A)=TAKEN
  659.          GOT=1
  660.       End If 
  661.    Next 
  662.    If GOT<>1
  663.       W[M$(11)]
  664.    End If 
  665. End Proc
  666. Procedure UNLOCK
  667.    Shared LOCKED
  668.    If LOC=18 and OB(19)=TAKEN
  669.       OB(19)=LOST
  670.       W[M$(43)]
  671.       LOCKED=1
  672.    Else 
  673.       W[M$(11)]
  674.    End If 
  675. End Proc
  676. Procedure W[A$]
  677.    X=Free : W=34
  678.    While Len(A$)>W
  679.       V=W+1
  680.       While Instr(A$," ",V)>V or Instr(A$," ",V)=0
  681.          Dec V
  682.       Wend 
  683.       B$=Left$(A$,V-1) : A$=Mid$(A$,V+1)
  684.       Print " ";B$
  685.    Wend 
  686.    Print " ";A$
  687. End Proc
  688. Procedure WAAIT
  689.    Shared BUS
  690.    Wait 35
  691.    W[M$(32)]
  692.    Wait 250
  693.    If LOC=3
  694.       W[M$(27)]
  695.       OB(24)=LOC
  696.       BUS=1
  697.    Else 
  698.       W[M$(31)]
  699.    End If 
  700. End Proc
  701. Procedure WILD
  702.    Shared DRIVING,WILD,LOC$(),L,OB$(),WLD,GAME_OVER
  703.    If DRIVING<2
  704.       W[M$(60)]
  705.       WLD=0
  706.    Else 
  707.       L=11
  708.       Repeat 
  709.          Print : W["You are "+LOC$(5)+"."]
  710.          For A=26 To 27
  711.             If OB(A)=L
  712.                W[OB$(A)+" is here."]
  713.             End If 
  714.          Next 
  715.          GOT
  716.          Print 
  717.          MAKE_MOVE
  718.          If GAME_OVER=1 : WILD=0 : End If 
  719.       Until WILD=0
  720.    End If 
  721. End Proc
  722. Procedure WORDS
  723.    Shared WD$()
  724.    Screen 1 : Cls 
  725.    Print : Print "   Click mouse on one of these instructions:"
  726.    Reserve Zone 19
  727.    C=3
  728.    For A=1 To 19
  729.       If A=6 or A=11 or A=16
  730.          Inc C : B=0
  731.       End If 
  732.       Read WD$(A)
  733.       Print At(B*9+1,C);Zone$(WD$(A),A)
  734.       Inc B
  735.    Next 
  736.    Box 0,2 To 375,62
  737.    Screen 0
  738.    Data "  North  ","  East   ","  South  ","  West   ","  Quit   "
  739.    Data "   Buy   ","  Drive  ","   Eat   "," Examine "," Gamble  "
  740.    Data "  Give   "," Insert  ","   Out   ","  Ride   ","  Sell   "
  741.    Data "  Take   ","  Wait   "," Unlock  ","    ?    "
  742. End Proc