Check ECB91A4B Auto 8224 # Run-time Variables Var q: Num = 1 Var r: Num = -1 Var v: Num = 4 Var b: Num = 5 Var e: Num = 10 Var pdepth: Num = 0 Var phealth: Num = 10 Var phealthmax: Num = 10 Var pwealth: Num = 0 Var pxpos: Num = 22 Var pypos: Num = 5 Var plight: Num = 2 Var pxp: Num = 4 Var phunger: Num = 107 Var ppoison: Num = 0 Var pweapon: Num = 0 Var pshield: Num = 0 Var parmour: Num = 0 Var pring: Num = 0 Var pdam: Num = 1 Var parm: Num = 0 Var pdmod: Num = 0 Var pamod: Num = 0 Var phmod: Num = 0 Var psource: Num = 0 Var ptunnel: Num = 1 Var pnoise: Num = 5 Var ppcount: Num = 0 Var bsize: Num = 3 Var rt: Num = 11 Var rc: Num = 1 Var tc: Num = 0 Var roomwidth: Num = 5 Var roomheight: Num = 7 Var roomx: Num = 23 Var roomy: Num = 11 Var pl: Num = -9 Var pm: Num = 4 Var uy: Num = 7 Var ux: Num = 22 Var dy: Num = 7 Var dx: Num = 17 Var lic: Num = 3 Var ip: Num = 2 Var temproom: Num = 7 Var tempx: Num = 21 Var tempy: Num = 6 Var mic: Num = 4 Var txpos: Num = 20 Var typos: Num = 5 Var aroll: Num = 9 Var b: NumArray(9) = 1, 1, 0, 0, 0, 0, 0, 0, 0 Var i: NumArray(32, 19) = 1, 1, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 0, 0, 0, 0, 0, 0, 1, 2, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 75, 0, 0, 0, 0, 0, 0, 1, 4, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, -1, 0, 0, 0, 1, 5, 46, 0, 0, 0, 0, 0, 0, 0, 0, 0, 175, 0, 0, 0, 0, 0, 0, 2, 6, 33, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 2, 2, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 25, 0, 0, 0, 0, 2, 4, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 1, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 2, 5, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 2, 3, 33, 10, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 2, 61, 10, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 1, 61, 15, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 4, 61, 5, 0, 0, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 1, 124, 0, 2, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 3, 124, 10, 4, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 4, 5, 124, 20, 6, 2, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 4, 2, 124, 30, 10, 5, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 4, 1, 92, 0, 2, 1, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 4, 3, 92, 10, 3, 2, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 4, 5, 92, 20, 5, 2, 0, 0, 0, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 4, 2, 92, 30, 10, 5, 0, 0, 0, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 5, 6, 41, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 4, 41, 10, 0, 0, 3, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 41, 15, 0, 0, 5, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 2, 41, 30, 0, 0, 10, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 4, 93, 0, 0, 0, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 5, 93, 10, 0, 0, 15, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 1, 93, 15, 0, 0, 20, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 2, 93, 30, 0, 0, 30, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 7, 2, 126, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 7, 6, 126, 10, 0, 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 7, 5, 126, 20, 0, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0 Var m: NumArray(26, 10) = 97, 1, 1, 0, 5, 1, 0, 1, 1, 2, 98, 1, 3, 0, 3, 1, 0, 0, 1, 1, 99, 1, 3, 1, 3, 3, 0, 1, 1, 6, 100, 10, 10, 1, 5, 20, 20, 4, 1, 2, 101, 1, 1, 1, 5, 2, 5, 1, 0, 3, 102, 5, 1, 0, 3, 4, 5, 1, 1, 6, 103, 1, 5, 0, 3, 4, 5, 1, 1, 5, 104, 1, 1, 0, 3, 1, 0, 1, 1, 2, 105, 2, 2, 1, 5, 5, 10, 1, 1, 4, 106, 3, 3, 1, 5, 10, 15, 2, 0, 4, 107, 2, 2, 0, 3, 4, 5, 2, 1, 1, 108, 1, 1, 1, 5, 1, 0, 0, 1, 6, 109, 1, 4, 0, 3, 2, 0, 0, 0, 4, 110, 6, 4, 1, 3, 8, 10, 1, 1, 3, 111, 4, 4, 0, 3, 6, 0, 1, 1, 4, 112, 2, 5, 0, 2, 3, 0, 1, 1, 3, 113, 5, 5, 0, 4, 7, 10, 0, 1, 1, 114, 2, 2, 0, 5, 2, 0, 0, 1, 3, 115, 5, 2, 0, 2, 3, 5, 1, 1, 2, 116, 2, 1, 0, 4, 5, 0, 2, 1, 5, 117, 7, 5, 0, 4, 15, 20, 2, 1, 2, 118, 2, 6, 0, 3, 10, 10, 0, 1, 5, 119, 5, 5, 1, 5, 18, 15, 2, 1, 3, 120, 6, 6, 1, 6, 19, 20, 2, 1, 1, 121, 2, 2, 0, 3, 2, 0, 1, 1, 4, 122, 4, 4, 0, 4, 5, 15, 1, 1, 3 Var c: NumArray(18, 4) = 2, 1, 4, 2, 13, 3, 3, 4, 6, 13, 3, 2, 2, 14, 2, 3, 6, 16, 2, 3, 11, 11, 3, 5, 6, 21, 3, 2, 3, 21, 2, 3, 2, 27, 3, 2, 11, 23, 7, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 Var n: NumArray(4, 8) = 20, 6, 13, 2, 1, 4, 5, 0, 18, 2, 15, 2, 2, 5, 2, 0, 13, 3, 15, 1, 4, 3, 2, 0, 1, 13, 4, 1, 1, 5, 1, 0 Var d: NumArray(3, 3) = 3, 3, 15, 2, 15, 6, 9, 8, 14 Var l: NumArray(3, 3) = 3, 3, 15, 2, 15, 6, 9, 8, 14 Var t: NumFOR = 5, 4, 1, 2070, 2 Var u: NumFOR = 4, 3, 1, 3200, 2 Var y: NumFOR = 8, 7, 1, 8120, 2 Var h: NumFOR = 4, 3, 1, 8290, 2 Var j: NumFOR = 3, 2, 1, 8255, 2 Var k: NumFOR = 2, 1, 1, 8060, 2 Var x: NumFOR = 6, 5, 1, 8125, 2 Var w: NumFOR = 7, 9, 1, 8195, 2 Var d: NumFOR = 11, 10, 1, 8300, 2 Var d$: Str = "Nothing" Var z$: StrArray(9) = "\\|/-\\|/-\\" Var i$: StrArray(32, 16) = "Mushroom Food Ration Slime Mold Elvish Waybread Glowing Potion Swirling Potion Cloudy Potion Steamy Potion Clear Potion Chaotic Potion Ruby Ring Saphire Ring Emerald Ring Dagger Short Sword Broad Sword Holy Avenger Hatchet War Axe Battle Axe Durin's Axe Buckler Leather Shield Iron Shield Steel Shield Leather Armour Chain Mail Full Plate Dragon Scale Torch Lantern Phial " Var m$: StrArray(26, 10) = "giant ant bat centipede dragon evil eye tiger ghost warrior icky thingjelly kobold louse mold naga orc priest bear rat skeleton veteran demon vortex giant wormxaren yeek zombie " # End Run-time Variables 1 RANDOMIZE 5 PAPER 0: BORDER 0: INK 2 6 CLS 20 LET pdepth=0: LET phealth=10: LET phealthmax=phealth: LET pwealth=0: LET pxpos=0: LET pypos=0: LET plight=2: LET pxp=0: LET phunger=125: LET ppoison=0: LET pweapon=0: LET pshield=0: LET parmour=0: LET pring=0: LET pdam=1: LET parm=0: LET pdmod=0: LET pamod=0: LET phmod=0: LET psource=0: LET ptunnel=1: LET pnoise=5: LET ppcount=0: LET d$="Nothing" 21 DIM z$(9): DIM b(9): DIM i(32,19): DIM i$(32,16): DIM m(26,10): DIM m$(26,10): LET bsize=1 22 LET z$="\\|/-\\|/-\\" 25 GO SUB 9000 30 GO SUB 8000 33 IF lic=0 THEN DIM d(1,3) 500 REM main loop 510 GO SUB 2000 530 PAUSE 0 540 PRINT AT pypos,pxpos; INK 0; BRIGHT 0;" " 545 REM PRINT AT 21,0; INK 2;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:" 550 IF INKEY$="q" AND ATTR (pypos-1,pxpos)<7 THEN LET pypos=pypos-1 555 IF INKEY$="q" AND ATTR (pypos-1,pxpos)>7 AND ATTR (pypos-1,pxpos)<71 THEN LET txpos=pxpos: LET typos=pypos-1: GO SUB 4700 560 IF INKEY$="a" AND ATTR (pypos+1,pxpos)<7 THEN LET pypos=pypos+1 565 IF INKEY$="a" AND ATTR (pypos+1,pxpos)>7 AND ATTR (pypos+1,pxpos)<71 THEN LET txpos=pxpos: LET typos=pypos+1: GO SUB 4700 570 IF INKEY$="o" AND ATTR (pypos,pxpos-1)<7 THEN LET pxpos=pxpos-1 575 IF INKEY$="o" AND ATTR (pypos,pxpos-1)>7 AND ATTR (pypos,pxpos-1)<71 THEN LET txpos=pxpos-1: LET typos=pypos: GO SUB 4700 580 IF INKEY$="p" AND ATTR (pypos,pxpos+1)<7 THEN LET pxpos=pxpos+1 585 IF INKEY$="p" AND ATTR (pypos,pxpos+1)>7 AND ATTR (pypos,pxpos+1)<71 THEN LET txpos=pxpos+1: LET typos=pypos: GO SUB 4700 590 IF INKEY$="d" AND pxpos=dx AND pypos=dy THEN LET pdepth=pdepth+1: GO SUB 8000 600 IF INKEY$="u" AND pxpos=ux AND pypos=uy AND pdepth>0 THEN LET pdepth=pdepth-1: GO SUB 8000 610 IF INKEY$="g" THEN GO SUB 3000 620 IF INKEY$="i" THEN GO SUB 3300 630 IF INKEY$="d" THEN GO SUB 3500 640 IF INKEY$="e" THEN GO SUB 3610 650 IF INKEY$="t" THEN GO SUB 3800 660 IF INKEY$="w" THEN GO SUB 4000 670 IF INKEY$="E" THEN GO SUB 4300 680 IF INKEY$="Q" THEN GO SUB 4500 700 LET phunger=phunger-1 701 IF phunger<=0 THEN LET d$="Starvation": GO TO 9200 702 IF phunger<=50 THEN PRINT AT 21,0; INK 2;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..": PRINT AT 21,1; INK 7;"You are hungry" 703 IF phunger<=25 THEN PRINT AT 21,1; INK 7;"You are starving!" 704 IF phunger<=5 THEN PRINT AT 21,1; INK 7;"Hero needs food badly!" 710 REM poison 720 IF ppoison<0 THEN LET ppoison=0 730 IF ppoison>0 AND ppcount>=10 THEN LET phealth=phealth-1: LET ppoison=ppoison-1: LET ppcount=1: GO SUB 1000: IF phealth=0 THEN LET d$="Poison": GO TO 9200 740 IF ppoison>0 THEN LET ppcount=ppcount+1: PRINT AT 21,1; INK 7;"Poisoned!" 999 GO TO 500 1000 REM stat updates 1004 PRINT AT 0,0; INK 2;"\:'\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\':" 1005 PRINT AT 21,0; INK 2;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:" 1010 PRINT AT 0,1; INK 7;"Depth:";pdepth*50;"ft" 1020 PRINT AT 0,14; INK 7;"HP:";phealth;"/";phealthmax 1030 PRINT AT 0,23; INK 7;"XP:";pxp 1035 PRINT AT 21,20; INK 7;pdam+pdmod;":";parm+pamod 1040 PRINT AT 21,25; INK 7;"|)]=~" 1050 IF pweapon<>0 THEN PRINT AT 21,25; INK i(pweapon,2);CHR$ (i(pweapon,3)) 1055 IF pring<>0 THEN PRINT AT 21,28; INK i(pring,2);CHR$ (i(pring,3)) 1056 IF pshield<>0 THEN PRINT AT 21,26; INK i(pshield,2);CHR$ (i(pshield,3)) 1057 IF parmour<>0 THEN PRINT AT 21,27; INK i(parmour,2);CHR$ (i(parmour,3)) 1058 IF psource<>0 THEN PRINT AT 21,29; INK i(psource,2);CHR$ (i(psource,3)) 1100 RETURN 2000 REM entities updates 2010 IF pdepth>0 THEN PRINT AT uy,ux; INK 6;"<" 2020 IF pdepth<40 AND ABS (pypos-dy)<=plight AND ABS (pxpos-dx)<=plight THEN PRINT AT dy,dx; INK 6;">" 2030 FOR t=1 TO lic 2040 IF ABS (pypos-l(t,2))<=plight AND ABS (pxpos-l(t,3))<=plight THEN PRINT AT l(t,2),l(t,3); INK i(l(t,1),2); BRIGHT 0;CHR$ (i(l(t,1),3)) 2050 NEXT t 2060 PRINT AT pypos,pxpos; INK 7; BRIGHT 1;"\@" 2070 FOR t=1 TO mic 2080 IF m(n(t,1),9)>0 AND ABS (pypos-n(t,2))pypos AND ATTR (n(t,2)-1,n(t,3))<7 THEN LET n(t,2)=n(t,2)-1: PRINT AT n(t,2)+1,n(t,3); INK 0; BRIGHT 0;" ": GO TO 2120 2090 IF m(n(t,1),9)>0 AND ABS (pypos-n(t,2))0 AND ABS (pypos-n(t,2))0 AND ABS (pypos-n(t,2))pxpos AND ATTR (n(t,2),n(t,3)-1)<7 THEN LET n(t,3)=n(t,3)-1: PRINT AT n(t,2),n(t,3)+1; INK 0; BRIGHT 0;" ": GO TO 2120 2120 PRINT AT 21,31; INK 7;z$(INT ((t-1)/3)+1) 2130 IF ABS (pypos-n(t,2))<=plight AND ABS (pxpos-n(t,3))<=plight THEN PRINT AT n(t,2),n(t,3); INK m(n(t,1),10); BRIGHT 1;CHR$ (m(n(t,1),1)) 2135 REM removed monster attacks 2140 REM IF ABS (pypos-n(t,2))<=1 AND ABS (pxpos-n(t,3)<=1) THEN GO SUB 5200 2240 NEXT t 2250 PRINT AT 21,31; BRIGHT 0; INK 2;"\.:" 2340 RETURN 3000 REM pick up 3010 IF bsize>9 THEN PRINT AT 21,1; INK 7;"Inventory Full": BEEP .2,1: GO SUB 1000: RETURN 3020 FOR t=1 TO lic 3030 IF l(t,2)=pypos AND l(t,3)=pxpos THEN GO TO 3070 3040 NEXT t 3050 PRINT AT 21,1; INK 7;"Nothing to take": BEEP .2,1: GO SUB 1000 3060 RETURN 3070 PRINT AT 21,1; INK 7;"Taken: ";i$(l(t,1)) 3080 REM remove item from level array 3090 LET b(bsize)=l(t,1) 3100 LET bsize=bsize+1 3110 DIM d(1,3) 3120 IF lic>=2 THEN DIM d(lic-1,3) 3130 LET v=1 3140 FOR u=1 TO lic 3150 IF u<>t THEN LET d(v,1)=l(u,1): LET d(v,2)=l(u,2): LET d(v,3)=l(u,3): LET v=v+1 3155 PRINT AT 21,31; INK 7;z$(INT ((u-1)/3)+1) 3160 NEXT u 3170 LET lic=lic-1 3180 IF lic>=1 THEN DIM l(lic,3) 3190 IF lic=0 THEN DIM l(1,3) 3200 FOR u=1 TO lic 3210 LET l(u,1)=d(u,1): LET l(u,2)=d(u,2): LET l(u,3)=d(u,3) 3215 PRINT AT 21,31; INK 7;z$(INT ((u-1)/3)+1) 3220 NEXT u 3225 GO SUB 1000 3230 RETURN 3300 REM inventory 3310 PRINT AT 21,1; INK 7;"In your pack [more]" 3320 PAUSE 0 3330 PRINT AT 21,0; INK 2;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.." 3340 IF bsize=1 AND b(1)=0 THEN PRINT AT 21,1; INK 7;"Nothing [more]": PAUSE 0: GO SUB 1000: RETURN 3350 FOR t=1 TO bsize-1 3360 PRINT AT 21,1; INK 7;t;") "; INK i(b(t),2);CHR$ (i(b(t),3)); INK 7;" ";i$(b(t));"[more]" 3370 PAUSE 0 3380 NEXT t 3390 GO SUB 1000 3400 RETURN 3500 REM drop (nope! destroy) 3510 PRINT AT 21,1; INK 7;"Destroy item (1-";bsize-1;"(Qi))?" 3520 PAUSE 0 3530 LET a$=INKEY$ 3540 IF a$="Q" THEN GO SUB 1000: RETURN 3550 IF a$="i" THEN GO SUB 3300: GO TO 3500 3560 IF VAL (a$)<1 OR VAL (a$)>bsize-1 THEN PRINT AT 21,1; INK 7;"No": BEEP .2,1: GO TO 3500 3570 PRINT AT 21,1; INK 7;"Destroyed: ";i$(b(VAL (a$))) 3580 GO SUB 6999: GO SUB 1000 3590 RETURN 3600 REM eat 3610 PRINT AT 21,1; INK 7;"Eat what (1-";bsize-1;"(Qi))?" 3620 PAUSE 0 3630 LET a$=INKEY$ 3640 IF a$="Q" THEN GO SUB 1000: RETURN 3650 IF a$="i" THEN GO SUB 3300: GO TO 3610 3660 IF VAL (a$)<1 OR VAL (a$)>bsize-1 THEN PRINT AT 21,1; INK 7;"No": BEEP .2,1: GO TO 3610 3670 IF i(b(VAL a$),1)<>1 THEN PRINT AT 21,1; INK 7;"Bleeuurrgh! That's not food": BEEP .2,1: GO SUB 1000: RETURN 3680 PRINT AT 21,1; INK 7;"Mmm, eaten the ";i$(b(VAL (a$))) 3690 LET phunger=phunger+i(b(VAL a$),13) 3700 LET ppoison=ppoison*i(b(VAL a$),16) 3710 GO SUB 6999 3720 GO SUB 1000 3730 RETURN 3800 REM tunnel 3810 PRINT AT 21,1; INK 7;"Which direction?(Q)" 3820 PAUSE 0 3830 LET a$=INKEY$ 3835 IF a$="Q" THEN GO SUB 1000: RETURN 3840 IF a$="q" AND pypos>2 AND ATTR ((pypos-1),pxpos)=7 THEN PRINT AT 21,1; INK 7;"You dig in the rock": IF INT (RND*10)1 AND ATTR (pypos,(pxpos-1))=7 THEN PRINT AT 21,1; INK 7;"You dig in the rock": IF INT (RND*10)bsize-1 THEN PRINT AT 21,1; INK 7;"No": BEEP .2,1: GO TO 3610 4070 IF i(b(VAL a$),1)<3 THEN PRINT AT 21,1; INK 7;"You can't weild that": BEEP .2,1: GO SUB 1000: RETURN 4080 PRINT AT 21,1; INK 7;"You wield the ";i$(b(VAL a$)) 4090 LET tswap=0 4100 IF i(b(VAL a$),1)=4 THEN IF pweapon<>0 THEN LET tswap=pweapon: LET pweapon=0: LET pdam=0: LET pdmod=0: LET ptunnel=1 4110 IF i(b(VAL a$),1)=4 THEN LET pweapon=b(VAL a$): LET pdam=pdam+i(b(VAL a$),5): LET pdmod=pdmod+INT (((pdepth+1)/10)*i(b(VAL a$),6)): LET ptunnel=i(b(VAL a$),12): GO SUB 6999: GO SUB 1000: GO TO 4200 4120 IF i(b(VAL a$),1)=3 THEN IF pring<>0 THEN LET tswap=pring: LET pring=0: LET pdam=0: LET pdmod=0: LET parm=0: LET pamod=0: LET phealthmax=phealthmax-i(tswap,9): LET phmod=0 4130 IF i(b(VAL a$),1)=3 THEN LET pring=b(VAL a$): LET pdam=pdam+i(b(VAL a$),5): LET pdmod=pdmod+INT ((pdepth/10)*i(b(VAL a$),6)): LET parm=parm+i(b(VAL a$),7): LET pamod=pamod+INT ((pdepth/10)*i(b(VAL a$),8)): LET phealthmax=phealthmax+i(b(VAL a$),9): LET phmod=phmod+INT ((pdepth/10)*i(b(VAL a$),10)): GO SUB 6999: GO SUB 1000: GO TO 4200 4140 IF i(b(VAL a$),1)=5 THEN IF pshield<>0 THEN LET tswap=pshield: LET parm=0: LET pamod=0 4150 IF i(b(VAL a$),1)=5 THEN LET pshield=b(VAL a$): LET parm=parm+i(b(VAL a$),7): LET pamod=pamod+INT ((pdepth/10)*i(b(VAL a$),8)): GO SUB 6999: GO SUB 1000: GO TO 4200 4160 IF i(b(VAL a$),1)=6 THEN IF parmour<>0 THEN LET tswap=parmour: LET parm=0: LET pamod=0 4170 IF i(b(VAL a$),1)=6 THEN LET parmour=b(VAL a$): LET parm=parm+i(b(VAL a$),7): LET pamod=pamod+INT ((pdepth/10)*i(b(VAL a$),8)): GO SUB 6999: GO SUB 1000: GO TO 4200 4180 IF i(b(VAL a$),1)=7 THEN IF psource<>0 THEN LET tswap=psource: LET plight=2 4190 IF i(b(VAL a$),1)=7 THEN LET psource=b(VAL a$): LET plight=i(b(VAL a$),11): GO SUB 6999: GO SUB 1000: GO TO 4200 4200 IF tswap<>0 THEN LET b(bsize)=tswap: LET bsize=bsize+1 4210 RETURN 4300 REM equiped 4310 PRINT AT 21,1; INK 7;"Currently equiped [more]" 4320 PAUSE 0 4330 LET t=1 4340 IF pweapon=0 THEN PRINT AT 21,1; INK 7;t;") Weapon: Fists [more]": PAUSE 0 4350 IF pweapon<>0 THEN PRINT AT 21,1; INK 7;t;") Weapon:";i$(pweapon);AT 21,25;" [more]": PAUSE 0 4360 LET t=t+1 4370 IF pshield=0 THEN PRINT AT 21,1; INK 7;t;") Shield: Nothing [more]": PAUSE 0 4380 IF pshield<>0 THEN PRINT AT 21,1; INK 7;t;") Shield: ";i$(pshield);AT 21,25;" [more]": PAUSE 0 4390 LET t=t+1 4400 IF parmour=0 THEN PRINT AT 21,1; INK 7;t;") Armour: Cloth Tunic [more]": PAUSE 0 4410 IF parmour<>0 THEN PRINT AT 21,1; INK 7;t;") Armour: ";i$(parmour);AT 21,25;" [more]": PAUSE 0 4420 LET t=t+1 4430 IF pring=0 THEN PRINT AT 21,1; INK 7;t;") Ring: Nothing [more]": PAUSE 0 4440 IF pring<>0 THEN PRINT AT 21,1; INK 7;t;") Ring: ";i$(pring);AT 21,25;" [more]": PAUSE 0 4450 LET t=t+1 4460 IF psource=0 THEN PRINT AT 21,1; INK 7;t;") Light: Candle [more]": PAUSE 0 4470 IF psource<>0 THEN PRINT AT 21,1; INK 7;t;") Light: ";i$(psource);AT 21,25;" [more]": PAUSE 0 4480 GO SUB 1000 4490 RETURN 4500 REM Quaff potions 4510 PRINT AT 21,1; INK 7;"Quaff what (1-";bsize-1;"(Qi))?" 4520 PAUSE 0 4530 LET a$=INKEY$ 4540 IF a$="Q" THEN GO SUB 1000: RETURN 4550 IF a$="i" THEN GO SUB 3300: GO TO 4500 4560 IF VAL (a$)<1 OR VAL (a$)>bsize-1 THEN PRINT AT 21,1; INK 7;"No": BEEP .2,1: GO TO 4500 4570 IF i(b(VAL a$),1)<>2 THEN PRINT AT 21,1; INK 7;"You can't quaff that!": BEEP .2,1: GO SUB 1000: RETURN 4580 PRINT AT 21,1; INK 7;"You quaff the ";i$(b(VAL (a$))) 4590 IF b(VAL a$)=5 THEN LET pxp=pxp+500: PRINT AT 21,1; INK 7;"You feel experienced! [more]": PAUSE 0: GO SUB 6999: GO SUB 1000: RETURN 4600 IF b(VAL a$)=6 THEN LET phealth=phealthmax: LET ppoison=0: PRINT AT 21,1; INK 7;"You feel Really Healthy! [more]": PAUSE 0: GO SUB 6999: GO SUB 1000: RETURN 4610 IF b(VAL a$)=7 THEN LET ppoison=INT ((RND*20)+5): PRINT AT 21,1; INK 7;"You feel sickly! [more]": PAUSE 0: GO SUB 6999: GO SUB 1000: RETURN 4620 IF b(VAL a$)=8 THEN IF parmour=0 THEN LET phealth=phealth-INT ((RND*5)+5): PRINT AT 21,1; INK 7;"It Burns! [more]": PAUSE 0: GO SUB 6999: GO SUB 1000: RETURN 4630 IF b(VAL a$)=8 THEN IF parmour<>0 THEN LET parm=parm-INT ((RND*5)+5): PRINT AT 21,1; INK 7;"Your armour fizzes! [more]": PAUSE 0: GO SUB 6999: GO SUB 1000 4640 IF b(VAL a$)=9 THEN LET phunger=25: PRINT AT 21,1; INK 7;"You vomit! [more]": PAUSE 0: GO SUB 6999: GO SUB 1000 4650 IF b(VAL a$)=10 THEN PRINT AT 21,1; INK 7;"You feel... chaotic! [more]": PAUSE 0: LET ttarget=INT (RND*rt)+1: LET pxpos=c(ttarget,2)+INT (RND*(c(ttarget,4))): LET pypos=c(ttarget,1)+INT (RND*(c(ttarget,3))): GO SUB 6999: GO SUB 1000 4660 RETURN 4700 REM player combat 4710 FOR t=1 TO mic 4720 IF txpos=n(t,3) AND typos=n(t,2) THEN GO TO 4750 4730 NEXT t 4740 RETURN 4750 LET aroll=INT (RND*10)+pdam 4760 IF aroll>n(t,5) THEN PRINT AT 21,1; INK 7;"You hit the ";m$(n(t,1));AT 21,25;"[more]": PAUSE 0: LET n(t,6)=n(t,6)-(pdam+pdmod) 4770 IF n(t,6)<=0 THEN PRINT AT 21,1; INK 7;"You killed the ";m$(n(t,1));AT 21,25;"[more]": PAUSE 0: LET pxp=pxp+n(t,7): GO SUB 5000: PRINT AT typos,txpos; BRIGHT 0; INK 0;" ": GO TO 4805 4800 IF aroll<=n(t,5) THEN PRINT AT 21,1; INK 7;"You miss the ";m$(n(t,1));AT 21,25;"[more]": PAUSE 0 4805 REM IF tempc>0 THEN LET lic=lic+tempc 4806 REM FOR u=lic-tempc TO lic 4807 REM LET ip=INT (RND*32)+1 4808 REM IF i(ip,4)>pdepth THEN LET u=u-1: NEXT u 4850 GO SUB 1000 4900 RETURN 5000 REM remove monster from level array 5010 DIM d(1,8) 5020 IF mic>=2 THEN DIM d(mic-1,8) 5030 LET v=1 5040 FOR u=1 TO mic 5050 IF u<>t THEN LET d(v,1)=n(u,1): LET d(v,2)=n(u,2): LET d(v,3)=n(u,3): LET d(v,4)=n(u,4): LET d(v,5)=n(u,5): LET d(v,6)=n(u,6): LET d(v,7)=n(u,7): LET d(v,8)=n(u,8): LET v=v+1 5055 PRINT AT 21,31; INK 7;z$(INT ((u-1)/3)+1) 5060 NEXT u 5070 LET mic=mic-1 5080 IF mic>=1 THEN DIM n(mic,8) 5090 IF mic=0 THEN DIM n(1,8) 5100 FOR u=1 TO mic 5110 LET n(u,1)=d(u,1): LET n(u,2)=d(u,2): LET n(u,3)=d(u,3): LET n(u,4)=d(u,4): LET n(u,5)=d(u,5): LET n(u,6)=d(u,6): LET n(u,7)=d(u,7): LET n(u,8)=d(u,8) 5115 PRINT AT 21,31; INK 7;z$(INT ((u-1)/3)+1) 5120 NEXT u 5125 GO SUB 1000 5130 RETURN 5200 LET aroll=INT (RND*(m(n(t,2),2)+1)) 5210 IF aroll>parm+pamod THEN PRINT AT 21,1;"The ";m$(n(t,1));" hit you";AT 21,25;"[more]": PAUSE 0: LET phealth=phealth-(m(n(t,2),2)): IF (m(n(t,1),4)>0) THEN LET ppoison=ppoison=INT (RND*pdepth)+5 5220 IF aroll=2 THEN DIM d(bsize-1) 7020 LET v=1 7030 FOR u=1 TO bsize-1 7040 IF VAL (a$)<>u THEN LET d(v)=b(u): LET v=v+1 7045 PRINT AT 21,31; INK 7;z$(INT (u-1)+1) 7050 NEXT u 7060 LET bsize=bsize-1 7070 DIM b(9) 7080 FOR u=1 TO bsize-1 7090 LET b(u)=d(u) 7095 PRINT AT 21,31; INK 7;z$(INT (u-1)+1) 7100 NEXT u 7110 RETURN 8000 REM dungeon builder 8005 PRINT AT 0,0; INK 2;"\:'\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\''\':" 8010 PRINT AT 21,0; INK 2;"\:.\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\..\.:" 8015 FOR y=1 TO 20 8020 INK 7: BRIGHT 0: PRINT AT y,0;"################################" 8025 NEXT y 8030 DIM c(18,4) 8035 LET rt=1 8040 FOR h=1 TO 3 8045 FOR j=1 TO 2 8050 LET rc=INT (RND*3)+1 8055 LET tc=0 8060 FOR k=1 TO rc 8065 LET roomwidth=INT (RND*INT (7/rc))+2 8070 LET roomheight=INT (RND*INT (6/rc))+2 8075 LET roomx=(10*(h-1))+INT ((RND*(9-roomwidth)+1)) 8080 LET roomy=1+(9*(j-1))+INT ((RND*(8-roomheight)+1)) 8085 FOR y=0 TO roomheight 8090 FOR x=0 TO roomwidth 8095 IF SCREEN$ (roomy+y,roomx+x)=" " THEN LET k=k-1: LET tc=tc+1: NEXT k 8100 IF tc>=20 THEN GO TO 8180 8105 PRINT AT 21,31; INK 7;z$(y+1) 8110 NEXT x 8115 NEXT y 8120 FOR y=0 TO roomheight 8125 FOR x=0 TO roomwidth 8130 PRINT AT roomy+y,roomx+x; INK 0; BRIGHT 0;" " 8135 NEXT x 8140 NEXT y 8145 LET c(rt,3)=roomheight 8150 LET c(rt,4)=roomwidth 8155 LET c(rt,2)=roomx 8160 LET c(rt,1)=roomy 8165 LET rt=rt+1 8170 LET tc=0 8175 NEXT k 8180 REM dirty loop break! 8185 NEXT j 8190 NEXT h 8195 FOR w=1 TO rt-2 8200 LET pl=(c(w,1)-c(w+1,1)) 8205 LET pm=(c(w,2)-c(w+1,2)) 8210 LET q=-1 8215 LET r=-1 8220 IF pl<1 THEN LET q=1 8225 IF pm<1 THEN LET r=1 8230 FOR t=c(w,2) TO c(w+1,2) STEP r 8235 PRINT AT c(w,1)+(c(w,3)/2),t; INK 0; BRIGHT 0;" " 8240 NEXT t 8245 NEXT w 8250 FOR h=1 TO 2 8255 FOR j=1 TO 2 8260 LET t=INT (RND*2)-1 8265 FOR d=0 TO 10 8270 PRINT AT (j*10)-5+t,(h*10)-5+d; INK 0; BRIGHT 0;" " 8275 NEXT d 8280 NEXT j 8285 NEXT h 8290 FOR h=1 TO 3 8295 LET t=INT (RND*2)-1 8300 FOR d=0 TO 10 8305 PRINT AT (10)-5+d,(h*10)-5+t; INK 0; BRIGHT 0;" " 8310 NEXT d 8315 NEXT h 8320 LET w=INT (RND*(rt-1))+1 8325 LET uy=c(w,1)+INT (c(w,3)/2): LET ux=c(w,2)+INT (c(w,4)/2) 8330 LET v=INT (RND*(rt-1))+1 8335 IF v=w THEN GO TO 8330 8340 LET dy=c(v,1)+INT (RND*(c(v,3))): LET dx=c(v,2)+INT (RND*(c(v,4))) 8345 LET pxpos=ux-1: LET pypos=uy 8355 LET lic=INT (RND*(rt/2))+3 8360 DIM l(lic,3) 8365 FOR t=1 TO lic 8370 LET b=0: LET e=0 8375 LET ip=INT (RND*99)+1 8380 IF ip>=1 AND ip<=70 THEN LET b=1: LET e=4 8385 IF ip>=61 AND ip<=75 THEN LET b=5: LET e=10 8390 IF ip>=75 AND ip<=80 THEN LET b=30: LET e=32 8395 IF ip>=81 AND ip<=85 THEN LET b=11: LET e=13 8400 IF ip>=86 AND ip<=90 THEN LET b=14: LET e=21 8405 IF ip>=91 AND ip<=95 THEN LET b=22: LET e=25 8410 IF ip>=96 AND ip<=100 THEN LET b=26: LET e=29 8415 LET ip=INT (RND*(e-b))+b 8420 IF i(ip,4)>pdepth THEN LET t=t-1: NEXT t 8425 LET temproom=INT (RND*rt+1) 8430 LET tempx=c(temproom,2)+INT (RND*c(temproom,4)) 8435 LET tempy=c(temproom,1)+INT (RND*c(temproom,3)) 8440 IF (dy=tempy AND dx=tempx) OR (pxpos=tempx AND pypos=tempy) THEN GO TO 8425 8445 FOR u=1 TO t 8450 IF l(u,2)=tempy AND l(u,3)=tempx THEN GO TO 8425 8454 PRINT AT 21,31; INK 7;z$(INT ((u-1)/3)+1) 8455 NEXT u 8460 LET l(t,1)=ip 8465 LET l(t,2)=tempy 8470 LET l(t,3)=tempx 8475 NEXT t 8490 LET mic=rt-lic 8500 DIM n(mic,8) 8505 FOR t=1 TO mic 8506 LET ip=INT (RND*26)+1 8507 IF m(ip,7)>pdepth THEN LET t=t-1: NEXT t 8510 LET temproom=INT (RND*rt+1) 8515 LET tempx=c(temproom,2)+INT (RND*c(temproom,4)) 8520 LET tempy=c(temproom,1)+INT (RND*c(temproom,3)) 8530 IF pxpos=tempx AND pypos=tempy THEN GO TO 8510 8535 FOR u=1 TO t 8540 IF n(u,2)=tempy AND n(u,3)=tempx THEN GO TO 8510 8545 PRINT AT 21,31; INK 7;z$(INT (u/3)+1) 8550 NEXT u 8560 LET n(t,1)=ip 8561 LET n(t,2)=tempy 8562 LET n(t,3)=tempx 8563 LET n(t,6)=INT (m(ip,5)*1+(pdepth+1)/10) 8564 LET n(t,7)=INT (m(ip,6)*1+(pdepth+1)/10) 8565 LET n(t,4)=INT (m(ip,2)+(pdepth+1)/5) 8566 LET n(t,5)=INT (m(ip,3)+(pdepth+1)/5) 8567 LET n(t,8)=INT (RND*(m(ip,8)+1)) 8569 NEXT t 8976 GO SUB 1000 8980 RETURN 9000 REM items 9001 PRINT AT 10,6; INK 7;"Building Items" 9002 FOR t=1 TO 32 9003 PRINT AT 10,21; INK 7;t;"/32" 9004 FOR u=1 TO 19 9005 PRINT AT 21,31; INK 7;z$(INT (u/3)+1) 9006 READ i(t,u) 9007 DATA 1,1,46,0,0,0,0,0,0,0,0,0,50,0,0,0,0,0,0 9008 DATA 1,2,46,0,0,0,0,0,0,0,0,0,75,0,0,0,0,0,0 9009 DATA 1,4,46,0,0,0,0,0,0,0,0,0,25,0,0,-1,0,0,0 9010 DATA 1,5,46,0,0,0,0,0,0,0,0,0,175,0,0,0,0,0,0 9011 REM potions 9012 DATA 2,6,33,10,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0 9013 DATA 2,2,33,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0 9014 DATA 2,4,33,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0 9015 DATA 2,1,33,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0 9016 DATA 2,5,33,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0 9017 DATA 2,3,33,10,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 9018 REM rings 9019 DATA 3,2,61,10,5,1,0,0,0,0,0,0,0,0,0,0,0,0,0 9020 DATA 3,1,61,15,0,0,5,1,0,0,0,0,0,0,0,0,0,0,0 9021 DATA 3,4,61,5,0,0,0,0,5,2,0,0,0,0,0,0,0,0,0 9022 REM weapons 9023 DATA 4,1,124,0,2,1,0,0,0,0,0,1,0,0,0,0,0,0,0 9024 DATA 4,3,124,10,4,2,0,0,0,0,0,1,0,0,0,0,0,0,0 9025 DATA 4,5,124,20,6,2,0,0,0,0,0,3,0,0,0,0,0,0,0 9026 DATA 4,2,124,30,10,5,0,0,0,0,0,5,0,0,0,0,0,0,0 9027 DATA 4,1,92,0,2,1,0,0,0,0,0,2,0,0,0,0,0,0,0 9028 DATA 4,3,92,10,3,2,0,0,0,0,0,4,0,0,0,0,0,0,0 9029 DATA 4,5,92,20,5,2,0,0,0,0,0,6,0,0,0,0,0,0,0 9030 DATA 4,2,92,30,10,5,0,0,0,0,0,10,0,0,0,0,0,0,0 9031 REM shields 9032 DATA 5,6,41,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0 9033 DATA 5,4,41,10,0,0,3,2,0,0,0,0,0,0,0,0,0,0,0 9034 DATA 5,5,41,15,0,0,5,2,0,0,0,0,0,0,0,0,0,0,0 9035 DATA 5,2,41,30,0,0,10,3,0,0,0,0,0,0,0,0,0,0,0 9036 REM armour 9037 DATA 6,4,93,0,0,0,5,1,0,0,0,0,0,0,0,0,0,0,0 9038 DATA 6,5,93,10,0,0,15,2,0,0,0,0,0,0,0,0,0,0,0 9039 DATA 6,1,93,15,0,0,20,2,0,0,0,0,0,0,0,0,0,0,0 9040 DATA 6,2,93,30,0,0,30,3,0,0,0,0,0,0,0,0,0,0,0 9041 REM lights 9042 DATA 7,2,126,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0 9043 DATA 7,6,126,10,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0 9044 DATA 7,5,126,20,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0 9045 NEXT u 9046 NEXT t 9047 LET i$(1)="Mushroom" 9048 LET i$(2)="Food Ration" 9049 LET i$(3)="Slime Mold" 9050 LET i$(4)="Elvish Waybread" 9051 LET i$(5)="Glowing Potion" 9052 LET i$(6)="Swirling Potion" 9053 LET i$(7)="Cloudy Potion" 9054 LET i$(8)="Steamy Potion" 9055 LET i$(9)="Clear Potion" 9056 LET i$(10)="Chaotic Potion" 9057 LET i$(11)="Ruby Ring" 9058 LET i$(12)="Saphire Ring" 9069 LET i$(13)="Emerald Ring" 9070 LET i$(14)="Dagger" 9071 LET i$(15)="Short Sword" 9072 LET i$(16)="Broad Sword" 9073 LET i$(17)="Holy Avenger" 9074 LET i$(18)="Hatchet" 9075 LET i$(19)="War Axe" 9076 LET i$(20)="Battle Axe" 9077 LET i$(21)="Durin's Axe" 9078 LET i$(22)="Buckler" 9079 LET i$(23)="Leather Shield" 9080 LET i$(24)="Iron Shield" 9081 LET i$(25)="Steel Shield" 9082 LET i$(26)="Leather Armour" 9083 LET i$(27)="Chain Mail" 9084 LET i$(28)="Full Plate" 9085 LET i$(29)="Dragon Scale" 9086 LET i$(30)="Torch" 9087 LET i$(31)="Lantern" 9088 LET i$(32)="Phial" 9100 REM monsters 9101 PRINT AT 10,4; INK 7;"Building Monsters " 9102 FOR t=1 TO 26 9103 PRINT AT 10,22; INK 7;t;"/26" 9104 FOR u=1 TO 10 9105 PRINT AT 21,31; INK 7;z$(INT ((u/2))+1) 9106 READ m(t,u) 9107 REM code,attack,defence,poison,hp,xp,min level,items,agro,colour 9108 DATA 97,1,1,0,5,1,0,1,1,2 9109 DATA 98,1,3,0,3,1,0,0,1,1 9110 DATA 99,1,3,1,3,3,0,1,1,6 9111 DATA 100,10,10,1,5,20,20,4,1,2 9112 DATA 101,1,1,1,5,2,5,1,0,3 9113 DATA 102,5,1,0,3,4,5,1,1,6 9114 DATA 103,1,5,0,3,4,5,1,1,5 9115 DATA 104,1,1,0,3,1,0,1,1,2 9116 DATA 105,2,2,1,5,5,10,1,1,4 9117 DATA 106,3,3,1,5,10,15,2,0,4 9118 DATA 107,2,2,0,3,4,5,2,1,1 9119 DATA 108,1,1,1,5,1,0,0,1,6 9120 DATA 109,1,4,0,3,2,0,0,0,4 9121 DATA 110,6,4,1,3,8,10,1,1,3 9122 DATA 111,4,4,0,3,6,0,1,1,4 9123 DATA 112,2,5,0,2,3,0,1,1,3 9124 DATA 113,5,5,0,4,7,10,0,1,1 9125 DATA 114,2,2,0,5,2,0,0,1,3 9126 DATA 115,5,2,0,2,3,5,1,1,2 9127 DATA 116,2,1,0,4,5,0,2,1,5 9128 DATA 117,7,5,0,4,15,20,2,1,2 9129 DATA 118,2,6,0,3,10,10,0,1,5 9130 DATA 119,5,5,1,5,18,15,2,1,3 9131 DATA 120,6,6,1,6,19,20,2,1,1 9132 DATA 121,2,2,0,3,2,0,1,1,4 9134 DATA 122,4,4,0,4,5,15,1,1,3 9135 NEXT u 9136 NEXT t 9137 LET m$(1)="giant ant" 9138 LET m$(2)="bat" 9139 LET m$(3)="centipede" 9140 LET m$(4)="dragon" 9150 LET m$(5)="evil eye" 9151 LET m$(6)="tiger" 9152 LET m$(7)="ghost" 9153 LET m$(8)="warrior" 9154 LET m$(9)="icky thing" 9155 LET m$(10)="jelly" 9156 LET m$(11)="kobold" 9157 LET m$(12)="louse" 9158 LET m$(13)="mold" 9159 LET m$(14)="naga" 9160 LET m$(15)="orc" 9161 LET m$(16)="priest" 9162 LET m$(17)="bear" 9163 LET m$(18)="rat" 9164 LET m$(19)="skeleton" 9165 LET m$(20)="veteran" 9166 LET m$(21)="demon" 9167 LET m$(22)="vortex" 9168 LET m$(23)="giant worm" 9169 LET m$(24)="xaren" 9170 LET m$(25)="yeek" 9180 LET m$(26)="zombie" 9181 RETURN 9200 CLS 9210 PRINT AT 8,8; INK 7;"You have died!" 9220 PRINT AT 9,9-(LEN (STR$ (pdepth*50))); INK 7;"Hero died at ";pdepth*50;"ft" 9230 PRINT AT 10,10-(LEN (d$)/2); INK 7;"Killed by ";d$ 9240 STOP