' This is the sequel To AmPP Auto View Off Dim CLRS(32) Global CLRS(),SPR SPR=True MAIN_LOOP Procedure MAIN_LOOP GO=False : FIN=False : TTOOL=1 : PPEN=2 : BAK=0 : RAD=5 Break Off REGISTER=GO SCLOSE _SMALL_COPYRIGHT[140] ABOUT SCR_MODE Get Rom Fonts Set Font 1 Change Mouse 2 On Error Proc ERR Repeat Repeat Until Mouse Key=0 If GO Show On Else If TTOOL=17 Hide On Else Show On End If End If Repeat Repeat Multi Wait KYS=Mouse Key Until Not(KYS=0) Until Amos Here If GO Z=Mouse Zone GO= Not GO ICONS[GO] Repeat Until Mouse Key=0 IMMEDIATE[Z,TTOOL] Change Mouse 2 TTOOL=Param If TTOOL=17 If Length(1)>5 Bob 1,X Screen(X Mouse),Y Screen(Y Mouse),6 Channel 1 To Bob 1 Bob Update On G$="AU (I R0<>XS(0,XM) J U I R1<>YS(0,YM) J U X U:" G$=G$+"L R0=XS(0,XM);" G$=G$+"L R1=YS(0,YM); D M) M: M R0-X,R1-Y,1 W;" Amal 1,G$ Amal On End If End If FIN=(TTOOL=40) Else If KYS<3 If KYS=2 GO=True Bob Off ICONS[GO] Show On Change Mouse 1 Else D0_DRAW[TTOOL] End If End If End If Until FIN SCLOSE End Proc Procedure ERR REQ["An error has Occured",Str$(Errn),"Please Tell ","The Author "] Direct End Proc Procedure PAL Def Fn RED(TTUM)=TTUM/256 Def Fn GREEN(TTUM)=(TTUM/16) mod 16 Def Fn BLUE(TTUM)=TTUM mod 16 On Error Proc ERR IND=0 : STT=0 Screen 0 C=Screen Colour HAM=(Screen Colour=4096) EHB=(Screen Colour=64) CL=C If HAM C=32 CL=32 Else If EHB C=64 CL=32 End If End If FYN=CL-1 Unpack 9 To 1 _APPEAR[1,1] INIT_SPRITES Screen Open 2,320,10,C,Lowres Flash Off : Curs Off : WD=320/C For T=0 To CL-1 Colour T,CLRS(T) Next T For T=0 To C-1 Ink T Bar T*WD,0 To T*WD+WD,9 Next T Screen Display 2,,201,, _APPEAR[1,0] Screen 1 CLR=PPEN : FINI=False : OKAY=False SPC=22 : XSPR1=146 : YS=176 : S=8 XSPR2=XSPR1+SPC : XSPR3=XSPR2+SPC : YPTR=195 : XDSP=128 Repeat Repeat Until Mouse Key=0 Screen 2 CLT=Colour(CLR) Y1=YS-S* Fn RED(CLT) : Y2=YS-S* Fn GREEN(CLT) : Y3=YS-S* Fn BLUE(CLT) Screen 1 If IND=0 Sprite Off 14 Else Sprite 14,332+28*IND,118,2 End If Sprite 8,XSPR1,Y1,1 Sprite 9,XSPR2,Y2,1 Sprite 10,XSPR3,Y3,1 Sprite 11,STT*WD+XDSP,YPTR,3 Sprite 12,FYN*WD+XDSP+WD-4,YPTR,3 Repeat Until Mouse Key=1 Bell Screen 2 R= Fn RED(CLT) G= Fn GREEN(CLT) B= Fn BLUE(CLT) X=X Mouse Y=Y Mouse VL=(182-Y)/8 If Y>54 If Y<182 If X<158 If X>144 R=VL End If Else If X<180 If X>165 G=VL End If Else If X<202 If X>188 B=VL End If End If End If End If End If End If If Y<106 If X>238 If Y>60 If X<390 If Y<80 If X<292 ' ' Okay FINI=True OKAY=True Else If X>322 ' Cancel FINI=True End If End If Else If Y>92 If X<292 STT=CLR If Max(STT,FYN)=STT Swap STT,FYN End If Else If X>322 FYN=CLR If Max(STT,FYN)=STT Swap STT,FYN End If End If End If End If End If End If End If End If End If If Y>119 If Y<139 If X>360 If X<444 If X<385 If IND=1 IND=0 Else IND=1 End If End If If X>420 If IND=3 IND=0 Else IND=3 End If End If If X>389 If X<416 If IND=2 IND=0 Else IND=2 End If End If End If End If End If End If End If Screen 2 Colour CLR,R*256+G*16+B If Y>201 If Y<210 X=X-128 CLR=(X*C)/320 If CLR=C CLR=CLR-1 End If If EHB If CLR>31 CLR=CLR-32 Bell 20 End If End If End If End If If Not(IND=0) If Y>119 If Y<138 If X>221 If Not(FYN-STT)=0 If X<356 If X<245 Screen 2 STP=Sgn(FYN-STT) For T=STT To FYN Step STP V=Colour(T) R= Fn RED(V) G= Fn GREEN(V) B= Fn BLUE(V) V=(15*(T-STT))/(FYN-STT) If IND=1 R=V Else If IND=2 G=V Else B=V End If End If TP=R*256+G*16+B Colour T,TP Next T End If If X>332 Screen 2 CPS=Colour(STT) CPF=Colour(FYN) If IND=1 VS= Fn RED(CPS) VF= Fn RED(CPF) Else If IND=2 VS= Fn GREEN(CPS) VF= Fn GREEN(CPF) Else VS= Fn BLUE(CPS) VF= Fn BLUE(CPF) End If End If STP=Sgn(FYN-STT) For T=STT To FYN Step STP V=Colour(T) R= Fn RED(V) G= Fn GREEN(V) B= Fn BLUE(V) V=((VF-VS)*(T-STT))/(FYN-STT)+VS If IND=1 R=V Else If IND=2 G=V Else B=V End If End If TP=R*256+G*16+B Colour T,TP Next T End If End If End If End If End If End If End If If FYN>STT If Y>119 If Y<139 If(X>249) and(X<273) Screen 2 TEMP=Colour(FYN) For T=FYN To STT+1 Step -1 Colour T,Colour(T-1) Next T Colour STT,TEMP End If If(X>276) and(X<300) Screen 2 TEMP=Colour(STT) For T=STT To FYN-1 Colour T,Colour(T+1) Next T Colour FYN,TEMP End If If(X>304) and(X<328) Screen 2 T=STT-1 Repeat T=T+1 TEMP=Colour(T) TEMP2=Colour(FYN-T+STT) Colour T,TEMP2 Colour STT+FYN-T,TEMP Wait Vbl Until(T>(STT+FYN-T-2)) End If End If End If End If Screen 0 Until FINI If OKAY For T=0 To CL-1 Screen 2 CLRS(T)=Colour(T) If Not HAM Screen 0 Colour T,CLRS(T) End If Next T End If Sprite Off : Bob Off Screen 2 : Fade 1 : Wait 10 : Screen 1 : Fade 1 Wait 5 : Screen Close 2 : Wait 10 : Screen Close 1 Screen 0 End Proc Procedure SCR_MODE Shared PPEN,BAK,RAD On Error Proc ERR RAD=10 CL=16 PL=False R=0 : Bob Update On Unpack 8 To 1 _APPEAR[1,0] INIT_SPRITES FIN=False YSC=103 YSM=YSC+25 If CL=2 Then C=0 If CL=4 Then C=1 If CL=8 Then C=2 If CL=16 Then C=3 If CL=32 Then C=4 If CL=64 Then C=5 If CL=4096 Then C=6 View Repeat Repeat Until Mouse Key=0 Sprite 8,195+C*32,YSC,4 Sprite 9,168+R*60,YSM,5 Bob 1,225+PL*60,78,5 Repeat Until Not(Mouse Key=0) X=X Mouse : Y=Y Mouse Bell If Y>134 If Y<145 If X<284 If X>170 If X>235 R=1 If C>3 C=3 End If End If If X<223 R=0 End If End If End If If X>306 If X>361 PL=False End If If X<336 PL=True End If End If End If End If If Y<123 If Y>112 If X>205 If X<419 If X<219 C=0 End If If X>235 If X<248 C=1 End If If X>266 If X<282 C=2 End If If X>300 If X<314 C=3 End If If R=0 If X>330 If X<346 C=4 End If If X>355 If X<384 C=5 End If If X>388 C=6 End If End If End If End If End If End If End If End If End If End If End If If Y>167 If Y<179 If X>403 If X<427 FIN=True End If End If End If End If If C=6 Bell 20 : Rem Take Out when Ham is implemented C=5 End If Until FIN If C=0 Then CL=2 If C=1 Then CL=4 If C=2 Then CL=8 If C=3 Then CL=16 If C=4 Then CL=32 If C=5 Then CL=64 If C=6 Then CL=4096 If PL HT=256 Else HT=200 End If If R=0 Screen Open 0,320,HT,CL,Lowres Else Screen Open 0,640,HT,CL,Hires End If Limit Mouse 120,40 To 460+Screen Width-320,300 Flash Off : Curs Off : Cls 0 Sprite Off Screen 1 Fade 1 : Wait 15 Screen Close 1 Screen 0 SPR=True INIT_CLRS[True] View End Proc Procedure INIT_SPRITES On Error Proc ERR Colour 17,Colour(1) Colour 18,Colour(1) Colour 19,Colour(7) For S=1 To 3 For T=1 To 3 Colour T*4+S+16,Colour(16+S) Next T Next S End Proc Procedure INIT_CLRS[FL] Shared PPEN,BAK On Error Proc ERR Screen 0 If FL If SPR If Length(2)=64 Copy Start(2),Start(2)+Length(2) To Screen Base+98 Else Get Sprite Palette End If End If End If CL=Screen Colour If CL>32 STP=32 Else STP=CL End If If CL<4096 For T=0 To STP-1 CLRS(T)=Colour(T) Next T Else ' Do Summat else for HAM End If PPEN=2 BAK=0 PPEN=Min(PPEN,CL-1) End Proc Procedure ABOUT On Error Proc ERR Hide On Unpack 11 To 2 Repeat Until Mouse Key=0 SPLERGE[1,2,1] Repeat Until Not(Mouse Key=0) Repeat Until(Mouse Key=0) Show On Screen 1 : Fade 1 : Wait 15 : Screen Close 1 End Proc Procedure ICONS[FLG] On Error Proc ERR Shared REGISTER Repeat Until Mouse Key=0 If FLG Hide On EHB=False : HAM=False Screen 0 C=Screen Colour CLU=C CL=C If C>32 CL=32 If C=64 EHB=True Else HAM=True CLU=32 End If End If Screen Open 4,320,10,C,Lowres Screen Display 4,,83,, Flash Off : Curs Off For T=0 To CL-1 Colour T,CLRS(T) Next T WD=320/CLU For T=0 To CLU-1 Ink T Bar T*WD,0 To T*WD+WD,9 Next T Unpack 10 To 3 _APPEAR[0,0] Screen 0 If Screen Height>250 OFF=8 Else OFF=0 End If SC=1 If Screen Width=640 SC=2 End If Reserve Zone 40+CLU For T=1 To 20 For S=1 To 2 Set Zone T*2+S-2,SC*(T*16-16),S*16-16+OFF To SC*(T*16-1),S*16-1+OFF Next S Next T For T=0 To CLU-1 Set Zone T+41,SC*T*WD,33+OFF To SC*(T*WD+WD-1),43+OFF Next T Show On Else If REGISTER Hide On WIPE[4,0] WIPE[3,0] Reserve Zone Screen 0 Show On End If End If REGISTER=True End Proc Procedure IMMEDIATE[Z,TTOOL] Shared PPEN,BAK,RAD On Error Proc ERR PS=False Amal Off Bob Update Off Bob Clear If Z=0 PS=True End If If(Z=16) or(Z=18) or(Z=20) SPR=False A$="This will Remove ALL the " If Z=16 M$="Red" Else If Z=18 M$="Green" Else M$="Blue" End If End If A$=A$+M$ PS=True REQ["Are you Sure?",A$,"Forget it then.","Do it NOW"] If Param=2 RMOVECL[Z/2-7] End If INIT_CLRS[False] End If If Z=15 Z=17 CUT End If If Z=22 PS=True Screen 0 SET_PATTERN[Colour(PPEN),Colour(BAK)] End If If Z=23 PS=True ZZOOM End If If Z=24 PS=True PAL End If If(Z=25) or(Z=26) PS=True FILE_PAL[26-Z] End If If Z=28 SPRAY[1] Z=27 End If If Z=31 PS=True REQ["Not implemented, I tried using","Screenswaps & Double Buffer","But had Bob troubles","With Paste"] End If If Z=32 Z=19 FONTS End If If Z=33 PS=True REQ["Draw a Grid?","(Useful for Sprites etc.)","No Way","Yes Please"] If Param=2 REQ["What Grid Size?","","16 x 16","32 x 32"] If Param=1 SZ=16 Else SZ=32 End If GRID[SZ] End If End If If Z=34 PS=True CYCLE End If If(Z=35) or(Z=36) PS=True FILE_PIC[Z-35] End If If Z=37 PS=True Screen 0 Repeat Until Not(Mouse Key=0) PPN=Point(X Screen(X Mouse),Y Screen(Y Mouse)) If BAK=(PPN) Swap BAK,PPEN Else If Not(PPEN=PPN) BAK=PPEN PPEN=PPN End If End If End If If Z=38 PS=True REQ["Clear The Screen?!","You sure??","Erm, actually..","Of Course!!"] If Param=2 REQ["Change Screen Mode?","","Naah.","Okay Then"] If Param=2 SCR_MODE Else Cls 0 End If End If End If If Z=39 PS=True ABOUT Screen 0 End If If Z=40 PS=True REQ["Are you sure","you want to leave AmPP2?","No","Yes"] If Param=2 PS=False End If End If If Z>40 If BAK=(Z-41) Swap BAK,PPEN Else If Not(PPEN=Z-41) BAK=PPEN PPEN=Z-41 End If End If PS=True End If If PS Z=TTOOL End If End Proc[Z] Procedure REQ[MESS$,MESS2$,RP1$,RP2$] ' Shift Off ' Set Rainbow 0,0,50,"(10,1,5)","","(1,5,1)(10,-1,5)" On Error Proc ERR EXTEND[MESS$] : MESS$=Param$ EXTEND[MESS2$] : MESS2$=Param$ EXTEND[RP1$] : RP1$=Param$ EXTEND[RP2$] : RP2$=Param$ If GO=1 ICONS[0] End If S=True R1=Asc(Left$(RP1$,1)) R2=Asc(Left$(RP2$,1)) If R1=R2 S=False End If Screen Open 3,640,50,4,Hires Curs Off Screen Display 3,,100,, ' Rainbow 0,1,100,50 Palette $6,$BB2,$FF3,$BB2 Cls 0 : Pen 2 : Paper 0 Flash 3,"(ff0,5)(ee0,5)(cc0,5)(aa0,5)(880,5)(aa0,5)(cc0,5)(ee0,5)" Flash 1,"(880,5)(aa0,5)(cc0,5)(ee0,5)(ff0,5)(ee0,5)(cc0,5)(aa0,5)" Ink 2 Draw 0,0 To 640,0 Draw 0,49 To 640,49 Print Centre MESS$ Print Centre MESS2$ Locate 4,3 Pen 2 Print "L e f t" Locate 4,4 Pen 3 Print RP1$ Locate 65,3 Pen 2 Print "R i g h t" Pen 1 Locate 76-Len(RP2$),4 Print RP2$ View Repeat Clear Key Repeat KYS=Mouse Key If S KY=Asc(Inkey$) If(R1=KY) or(R2=KY) If RP1=KY Z=1 Else Z=2 End If KYS=Z End If End If Until Not(KYS=0) If KYS>2 KYS=0 End If Z=KYS Until Not(Z=0) Screen Close 3 ' Rainbow 0,0,0,0 View Repeat Until Mouse Key=0 If GO=1 ICONS[1] End If End Proc[Z] Procedure EXTEND[MESS$] On Error Proc ERR TEMP$=MESS$ OP$=" " For T=1 To 2*Len(TEMP$) OP$=OP$+" " Next T For T=1 To Len(TEMP$) For S=1 To 2 P=2*T-1 If S=1 Mid$(OP$,P,P+1)=Mid$(TEMP$,T,T+1) Else Mid$(OP$,P+1,P+2)=" " End If Next S Next T End Proc[OP$] Procedure D0_DRAW[CH] On Error Proc ERR Shared PPEN,BAK Shared RAD Ink PPEN,BAK If(CH=1) or(CH=2) SKETCH[CH] End If If CH=3 LINE End If If CH=4 RAY End If If(CH=5) or(CH=7) ELIPSE[CH] End If If(CH=6) or(CH=8) SIRCLE[CH] End If If(CH=9) or(CH=11) BBOX[CH] End If If(CH=10) or(CH=12) PARA[CH] End If If(CH=13) or(CH=14) TRIANGLE[CH] End If If CH=17 PPASTE End If If CH=19 TXT End If If CH=21 FYLL End If If(CH=27) or(CH=29) or(CH=30) SPRAY[CH-27] End If End Proc Procedure SKETCH[TYPE] On Error Proc ERR X1=X Screen(X Mouse) Y1=Y Screen(Y Mouse) Repeat Wait Vbl X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) If TYPE=1 Plot X2,Y2 Else Draw X1,Y1 To X2,Y2 X1=X2 Y1=Y2 End If Until Mouse Key=0 End Proc Procedure LINE On Error Proc ERR Gr Writing 2 Screen 0 X=X Screen(X Mouse) Y=Y Screen(Y Mouse) X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) Draw X,Y To X2,Y2 Repeat Draw X,Y To X2,Y2 X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) OLX2=X2 OLY2=Y2 Draw X,Y To OLX2,OLY2 Wait Vbl Until Mouse Key=0 Gr Writing 1 Draw X,Y To OLX2,OLY2 End Proc Procedure RAY On Error Proc ERR Screen 0 X=X Screen(X Mouse) Y=Y Screen(Y Mouse) Repeat X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) Draw X,Y To X2,Y2 Until Mouse Key=0 End Proc Procedure ELIPSE[C] On Error Proc ERR Gr Writing 2 Screen 0 X=X Screen(X Mouse) Y=Y Screen(Y Mouse) X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) Repeat R1=Abs(X2-X) : R2=Abs(Y2-Y) R1=Max(1,R1) : R2=Max(R2,1) Ellipse X,Y,R1,R2 X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) OLR1=R1 OLR2=R2 Ellipse X,Y,OLR1,OLR2 Wait Vbl Until Mouse Key=0 Gr Writing 1 R1=OLR1 : R2=OLR2 Ellipse X,Y,R1,R2 If C=7 If Max(R1,R2)=R1 Draw X-R1,Y To X+R1,Y For T=1 To R2 Ellipse X,Y,R1,T Next T Else Draw X,Y-R2 To X,Y+R2 For T=1 To R1 Ellipse X,Y,T,R2 Next T End If End If End Proc Procedure SIRCLE[C] On Error Proc ERR Gr Writing 2 Screen 0 X=X Screen(X Mouse) Y=Y Screen(Y Mouse) X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) Repeat R=Sqr((X2-X)*(X2-X)+(Y2-Y)*(Y2-Y)) R=Max(1,R) Circle X,Y,R X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) OLR=R Circle X,Y,OLR Wait Vbl Until Mouse Key=0 Gr Writing 1 R=OLR Circle X,Y,R If C=8 Draw X-R,Y To X+R,Y For T=1 To R Ellipse X,Y,R,T Next T End If End Proc Procedure CUT On Error Proc ERR Gr Writing 2 SPR=False Screen 0 Change Mouse 2 Repeat Until Mouse Key=0 Repeat Until Not(Mouse Key=0) X=X Screen(X Mouse) Y=Y Screen(Y Mouse) X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) Plot X,Y Box X,Y To X2,Y2 Repeat Box X,Y To X2,Y2 X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) If X=X2 If OLX2>X2 Dec X2 Else Inc X2 End If End If If Y=Y2 If OLY2>Y2 Dec Y2 Else Inc Y2 End If End If OLX2=X2 OLY2=Y2 Box X,Y To OLX2,OLY2 Wait Vbl Until Mouse Key=0 Box X,Y To OLX2,OLY2 Gr Writing 1 If OLX2X2 Swap X,X2 End If If Y>Y2 Swap Y,Y2 End If Bar X,Y To X2,Y2 End If End If End Proc Procedure PARA[C] On Error Proc ERR Gr Writing 2 Screen 0 X=X Screen(X Mouse) Y=Y Screen(Y Mouse) X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) Draw X,Y To X2,Y2 Repeat Draw X,Y To X2,Y2 X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) OLX2=X2 OLY2=Y2 Draw X,Y To OLX2,OLY2 Wait Vbl Until Mouse Key=0 Gr Writing 1 X2=OLX2 : Y2=OLY2 Draw X,Y To X2,Y2 X3=X Mouse : Y3=Y Mouse X3=X Screen(X3) : Y3=Y Screen(Y3) Gr Writing 2 X4=X+X3-X2 : Y4=Y+Y3-Y2 Polyline X,Y To X4,Y4 To X3,Y3 To X2,Y2 Repeat Polyline X,Y To X4,Y4 To X3,Y3 To X2,Y2 X3=X Mouse : Y3=Y Mouse X3=X Screen(X3) : Y3=Y Screen(Y3) X4=X+X3-X2 : Y4=Y+Y3-Y2 OLX3=X3 : OLY3=Y3 : OLX4=X4 : OLY4=Y4 Polyline X,Y To OLX4,OLY4 To OLX3,OLY3 To X2,Y2 Wait Vbl Until Mouse Key=1 X3=OLX3 : Y3=OLY3 : X4=OLX4 : Y4=OLY4 Gr Writing 1 If C=10 Polyline X,Y To X2,Y2 To X3,Y3 To X4,Y4 To X,Y Else Polygon X,Y To X2,Y2 To X3,Y3 To X4,Y4 To X,Y End If End Proc Procedure TRIANGLE[C] On Error Proc ERR Gr Writing 2 Screen 0 X=X Screen(X Mouse) Y=Y Screen(Y Mouse) X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) Draw X,Y To X2,Y2 Repeat Draw X,Y To X2,Y2 X2=X Mouse : Y2=Y Mouse X2=X Screen(X2) : Y2=Y Screen(Y2) OLX2=X2 OLY2=Y2 Draw X,Y To OLX2,OLY2 Wait Vbl Until Mouse Key=0 Gr Writing 1 Draw X,Y To X2,Y2 X3=X Mouse : Y3=Y Mouse X3=X Screen(X3) : Y3=Y Screen(Y3) Gr Writing 2 Polyline X,Y To X3,Y3 To X2,Y2 Repeat Polyline X,Y To X3,Y3 To X2,Y2 X3=X Mouse : Y3=Y Mouse X3=X Screen(X3) : Y3=Y Screen(Y3) OLX3=X3 : OLY3=Y3 Polyline X,Y To OLX3,OLY3 To X2,Y2 Wait Vbl Until Mouse Key=1 X3=OLX3 : Y3=OLY3 Gr Writing 1 If C=14 Polygon X,Y To X2,Y2 To X3,Y3 To X,Y Else Polyline X,Y To X2,Y2 To X3,Y3 To X,Y End If End Proc Procedure FYLL On Error Proc ERR Shared PPEN,BAK Screen 0 Change Mouse 3 Ink PPEN,BAK Paint X Screen(X Mouse),Y Screen(Y Mouse),0 Change Mouse 2 End Proc Procedure SET_PATTERN[C,C2] On Error Proc ERR Change Mouse 3 Screen Open 1,320,64,4,Lowres Flash Off : Curs Off Palette C2,C,C-16,0 Reserve Zone 35 Cls 3 For T=0 To 9 For S=1 To 4 If(T*4+S-1)<35 Ink 2 Box T*32,S*16-16 To T*32+31,S*16-1 Set Zone T*4+S,T*32,S*16-16 To T*32+31,S*16-1 Set Pattern T*4+S-1 Ink 1,0 Paint T*32+1,S*16-15,0 End If Next S Next T View Change Mouse 1 Repeat Repeat Z=Mouse Zone Until Not(Z=0) Until Not(Mouse Key=0) Screen Close 1 Screen 0 Set Pattern Z-1 Ink PPEN End Proc[Z-1] Procedure ZZOOM Shared PPEN,BAK On Error Proc ERR Def Fn RED(TMP)=TMP/256 Def Fn GREEN(TMP)=(TMP/16) mod 16 Def Fn BLUE(TMP)=TMP mod 16 Repeat Until Mouse Key=0 Hide On Gr Writing 2 BX=128 Screen 0 XMX=Screen Width YMX=Screen Height SZ=4 X=X Mouse : Y=Y Mouse X=X Screen(X) : Y=Y Screen(Y) X2=X+BX/SZ-1 : Y2=Y+BX/SZ-1 Bar X,Y To X2,Y2 Repeat Bar X,Y To X2,Y2 X=X Mouse : Y=Y Mouse X=X Screen(X) : Y=Y Screen(Y) X2=X+BX/SZ-1 : Y2=Y+BX/SZ-1 OLX=X : OLX2=X2 OLY=Y : OLY2=Y2 Bar OLX,OLY To OLX2,OLY2 Wait Vbl Until Mouse Key=1 Bar X,Y To X2,Y2 Gr Writing 1 Screen 0 C=Screen Colour HAM=(Screen Colour=4096) EHB=(Screen Colour=64) CL=C If HAM C=32 CL=32 Else If EHB C=64 CL=32 End If End If FYN=CL-1 Screen Open 2,320,10,C,Lowres Flash Off : Curs Off : WD=320/C : PAUSE=True For T=0 To CL-1 Colour T,CLRS(T) Next T For T=0 To C-1 Screen 2 Ink T Bar T*WD,0 To T*WD+WD,9 Next T HT=158 Screen Open 1,320,HT,C,Lowres Screen Display 1,,60,, Flash Off : Curs Off MX=0 MN=4096 For T=0 To CL-1 Colour T,CLRS(T) TMP= Fn RED(CLRS(T))+ Fn GREEN(CLRS(T))+ Fn BLUE(CLRS(T)) If Min(TMP,MN)=TMP BK=T MN=TMP End If If Max(TMP,MX)=TMP FG=T MX=TMP End If Next T FINI=False : XS=10 : YS=15 : XF=XS+BX : YF=YS+BX XS2=XF+10 : YS2=YS : XF2=XS2+BX/2 : YF2=YS2+BX/2 : FIRST=True UP$=Border$(" UP ",1) : DWN$=Border$(" DOWN ",1) LFT$=Border$(" LEFT ",1) : RT$=Border$("RIGHT ",1) OK$=Border$(" OKAY ",1) : CNC$=Border$("CANCEL",1) Change Mouse 2 Show On DX=BX/SZ DY=BX/SZ If X<0 X=0 End If If Y<0 Y=0 End If If(X+DX>XMX) X=XMX-DX End If If(Y+DX>YMX) Y=YMX-DY End If Repeat If Not FIRST Screen Copy 1,XS2,YS2,XS2+64,YS2+64 To 0,OX-ODD,OY-ODD End If Cls BK : Paper BK Ink FG : Pen FG : C=FG Box 0,0 To 319,HT-1 Locate 30,2 : Print OK$ : Locate 30,5 : Print CNC$ Locate 30,8 : Print UP$ : Locate 30,11 : Print DWN$ Locate 30,14 : Print LFT$ : Locate 30,17 : Print RT$ Locate 20,11 : Print "2" : Locate 23,11 : Print "4" Locate 20,14 : Print "8" : Locate 22,14 : Print "16" Locate 19,17 : Print "32" : Locate 22,17 : Print "64" Box XS-2,YS-2 To XF+1,YF+1 Box XS2-2,YS2-2 To XF2+1,YF2+1 DX=BX/SZ : DY=DX : D=DX/2 : DD=32-DX/2 OX=X : OY=Y : ODD=DD Zoom 0,X,Y,X+DX,Y+DY To 1,XS,YS,XF,YF Screen Copy 0,X-DD,Y-DD,X+DX+DD,Y+DY+DD To 1,XS2,YS2 View REFRESH=False FIRST=False Ink PPEN Repeat If PAUSE Repeat Until Mouse Key=0 End If Repeat Until Not(Mouse Key=0) XM=X Mouse : YM=Y Mouse : PAUSE=True If YM<59 If YM>50 If XM>127 If XM<448 C=(XM-127)/WD PAUSE=False If BAK=C Swap BAK,PPEN Else If Not(PPEN=C) BAK=PPEN PPEN=C End If End If PS=True End If End If End If End If If XM<265 If XM>136 If YM>73 If YM<202 H=XM-137 : H=H/SZ V=YM-74 : V=V/SZ PAUSE=False Ink PPEN SSX=XS+H*SZ : SSY=SY+V*SZ+15 Bar SSX,SSY To SSX+SZ-1,SSY+SZ-1 Plot XS2+DD+H,YS2+DD+V End If End If End If End If If XM>364 If XM<420 If YM>70 If YM<208 If YM>190 X=X+D REFRESH=True Else If YM>167 If YM<183 X=X-D REFRESH=True End If Else If YM>144 If YM<159 Y=Y+D REFRESH=True End If Else If YM>119 If YM<135 Y=Y-D REFRESH=True End If Else If YM>95 If Y<111 REFRESH=True FINI=True OKAY=False End If Else If YM<87 REFRESH=True FINI=True OKAY=True End If End If End If End If End If End If End If End If End If Else If XM<320 If XM>280 If YM>145 If YM<205 If YM<155 If XM<300 SZ=2 REFRESH=True Else SZ=4 REFRESH=True End If Else If YM>170 If YM<180 If XM<300 SZ=8 REFRESH=True Else SZ=16 REFRESH=True End If Else If YM>195 If YM<205 If XM<300 SZ=32 REFRESH=True Else REFRESH=True SZ=64 End If End If End If End If End If End If End If End If End If End If End If If X<0 X=0 End If If Y<0 Y=0 End If If(X+DX>XMX) X=XMX-DX End If If(Y+DX>YMX) Y=YMX-DY End If Until REFRESH Until FINI If OKAY Screen Copy 1,XS2,YS2,XS2+64,YS2+64 To 0,OX-ODD,OY-ODD End If Screen Close 2 Screen Close 1 Screen 0 Reserve Zone End Proc Procedure SPRAY[C] On Error Proc ERR Shared RAD If C=1 SPRAYPRMS Else Degree Screen 0 Repeat R=Rnd(RAD) T=Rnd(359) X1=R*Cos(T) Y1=R*Sin(T) X=X Mouse : Y=Y Mouse X=X Screen(X) : Y=Y Screen(Y) If C=0 Plot X+X1,Y+Y1 Else If C=2 Draw X,Y To X+X1,Y+Y1 Else P1=Point(X+X1,Y+Y1) : P2=Point(X-X1,Y-Y1) If Max(P1,0)=P1 If Max(P2,0)=P2 Ink P2 : Plot X+X1,Y+Y1 Ink P1 : Plot X-X1,Y-Y1 End If End If End If End If Until Mouse Key=0 Ink PPEN End If End Proc Procedure SPRAYPRMS On Error Proc ERR Shared RAD Hide On Gr Writing 2 TT=0 Ink 1 Repeat Until Mouse Key=0 Repeat Clear Key Repeat Text 50,50,"Spraysize :"+Str$(TT) Repeat K$=Inkey$ : S=Scancode Until S>0 Text 50,50,"Spraysize :"+Str$(TT) If S<11 T=S mod 10 TT=10*TT+T TT=TT mod 1000 Else If S=65 TT=TT/10 End If End If Until Not(S=65) Until S>10 Gr Writing 0 TT=Max(TT,5) RAD=TT Show On End Proc Procedure FILE_PIC[C] On Error Goto ERR SAV=(C=0) Screen 0 PATH$="**.**" DEF$="" MESS$="Select a File" If SAV MESS2$="to Save." Else MESS2$="to Load." End If F$=Fsel$(PATH$,DEF$,MESS$,MESS2$) If Not(F$=DEF$) If SAV If Not(Upper$(Right$(F$,4))=".IFF") F$=F$+".IFF" End If End If DISK=Exist(F$) If SAV If DISK REQ["File Exists","Overwrite File??","No","Yes, Kill it!!"] SAV=(Param=2) End If If SAV Save Iff F$ End If Else If DISK Load Iff F$,0 INIT_CLRS[False] If Screen Width<320 Screen Open 1,Screen Width,Screen Height,Screen Colour,Lowres Screen Copy 0 To 1 Screen Open 0,320,Screen Height,Screen Colour,Lowres Screen Copy 1,0,0,Screen Width,Screen Height To 0,0,0 Screen Close 1 End If If Screen Height<200 Screen Open 1,320,Screen Height,Screen Colour,Lowres Screen Copy 0 To 1 Screen Open 0,320,200,Screen Colour,Lowres Screen Copy 1,0,0,320,Screen Height To 0,0,0 Screen Close 1 End If If Not Screen Colour=4096 ' in case messed about with resolutions C=Screen Colour If C=64 C=32 End If Dec C For T=0 To C Colour T,CLRS(T) Next T End If _APPEAR[2,1] View Else REQ["No Such File","Cannot Load","Okay","Okay"] End If End If End If Goto HERE ERR: E=Errn MESS$="Error Number " MESS$=MESS$+Str$(E) M2$="Please Alert Author." M$="Oh" : M2$="No!!!" If E=88 M2$="Disk Full" End If If E=83 M2$="Disk not Validated" End If If E=84 M2$="Disk Write Protected" End If If(E=89) or(E=90) or(E=91) M2$="File is Protected" End If If E=31 M2$="Dodgy IFF Compression" End If If E=93 M2$="Insert Disk" End If If E=92 M2$="Not AmigaDOS" End If REQ[MESS$,M2$,M$,M1$] Resume HERE : HERE: End Proc Procedure RMOVECL[CL] Shared PPEN,BAK On Error Proc ERR Def Fn RED(TTUM)=TTUM/256 Def Fn GREEN(TTUM)=(TTUM/16) mod 16 Def Fn BLUE(TTUM)=TTUM mod 16 Screen 0 C=Screen Colour C=C-1 If C<4095 C=C mod 32 For T=0 To C TMP=Colour(T) R= Fn RED(TMP) G= Fn GREEN(TMP) B= Fn BLUE(TMP) If CL=1 R=0 Else If CL=2 G=0 Else B=0 End If End If TMP=R*256+G*16+B Colour T,TMP Next T End If End Proc Procedure GRID[S] On Error Proc ERR Shared PPEN Screen 0 Ink PPEN WD=Screen Width HT=Screen Height For T=0 To WD Step S Draw T,0 To T,HT Next T For T=0 To HT Step S Draw 0,T To WD,T Next T End Proc Procedure FILE_PAL[C] Screen 0 SAV=(C=1) PATHS$="**.**" DEF$="" MESS$="Select a Filename to" If SAV MESS2$="save palette as." Else MESS2$="load palette as." End If F$=Fsel$(PATH$,DEF$,MESS$,MESS2$) OK= Not(F$=DEF$) If OK If SAV If Not(Upper$(Right$(F$,4))=".PAL") F$=F$+".PAL" End If End If EXT=Exist(F$) If SAV If EXT OK=False REQ["File Already exists","Overwrite?","No","Yes"] OK=(Param=2) End If Else If Not EXT OK=False REQ["File Doesn't exist","","Oh","No!!"] End If End If If OK If SAV PAL_SAVE[0,F$] Else PAL_LOAD[0,F$] INIT_CLRS[False] View End If End If End If End Proc Procedure PAL_SAVE[SCR,NAME$] TEMP=Screen Screen SCR Bsave NAME$,Screen Base+98 To Screen Base+162 Screen TEMP End Proc Procedure PAL_LOAD[SCR,NAME$] TEMP=Screen Screen SCR Bload NAME$,Screen Base+98 Screen TEMP End Proc Procedure FONTS Hide On Get Fonts Show On Screen Open 1,320,100,2,Lowres Palette 0,$FFF Curs Off C=0 Set Text 0 Repeat Inc C A$=Font$(C) Until A$="" Dec C If C>0 PTR=1 : ITALIC=0 : BOLD=0 : UNDER=0 View Repeat Repeat Until Mouse Key=0 F$=Font$(PTR) F=Instr(F$,".font") If F>0 Mid$(F$,F,5)=" " End If NM$="Name :"+Left$(F$,29) SZ$="Size :"+Mid$(F$,30,4) Cls 0 Pen 1 : Locate 1,1 : Print NM$ : Locate 1,2 : Print SZ$ Locate 1,4 : Print "<" : Locate 4,4 : Print ">" Locate 7,4 : Print "Okay" : Locate 15,4 : Print "Italic" Locate 25,4 : Print "Bold" : Locate 19,5 : Print "UnderLine" Set Font PTR : Set Text STY : Ink 1 Text 20,90,"Aa 123 Ss Mm ?" Repeat Until Not(Mouse Key=0) X=X Mouse : Y=Y Mouse If Y>80 If Y<92 If X>134 If X<214 If X<146 Dec PTR Else If X>157 If X<169 Inc PTR Else If X>182 FIN=True End If End If End If End If End If End If End If If Y<98 If X>247 If X<360 If Y>90 If X>279 If X<352 UNDER=1-UNDER End If End If Else If Y>81 If X<295 ITALIC=1-ITALIC Else If X>325 BOLD=1-BOLD End If End If End If End If End If End If End If End If STY=ITALIC*4+BOLD*2+UNDER If PTR<1 Inc PTR End If If PTR>C Dec PTR End If Until FIN Screen Close 1 Screen 0 Set Font PTR Set Text STY End If End Proc Procedure TXT Repeat Until Mouse Key=0 Hide On Clear Key TX$="" : X=X Mouse : Y=Y Mouse X=X Screen(X) : Y=Y Screen(Y) Gr Writing 2 P=1 Repeat Text X,Y,TX$ Repeat K$=Inkey$ OK= Not(K$="") Until OK or Not(Mouse Key=0) Text X,Y,TX$ If Not OK X=X Mouse : Y=Y Mouse X=X Screen(X) : Y=Y Screen(Y) FIN=(TX$="") Else FIN=(K$=Chr$(13)) If Not FIN If K$=Chr$(8) If P>0 Dec P TX$=Left$(TX$,P) End If Else TX$=TX$+K$ Inc P End If End If End If Until FIN Gr Writing 0 Show On Text X,Y,TX$ End Proc Procedure CYCLE Shared PPEN,BAK A=Min(PPEN,BAK) B=Max(PPEN,BAK) Clear Key DEL=5 UP=True : GO=True : F=False Hide On REQ["Rotate Colours","","Stop it!","Start it!"] Repeat Until Mouse Key=0 If Param=2 Repeat If Not GO Repeat K$=Inkey$ F=(Mouse Key=0) F= Not F Until F or Not(K$="") S=Scancode End If If Not F If(S=76) or(S=62) UP=True : GO=True End If If(S=77) or(S=46) UP=False : GO=True End If If(S=74) or(S=11) Inc DEL : GO=True End If If(S=94) or(S=12) If DEL>1 Dec DEL : GO=True End If End If If GO GO=False Shift Off If UP Shift Up DEL,A,B,1 Else Shift Down DEL,A,B,1 End If End If End If Until(K$=Chr$(13)) or F Else Shift Off For T=0 To Screen Colour-1 Colour T,CLRS(T) Next T End If Show On End Proc ' You may find the following general purpose procedures useful. ' Splerge pours on a screen from the top, Source is the number of the ' Screen to be poured from. Dest is the unopened screen to be poured to. ' Speed is obiously the speed of the effect. the faster the messier though! ' Autoview should be off before the source screen is loaded, unpacked ' or whatever. the source will be closed after the pour. Procedure SPLERGE[SPEED,SOURCE,DEST] If Not SOURCE=DEST Screen SOURCE V=Screen Height : H=Screen Width C=Screen Colour : R=Lowres If C<4096 If H>320 R=Hires End If If V>256 R=R+Laced End If Repeat Until Mouse Key=0 Screen Open DEST,H,V,C,R Flash Off : Curs Off For T=0 To C-1 Screen SOURCE : CT=Colour(T) Screen DEST : Colour T,CT Next T View For LOP=V-SPEED To 0 Step -SPEED For LOP1=0 To LOP Step SPEED If Mouse Key>0 Goto OUCH End If Screen Copy SOURCE,0,LOP,H,LOP+SPEED To DEST,0,LOP1 Next LOP1 Next LOP End If End If Goto BACK OUCH: Screen Copy SOURCE To DEST Repeat Until Mouse Key=0 BACK: If C<4096 Screen Close SOURCE End If View End Proc ' _Appear is a procedure Which I wrote and have submitted to the Amiga ' Shopper AMOS professional Contest. Del is the delay time, type can either ' be 0 or 1. Procedure _APPEAR[DEL,TYPE] On Error Goto OHNO Def Fn RED(CLR)=CLR/256 Def Fn GREEN(CLR)=(CLR/16) mod 16 Def Fn BLUE(CLR)=CLR mod 16 If TYPE>0 TYPE=1 Else TYPE=0 End If CLRS=Screen Colour If CLRS=4096 Else If CLRS=64 CLRS=32 End If CLRS=CLRS-1 Dim CRED(CLRS),CGRN(CLRS),CBLU(CLRS) For T=0 To CLRS CLR=Colour(T) CRED(T)= Fn RED(CLR) CGRN(T)= Fn GREEN(CLR) CBLU(T)= Fn BLUE(CLR) Colour T,0 Next T View STAGE=0 If TYPE=0 STAGE=3 End If Repeat For S=0 To 15 For T=0 To CLRS CLR=Colour(T) R= Fn RED(CLR) G= Fn GREEN(CLR) B= Fn BLUE(CLR) If TYPE=0 If R2 End If Goto HERE OHNO: Resume HERE HERE: End Proc ' From the AMOS Compiler disk. Shows the AMOS message. I have slightly ' changed it to fit in with my program. This is invisible to the user. Procedure _SMALL_COPYRIGHT[YDISPLAY] ' ' Hide Break Off Screen Open 7,320,24,16,0 : Curs Off : Flash Off : Cls 0 Screen Display 7,,-100,, Paste Bob 260,3,6 Paper 0 : Pen 7 : Print At(1,1);"This program was written using" Get Sprite Palette View : Wait Vbl ' For Y=1 To Screen Height/2 Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2 Screen Offset 7,,Screen Height/2-Y View : Wait Vbl Next ' Wait 100 ' For Y=Screen Height/2 To 0 Step -1 Screen Display 7,,YDISPLAY+Screen Height/2-Y,,Y*2 Screen Offset 7,,Screen Height/2-Y View : Wait Vbl Next ' Screen Close 7 Break On Show ' End Proc ' Wipes the screen s by drawing smaller and smaller boxes of colour 0. ' Then closing the screen. DEL is a delay Procedure WIPE[S,DEL] Screen S : Ink 0 W=Screen Width : H=Screen Height X1=0 : X2=W Y1=0 : Y2=H DL= Not(DEL=0) Dec DEL Repeat Box X1,Y1 To X2,Y2 If DL For T=0 To DEL Wait Vbl Next T End If Inc X1 : Inc Y1 Dec X2 : Dec Y2 FIN=(Min(X1-1,X2)=X2) or(Min(Y1-1,Y2)=Y2) If Mouse Key>0 FIN=True End If Until FIN Screen Close S End Proc ' Closes all screens. Used at start to close default screen, and discovered ' errors in other procedures which would hav flummoxed me when I compiled ' without the default screen option. Closes screens using wipe. Procedure SCLOSE S=Screen While S>-1 WIPE[S,1] S=Screen Wend End Proc