home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / sourcecode / games / gundemo.amos / gundemo.amosSourceCode < prev   
AMOS Source Code  |  1991-10-08  |  6KB  |  281 lines

  1. ' initialise some variables used in the game 
  2. Screen Open 0,320,256,16,Lowres
  3. Print "LOADING"
  4. XCAL=0 : YCAL=0
  5. MX=0 : MY=0 : MSHOT=0
  6. MXPTR=Varptr(MX)
  7. MYPTR=Varptr(MY)
  8. MSHOTPTR=Varptr(MSHOT)
  9. OLDSHOT=0
  10. ' Initialise Gun and screen
  11. Dreg(0)=0
  12. Call 6
  13. Dir$="df0:amos/"
  14. Load "demo.abk",1
  15. Hide : Curs Off : Cls 0 : Flash Off : Get Sprite Palette 
  16. Proc CALIBRATEGUN
  17. Proc GAMEPLAY
  18. '
  19. '
  20. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  21. '
  22. '
  23. ' Main game procedure controls everything
  24. Procedure GAMEPLAY
  25.    Shared MSHOT,MX,MY,QUALIFY,ROUND,FAIL,SCORE,HISCORE,HITS,SHOTS
  26.    QUALIFY=10 : ROUND=1 : FAIL=0
  27.    SCORE=0 : HISCORE=2000
  28.    Repeat 
  29.       Proc FRONTEND
  30.       Proc SETUP_SCREEN
  31.       Proc ROUNDPLAY
  32.       QUALIFY=QUALIFY+3
  33.       ROUND=ROUND+1
  34.       HITS=0 : SHOTS=0
  35.    Until FAIL=-1
  36. End Proc
  37. '
  38. '
  39. ' Set up screen for correct round number 
  40. Procedure FRONTEND
  41.    Shared QUALIFY,ROUND
  42.    Get Sprite Palette 
  43.    Cls 0
  44.    Pen 5
  45.    Locate 15,3 : Print "Round ";ROUND
  46.    Locate 0,6 : Print "You need to get    targets in 15 seconds"
  47.    Locate 7,9 : Print "Pull trigger to play demo"
  48.    Pen 15 : Locate 15,6 : Print QUALIFY
  49.    Pen 6
  50.    Wait 20
  51.    Proc TRIGWAIT : Rem waits till trigger is pulled 
  52.    Locate 14,12 : Print "Get Ready"
  53. End Proc
  54. '
  55. Procedure SETUP_SCREEN
  56.    Shared HISCORE,SCORE
  57.    Load Iff "Backdrop.iff",0
  58.    Colour 1,$F00
  59.    Ink 0 : Gr Writing 0
  60.    Text 76,11,"HITS"
  61.    Text 133,11,"SCORE"
  62.    Text 197,11,"HI-SCORE"
  63.    Text 281,11,"TIME"
  64.    Text 213,20,Str$(HISCORE)
  65.    Ink 15
  66.    Text 75,10,"HITS"
  67.    Text 132,10,"SCORE"
  68.    Text 196,10,"HI-SCORE"
  69.    Text 280,10,"TIME"
  70.    Text 212,19,Str$(HISCORE)
  71.    Gr Writing 0
  72.    Proc SCOREUPDATE
  73.    Hide 
  74.    Double Buffer 
  75.    Autoback 1
  76. End Proc
  77. '
  78. ' Play one round for one player
  79. Procedure ROUNDPLAY
  80.    Shared MSHOT,MX,MY,FAIL,SCORE,HITS
  81.    HITS=0 : SHOTS=0
  82.    Make Mask 
  83.    Timer=0 : TIME=15
  84.    Paper 0 : Pen 1
  85.    Proc TIMEUPDATE[TIME]
  86.    Proc HITSUPDATE
  87.    Repeat 
  88.       A=0
  89.       Proc TARGETSUP : Rem get targetsto appear 
  90.       Repeat 
  91.          Proc TRIGGER : Rem repeats until shot is fired
  92.          If MSHOT=-1 Then Proc SHOT[MX,MY]
  93.          Proc DETECT : Rem check for collision
  94.          If Timer>40 Then TIME=TIME-1 : Timer=0 : Proc TIMEUPDATE[TIME]
  95.          If TIME<=0 Then Goto OUT
  96.          Inc A : Rem time length of time targets have been on 
  97.       Until A>160 : Rem wait for 4 seconds then start again  
  98.       OUT:
  99.    Until TIME<=0
  100.    Proc STATS
  101. End Proc
  102. '
  103. Procedure STATS
  104.    Shared SHOTS,HITS,FAIL,QUALIFY
  105.    Flash Off 
  106.    Fade 1 : Wait 15
  107.    Amal Off : Bob Off 
  108.    Wait Vbl 
  109.    Screen Swap : Cls 0 : Screen Swap : Cls 0
  110.    Paper 0
  111.    Locate 13,20
  112.    If HITS<QUALIFY
  113.       Print " You failed"
  114.       FAIL=-1
  115.    Else 
  116.       Print "YOU DID IT!!"
  117.       FAIL=0
  118.    End If 
  119.    Paste Bob 85,35,10
  120.    Pen 9
  121.    Locate 10,9 : Print "You shot    bullets"
  122.    Locate 10,12 : Print "You hit "
  123.    Locate 10,15 : Print "You needed "
  124.    Locate 10,18 : Print "That's     hit rate"
  125.    HITS#=HITS : SHOTS#=SHOTS
  126.    If HITS=0 Then PERCENT#=0 Else PERCENT#=(HITS#/SHOTS#)*100
  127.    PERCENT=PERCENT#
  128.    Pen 8 : Locate 18,9 : Print SHOTS
  129.    Locate 17,12 : Print HITS
  130.    Locate 20,15 : Print QUALIFY
  131.    Locate 16,18 : Print PERCENT
  132.    Pen 4 : Locate 19,18 : Print "%"
  133.    Fade 2,0,$FFF,$FFA,$FE5,$FE0,$EB0,$C80,$B60,$BBB,$B77
  134.    Wait 10
  135.    Proc TRIGWAIT
  136. End Proc
  137. '
  138. Procedure TIMEUPDATE[TIME]
  139.    Rem update time
  140.    Autoback 1
  141.    Gr Writing 1
  142.    Ink 15,0 : Text 291,20,Str$(TIME)+" "
  143. End Proc
  144. '
  145. Procedure SCOREUPDATE
  146.    Shared SCORE
  147.    Rem update 
  148.    Autoback 1
  149.    Gr Writing 1
  150.    Ink 15,0 : Text 138,20,Str$(SCORE)
  151. End Proc
  152. '
  153. Procedure HITSUPDATE
  154.    Shared HITS
  155.    Autoback 1
  156.    Gr Writing 1
  157.    Ink 15,0 : Text 85,20,Str$(HITS)
  158. End Proc
  159. '
  160. Procedure DETECT
  161.    C=Bob Col(1,2 To 5) : Rem check for kill between bob 1(shot) and bobs 2-5(targets) 
  162.    If C=0 Then Pop Proc : Rem if no collision then don't continue
  163.    For G=2 To 5 : Rem but whick one is shot? 
  164.       If Col(G)=-1 Then TARGET=G
  165.    Next G
  166.    Proc TARGETSHOT[TARGET]
  167. End Proc
  168. '
  169. Procedure TARGETSHOT[TARGET]
  170.    Shared HITS,SCORE
  171.    If I Bob(TARGET)<>4 Then Pop Proc : Rem otherwise you can shoot explosions 
  172.    Rem target hit sequence
  173.    DEAD$="Anim 1,(5,5)(6,5)(7,5)(1,1);"
  174.    Amal TARGET,DEAD$
  175.    Amal On TARGET
  176.    HITS=HITS+1
  177.    SCORE=SCORE+100
  178.    Proc HITSUPDATE
  179.    Proc SCOREUPDATE
  180.    Boom 
  181. End Proc
  182. '
  183. Procedure TARGETSUP
  184.    PAUSE$="Anim 1,(1,50)" : Rem pause before they appear 
  185.    TURN$="(2,7)(3,7)(4,7);"
  186.    X=Rnd(200)
  187.    Y=Rnd(80)+130
  188.    For G=2 To 5
  189.       Channel G To Bob G : Bob G,X,Y,1
  190.       X=X+30
  191.       Amal G,PAUSE$+TURN$
  192.    Next G
  193.    Amal On 
  194. End Proc
  195. '
  196. Procedure SHOT[X,Y]
  197.    Shared SHOTS
  198.    SHOT$="A 1,(9,3)(1,1);"
  199.    Channel 1 To Bob 1 : Bob 1,X,Y,9
  200.    Shoot 
  201.    SHOTS=SHOTS+1
  202.    Amal 1,SHOT$
  203.    Amal On 1
  204. End Proc
  205. '
  206. '
  207. '
  208. ' Calibrate the gun
  209. Procedure CALIBRATEGUN
  210.    Shared MSHOT,XCAL,YCAL,MX,MY
  211.    Cls 0 : Pen 15 : Paper 0
  212.    Locate 6,5 : Print "Fire at target to calibrate"
  213.    Paste Bob 144,84,4
  214.    Bob Draw 
  215.    Wait Vbl 
  216.    Bob Draw 
  217.    OK=False
  218.    Repeat 
  219.       XCAL=0
  220.       YCAL=0
  221.       ' clear trigger
  222.       MSHOT=0
  223.       ' init trigger 
  224.       Dreg(0)=0
  225.       Call 6
  226.       Repeat 
  227.          Proc TRIGGER
  228.       Until MSHOT=-1
  229.       XCAL=160-MX
  230.       YCAL=100-MY
  231.       If XCAL<40 and XCAL>-40 Then OK=True
  232.       If YCAL<80 and YCAL>-80 Then OK=True
  233.    Until OK
  234.    Cls 0
  235. End Proc
  236. '
  237. ' Wait for the trigger to be pressed then return 
  238. Procedure TRIGWAIT
  239.    Shared MSHOT,MSHOTPTR
  240.    ' init trigger 
  241.    Dreg(0)=0
  242.    Call 6
  243.    MSHOT=0
  244.    Repeat 
  245.       MSHOT=Jleft(1)
  246.    Until MSHOT=-1
  247. End Proc
  248. '
  249. '
  250. ' Read the trigger and goto beampos if pressed, should be last routine called  
  251. Procedure TRIGGER
  252.    Shared MSHOT,OLDSHOT,MSHOTPTR
  253.    ' read trigger - valptr in a0
  254.    MSHOT=Jleft(1)
  255.    If MSHOT<>OLDSHOT
  256.       OLDSHOT=MSHOT
  257.       If MSHOT=-1 : Proc BEAMPOS : End If 
  258.    Else 
  259.       Wait Vbl 
  260.       MSHOT=0
  261.    End If 
  262. End Proc
  263. '
  264. ' Return values in  MX,MY,MSHOT = -1 if shot 
  265. Procedure BEAMPOS
  266.    Shared MSHOT,MX,MY,MXPTR,MYPTR,MSHOTPTR,XCAL,YCAL
  267.    Dreg(0)=2
  268.    Dreg(1)=Cop Logic
  269.    Dreg(2)=Phybase(0)
  270.    Dreg(3)=Phybase(1)
  271.    Dreg(4)=Phybase(2)
  272.    Dreg(5)=Phybase(3)
  273.    Areg(0)=MXPTR
  274.    Areg(1)=MYPTR
  275.    Areg(2)=MSHOTPTR
  276.    Call 6
  277.    MX=MX+XCAL
  278.    MY=MY+YCAL
  279.    If MY<0 or MY>255 Then MSHOT=0
  280. End Proc
  281. '