General Information \\ Author: Sam Teague \\ Language: ACTION! \\ {{{ 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("BACKTRACK",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 START 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("press option",ScRam+304) Sype("FOR LEVEL",ScRam+325) Sype("press select",ScRam+364) Sype("FOR INSTRUCTIONS",ScRam+382) Sype("press start",ScRam+424) Sype("TO PLAY",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("* game over *",ScRam+123) Sype("*press start*",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 }}}