›MODULE; BACKTRAK.ACT› ; by Sam Teague››BYTE Stick0=$278, Trig0=$D010,› ChBas=$2F4, Time=$14,› MemTop=$6A, Color0=$2C4,› Color1=$2C5, Color2=$2C6,› Color3=$2C7, Color4=$2C8,› GraCtl=$D01D, GPrior=$26F,› SDmaCtl=$22F, PMBase=$D407, › Nmien=$D40E, WSync=$D40A,› Con=$D01F, Atract=$4D,› HPos0=$D000, HPos1=$D001,› HPos2=$D002, HPos3=$D003,› PMColor0=$2C0, PMColor1=$2C1,› PMColor2=$2C2, PMColor3=$2C3,› P0PF=$D004, P2PF=$D006,› P3PF=$D007, P0PL=$D00C,› HPosM0=$D004, HPosM1=$D005,› HPosM2=$D006, HPosM3=$D007,› HitClr=$D01E, CrSinh=$2F0,› StickFlag, SpaceFlag,› Dots, OldMemTop, Screen, Speed,› X, Y, X0, Y0, X1, Y1, X2, Y2,› X3, Y3, OldX0, OldY0, OldX2,› OldY2, OldX3, OldY3,› RobotCount1, RobotCount2, › BirdCount, Image0, Image1,› DotSound, BonusSound, DoorSound,› Lives, StartSpeed ››INT RobotSpeed1, RobotSpeed2,› BirdDist, RobotDist1,› RobotDist2, Score, HighScore ››CARD VDsLst=$200, SDLst=$230,› ScRam=$58 ››BYTE POINTER PMRam, Player0, Player1,› Player2, Player3,› MissleBase››BYTE ARRAY String(10)››; GOOD GUY PLAYER›BYTE ARRAY› Player0Data0= ;DOWN› [0 0 0 24 36 36 36 24 60 24 0 0 0 0],› Player0Data1= ;UP› [0 0 0 24 60 60 60 24 60 24 0 0 0 0],› Player0Data2= ;LEFT› [0 0 0 24 44 44 44 24 56 24 0 0 0 0],› Player0Data3= ;RIGHT› [0 0 0 24 52 52 52 24 28 24 0 0 0 0]› ›; BIRD PLAYER›BYTE ARRAY› Player1Data0=› [0 0 0 24 36 60 24 219› 126 60 36 0 0 0],› Player1Data1=› [0 0 0 24 36 60 24 24› 126 255 36 0 0 0],› Player1Data2=› [0 0 0 24 36 60 24 24› 255 60 36 0 0 0]››; ROBOT PLAYER›BYTE ARRAY› Player2Data0=› [0 0 0 255 152 60 102› 219 189 36 66 0 0 0],› Player2Data1=› [0 0 0 60 56 60 102 219› 189 36 24 0 0 0],› Player2Data2=› [0 0 0 255 29 60 102 219› 189 36 24 0 0 0],› Player2Data3=› [0 0 0 60 28 60 102 219› 189 36 36 0 0 0]››;FACE, HANDS & FEET PLAYER›BYTE ARRAY› Player3Data0=› [0 0 0 0 36 36 36 0 189 0 153 0 0 0],› Player3Data1=› [0 0 0 0 36 36 36 0 189 0 153 0 0 0],› Player3Data2=› [0 0 0 0 36 36 36 0 1 0 44 0 0 0],› Player3Data3=› [0 0 0 0 36 36 36 0 128 0 52 0 0 0]››CARD ARRAY PMData0(4), PMData1(4),› PMData2(4), PMData3(4),› MissleData(4)››PROC Move_Set()› BYTE i, chnum, bit› BYTE POINTER base, dest› BYTE ARRAY chars=› [ 255 255 255 255 255 255 255 255› 127 127 127 127 127 127 127 0› 0 254 254 254 254 254 254 254› 254 254 254 254 254 254 254 0› 0 127 127 127 127 127 127 127› 0 255 255 255 255 255 255 255› 127 127 127 127 127 127 127 127› 254 254 254 254 254 254 254 254› 0 90 60 66 66 60 90 0› 0 255 231 129 129 231 255 0› 0 254 254 254 254 254 254 0› 0 0 0 24 36 24 0 0 › 0 126 126 126 126 126 126 126› 126 126 126 126 126 126 126 0› 0 127 127 127 127 127 127 0› 0 255 255 255 255 255 255 0› 126 126 126 126 126 126 126 126› 255 255 255 255 255 255 255 0 › 0 24 24 126 24 60 102 0]› MemTop==-8› Graphics(17)› SDmaCtl=0› base=(MemTop)*$100› MoveBlock(base,$E000,$400)› bit=0› chnum=1› DO› dest=base+8*chnum› FOR i=0 TO 7 › DO › dest^=chars(bit)› dest==+1 bit==+1› OD› IF chnum=1 THEN chnum=3› ELSEIF chnum<12 THEN chnum==+1› ELSEIF chnum=12 THEN chnum=14› ELSEIF chnum=14 THEN chnum=15› ELSEIF chnum=15 THEN chnum=26› ELSEIF chnum=26 THEN chnum=27› ELSEIF chnum=27 THEN chnum=29› ELSEIF chnum=29 THEN chnum=30› ELSEIF chnum=30 THEN chnum=32› ELSEIF chnum=32 THEN chnum=56 › ELSEIF chnum=56 THEN chnum=57 › FI › UNTIL chnum>56› OD›RETURN››PROC Dli=*()› BYTE color1=$D017, color2=$D018› [$48 ; PHA› $8D WSync] ; STA WSync› color1=14 ; Luminance› color2=4 ; Gray background› [$68 ; PLA› $40] ; RTI››PROC SetDLI()› VDsLst=Dli› Nmien=$C0›RETURN››PROC Delay(BYTE jiffies)› jiffies==+Time› DO UNTIL jiffies=Time OD›RETURN››BYTE FUNC CheckLocate(BYTE x0,y0)› BYTE errflag› errflag=0› IF x0>53 AND x0<200 AND y0>26› AND y0<200 THEN› errflag=1› FI›RETURN(errflag)››PROC Song()› BYTE ctr› FOR ctr=1 TO 2› DO › Sound(0,108,10,8) Delay(18)› Sound(0,96,10,8) Delay(9)› Sound(0,91,10,8) Delay(9) › Sound(0,81,10,8) Delay(18)› Sound(0,91,10,8) Delay(9) › Sound(0,96,10,8) Delay(9) › OD› Sound(0,121,10,8) Delay(18)› Sound(0,108,10,8) Delay(9) › Sound(0,96,10,8) Delay(9) › Sound(0,91,10,8) Delay(18)› Sound(0,96,10,8) Delay(9) › Sound(0,108,10,8) Delay(9) › Sound(0,121,10,8) Delay(54)› Sound(0,0,0,0) Delay(10)›RETURN››PROC Color(BYTE C0, BYTE C1, BYTE C2,› BYTE C3, BYTE C4)› Color0=C0 › Color1=C1 › Color2=C2 › Color3=C3 › Color4=C4 ›RETURN››PROC Sype(BYTE ARRAY temp_str› BYTE POINTER address)› BYTE i › BYTE ARRAY ataint=[$40 $00 $20 $60]› FOR i=1 TO temp_str(0)› DO› IF temp_str(i)#155 THEN› address^=ataint((temp_str(i)› RSH 5)&3)%(temp_str(i)&$9F)› address==+1› FI› OD›RETURN› ›PROC High_Score()› StrI(HighScore,String)› Sype(String,ScRam+493)› Sype(" ",ScRam+468)›RETURN››PROC BGNoise()› BYTE N=[40], S=[50], bgcount=[0]› bgcount==+1 › IF bgcount=5 THEN› Sound(0,N,10,2) › N==+2› IF N>=S THEN› N==-4› S=N› IF S=40 THEN› S=50 › FI› FI› bgcount=0› FI›RETURN››››PROC Inst()› Graphics(0)› CrSinh=1› Color(0,8,0,8,0)› SDmaCtl=$00› Position(0,1) Print(" ")› Sype("ÂÁÃËÔÒÁÃË",ScRam+14)› Sype("Your Mission is to get all of the",ScRam+81)› Sype("pulsating globules in the maze with",ScRam+121)› Sype("as little backtracking as possible.",ScRam+161)› Sype("Each globule is worth one point. Each",ScRam+201)› Sype("empty space will cost you one point.",ScRam+241)› Sype("You have 3 lives. If you touch one of",ScRam+281)› Sype("the robots you lose a life. An extra ",ScRam+321)› Sype("life is awarded at 3,000 points. If",ScRam+361)› Sype("you touch the bird it will cost you 50",ScRam+401)› Sype("points. If you open one of the doors",ScRam+441)› Sype("in the walls you will recieve 100 extra",ScRam+481)› Sype("points. If you touch a multi-color ",ScRam+521)› Sype("bonus globule your score is increased",ScRam+561)› Sype("by the number of globules you've ",ScRam+601)› Sype("already gotten on that maze. You must ",ScRam+641)› Sype("return to home base after getting all ",ScRam+681)› Sype("the globules. There are 3 screens. ",ScRam+721)› Sype("When you finish screen 3 you are ",ScRam+761)› Sype("returned to screen 1 and the action ",ScRam+801)› Sype("speeds up. Press the fire button to ",ScRam+841)› Sype("pause. Move the stick to resume play.",ScRam+881)› Sype(" PRESS ÓÔÁÒÔ FOR GAME.",ScRam+921)› SDmaCtl=62› DO› UNTIL Con=6› OD› DO› UNTIL Con#6› OD›RETURN››››PROC Title()› Graphics(17)› Color(118,50,22,8,0)› Sype("BACK TRACK",ScRam+65)› Sype("by",ScRam+149)› Sype("sam teague",ScRam+165)› Sype("ðòåóó ïðôéïî",ScRam+304)› Sype("ÆÏÒ  ÌÅÖÅÌ",ScRam+325)› Sype("ðòåóó óåìåãô",ScRam+364)› Sype("ÆÏÒ ÉÎÓÔÒÕÃÔÉÏÎÓ",ScRam+382)› Sype("ðòåóó  óôáòô",ScRam+424)› Sype("ÔÏ  ÐÌÁÙ",ScRam+446)› Speed=3› DO› UNTIL Con#6› OD› DO› Delay(10)› IF Con=3 THEN› Sype(" ",ScRam+244)› Speed==-1› IF Speed=0 THEN› Speed=3› FI› FI› IF Speed=3 THEN› Sype("BEGINNER",ScRam+246)› ELSEIF Speed=2 THEN› Sype("INTERMEDIATE",ScRam+244)› ELSEIF Speed=1 THEN› Sype("ADVANCED",ScRam+246)› FI› IF Con=5 THEN Inst() EXIT FI› UNTIL Con=6 OR Trig0=0› OD› StartSpeed=Speed› DO› UNTIL Con#6 AND Trig0#0› OD›RETURN››PROC Reset()› Zero(PMRam+$300,$500)› X0=64 Y0=197 X1=47 Y1=29 X2=88› Y2=101 X3=160 Y3=101› RobotSpeed1=4 RobotSpeed2=4› RobotDist1=0 RobotDist2=0› RobotCount1=7 RobotCount2=7› OldX0=X0 OldY0=Y0 OldX2=X2 OldY2=Y2› OldX3=X3 OldY3=Y3 BirdCount=0› BirdDist=0 StickFlag=7› Image0=0 Image1=0› DotSound=0 BonusSound=0 DoorSound=0›RETURN››PROC Hit_Bad_Guy()› SndRst()› DoorSound=0 BonusSound=0› Sound(0,81,10,8) Delay(5)› Sound(0,91,10,8) Delay(5)› Sound(0,96,10,8) Delay(5)› Sound(0,108,10,8) Delay(5)› Sound(0,121,10,8) Delay(10)› SndRst()›RETURN››PROC Modify_Display_List()› CARD dlistaddr=$230› BYTE POINTER dlistpntr› dlistpntr=dlistaddr+26› dlistpntr^==+128 ; Set DLI› dlistpntr=dlistaddr+28› dlistpntr^=2 ; Graphics 0 line›RETURN››PROC Init()› Screen=1 Lives=3 Score=0 Dots=0› PMData0(0)=Player0Data0› PMData0(1)=Player0Data1› PMData0(2)=Player0Data2› PMData0(3)=Player0Data3› PMData1(0)=Player1Data0› PMData1(1)=Player1Data2› PMData1(2)=Player1Data1› PMData1(3)=Player1Data2› PMData2(0)=Player2Data0› PMData2(1)=Player2Data1› PMData2(2)=Player2Data2› PMData2(3)=Player2Data3› PMData3(0)=Player2Data0› PMData3(1)=Player2Data1› PMData3(2)=Player2Data2› PMData3(3)=Player2Data3› MissleData(0)=Player3Data0› MissleData(1)=Player3Data1› MissleData(2)=Player3Data2› MissleData(3)=Player3Data3› PMRam=(MemTop)*$100› MissleBase=PMRam+$300› Player0=PMRam+$400› Player1=PMRam+$500› Player2=PMRam+$600› Player3=PMRam+$700› Zero(PMRam+$300,$500)› ChBas=MemTop PMBase=MemTop› Modify_Display_List()› GPrior=17 GraCtl=3› PMColor0=66 PMColor1=34› PMColor2=6 PMColor3=162› Reset()› High_Score()›RETURN››PROC Maze1() ›SDmaCtl=$00›Sype("!@@@@@@@@@@@@@@@@@@!",ScRam)›Sype(")(",ScRam+20)›Sype(")&'''$&'''$(",ScRam+40)›Sype(")#!!!%&''$#!!!%(",ScRam+60)›Sype(")(!)(!!)(!)(",ScRam+80)›Sype("!$#@%&!!!!$#@%&!",ScRam+100)›Sype("!)(!!!!)(!",ScRam+120)›Sype("!!$&!!!!!!$&!!",ScRam+140)›Sype("@@@,;@@@@@@@@,;@@@",ScRam+160)›Sype("  ",ScRam+180)›Sype("$ª;===‹====‹===,ª&",ScRam+200)›Sype(")(",ScRam+220)›Sype(")&''',;'''$(",ScRam+240)›Sype(")(!@%&''$#@!)(",ScRam+260)›Sype(")()&!!!!$()(",ScRam+280)›Sype(")()&'!!!!!!'$()(",ScRam+300)›Sype(")()(!!!!!!!!)()(",ScRam+320)›Sype(")#%#@@@@@@@@%#%(",ScRam+340)›Sype(")(",ScRam+360)›Sype("!==='==‹,;‹==''''!",ScRam+380)›Sype(") #(!!!!",ScRam+400)›Sype(") (!!!!",ScRam+420)›Sype("!''''''''''''''!!!!!",ScRam+440)›SDmaCtl=62›RETURN››PROC Maze2()›SDmaCtl=$00›Sype("!@@@@@@@@@@@@@@@@@@!",ScRam)›Sype(")(",ScRam+20)›Sype(")&'$&''==‹===''$(",ScRam+40)›Sype(")#@%#@%(!)(",ScRam+60)›Sype(")&''$(!)(",ScRam+80)›Sype("!'=‹==''$#@@%#@)(",ScRam+100)›Sype("!%(!%:(",ScRam+120)›Sype(")&$()&'''=,ª(",ScRam+140)›Sype("%;@%#%;@@@%/#",ScRam+160)›Sype(" &') ",ScRam+180)›Sype("'$&''''''==‹==@@)&",ScRam+200)›Sype("!)#!!!@@%>(",ScRam+220)›Sype("!)(!%&===,>(",ScRam+240)›Sype("!!$#%&'')>(",ScRam+260)›Sype("!!)&!!!)&',ª>(",ScRam+280)›Sype("!@@==‹=@@@@%()>(",ScRam+300)›Sype(")()&)(",ScRam+320)›Sype(");====‹===,()()(",ScRam+340)›Sype(")()()(",ScRam+360)›Sype("!==‹'''''''$(%#)(",ScRam+380)›Sype(") #@@@@@@%::(",ScRam+400)›Sype(") /(",ScRam+420)›Sype("!''''''''''''''!'''!",ScRam+440)›SDmaCtl=62›RETURN››PROC Maze3()›SDmaCtl=$00›Sype("!@@@@@@@@@@@@@@@@@@!",ScRam)›Sype(")(",ScRam+20)›Sype(")(",ScRam+40)›Sype(")(",ScRam+60)›Sype(")(",ScRam+80)›Sype("%#",ScRam+100)›Sype(" ªª ",ScRam+120)›Sype("$&",ScRam+140)›Sype(")(",ScRam+160)›Sype(")(",ScRam+180)›Sype(")(",ScRam+200)›Sype(")(",ScRam+220)›Sype("!''''',;'''''!",ScRam+240)›Sype(" #!@%&''$#@!% ",ScRam+260)›Sype(" )&!!!!$( ",ScRam+280)›Sype(" )&'!!!!!!'$( ",ScRam+300)›Sype(" )(!!!!!!!!)( ",ScRam+320)›Sype(" )#@@@@@@@@%( ",ScRam+340)›Sype(" &)($ ",ScRam+360)›Sype("!@@@'=‹=,;=‹='!!!!",ScRam+380)›Sype(") :(!!!!",ScRam+400)›Sype(") (!!!!",ScRam+420)›Sype("!''''''''''''''!!!!!",ScRam+440)›SDmaCtl=62›RETURN››PROC Life_Display()› BYTE ctr› Sype(" ",ScRam+477)› FOR ctr=1 TO Lives› DO› Sype("X",ScRam+476+ctr)› OD›RETURN››PROC Over()› Sype("**************",ScRam+103)› Sype("* çáíå ïöåò *",ScRam+123)› Sype("*ðòåóó óôáòô*",ScRam+143)› Sype("**************",ScRam+163)› DO› UNTIL Con=6 OR Trig0=0 › OD› IF Score>HighScore THEN› HighScore=Score› FI› Score=0› Dots=0› Lives=3› High_Score()› Screen=1› Speed=StartSpeed› Color(194,10,240,246,0)› Maze1()› Life_Display()› DO › UNTIL Trig0#0 AND Con#6› OD›RETURN››PROC NextMaze()› Reset()› SndRst()› Song()› Dots=0› Screen==+1› IF Screen=2 THEN› Color(114,8,240,246,0)› Maze2()› ELSEIF Screen=3 THEN› Color(20,10,240,246,0)› Maze3()› ELSEIF Screen=4 THEN› Speed==-1› IF Speed<1 THEN› Speed=1› FI› Color(194,10,240,246,0)› Screen=1› Maze1()› FI›RETURN››PROC PosPlayer()› HitClr=0› HPosM0=X0 › HPosM1=X0+2› HPosM2=X0+4 › HPosM3=X0+6› HPos0=X0 › MoveBlock(Player0+Y0,PMData0(Image1)› ,14)› HPos1=X1 › MoveBlock(Player1+Y1,PMData1(Image0)› ,14)› HPos2=X2 › MoveBlock(Player2+Y2,PMData2(Image0)› ,14)› HPos3=X3 › MoveBlock(Player3+Y3,PMData3(Image0)› ,14)› MoveBlock(MissleBase+Y0,› MissleData(Image1),14)›RETURN››PROC Score_Display()› StrI(Score,String)› Sype(" ",ScRam+468)› Sype(String,ScRam+468)›RETURN››PROC Flash()› BYTE blink› blink==+1› IF blink>7 THEN› IF Color1>10 THEN Color1=10› ELSE Color1=54› FI› Color2=Rand(255)› blink=0› FI›RETURN››PROC Sounds()› IF DoorSound THEN› DoorSound==-1› IF DoorSound<15 THEN› Sound(2,72,10,8)› Sound(3,60,10,8)› ELSE› Sound(2,60,10,8)› Sound(3,47,10,8)› FI› ELSEIF BonusSound THEN› BonusSound==-1› IF BonusSound<15 THEN› Sound(2,29,10,8)› Sound(3,35,10,8)› ELSE› Sound(2,35,10,8)› Sound(3,45,10,8)› FI› ELSE › Sound(2,0,0,0)› Sound(3,0,0,0)› FI› IF DotSound THEN› DotSound==-1› Sound(1,125,10,8)› ELSE › Sound(1,0,0,0)› FI›RETURN››PROC Pause()› SndRst()› DO › UNTIL Stick(0)<>15› OD›RETURN› ›PROC Animate()› BYTE count› count==+1› IF count>4 THEN› count=0› Image0==+1› IF Image0=4 THEN › Image0=0› FI› FI›RETURN››PROC Move_Stick()› BYTE stickdir› StickFlag==+1› IF StickFlag>7 THEN› ; Go through tunnel› IF X0<48 THEN X0=200› ELSEIF X0>200 THEN X0=48› FI› OldX0=X0 OldY0=Y0› stickdir=Stick0› StickFlag=0 › IF SpaceFlag=1 THEN› X=(X0-46)/8 Y=(Y0-24)/8› IF X0<80 AND Y0>184 THEN› Score==+1› FI› IF CheckLocate(X0,Y0)=1 THEN› IF Locate(X,Y)=' THEN› Score==-1› FI› FI› FI› IF stickdir=15 OR stickdir=10› OR stickdir=6 OR stickdir=9› OR stickdir=5 THEN› SpaceFlag=0› ELSE SpaceFlag=1 Atract=0› FI› FI› IF stickdir=14 THEN› Y0==-1 Image1=1› ELSEIF stickdir=7 THEN› X0==+1 Image1=3› ELSEIF stickdir=13 THEN› Y0==+1 Image1=0› ELSEIF stickdir=11 THEN› X0==-1 Image1=2› FI›RETURN››PROC Move_Bird()› BYTE dir, time, count=[0]› count==+1› IF BirdCount THEN› BirdCount==-1› FI› IF count=Speed THEN› IF BirdDist<1 THEN› dir=Rand(9)› BirdDist=Rand(40)› FI› IF BirdCount=0 THEN› IF dir=1 THEN Y1==-1› ELSEIF dir=2 THEN X1==+1 Y1==-1› ELSEIF dir=3 THEN X1==+1› ELSEIF dir=4 THEN X1==+1 Y1==+1› ELSEIF dir=5 THEN Y1==+1› ELSEIF dir=6 THEN X1==-1 Y1==+1› ELSEIF dir=7 THEN X1==-1 › ELSEIF dir=8 THEN X1==-1 Y1==-1› FI› FI› BirdDist==-1› count=0› FI›RETURN››INT FUNC ABS(INT i)› IF i<0 THEN i=-i FI›RETURN(i)››PROC Move_Robot1()› BYTE robotdir› INT disx, disy › RobotSpeed1==+1› IF RobotSpeed1>Speed-1 THEN› RobotSpeed1=0› RobotCount1==+1› IF RobotCount1>7 THEN› RobotCount1=0› IF X2<48 THEN X2=200› ELSEIF X2>200 THEN X2=48› FI› OldX2=X2 OldY2=Y2› RobotDist1==-1› IF RobotDist1<1 THEN› RobotDist1=Rand(8)› IF Rand(3)#2 THEN› disx=ABS(X0-X2) › disy=ABS(Y0-Y2) › IF disx>disy THEN› IF X2>X0 THEN › robotdir=4 › ELSE › robotdir=2› FI› ELSE › IF Y2>Y0 THEN › robotdir=1 › ELSE› robotdir=3› FI› FI› ELSE robotdir=Rand(5)› FI› FI› FI› ;Adjust coordinates for robot› IF robotdir=1 THEN Y2==-1› ELSEIF robotdir=2 THEN X2==+1› ELSEIF robotdir=3 THEN Y2==+1› ELSEIF robotdir=4 THEN X2==-1› FI› FI›RETURN››PROC Move_Robot2()› BYTE robotdir› INT disx, disy › RobotSpeed2==+1› IF RobotSpeed2>Speed-1 THEN› RobotSpeed2=0› RobotCount2==+1› IF RobotCount2>7 THEN› RobotCount2=0› IF X3<48 THEN X3=200› ELSEIF X3>200 THEN X3=48› FI› OldX3=X3 OldY3=Y3› RobotDist2==-1› IF RobotDist2<1 THEN› RobotDist2=Rand(8) › IF Rand(3)#2 THEN › disx=ABS(X0-X3) › disy=ABS(Y0-Y3) › IF disx>disy THEN › IF X3>X0 THEN › robotdir=4 › ELSE › robotdir=2› FI› ELSE › IF Y3>Y0 THEN › robotdir=1 › ELSE› robotdir=3› FI› FI› ELSE robotdir=Rand(5)› FI› FI› FI› ;Adjust coordinates for robot› IF robotdir=1 THEN Y3==-1› ELSEIF robotdir=2 THEN X3==+1› ELSEIF robotdir=3 THEN Y3==+1› ELSEIF robotdir=4 THEN X3==-1› FI› FI›RETURN››BYTE FUNC Hit_Man(BYTE playfield)›RETURN(P0PF&playfield)››BYTE FUNC Hit_Robot1(BYTE playfield)›RETURN(P2PF&playfield)› ›BYTE FUNC Hit_Robot2(BYTE playfield)›RETURN(P3PF&playfield)› ›PROC Collisions() › CARD offset› X=(X0-46)/8 Y=(Y0-24)/8› offset=(Y*20)+X› ;Man hits super globule› IF CheckLocate(X0,Y0)=1 THEN› IF Hit_Man(4) THEN› IF Locate(X,Y)='ª THEN› Sype(" ",ScRam+offset)› Score==+Dots› BonusSound=30› FI› ;Man hits door› ELSEIF Hit_Man(8) THEN› IF Locate(X,Y)='‹ THEN› Score==+101› Sype(" ",ScRam+offset)› DoorSound=30› FI› ;Man hits dot› ELSEIF Hit_Man(2) THEN› IF Locate(X,Y)=' THEN› Sype(" ",ScRam+offset)› Score==+2› Dots==+1› DotSound=2 › FI› FI› FI› ;Man hits wall› IF Hit_Man(1) THEN› X0=OldX0 › Y0=OldY0› StickFlag=7› Score==+1› IF X0<80 AND Y0>184 THEN› Score==-1› FI› FI› ;Robot1 hits wall› IF Hit_Robot1(1) THEN› X2=OldX2 Y2=OldY2› RobotCount1=7 RobotDist1=1› FI› ;Robot1 hits door› IF Hit_Robot1(8) THEN › X=(X2-46)/8 Y=(Y2-24)/8› IF Locate(X,Y)='‹ THEN› offset=(Y*20)+X› Sype(" ",ScRam+offset)› FI› FI› ;Robot2 hits wall› IF Hit_Robot2(1) THEN› X3=OldX3 Y3=OldY3› RobotCount2=7 RobotDist2=1› FI› ;Robot2 hits door› IF Hit_Robot2(8) THEN › X=(X3-46)/8 Y=(Y3-24)/8› IF Locate(X,Y)='‹ THEN› offset=(Y*20)+X› Sype(" ",ScRam+offset)› FI› FI› ;Man hits bird› IF P0PL=2 THEN› Zero(PMRam+$500,$100)› Score==-50 X1=47 Y1=29› BirdCount=100› Hit_Bad_Guy() › FI› ;Man hits a robot› IF P0PL=4 OR P0PL=8 THEN› Lives==-1› Life_Display()› Hit_Bad_Guy()› Reset()› FI› ;Bird hits boundry› IF X1>192 THEN X1==-2 BirdDist=0 FI› IF X1<47 THEN X1==+2 BirdDist=0 FI› IF Y1>200 THEN Y1==-2 BirdDist=0 FI› IF Y1<29 THEN Y1==+2 BirdDist=0 FI›RETURN››PROC Checks()› BYTE extra_life› IF Score=0 THEN› extra_life=0› FI› IF Trig0=0 THEN Pause() FI› IF Dots>172 AND X0<74 AND› Y0>192 AND Screen=1 THEN› NextMaze()› ELSEIF Dots>177 AND X0<74 AND› Y0>192 AND Screen=2 THEN› NextMaze()› ELSEIF Dots>252 AND X0<74 AND› Y0>192 AND Screen=3 THEN› NextMaze()› FI› IF extra_life=0 AND Score>2999 THEN› Lives==+1› Life_Display()› extra_life=1› FI› IF Lives<1 THEN › Life_Display()› Over()› FI›RETURN››PROC Game()› Reset()› DO› Flash()› BGNoise()› Collisions()› Move_Stick()› Move_Bird()› Move_Robot1()› Move_Robot2()› Animate()› Sounds()› PosPlayer()› Score_Display()› Checks()› Delay(1)› IF Con=6 THEN EXIT FI› OD›RETURN››PROC Main()› HighScore=0› DO› OldMemTop=MemTop› Title()› SDmaCtl=0› Move_Set()› Init()› SetDLI()› Color(194,8,240,246,0)› Maze1()› Sype("SCORE",ScRam+462)› Sype("HIGH SCORE",ScRam+482)› Life_Display()› PosPlayer()› SndRst()› Game()› IF Score>HighScore THEN› HighScore=Score› FI› HPos0=0 HPos1=0 HPos2=0 HPos3=0› HPosM0=0 HPosM1=0 HPosM2=0 HPosM3=0› SndRst()› MemTop=OldMemTop› OD›RETURN››TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT