home *** CD-ROM | disk | FTP | other *** search
/ AMOS PD CD / amospdcd.iso / 251-275 / apd258 / eric.amos / eric.amosSourceCode < prev    next >
AMOS Source Code  |  1991-07-05  |  12KB  |  479 lines

  1. Screen Open 0,320,200,16,Lowres : Curs Off : Flash Off : Cls 0
  2. Dim F(19,12),M(2,200)
  3. Global CHASER_DELAY,REPLAY,WON,ROWTOP,SPECIAL,T$
  4. Global CHEAT,LIVES,DEAD,ALIVE,S,X,Y,XP,YP,TX,TY,TP,COUNT,P,F(),M()
  5. INITIALIZE
  6. 'CHEAT=1 
  7. CHEAT=0
  8. CHASER_DELAY=400 : Rem delay before chaser starts 
  9. GAME
  10. End 
  11. Procedure GAME
  12.    '----------------main loop---------------------- 
  13.    Do 
  14.       WON=0
  15.       LIVES=4 : ROWTOP=11
  16.       For S=1 To 5
  17.          If S=2 or S=4 Then SPECIAL=-1 Else SPECIAL=0
  18.          Auto View Off 
  19.          Unpack 7 To 1 : Double Buffer : 
  20.          For C=0 To 31 : Colour C,$0 : Next 
  21.          For N=0 To LIVES-1 : Paste Bob N*14+10,210,1 : Next 
  22.          '
  23.          '
  24.          STAGE[10+S*7,CHEAT]
  25.          If LIVES=0
  26.             S=S-1
  27.             REPLAY
  28.             Ink 2,1
  29.             Text 92,115,"G A M E   O V E R"
  30.             While Inkey$="" and Joy(1)=0 : Wend 
  31.             Exit 
  32.          End If 
  33.          If ALIVE=0
  34.             S=S-1
  35.             REPLAY
  36.             Text 90,100,"Press Fire Button"
  37.             While Inkey$="" and Joy(1)=0 : Wend 
  38.          End If 
  39.          Fade 5 : Wait 75
  40.       Next S
  41.       If ALIVE=0 Then Goto FINI : 
  42.       SIX:
  43.       S=6 : ROWTOP=59
  44.       Auto View Off : Unpack 7 To 1 : Double Buffer 
  45.       For C=0 To 31 : Colour C,$0 : Next 
  46.       For N=0 To LIVES-1 : Paste Bob N*14+10,210,1 : Next 
  47.       STAGE[0,0]
  48.       '----------if got to front door----------- 
  49.       If WON
  50.          Mvolume 35 : Music 1
  51.          Cls 0 : Curs Off : Pen 2 : Paper 0 : Locate 1,10 : Print "Brills ,You've saved Eric and the World"
  52.          Locate 7,14 : Print "Hit Fire for another Go..."
  53.          While Joy(1)=0 : Wend 
  54.          For N=35 To 1 Step -1 : Mvolume N : Wait 2 : Next : Music Off 
  55.       End If 
  56.       If LIVES=0
  57.          S=S-1
  58.          REPLAY
  59.          Ink 2,1
  60.          Text 92,115,"G A M E   O V E R"
  61.          While Inkey$="" and Joy(1)=0 : Wend 
  62.          Exit 
  63.       End If 
  64.       If ALIVE=0
  65.          S=S-1
  66.          REPLAY
  67.          While Inkey$="" and Joy(1)=0
  68.          Wend 
  69.          Goto SIX
  70.       End If 
  71.       FINI:
  72.    Loop 
  73. End Proc
  74. Procedure INITIALIZE
  75.  Load "ericmus.abk"
  76.    Mvolume 35 : Music 1
  77.    Cls 0
  78.    Screen Open 1,320,250,32,Lowres
  79.    Curs Off : Hide : Flash Off : Cls 0
  80.    '   Load Iff "df1:willietitle.iff" 
  81.    '   Spack 1 To 8 
  82.    Auto View Off 
  83.    Unpack 8 To 1 : For N=0 To 31 : Colour N,$0 : Next 
  84.    Auto View On : View 
  85.    Fade 2 To -1
  86.    Timer=0
  87.    Repeat 
  88.       Exit If Inkey$<>"" or Joy(1)<>0
  89.    Until Timer=250
  90.    Fade 2 : Wait 30
  91.    '   Load Iff "df1:willieinst.iff"
  92.    '   Spack 1 To 9 
  93.    Auto View Off 
  94.    Unpack 9 To 1 : For N=0 To 31 : Colour N,$0 : Next 
  95.    Auto View On : View 
  96.    Fade 2 To -1
  97.    While Inkey$="" and Joy(1)=0 : Wend 
  98.    Fade 3 : Wait 45
  99.    For N=35 To 1 Step -1 : Mvolume N : Wait 2 : Next : Music Off 
  100.    Priority Reverse On 
  101.    'Unpack 7 To 1 
  102.    'Load Iff "df1:willie.iff" 
  103.    'Spack 1 To 7
  104.    'Unpack 7 To 1 
  105.    'Double Buffer 
  106.    'Load "df1:williesprite.abk" 
  107.    'Load "ericsamples.abk"
  108.    For N=10 To 16 : Hot Spot N,4,4 : Next 
  109.    For N=1 To 9 : Hot Spot N,4,3 : Next 
  110. End Proc
  111. Procedure STAGE[BOMBS,SEE]
  112.    ' For N=1 To 10 : Colour 1,N*($118) : Play Rnd(60)+10,1 : Wait 5 : Next  
  113.    Colour 1,S*($118)
  114.    For N=1 To 50 : M(1,N)=0 : M(2,N)=0 : Next 
  115.    P=0
  116.    Ink 1,0
  117.    Ink 12
  118.    Text 288,220,Str$(S)
  119.    Text 192,220,Str$(BOMBS)
  120.    ZEROARAY
  121.    BOMBSPUT[BOMBS,SEE]
  122.    If SPECIAL Then MAKEGAP
  123.    Auto View On : View : Fade 1 To -1 : Wait 15
  124.    X=156 : Y=188 : TX=156 : TY=188 : M(1,1)=10 : M(2,1)=12
  125.    Bob 1,X,Y,1
  126.    TP=1 : P=1 : CHASER=0 : ALIVE=-1
  127.    XP=(X+4)/16 : YP=(Y+4)/16
  128.    SEARCH
  129.    '
  130.    While Joy(1)=0 : Wend 
  131.    Timer=0
  132.    Channel 2 To Bob 2
  133.    T$="Anim 0,(10,2)(11,2)(12,2)(11,2) ; "
  134.    While ALIVE
  135.       Wait Vbl 
  136.       If Jleft(1) Then MOVELEFT : NEWPOS : SEARCH
  137.       If Jright(1) Then MOVERIGHT : NEWPOS : SEARCH
  138.       If Jup(1) Then MOVEUP : NEWPOS : SEARCH
  139.       If Jdown(1) Then MOVEDOWN : NEWPOS : SEARCH
  140.       'Test if top reached 
  141.       If YP=1
  142.          Sam Play 3,5,7000
  143.          Exit 
  144.       End If 
  145.       If S=6 and XP=10 and YP=4 Then WON=-1 : Exit 
  146.       If Timer>CHASER_DELAY
  147.          Bob 2,TX,TY,10
  148.          CHASER=-1
  149.          Amal 2,T$ : Amal On 2
  150.       End If 
  151.       If CHASER and Timer>70 Then TRACKER
  152.       MISS:
  153.       'check for hit mine or caught by chaser
  154.       If(F(XP,YP)=1) or(X=TX and Y=TY and CHASER)
  155.          Bob Off 1 : Bob Off 2
  156.          BIG_EXPLO[X,Y,45,10,200,5,1]
  157.          ALIVE=0
  158.          LIVES=LIVES-1
  159.          Exit 
  160.       End If 
  161.    Wend 
  162. End Proc
  163. Procedure TRACKER
  164.    Timer=0
  165.    Sam Play 2,1,8000
  166.    If TX+4<M(1,TP)*16
  167.       Repeat : Inc TX : Wait Vbl : Bob 2,TX,TY, : Until TX+4=M(1,TP)*16
  168.       Goto FIN
  169.    End If 
  170.    If TX+4>M(1,TP)*16
  171.       Repeat : Dec TX : Wait Vbl : Bob 2,TX,TY, : Until TX+4=M(1,TP)*16
  172.       Goto FIN
  173.    End If 
  174.    If TY+4<M(2,TP)*16
  175.       Repeat : Inc TY : Wait Vbl : Bob 2,TX,TY, : Until TY+4=M(2,TP)*16
  176.       Goto FIN
  177.    End If 
  178.    If TY+4>M(2,TP)*16
  179.       Repeat : Dec TY : Wait Vbl : Bob 2,TX,TY, : Until TY+4=M(2,TP)*16
  180.    End If 
  181.    FIN:
  182.    Inc TP
  183.    If TP>P Then TP=P
  184.    TX=X Bob(2)
  185.    TY=Y Bob(2)
  186. End Proc
  187. Procedure REPLAY
  188.    REPLAY=-1
  189.    X=156 : Y=188
  190.    Bob 1,X,Y,
  191.    Ink 2
  192.    For A=1 To 19
  193.       For B=1 To 11
  194.          If F(A,B)=1 Then Circle A*16,B*16,2
  195.       Next 
  196.    Next 
  197.    Clear Key 
  198.    For N=1 To P-1
  199.       Sam Play 2,6,20000 : Sam Play 2,6,20000
  200.       Wait 1
  201.       If M(1,N+1)<M(1,N)
  202.          For Z=1 To M(1,N)-M(1,N+1)
  203.             MOVELEFT
  204.             NEWPOS
  205.          Next Z
  206.          Goto N
  207.       End If 
  208.       If M(1,N+1)>M(1,N)
  209.          For Z=1 To M(1,N+1)-M(1,N)
  210.             MOVERIGHT
  211.             NEWPOS
  212.          Next Z
  213.          Goto N
  214.       End If 
  215.       If M(2,N+1)<M(2,N)
  216.          For Z=1 To M(2,N)-M(2,N+1)
  217.             MOVEUP
  218.             NEWPOS
  219.          Next Z
  220.          Goto N
  221.       End If 
  222.       If M(2,N+1)>M(2,N)
  223.          For Z=1 To M(2,N+1)-M(2,N)
  224.             MOVEDOWN
  225.             NEWPOS
  226.          Next Z
  227.          Goto N
  228.       End If 
  229.    N: Next 
  230.    BIG_EXPLO[X,Y,45,10,200,5,1]
  231.    REPLAY=0
  232. End Proc
  233. Procedure ZEROARAY
  234.    For X=1 To 19
  235.       For Y=1 To 12
  236.          F(X,Y)=0
  237.    Next : Next 
  238. End Proc
  239. Procedure BOMBSPUT[HOWMANY,SEE]
  240.    If S=6 Then Goto FINALSTAGE
  241.    For N=1 To HOWMANY
  242.       REP: X=Rnd(18)+1 : Y=Rnd(9)+2
  243.       If F(X,Y)=1 Then Goto REP
  244.       If SPECIAL and Y=6 Then Goto REP
  245.       If SPECIAL and Y=5 Then Goto REP
  246.       Ink 2
  247.       F(X,Y)=1
  248.       If SEE=1
  249.          Circle X*16,Y*16,2
  250.       End If 
  251.       'Locate 1,28 : Print X,Y 
  252.       'Wait Key  
  253.    Next 
  254.    Pop Proc
  255.    FINALSTAGE:
  256.    Ink 2
  257.    Restore BOMBPLAN
  258.    For B=4 To 12 : For A=1 To 19
  259.          Read P
  260.          If P=1
  261.             F(A,B)=1
  262.             If CHEAT=1
  263.                Circle A*16,B*16,2
  264.             End If 
  265.          Else 
  266.             F(A,B)=0
  267.          End If 
  268.    Next A : Next B
  269.    BOMBPLAN:
  270.    Data 0,0,1,0,0,0,0,1,0,0,0,1,0,0,0,0,1,0,0
  271.    Data 1,0,1,0,1,0,1,1,1,0,1,1,1,0,1,0,1,0,1
  272.    Data 0,0,1,0,1,0,0,0,0,0,0,0,0,0,1,0,1,0,0
  273.    Data 0,0,0,0,0,1,1,0,1,1,1,0,1,1,0,0,0,0,0
  274.    Data 0,1,0,1,0,0,0,0,1,1,1,0,0,0,0,1,0,1,0
  275.    Data 1,1,0,1,0,0,1,1,0,0,0,1,1,0,0,1,0,1,1
  276.    Data 0,0,0,0,0,1,1,0,0,1,0,0,1,1,0,0,0,0,0
  277.    Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  278.    Data 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  279.    If Rnd(100)>50
  280.       F(7,6)=1
  281.       If CHEAT=1
  282.          Circle 7*16,6*16,3
  283.       End If 
  284.    Else 
  285.       F(13,6)=1
  286.       If CHEAT=1
  287.          Circle 13*16,6*16,3
  288.       End If 
  289.    End If 
  290.    If Rnd(100)>50
  291.       F(9,6)=1
  292.       If CHEAT=1
  293.          Circle 9*16,6*16,3
  294.       End If 
  295.    Else 
  296.       F(11,6)=1
  297.       If CHEAT=1
  298.          Circle 11*16,6*16,3
  299.       End If 
  300.    End If 
  301.    Ink 0
  302.    Bar 0,0 To 320,55
  303.    Bob 4,133,28,17
  304. End Proc
  305. Procedure MAKEGAP
  306.    '======================== for gap =====================
  307.    Ink 0 : Bar 0,89 To 320,103
  308.    Bob 3,-10,93,13
  309.    Channel 3 To Bob 3
  310.    S$="Anim 0,(13,4)(14,4)(15,4) ; F: L X=-10 ; L Y=93 ; M 320,0,320 ; J F ;"
  311.    Amal 3,S$
  312.    Amal On 3
  313.    '======================================================
  314. End Proc
  315. Procedure SEARCH
  316.    COUNT=0
  317.    Gosub ABOVE
  318.    Gosub BELOW
  319.    Gosub LEFT
  320.    Gosub RIGHT
  321.    Ink 19,0
  322.    Text 104,240,Str$(COUNT)
  323.    If COUNT>0
  324.       For N=1 To COUNT : Sam Play 1,3,7800 : Wait 10 : Next 
  325.    End If 
  326.    'store location in array M 
  327.    M(1,P)=XP
  328.    M(2,P)=YP
  329.    Pop Proc
  330.    ABOVE: A=XP : B=YP-1
  331.    If B=0 Then Return 
  332.    If F(A,B)=1 Then COUNT=COUNT+1
  333.    Return 
  334.    BELOW: A=XP : B=YP+1
  335.    If B=13 Then Return 
  336.    If F(A,B)=1 Then COUNT=COUNT+1
  337.    Return 
  338.    LEFT: A=XP-1 : B=YP
  339.    If A=0 Then Return 
  340.    If F(A,B)=1 Then COUNT=COUNT+1
  341.    Return 
  342.    RIGHT: A=XP+1 : B=YP
  343.    If A=20 Then Return 
  344.    If F(A,B)=1 Then COUNT=COUNT+1
  345.    Return 
  346. End Proc
  347. Procedure NEWPOS
  348.    X=X Bob(1) : Y=Y Bob(1)
  349.    XP=(X+4)/16 : YP=(Y+4)/16
  350. End Proc
  351. Procedure MOVELEFT
  352.    Channel 1 To Bob 1
  353.    If X-16<11 Then Pop Proc
  354.    L$="Anim 1,(8,4)(9,4)(8,4)(9,4) ; "
  355.    L$=L$+"Move -16,0,16 ; "
  356.    Sam Play 2,6,20000 : Sam Play 2,6,20000
  357.    Amal 1,L$
  358.    Amal On 1
  359.    Wait 16
  360.    Amal Off 1
  361.    Inc P
  362. End Proc
  363. Procedure MOVERIGHT
  364.    Channel 1 To Bob 1
  365.    If X+16>300 Then Pop Proc
  366.    R$="Anim 1,(6,4)(7,4)(6,4)(7,4) ; "
  367.    R$=R$+"Move 16,0,16 ; "
  368.    Sam Play 2,6,20000 : Sam Play 2,6,20000
  369.    Amal 1,R$
  370.    Amal On 1
  371.    Wait 16
  372.    Amal Off 1
  373.    Inc P
  374. End Proc
  375. Procedure MOVEUP
  376.    Channel 1 To Bob 1
  377.    If REPLAY Then Goto MISSIT
  378.    If Y-16<ROWTOP Then Pop Proc
  379.    If SPECIAL and YP=7 and Point(X,Y-10)<>0 Then Amal Freeze 3 : Gosub MOVETOGETHER
  380.    If SPECIAL and YP=7 and Point(X,Y-12)=0 Then Pop Proc
  381.    MISSIT:
  382.    U$="Anim 1,(1,2)(2,2)(3,2)(4,2)(5,2)(4,2)(3,2)(2,2) ; "
  383.    U$=U$+"Move 0,-16,16 ; "
  384.    Sam Play 2,6,20000 : Sam Play 2,6,20000
  385.    Amal 1,U$
  386.    Amal On 1
  387.    Wait 16
  388.    Amal Off 1
  389.    Inc P
  390.    Pop Proc
  391.    MOVETOGETHER:
  392.    Amal Freeze 3
  393.    U$="Anim 1,(1,2)(2,2)(3,2)(4,2)(5,2)(4,2)(3,2)(2,2) ; "
  394.    U$=U$+"Move 0,-16,16 ; "
  395.    Amal 1,U$
  396.    Amal On 1
  397.    Wait 16
  398.    Amal Off 1
  399.    Inc P
  400.    NEWPOS
  401.    SEARCH
  402.    While Jup(1) : Wend 
  403.    Amal On 3
  404.    Repeat 
  405.       Wait Vbl 
  406.       Bob 1,X Bob(3),Y Bob(3)-1,
  407.    Until Jup(1)
  408.    XX=X Bob(1)
  409.    Bob 1,XX-XX mod 16+12,,
  410.    Inc P
  411.    NEWPOS
  412.    SEARCH
  413.    Amal On 1
  414.    Return 
  415. End Proc
  416. Procedure MOVEDOWN
  417.    Channel 1 To Bob 1
  418.    If Y+16>200 Then Pop Proc
  419.    If SPECIAL and YP=5 Then Pop Proc
  420.    D$="Anim 1,(1,2)(2,2)(3,2)(4,2)(5,2)(4,2)(3,2)(2,2) ; "
  421.    D$=D$+"Move 0,16,16 ; "
  422.    Sam Play 2,6,20000 : Sam Play 2,6,20000
  423.    Amal 1,D$
  424.    Amal On 1
  425.    Wait 16
  426.    Amal Off 1
  427.    Inc P
  428. End Proc
  429. Procedure BIG_EXPLO[X,Y,ANG,SPEED,REACH,FIRSTBOB,REP]
  430.    Degree 
  431.    Sam Play 3,4,4000
  432.    For T=1 To REP
  433.       For R=1 To REACH Step SPEED
  434.          B=FIRSTBOB-1
  435.          For N=0 To(360/ANG)-1
  436.             Inc B
  437.             Bob B,X+R*Sin(N*ANG),Y+R*Cos(N*ANG),16
  438.          Next 
  439.       Next 
  440.       For C=1 To B : Bob Off C : Next 
  441.    Next T
  442. End Proc
  443. Procedure MAKEGRID
  444.    Ink 2
  445.    For X=8 To 312 Step 16
  446.       Draw X,8 To X,200
  447.    Next 
  448.    For Y=8 To 208 Step 16
  449.       Draw 8,Y To 312,Y
  450.    Next 
  451.    Ink 12
  452.    For X=10 To 300 Step 16
  453.       Bar X,10 To X+12,22
  454.       Bar X,186 To X+12,198
  455.    Next 
  456.    Ink 1
  457.    For X=10 To 300 Step 16
  458.       For Y=26 To 180 Step 16
  459.          Bar X,Y To X+12,Y+12
  460.    Next : Next 
  461. End Proc
  462. '
  463. '------------------------------------------------------------
  464. '                                                            
  465. '----------------------- VARIABLE LIST ----------------------
  466. '
  467. ' XP,YP are the grid positions of Eric 
  468. ' X,Y are the screen positions of Eric 
  469. ' TX,TY are the screen positions of the chaser 
  470. ' LIVES - Lives (1-4)  
  471. ' ALIVE = -1 if Current Life Alive 
  472. ' CHASER= -1 if Chaser is moving 
  473. ' S = Stage  
  474. ' WON = -1 if Eric gets to front door  
  475. ' M(2,200) is record of Eric's movements (1,200)=X (2,200)=Y 
  476. ' F(19,12) is representation of Minefield
  477. ' P is incremented every time Eric moves 
  478. ' TP is incremented every time the Chaser moves  
  479. '