home *** CD-ROM | disk | FTP | other *** search
/ Merciful 3 / Merciful_Release_3.bin / software / r / ricochetv2.dms / ricochetv2.adf / Ricochet_Source.Amos / Ricochet_Source.amosSourceCode < prev    next >
AMOS Source Code  |  1992-12-21  |  28KB  |  1,340 lines

  1. Set Buffer 10
  2. 'Dir$="Work:Games/Ricochet"
  3. Screen Open 0,640,256,16,Laced+Hires
  4. Flash Off : Hide On : Cls 0
  5. Load Iff "rico16.iff"
  6. Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  7. Screen Open 1,320,256,16,Laced+Hires
  8. Flash Off : Hide On 
  9. Load Iff "amos.iff",1
  10. Palette $0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0,$0
  11. Screen Display 1,130+150,170,320,256
  12. Screen 0
  13. Fade 3,$11,$222,$243,$433,$264,$454,$643,$285,$755,$576,$776,$797,$A87,$AA9,$CBA,$EDD
  14. Wait 3*15
  15. Screen 1
  16. Load "any_one_for_tennis.abk"
  17. Music 1
  18. Mvolume 63
  19. Tempo 28
  20. Led Off 
  21. '
  22. Global _PLAYER,NAME$,NAMEB$,F,_GAMES,FIVE,_NOVICE,TTIME,SEC,_MIN,GAMMY
  23. _PLAYER=0 : GAMMY=4
  24. Wait 100
  25. _FINDFONTS
  26. F=Param
  27. Load "samples.abk"
  28. Load "samples1.abk",6
  29. Fade 3,$0,$99C,$124,$225,$336,$11D,$22D,$33D,$447,$558,$669,$66C,$88E,$113,$CCE,$EEF
  30. _WAIT[501]
  31. Screen 1 : Fade 3 : Wait 3*15
  32. Screen 0 : Fade 3 : Wait 3*15
  33. Screen Close 0
  34. Screen Close 1
  35. '
  36. '
  37. '
  38. 'error message NO FONTS FOUND
  39. If F=0
  40.    Screen Open 0,320,200,8,Lowres
  41.    Curs Off : Cls 0 : Paper 0
  42.    Music Off 
  43.    Locate 1,8 : Centre "FONT 'helvetica' WAS NOT FOUND"
  44.    Locate 1,9 : Centre "ON YOUR BOOT DISC!"
  45.    Locate 1,10 : Centre "Sorry, can not continue program."
  46.    _WAIT[501]
  47.    Stop 
  48. End If 
  49. '
  50. '
  51. For N=7 To 11
  52.    No Mask N
  53. Next 
  54. '
  55. '
  56. Screen Open 1,320,56,8,Lowres
  57. Screen Display 1,130,235,320,56
  58. Curs Off : Hide On : Flash Off : Cls 0
  59. Screen Open 2,320,56,8,Lowres
  60. Load Iff "courtboard",2
  61. Screen Display 2,130,311,320,56
  62. _LOADBOARD
  63. '
  64. Channel 1 To Bob 1
  65. Channel 2 To Bob 2
  66. Channel 3 To Bob 3
  67. For N=1 To 6
  68.    Hot Spot N,$11
  69. Next 
  70. '
  71. ESC:
  72. Auto View Off 
  73. Load Iff "court",0
  74. Screen Display 0,130,36,320,200
  75. Flash Off : Hide On : Curs Off 
  76. Get Icon Palette 
  77. Get Block 1,80,32,160,9*16
  78. Screen Clone 2
  79. Screen To Front 
  80. For N=0 To 15
  81.    Colour N,0
  82. Next 
  83. View : Auto View On 
  84. Fade 3 To 2
  85. Wait 15
  86. Screen Close 2
  87. '
  88. Double Buffer 
  89. _START: ACE=0 : ACEB=0 : GAME=0 : GAMEB=0 : FIVE=0 : _NOVICE=0
  90. TTIME=0 : SEC=0 : _MIN=0
  91. Screen 0
  92. _OPTIONS
  93. _PLAYERSELECT
  94. HARDNESS=Param
  95. '
  96. 'RANDOM SERVE AT START 
  97. R=Rnd(1)
  98. If R=1
  99.    SERVER=0
  100. Else 
  101.    SERVER=1
  102. End If 
  103. '
  104. _NEWGAME:
  105. '**************  RESET VARIBLES HERE For Next GAME 
  106. SCORE=0 : SCOREB=0 : RALLY=-1 : RALREC=0 : TIE=0 : SERVERCNT=0
  107. SRV=0
  108. Screen Open 2,320,56,8,Lowres
  109. Load Iff "courtboard",2
  110. Screen Display 2,130,311,320,56
  111. Set Font(F)
  112. Ink 1,3
  113. Gr Writing 1 : Text 266,36,Str$(ACE)
  114. Text 44,36,Str$(ACEB)
  115. Text 169,49,Str$(RALREC)
  116. '
  117. Text 20,23,NAMEB$ : Text 185,23,NAME$
  118. Text 147,22,Str$(GAMEB)
  119. Text 165,22,Str$(GAME)
  120. _LOADBOARD
  121. Screen 1
  122. Set Font(F)
  123. Ink 1,3
  124. Screen 0
  125. _MESSAGE
  126. Ink 1
  127. If SERVER=0
  128.    SERVER$=NAME$
  129. Else 
  130.    SERVER$=NAMEB$
  131. End If 
  132. Text 104,93,SERVER$
  133. Text 104,105,"TO SERVE, ..... GET READY!"
  134. For N=63 To 1 Step -1
  135.    Wait 2
  136.    Mvolume N
  137. Next 
  138. Music Off 
  139. CLAP
  140. _WAIT[200]
  141. _CLOSEMESS
  142. '
  143. SERVE: Screen 1
  144. 'this decides who serves 
  145. If SERVERCNT=5 and TIE=0
  146.    SERVERCNT=0
  147.    Inc SERVER
  148.    If SERVER>1
  149.       SERVER=0
  150.    End If 
  151. End If 
  152. Inc SERVERCNT
  153. If TIE=1
  154.    Inc SERVER
  155.    If SERVER>1
  156.       SERVER=0
  157.    End If 
  158. End If 
  159. If RALLY=0
  160.    If XMOVE=1
  161.       Inc ACEB
  162.       Gr Writing 1 : Ink 1,3 : Text 44,36,Str$(ACEB)
  163.    Else 
  164.       Inc ACE
  165.       Gr Writing 1 : Ink 1,3 : Text 266,36,Str$(ACE)
  166.    End If 
  167. End If 
  168. If RALLY>RALREC
  169.    RALREC=RALLY
  170.    Gr Writing 1 : Ink 1,3 : Text 169,49,Str$(RALREC)
  171. End If 
  172. RALLY=0
  173. Text 90,49,"0  "
  174. Screen 0 : Gr Writing 0
  175. If SCORE=20 xor SCOREB=20
  176.    Bob 4,112,80,10
  177. End If 
  178. If TIE=1
  179.    If SCORE=SCOREB
  180.       Bob 4,128,80,8
  181.       'this shows sign DEUCE 
  182.    Else 
  183.       Bob 4,112,80,10
  184.       'this shows game point 
  185.    End If 
  186. End If 
  187. '
  188. Gr Writing 1
  189. If SERVER=0
  190.    Screen 1 : Ink 2 : Bar 17,4 To 138,12
  191.    Ink 5 : Bar 182,4 To 303,12
  192.    Ink 3,5 : Text 230,10,"SERVE"
  193.    Screen 0
  194.    Gosub RIGHTSERVE
  195.    BOUNCE=1
  196.    Amal 2,"A 1,(6,4)(5,4)(4,4)(5,4)"
  197.    Bob 3,,,5
  198.    Sam Play 6,1,16000
  199. Else 
  200.    Screen 1 : Ink 5 : Bar 17,4 To 138,12
  201.    Ink 2 : Bar 182,4 To 303,12
  202.    Ink 3,5 : Text 65,10,"SERVE"
  203.    Screen 0
  204.    Gosub LEFTSERVE
  205.    BOUNCE=0
  206.    Amal 3,"A 1,(4,4)(5,4)(6,4)(5,4)"
  207.    Bob 2,,,5
  208.    Sam Play 9,1,18000
  209. End If 
  210. 'this gets rid of any message bobs 
  211. Bob Off 4
  212. Amal On 
  213. Wait 4
  214. Bob 1,X,Y,
  215. Amal 1,"A 1,(1,4)(2,4)(3,4)(2,4)(1,8)"
  216. Amal On 
  217. Do 
  218.    I$=Inkey$
  219.    'this pauses game
  220.    If I$="p"
  221.       Amal Freeze 
  222.       Bob 4,128,80,7
  223.       Repeat : I$=Inkey$ : Until I$=""
  224.       Repeat : I$=Inkey$ : Until I$="p"
  225.       Repeat : I$=Inkey$ : Until I$=""
  226.       Bob Off 4
  227.       Amal On 
  228.    End If 
  229.    If Key State(69)
  230.       Fade 3 : Wait 3*15
  231.       Music 1
  232.       Mvolume 63
  233.       Tempo 28
  234.       Goto ESC
  235.    End If 
  236.    'this waits a mo before going to serve 
  237.    If SRV<>0
  238.       Inc _WAITSERVE
  239.       If _WAITSERVE=100
  240.          _WAITSERVE=0 : SRV=0
  241.          Goto SERVE
  242.       End If 
  243.    End If 
  244.    Wait Vbl 
  245.    Inc TTIME
  246.    If TTIME>=50
  247.       _TIMER
  248.    End If 
  249.    If X<140 and BOUNCE=0
  250.       BOUNCE=1
  251.       Sam Play 9,2,32000
  252.       Amal 1,"A 1,(3,4)(2,4)(1,4)"
  253.       Amal On 
  254.    End If 
  255.    If X>180 and BOUNCE=1
  256.       BOUNCE=0
  257.       Sam Play 6,2,32000
  258.       Amal 1,"A 1,(3,4)(2,4)(1,4)"
  259.       Amal On 
  260.    End If 
  261.    Bob 1,X,Y,
  262.    Bob 2,,BY,
  263.    Bob 3,,BYB,
  264.    'Left bat coldection 
  265.    CB=Bob Col(1,3 To 3)
  266.    If CB<>0 and XMOVE=0
  267.       Inc RALLY
  268.       Screen 1 : Gr Writing 1 : Ink 1,3 : Text 88,49,Str$(RALLY) : Screen 0
  269.       'what shot is the computer going to take?
  270.       If _PLAYER=0 and JB<>0
  271.          _WHATHIT
  272.          JB=Param
  273.          If _NOVICE=1
  274.             JB=0
  275.          End If 
  276.       End If 
  277.       '  
  278.       XMOVE=1
  279.       If JB=1 or JB=2
  280.          BANGLE=2 : SPEED=5
  281.       End If 
  282.       If JB=9
  283.          Amal 3,"A 1,(6,12)(5,4)"
  284.          YMOVE=0
  285.          BANGLE=4
  286.       End If 
  287.       If JB=10
  288.          Amal 3,"A 1,(4,12)(5,4)"
  289.          YMOVE=1
  290.          BANGLE=4
  291.       End If 
  292.       If JB=0 or JB=4 or JB=8
  293.          If JB=8
  294.             Amal 3,"A 1,(4,4)(5,4)(6,4)(5,4)"
  295.             SPEED=8 : BANGLE=4
  296.          Else 
  297.             SPEED=4
  298.             BANGLE=1
  299.          End If 
  300.       End If 
  301.       Amal On 
  302.       Sam Play 9,1,18000
  303.    End If 
  304.    'right bat coldection
  305.    C=Bob Col(1,2 To 2)
  306.    If C<>0 and XMOVE=1
  307.       XMOVE=0
  308.       Inc RALLY
  309.       Screen 1 : Ink 1,3 : Text 88,49,Str$(RALLY) : Screen 0
  310.       If J=1 or J=2
  311.          BANGLE=2 : SPEED=5
  312.       End If 
  313.       If J=5
  314.          Amal 2,"A 1,(6,12)(5,4)"
  315.          YMOVE=0
  316.          BANGLE=4
  317.       End If 
  318.       If J=6
  319.          Amal 2,"A 1,(4,12)(5,4)"
  320.          YMOVE=1
  321.          BANGLE=4
  322.       End If 
  323.       If J=0 or J=4 or J=8
  324.          If J=4
  325.             Amal 2,"A 1,(6,4)(5,4)(4,4)(5,4)"
  326.             SPEED=8 : BANGLE=4
  327.          Else 
  328.             SPEED=4
  329.             BANGLE=1
  330.          End If 
  331.       End If 
  332.       Sam Play 6,1,16000
  333.       Amal On 
  334.    End If 
  335.    'If X<50 
  336.    '   XMOVE=1
  337.    'End If  
  338.    If XMOVE=1
  339.       Add X,SPEED
  340.       If X>=330 and SRV=0
  341.          Bob Off(1)
  342.          Inc SCOREB : SRV=1 : Y=300
  343.          Screen 1
  344.          Gr Writing 1
  345.          Ink 1,3 : Text 145,36,Str$(SCOREB)
  346.          If RALLY=0 or RALLY>RALREC and RALLY>6
  347.             CLAP
  348.          End If 
  349.          Screen 0
  350.          If SCORE=21 or SCOREB=21
  351.             If TIE=0
  352.                Gosub _WINNER
  353.             End If 
  354.          End If 
  355.          If SCORE=20 and SCOREB=20
  356.             Bob 4,112,80,11
  357.             TIE=1
  358.          End If 
  359.          If TIE=1
  360.             Gosub _TIEBREAK
  361.          End If 
  362.       End If 
  363.    Else 
  364.       X=X-SPEED
  365.       If X<=-10 and SRV=0
  366.          Bob Off(1)
  367.          Inc SCORE : SRV=1 : Y=300
  368.          Screen 1
  369.          Gr Writing 1
  370.          Ink 1,3 : Text 163,36,Str$(SCORE)
  371.          If RALLY=0 or RALLY>RALREC and RALLY>6
  372.             CLAP
  373.          End If 
  374.          Screen 0
  375.          If SCORE=21 or SCOREB=21
  376.             If TIE=0
  377.                Gosub _WINNER
  378.             End If 
  379.          End If 
  380.          If SCORE=20 and SCOREB=20
  381.             Bob 4,112,80,11
  382.             TIE=1
  383.          End If 
  384.          If TIE=1
  385.             Gosub _TIEBREAK
  386.          End If 
  387.       End If 
  388.    End If 
  389.    '
  390.    ' up down ball movement
  391.    If YMOVE=1
  392.       Add Y,BANGLE
  393.       If Y=>188 and SRV=0
  394.          If X<160
  395.             Sam Play 9,2,28000
  396.          Else 
  397.             Sam Play 6,2,28000
  398.          End If 
  399.          YMOVE=0
  400.       End If 
  401.    Else 
  402.       Y=Y-BANGLE
  403.       If Y=<10 and SRV=0
  404.          If X>160
  405.             Sam Play 9,2,28000
  406.          Else 
  407.             Sam Play 6,2,28000
  408.          End If 
  409.          YMOVE=1
  410.       End If 
  411.    End If 
  412.    '
  413.    ' bat control
  414.    'left bat
  415.    If _PLAYER=1
  416.       JB=Joy(0)
  417.    Else 
  418.       'computer control
  419.       If Y-16>BYB and X<HARDNESS
  420.          JB=2
  421.       End If 
  422.       'down screen 
  423.       If Y+16<BYB and X<HARDNESS
  424.          JB=1
  425.       End If 
  426.       If X>HARDNESS
  427.          JB=0
  428.       End If 
  429.    End If 
  430.    If JB<>0
  431.       If JB=2 or JB=6 or JB=10
  432.          If BYB<188
  433.             Add BYB,4
  434.          End If 
  435.       End If 
  436.       If JB=1 or JB=5 or JB=9
  437.          If BYB>0
  438.             BYB=BYB-4
  439.          End If 
  440.       End If 
  441.    End If 
  442.    'Right bat 
  443.    J=Joy(1)
  444.    If J<>0
  445.       If J=2 or J=6 or J=10
  446.          If BY<188
  447.             Add BY,4
  448.          End If 
  449.       End If 
  450.       If J=1 or J=5 or J=9
  451.          If BY>0
  452.             BY=BY-4
  453.          End If 
  454.       End If 
  455.    End If 
  456. Loop 
  457. RIGHTSERVE:
  458. 'right to serve
  459. Screen 0
  460. BY=160 : BYB=30
  461. X=298 : Y=153
  462. Bob 1,X,Y,1
  463. Bob 2,304,BY,6
  464. Bob 3,29,BYB,6
  465. Repeat 
  466.    Wait 1
  467.    I$=Inkey$
  468.    'this pauses game
  469.    If I$="p"
  470.       Bob 4,128,80,7
  471.       Repeat : I$=Inkey$ : Until I$=""
  472.       Repeat : I$=Inkey$ : Until I$="p"
  473.       Repeat : I$=Inkey$ : Until I$=""
  474.       Bob Off 4
  475.    End If 
  476.    If Key State(69)
  477.       Fade 3 : Wait 3*15
  478.       Music 1
  479.       Mvolume 63
  480.       Tempo 28
  481.       Goto ESC
  482.    End If 
  483.    Inc TTIME
  484.    If TTIME=50
  485.       _TIMER
  486.    End If 
  487.    J=Fire(1)
  488. Until J<>0
  489. XMOVE=0 : YMOVE=0
  490. R=Rnd(3)+3
  491. SPEED=R
  492. R=Rnd(1)+1
  493. BANGLE=R
  494. J=Joy(1)
  495. If J=20
  496.    SPEED=8
  497. End If 
  498. If J=18
  499.    BANGLE=4 : SPEED=3
  500. End If 
  501. If J=21
  502.    BANGLE=4
  503. End If 
  504. If J=22
  505.    BANGLE=2+R : SPEED=6 : YMOVE=1
  506. End If 
  507. Return 
  508. LEFTSERVE:
  509. 'right to serve
  510. Screen 0
  511. BY=30 : BYB=160
  512. X=30 : Y=153
  513. Bob 1,X,Y,1
  514. Bob 2,304,BY,4
  515. Bob 3,29,BYB,4
  516. If _PLAYER=1
  517.    'Repeat : JB=Fire(0) : Until JB<>0 
  518.    Repeat 
  519.       Wait 1
  520.       I$=Inkey$
  521.       'this pauses game
  522.       If I$="p"
  523.          Bob 4,128,80,7
  524.          Repeat : I$=Inkey$ : Until I$=""
  525.          Repeat : I$=Inkey$ : Until I$="p"
  526.          Repeat : I$=Inkey$ : Until I$=""
  527.          Bob Off 4
  528.       End If 
  529.       If Key State(69)
  530.          Fade 3 : Wait 3*15
  531.          Music 1
  532.          Mvolume 63
  533.          Tempo 28
  534.          Goto ESC
  535.       End If 
  536.       Inc TTIME
  537.       If TTIME=50
  538.          _TIMER
  539.       End If 
  540.       JB=Fire(0)
  541.    Until JB<>0
  542.    JB=Joy(0)
  543. Else 
  544.    'this decides computers serve
  545.    N=0
  546.    Do 
  547.       Wait 1
  548.       Inc TTIME
  549.       If TTIME=50
  550.          _TIMER
  551.       End If 
  552.       Inc N
  553.       Exit If N>=100
  554.       I$=Inkey$
  555.       'this pauses game
  556.       If I$="p"
  557.          Bob 4,128,80,7
  558.          Repeat : I$=Inkey$ : Until I$=""
  559.          Repeat : I$=Inkey$ : Until I$="p"
  560.          Repeat : I$=Inkey$ : Until I$=""
  561.          Bob Off 4
  562.       End If 
  563.       If Key State(69)
  564.          Fade 3 : Wait 3*15
  565.          Music 1
  566.          Mvolume 63
  567.          Tempo 28
  568.          Goto ESC
  569.       End If 
  570.    Loop 
  571.    R=Rnd(3)+1
  572.    If R=1
  573.       JB=24
  574.    End If 
  575.    If R=2
  576.       JB=17
  577.    End If 
  578.    If R=3
  579.       JB=25
  580.    End If 
  581.    If R=4
  582.       JB=26
  583.    End If 
  584.    If _NOVICE=1
  585.       JB=0
  586.    End If 
  587. End If 
  588. XMOVE=1 : YMOVE=0
  589. R=Rnd(3)+3
  590. SPEED=R
  591. R=Rnd(1)+1
  592. BANGLE=R
  593. If JB=24
  594.    SPEED=8
  595. End If 
  596. If JB=17
  597.    BANGLE=4 : SPEED=3
  598. End If 
  599. If JB=25
  600.    BANGLE=4
  601. End If 
  602. If JB=26
  603.    BANGLE=2+R : SPEED=6 : YMOVE=1
  604. End If 
  605. Return 
  606. _WINNER:
  607. CLAP
  608. Gr Writing 0
  609. Bob 1,322,Y,1
  610. _MESSAGE
  611. Dec _GAMES
  612. If SCOREB=21 and TIE=0
  613.    Text 104,93,NAMEB$
  614.    Inc GAMEB
  615.    SERVER=0
  616. End If 
  617. If SCORE=21 and TIE=0
  618.    Text 104,93,NAME$
  619.    Inc GAME
  620.    SERVER=1
  621. End If 
  622. If SCORE>SCOREB and TIE=1
  623.    Text 104,93,NAME$
  624.    Inc GAME
  625.    SERVER=1
  626. End If 
  627. If SCOREB>SCORE and TIE=1
  628.    Text 104,93,NAMEB$
  629.    Inc GAMEB
  630.    SERVER=0
  631. End If 
  632. If FIVE=1 and GAME=3 or FIVE=1 and GAMEB=3
  633.    _GAMES=0
  634. End If 
  635. If FIVE=0 and GAME=2 or FIVE=0 and GAMEB=2
  636.    _GAMES=0
  637. End If 
  638. If _GAMES>0
  639.    SENTENCE$="WINS THIS GAME!"
  640. Else 
  641.    SENTENCE$="WINS THE GAME & MATCH!"
  642. End If 
  643. Text 104,105,SENTENCE$
  644. Screen 1
  645. Text 147,22,Str$(GAMEB)
  646. Text 165,22,Str$(GAME)
  647. Screen 0
  648. 'this is the start of no: of games bit 
  649. _WAIT[250]
  650. '
  651. If _GAMES=0
  652.    Music 1
  653.    Mvolume 63
  654.    Tempo 28
  655.    Fade 3
  656.    Load Iff "moet321",0
  657.    Screen Display 0,130,36,320,208
  658.    Set Font(F-3) : Ink 5,0
  659.    Text 85,160,"Ricochet's Ace Player;"
  660.    If GAMEB>GAME
  661.       Text 85,180,NAMEB$
  662.    Else 
  663.       Text 85,180,NAME$
  664.    End If 
  665.    _WAIT[501]
  666.    Fade 3 : Wait 3*15
  667.    Goto ESC
  668. Else 
  669.    SERVERCNT=0
  670.    _MESSAGE
  671.    If GAME>GAMEB
  672.       SENTENCE$="LEADS BY "+Str$(GAME)+" GAME(S) TO "+Str$(GAMEB)
  673.       Text 104,105,SENTENCE$
  674.       Text 104,93,NAME$
  675.    End If 
  676.    If GAMEB>GAME
  677.       SENTENCE$="LEADS BY "+Str$(GAMEB)+" GAME(S) TO "+Str$(GAME)
  678.       Text 104,105,SENTENCE$
  679.       Text 104,93,NAMEB$
  680.    End If 
  681.    If GAME=GAMEB
  682.       SENTENCE$=Str$(GAME)+" GAME(S) TO "+Str$(GAMEB)
  683.       Text 104,93,"SCORE ARE EQUAL"
  684.       Text 104,105,SENTENCE$
  685.    End If 
  686.    _WAIT[200]
  687.    Goto _NEWGAME
  688. End If 
  689. 'Return  
  690. _TIEBREAK:
  691. If SCORE=SCOREB+2 or SCOREB=SCORE+2
  692.    Gosub _WINNER
  693. End If 
  694. Return 
  695. Procedure _GETBOBS
  696.    Load Iff "ball.iff",0
  697.    For N=1 To 3
  698.       Get Bob N,X,0 To X+12,12
  699.       Add X,12
  700.    Next 
  701.    For N=4 To 6
  702.       Get Bob N,X,0 To X+19,32
  703.       Add X,19
  704.    Next 
  705.    Y=48
  706.    For N=7 To 8
  707.       Get Bob N,80,Y To 144,Y+32
  708.       Add Y,32
  709.    Next 
  710.    Y=48
  711.    For N=9 To 11
  712.       Get Bob N,144,Y To 240,Y+32
  713.       Add Y,32
  714.    Next 
  715.    _GETICON
  716. End Proc
  717. Procedure _WHATHIT
  718.    Data 1,2,1,2,8,9,10,9,10
  719.    R=Rnd(8)+1
  720.    For N=1 To R
  721.       Read JB
  722.    Next 
  723. End Proc[JB]
  724. Procedure _GETICON
  725.    X=0 : Y=48
  726.    For N=1 To 15
  727.       Get Icon N,X,Y To X+16,Y+16
  728.       Add X,16
  729.       If X>4*16
  730.          X=0
  731.          Add Y,16
  732.       End If 
  733.    Next 
  734. End Proc
  735. Procedure _WINDOW
  736.    Screen 1
  737.    Fade 3,$0,$555,$223,$122,$223,$640,$722,$457
  738.    Screen 0
  739.    Get Icon Palette 
  740.    Autoback 1
  741.    Data 1,2,2,2,3,4,2,2,2,5
  742.    Data 6,7,7,7,8,9,7,7,7,10
  743.    Data 6,7,7,7,8,9,7,7,7,10
  744.    Data 6,7,7,7,8,9,7,7,7,10
  745.    Data 6,7,7,7,8,9,7,7,7,10
  746.    Data 6,7,7,7,8,9,7,7,7,10
  747.    Data 6,7,7,7,8,9,7,7,7,10
  748.    Data 6,7,7,7,8,9,7,7,7,10
  749.    Data 11,12,12,12,13,14,12,12,12,15
  750.    X=80 : Y=32
  751.    For N=1 To 90
  752.       Inc CNT
  753.       Read R
  754.       Paste Icon X,Y,R
  755.       Add X,16
  756.       If CNT=10
  757.          X=80 : CNT=0
  758.          Add Y,16
  759.       End If 
  760.    Next 
  761. End Proc
  762. Procedure _CLOSEWIND
  763.    Put Block 1
  764.    Screen Swap 
  765.    Put Block 1
  766.    Screen 1
  767.    Fade 3,$0,$889,$334,$233,$445,$C80,$D33,$9AD
  768.    Screen 0
  769.    Autoback 2
  770. End Proc
  771. Procedure _BOX[BXX,BXY,BW,BD,HIGH,LOW,_BAR]
  772.    If _BAR>0
  773.       Ink _BAR : Bar BXX,BXY To BW,BD
  774.    End If 
  775.    Ink HIGH : Polyline BXX,BD To BXX,BXY To BW,BXY
  776.    Ink LOW : Polyline BW,BXY+1 To BW,BD To BXX+1,BD
  777. End Proc
  778. Procedure _FINDFONTS
  779.    Get Disc Fonts 
  780.    N=1
  781.    Do 
  782.       A$=Font$(N)
  783.       ANSWER=Instr(A$,"helvetica")
  784.       Exit If ANSWER>0
  785.       Inc N
  786.       If N>10000
  787.          N=1
  788.          Exit 
  789.       End If 
  790.    Loop 
  791.    Add N,5
  792. End Proc[N]
  793. Procedure _OPTIONS
  794.    Set Font(F)
  795.    If GAMMY=4 Then _GAMES=1
  796.    If GAMMY=5 Then _GAMES=3
  797.    If GAMMY=6 Then _GAME5=5
  798.    Data "ONE PLAYER","TWO PLAYER","PRACTICE","SINGLE GAME","BEST OF THREE","BEST OF FIVE","ABOUT RICOCHET","PLAY GAME","EXIT / QUIT",
  799.    Data "THIS PROGRAM WAS","WRITTEN IN AMOS.",""
  800.    Data "PROGRAMMING,","ARTWORK & MUSIC,","BY:","MARTIN LONGSTAFF.","","FEB-APRIL 1995."
  801.    _TOP: Restore : CNTR=0
  802.    _WINDOW
  803.    BX=94 : BY=54
  804.    For N=1 To 9
  805.       If N=1 and _PLAYER=0 or N=2 and _PLAYER=1 or N=GAMMY
  806.          _BOX[BX,BY,BX+115,BY+10,0,12,0]
  807.       Else 
  808.          _BOX[BX,BY,BX+115,BY+10,12,0,0]
  809.       End If 
  810.       _BOX[BX+116,BY,BX+130,BY+10,12,0,0]
  811.       Read R$
  812.       If N>3 and N<7
  813.          Ink 4,0
  814.       Else 
  815.          Ink 5,0
  816.       End If 
  817.       If N=8
  818.          Ink 1,0
  819.       End If 
  820.       If N=3
  821.          Ink 6,0
  822.       End If 
  823.       Gr Writing 0 : Text BX+8,BY+8,R$
  824.       Add BY,12
  825.    Next 
  826.    Ink 4,0 : Text 141,48,"OPTIONS"
  827.    BY=138
  828.    OPCNT=8
  829.    Ink 3 : Bar 211,BY+1 To 223,BY+9
  830.    Do 
  831.       Wait 1
  832.       Inc CNTR
  833.       If CNTR=1000
  834.          Gosub _CREDITS
  835.       End If 
  836.       J=Joy(1)
  837.       If J=2 and OPCNT<9
  838.          CNTR=0
  839.          Ink 15 : Bar 211,BY+1 To 223,BY+9
  840.          Add BY,12
  841.          Ink 3 : Bar 211,BY+1 To 223,BY+9
  842.          Inc OPCNT
  843.          Repeat : J=Joy(1) : Until J=0
  844.       End If 
  845.       If J=1 and OPCNT>1
  846.          CNTR=0
  847.          Ink 15 : Bar 211,BY+1 To 223,BY+9
  848.          Add BY,-12
  849.          Ink 3 : Bar 211,BY+1 To 223,BY+9
  850.          Dec OPCNT
  851.          Repeat : J=Joy(1) : Until J=0
  852.       End If 
  853.       ' IF FIRE is pressed 
  854.       If J=16
  855.          CNTR=0
  856.          If OPCNT<3
  857.             BX=94 : B=54
  858.             For N=1 To 2
  859.                If N=OPCNT
  860.                   _BOX[BX,B,BX+115,B+10,0,12,0]
  861.                Else 
  862.                   _BOX[BX,B,BX+115,B+10,12,0,0]
  863.                End If 
  864.                Add B,12
  865.             Next 
  866.             If OPCNT=2
  867.                _PLAYER=1
  868.             Else 
  869.                _PLAYER=0
  870.             End If 
  871.          End If 
  872.          If OPCNT=3
  873.             BX=94 : B=78
  874.             _BOX[BX,B,BX+115,B+10,0,12,0]
  875.             _MESSAGE
  876.             Ink 1
  877.             Text 105,93,"OPTION NOT AVAILABLE"
  878.             Text 105,106,"ON THIS VERSION"
  879.             Wait 100
  880.             Goto _TOP
  881.          End If 
  882.          If OPCNT>3 and OPCNT<7
  883.             BX=94 : B=90
  884.             For N=4 To 7
  885.                If N=OPCNT
  886.                   _BOX[BX,B,BX+115,B+10,0,12,0]
  887.                Else 
  888.                   _BOX[BX,B,BX+115,B+10,12,0,0]
  889.                End If 
  890.                Add B,12
  891.                If OPCNT=4
  892.                   GAMMY=4
  893.                   _GAMES=1
  894.                End If 
  895.                If OPCNT=5
  896.                   GAMMY=5
  897.                   _GAMES=3
  898.                End If 
  899.                If OPCNT=6
  900.                   GAMMY=6
  901.                   _GAMES=5 : FIVE=1
  902.                End If 
  903.             Next 
  904.          End If 
  905.          If OPCNT=7
  906.             _BOX[94,126,94+115,126+10,0,12,0]
  907.             Repeat : J=Joy(1) : Until J=0
  908.             _README
  909.             Wait 10
  910.             Goto _TOP
  911.          End If 
  912.          If OPCNT>7
  913.             BX=94 : B=138
  914.             For N=8 To 9
  915.                If N=OPCNT
  916.                   _BOX[BX,B,BX+115,B+10,0,12,0]
  917.                Else 
  918.                   _BOX[BX,B,BX+115,B+10,12,0,0]
  919.                End If 
  920.                Add B,12
  921.             Next 
  922.             Repeat : J=Joy(1) : Until J=0
  923.             If OPCNT=8
  924.                Exit 
  925.             Else 
  926.                _MESSAGE
  927.                Ink 1
  928.                Text 105,93,"SURE YOU WANT TO QUIT?"
  929.                Text 149,106,"Y / N"
  930.                Clear Key 
  931.                Do 
  932.                   I$=Inkey$
  933.                   If I$<>""
  934.                      If I$="y"
  935.                         Music Off 
  936.                         Stop 
  937.                      Else 
  938.                         _CLOSEMESS
  939.                         Goto _TOP
  940.                      End If 
  941.                   End If 
  942.                Loop 
  943.             End If 
  944.          End If 
  945.       End If 
  946.    Loop 
  947.    _CLOSEWIND
  948.    Pop Proc
  949.    _CREDITS:
  950.    _WINDOW
  951.    BX=94 : BY=54
  952.    Ink 4,0 : Text 141,48,"RICOCHET"
  953.    For N=1 To 10
  954.       Read R$
  955.       Ink 1,0 : Text BX+8,BY+8,R$
  956.       Add BY,10
  957.    Next 
  958.    CNTR=0
  959.    Do 
  960.       Wait 1
  961.       Inc CNTR
  962.       J=Joy(1)
  963.       If J=16 or CNTR=1000
  964.          Goto _TOP
  965.       End If 
  966.    Loop 
  967. End Proc
  968. Procedure _MESSAGE
  969.    Data 1,2,2,3,4,2,2,5
  970.    Data 11,12,12,13,14,12,12,15
  971.    Autoback 1
  972.    X=96 : Y=80
  973.    For N=1 To 16
  974.       Inc CNT
  975.       Read R
  976.       Paste Icon X,Y,R
  977.       Add X,16
  978.       If CNT=8
  979.          X=96 : CNT=0
  980.          Add Y,16
  981.       End If 
  982.    Next 
  983. End Proc
  984. Procedure _CLOSEMESS
  985.    Put Block 1
  986.    Screen Swap 
  987.    Put Block 1
  988. End Proc
  989. Procedure _EDITOR[CHAR,WY,WORD$]
  990.    Clear Key 
  991.    L=Len(WORD$)
  992.    LETCNT=L
  993.    Text 98,WY,WORD$
  994.    Do 
  995.       IN$=Inkey$
  996.       If IN$<>""
  997.          Exit If Key State(68)
  998.          LETCNT=0
  999.          Ink 2 : Bar 98,WY-7 To 223,WY+3 : Ink 4
  1000.          WORD$=""
  1001.          Exit 
  1002.       End If 
  1003.       J=Joy(1)
  1004.       If J=16
  1005.          Repeat : J=Joy(1) : Until J=0
  1006.          Goto _JUMP
  1007.       End If 
  1008.    Loop 
  1009.    Ink 4,2
  1010.    Do 
  1011.       J=Joy(1)
  1012.       If J=16
  1013.          Repeat : J=Joy(1) : Until J=0
  1014.          Exit 
  1015.       End If 
  1016.       If IN$<>""
  1017.          Exit If Key State(68)
  1018.          If Key State(65) and LETCNT>0
  1019.             TEMP$=Left$(WORD$,LETCNT-1)
  1020.             WORD$=TEMP$
  1021.             Ink 2 : Bar 98,WY-7 To 223,WY+3 : Ink 4
  1022.             Text 98,WY,WORD$
  1023.             Dec LETCNT
  1024.          Else 
  1025.             If Asc(IN$)>31
  1026.                Inc LETCNT
  1027.                WORD$=WORD$+Upper$(IN$)
  1028.                Text 98,WY,WORD$
  1029.             End If 
  1030.          End If 
  1031.          Exit If LETCNT=CHAR
  1032.       End If 
  1033.       IN$=Inkey$
  1034.    Loop 
  1035.    _JUMP:
  1036. End Proc[WORD$]
  1037. Procedure _PLAYERSELECT
  1038.    Data "ANDRE AVERAGE","PAT FLASH","JIMMY SPANNERS","BJORN BOING","BORIS BONKERS","MARTINA NOCACATOVA"
  1039.    _WINDOW
  1040.    _BOX[92,43,227,76,12,0,0]
  1041.    _BOX[94,62,225,74,0,12,2]
  1042.    Ink 1 : Text 102,54,"PLAYER ONE, ENTER NAME:"
  1043.    If NAME$=""
  1044.       NAME$="PLAYER ONE"
  1045.    End If 
  1046.    _EDITOR[16,70,NAME$]
  1047.    NAME$=Param$
  1048.    If NAME$=""
  1049.       NAME$="PLAYER ONE"
  1050.    End If 
  1051.    Wait 10
  1052.    If _PLAYER=1
  1053.       _BOX[92,77,227,110,12,0,0]
  1054.       _BOX[94,96,225,108,0,12,2]
  1055.       Ink 1 : Text 101,86,"PLAYER TWO, ENTER NAME:"
  1056.       Text 101,126,"PLUG SECOND JOYSTICK"
  1057.       Text 101,136,"INTO THE MOUSE PORT"
  1058.       If NAMEB$=""
  1059.          NAMEB$="PLAYER TWO"
  1060.       End If 
  1061.       _EDITOR[16,104,NAMEB$]
  1062.       NAMEB$=Param$
  1063.       If NAMEB$=""
  1064.          NAMEB$="PLAYER TWO"
  1065.       End If 
  1066.    Else 
  1067.       Ink 1 : Text 101,86,"SELECT OPPONENT"
  1068.       BY=90
  1069.       For N=1 To 6
  1070.          Read R$
  1071.          Ink 1,0 : Gr Writing 0 : Text 94+8,BY+8,R$
  1072.          _BOX[94,BY,94+115,BY+10,12,0,0]
  1073.          _BOX[94+116,BY,94+130,BY+10,12,0,0]
  1074.          Add BY,12
  1075.       Next 
  1076.       BY=90
  1077.       Ink 3 : Bar 211,BY+1 To 223,BY+9
  1078.       BY=90 : OPCNT=1
  1079.       Do 
  1080.          J=Joy(1)
  1081.          If J=2 and OPCNT<6
  1082.             Ink 15 : Bar 211,BY+1 To 223,BY+9
  1083.             Add BY,12
  1084.             Ink 3 : Bar 211,BY+1 To 223,BY+9
  1085.             Inc OPCNT
  1086.             Repeat : J=Joy(1) : Until J=0
  1087.          End If 
  1088.          If J=1 and OPCNT>1
  1089.             Ink 15 : Bar 211,BY+1 To 223,BY+9
  1090.             Add BY,-12
  1091.             Ink 3 : Bar 211,BY+1 To 223,BY+9
  1092.             Dec OPCNT
  1093.             Repeat : J=Joy(1) : Until J=0
  1094.          End If 
  1095.          ' IF FIRE is pressed 
  1096.          If J=16
  1097.             BX=94 : B=90
  1098.             For N=1 To 6
  1099.                If N=OPCNT
  1100.                   _BOX[BX,B,BX+115,B+10,0,12,0]
  1101.                Else 
  1102.                   _BOX[BX,B,BX+115,B+10,12,0,0]
  1103.                End If 
  1104.                Add B,12
  1105.             Next 
  1106.             'this is where the opponents are detailed eg:
  1107.             If OPCNT=1
  1108.                HARDNESS=140
  1109.                NAMEB$="ANDRE AVERAGE"
  1110.                'set varibles
  1111.             End If 
  1112.             If OPCNT=2
  1113.                HARDNESS=230
  1114.                NAMEB$="PAT FLASH"
  1115.                'set varibles
  1116.             End If 
  1117.             If OPCNT=3
  1118.                _NOVICE=1
  1119.                HARDNESS=90
  1120.                NAMEB$="JIMMY SPANNERS"
  1121.             End If 
  1122.             If OPCNT=4
  1123.                _NOVICE=0
  1124.                HARDNESS=180
  1125.                NAMEB$="BJORN BOING"
  1126.             End If 
  1127.             If OPCNT=5
  1128.                _NOVICE=1
  1129.                HARDNESS=280
  1130.                NAMEB$="BORIS BONKERS"
  1131.                'set varibles
  1132.             End If 
  1133.             If OPCNT=6
  1134.                _NOVICE=1
  1135.                HARDNESS=200
  1136.                NAMEB$="MARTINA NOCACATOVA"
  1137.                'set varibles
  1138.             End If 
  1139.             Repeat : J=Joy(1) : Until J=0
  1140.             Exit 
  1141.          End If 
  1142.       Loop 
  1143.    End If 
  1144.    _CLOSEWIND
  1145. End Proc[HARDNESS]
  1146. Procedure CLAP
  1147.    Bank Swap 5,6
  1148.    Volume 25
  1149.    R=Rnd(1)
  1150.    If R=0
  1151.       A=9 : B=6
  1152.    Else 
  1153.       A=6 : B=9
  1154.    End If 
  1155.    Sam Play A,3,13500
  1156.    Wait 7
  1157.    Sam Play B,3,13500
  1158.    Volume 30
  1159.    Bank Swap 5,6
  1160. End Proc
  1161. Procedure _WAIT[TIME]
  1162.    N=0
  1163.    Do 
  1164.       Wait 1
  1165.       Inc TTIME
  1166.       If TTIME=50 and TIME<>501
  1167.          _TIMER
  1168.       End If 
  1169.       Inc N
  1170.       Exit If N=TIME
  1171.       J=Fire(1)
  1172.       JB=Fire(0)
  1173.       If J<>0
  1174.          Repeat 
  1175.             J=Fire(1)
  1176.          Until J=0
  1177.          Exit 
  1178.       End If 
  1179.       If JB<>0
  1180.          Repeat 
  1181.             JB=Fire(0)
  1182.          Until JB=0
  1183.          Exit 
  1184.       End If 
  1185.    Loop 
  1186. End Proc
  1187. Procedure _TIMER
  1188.    TTIME=0
  1189.    Inc SEC
  1190.    If SEC=60
  1191.       Inc _MIN
  1192.       If _MIN=60
  1193.          _MIN=0
  1194.       End If 
  1195.       SEC=0
  1196.    End If 
  1197.    Screen 1
  1198.    Ink 4 : Bar 260,43 To 303,50
  1199.    Gr Writing 0
  1200.    Ink 3,4
  1201.    If SEC>9
  1202.       CLOCK$=Str$(_MIN)+" :"+Str$(SEC)
  1203.    Else 
  1204.       CLOCK$=Str$(_MIN)+" :0"+Str$(SEC)
  1205.    End If 
  1206.    Ink 0
  1207.    Text 268,50,CLOCK$
  1208.    Ink 1
  1209.    Text 267,49,CLOCK$
  1210.    Gr Writing 1 : Ink 1,3
  1211.    Screen 0
  1212. End Proc
  1213. Procedure _README
  1214.    Data "UP","DOWN","EXIT"
  1215.    Dim _DOC$(150)
  1216.    Screen Open 2,640,200,4,Hires
  1217.    Screen Display 2,130,316,640,200
  1218.    Flash Off : Curs Off : Cls 1 : Hide On 
  1219.    Palette $20,$50,$A0,$80
  1220.    OPTCNT=2
  1221.    _BOX[1,180,489,194,2,0,0]
  1222.    Locate 3,23 : Print "Use FIRE button to scroll text up/down."
  1223.    BXT=62 : BX=490
  1224.    For N=1 To 3
  1225.       If N=OPTCNT
  1226.          _BOX[BX,180,BX+48,194,2,0,3]
  1227.          Paper 3 : Pen 0
  1228.       Else 
  1229.          _BOX[BX,180,BX+48,194,2,0,0]
  1230.          Paper 1 : Pen 2
  1231.       End If 
  1232.       Read R$
  1233.       Locate BXT,23 : Print R$
  1234.       Add BXT,6
  1235.       Add BX,49
  1236.    Next 
  1237.    Restore 
  1238.    Open In 1,"Readme_Rich"
  1239.    Set Input 10,-1
  1240.    _LEN=0
  1241.    Do 
  1242.       _END=Eof(1)
  1243.       Exit If _END=-1
  1244.       Line Input #1,_LEN$
  1245.       _DOC$(_LEN)=_LEN$
  1246.       Inc _LEN
  1247.    Loop 
  1248.    Pen 0
  1249.    For N=1 To 20
  1250.       Locate 2,N+1 : Print _DOC$(N)
  1251.    Next 
  1252.    SCR=1
  1253.    For N=316 To 36 Step -8
  1254.       Screen Display 2,130,N,640,200
  1255.       Wait Vbl 
  1256.    Next 
  1257.    Do 
  1258.       J=Joy(1)
  1259.       If J<>0
  1260.          If J=16
  1261.             If OPTCNT=2 and SCR<125
  1262.                _BOX[540,180,587,194,0,2,0]
  1263.                Repeat 
  1264.                   J=Joy(1)
  1265.                   Y=1 : B=0
  1266.                   Pen 0
  1267.                   For N=SCR To SCR+20
  1268.                      Locate 2,Y : Print "                                                                            "
  1269.                      Locate 2,Y : Print _DOC$(N)
  1270.                      Inc Y
  1271.                   Next 
  1272.                   Add SCR,2
  1273.                Until J=0 or SCR>124
  1274.             End If 
  1275.             If OPTCNT=1 and J=16 and SCR>0
  1276.                _BOX[490,180,538,194,0,2,0]
  1277.                Repeat 
  1278.                   J=Joy(1)
  1279.                   Y=1 : B=0
  1280.                   Pen 0
  1281.                   For N=SCR To SCR+20
  1282.                      Locate 2,Y : Print "                                                                            "
  1283.                      Locate 2,Y : Print _DOC$(N)
  1284.                      Inc Y
  1285.                   Next 
  1286.                   SCR=SCR-2
  1287.                   If SCR<0
  1288.                      SCR=0
  1289.                   End If 
  1290.                Until J=0 or SCR=0
  1291.             End If 
  1292.             If OPTCNT=3
  1293.                _BOX[589,180,638,194,0,2,0]
  1294.                Exit 
  1295.             End If 
  1296.          End If 
  1297.          If J=4 and OPTCNT>1
  1298.             'left
  1299.             Dec OPTCNT
  1300.          End If 
  1301.          If J=8 and OPTCNT<3
  1302.             'right 
  1303.             Inc OPTCNT
  1304.          End If 
  1305.          BXT=62 : BX=490
  1306.          For N=1 To 3
  1307.             If N=OPTCNT
  1308.                _BOX[BX,180,BX+48,194,2,0,3]
  1309.                Paper 3 : Pen 0
  1310.             Else 
  1311.                _BOX[BX,180,BX+48,194,2,0,1]
  1312.                Paper 1 : Pen 2
  1313.             End If 
  1314.             Read R$
  1315.             Locate BXT,23 : Print R$
  1316.             Add BXT,6
  1317.             Add BX,49
  1318.          Next 
  1319.          Restore 
  1320.          Repeat : J=Joy(1) : Until J=0
  1321.       End If 
  1322.    Loop 
  1323.    '  
  1324.    For N=36 To 316 Step 8
  1325.       Screen Display 2,130,N,640,200
  1326.       Wait Vbl 
  1327.    Next 
  1328.    Screen Close 2
  1329.    Close 1
  1330. End Proc
  1331. Procedure _LOADBOARD
  1332.    For N=311 To 235 Step -2
  1333.       Screen Display 2,130,N,320,56
  1334.       Wait Vbl 
  1335.    Next 
  1336.    Screen Copy 2 To 1
  1337.    Screen 1
  1338.    Get Palette 2
  1339.    Screen Close 2
  1340. End Proc