1000 ' 1010 'Antic Towers 1020 '(c) 1987 Antic Publishing V. 010487 1030 'Written by Steve Everman & Paul Pratt 1040 ' 1050 '---------------------------------------- 1060 A$=chr$(0)+chr$(0)+chr$(0)+chr$(0): BELL$=chr$( 7 ) 1070 A=varptr( A$ ): A1=int( A/65536 ): A2=A-( A1*65536 ) 1080 randomize 0 1090 HANDLE=2: EXIT=2: TRUE=1: FALSE=( not TRUE ) 1100 GRAF.MKSTATE=79: FORM.ALERT=52: WIND.SET=105 1110 ' 1120 A#=GB 1130 CONTROL=peek( A# ) 1140 GINTOUT=peek( A#+12 ) 1150 GINTIN=peek( A#+8 ) 1160 dim STACK( 3, 9 ),KOL%( 16 ) 1170 gosub SET.PALETTE 1180 fullw 2: clearw 2 1190 if peek( SYSTAB )<>4 then gosub WARNING 1200 if peek( SYSTAB )<>4 then gosub ALERTBOX 1210 if CHOICE=EXIT then end 1220 gotoxy 0,0: print BELL$;: color 1,0,0 1230 for X=0 to 20 1240 gosub POLYLINE 1250 next X 1260 gosub ED.BOX: gosub FIND.HI 1270 OLD.DISK=NUMDISK 1280 gosub SET.ARRAY: gosub SCREEN.SET.UP 1290 gotoxy 14,2: print "[ READY ]" 1300 ' 1310 '---------------------------- 1320 MAIN: 1330 gosub GET.MOUSE 1340 while NEW.PRESS <>3 1350 gosub GET.MOUSE 1360 gosub SHOW 1370 while STACK( 2,8-NUMDISK )=0 and STACK( 3,8-NUMDISK )=0 1380 gosub GET.MOUSE 1390 if NEW.PRESS=1 and FALL=1 and INAIR=0 then gosub PULL 1400 if NEW.PRESS=1 and FALL=1 and INAIR>0 then gosub DOWN 1410 wend 1420 gosub REWARD 1430 gosub NEW.GAME 1440 wend 1450 color 5 1460 end 1470 ' 1480 '------------------------ 1490 FIND.HI: 1500 color 10: gotoxy 5,1: print "How many disks do you want?" 1510 R=4: gosub REVERSE: color 11 1520 for X=0 to 6 1530 S$=chr$( 32 )+chr$( 49+X )+chr$( 32 ) 1540 gotoxy 4+X*4,3: print S$ 1550 next X 1560 gotoxy 15,5: print "EXIT" 1570 R=1: gosub REVERSE: color 1 1580 while NEW.PRESS<>1 or MX>277 or MX <30 or MY>65 or MY<40 1590 gosub GET.MOUSE 1600 X.CHECK=FALSE: Y.CHECK=FALSE 1610 if MX>135 and MX<168 then X.CHECK=TRUE 1620 if MY>68 and MY<77 then Y.CHECK=TRUE 1630 if NEW.PRESS and X.CHECK and Y.CHECK then end 1640 wend 1650 gosub HIDE 1660 for X=1 to 5 1670 gotoxy 2,X: print " " 1680 next 1690 gosub SHOW: NUMDISK=int(( MX+8 )/36 ) 1700 return 1710 ' 1720 '---------------------------------- 1730 FIND.TOP: 1740 gosub GET.MOUSE 1750 SOURCEX=154: DISK.POLE=2 1760 if MX>199 then SOURCEX=246: DISK.POLE=3 1770 if MX<107 then SOURCEX=62: DISK.POLE=1 1780 for Y=1 to 8 1790 if STACK( DISK.POLE,Y-1 )=0 then TOP=Y 1800 next Y 1810 return 1820 ' 1830 '---------------------------------- 1840 PULL: 1850 gosub FIND.TOP: if TOP>7 then return 1860 INAIR=STACK( DISK.POLE, TOP ) 1870 ' 1880 PULL.UP: 1890 gosub HIDE 1900 X1=SOURCEX-40: X2=SOURCEX+40 1910 Y1=87+TOP*11: Y2=Y1+10 1920 XD1=115: XD2=195: YD1=40: YD2=50 1930 gosub VRO.COPYFORM 1940 XD1=X1: XD2=X2: YD1=Y1: YD2=Y2 1950 X1=22: X2=102: Y1=87: Y2=97 1960 gosub VRO.COPYFORM: gosub SHOW 1970 STACK( DISK.POLE, TOP )=0 1980 return 1990 ' 2000 '---------------------------------- 2010 DOWN: 2020 gosub FIND.TOP 2030 if INAIR > STACK( DISK.POLE, TOP ) then return 2040 ' 2050 PUT.DOWN: 2060 gosub HIDE 2070 X1=115: X2=195: Y1=40: Y2=50 2080 XD1=SOURCEX-40: XD2=SOURCEX+40 2090 YD1=76+TOP*11: YD2=YD1+10 2100 OLD.DISK=NUMDISK 2110 gosub VRO.COPYFORM 2120 gosub SHOW 2130 STACK( DISK.POLE, TOP-1 )=INAIR 2140 ' 2150 ERRASE: 2160 X1=15: X2=95: Y1=55: Y2=65 2170 XD1=115: XD2=195: YD1=40: YD2=50 2180 gosub VRO.COPYFORM 2190 INAIR=0: print BELL$; 2200 return 2210 ' 2220 '--------------------------------- 2230 NEW.GAME: 2240 gosub FIND.HI 2250 gosub SET.ARRAY 2260 if NUMDISK>OLD.DISK then gosub SEE.DISKS 2270 while NUMDISKNEW.PRESS then FALL=1 else FALL=0 3460 OLD.PRESS=NEW.PRESS 3470 return 3480 ' 3490 '------------------------------------- 3500 VRO.COPYFORM: 3510 poke CONTRL,109 3520 poke CONTRL+2,4 3530 poke CONTRL+6,1 3540 poke CONTRL+12,HANDLE 3550 poke CONTRL+14,A1 3560 poke CONTRL+16,A2 3570 poke CONTRL+18,A1 3580 poke CONTRL+20,A2 3590 poke INTIN,3 3600 poke PTSIN,X1 3610 poke PTSIN+2,Y1 3620 poke PTSIN+4,X2 3630 poke PTSIN+6,Y2 3640 poke PTSIN+8,XD1 3650 poke PTSIN+10,YD1 3660 poke PTSIN+12,XD2 3670 poke PTSIN+14,YD2 3680 vdisys( 0 ) 3690 return 3700 ' 3710 '------------------------------------- 3720 HIDE: 3730 poke CONTRL,123 3740 poke CONTRL+2,0 3750 poke CONTRL+6,0 3760 poke CONTRL+12,HANDLE 3770 vdisys( 0 ) 3780 return 3790 ' 3800 '------------------------------------- 3810 SHOW: 3820 poke CONTRL,122 3830 poke CONTRL+2,0 3840 poke CONTRL+6,1 3850 poke CONTRL+12,HANDLE 3860 poke INTIN,1 3870 vdisys( 0 ) 3880 return 3890 ' 3900 '------------------------------------- 3910 ALERTBOX: 3920 ADDRIN=peek( A#+16 ) 3930 B#=ADDRIN 3940 poke GINTIN,0 3950 TEXT$=TEXT$+chr$( 0 )+chr$( 0 ) 3960 poke B#,varptr( TEXT$ ) 3970 gemsys( FORM.ALERT ) 3980 CHOICE=peek( GINTOUT ) 3990 return 4000 ' 4010 '---------------------------------- 4020 WARNING: 4030 TEXT$="[0][|This program works best |" 4040 TEXT$=TEXT$+" in LOW resolution. |]" 4050 TEXT$=TEXT$+"[ Run | EXIT ]" 4060 return 4070 ' 4080 '--------------------------------- 4090 ED.BOX: 4100 REPLACE$=" "+chr$( 127 )+" Antic Towers " 4110 REPLACE$=REPLACE$+chr$( 127 )+" "+chr$( 0 ) 4120 poke GINTIN+0,peek( SYSTAB+8 ) 4130 C#=GINTIN+4: poke GINTIN+2,2 4140 poke C#,varptr( REPLACE$ ) 4150 gemsys( WIND.SET ) 4160 return 4170 ' 4180 '---------------------------------- 4190 REVERSE: 4200 poke CONTRL,32 4210 poke CONTRL+2,0 4220 poke CONTRL+6,1 4230 poke CONTRL+12,HANDLE 4240 poke INTIN,R 4250 vdisys( 1 ) 4260 return 4270 ' 4280 '---------------------------------- 4290 POLYLINE: 4300 poke CONTRL,6 4310 poke CONTRL+2,6 4320 poke CONTRL+4,0 4330 poke CONTRL+12,HANDLE 4340 poke PTSIN,0+X 4350 poke PTSIN+2,0+X 4360 poke PTSIN+4,639-X 4370 poke PTSIN+6,0+X 4380 poke PTSIN+8,639-X 4390 poke PTSIN+10,199-X 4400 poke PTSIN+12,0+X 4410 poke PTSIN+14,199-X 4420 poke PTSIN+16,0+X 4430 poke PTSIN+18,0+X 4440 vdisys( 1 ) 4450 return 4460 ' 4470 '------------------------------------ 4480 DISK: 4490 poke CONTRL,11 4500 poke CONTRL+2,2 4510 poke CONTRL+6,0 4520 poke CONTRL+10,9 4530 poke CONTRL+12,2 4540 poke PTSIN,X1 4550 poke PTSIN+2,Y1 4560 poke PTSIN+4,X2 4570 poke PTSIN+6,Y2 4580 vdisys( 0 ) 4590 return 4600 ' 4610 '----------------------------------- 4620 FILCOL: 4630 poke CONTRL,25 4640 poke CONTRL+2,0 4650 poke CONTRL+6,1 4660 poke CONTRL+12,2 4670 poke INTIN,FC 4680 vdisys( 0 ) 4690 return