home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / UTILS / AMOS2.DMS / in.adf / Magic_Forest.AMOS / Magic_Forest.amosSourceCode
Encoding:
AMOS Source Code  |  1978-08-29  |  23.3 KB  |  801 lines

  1. Set Buffer 10
  2. Erase 1
  3. Erase 3
  4. Erase 4
  5. Erase 5
  6. Rem simple check to see if 1meg or better memory 
  7. MEG1=Sgn(Fast Free)-(Chip Free>500000)
  8. Rem just in case someone has all chip memory 
  9. Dir$="Amos_data:"
  10. Rem set arrays 
  11. Dim BOP$(10),BAD$(4,2),BADX(4,2),BADY(4,2),BADF(4,2),APLX(2),APLY(2),APLS(2),APLL(2)
  12. Dim APLSC(8),APLV(8),APLS$(8),APR(8),RSEL(16)
  13. NUMBAD=3 : Rem 3 baddies
  14. Rem read in baddy AMAL strings 
  15. APPLEREAD
  16. Gosub BADDYREAD
  17. SETGAMEOVER
  18. XSIZE=32 : YSIZE=32
  19. GTBLCKS
  20. Hide On 
  21. Do 
  22.    LVL=0
  23. If MEG1
  24.    Load "Music/Music.abk",4
  25.    Load "Music/MFRIFF.ABK",3
  26. BANK3=2
  27.    SWPMUSIC2
  28.    Music 1
  29.    Led Off 
  30. Else 
  31. Erase 3
  32. Erase 4
  33. End If 
  34.    Auto View Off 
  35.    Screen Open 0,320,200,16,Lowres
  36.    Curs Off : Flash Off 
  37.    Fade 1
  38.    Load "Magic_Forest/back1.abk",5
  39.    Unpack 5 To 0
  40.    If Length(1)>0
  41.       Bob Off 
  42.       Sprite Off 
  43.       Update 
  44.       Wait Vbl 
  45.       Erase 1
  46.    End If 
  47.    Hide On 
  48.    Load "Magic_Forest/MFtitle.ABK",1
  49.    TITLES
  50. Erase 5
  51. Bob Off 
  52.    Erase 1
  53.    Load "Magic_Forest/MFSPRITES.ABK",1
  54.    LIVES=3
  55.    SCORE=0
  56.    Repeat 
  57.       Load "Magic_Forest/back"+Chr$(49+LVL mod 2)+".abk",5
  58. Unpack 5 To 0
  59. Erase 5
  60. If MEG1=0
  61.    Load "Music/MFRIFF.ABK",3
  62. BANK3=2
  63. Else 
  64. SWPMUSIC1
  65. End If 
  66.    Music 1
  67.    Led Off 
  68.       GTMAP[1+LVL]
  69.       Fade 7
  70.       TAMEVIEW[0,0,10,6,XSIZE,YSIZE]
  71.       Wait 150
  72.       Auto View Off 
  73.       Screen 0
  74.       Fade 1
  75.       Screen Open 1,320,20,16,Lowres
  76.       Screen Display 1,,254,,10
  77.       Get Sprite Palette 
  78.       Wait Vbl 
  79.       Curs Off : Flash Off 
  80.       Cls 0
  81.       Ink 9,0
  82.       Text 20,7,"SCORE:"
  83.       Screen 0
  84.       Screen To Front 0
  85.       TAMEMAP[0,0,0]
  86.       Double Buffer 
  87.       Auto View On 
  88.       Bob Off 
  89.       SPD=1
  90.       If LVL mod 2=0 and LVL<4
  91.          Bob 2,160,184,19
  92.       Else 
  93.          Bob 2,999,1,19
  94.       End If 
  95.       Bob 10,330,0,37
  96.       Bob 11,330,0,35
  97.       SET_BADDIES
  98.       A=0
  99.       Repeat 
  100.          APLS(A)=0
  101.          APLL(A)=0
  102.          Inc A
  103.       Until A=2
  104.       Get Sprite Palette 
  105.       APPLES=10+LVL
  106.       DEAD=0
  107.       WIN=0
  108.       Bob 1,0,0,4
  109.       Channel 1 To Bob 1
  110.       Amal 1,"Move 0,0,1"
  111.       Amal On 1
  112.       Synchro Off 
  113.       Autoback 0
  114.       Auto View Off 
  115.       Update Off 
  116.       TU=1
  117.       T$="00000"
  118.       OSC=-1
  119.       Screen 1
  120.       SETUPAPPLES[APPLES,LIVES]
  121.       Screen 0
  122.       Music Off 
  123.       Screen 1
  124.       Fade 1 To 0
  125.       Screen 0
  126.      Repeat 
  127.          DEAD=0
  128.          X=160 : Y=192 : XO=X : YO=Y
  129.          Bob 1,X,Y,D*3+T/2+4
  130.          COUNT=40-LVL*5
  131.          COUNT2=40
  132.          BLIP=15
  133. SWPMUSIC1
  134.          Volume 32
  135.          Music 1
  136.          Tempo BLIP
  137. MTV=0
  138.          Repeat 
  139. V=0
  140.             VY=Y-YO
  141.             A$="Let A="+Str$(D*3+T/2+4)+" ; Move "+Str$(VX)+","+Str$(VY)+",1"
  142.             Amal 1,A$
  143.             Amal On 1
  144.             Update 
  145.             Synchro 
  146.             View 
  147.             YO=Y : VX=0
  148.             Add GTG,1,0 To 7
  149.             Rem check countdown
  150.             If MTV=0
  151.                Dec COUNT
  152.                If COUNT=0
  153.                   Inc BLIP
  154.                   COUNT=COUNT2
  155.                   If BLIP>30
  156.                      BLIP=30
  157.                   End If 
  158.                   Tempo BLIP
  159.                End If 
  160.             End If 
  161.             Rem check for blink
  162.             If D=0 and(Rnd(10)>9 or T<>0)
  163.                Add T,1,0 To 5
  164.             End If 
  165.             If SCORE<>OSC
  166.                Gosub UPSCORE
  167.                OSC=SCORE
  168.             End If 
  169.             If MTV
  170.                Dec MTV
  171.                If MTV=0
  172.                   V=64
  173.                   A=0 : Repeat 
  174.                      Bob 3+A,X Bob(3+A),BADY(LVL,A),14
  175.                      Amal Off A+12
  176.                      Inc A
  177.                   Until A=NUMBAD
  178.                   Amal On 
  179.                End If 
  180.             End If 
  181.             If V
  182.                Dec V
  183.                Volume V
  184.                If V=0
  185.                   SWPMUSIC1
  186.                   Volume 32
  187.                   Music 1
  188.                   Tempo BLIP
  189.                End If 
  190.             End If 
  191.             If TU
  192.                Dec TU
  193.                Screen 1
  194.                Ink 12,0
  195.                Text 70,7,SCT$
  196.                Screen 0
  197.             End If 
  198.             Rem check for left/right movement
  199.             Rem only possible if alive (dead=0)
  200.             D=0
  201.             If DEAD=0
  202.                XO=X
  203.                If Jleft(1)
  204.                   D=-1 : Add X,-4 : Add T,1,0 To 5
  205.                End If 
  206.                If Jright(1)
  207.                   D=1 : Add X,4 : Add T,1,0 To 5
  208.                End If 
  209.                F=0
  210.                If X>308
  211.                   X=0
  212.                   F=1
  213.                End If 
  214.                If X<0
  215.                   X=308
  216.                   F=1
  217.                End If 
  218.                VX=X-XO
  219.                If F
  220.                   Bob 1,X,Y,4+T/2+D*3
  221.                   VX=0
  222.                End If 
  223.             End If 
  224.             Rem calculate new y co-ordinate
  225.             YO=Y
  226.             Y=Y+JUMP+FALL+DEAD*4
  227.             If Y>192 and DEAD=0
  228.                Y=192
  229.             End If 
  230.             Rem calculate jump 
  231.             JO=JUMP
  232.             If JUMP
  233.                Inc JUMP : If JUMP=-1
  234.                   JUMP=1
  235.                End If 
  236.                If JUMP=6
  237.                   JUMP=0
  238.                End If 
  239.             End If 
  240.             Rem check for fall 
  241.             If DEAD=0
  242.                If Y mod 32<8
  243.                   P=Peek(Start(6)+4+(XO/32)+(YO/32)*10)
  244.                Else 
  245.                   P=30
  246.                End If 
  247.                If Y>=192
  248.                   P=0
  249.                End If 
  250.                If Jup(1) and JUMP=0 and FALL=0 and YO mod 32<4 and P<14
  251.                   JUMP=-9
  252.                End If 
  253.                If P>=13 and JUMP=0
  254.                   FALL=4
  255.                End If 
  256.                If P<14 and JUMP>=0 and((YO mod 32>=8 and Y mod 32<=16) or Y mod 32<8)
  257.                   Y=(Y/32)*32 : JUMP=0
  258.                   FALL=0
  259.                End If 
  260.                Z=Bob Col(1,3 To 5)
  261.                If Z
  262.                   DEAD=1
  263.                End If 
  264.                Z=Bob Col(1)
  265.                If Col(11) or Col(10)
  266.                   DEAD=1
  267.                End If 
  268.                If Col(2) and(JUMP>0 or FALL)
  269.                   JUMP=-7-JUMP-FALL+Jup(1)*2
  270.                   Anim 2,"(20,3)(21,3)(20,1)(19,1)"
  271.                   Channel 2 To Bob 2
  272.                   Anim On 
  273.                   FALL=0
  274.                End If 
  275.                Rem check thunderbolt
  276.                If BLIP=30
  277.                   If X Bob(10)<0 or X Bob(10)>320 or Y Bob(10)>200
  278.                      TX=Rnd(190)+130 : TY=0 : Bob 10,TX,TY,37
  279.                      Channel 10 To Bob 10
  280.                      Amal 10,"Move -160,220,30"
  281.                      Amal On 10
  282.                   End If 
  283.                End If 
  284.                Rem check arrow
  285.                If Rnd(10)>3
  286.                   If(X Bob(11)<0 or X Bob(11)>320) and LVL>1
  287.                      ARRD=35 : A$="Move -360,0,90"
  288.                      If X Bob(11)<0
  289.                         ARRD=36 : A$="Move 360,0,90"
  290.                      End If 
  291.                      Bob 11,X Bob(11),Rnd(180)+10,ARRD
  292.                      Channel 11 To Bob 11
  293.                      Amal 11,A$
  294.                      Amal On 11
  295.                   End If 
  296.                End If 
  297.                Rem check apples 
  298.                A=0
  299.                Repeat 
  300.                   If APLS(A)
  301.                      If Y Bob(A+6)>=192
  302.                         Bob 6+A,999,1,1
  303.                         Amal Off 6+A
  304.                         If APLS(A)<>19
  305.                            APPLES=APPLES+APLV(APLS(A)-16)
  306.                         End If 
  307.                         If APLS(A)>19 and APLS(A)<23
  308.                            ELB=0
  309.                            ELF=0
  310.                         End If 
  311.                         APLS(A)=0
  312.                         Gosub UPSCORE
  313.                      End If 
  314.                      If APLL(A)=0 and Y Bob(6+A) mod 32=0
  315.                         AP=Peek(Start(6)+4+X Bob(A+6)/32+(Y Bob(A+6)/32)*MAPX)
  316.                         If AP<14
  317.                            APLL(A)=1
  318.                            Amal Freeze 6+A
  319.                         End If 
  320.                      End If 
  321.                      Z=Bob Col(A+6,1 To 11)
  322.                      If Z
  323.                         If Col(1)
  324.                            SCORE=SCORE+APLSC(APLS(A)-16)
  325.                            If APLS(A)<>19
  326.                               APPLES=APPLES-APLV(APLS(A)-16)
  327.                               If APLS(A)>=20 and APLS(A)<23
  328.                                  ELF=0
  329.                                  ELB=APLS(A)-18
  330.                                  If ELB=4
  331.                                     Inc LIVES
  332.                                     SETUPAPPLES[APPLES,LIVES]
  333.                                        If MTV=0
  334.                                           SWPMUSIC2
  335.                                        End If 
  336.                                        Music 1
  337.                                        MTV=50
  338.                                        Volume 63
  339.                               Z=0 : Repeat 
  340.                                  Bob 3+Z,X Bob(3+Z),BADY(LVL,Z),14
  341.                                  Channel 12+Z To Bob 3+Z
  342.                                  Amal 12+Z,BOP$(Z)
  343.                                  Amal On 12+Z
  344.                                  Inc Z
  345.                               Until Z=NUMBAD
  346.                                     ELB=0
  347.                                  End If 
  348.                               End If 
  349.                               If APLS(A)=23
  350.                                  DEAD=1
  351.                               End If 
  352.                            Else 
  353.                                  If MTV=0
  354.                                     SWPMUSIC2
  355.                                  End If 
  356.                                  Volume 63
  357.                                  Music 1
  358.                                  MTV=550
  359.                               Z=0 : Repeat 
  360.                                  Bob 3+Z,X Bob(3+Z),BADY(LVL,Z),14
  361.                                  Channel 12+Z To Bob 3+Z
  362.                                  Amal 12+Z,BOP$(Z)
  363.                                  Amal On 12+Z
  364.                                  Inc Z
  365.                               Until Z=NUMBAD
  366.                            End If 
  367.                            Bob 8+A,X Bob(6+A),Y Bob(6+A),25
  368.                            Channel(8+A) To Bob 8+A
  369.                            Amal 8+A,APLS$(APLS(A)-16)
  370.                            Amal On 8+A
  371.                            APLS(A)=0
  372.                            Bob 6+A,999,1,1
  373.                            Gosub UPSCORE
  374.                         Else 
  375.                            If Not(Col(8) or Col(9))
  376.                               APLL(A)=0
  377.                               Amal On 6+A
  378.                            End If 
  379.                         End If 
  380.                      End If 
  381.                   Else 
  382.                      If Rnd(100)>60 or(ELB>0 and ELF=0)
  383.                         If ELB>0 and ELF=0
  384.                            APLS(A)=19+ELB
  385.                            ELF=1
  386.                         Else 
  387.                            APLL(A)=0
  388.                            Z=Rnd(16)
  389.                            APLS(A)=RSEL(Z)
  390.                            If APLS(A)=20 and(ELF=1 or ELB>0)
  391.                               APLS(A)=16
  392.                            End If 
  393.                         End If 
  394.                         Bob 6+A,Rnd(300)+10,0,APR(APLS(A)-16)
  395.                         Channel(6+A) To Bob 6+A
  396.                         If APLS(A)<20 or APLS(A)=23
  397.                            Amal 6+A,"Move 0,240,60"
  398.                         Else 
  399.                            ELB=APLS(A)-19
  400.                            ELF=1
  401.                            Amal 6+A,"Move 0,240,45"
  402.                         End If 
  403.                         Amal On 6+A
  404.                      End If 
  405.                   End If 
  406.                   Inc A
  407.                Until A>1
  408.             End If 
  409.          Until((DEAD=1 and Y>=200) or WIN=1) and TU=0
  410.          If DEAD=1
  411.             WIN=0
  412.             Y=200
  413.             Update On 
  414.             Synchro On 
  415.             Bob 1,X,Y,39 : Bob 15,X,Y-12,40
  416.             A$="Move 0,12,6 ; Anim 0,(40,3)(41,3)(42,3)(43,3) ;"
  417.             A$=A$+" Move 0,-8,4 ; Move 0,8,4 ; Move 0,-6,3 ; Move 0,6,3 ; Move 0,-4,2 ;"
  418.             A$=A$+" Move 0,4,2 ; Move 0,-2,1 ; Move 0,2,1 ;"
  419.             A$=A$+"Move 340,0,320"
  420.             Channel 15 To Bob 15
  421.             Amal 15,A$
  422.             Amal On 15
  423.             While X Bob(15)<330 : Wend 
  424.             Amal Off 15
  425.             Bob Off 15
  426.             Update Off 
  427.             Synchro Off 
  428.          End If 
  429.          If WIN=0
  430.             Dec LIVES
  431.             SETUPAPPLES[APPLES,LIVES]
  432.          End If 
  433.       Until LIVES=0 or WIN=1
  434.       If WIN
  435.          Inc LVL
  436.          SCORE=SCORE+LVL*1000
  437.          Gosub UPSCORE
  438.       End If 
  439.    Until DEAD=1 or LVL=5
  440.       Music Off 
  441.       Load "Music/Magic_Forest_end.abk"
  442.       Volume 63
  443.    Update On 
  444.    Auto View On 
  445.    Screen 0
  446.    Screen To Front 0
  447.    Amal Off 
  448.    Synchro On 
  449.    Bob 8,999,1,1 : Bob 9,999,1,1
  450.    A=1 : Repeat 
  451.       Amal A,"Move 0,480,140"
  452.       Amal On A
  453.       Inc A
  454.    Until A=10
  455.    While Y Bob(5)<260
  456.    Wend 
  457.    Amal Off 
  458.    Bob Off 
  459.    Update 
  460.    Erase 1
  461.    Load "magic_forest/MFtitle.abk"
  462.    Del Bob 1
  463.       Music 1
  464.    M=16 : M2=9
  465.    If MEG1=0
  466.       M=6 : M2=4
  467.    End If 
  468.    A=1
  469.    Repeat 
  470.       If A<M2
  471.          Bob A,50,-10,1
  472.       Else 
  473.          Bob A,50,-10,2+WIN
  474.       End If 
  475.       Channel(A) To Bob A
  476.       Amal A,"Move 0,0,"+Str$(A*8)+" ; "+GMO$
  477.       Inc A
  478.    Until A=M
  479.    Bob Update 
  480.    Amal On 
  481.    While Fire(1)=0 and Asc(Inkey$)=0 : Wend 
  482.    Screen Close 1
  483.       Music Off 
  484. Loop 
  485. Procedure SETUPAPPLES[AP,L]
  486.    TS=Screen
  487.    Screen 1
  488.    Ink 0 : Bar 123,10 To 320,20
  489.    A=1 : Repeat 
  490.       Paste Bob 115+A*8,10,32
  491.       Inc A
  492.    Until A>Min(5,L)
  493.    A=0
  494.    Repeat 
  495.       If A<AP
  496.          Paste Bob 165+A*10,10,26
  497.       Else 
  498.          Paste Bob 165+A*10,10,25
  499.       End If 
  500.       Inc A
  501.    Until A=15
  502.    Screen Copy 1,123,10,320,20 To 1,123,0
  503.    Screen TS
  504. End Proc
  505. Procedure SETGAMEOVER
  506.    Shared GMO$
  507.    D=48
  508.    GMO$="H: "
  509.    Repeat 
  510.       GMO$=GMO$+"Move 2,"+Str$(D/6)+",2 ; "
  511.       Dec D
  512.    Until D=-49
  513.    GMO$=GMO$+"Let X=50 ; Let Y=-10 ; Jump H"
  514. End Proc
  515. Rem
  516. Rem
  517. UPSCORE:
  518. TS=Screen
  519. Screen 1
  520. Ink 15,0
  521. SCT$=Right$("0000"+Mid$(Str$(SCORE),2),5)
  522. TU=1
  523. If APPLES<>OAP
  524.    SETUPAPPLES[APPLES,LIVES]
  525. End If 
  526. If APPLES<=0
  527.    WIN=1
  528.    APPLES=0
  529.    OAP=0
  530. End If 
  531. If APPLES>15
  532.    DEAD=1
  533.    APPLES=13
  534.    OAP=0
  535.    Update On 
  536.    SETUPAPPLES[APPLES,LIVES]
  537.    Update Off 
  538. End If 
  539. Screen 0
  540. OAP=APPLES
  541. Return 
  542. Rem _________________________________________________________________
  543. Rem Game initialisation routines 
  544. Rem
  545. BADDYREAD:
  546. Rem reads in the AMAL strings for the baddies
  547. Rem I Should really store them on disk, but it doesn't work too well 
  548. Rem at the moment !
  549. Restore D1
  550. L=0 : Repeat 
  551.    A=0 : Repeat 
  552.       Read BADX(L,A),BADY(L,A),BADF(L,A)
  553.       Read BAD$(L,A)
  554.       If Right$(BAD$(L,A),1)=" "
  555.          Read BAD2$
  556.          BAD$(L,A)=BAD$(L,A)+BAD2$
  557.       End If 
  558.       Inc A
  559.    Until A=NUMBAD
  560.    Inc L
  561. Until L=5
  562. Read BOP$,B2$,B3$,B4$,B5$
  563. BOP$=BOP$+B2$+B3$
  564. A=0 : Repeat 
  565.    Read BOP$(A)
  566.    BOP$(A)=BOP$+Str$(A)+B4$+B5$
  567.    Inc A
  568. Until A=NUMBAD
  569. Rem level 1 baddies
  570. D1:
  571. Data 96,128,10,"A: Let X=96 ; Anim 12,(10,2)(11,2)(12,2)(11,2) ; Move -96,0,48 ; Let X=319 ; Move -96,0,48 ; Anim 12,(13,2)(14,2)(15,2)(14,2) ; Move 96,0,48 ; Let X=0 ; Move 96,0,48 ; Jump A"
  572. Data 64,64,10,"B: Let X=64 ; Anim 8,(10,2)(11,2)(12,2)(11,2) ; Move -64,0,32 ; Let X=319 ; Move -64,0,32 ; Anim 8,(13,2)(14,2)(15,2)(14,2) ; Move 64,0,32 ; Let X=0 ; Move 64,0,32 ; Jump B"
  573. Data 96,32,10,"C: Let X=96 ; Anim 6,(13,2)(14,2)(15,2)(14,2) ; Move 112,0,56 ; Anim 6,(10,2)(11,2)(12,2)(11,2) ; Move -112,0,56 ; Jump C"
  574. Rem level 2 baddies
  575. Data 320,128,10
  576. Data "A: Let X=320 ; Anim 10,(10,2)(11,2)(12,2)(11,2) ; Move -160,0,80 ; Anim 10,(13,2)(14,2)(15,2)(14,2) ; Move 160,0,80 ; Let X=0 ; Let Y=64 ; Anim 4,(13,2)(14,2)(15,2)(14,2) ; Move 64,0,32 ; Anim 4,(10,2)(11,2)(12,2)(11,2) ; Move -64,0,32 ; "
  577. Data "Let X=0 : Let Y=128 ; Anim 6,(13,2)(14,2)(15,2)(14,2) ; Move 96,0,48 ; Anim 6,(10,2)(11,2)(12,2)(11,2) ; Move -96,0,48 ; Jump A"
  578. Data 128,64,10,"B: Let X=128 ; Anim 6,(13,2)(14,2)(15,2)(14,2) ; Move 96,0,48 ; Anim 6,(10,2)(11,2)(12,2)(11,2) ; Move -96,0,48 ; Jump B"
  579. Data 64,32,10,"C: Let X=64 ; Anim 6,(13,2)(14,2)(15,2)(14,2) ; Move 96,0,48 ; Anim 6,(10,2)(11,2)(12,2)(11,2) ; Move -96,0,48 ; Jump C"
  580. Rem level 3 baddies
  581. Data 96,128,10,"A: Let X=96 ; Anim 12,(10,2)(11,2)(12,2)(11,2) ; Move -96,0,48 ; Let X=319 ; Move -96,0,48 ; Anim 12,(13,2)(14,2)(15,2)(14,2) ; Move 96,0,48 ; Let X=0 ; Move 96,0,48 ; Jump A"
  582. Data 160,64,10,"B: Let X=160 ; Anim 18,(10,2)(11,2)(12,2)(11,2) ; Move -160,0,80 ; Let X=319 ; Move -128,0,64 ; Anim 18,(13,2)(14,2)(15,2)(14,2) ; Move 128,0,64 ; Let X=0 ; Move 160,0,80 ; Jump B"
  583. Data 96,32,10,"C: Let X=96 ; Anim 6,(13,2)(14,2)(15,2)(14,2) ; Move 112,0,56 ; Anim 6,(10,2)(11,2)(12,2)(11,2) ; Move -112,0,56 ; Jump C"
  584. Rem level 4 baddies
  585. Data 320,128,10
  586. Data "A: Let X=320 ; Anim 10,(10,1)(11,1)(12,1)(11,1) ; Move -160,0,40 ; Anim 10,(13,1)(14,1)(15,1)(14,1) ; Move 160,0,40 ; Let X=0 ; Let Y=64 ; Anim 4,(13,1)(14,1)(15,1)(14,1) ; Move 64,0,16 ; Anim 4,(10,1)(11,1)(12,1)(11,1) ; Move -64,0,16 ; "
  587. Data "Let X=0 : Let Y=128 ; Anim 6,(13,1)(14,1)(15,1)(14,1) ; Move 96,0,24 ; Anim 6,(10,1)(11,1)(12,1)(11,1) ; Move -96,0,24 ; Jump A"
  588. Data 128,64,10,"B: Let X=128 ; Anim 6,(13,2)(14,2)(15,2)(14,2) ; Move 96,0,48 ; Anim 6,(10,2)(11,2)(12,2)(11,2) ; Move -96,0,48 ; Jump B"
  589. Data 64,32,10,"C: Let X=64 ; Anim 6,(13,2)(14,2)(15,2)(14,2) ; Move 96,0,48 ; Anim 6,(10,2)(11,2)(12,2)(11,2) ; Move -96,0,48 ; Jump C"
  590. Rem level 5 baddies
  591. Data 96,128,10,"A: Let X=96 ; Anim 12,(10,2)(11,2)(12,2)(11,2) ; Move -96,0,48 ; Let X=319 ; Move -96,0,48 ; Anim 12,(13,2)(14,2)(15,2)(14,2) ; Move 96,0,48 ; Let X=0 ; Move 96,0,48 ; Jump A"
  592. Data 64,64,10,"B: Let X=64 ; Anim 8,(10,2)(11,2)(12,2)(11,2) ; Move -64,0,32 ; Let X=319 ; Move -64,0,32 ; Anim 8,(13,2)(14,2)(15,2)(14,2) ; Move 64,0,32 ; Let X=0 ; Move 64,0,32 ; Jump B"
  593. Data 96,32,10,"C: Let X=96 ; Anim 6,(13,2)(14,2)(15,2)(14,2) ; Move 112,0,56 ; Anim 6,(10,2)(11,2)(12,2)(11,2) ; Move -112,0,56 ; Jump C"
  594. Rem Bop Routines 
  595. Data "AUtotest( If R1>0 Jump Down else Jump Up"
  596. Data " ; Down: Let R2=3 ; Let R1=0-R1 ; Let R1=R1/4 ; eXit"
  597. Data " ; Up: If R2>0 Jump Vp else Jump Wp ; Vp: Let R2=R2-1 ; eXit ; Wp: Let R1=Vumeter(",") ; Let R1=R1/32 ; Let R1=R1*4 ; eXit)"
  598. Data "Let R1=0 ; Let R2=0 ; L: Move 0,0-R1,1 ; Jump L"
  599. Data "Let R0=128 ; ","Let R0=64 ; ","Let R0=32 ; "
  600. Return 
  601. Procedure APPLEREAD
  602.    Shared APLSC(),APLV(),APLS$(),APR(),RSEL()
  603.    Rem reads in the score values for the 3 types of apple 
  604.    Rem as well as the AMAL string for the score animation 
  605.    A=0 : Repeat 
  606.       Read APLSC(A),APLV(A),APR(A),APLS$(A)
  607.       Inc A
  608.    Until A=8
  609.    A=0 : Repeat : Read RSEL(A) : Inc A : Until A=17
  610.    Rem apples (score) 
  611.    Data 70,1,16,"Let A=22 ; Move 0,-250,250",200,3,17,"Let A=24 ; Move 0,-250,250",100,2,18,"Let A=23 ; Move 0,-250,250"
  612.    Rem keyboard (500 pts + plays music) 
  613.    Data 500,0,27,"Let A=28; Move 0,-250,250"
  614.    Rem coin     (500 pts +triggers Dollar Note) 
  615.    Data 500,0,29,"Let A=31; Move 0,-250,250"
  616.    Rem Dollar Note (500 pts + triggers extra life)
  617.    Data 500,0,30,"Let A=31; Move 0,-250,250"
  618.    Rem Extra life (gives extra life ) 
  619.    Data 0,0,32,"Let A=33; Move 0,-250,250"
  620.    Rem poisoned apple 
  621.    Data 0,0,34,"Let A=38; Move 0,250,250"
  622.    Rem occurence data 
  623.    Data 16,16,16,16,16,16,16,16,16,16,18,18,17,19,20,23,23
  624. End Proc
  625. Procedure SET_BADDIES
  626.    Rem sets up the relevant AMAL strings to move the baddies
  627.    Shared LVL,B$,BAD$(),BADX(),BADY(),BADF(),NUMBAD
  628.    A=0 : Repeat 
  629.       B$=BAD$(LVL,A)
  630.       Channel(A+3) To Bob A+3
  631.       Bob A+3,BADX(LVL,A),BADY(LVL,A),BADF(LVL,A)
  632.       Amal A+3,B$
  633.       Inc A
  634.    Until A>=NUMBAD
  635.    Amal On 
  636. End Proc
  637. Procedure SWPMUSIC1
  638. Shared BANK3,MEG1
  639. If MEG1
  640. Music 1
  641. End If 
  642. If BANK3=2 and MEG1
  643.    Music Off 
  644.    Erase 7
  645.    Reserve As Chip Data 7,Length(3)
  646.    Copy Start(3)-8,Start(3)+Length(3) To Start(7)-8
  647.    Erase 3
  648.    Reserve As Chip Data 3,Length(4)
  649.    Copy Start(4)-8,Start(4)+Length(4) To Start(3)-8
  650.    Erase 4
  651.    Reserve As Chip Data 4,Length(7)
  652.    Copy Start(7)-8,Start(7)+Length(7) To Start(4)-8
  653.    M$="Music   "
  654.    M2$="SWPMusic"
  655.    A=0 : Repeat 
  656.    Poke Start(3)-8+A,Asc(Mid$(M$,A+1,1)) : Poke Start(4)-8+A,Asc(Mid$(M2$,A+1,1))
  657.    Inc A
  658.    Until A=8
  659. Erase 7
  660. Reserve As Chip Data 7,256
  661. Erase 7
  662. BANK3=1
  663. End If 
  664. End Proc
  665. Procedure SWPMUSIC2
  666. Shared BANK3,MEG1
  667. If MEG1
  668. Music 1
  669. End If 
  670. If BANK3=1 and MEG1
  671.    Music Off 
  672.    Erase 7
  673.    Reserve As Chip Data 7,Length(3)
  674.    Copy Start(3)-8,Start(3)+Length(3) To Start(7)-8
  675.    Erase 3
  676.    Reserve As Chip Data 3,Length(4)
  677.    Copy Start(4)-8,Start(4)+Length(4) To Start(3)-8
  678.    Erase 4
  679.    Reserve As Chip Data 4,Length(7)
  680.    Copy Start(7)-8,Start(7)+Length(7) To Start(4)-8
  681.    M$="Music   "
  682.    M2$="SWPMusic"
  683.    A=0 : Repeat 
  684.    Poke Start(3)-8+A,Asc(Mid$(M$,A+1,1)) : Poke Start(4)-8+A,Asc(Mid$(M2$,A+1,1))
  685.    Inc A
  686.    Until A=8
  687. Erase 7
  688. Reserve As Chip Data 7,256
  689. Erase 7
  690. BANK3=2
  691. End If 
  692. End Proc
  693. Rem _________________________________________________________________
  694. Rem Title Routines 
  695. Procedure TITLES
  696.    Shared MEG1
  697.    Ink 15,0
  698.    Cls 0
  699.    Del Bob 4
  700.    Del Bob 3
  701.    Del Bob 2
  702.    NICETXT[20,100,"A Game By Aaron Fothergill"]
  703.    NICETXT[20,110,"Graphics By Adam Fothergill"]
  704.    NICETXT[20,120,"A Shadow Software Production"]
  705.    NICETXT[20,130,"For Mandarin Software 1990"]
  706.    NICETXT[20,140,"Thanks to the usual Bunch,"]
  707.    NICETXT[20,150,"Jason,Rick,Chris,Sue & Sue"]
  708.    Get Bob 2,20,90 To 300,160
  709.    Hot Spot 2,120,0
  710.    Unpack 5 To 0
  711.    Screen Clone 1
  712.    Screen 0
  713.    Fade 1
  714.    Screen To Front 0
  715.    If MEG1=0
  716.       Erase 5
  717.    End If 
  718.    Double Buffer 
  719.    Auto View On 
  720.    Fade 10 To 1
  721.    Bob 1,100,199,1
  722.    Bob 2,170,219,2
  723.    Channel 0 To Bob 1
  724.    Channel 1 To Bob 2
  725.    Amal 0,"Move 0,-300,1200"
  726.    Amal 1,"Move 0,-300,1200"
  727.    Amal On 
  728.    While Y Bob(1)>-80 and Fire(1)=0 and Asc(Inkey$)=0 : Wend 
  729.    Bob Off 
  730.    Sprite Off 
  731.    Erase 1
  732.    Amal Off 
  733.    Screen Close 1
  734. End Proc
  735. Procedure NICETXT[X,Y,T$]
  736.    Ink 15,0
  737.    Text X,Y,T$
  738.    Get Block 21,X,Y-6,Len(T$)*10,8,1
  739.    Ink 1,0
  740.    Text X,Y,T$
  741.    Put Block 21,X+1,Y-5
  742.    Del Block 21
  743. End Proc
  744. Rem _________________________________________________________________
  745. Rem
  746. Rem TAME Engine Routines 
  747. Rem use these in your own programs if you wish (see MAGIC FOREST)
  748. Rem
  749. Procedure GTMAP[M]
  750.    Erase 6
  751.    Reserve As Work 6,80
  752.    Bload "Magic_Forest/MAGICFOREST"+Mid$(Str$(M),2)+".MAP",Start(6)
  753. End Proc
  754. Procedure GTBLCKS
  755.    Rem this routine converts a screen (screen 2) into blocks for use by TAME
  756.    Rem XSIZE & YSIZE determine the block size (and thus the number of them) 
  757.    Shared XSIZE,YSIZE
  758.    Auto View Off 
  759.    Screen 0
  760.    Load "Magic_Forest/MFTILES.ABK",5
  761.    Unpack 5 To 1
  762.    Get Palette(1)
  763.    Screen 1
  764.    A=0
  765.    Repeat 
  766.       B=0
  767.       Repeat 
  768.          Get Block A*(320/XSIZE)+B+1,B*XSIZE,A*YSIZE,XSIZE,YSIZE,1
  769.          Inc B
  770.       Until B>=320/XSIZE
  771.       Inc A
  772.    Until A>=2
  773.    Screen Close 1
  774.    Screen 0
  775. End Proc
  776. Procedure TAMEVIEW[TX,TY,TW,TH,XS,YS]
  777.    Rem This routine sets up the window for TAME, and what size tiles you wish 
  778.    Rem to use 
  779.    Shared XSIZE,YSIZE,MAPX,MAPY,TAMEW,TAMEH,TLX,TLY,BRX,BRY
  780.    MAPX=Deek(Start(6)) : MAPY=Deek(Start(6)+2)
  781.    XSIZE=XS : YSIZE=YS
  782.    TLX=TX : TLY=TY
  783.    TAMEW=TW : TAMEH=TH
  784.    BRX=TLX+TW*XSIZE
  785.    BRY=TLY+TH*YSIZE
  786. End Proc
  787. Procedure TAMEMAP[S,X,Y]
  788.    Rem This routine draws the map in the window set by the TAMEVIEW procedure 
  789.    Rem on screen S, at map co-ordinates X,Y 
  790.    Shared T,XSIZE,YSIZE,MAPX,MAPY,TAMEW,TAMEH,TLX,TLY,BRX,BRY
  791.    A=0
  792.    Repeat 
  793.       B=0
  794.       Repeat 
  795.          T=1+Peek(Start(6)+4+((B+X) mod MAPX)+((A+Y) mod MAPY)*MAPX) mod 20
  796.          Put Block T,TLX+B*XSIZE,TLY+A*YSIZE
  797.          Inc B
  798.       Until B>=TAMEW
  799.       Inc A
  800.    Until A>=TAMEH
  801. End Proc