home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / games / easy_treasure.amos / easy_treasure.amosSourceCode
AMOS Source Code  |  1992-06-04  |  15KB  |  533 lines

  1. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  2. '
  3. '                             AMOS Treasure Search 
  4. '
  5. '                                By P.J.Hickman  
  6. '
  7. '                       The First AMOS P.D. Game.........  
  8. '
  9. ' ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  10. Default 
  11. Global TWOPERSONS,PERSON1$,PERSON2$
  12. Global NAME$
  13. Global DISTANCE,GOLDX,GOLDY,XGUESS,YGUESS
  14. Global SIZE,STGRIDX,FINISHGRIDY
  15. Global PREV_PIC
  16. Global THEYDONTWANTANOTHERGO
  17. Global HINTS,HARD,LIMIT
  18. Curs Off : Flash Off : Hide On : Screen Close 0
  19. Led Off 
  20. Dir$="Apd2:"
  21. INITIALISE
  22. Gr Writing 0
  23. Rem -------------------------------------------------------------------- 
  24. Rem                      GLOBAL VARIABLE DECLARATION 
  25. Rem -------------------------------------------------------------------- 
  26. Repeat 
  27.    TWOPERSONS=0
  28.    HINTS=0
  29.    HARD=0
  30.    THEYDONTWANTANOTHERGO=0
  31.    LIMIT=1000
  32.    DISTANCE=0
  33.    PREV_PIC=0
  34.    GOLDX=0
  35.    GOLDY=0
  36.    XGUESS=0
  37.    YGUESS=0
  38.    SIZE=14
  39.    STGRIDX=168
  40.    STGRIDY=30
  41.    FINISHGRIDX=STGRIDX+(SIZE*9)
  42.    FINISHGRIDY=STGRIDY+(SIZE*9)
  43.    PERSON1$="Shipmate"
  44.    PERSON2$=PERSON1$
  45.    NAME$=PERSON1$
  46.    Rem -------------------------------------------------------------------- 
  47.    Rem                           MAIN PROGRAM 
  48.    Rem -------------------------------------------------------------------- 
  49.    NTRO
  50.    NAMES
  51.    GAME_TYPE
  52.    If Rnd(1)=1 Then PICCYON_UP[2] Else PICCYON_DOWN[2] : Wait Vbl 
  53.    T0_POOL[2]
  54.    PERSON=1
  55.    PICK_TREASURE_LOCATION
  56.    Repeat 
  57.       If PERSON=1 Then NAME$=PERSON1$ Else NAME$=PERSON2$
  58.       GUESS
  59.       CALCULATE_DISTANCE_FROM_TREASURE
  60.       MARK_MOVE
  61.       If(Rnd(1)=0 and DISTANCE>0) or(PREV_PIC=4 and DISTANCE>0)
  62.          GIVE_FUNNY_PICTURE
  63.       Else 
  64.          If DISTANCE>0
  65.             PREV_PIC=4
  66.             Load "Raw_Samples/No_Treasure.Abk"
  67.             Sam Raw 15,Start(6),23458,8000
  68.             Wait 160
  69.             Erase 6
  70.          End If 
  71.       End If 
  72.       If(HINTS and DISTANCE>0) Then GIVE_HELP
  73.       If TWOPERSONS=-1 and PERSON=1 Then PERSON=2 Else PERSON=1
  74.       If HARD=-1 Then LIMIT=LIMIT-1
  75.    Until DISTANCE=0 or LIMIT=0
  76.    If LIMIT>=0 and DISTANCE=0 Then FOUND_TREASURE Else MUTINY
  77.    ANOTHER_GO
  78.    Screen Close 6
  79. Until THEYDONTWANTANOTHERGO=False
  80. End 
  81. Rem -------------------------------------------------------------------
  82. Rem                      INITIAL LOADING SEQUENCE
  83. Rem -------------------------------------------------------------------
  84. Procedure INITIALISE
  85.    Rem ---------- LOAD PICTURE AND DISPLAY IT ----------
  86.    Load Iff "Pictures/MAINSCR2.IFF",1
  87. Screen Hide 1
  88.    If Rnd(1)=1 Then PICCYON_UP[1] Else PICCYON_DOWN[1]
  89.    Rem ---------- LOAD SAMPLES AND OTHER BITS ----------
  90.    Load Iff "Pictures/MAINSCR3.iff",2
  91. Screen Hide 2
  92.    Rem ---------- OPEN "POOL" SCREEN ---------- 
  93.    Screen Open 0,320,200,16,Lowres : Curs Off : Flash Off 
  94.    Rem ---------- COPY SCREEN 2 TO SCREEN 1 AND REUSE SCREEN 2 ---------- 
  95.    Screen Copy 2,0,0,320,200 To 1,0,0
  96.    T0_POOL[1]
  97.    Screen Close 2
  98.    Load Iff "Pictures/Scrolls.iff",2
  99. Screen Hide 2
  100.    Load "Sprites/Feet.abk"
  101.    T0_POOL[1]
  102.    Music Off 
  103. End Proc
  104. Rem -------------------------------------------------------------------  
  105. Procedure NTRO
  106.    T0_POOL[1]
  107.    Pen 15 : Paper 6
  108.    Ink 15
  109.    Text 5,68,"How many people"
  110.    Text 6,78,"will help me find"
  111.    Text 5,88,"my lost treasure?"
  112.    Text 24,105,"Press 1 or 2"
  113.    Repeat 
  114.       KEY
  115.       SCAN
  116.       SCANPRESS=Param
  117.    Until SCANPRESS=1 or SCANPRESS=2
  118.    Bell 
  119.    If SCANPRESS=1 Then TWOPERSONS=0 Else TWOPERSONS=-1
  120. End Proc
  121. Rem -------------------------------------------------------------------
  122. Procedure WHERE_IS_TREASURE
  123.    CLEAN_TOP_SCROLL
  124.    CLEAN_BOTTOM_SCROLL
  125.    Screen 0
  126.    Pen 1 : Paper 5 : Ink 1
  127.    TEMP=Text Length(NAME$)
  128.    Text(135-TEMP)/2,24,NAME$
  129.    Text 25,42,"Where is"
  130.    Text 35,56,"the lost"
  131.    Text 30,70,"treasure"
  132.    Text 32,84,"hidden?"
  133.    Text 38,126,"I think"
  134.    Text 34,138,"the lost"
  135.    Text 30,150,"treasure"
  136.    Text 26,162,"is hidden"
  137.    Text 34,174,"at"
  138.    Text 55,174,"("
  139.    Text 74,174,","
  140.    Text 90,174,")"
  141. End Proc
  142. Rem -------------------------------------------------------------------
  143. Procedure ALREADY_SEARCHED
  144.    CLEAN_TOP_SCROLL
  145.    CLEAN_BOTTOM_SCROLL
  146.    Ink 1
  147.    TEMP=Text Length(NAME$)
  148.    Text(135-TEMP)/2,20,NAME$
  149.    Text 24,36,"This place"
  150.    Text 51,50,"has"
  151.    Text 36,64,"already"
  152.    Text 48,78,"been"
  153.    Text 27,92,"searched!!"
  154.    PRESS_ANY_KEY
  155. End Proc
  156. Rem -------------------------------------------------------------------
  157. Procedure CALCULATE_DISTANCE_FROM_TREASURE
  158.    TEMPX=GOLDX-XGUESS
  159.    TEMPY=GOLDY-YGUESS
  160.    If TEMPX<0
  161.       TEMPX=Abs(TEMPX)
  162.    End If 
  163.    If TEMPY<0
  164.       TEMPY=Abs(TEMPY)
  165.    End If 
  166.    If TEMPX>TEMPY Then DISTANCE=TEMPX Else DISTANCE=TEMPY
  167. End Proc
  168. Rem -------------------------------------------------------------------
  169. Procedure MARK_MOVE
  170.    TEMPX=STGRIDX+(SIZE*XGUESS)
  171.    TEMPY=FINISHGRIDY-(SIZE*YGUESS)
  172.    If XGUESS>0 or YGUESS>0
  173.       Load "Raw_Samples/Feet_Sample.Abk",6
  174.    End If 
  175.    If XGUESS>0 Then WALKX[TEMPX,TEMPY]
  176.    If YGUESS>0 Then WALKY[TEMPX,TEMPY]
  177.    Bob Off : Wait Vbl 
  178.    If DISTANCE>4 Then Ink 11 Else If DISTANCE>0 Then Ink 16-DISTANCE Else Ink 15
  179.    Bar TEMPX-3,TEMPY-4 To TEMPX+5,TEMPY+4
  180.    Ink 1
  181.    Box TEMPX-3,TEMPY-4 To TEMPX+5,TEMPY+4
  182.    Erase 6
  183. End Proc
  184. Rem -------------------------------------------------------------------
  185. Procedure GIVE_HELP
  186.    CLEAN_TOP_SCROLL
  187.    CLEAN_BOTTOM_SCROLL
  188.    Ink 1
  189.    TEMP=Text Length(NAME$)
  190.    Text(135-TEMP)/2,16,NAME$
  191.    Text 34,30,"You are"
  192.    Text 55,42,Str$(DISTANCE)
  193.    If DISTANCE=1
  194.       Text 22,54,"Kilometre"
  195.    Else 
  196.       Text 19,54,"Kilometres"
  197.    End If 
  198.    Text 21,66,"away from"
  199.    Text 53,78,"the"
  200.    Text 32,90,"treasure"
  201.    PRESS_ANY_KEY
  202. End Proc
  203. Rem -------------------------------------------------------------------
  204. Procedure GIVE_FUNNY_PICTURE
  205.    CLEAN_TOP_SCROLL
  206.    CLEAN_BOTTOM_SCROLL
  207.    Repeat 
  208.       TEMP=Rnd(3)+1
  209.    Until TEMP<>PREV_PIC
  210.    PREV_PIC=TEMP
  211.    TEMP2=Rnd(1)
  212.    If TEMP=1 Then Load Iff "Pictures/LION.IFF",6
  213.    If TEMP=2 Then Load Iff "Pictures/POT.IFF",6
  214.    If TEMP=3 Then Load Iff "Pictures/UNDERWATER.IFF",6
  215.    If TEMP=4 Then Load Iff "Pictures/Cave.Iff",6
  216.    If TEMP2=1
  217.       PICCYON_UP[6]
  218.    Else 
  219.       PICCYON_DOWN[6]
  220.    End If 
  221.    If TEMP=3
  222.       Load "Raw_Samples/Blub.Abk"
  223.    Else 
  224.       Load "Raw_Samples/No_Treasure.Abk"
  225.    End If 
  226.    Flash 9,"(000,40)(CCC,22)"
  227.    Timer=0
  228.    Repeat 
  229.       If Timer mod 500=0
  230.          If TEMP=3
  231.             Sam Raw 15,Start(6),16600,4000
  232.             Wait 200
  233.          Else 
  234.             Sam Raw 15,Start(6),23458,8000
  235.             Wait 160
  236.          End If 
  237.       End If 
  238.    Until Inkey$<>""
  239.    Flash Off 
  240.    If Rnd(1) Then PICCYON_UP[0] Else PICCYON_DOWN[0]
  241.    Screen Close 6
  242.    Erase 6
  243. End Proc
  244. Rem -------------------------------------------------------------------
  245. Procedure MUTINY
  246.    Load Iff "Pictures/MUTINY.IFF",6
  247.    Load "Raw_Samples/Splash.Abk"
  248.    Load "Raw_Samples/Walk_The_Plank.Abk",7
  249.    If Rnd(1)=1 Then PICCYON_UP[6] Else PICCYON_DOWN[6]
  250.    Sam Raw 15,Start(7),13900,6500
  251.    Wait 130
  252.    Sam Raw 15,Start(6),12000,5500
  253.    Wait 130
  254.    Erase 6 : Erase 7
  255. End Proc
  256. Rem -------------------------------------------------------------------
  257. Procedure GUESS
  258.    Repeat 
  259.       WHERE_IS_TREASURE
  260.       Repeat 
  261.          Pen 9
  262.          Print At(8,21);"_";
  263.          Pen 8
  264.          Repeat 
  265.             Repeat 
  266.                KEY
  267.             Until Param$<>" "
  268.             XGUESS=Asc(Param$)-48
  269.          Until XGUESS>=0 and XGUESS<=9
  270.          Pen 1
  271.          Print At(8,21);Right$(Param$,1);
  272.          Bell 
  273.          Pen 9
  274.          Print At(10,21);"_";
  275.          Pen 8
  276.          Repeat 
  277.             Repeat 
  278.                KEY
  279.             Until Param$<>" "
  280.             YGUESS=Asc(Param$)-48
  281.             SCAN
  282.             SCANPRESS=Param
  283.          Until(YGUESS>=0 and YGUESS<=9) or SCANPRESS=65
  284.          Pen 1
  285.          If SCANPRESS=65
  286.             Print At(10,21);" ";
  287.          Else 
  288.             Print At(10,21);Right$(Str$(YGUESS),1);
  289.             Pen 8
  290.             Bell 
  291.          End If 
  292.       Until SCANPRESS<>65
  293.       TEMP=Point(STGRIDX+(SIZE*XGUESS),FINISHGRIDY-(SIZE*YGUESS))
  294.       If TEMP>5 Then ALREADY_SEARCHED
  295.    Until TEMP<6
  296. End Proc
  297. Rem -------------------------------------------------------------------
  298. Procedure FOUND_TREASURE
  299.    Load Iff "Pictures/GETGOLD.IFF",6
  300.    Screen 6
  301.    For Y=250 To 50 Step -5
  302.       Screen Display 6,,Y,,200
  303. Wait Vbl 
  304.    Next 
  305.    T0_POOL[6]
  306.    Load "Raw_Samples/Well_Done.Abk"
  307.    Load "Raw_Samples/Squark.Abk",7
  308.    Pen 15 : Paper 10
  309.    Flash 9,"(000,40)(CCC,22)"
  310.    Ink 15
  311.    TEMP=Text Length(NAME$)
  312.    Text(135-TEMP)/2,54,NAME$
  313.    Text 5,63,"You"
  314.    Text 40,63,"have"
  315.    Text 83,63,"found"
  316.    Text 15,71,"my treasure!"
  317.    Timer=0
  318.    Repeat 
  319.       If Timer mod 600=0
  320.          Sam Raw 15,Start(6),30266,8000
  321.          Wait 185
  322.          Sam Raw 15,Start(7),9000,6400
  323.          Wait 65
  324.       End If 
  325.    Until Inkey$<>""
  326.    Erase 6
  327.    Erase 7
  328.    Flash Off 
  329. End Proc
  330. Rem -------------------------------------------------------------------
  331. Procedure WALKX[TEMPX,TEMPY]
  332.    For LOP=STGRIDX To(TEMPX-14) Step 14
  333.       Bob 2,LOP,FINISHGRIDY-10,3 : Wait Vbl 
  334.       Sam Raw 1,Start(6),3900,9000
  335.       Wait 15
  336.       Bob 3,LOP+6,FINISHGRIDY+2,4 : Wait Vbl 
  337.       Sam Raw 8,Start(6),3900,9000
  338.       Wait 15
  339.    Next LOP
  340.    Bob Off 1
  341.    Bob Off 2
  342. End Proc
  343. Rem -------------------------------------------------------------------
  344. Procedure WALKY[TEMPX,TEMPY]
  345.    For LOP=FINISHGRIDY To TEMPY Step -14
  346.       Bob 2,TEMPX-11,LOP,1 : Wait Vbl 
  347.       Sam Raw 1,Start(6),3900,9000
  348.       Wait 15
  349.       Bob 3,TEMPX+2,LOP-6,2 : Wait Vbl 
  350.       Sam Raw 8,Start(6),3900,9000
  351.       Wait 15
  352.    Next LOP
  353.    Bob Off 1
  354.    Bob Off 2
  355. End Proc
  356. Rem -------------------------------------------------------------------
  357. Procedure ANOTHER_GO
  358.    If Rnd(1)=1 Then PICCYON_UP[1] Else PICCYON_DOWN[1]
  359.    T0_POOL[1]
  360.    Pen 15 : Paper 6 : Ink 15
  361.    Text 14,65,"Would you like"
  362.    Text 32,75,"another go?"
  363.    Text 21,98,"Press Y or N"
  364.    YES_NO
  365.    THEYDONTWANTANOTHERGO=Param
  366. End Proc
  367. Rem -------------------------------------------------------------------
  368. Procedure NAMES
  369.    T0_POOL[1]
  370.    Pen 15 : Paper 6
  371.    If TWOPERSONS=-1
  372.       Locate 1,7
  373.       Text 27,65,"First Player"
  374.       Text 8,75,"Enter your name"
  375.    Else 
  376.       Text 3,65,"Please enter your"
  377.       Text 59,75,"name"
  378.    End If 
  379.    CUSTOM_INPUT[10,4,11,15,15]
  380.    PERSON1$=Param$
  381.    If TWOPERSONS=-1
  382.       Cls 6,3,55 To 156,111
  383.       Text 20,65,"Second Player"
  384.       Text 10,75,"Enter your name"
  385.       CUSTOM_INPUT[10,4,11,15,15]
  386.       PERSON2$=Param$
  387.    End If 
  388. End Proc
  389. Rem -------------------------------------------------------------------
  390. Procedure GAME_TYPE
  391.    T0_POOL[1]
  392.    Pen 15 : Paper 6
  393.    Cls 6,3,55 To 156,111
  394.    Text 14,65,"Would you like"
  395.    Text 31,75,"some hints?"
  396.    Text 21,98,"Press Y or N"
  397.    YES_NO
  398.    HINTS=Param
  399.    T0_POOL[1]
  400.    Cls 6,3,55 To 156,111
  401.    Text 14,65,"Would you like"
  402.    Text 20,75,"a hard game?"
  403.    Text 21,98,"Press Y or N"
  404.    YES_NO
  405.    HARD=Param
  406.    If HARD=-1
  407.       T0_POOL[1]
  408.       LIMIT=Rnd(8)+4
  409.       Cls 6,3,55 To 156,111
  410.       Text 32,65,"You have "+Right$(Str$(LIMIT),Len(Str$(LIMIT))-1)
  411.       Text 20,75,"moves to find"
  412.       Text 28,85,"my treasure"
  413.       Text 10,105,"Press Any Key"
  414.       Wait Key 
  415.    End If 
  416. End Proc
  417. Rem -------------------------------------------------------------------
  418. Procedure PRESS_ANY_KEY
  419.    CLEAN_BOTTOM_SCROLL
  420.    Ink 7
  421.    Text 23,134,"Press any"
  422.    Text 54,150,"key"
  423.    Text 30,166,"shipmate"
  424.    Ink 1
  425.    Flash 7,"(000,40)(EC0,22)"
  426.    Wait Key 
  427.    Bell 
  428.    CLEAN_BOTTOM_SCROLL
  429.    Flash Off 
  430.    Get Palette 2
  431. End Proc
  432. Rem -------------------------------------------------------------------
  433. Procedure CLEAN_BOTTOM_SCROLL
  434.    Cls 5,20,116 To 114,180
  435. End Proc
  436. Rem -------------------------------------------------------------------
  437. Procedure CLEAN_TOP_SCROLL
  438.    Cls 5,19,9 To 114,94
  439. End Proc
  440. Rem -------------------------------------------------------------------
  441. Procedure PICK_TREASURE_LOCATION
  442.    GOLDX=Rnd(9)
  443.    GOLDY=Rnd(9)
  444. End Proc
  445. Rem -------------------------------------------------------------------
  446. Procedure YES_NO
  447.    Repeat 
  448.       KEY
  449.       SCAN
  450.       SCANPRESS=Param
  451.    Until SCANPRESS=21 or SCANPRESS=54
  452.    Bell 
  453.    If SCANPRESS=21 Then SCANPRESS=-1 Else SCANPRESS=0
  454. End Proc[SCANPRESS]
  455. Rem -------------------------------------------------------------------
  456. Procedure T0_POOL[SCRNUM]
  457.    Screen Hide 0
  458.    Screen Copy SCRNUM,0,0,320,200 To 0,0,0
  459.    Screen 0
  460.    Get Palette SCRNUM
  461.    Screen To Front 0
  462.    Screen Show 0
  463.    Wait Vbl 
  464. End Proc
  465. Rem -------------------------------------------------------------------
  466. Procedure PICCYON_UP[SCR]
  467.    Screen Display SCR,,350,,
  468. Screen Show SCR
  469.    Screen To Front SCR
  470.    For Y=350 To 50 Step -5
  471.       Screen Display SCR,,Y,,
  472.       Wait Vbl 
  473.    Next 
  474.    Screen SCR
  475. End Proc
  476. Rem -------------------------------------------------------------------
  477. Procedure PICCYON_DOWN[SCR]
  478.    Screen Display SCR,,-200,,
  479. Screen Show SCR
  480.    Screen To Front SCR
  481.    For Y=-200 To 50 Step 5
  482.       Screen Display SCR,,Y,,
  483.       Wait Vbl 
  484.    Next 
  485.    Screen SCR
  486. End Proc
  487. Rem -------------------------------------------------------------------
  488. Procedure CUSTOM_INPUT[INPSIZE,X,Y,TCOL,CURSCOL]
  489.    INP$=""
  490.    COUNT=0
  491.    SCANPRESS=0
  492.    X2=X
  493.    Locate X,Y
  494.    Print String$(" ",INPSIZE+1);
  495.    Repeat 
  496.       Locate X2,Y
  497.       Pen CURSCOL : Print "_" : Pen TCOL
  498.       Locate X2,Y
  499.       Repeat 
  500.          KEY
  501.          PRESSKEY$=Param$
  502.          SCAN
  503.          SCANPRESS=Param
  504.       Until(Asc(PRESSKEY$)>=65 and Asc(PRESSKEY$)<=90) or SCANPRESS=65 or SCANPRESS=68
  505.       If SCANPRESS<>65 and COUNT>0 and SCANPRESS<>68 Then PRESSKEY$=Lower$(PRESSKEY$)
  506.       If SCANPRESS<>65 and COUNT<INPSIZE and SCANPRESS<>68 Then Print PRESSKEY$ : INP$=INP$+PRESSKEY$ : COUNT=COUNT+1 : X2=X2+1
  507.       If SCANPRESS=65 and X2>X and SCANPRESS<>68 Then COUNT=COUNT-1 : X2=X2-1 : Locate X2,Y : Print "  "; : INP$=Left$(INP$,COUNT)
  508.    Until SCANPRESS=68 and COUNT>0
  509.    Locate X,Y : Print String$(" ",INPSIZE+1);
  510. End Proc[INP$]
  511. Rem -------------------------------------------------------------------
  512. Procedure KEY
  513.    Repeat 
  514.       PRESSKEY$=Upper$(Inkey$)
  515.    Until PRESSKEY$<>""
  516. End Proc[PRESSKEY$]
  517. Rem -------------------------------------------------------------------
  518. Procedure PAUSE[NUM]
  519.    For LOP=1 To NUM
  520.    Next 
  521. End Proc
  522. Rem -------------------------------------------------------------------
  523. Procedure SCAN
  524.    SCANPRESS=Scancode
  525. End Proc[SCANPRESS]
  526. Rem -------------------------------------------------------------------
  527. Procedure DISKEY
  528.    KEY
  529.    TEST$=Param$
  530.    SCAN
  531.    TEST=Param
  532.    Print Asc(Param$);"  ";TEST
  533. End Proc