home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 451-475 / apd469 / samplegame.amos / samplegame.amosSourceCode < prev    next >
AMOS Source Code  |  1993-01-25  |  9KB  |  454 lines

  1. '
  2. '  Sample Game by David C. May 
  3. '
  4. '------------------------------- 
  5. If Length(1)=0 Then Load "SAMPLE.ABK"
  6. If Length(2)=0 Then Load "NUMBERS.ABK"
  7. If Length(5)=0 Then Load "SOUNDS.ABK"
  8. If Length(3)=0 Then Load "MUSIC.ABK"
  9. Make Mask 
  10. Make Icon Mask 
  11. Hide 
  12. Screen Open 0,300,400,32,0
  13. Screen Display 0,128,54,300,192 : Flash Off : Curs Off : Cls 0
  14. Screen Open 1,640,9,4,Hires
  15. Screen Display 1,128,45,640,9 : Flash Off : Curs Off : Cls 0
  16. Get Icon Palette 
  17. Auto View Off 
  18. '
  19. NUMG=3
  20. Dim PAF(5),GX(NUMG),GY(NUMG),GF(NUMG),GS(NUMG),GD(NUMG),AGX(NUMG),AGY(NUMG),GI(NUMG),GR(NUMG)
  21. Dim DX(3),DY(3),JDR(15)
  22. Dim DR(3)
  23. Restore JDRS
  24. For A=0 To 15 : Read JDR(A) : Next 
  25. '
  26. PAF(0)=0 : PAF(1)=1 : PAF(2)=2 : PAF(3)=3 : PAF(4)=2 : PAF(5)=1
  27. DX(0)=0 : DY(0)=-1
  28. DX(1)=1 : DY(1)=0
  29. DX(2)=0 : DY(2)=1
  30. DX(3)=-1 : DY(3)=0
  31. '
  32. NEWGAME:
  33. LEVEL=1 : MEN=4
  34. Unpack 6 To 0
  35. Double Buffer 
  36. Screen Offset 0,,51
  37. View 
  38. Bob 0,150,139,125
  39. Bob Draw 
  40. Screen Swap : Wait Vbl : Bob Clear 
  41. Repeat 
  42. Until Joy(1)=16
  43. SCORE=999999 : AD=-SCORE : ZSHOWSCORE
  44. Screen 1
  45. Ink 1
  46. Paper 0
  47. Gr Writing 0
  48. Text 0,6,"Sample Game by David C. May"
  49. Text 280,6,"Level"+Str$(LEVEL)+"      Lives"+Str$(MEN)+"     Score"
  50. Screen 0
  51. LEVEL:
  52. PEL=504
  53. FRUIT=Min(LEVEL/3,2)
  54. Screen 0
  55. Unpack 6 To 0
  56. Flash 31,"(f00,20)(fff,20)"
  57. Flash 30,"(800,20)(888,20)"
  58. Screen Offset 0,,51
  59. Double Buffer 
  60. Autoback 0
  61. Bob Update Off 
  62. View 
  63. DGPTR=Varptr(DG$)
  64. NEWMAN:
  65. Dec MEN : If MEN<0 Then Music Off : Goto NEWGAME
  66. PDEAD=0
  67. FRUITON=0 : SM=0 : SMTIMER=0
  68. Screen 1
  69. Ink 0 : Paper 0
  70. Bar 328,0 To 343,8
  71. Bar 432,0 To 455,8
  72. Ink 1
  73. Text 320,6,Str$(LEVEL)
  74. Text 424,6,Str$(MEN)
  75. Screen 0
  76. PX=7 : PY=7 : PF=0 : PD=1 : APX=PX*20+8 : APY=PY*20 : PI=2
  77. For G=0 To NUMG
  78.  GX(G)=7+Rnd(1) : GY(G)=6 : GF(G)=0 : GS(G)=0 : GD(G)=Rnd(1)*2+1
  79.  GI(G)=G mod 5 : AGX(G)=GX(G)*20+DX(GD(G))*GI(G)*4 : AGY(G)=GY(G)*20 : GR(G)=1
  80. Next 
  81. ZSHOWGUYS
  82. View 
  83. Screen Swap : Wait Vbl : Bob Clear 
  84. Bob 2+NUMG,150,100,124
  85. Bob Draw 
  86. Screen Swap : Wait Vbl : Bob Clear 
  87. Music Off : Wait 2
  88. Sam Play 3,6,9000 : Wait 1
  89. Sam Play 12,6,9000
  90. Wait 90
  91. Bob Off 2+NUMG
  92. Bob Draw 
  93. Randomize Timer
  94. SLOWGHOSTS=0
  95. Music 1
  96. LPX=0 : LPY=0 : LPI=0 : SCAREDTIMER=0
  97. MAIN:
  98. View : Screen Swap : Wait Vbl : Bob Clear 
  99. SLOWGHOSTS=1-SLOWGHOSTS
  100. If SCAREDTIMER>0
  101.  SCAREDTIMER=Max(0,SCAREDTIMER-1)
  102.  If SCAREDTIMER<25
  103.   Q=(SCAREDTIMER and 4)/4
  104.   Colour 15,$55A+Q*$AA5
  105.   Colour 16,$225+Q*$663
  106.  Else 
  107.   Colour 15,$55A
  108.   Colour 16,$225
  109.  End If 
  110.  If SCAREDTIMER=0
  111.   For G=0 To NUMG
  112.    If GR(G)=-1
  113.     GR(G)=1
  114.    End If 
  115.   Next 
  116.  End If 
  117. Else 
  118.  Colour 15,$55A
  119.  Colour 16,$225
  120. End If 
  121. If Rnd(500)=0 Then FRUITON=1
  122. J=Joy(1)
  123. JDIRECT
  124. MC=0
  125. If PI=0
  126.  MC=Point(APX+DX(PD)*10,APY+DY(PD)*10)
  127.  If DR>=0
  128.   CHECK=Point(APX+DX(DR)*10,APY+DY(DR)*10)
  129.   If CHECK<>15 and CHECK<>29
  130.    PD=DR
  131.    MC=0
  132.   End If 
  133.  End If 
  134. End If 
  135. KPX=0 : KPY=0
  136. If MC<>15 and MC<>29
  137.  If DR>=0 and PI>0 and Abs(PD-DR)=2
  138.   Add PX,DX(PD)
  139.   Add PY,DY(PD)
  140.   PD=DR : PI=5-PI
  141.  End If 
  142.  Add PF,1,0 To 5
  143.  Add APX,DX(PD)*4
  144.  Add APY,DY(PD)*4
  145.  Add PI,1,0 To 4
  146.  If PI=0
  147.   Add PX,DX(PD)
  148.   Add PY,DY(PD)
  149.  End If 
  150.  If(PI=0 or PI=3) and LPX=0
  151.   CPTX=PX*20+DX(PD)*(-10*(PI=3))
  152.   CPTY=PY*20+DY(PD)*(-10*(PI=3))
  153.   CHECK=Point(CPTX,CPTY)
  154.   If CHECK=12
  155.    KPX=CPTX : KPY=CPTY : KPI=118
  156.    Dec PEL
  157.    AD=10
  158.    Sam Play 1,Rnd(2)+1,15000
  159.   End If 
  160.   If CHECK=31
  161.    KPX=CPTX : KPY=CPTY : KPI=120
  162.    Dec PEL
  163.    AD=100
  164.    EATEN=0
  165.    Sam Play 1,9,12000
  166.    For G=0 To NUMG
  167.     If GR(G)=1
  168.      GR(G)=-1
  169.      GI(G)=(5-GI(G)) mod 5
  170.      If GI(G)>0
  171.       Add GX(G),DX(GD(G)) : Add GY(G),DY(GD(G))
  172.      End If 
  173.      GD(G)=(GD(G)+2) mod 4
  174.     End If 
  175.    Next 
  176.    SCAREDTIMER=Max(60,180-LEVEL*10)
  177.   End If 
  178.  End If 
  179.  If PX=0 and PI=0
  180.   PX=15 : APX=300-16 : PI=4
  181.  End If 
  182.  If PX=15 and PI=0
  183.   PX=0 : APX=0+16 : PI=4
  184.  End If 
  185. End If 
  186. PGOTONE=0
  187. For G=0 To NUMG
  188.  If Not(SLOWGHOSTS=1 and GR(G)=-1)
  189.   For GDUMMY=0 To -(GR(G)=0)
  190.    If GI(G)=0
  191.     MC=Point(AGX(G)+DX(GD(G))*10,AGY(G)+DY(GD(G))*10)
  192.     Gosub THINK
  193.     DR=DR(1)
  194.     CHECK=Point(AGX(G)+DX(DR)*10,AGY(G)+DY(DR)*10)
  195.     If CHECK<>15
  196.      GD(G)=DR
  197.     Else 
  198.      DR=DR(2)
  199.      CHECK=Point(AGX(G)+DX(DR)*10,AGY(G)+DY(DR)*10)
  200.      If CHECK<>15
  201.       GD(G)=DR
  202.      Else 
  203.       DR=DR(3)
  204.       CHECK=Point(AGX(G)+DX(DR)*10,AGY(G)+DY(DR)*10)
  205.       If CHECK<>15
  206.        GD(G)=DR
  207.       Else 
  208.        If MC=15
  209.         GD(G)=(2+GD(G)) mod 4
  210.        End If 
  211.       End If 
  212.      End If 
  213.     End If 
  214.    End If 
  215.    Add GF(G),1,0 To 3
  216.    Add AGX(G),DX(GD(G))*4
  217.    Add AGY(G),DY(GD(G))*4
  218.    Add GI(G),1,0 To 4
  219.    If GI(G)=0
  220.     Add GX(G),DX(GD(G))
  221.     Add GY(G),DY(GD(G))
  222.    End If 
  223.    If GX(G)=0 and GI(G)=0
  224.     GX(G)=15 : AGX(G)=300-4 : GI(G)=1
  225.    End If 
  226.    If GX(G)=15 and GI(G)=0
  227.     GX(G)=0 : AGX(G)=0+4 : GI(G)=1
  228.    End If 
  229.    If GR(G)=0
  230.     If GX(G)>6 and GX(G)<9 and GY(G)=6
  231.      GR(G)=1
  232.     End If 
  233.    End If 
  234.   Next 
  235.  End If 
  236.  If Abs(AGX(G)-APX)+Abs(AGY(G)-APY)<5
  237.   If GR(G)=-1
  238.    Inc EATEN
  239.    AD=AD+100*2^Min(EATEN,4)
  240.    SM=1+Min(EATEN,4) : SMTIMER=0
  241.    SX=APX : SY=APY
  242.    GR(G)=0
  243.    PGOTONE=1
  244.    Sam Play 2,9,7000
  245.   Else 
  246.    If GR(G)=1
  247.     PDEAD=1
  248.    End If 
  249.   End If 
  250.  End If 
  251. Next 
  252. If LPX
  253.  Paste Bob LPX-7,LPY-7,LPI
  254. End If 
  255. If KPX
  256.  Paste Bob KPX-7,KPY-7,KPI
  257.  ZSHOWGUYS
  258. Else 
  259.  ZSHOWGUYS
  260. End If 
  261. LPX=KPX : LPY=KPY : LPI=KPI
  262. If FRUITON
  263.  Bob 2+NUMG,152,140,121+FRUIT
  264.  If Abs(APX-152)+Abs(APY-140)<5
  265.   FRUITON=0 : Bob Off 2+NUMG
  266.   AD=AD+500*FRUIT
  267.   SM=5+FRUIT : SMTIMER=0
  268.   If SM=5
  269.    SM=1 : AD=AD+100
  270.   End If 
  271.   SX=APX : SY=APY
  272.   Sam Play 1,9,9000
  273.  End If 
  274. Else 
  275.  Bob Off 2+NUMG
  276. End If 
  277. ZSHOWSCORE
  278. Wait Vbl 
  279. Bob Draw 
  280. If PGOTONE
  281. End If 
  282. If PEL=0
  283.  PDEAD=0
  284.  Music Off : Wait 1
  285.  Screen Swap : Wait Vbl : Bob Clear 
  286.  Paste Bob LPX-7,LPY-7,LPI
  287.  Bob Draw 
  288.  For PF=PF To 0 Step -1
  289.   Screen Swap : Wait Vbl : Bob Clear : ZSHOWGUYS : Wait 2 : Bob Draw 
  290.  Next 
  291.  Sam Play 3,7,9000
  292.  For FR=0 To 6
  293.   PF=FR mod 6
  294.   Screen Swap : Wait Vbl : Bob Clear : ZSHOWGUYS : Wait 6 : Bob Draw 
  295.  Next 
  296.  Screen Swap : Wait Vbl : Bob Clear 
  297.  Wait 90
  298.  Sam Play 4,5,10000 : Wait 1
  299.  Sam Play 8,5,10000
  300.  For G=0 To NUMG
  301.   Bob Off G+1
  302.  Next 
  303.  Bob Draw 
  304.  Screen Swap : Wait Vbl : Bob Clear 
  305.  Flash 15,"(55a,20)(fff,20)"
  306.  Flash 16,"(225,20)(888,20)"
  307.  Wait 120
  308.  Inc LEVEL
  309.  Inc MEN
  310.  Goto LEVEL
  311. End If 
  312. If PDEAD
  313.  Sam Play 3,4,12000
  314.  Screen Swap : Wait Vbl : Bob Clear 
  315.  If LPX
  316.   Paste Bob LPX-7,LPY-7,LPI
  317.  End If 
  318.  Wait 90
  319.  For G=0 To NUMG
  320.   Bob Off G+1
  321.  Next 
  322.  Sam Play 3,10,19000
  323.  For A=101 To 107
  324.   Bob 0,APX,APY,A
  325.   Bob Draw 
  326.   Screen Swap : Wait Vbl : Bob Clear 
  327.   Wait 7
  328.  Next 
  329.  Sam Play 3,8,25000
  330.  For A=108 To 109
  331.   Bob 0,APX,APY,A
  332.   Bob Draw 
  333.   Screen Swap : Wait Vbl : Bob Clear 
  334.   Wait 2
  335.  Next 
  336.  Bob 0,,,128
  337.  Bob Draw 
  338.  Screen Swap : Wait Vbl : Bob Clear 
  339.  Wait 60
  340.  Goto NEWMAN
  341. End If 
  342. Goto MAIN
  343. '
  344. THINK:
  345. XAS=PX : YAS=PY
  346. If PI>0 Then Add XAS,DX(PD) : Add YAS,DY(PD)
  347. GR=GR(G)
  348. If GR=0 Then GR=1 : XAS=7+Rnd(1) : YAS=5-(GY(G)=5 and GX(G)>6 and GX(G)<9)
  349. GOX=GR*Sgn(XAS-GX(G))
  350. J=-(GOX<0)*4-(GOX>0)*8
  351. JDIRECT
  352. DR1=DR
  353. GOY=GR*Sgn(YAS-GY(G))
  354. J=-(GOY<0)-(GOY>0)*2
  355. JDIRECT
  356. DR2=DR
  357. SMD=GD(G)
  358. OPD=(SMD+2) mod 4
  359. If DR1=-1 Then DR1=DR2 : If DR1=-1 Then DR1=SMD : DR2=SMD
  360. If DR2=-1 Then DR2=DR1
  361. If Rnd(1)=0 Then Swap DR1,DR2
  362. If Rnd(LEVEL*(3-(G mod 4))+1)=0 and GR(G)<>0 Then DR1=Rnd(3) : DR2=(DR1+Rnd(1)*2-1) mod 4
  363. If GY(G)=5 and GX(G)>6 and GX(G)<9 and GR(G)<>0
  364.  If DR1=2
  365.   DR1=0
  366.  End If 
  367.  If DR2=2
  368.   DR2=0
  369.  End If 
  370. End If 
  371. If DR1=SMD
  372.  If DR2=SMD
  373.   DR(1)=SMD
  374.   DR(2)=(SMD+Rnd(1)*2-1) mod 4
  375.   DR(3)=(DR(2)+2) mod 4
  376.  Else 
  377.   DR(1)=SMD
  378.   DR(2)=DR2
  379.   DR(3)=(DR(2)+2) mod 4
  380.  End If 
  381. Else 
  382.  If DR1=OPD
  383.   If DR2=OPD
  384.    DR(1)=(SMD+Rnd(1)*2-1) mod 4
  385.    DR(2)=(DR(1)+2) mod 4
  386.    DR(3)=SMD
  387.   Else 
  388.    DR(1)=DR2
  389.    DR(2)=SMD
  390.    DR(3)=(DR(1)+2) mod 4
  391.   End If 
  392.  Else 
  393.   DR(1)=DR1
  394.   DR(2)=SMD
  395.   DR(3)=(DR(1)+2) mod 4
  396.  End If 
  397. End If 
  398. If GY(G)=6 and GX(G)>6 and GX(G)<9
  399.  DR(1)=SMD
  400.  If Rnd(32)=0
  401.   DR(1)=0
  402.  End If 
  403.  DR(2)=SMD
  404.  DR(3)=SMD
  405. End If 
  406. Return 
  407. '
  408. Procedure ZSHOWSCORE
  409.  Shared SCORE,AD,MEN
  410.  If Int(SCORE/20000)<>Int((SCORE+AD)/20000) Then Inc MEN
  411.  A1$=Right$("00000"+Str$(SCORE)-" ",6)
  412.  Add SCORE,AD
  413.  A2$=Right$("00000"+Str$(SCORE)-" ",6)
  414.  Screen 1
  415.  For A=1 To 6
  416.   If Mid$(A1$,A,1)<>Mid$(A2$,A,1)
  417.    Paste Icon 528+A*8,0,1+Val(Mid$(A2$,A,1))
  418.   End If 
  419.  Next 
  420.  AD=0
  421.  Screen 0
  422. End Proc
  423. Procedure ZSHOWGUYS
  424.  Shared SM,SMTIMER,SX,SY
  425.  Shared APX,APY,PF,PD,PAF(),AGX(),AGY(),GF(),GS(),GD(),GR(),NUMG
  426.  Bob 0,APX,APY,PAF(PF)+1+PD*4
  427.  For G=0 To NUMG
  428.   If GR(G)=0
  429.    FRAME=97+GD(G)
  430.   Else 
  431.    FCOLOR=-(G mod 4)*(GR(G)=1)-4*(GR(G)=-1)
  432.    FRAME=FCOLOR*16+17+4*GD(G)+GF(G)
  433.   End If 
  434.   Bob G+1,AGX(G),AGY(G),FRAME
  435.  Next 
  436.  If SM
  437.   Bob 3+NUMG,SX,SY,109+SM
  438.   Inc SMTIMER
  439.   If SMTIMER=25
  440.    SM=0
  441.   End If 
  442.  Else 
  443.   Bob Off 3+NUMG
  444.  End If 
  445.  VPOINT=Min(208,Max(APY-96,0))
  446.  Screen Offset 0,,VPOINT
  447. End Proc
  448. Procedure JDIRECT
  449.  Shared J,PD,DR,JDR()
  450.  DR=JDR(J and 15)
  451. End Proc
  452. '
  453. JDRS:
  454. Data -1,0,2,-1,3,0,2,-1,1,0,2,-1,-1,-1,-1,-1