Author: Sam Teague
Language: ACTION!
The data "
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(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+20)
Sype(")0xE&'''$0xE0xE0xE0xE0xE0xE&'''$0xE(",ScRam+40)
Sype(")0xE#!!!%0xE&''$0xE#!!!%0xE(",ScRam+60)
Sype(")0xE0xE(!)0xE0xE(!!)0xE0xE(!)0xE0xE(",ScRam+80)
Sype("!$0xE#@%0xE&!!!!$0xE#@%0xE&!",ScRam+100)
Sype("!)0xE0xE0xE0xE0xE(!!!!)0xE0xE0xE0xE0xE(!",ScRam+120)
Sype("!!$0xE0xE0xE&!!!!!!$0xE0xE0xE&!!",ScRam+140)
Sype("@@@,0xE;@@@@@@@@,0xE;@@@",ScRam+160)
Sype(" 0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE ",ScRam+180)
Sype("$0xE*;==========,*0xE&",ScRam+200)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+220)
Sype(")0xE&''',0xE0xE0xE0xE0xE0xE;'''$0xE(",ScRam+240)
Sype(")0xE(!@%0xE0xE&''$0xE0xE#@!)0xE(",ScRam+260)
Sype(")0xE()0xE0xE0xE&!!!!$0xE0xE0xE()0xE(",ScRam+280)
Sype(")0xE()0xE&'!!!!!!'$0xE()0xE(",ScRam+300)
Sype(")0xE()0xE(!!!!!!!!)0xE()0xE(",ScRam+320)
Sype(")0xE#%0xE#@@@@@@@@%0xE#%0xE(",ScRam+340)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+360)
Sype("!==='==,0xE0xE;==''''!",ScRam+380)
Sype(") #0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(!!!!",ScRam+400)
Sype(") 0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(!!!!",ScRam+420)
Sype("!''''''''''''''!!!!!",ScRam+440)
SDmaCtl=62
RETURN
PROC Maze2()
SDmaCtl=$00
Sype("!@@@@@@@@@@@@@@@@@@!",ScRam)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+20)
Sype(")0xE&'$0xE&''=====''$0xE(",ScRam+40)
Sype(")0xE#@%0xE#@%0xE0xE0xE0xE0xE0xE(!)0xE(",ScRam+60)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE&''$0xE(!)0xE(",ScRam+80)
Sype("!'===''$0xE#@@%0xE#@)0xE(",ScRam+100)
Sype("!%0xE0xE0xE0xE(!%0xE0xE0xE0xE0xE0xE0xE0xE:0xE(",ScRam+120)
Sype(")0xE0xE&$0xE()0xE0xE&'''=,0xE*0xE(",ScRam+140)
Sype("%0xE;@%0xE#%0xE;@@@%0xE0xE0xE/0xE#",ScRam+160)
Sype(" 0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE&')0xE ",ScRam+180)
Sype("'$0xE&''''''====@@)0xE&",ScRam+200)
Sype("!)0xE#!!!@@%0xE0xE0xE0xE0xE0xE0xE>0xE(",ScRam+220)
Sype("!)0xE0xE(!%0xE0xE0xE0xE&===,0xE>0xE(",ScRam+240)
Sype("!!$0xE#%0xE0xE&'')0xE0xE0xE0xE0xE>0xE(",ScRam+260)
Sype("!!)0xE0xE0xE0xE&!!!)0xE&',*>0xE(",ScRam+280)
Sype("!@@===@@@@%0xE()0xE0xE>0xE(",ScRam+300)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE()0xE&)0xE(",ScRam+320)
Sype(")0xE;=======,0xE()0xE()0xE(",ScRam+340)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE()0xE()0xE(",ScRam+360)
Sype("!=='''''''$0xE(%0xE#)0xE(",ScRam+380)
Sype(") #@@@@@@%0xE:0xE0xE0xE:0xE(",ScRam+400)
Sype(") 0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE/0xE0xE0xE(",ScRam+420)
Sype("!''''''''''''''!'''!",ScRam+440)
SDmaCtl=62
RETURN
PROC Maze3()
SDmaCtl=$00
Sype("!@@@@@@@@@@@@@@@@@@!",ScRam)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+20)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+40)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+60)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+80)
Sype("%0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE#",ScRam+100)
Sype(" 0xE0xE0xE0xE*0xE0xE0xE0xE0xE0xE0xE0xE*0xE0xE0xE0xE ",ScRam+120)
Sype("$0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE&",ScRam+140)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+160)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+180)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+200)
Sype(")0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(",ScRam+220)
Sype("!''''',0xE0xE0xE0xE0xE0xE;'''''!",ScRam+240)
Sype(" #!@%0xE0xE&''$0xE0xE#@!% ",ScRam+260)
Sype(" )0xE0xE0xE&!!!!$0xE0xE0xE( ",ScRam+280)
Sype(" )0xE&'!!!!!!'$0xE( ",ScRam+300)
Sype(" )0xE(!!!!!!!!)0xE( ",ScRam+320)
Sype(" )0xE#@@@@@@@@%0xE( ",ScRam+340)
Sype(" &)0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE($ ",ScRam+360)
Sype("!@@@'==,0xE0xE;=='!!!!",ScRam+380)
Sype(") :0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(!!!!",ScRam+400)
Sype(") 0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE0xE(!!!!",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)='0xE 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
" is not legal for a JDOM character content: 0x000e is not a legal XML character.