home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
AMOS PD CD
/
amospdcd.iso
/
476-500
/
apd494
/
demonsbreach.bak
/
demonsbreach.amosSourceCode
Wrap
AMOS Source Code
|
1989-04-03
|
25KB
|
1,001 lines
Set Buffer 20
Proc PRE
Hide On
'Load ":l2stuff.abk"
'EDBLOKDATA
Flash Off
Curs Off
Cls 0
Load ":L3blox.ABK"
Get Icon Palette
Flash 14,"(f00,1)(d00,1)(b00,1)(900,1)(700,1)(500,1)(300,1)(100,1)(300,1)(500,1)(700,1)(900,1)(b00,1)(d00,1)"
Flash 15,"(110,1)(330,1)(550,1)(770,1)(990,1)(bb0,1)(dd0,1)(ff0,1)(dd0,1)(bb0,1)(990,1)(770,1)(550,1)(330,1)"
Dim FIN(1)
Dim SPL(2)
Dim NAS(3)
Dim NAM(6)
Dim NAM$(6)
Dim BLN(3)
Global FIN(),PHZ,SCR,STP,PRORET,LAD,SPL(),NRG,SPL,ITEMP,NAS(),NCNT,NDPT
Global NAM(),NAM$(),LEVEL,LIVES,INV,PUD,LFIN,SCORE
Global BLN(),XOUT
STP=1
PHZ=1
Double Buffer
Autoback 0
Bob Update Off
Synchro Off
'
'Load ":l3stuff.ABK"
'
'Proc EDT
'Proc EDT2
Do
Proc TITLE
LEVEL=0
' spells known:
SPL(0)=1
SPL(1)=0
SPL(2)=0
LIVES=9
SCORE=0
'
Do
Proc GAMEON
If XOUT=1 Then Inc LEVEL Else Proc LOST : Exit
If LEVEL>2 Then Proc GWON : Exit
Loop
Loop
Procedure SKROL
If PHZ=0 Then Pop Proc
ST=STP*2
If PHZ=1 Then ST=STP : PHZ=2
If PHZ=3 Then ST=STP : PHZ=0
Screen Copy 0,0,40,336,178 To 0,-ST,40
Bob 0,X Bob(0)-STP,,
If PHZ=0 Then Goto SKP1
If NAS(0)>0 Then Bob 1,X Bob(1)-1,,
If NAS(1)>0 Then Bob 2,X Bob(2)-1,,
If NAS(2)>0 Then Bob 3,X Bob(3)-1,,
If NAS(3)>0 Then Bob 4,X Bob(4)-1,,
If BLN(0) Then Sprite 4,X Sprite(4)-1,,
If BLN(1) Then Sprite 5,X Sprite(5)-1,,
If BLN(2) Then Sprite 6,X Sprite(6)-1,,
If BLN(3) Then Sprite 7,X Sprite(7)-1,,
SKP1:
Add FIN(SCR),ST
BLK=FIN(SCR)/16
For BK=Max(0,BLK-1) To BLK
BKK=0
For T=0 To 1
P=Peek(Start(5)+(BK*2)+T+160)
If P>0 Then BKK=1
Paste Icon 320-FIN(SCR)+(BK*16),50+(T*64),P+1
Next T
If BKK=0 Then LFIN=1 : If PHZ=2 Then PHZ=3
Next BK
End Proc
Procedure EDBLOKDATA
For T=0 To 19
Print "Block...";T+1
Print "CD1:"
Input A : Poke Start(5)+(T*8),A
Input A : Poke Start(5)+(T*8)+1,A
Print "CD2:"
Input A : Poke Start(5)+(T*8)+2,A
Input A : Poke Start(5)+(T*8)+3,A
Print "Ladder:"
Input A : Poke Start(5)+(T*8)+4,A
Input A : Poke Start(5)+(T*8)+5,A
Print "Death:"
Input A : Poke Start(5)+(T*8)+6,A
Input A : Poke Start(5)+(T*8)+7,A
Next T
Print "Done"
End
End Proc
Procedure DSCR[BK,AP,BP]
For N=0 To 1
If AP=0 and BP=19 Then Cls 0
For X=AP To BP
BX=X+BK
If BX<0 or BX>500
Ink 1 : Bar X*16,50 To X*16+15,178
Else
For T=0 To 1
P=Peek(Start(5)+(BX*2)+T+160)
Paste Icon X*16,50+(T*64),P+1
Next T
End If
Next X
Screen Swap : Wait Vbl
Next N
End Proc
Procedure EDT
Autoback 1
Show On
XP=0
Clear Key
IS=0
Proc DSCR[0,0,19]
Do
I$=Upper$(Inkey$)
Clear Key
If I$="Z" Then Add XP,-1,-5 To 505 : Proc DSCR[XP,0,19]
If I$="X" Then Add XP,1,-5 To 505 : Proc DSCR[XP,0,19]
If I$="A" Then Add IS,-1,0 To Length(2)-1
If I$="S" Then Add IS,1,0 To Length(2)-1
If Mouse Key<>0
X=XP+(X Screen(X Mouse)/16)
If X>-1 and X<500
If Y Mouse<164
Poke Start(5)+160+(X*2),IS
Else
Poke Start(5)+160+(X*2)+1,IS
End If
Proc DSCR[XP,X-XP,X-XP]
End If
End If
Wait Vbl
Loop
End Proc
Procedure GAMEON
Load "l"+Str$(LEVEL+1)-" "+"stuff.ABK",5
Load ":thewizz.ABK"
Load ":thespells.ABK",1
Load ":nast"+Str$(LEVEL+1)-" "+".ABK",1
Load ":l"+Str$(LEVEL+1)-" "+"blox.ABK"
Proc DSCR[0,0,19]
BK=0
LAD=0
XOUT=0
Bob 0,50,150,1
Channel 0 To Bob 0
A$="E:A1,(A,1);A:IR0=0JB;IJ1=4JC;IJ1=8JD;IJ1=1JH;IJ1=5JI;IJ1=9JJ;P;JA"
A$=A$+";B:IR0=1JA;IJ1=5JM;IJ1=4JM;IJ1=21JM;IJ1=20JM;IJ1=9JN;IJ1=25JN;IJ1=24JN;IJ1=8JN;O:M0,2,1;JB"
A$=A$+";C:A0,($8001,5)($8002,5);F:IR1>0JE;M-2,0,1;IJ1<>4JE;IR0=0JB;JF"
A$=A$+";D:A0,(1,5)(2,5);G:IR2>0JE;M2,0,1;IJ1<>8JE;IR0=0JB;JG"
'A$=A$+";H:LR5=0;JK"
'A$=A$+";I:A1,($8002,1);LR5=-1;JK"
'A$=A$+";J:A1,(2,1);LR5=1;JK"
A$=A$+";H:LR6=0;L:LR6=R6+1;M0,-2,1;IR6<13JL;JB"
A$=A$+";I:A1,($8003,1);LR6=0;K:LR6=R6+1;IR1>0JL;M-2,-2,1;IR6<13JK;JB"
A$=A$+";J:A1,(3,1);LR6=0;P:LR6=R6+1;IR2>0JL;M2,-2,1;IR6<13JP;JB"
A$=A$+";M:A1,($8003,1);IR1>0JO;M-2,2,1;JB"
A$=A$+";N:A1,(3,1);IR2>0JO;M2,2,1;JB"
B$="A1,(4,1);G:A1,(A,1);A:P;IJ1=1JB;IJ1=2JC;IJ1=0JA;IJ1>15JA;F:LR9=1;M0,0,999"
B$=B$+";B:A0,(4,5)(5,5);D:M0,-2,1;IR0=0JF;IJ1=1JD;JG"
B$=B$+";C:A0,(4,5)(5,5);E:M0,2,1;IR0=0JF;IJ1=2JE;JG"
Amal 0,A$
Amal On 0
FIN(0)=320
FIN(1)=320
PHZ=0
NRG=0
SPL=0
INV=0
PUD=2
LFIN=0
For T=0 To 3
NAS(T)=0
BLN(T)=0
Next T
NCNT=Deek(Start(5)+500)
NDPT=500
For T=0 To 1
Proc SPLDO
Screen Swap : Wait Vbl
Next T
For T=0 To 7
Sprite T,0,0,61
Next T
Music 1
Proc AMGET
Make Mask
Randomize Timer
Do
Bob Clear
If Key State(25)
Wait 5
Clear Key
Wait Key
Wait 5
End If
If PUD>0 Then Proc SPLDO : Dec PUD
Synchro
If LFIN=1 and PHZ=0
If NAS(0)=0 and NAS(1)=0 and NAS(2)=0 and NAS(3)=0
If LEVEL<2
Amal Off
Channel 0 To Bob 0
Amal 0,"A0,(9,2)(10,2);M0,-200,200"
Amal On 0
For T=0 To 199
Synchro
Bob Draw
Screen Swap : Wait Vbl
Bob Clear
Next T
Else
Amal Off
Channel 0 To Bob 0
Amal 0,"A0,(11,1)(12,1)"
Bob Update On
Synchro On
Bob 5,X Bob(0),Y Bob(0),112
Channel 10 To Bob 5
Amal 10,"M247-X,140-Y,100;A1,(110,10)(111,10)"
Load ":wonmus.ABK"
Music 1
Amal On 10
Amal On 0
Wait 100
For T=0 To 3
Bob T+1,247,140,112
Channel T+5 To Bob T+1
Amal T+5,"FR7=0T8;LX=0;LY=Z(255);LA=Z(31)+71;M247-X,140-Y,50;NR7"
Amal On T+5
Wait 10
Next T
Wait 500
Amal Off
Channel 0 To Bob 0
Amal 0,A$
Amal On 0
Amreg(0,0)=1
Bob Off 5
Bob Off 4
Bob Off 2
Bob Off 1
Bob Off 3
Wait 5
Synchro Off
Bob Update Off
While Fire(1)=0
X=Rnd(48)+223
Y=Rnd(30)+110
Screen Copy 0,X,Y,X+1,200 To 0,X,Y+1
Screen Swap
Screen Copy Physic(0) To Logic(0)
Wend
End If
XOUT=1
End If
End If
If LAD=0
Proc CD[X Bob(0),Y Bob(0)]
Amreg(0,0)=PRORET
If I Bob(0)<0
Proc CD[X Bob(0)-7,Y Bob(0)-2]
Amreg(0,1)=PRORET
Amreg(0,2)=0
Else
Proc CD[X Bob(0)+7,Y Bob(0)-2]
Amreg(0,2)=PRORET
Amreg(0,1)=0
End If
Proc LCD[X Bob(0),Y Bob(0)-2]
If PRORET>0
If Joy(1)=1 or Joy(1)=2
If INV>-1
LAD=1
Amal 0,B$ : Amal On 0
Amreg(0,9)=0
End If
End If
End If
End If
If LAD=1 and INV>-1
Proc LCD[X Bob(0),Y Bob(0)-2]
Amreg(0,0)=PRORET
If Amreg(0,9)=1
Amal 0,A$
Amal On 0
LAD=0
End If
End If
If Fire(1) and INV>-1 Then Proc ZAPP Else If NRG>0 Then Proc ZUP
If SPL>0 Then Dec SPL
If PHZ=0 and X Bob(0)>200 and LFIN=0 Then PHZ=1
If PHZ=2 and X Bob(0)<200 Then PHZ=3
If X Bob(0)<0 Then Bob 0,0,,
If X Bob(0)>319 Then Bob 0,319,,
Proc NASAC
Proc NASTYCD
Proc SPELLCD
If INV=0 Then Proc WIZCD
If INV>0 Then Dec INV
If INV<0
If Amreg(0,9)=1
If LAD=0
Amal 0,A$
Else
Amal 0,B$
Amreg(0,9)=0
End If
Proc CD[X Bob(0),Y Bob(0)]
Amreg(0,0)=PRORET
Amal On 0
Bob 0,,,1
INV=50
Dec LIVES
If LIVES<0
XOUT=2
End If
R=Rnd(2)
SPL(R)=Max(0,SPL(R)-1)
If R=0
SPL(0)=Max(1,SPL(0))
End If
PUD=2
End If
End If
Proc NZAP
Amreg(23)=X Bob(0)
Amreg(24)=Y Bob(0)
Wait Vbl
Proc SKROL
If XOUT>0
Autoback 2
Bob Update On
Amal Off
Bob Off
Sprite Off
Wait 5
Cls 0
Bob Update Off
Autoback 0
Exit
End If
Bob Draw
Screen Swap : Wait Vbl
SCR=1-SCR
Loop
End Proc
Procedure CD[X,Y]
PRORET=0
BLK=(FIN(SCR)+X-320)/16
LEV=0
If Y>114 Then LEV=1
If LEV<0 or LEV>1 Then Pop Proc
If BLK<0 or BLK>499 Then Pop Proc
YP=Y-50-(LEV*64)
P=Peek(Start(5)+160+(BLK*2)+LEV)
For T=0 To 1
Y1=Peek(Start(5)+(P*8)+(T*2))
Y2=Peek(Start(5)+(P*8)+(T*2)+1)
If Y1>0 or Y2>0
If YP>Y1 and YP<Y2
PRORET=1 : Exit
Exit
End If
End If
Next T
End Proc
Procedure LCD[X,Y]
PRORET=0
BLK=(FIN(SCR)+X-320)/16
LEV=0
If Y>114 Then LEV=1
If LEV<0 or LEV>1 Then Pop Proc
If BLK<0 or BLK>499 Then Pop Proc
YP=Y-50-(LEV*64)
P=Peek(Start(5)+160+(BLK*2)+LEV)
Y1=Peek(Start(5)+(P*8)+4)
Y2=Peek(Start(5)+(P*8)+5)
If Y1>0 or Y2>0
If YP>Y1 and YP<Y2
PRORET=1
End If
End If
End Proc
Procedure ZAPP
If NRG=0 Then ITEMP=I Bob(0)
Inc NRG
I=7
If NRG>30 Then I=9
If NRG>60 Then I=11
If ITEMP<0 Then I=Hrev(I)
Bob 0,,,I+SCR
End Proc
Procedure ZUP
N=0
If NRG>30 Then N=1
If NRG>60 Then N=2
SN=SPL(N)+(N*3)
NRG=0
Bob 0,,,ITEMP
If SPL(N)=0 Then Pop Proc
If SPL>0 Then Pop Proc
FF=0
If ITEMP<0 Then FF=1000
Restore 1000+SN+FF
Read DAMN
Read SPL
Read A,B,C
Colour 17,A
Colour 18,B
Colour 19,C
Colour 21,A
Colour 22,B
Colour 23,C
For T=0 To 2
Read A$
If A$<>""
For N=0 To 3
If X Sprite(N)<30
NS=N
Sprite NS,X Hard(X Bob(0)),Y Hard(Y Bob(0))-10,70
Channel NS+1 To Sprite NS
Amal NS+1,A$
Amal On NS+1
Amreg(NS+1,9)=DAMN
Exit
End If
Next N
End If
Next T
1001 Data 1,25,$FFF,$FF0,$990,"LA=32;M100,0,25;LX=0","",""
2001 Data 1,25,$FFF,$FF0,$990,"LA=32;M-100,0,25;LX=0","",""
1002 Data 1,20,$FF0,$F80,$F00,"A0,(33,1)(34,1);M160,0,25;LX=0","",""
2002 Data 1,20,$FF0,$F80,$F00,"A0,(35,1)(36,1);M-160,0,25;LX=0","",""
1003 Data 1,10,$FFF,$88F,$F,"A0,(37,1)(38,1);M250,0,25;LX=0","",""
2003 Data 1,10,$FFF,$88F,$F,"A0,(37,1)(38,1);M-250,0,25;LX=0","",""
1004 Data 2,42,$8F8,$F0,$80,"LA=39;M-300,0,40;LX=0","LA=40;M300,0,40;LX=0",""
2004 Data 2,42,$8F8,$F0,$80,"LA=39;M-300,0,40;LX=0","LA=40;M300,0,40;LX=0",""
1005 Data 3,80,$FF0,$F80,$F00
Data "A0,(42,2)(41,2);M30,30,20;M30,-30,20;M30,30,20;M30,-30,20;LX=0"
Data "A0,(42,2)(41,2);M30,-30,20;M-30,-30,20;M30,-30,20;M-30,-30,20;LX=0"
Data "A0,(42,2)(41,2);M-30,30,20;M-30,-30,20;M-30,30,20;M-30,-30,20;LX=0"
2005 Data 3,80,$FF0,$F80,$F00
Data "A0,(42,2)(41,2);M30,30,20;M30,-30,20;M30,30,20;M30,-30,20;LX=0"
Data "A0,(42,2)(41,2);M30,-30,20;M-30,-30,20;M30,-30,20;M-30,-30,20;LX=0"
Data "A0,(42,2)(41,2);M-30,30,20;M-30,-30,20;M-30,30,20;M-30,-30,20;LX=0"
1006 Data 3,30,$F8F,$F0F,$808
Data "LA=43;M50,-30,10;LA=44;M120,0,10;LA=45;M150,150,30;LX=0"
Data "LA=43;M50,-30,10;LA=44;M40,0,10;LA=45;M150,150,30;LX=0"
Data "LA=43;M50,-30,10;LA=44;M80,0,10;LA=45;M150,150,30;LX=0"
2006 Data 3,30,$F8F,$F0F,$808
Data "LA=46;M-50,-30,10;LA=47;M-120,0,10;LA=48;M-150,150,30;LX=0"
Data "LA=46;M-50,-30,10;LA=47;M-40,0,10;LA=48;M-150,150,30;LX=0"
Data "LA=46;M-50,-30,10;LA=47;M-80,0,10;LA=48;M-150,150,30;LX=0"
1007 Data 3,50,$FF0,$F80,$F00,"A0,(49,3)(50,3);M300,0,100,LX=0","",""
2007 Data 3,50,$FF0,$F80,$F00,"A0,(51,3)(52,3);M-300,0,100,LX=0","",""
1008 Data 5,50,$8F8,$F0,$80,"LA=53;M300,0,200,LX=0","",""
2008 Data 5,50,$8F8,$F0,$80,"LA=54;M-300,0,200,LX=0","",""
1009 Data 4,30,$FFF,$88F,$F
Data "LA=56;M80,-50,20;LA=55;M80,0,20;LA=57;M80,50,20;LX=0"
Data "LA=55;M240,0,60;LX=0"
Data "LA=57;M80,50,20;LA=55;M80,0,20;LA=56;M80,-50,20;LX=0"
2009 Data 4,30,$FFF,$88F,$F
Data "LA=59;M-80,-50,20;LA=58;M-80,0,20;LA=60;M-80,50,20;LX=0"
Data "LA=58;M-240,0,60;LX=0"
Data "LA=60;M-80,50,20;LA=58;M-80,0,20;LA=59;M-80,-50,20;LX=0"
End Proc
Procedure SPLDO
For T=0 To 2
If SPL(T)=0
Paste Bob(T+1)*16,180,22
Else
Paste Bob(T+1)*16,180,22+SPL(T)+(T*3)
End If
Next T
Pen 1 : Paper 0
Locate 15,23
Print "Lives:";LIVES;" "
Pen 7 : Paper 0
Locate 25,23
Print "Score:";SCORE;" "
End Proc
Procedure EDT2
Show On
'500 - 3999 :attackwaves
'Deeked; Delay, type, X, Y
'Delay is currently in Pixels(2 pts for a full scroll)
Bob 0,100,20,1
DPT=500
FIN(0)=320
FIN(1)=320
PHZ=0
Proc DSCR[0,0,19]
DEL=0
NTP=1
Do
I$=Upper$(Inkey$)
Clear Key
If I$="A" Then Inc NTP : Pen 1 : Paper 0 : Screen Swap : Locate 0,0 : Print NTP;" " : Screen Swap : Locate 0,0 : Print NTP;" "
If I$="D" Then Dec NTP : Pen 1 : Paper 0 : Screen Swap : Locate 0,0 : Print NTP;" " : Screen Swap : Locate 0,0 : Print NTP;" "
If PHZ=0 and(I$="S") Then PHZ=1
If PHZ=2 and(I$<>"S") Then PHZ=3
If PHZ=1 Then Inc DEL
If PHZ=2 Then DEL=DEL+2
Proc SKROL
If PHZ=0 and Mouse Click<>0
Bell 1
XP=X Screen(X Mouse)
YP=Y Screen(Y Mouse)
Doke Start(5)+DPT,DEL
DEL=0
Doke Start(5)+DPT+2,NTP
Doke Start(5)+DPT+4,XP
Doke Start(5)+DPT+6,YP
DPT=DPT+8
Ink 1
Draw XP+5,YP To XP-5,YP
Draw XP,YP+5 To XP,YP-5
'Locate Max(0,Min(39,X Text(XP)-1)),Y Text(YP)-1
'Pen 1 : Paper 0
'Print NTP
Screen Swap
Screen Copy Physic(0) To Logic(0)
End If
If DPT>3500 Then Print "Warning,Low Memory" : Bell
If DPT>3999 Then End
SCR=1-SCR
Screen Swap
Wait Vbl
Loop
End Proc
Procedure NASAC
If NDPT>3996 Then Pop Proc
If PHZ=1 Then Dec NCNT
If PHZ=2 Then NCNT=NCNT-2
If NCNT<1
NT=Deek(Start(5)+NDPT+2)
NX=Deek(Start(5)+NDPT+4)
NY=Deek(Start(5)+NDPT+6)
'
If NT>0
Proc MKNME[NX,NY,NT]
End If
'
NDPT=NDPT+8
NCNT=NCNT+Deek(Start(5)+NDPT)
End If
End Proc
Procedure MKNME[X,Y,N]
'On Error Goto ERR
For T=0 To 3
If NAS(T)=0
Bob T+1,X,Y,NAM(N-1)
Channel T+5 To Bob T+1
Amal T+5,NAM$(N-1)
Amal On T+5
NAS(T)=N
BLN(T)=0
Exit
End If
Next T
Pop Proc
ERR:
Locate 0,0
Print "Error"
Print "type ";N
Print "BOB";T+1
Print "at ";X;",";Y
Print "image ";NAM(N-1)
End
Resume Next
End Proc
Procedure AMGET
Restore 3000+LEVEL
For T=0 To 6
Read NAM(T)
A$=""
For S=0 To 7
Read B$
A$=A$+B$
Next S
NAM$(T)=A$
Next T
'
' R0=ground
' R1 & 2 = ladders
' R9 = hpts
' R8 = bullpath
'
3000 Data 71,"LR9=0;A1,(72,2)(73,2)(74,2);M0,0,6;A0,(75,5)(76,5)","","","","","","",""
Data 88,"A1,(88,2)(87,3)(86,3)(85,3)(84,3)(83,3);M0,0,20;LR9=1;A:IR0=0JB;IX>RXJC;IX<RXJD;IR9<1JM;P;JA"
Data ";B:A1,(A,1);E:M0,1,1;IR0=1JA;JB"
Data ";C:A0,(80,2)(81,2)(82,2)(81,2);F:M-1,0,1;IR9<1JM;IR1=1JH;IR0=0JB;IZ(63)=1JA;JF"
Data ";D:A0,(77,2)(78,2)(79,2)(78,2);G:M1,0,1;IR9<1JM;IR1=1JH;IR0=0JB;IZ(63)=0JA;JG"
Data ";H:IRY-Y>10JI;IRY-Y<-10JJ;JA"
Data ";I:A0,(89,2)(90,2);K:M0,1,1;IR9<1JM;IR2=0JA;JK"
Data ";J:A0,(89,2)(90,2);L:M0,-1,1;IR9<1JM;IR2=0JA;JL"
Data ";M:A1,(83,2)(84,2)(85,2)(86,2)(87,2)(88,2);M0,0,20;LX=-50"
Data 91,"LR9=3;A:IR0=0JB;IX>RXJC;IX<RXJD;IR9<1JM;P;JA"
Data ";B:A1,(A,1);E:M0,1,1;IR0=1JA;JB"
Data ";C:A0,(91,2)(92,2)(91,2)(93,2);F:M-1,0,2;IR9<1JM;IR1=1JH;IR0=0JB;IZ(63)=1JA;JF"
Data ";D:A0,(94,2)(95,2)(94,2)(96,2);G:M1,0,2;IR9<1JM;IR1=1JH;IR0=0JB;IZ(63)=0JA;JG"
Data ";H:IRY-Y>10JI;IRY-Y<-10JJ;JA"
Data ";I:A0,(99,2)(100,2);K:M0,1,2;IR9<1JM;IR2=0JA;JK"
Data ";J:A0,(99,2)(100,2);L:M0,-1,2;IR9<1JM;IR2=0JA;JL"
Data ";M:A1,(99,2)(97,2)(98,2);M0,0,6;LX=-50"
Data 88,"A1,(88,2)(87,2)(86,2)(84,2)(84,2)(83,2);M0,0,20;LR9=1"
Data ";A:A1,(101,2)(102,2)(103,2);M0,0,4;LR8=3;M0,0,6;A1,(104,2)(105,2)(106,2)(83,2);M0,0,20;IR9>0JA"
Data ";A1,(83,2)(84,2)(85,2)(86,2)(87,2)(88,2);M0,0,20;LX=-50","","","","",""
Data 107,"LR9=1;A:A1,(113,1);M0,0,5;IR0=0JB;IX>RXJC;IX<RXJD;IR9<1JM;JA"
Data ";B:A1,(A,1);E:M0,1,1;IR0=1JA;JB"
Data ";C:A0,(107,1)(108,1)(109,1)(108,1);F:M-2,0,1;IR9<1JM;IR0=0JB;IZ(63)=1JA;JF"
Data ";D:A0,(110,1)(111,1)(112,1)(111,1);G:M2,0,1;IR9<1JM;IR0=0JB;IZ(63)=1JA;JG"
Data ";M:A1,(113,2)(114,2)(115,2);M0,0,10;LX=-50","","",""
Data 116,"LR9=1;LR5=0;A:IR9<1JF;M-1,0,1;IZ(63)=1JB;LR5=R5+1;IR5<200JA"
Data "LR5=0;LA=117;D:IR9<1JF;M1,0,1;IZ(63)=1JC;LR5=R5+1;IR5<200JD;LR5=0;LA=116;JA"
Data ";B:A0,(118,1)(119,1);M-10,0,10;LR8=1;A1,(116,1);JA"
Data ";C:A0,(120,1)(121,1);M10,0,10;LR8=2;A1,(117,1);JD"
Data ";F:M0,-20,10;M0,-10,10;M0,-5,10;M0,5,10;M0,10,10;M0,20,10;M0,100,25;LX=-50","","",""
Data 122,"LR9=20;A:A1,(122,1);M0,0,50;A0,(123,1)(124,1);M0,0,10;LR8=4;IR9>0JA"
Data ";A1,(125,2)(126,2)(127,2)(128,2)(129,2)(130,2);M0,0,20;M0,200,200;LX=-50","","","","","",""
'
'
'
3001 Data 71,"LR9=2;A:A1,(71,2)(72,2)(73,2)(71,2);M0,0,6;LR8=5;M0,0,50;IR9<1JC;IRX>XJB;JA"
Data "B:A1,(74,2)(75,2)(76,2)(74,2);M0,0,6;LR8=6;M0,0,50;IR9<1JC;IRX<XJA;JB;C:A1,(17,1);M0,0,5;LX=-50","","","","","",""
Data 91,"A1,(91,2)(92,3)(93,3);M0,0,20;LR9=2;A:IR0=0JB;IX>RXJC;IX<RXJD;IR9<1JM;P;JA"
Data ";B:A1,(A,1);E:M0,1,1;IR0=1JA;JB"
Data ";C:A0,(77,2)(78,2)(77,2)(79,2);F:M-1,0,1;IR9<1JM;IR1=1JH;IR0=0JB;IZ(63)=2JX;IZ(63)=1JA;JF"
Data ";D:A0,(80,2)(81,2)(80,2)(82,2);G:M1,0,1;IR9<1JM;IR1=1JH;IR0=0JB;IZ(63)=2JY;IZ(63)=0JA;JG"
Data ";H:IRY-Y>10JI;IRY-Y<-10JJ;JA"
Data ";I:A0,(86,2)(85,2);K:M0,1,1;IR9<1JM;IR2=0JA;JK;X:LR8=7;A1,(83,1);M0,0,25;JA"
Data ";J:A0,(86,2)(85,2);L:M0,-1,1;IR9<1JM;IR2=0JA;JL;Y:LR8=8;A1,(84,1);M0,0,25;JA"
Data ";M:A1,(17,1);M0,0,5;LX=-50"
Data 87,"LR9=1;A:IR0=0JB;IX>RXJC;IX<RXJD;IR9<1JM;P;JA"
Data ";B:A1,(A,1);E:M0,1,1;IR0=1JA;JB"
Data ";N:A0,(87,2)(88,2);O:M-1,0,1;IR9<1JM;JO"
Data ";C:A0,(87,2)(88,2);F:M-1,0,1;IR9<1JM;IR0=0JB;IX=RXJH;LR4=X+1;IR4=RXJH;IZ(31)=1JA;JF"
Data ";D:A0,(87,2)(88,2);G:M1,0,1;IR9<1JM;IR0=0JB;IX=RXJH;LR4=X+1;IR4=RXJH;IZ(31)=0JA;JG"
Data ";H:A1,(89,3)(90,3);M0,0,6;LR8=9;M0,0,50;JN"
Data ";M:M0,-20,10;M0,-10,10;M0,-5,10;M0,5,10;M0,10,10;M0,20,10;M0,100,25;LX=-50",""
Data 94,"LR9=1;A0,(94,2)(95,2);A:IR0=0JB;IR9<1JM;P;JC"
Data ";B:E:M0,1,1;IR0=1JA;JB"
Data ";C:F:M-2,0,1;IR9<1JM;IR0=0JB;JF"
Data ";M:LX=-50","","","",""
Data 96,"LR9=4;A:A1,(96,1);M0,0,25;A1,(97,2)(96,1);LR8=10;M0,0,25;IR9>0JA;M0,200,25;LX=-50","","","","","","",""
Data 107,"A1,(107,2)(106,3)(105,3)(101,3)(100,3);M0,0,20;LR9=1"
Data "A:IX>RXJC;IX<RXJD;IR9<1JM;P;JA"
Data ";C:A1,(98,1);F:M-2,0,1;IR9<1JM;IZ(63)=1JH;JF"
Data ";D:A1,(99,1);G:M2,0,1;IR9<1JM;IZ(63)=0JH;JG"
Data ";M:A1,(100,3)(101,3)(105,3)(106,3)(107,3);M0,0,20;LX=-50"
Data ";H:A1,(100,3)(101,3)(102,3)(103,3)(104,6)(103,3)(102,3)(101,3)(100,3);LR6=R9;LR9=0;M0,0,15;LX=RX+Z(63)-32;LY=RY;M0,0,35;LR9=R6;JA"
Data "",""
Data 108,"LR9=30;A:A1,(108,1);M0,0,5;A0,(109,1)(110,1);M0,0,10;LR8=11;A0,(111,1)(112,1);M0,-100,50;MRX-X,100,50;IR9>0JA"
Data ";A1,(113,10)(114,10)(115,10);LR5=0;B:M-2,0,1;M2,0,1;LR5=R5+1;IR5<16JB;LX=-50"
Data "","","","","",""
'
'
'
3002 Data 71,"LR9=1;A:A0,(71,2)(72,2);M-100,RY-Y-16,80;IR9<1JM;M-100,0,80;IR9<1JM;A0,(73,2)(74,2);M100,RY-Y-5,80;IR9<1JN;M100,0,80;IR9<1JN;JA"
Data ";M:A1,(A,1);M-200,200,50;LX=-50"
Data ";N:A1,(A,1);M200,200,50;LX=-50","","","","",""
Data 78,"A1,(78,2)(77,3)(76,1);M0,0,12;A0,(75,2)(76,2);LR9=3;IRX>XJA","","","","",""
Data ";B:M-2,0,1;IR9>0JB;A1,(76,2)(77,2)(78,2);M0,0,6;LX=-50"
Data ";A:M2,0,1;IX>318JM;IR9>0JA;M:A1,(76,2)(77,2)(78,2);M0,0,6;LX=-50"
Data 79,"LR9=4;A:IR0=0JB;IX>RXJC;IX<RXJD;IR9<1JM;P;JA"
Data ";B:A1,(A,1);E:M0,1,1;IR0=1JA;JB"
Data ";C:A0,(79,2)(80,2)(79,2)(81,2);F:M-1,0,1;IR9<1JM;IR0=0JB;IZ(63)=2JI;IZ(63)=1JA;JF"
Data ";D:A0,(82,2)(83,2)(82,2)(84,2);G:M1,0,1;IR9<1JM;IR0=0JB;IZ(63)=2JJ;IZ(63)=0JA;JG"
Data ";M:A1,(97,2)(96,2)(95,2);M0,0,10;LX=-50",""
Data ";I:A1,(86,1);M-30,0,6;JA"
Data ";J:A1,(85,1);M30,0,6;JA"
Data 87,"LR9=1;A0,(87,1)(89,1)(88,1)(90,1);A:IR0=0JB;M-1,0,1;IR9<1JM;IZ(31)=1JC;JA"
Data ";B:M0,1,1;IR0>0JA;JB;C:LR8=Z(7)+1;JA","","","",""
Data ";M:A1,(97,2)(96,2)(95,2);M0,0,10;LX=-50",""
Data 91,"M0,-50,25;A1,(91,2)(92,2)(93,2);M0,0,6;LR9=20;A0,(93,4)(94,4)"
Data ";A:IR9<1JM;M4,0,1;IZ(63)=1JC;IZ(63)=2JD;IX=RXJC;IX<300JA"
Data ";B:IR9<1JM;M-4,0,1;IZ(63)=1JE;IZ(63)=2JF;IX=RXJE;IX>20JB;JA"
Data "C:M0,50,50;LR8=11;M0,-50,50;JA;D:LR8=12;JA"
Data "E:M0,50,50;LR8=11;M0,-50,50;JB;F:LR8=12;JB"
Data ";M:M0,-20,10;M0,-10,10;M0,-5,10;M0,5,10;M0,10,10;M0,20,10;M0,100,25;LX=-50","",""
Data 95,"A1,(95,2)(96,3)(97,3)(98,3);M0,0,15;LR9=1;A:IR0=0JB;IX>RXJC;IX<RXJD;IR9<1JM;P;JA"
Data ";B:A1,(A,1);E:M0,1,1;IR0=1JA;JB"
Data ";C:A0,(99,2)(100,2);F:M-2,0,1;IR9<1JM;IR0=0JB;IZ(63)=1JA;JF"
Data ";D:A0,(101,2)(102,2);G:M2,0,1;IR9<1JM;IR0=0JB;IZ(63)=0JA;JG"
Data ";M:A1,(98,2)(97,2)(96,2)(95,2);M0,0,20;LX=-50","","",""
Data 103,"LR9=2;LR5=0;A:LR5=R5+1;IR5>4JM;IR9<1JM;IRX>XJC;JB"
Data ";B:A0,(103,1)(104,1);M-50,RY-Y-33,50;LR8=1;JA"
Data ";C:A0,(105,1)(106,1);M50,RY-Y-33,50;LR8=2;JA"
Data ";M:A1,(107,1)(108,1)(109,1);M0,0,3;LX=-50","","","",""
End Proc
Procedure NASTYCD
For T=0 To 3
If NAS(T)>0
PRORET=0
LADRET=0
LADRET2=0
X=X Bob(T+1)
Y=Y Bob(T+1)
BLK=(FIN(SCR)+X-320)/16
LEV=0
If Y>114 : LEV=1 : End If
If LEV<0 or LEV>1 : Goto DUN : End If
If BLK<0 or BLK>499 : Goto DUN : End If
YP=Y-50-(LEV*64)
P=Peek(Start(5)+160+(BLK*2)+LEV)
For U=0 To 1
Y1=Peek(Start(5)+(P*8)+(U*2))
Y2=Peek(Start(5)+(P*8)+(U*2)+1)
If Y1>0 or Y2>0
If YP>Y1 and YP<Y2
PRORET=1
Exit
End If
End If
Next U
Y1=Peek(Start(5)+(P*8)+4)
Y2=Peek(Start(5)+(P*8)+5)
If Y1>0 or Y2>0
If YP-2>Y1 and YP-2<Y2
LADRET=1
End If
If YP-4>Y1 and YP-4<Y2
LADRET2=1
End If
End If
DUN:
Amreg(T+5,0)=PRORET
Amreg(T+5,2)=LADRET
Amreg(T+5,1)=Max(LADRET,LADRET2)
If X Bob(T+1)<-5 or Y Bob(T+1)>200
Amal Off T+5
Bob Off T+1
NAS(T)=0
End If
End If
Next T
End Proc
Procedure SPELLCD
For T=0 To 3
If Bobsprite Col(T+1,0 To 3)
If Amreg(T+5,9)>0
For CN=0 To 3
If Col(CN)
NHP=Amreg(T+5,9)
BHP=Amreg(CN+1,9)
NHP=NHP-Amreg(CN+1,9)
BHP=BHP-Amreg(T+5,9)
Amreg(CN+1,9)=BHP
Amreg(T+5,9)=NHP
If BHP<1
Sprite CN,0,0,
Amal Off CN+1
End If
If Amreg(T+5,9)<1
SCORE=SCORE+100
PUD=2
End If
End If
If Amreg(T+5,9)<1
If Rnd(24)=9
NAS(T)=999
Amal T+5,"LA=21;LR5=0;A:M0,-1,2;M0,1,2;LR5=R5+1;IR5<50JA;LX=-50"
Amal On T+5
End If
End If
Next CN
End If
End If
Next T
End Proc
Procedure WIZCD
For T=0 To 3
If Bobsprite Col(0,4 To 7)
Amal 0,"A1,(13,5)(14,5)(15,5)(16,5)(17,5)(18,5)(19,5)(20,5);M0,0,40;LR9=1"
Amreg(0,9)=0
Amal On 0
INV=-1
End If
Next T
If Y Bob(0)>200
Amal 0,"A1,(13,5)(14,5)(15,5)(16,5)(17,5)(18,5)(19,5)(20,5);M0,0,40;LR9=1"
Amreg(0,9)=0
Amal On 0
INV=-1
Bob 0,,80,
End If
B=Bob Col(0,1 To 4)
If B
For T=0 To 3
If Col(T+1)
If NAS(T)=999
SCORE=SCORE+250
PUD=2
NAS(T)=0
'Bob Off T+1
Bob T+1,-50,,
S=Rnd(2)
'SPL(S)=Min(3,SPL(S)+1)
If SPL(S)<2 : Inc SPL(S) : End If
PUD=2
Else
BHT:
If Amreg(T+5,9)>0
Amal 0,"A1,(13,5)(14,5)(15,5)(16,5)(17,5)(18,5)(19,5)(20,5);M0,0,40;LR9=1"
Amreg(0,9)=0
Amal On 0
INV=-1
End If
End If
End If
Next T
End If
End Proc
Procedure NZAP
For T=0 To 3
If NAS(T)>0
If Amreg(T+5,8)>0
A=Amreg(T+5,8)
Restore 5000+A
Read MOV$,VCR,IMG,C1,C2,C3
If T<2
Colour 25,C1
Colour 26,C2
Colour 27,C3
Else
Colour 29,C1
Colour 30,C2
Colour 31,C3
End If
Sprite T+4,X Hard(X Bob(T+1)),Y Hard(Y Bob(T+1))-VCR,IMG
Channel T+9 To Sprite T+4
Amal T+9,MOV$
Amal On T+9
BLN(T)=1
Amreg(T+5,8)=0
End If
End If
Next T
Pop Proc
5001 Data "M-200,200,100;LX=0",0,32,$FF0,$F80,$F00
5002 Data "M200,200,100;LX=0",0,32,$FF0,$F80,$F00
5003 Data "LR5=0-Z(31);IRX>XS(0,X)JB;LA=62;MR5,-10,5;MR5,-5,5;MR5,5,5;MR5,100,50;B:LR5=Z(31);LA=61;MR5,-10,5;MR5,-5,5;MR5,5,5;MR5,100,50;LX=0"
Data 22,62,$FFF,$BBB,$444
5004 Data "M-320,0,70;LX=0",10,39,$8F8,$F0,$80
5005 Data "LR5=Z(63)-31;M-300,R5,50;LX=0",18,65,$FFF,$840,$F00
5006 Data "LR5=Z(63)-31;M300,R5,50;LX=0",18,64,$FFF,$840,$F00
5007 Data "A0,(66,1)(67,1)(68,1)(69,1);M-100,0,40;LX=0",18,66,$FFF,$888,$840
5008 Data "A0,(66,1)(67,1)(68,1)(69,1);M100,0,40;LX=0",18,66,$FFF,$888,$840
5009 Data "M0,200,50;LX=0",4,70,$F0,$80,$40
5010 Data "M-300,0,50;LX=0",8,63,$FFF,$888,$444
5011 Data "LR4=RX-XS(0,X);LR5=RY-YS(0,Y);LR5=R5-6;MR4,R5,30;M0-R4,0-R5,30;LX=0",30,70,$FF0,$F80,$880
5012 Data "A0,(49,1)(50,1)(51,1)(52,1);LR5=RX-XS(0,X);MR5,100,50;LX=0",18,49,$FF0,$F80,$F00
End Proc
Procedure GWON
Autoback 2
Cls 0
Paste Bob 152,50,13
Locate 0,2
Pen 5 : Paper 0
Centre "Well Done"
Locate 0,4
Centre "Your score: "+Str$(SCORE)
Pen 7
Locate 0,7
Print "You have succeeded in destroying"
Print "the portal of chaos. The world is"
Print "now free of daemons."
Print
Print "Recoginzing your great skill, the"
Print "council of elders promotes you to"
Print "the rank of Archchancellor, U.U."
Clear Key
Wait Key
Cls 0
Autoback 0
End Proc
Procedure TITLE
Load ":titlebobs.ABK"
Load ":heralding.ABK"
Autoback 2
Bob Update On
Synchro On
Cls 0
Bob 0,-58,50,1
Channel 0 To Bob 0
Amal 0,"M184,0,100;A1,(1,20)(2,20)(3,20)(4,20)(5,20)"
Amal On 0
Wait 300
Bob 1,160,75,6
Channel 1 To Bob 1
Amal 1,"LR0=0;A:P;IR0<1JA;LR0=0;A0,(6,5)(7,5)(6,5)(8,5)(9,5);MR1,R2,25;LX=160;LY=75;A1,(6,1);JA"
Amal On 1
Wait 10
For T=0 To 5
Amreg(1,1)=(T*35)-105+16
Amreg(1,2)=-45
Amreg(1,0)=1
Wait 25
Paste Bob 55+(T*35),10,T+10
Wait 5
Next T
For T=0 To 5
Amreg(1,1)=(T*35)-105+16
Amreg(1,2)=65
Amreg(1,0)=1
Wait 25
Paste Bob 55+(T*35),100,T+16
Wait 5
Next T
Bob Off 1
Wait 5
Pen 7 : Paper 0
Locate 0,22
Centre "By Mark Potter"
'
Music 1
While Fire(1)=0
Wend
'
Bob Off
Wait 5
Cls 0
Bob Update Off
Autoback 0
Synchro Off
Load ":trundle.ABK"
End Proc
Procedure LOST
Music Off
Autoback 2
Cls 0
Paste Bob 152,50,13
Locate 0,2
Pen 5 : Paper 0
Centre "Game Over"
Locate 0,4
Centre "Your score: "+Str$(SCORE)
Wait 10
Autoback 0
While Fire(1)=0
X=Rnd(15)+152
Y=Rnd(30)+50
Screen Copy 0,X,Y,X+1,200 To 0,X,Y+1
Screen Swap
Screen Copy Physic(0) To Logic(0)
Wend
Cls 0
Screen Swap
Cls 0
End Proc
Procedure PRE
Screen Open 0,640,200,2,Hires
Palette $0,$F0
Locate 0,0
Centre "Pre-Game Instruction Sequence"
Print
Centre "By Mark Potter"
Print
Print
Print "Press a Key..."
Print
Do
If Inkey$<>"" Then Read A$ : Print A$ : Clear Key : If A$="END" Then Exit
Loop
Default
Pop Proc
Data "Hello and welcome"
Data "to Demon's Breach.",""
Data "Version 1.2, 30/6/93"
Data ""
Data "Somewhere,someone's been tampering with reality again..."
Data ""
Data "Experiments by the evil sorcerer Zecron have opened up a hole into"
Data "the Demon Dimensions. It's up to you to put a stop to it. Unfortunately,"
Data "the portal can only be closed from the Other Side ..."
Data ""
Data "Credits..."
Data ""
Data "Written using AMOS,by Mandarin software"
Data ""
Data "All music by Luke Miller"
Data ""
Data "Thanks to C.M.Potter (my mother) for the ghosts on level 3"
Data "","controls:",""
Data "Use the joystick as usual."
Data "Press P to pause game, any key restarts"
Data "Hold down fire to build up the level of spell"
Data "(at the start, you only know a level one spell,so don't bother)."
Data "Collect chests for extra spells."
Data "That's all, have fun...",""
Data "P.S. No prize for guessing what this game is based on!"
Data "END"
End Proc