; Balloonier; By Bill Kendrick; (c) New Breed Software 1994; Original Concept by William SoleauINCLUDE "D:RUNTIME.ACT"Byte Array PlaneX(15),PlaneY(15)Byte Array Player(45),XX(5)Card Array PS(5)Byte T,Players,Quit,WantX,LockedCard ChSet1,ChSet2Byte RAMTop=106,ChPage=756,Console=53279, Col0=708,Col1=709,Col2=710,Col3=711, Col4=712,Attract=77,Key=764Card DL=560,SC=88; BALLOON; AIRPLANE; CLOUD; LEFT-CLOUD; RIGHT-CLOUD; HURRICANE; POINTS; BOX; BOX OVER BALLOONPROC Go_DOS()[$6C$0A$00]Proc SetUp() Graphics(17) ChSet1=(RAMTop-20)*256 ChSet2=ChSet1-1024 ChPage=ChSet1/256 MoveBlock(ChSet1,224*256,1024) Col0=4 Col1=12 Col2=158 Col3=68 Col4=128 MoveBlock(ChSet1+1*8,"<~~<$"+1,8) MoveBlock(ChSet1+3*8," "+1,8) MoveBlock(ChSet1+4*8,"6mv"+1,8) MoveBlock(ChSet1+5*8,"8nρ|"+1,8) MoveBlock(ChSet1+6*8,"8v|"+1,8) MoveBlock(ChSet1+7*8,"~<"+1,8) MoveBlock(ChSet1+8*8,""+1,8) MoveBlock(ChSet1+9*8,""+1,8) MoveBlock(ChSet1+10*8,""+1,8) MoveBlock(ChSet2,ChSet1,1024) MoveBlock(ChSet2+3*8," "+1,8) MoveBlock(ChSet2+5*8,"8~|"+1,8) MoveBlock(ChSet2+6*8,"8~|"+1,8) MoveBlock(ChSet2+7*8,"~ "+1,8) MoveBlock(ChSet2+8*8,".j**."+1,8) Players=2ReturnProc Title() Poke(DL+3,71) PrintDE(6,"} BAllniER ") PrintDE(6," ") PrintDE(6," by bill kendrick") PrintDE(6," ") PrintDE(6," ")ReturnProc Options() Byte OC OC=0 T=0 Quit=0 Do Position(2,10) If Players=1 Then PrintD(6,"Ӻ TWO") Else PrintD(6,"Ӻ ONE ") Fi If Console=5 And OC=0 Then Players=(1-(Players-1))+1 OC=10 ElseIf OC>0 Then OC=OC-1 Fi T=1-T ChPage=(ChSet1-1024*T)/256 If Key=28 Then Key=255 Quit=1 Fi Until Console=6 Or Quit=1 Od Attract=0 PrintDE(6,"}") Poke(DL+3,70) Do Until Console=7 OdReturnProc RandPos(Char Ch) Byte X,Y X=Rand(20) Y=Rand(20) Position(X,Y) PutD(6,Ch)ReturnProc ScreenSetup() Byte A,B For A=1 To 15 Do For B=1 To 2 Do RandPos('$) RandPos(') Od RandPos(') RandPos('') RandPos(') Od For A=1 To 10 Do PlaneX(A)=Rand(20) PlaneY(A)=Rand(19) OdReturnProc DetermineMove() Byte Look,WouldScore,X,Y,Die,Done,This,C,ZZ,OX,OY WantX=0 WouldScore=0 For Look=0 To 19 Do This=0 Die=0 If Player(Look+20)=1 Then X=Look Y=21 Done=0 Do ZZ=PEEK(SC+X+Y*20) POKE(SC+X+Y*20,1) OX=X OY=Y Y=Y-1 If Y>21 Then Y=255 C=4 Else C=Peek(SC+X+Y*20) Fi If C<>69 And C<>70 Then Locked=0 Fi If C=69 Then Locked=Locked+1 Y=Y+1 If X>0 Then X=X-1 Fi C=Peek(SC+X+Y*20) If C<>7 And C<>67 And C<>0 Then X=X+1 Done=1 Fi Fi If C=70 Then Locked=Locked+1 Y=Y+1 If X<19 Then X=X+1 Fi C=Peek(SC+X+Y*20) If C<>7 And C<>67 And C<>0 Then X=X-1 Done=1 Fi Fi If Locked>=5 Then Done=1 Fi If C=67 Then Die=1 Done=1 This=0 ElseIf C=4 Or C=129 Or C=129+64 Then Y=Y+1 Done=1 This=This+(100-Y*5) ElseIf C=7 Then This=100 Done=1 ElseIf C=200 Then This=This+10 Fi POKE(SC+OX+OY*20,ZZ) For C=0 To 254 Do Od Until Done=1 Od If This>=WouldScore And Die=0 Then WouldScore=This WantX=Look Fi Fi OdReturnProc Game() Byte GameOver,A,C,Pl,X,Y,K,PX,PY,ANY, NOBALLOONS,Done,Show,P For A=0 To 39 Do Player(A)=1 Od XX(1)=0 XX(2)=0 PS(1)=0 PS(2)=0 GameOver=0 Do NOBALLOONS=0 For Pl=1 To 2 Do For A=1 To 10 Do PX=PlaneX(A) PY=PlaneY(A) If Peek(SC+PX+PY*20)=3+64 Then Poke(SC+PX+PY*20,0) Fi Od For A=1 To 10 Do PX=PlaneX(A) PY=PlaneY(A) PX=PX+1 If PX>19 Then PX=0 Fi If Peek(SC+PX+PY*20)=0 Then Poke(SC+PX+PY*20,3+64) Fi PlaneX(A)=PX Od Key=255 X=XX(Pl) ANY=0 For A=0 To 19 Do C=32 If Player(A+20*Pl-20)=1 Then C=128+33-32*(Pl-1) ANY=1 Fi Position(A,21) PutD(6,C) If Peek(SC+A+20*20)<>0 And Player(A+20*Pl-20)=1 Then Position(0,22) PrintDE(6," ") PrintD(6," ") For K=0 To 120 Do T=1-T Sound(0,100,0,15-K/8) If T=1 Then Position(A,21) PutD(6,C) Else Position(A,21) PutD(6,32) Fi Od Position(A,21) PutD(6,32) Player(A+20*Pl-20)=0 Position(0,22) PrintDE(6," PLAYER 1 PLAYER 2") PrintD (6," ") Position(3,23) PrintCDE(6,PS(1)) Position(13,23) PrintCDE(6,PS(2)) Fi Od If Pl=2 And Players=1 Then Position(0,22) PrintDE(6," ") DetermineMove() Position(0,22) PrintDE(6," PLAYER 1 PLAYER 2") Fi If ANY=1 Then Do T=1-T ChPage=(ChSet1-1024*T)/256 If Pl=1 Or Players=2 Then K=Key If K<255 Then Key=255 Fi Else For K=0 To 254 Do For C=0 To 40 Do Od Od If XWantX Then K=6 ElseIf X=WantX Then K=33 Fi Fi C=32 If Player(X+20*Pl-20)=1 Then C=128+33-32*(Pl-1) Fi Position(X,21) PutD(6,C) If K=6 And X>0 Then X=X-1 Fi If K=7 And X<19 Then X=X+1 Fi If K=28 Then Pl=3 GameOver=1 Fi C=128+41-32*(Pl-1) If Player(X+20*Pl-20)=1 Then C=128+42-32*(Pl-1) Fi Position(X,21) PutD(6,C) If K=33 And Player(X+20*Pl-20)=0 Then Sound(0,200,12,15) For A=1 To 250 Do For C=1 To 30 Do Od Od Sound(0,0,0,0) For A=1 To 100 Do For C=1 To 30 Do Od Od Sound(0,200,12,15) For A=1 To 250 Do For C=1 To 30 Do Od Od Sound(0,0,0,0) K=255 Fi Until K=33 Or K=28 Od XX(Pl)=X Player(X+20*Pl-20)=0 If K=33 Then Y=21 Done=0 Do Poke(SC+X+Y*20,0) Y=Y-1 If Y>21 Then Y=255 C=4 Else C=Peek(SC+X+Y*20) Fi Show=1 If C<>69 And C<>70 Then Locked=0 Fi If C=69 Then ; LCloud MOVE Locked=Locked+1 Poke(SC+X+Y*20,70) Y=Y+1 If X>0 Then X=X-1 Fi C=Peek(SC+X+Y*20) If C<>7 And C<>67 And C<>0 Then X=X+1 Done=1 Fi Fi If C=70 Then ; RCloud MOVE Locked=Locked+1 Poke(SC+X+Y*20,69) Y=Y+1 If X<19 Then X=X+1 Fi C=Peek(SC+X+Y*20) If C<>7 And C<>67 And C<>0 Then X=X-1 Done=1 Fi Fi If Locked>=5 Then Done=1 Fi If C=67 Then ; Plane POP Poke(SC+X+Y*20+20,0) For A=0 To 150 Do Sound(0,A,0,15-A/10) For P=1 To 20 Do Od Od Done=1 Show=0 ElseIf C=4 Or C=129 Or C=129+64 Then ; Cloud STOP Y=Y+1 Done=1 PS(Pl)=PS(Pl)+(100-Y*5) ElseIf C=7 Then ; Hurricane WARP Position(0,22) PrintDE(6,"ССС") For A=0 To 150 Do Sound(0,150-A*5,12,A/10) For P=1 To 50 Do Od Od Do X=Rand(20) Y=Rand(20) Until Peek(SC+X+Y*20)=0 Od Position(X,Y) C=128+41-32*(Pl-1) PutD(6,C) For A=0 TO 254 Do For C=1 To 80 Do Od Od For A=0 To 254 Do Sound(0,A,4,4) For C=1 To 100 Do Od Od Sound(0,0,0,0) ElseIf C=200 Then ; Points ADD For A=0 To 150 Do Sound(0,150-A,10,15) For P=1 To 50 Do Od Od Sound(0,0,0,0) PS(Pl)=PS(Pl)+10 Fi If Show=1 Then Position(X,Y) C=128+33-32*(Pl-1) PutD(6,C) Fi T=1-T ChPage=(ChSet1-1024*T)/256 Position(0,22) PrintDE(6," PLAYER 1 PLAYER 2 ") PrintD (6," ") Position(3,23) PrintCDE(6,PS(1)) Position(13,23) PrintCDE(6,PS(2)) For A=1 To 254 Do Od Until Done=1 Od Fi Else Position(0,22) PrintDE(6," ") PrintD(6," ") Sound(0,80,10,15) For A=1 To 250 Do For C=1 To 30 Do Od Od Sound(0,100,10,15) For A=1 To 250 Do For C=1 To 30 Do Od Od Sound(0,160,10,15) For A=1 To 250 Do For C=1 To 30 Do Od Od Sound(0,0,0,0) NOBALLOONS=NOBALLOONS+1 Fi Od If NOBALLOONS=2 Then GameOver=1 Fi Until GameOver=1 Od Position(0,22) PrintDE(6," PLAYER 1 PLAYER 2 ") PrintD (6," ") Position(3,23) PrintCDE(6,PS(1)) Position(13,23) PrintCDE(6,PS(2)) Key=255 Do Until Key<255 Or Console<7 Od Do Until Console=7 Od Key=255ReturnProc Main() SetUp() Do Title() Options() If Quit=0 Then ScreenSetup() Game() Fi Until Quit=1 Od Go_DOS()Return