Terrain Generation Code for Games
Terrain Generation Code for Games
20MODE13:OFF
30*FX 12,36
40*FX 11,36
50*FX 4,1
60MOUSEON
70ONERRORPROCERR
80PROCSETTINGS
90PROCVDU
100PROCSETUP
110FORXXX=0TO39:FORYYY=0TO31:COLOUR0:COLOUR149:PRINTTAB(XXX,YYY);CHR$(
238);:NEXT:NEXT
120COLOUR0:COLOUR170:PRINTTAB(10,10);"
":PRINTTAB(10,11);" GENERATING WORLD... ":PRINTTAB(10,12);"
"
130FORT=0TO2000000:NEXTT
140COLOUR0:COLOUR170:PRINTTAB(10,15);"
":PRINTTAB(10,16);" BUILDING TERRAIN... ":PRINTTAB(10,17);"
"
150FORT=0TO5000000:NEXTT
160COLOUR128:COLOUR63
170PROCWORLDINF
180PROCGENERATE
190PROCVIEWSHIFT
200IF U%=29587 THEN U%=0:PROCLOADWORLD
210PROCDISPLAY
220*FX 200,0
230REPEAT
240PROCKEYS
250PROCCHECKPOS
260PROCCRAFTINGTABLE
270PROCTELEMETRY
280PROCCHECKTNT
290UNTILFALSE
300DEFPROCERR
310*FX 11,35
320*FX 12,3
330*FX 4,0
340IF ERR=17 THEN PROCMENU ELSE PROCERROR
350ENDPROC
360DEFPROCVDU
370REM PLAYER VDU : LEFTSTAT LEFTP1/3 LEFTP2 RIGHTSTAT RIGHT P1/3
RIGHT P2
380VDU23,224,28,12,60,28,8,28,20,20
390VDU23,225,20,20,28,12,12,12,12,28
400VDU23,226,24,24,28,28,30,30,30,62
410VDU23,227,28,12,60,28,8,28,20,24
420VDU23,228,62,93,28,12,62,99,99,231
430VDU23,229,56,48,60,56,16,56,40,40
440VDU23,230,40,40,56,48,48,48,48,56
450VDU23,231,24,24,56,56,120,120,120,124
460VDU23,232,56,48,60,56,16,56,40,24
470VDU23,233,124,186,56,48,124,198,198,231
480REM CREEPER TOP/BOTTOM
490VDU 23,254,255,153,153,231,129,129,103,255
500VDU 23,255,60,60,60,60,60,60,126,126,66
510REM POINTER
520VDU 23,95,0,0,0,0,0,255,0,0
530REM GRASS BLOCK
540VDU23,234,255,91,168,38,0,0,0,0
550REM OAKWOOD/CACTUS
560VDU23,235,247,191,251,221,127,251,191,246
570REM LEAVES/DIRT
580VDU23,236,181,91,213,106,155,101,171,181
590REM STONE/BEDROCK/SAND
600VDU23,237,212,109,37,220,83,169,203,82
610REM IRON-ORE COAL-ORE GOLD-ORE REDSTONE-ORE DIAMOND-ORE-EMERALD-
ORE
620VDU23,238,2,134,48,44,1,12,96,3
630REM TNT PHASE 1/2
640VDU23,239,255,255,255,0,0,255,255,255
650VDU23,240,255,255,255,255,255,255,255,255
660REM CHEST
670VDU23,241,255,255,195,195,195,195,255,255
680REM DOOR SHUT/OPEN
690VDU 23,242,255,255,255,255,255,255,255,247
700VDU 23,243,3,3,3,3,3,3,3,3
710REM BRICKS
720VDU 23,244,221,0,119,0,221,0,119,0
730REM CHISELED STONE
740VDU 23,245,255,129,129,129,129,129,129,255
750ENDPROC
760DEFPROCSETUP
770DIM
BX%(20000),BY%(20000),BID%(20000),BMC%(20000),BOC%(20000),BVDU%(20000)
780DIM
INVG%(100),INVD%(100),INVS%(100),INVL%(100),INVW%(100),INVI%(100),INVC
%(100),INVGO%(100),INVR%(100),INVDI%(100),INVE%(100),INVTNT%(100),INVC
ACTUS%(100),INVSAND%(100),INVCHEST%(100),INVDOOR%(100),INVCS%(100),INV
BR%(100)
790INVGN%=0:INVDN%=0:INVSN%=0:INVLN%=0:INVWN%=0:INVIN%=0:INVCN%=0:INVG
ON%=0:INVRN%=0:INVDIN%=0:INVEN%=0:INVTNTN%=0:INVCACTUSN%=0:INVSANDN%=0
:INVDOORN%=0:INVCHESTN%=0:INVCSN%=0:INVBRN%=0:INVSELECT$="GRASS":INVCH
ANGE$=""
800GMX%=0:GMY%=0:LAYER%=0:BLOCK%=0
810S%=0:MCOL%=0:OCOL%=0:DIM
BIOME%(4),BIOMEBLOCK%(4),BIOMEBLOCK2%(4),HIGH%(4),LOW%(4)
820DIM SELECT%(20000)
830DIS%=0:DIR%=1:BL%=0:BR%=0:BJ%=0:MBM=0:PBM=0:XA=0:YA=0:ZA=0:XA%=0:YA
%=0:TEL%=0:CRAFT%=0:WALK%=0:JUMP%=0:DIM
CRID%(4),CRXPOS%(4),CRYPOS%(4):CRB%=17000:CR2%=1
840CRXPOS%(1)=32:CRXPOS%(2)=33:CRXPOS%(3)=32:CRXPOS%(4)=33:CRYPOS%(1)=
28:CRYPOS%(2)=28:CRYPOS%(3)=29:CRYPOS%(4)=29:USE%=0:USENUM%=0
850SPREAD%=0:TNTD%=0:TNTX%=0:TNTY%=0:SPREAD2%=0:RR=0:RR2=0:TNTX2%=0:TN
TY2%=0:CHAPP%=0:INVSEL%=1
860ENDPROC
870DEFPROCGENERATE
880REM GENERATE BIOMES
890FORB=1TO4
900R=RND(40)
910IF R<11 THEN BIOME%(B)=1
920IF R>10 AND R<21 THEN BIOME%(B)=2
930IF R>20 AND R<31 THEN BIOME%(B)=3
940IF R>30 THEN BIOME%(B)=4
950IF BIOME%(B)=1 THEN BIOMEBLOCK%(B)=1:BIOMEBLOCK2%(B)=5
960IF BIOME%(B)=2 THEN BIOMEBLOCK%(B)=12:BIOMEBLOCK2%(B)=12
970IF BIOME%(B)=3 THEN BIOMEBLOCK%(B)=1:BIOMEBLOCK2%(B)=5
980IF BIOME%(B)=4 THEN BIOMEBLOCK%(B)=1:BIOMEBLOCK2%(B)=5
990NEXTB
1000REM GENERATE WORLD
1010GMY%=9
1020BI%=1
1030VD%=0
1040ID%=0
1050REM SURFACE BOCKS
1060FORGMX%=0 TO 199
1070IF GMX%<50 THEN BI%=1
1080IF GMX%>49 AND GMX%<100 THEN BI%=2
1090IF GMX%>99 AND GMX%<150 THEN BI%=3
1100IF GMX%>149 THEN BI%=4
1110R=RND(10)
1120IF BIOME%(BI%)=3 THEN GOTO 1160
1130IF R<3 THEN GMY%=GMY%+1
1140IF R>8 THEN GMY%=GMY%-1
1150 GOTO 1180
1160IF R<5 THEN GMY%=GMY%+1
1170IF R>5 THEN GMY%=GMY%-1
1180IF BIOME%(BI%)=1 THEN HIGH%=6:LOW%=12
1190IF BIOME%(BI%)=2 THEN HIGH%=6:LOW%=15
1200IF BIOME%(BI%)=3 THEN HIGH%=0:LOW%=15
1210IF BIOME%(BI%)=4 THEN HIGH%=6:LOW%=15
1220IF GMY%<HIGH% THEN GMY%=HIGH%
1230IF GMY%>LOW% THEN GMY%=LOW%
1240IF BIOME%(BI%)=1 THEN MCOL%=8:OCOL%=129:VD%=234:ID%=1
1250IF BIOME%(BI%)=2 THEN MCOL%=31:OCOL%=170:VD%=237:ID%=12
1260IF BIOME%(BI%)=3 THEN MCOL%=8:OCOL%=129:VD%=234:ID%=1
1270IF BIOME%(BI%)=4 THEN MCOL%=8:OCOL%=129:VD%=234:ID%=1
1280BX%(GMX%)=GMX%-
99:BY%(GMX%)=GMY%:BID%(GMX%)=ID%:BMC%(GMX%)=MCOL%:BOC%(GMX%)=OCOL%:BVD
U%(GMX%)=VD%
1290NEXTGMX%
1300REM 7 LAYERS OF DIRT OR SAND
1310BLOCK%=200
1320FOR LAYER%=1TO7
1330FOR GMX%=0 TO 199
1340IF GMX%<50 THEN BI%=1
1350IF GMX%>49 AND GMX%<100 THEN BI%=2
1360IF GMX%>99 AND GMX%<150 THEN BI%=3
1370IF GMX%>149 THEN BI%=4
1380IF BIOME%(BI%)=1 THEN MCOL%=1:OCOL%=128:VD%=236:ID%=5
1390IF BIOME%(BI%)=2 THEN MCOL%=31:OCOL%=170:VD%=237:ID%=12
1400IF BIOME%(BI%)=3 THEN MCOL%=1:OCOL%=128:VD%=236:ID%=5
1410IF BIOME%(BI%)=4 THEN MCOL%=1:OCOL%=128:VD%=236:ID%=5
1420BX%(GMX%+BLOCK%)=GMX%-
99:BY%(GMX%+BLOCK%)=BY%(GMX%)+LAYER%:BID%(GMX%+BLOCK%)=ID%:BMC%(GMX%+B
LOCK%)=MCOL%:BOC%(GMX%+BLOCK%)=OCOL%:BVDU%(GMX%+BLOCK%)=VD%
1430NEXTGMX%
1440BLOCK%=BLOCK%+200
1450NEXTLAYER%
1460REM 40 LAYERS OF STONE
1470FOR LAYER%=8TO48
1480FOR GMX%=0 TO 199
1490MCOL%=21:OCOL%=149:VD%=237:ID%=4
1500BX%(GMX%+BLOCK%)=GMX%-
99:BY%(GMX%+BLOCK%)=BY%(GMX%)+LAYER%:BID%(GMX%+BLOCK%)=ID%:BMC%(GMX%+B
LOCK%)=MCOL%:BOC%(GMX%+BLOCK%)=OCOL%:BVDU%(GMX%+BLOCK%)=VD%
1510NEXTGMX%
1520BLOCK%=BLOCK%+200
1530NEXTLAYER%
1540REM BEDROCK BOTTOM LAYER
1550FOR LAYER%=49TO50
1560FOR GMX%=0 TO 199
1570MCOL%=0:OCOL%=191:VD%=237:ID%=6
1580BX%(GMX%+BLOCK%)=GMX%-
99:BY%(GMX%+BLOCK%)=BY%(GMX%)+LAYER%:BID%(GMX%+BLOCK%)=ID%:BMC%(GMX%+B
LOCK%)=MCOL%:BOC%(GMX%+BLOCK%)=OCOL%:BVDU%(GMX%+BLOCK%)=VD%
1590NEXTGMX%
1600BLOCK%=BLOCK%+200
1610NEXTLAYER%
1620REM IRON ORE SPAWNING
1630FORIRON%=1 TO I%
1640R=1200+RND(8000)
1650BVDU%(R)=238:BMC%(R)=6:BOC%(R)=149:BID%(R)=7
1660BVDU%(R+1)=238:BMC%(R+1)=6:BOC%(R+1)=149:BID%(R+1)=7
1670BVDU%(R+200)=238:BMC%(R+200)=6:BOC%(R+200)=149:BID%(R+200)=7
1680BVDU%(R+201)=238:BMC%(R+201)=6:BOC%(R+201)=149:BID%(R+201)=7
1690NEXTIRON%
1700REM COAL ORE SPAWNING
1710FORCOAL%=1 TO CO%
1720R=1200+RND(7400)
1730BVDU%(R)=238:BMC%(R)=0:BOC%(R)=149:BID%(R)=9
1740BVDU%(R+1)=238:BMC%(R+1)=0:BOC%(R+1)=149:BID%(R+1)=9
1750BVDU%(R+2)=238:BMC%(R+2)=0:BOC%(R+2)=149:BID%(R+2)=9
1760BVDU%(R+201)=238:BMC%(R+201)=0:BOC%(R+201)=149:BID%(R+201)=9
1770BVDU%(R+202)=238:BMC%(R+202)=0:BOC%(R+202)=149:BID%(R+202)=9
1780BVDU%(R+203)=238:BMC%(R+203)=0:BOC%(R+203)=149:BID%(R+203)=9
1790BVDU%(R+403)=238:BMC%(R+403)=0:BOC%(R+403)=149:BID%(R+403)=9
1800NEXTCOAL%
1810REM GOLD ORE SPAWNING
1820FORGOLD%=1 TO GO%
1830R=4000+RND(4600)
1840BVDU%(R)=238:BMC%(R)=10:BOC%(R)=149:BID%(R)=15
1850BVDU%(R+200)=238:BMC%(R+200)=10:BOC%(R+200)=149:BID%(R+200)=15
1860BVDU%(R+201)=238:BMC%(R+201)=10:BOC%(R+201)=149:BID%(R+201)=15
1870NEXTGOLD%
1880REM DIAMOND ORE SPAWNING
1890FORDIAMOND%=1 TO DIA%
1900R=6000+RND(2600)
1910BVDU%(R)=238:BMC%(R)=40:BOC%(R)=149:BID%(R)=8
1920BVDU%(R+1)=238:BMC%(R+1)=40:BOC%(R+1)=149:BID%(R+1)=8
1930BVDU%(R+200)=238:BMC%(R+200)=40:BOC%(R+200)=149:BID%(R+200)=8
1940BVDU%(R+201)=238:BMC%(R+201)=40:BOC%(R+201)=149:BID%(R+201)=8
1950NEXTDIAMOND%
1960REM REDSTONE ORE SPAWNING
1970FORREDSTONE%=1 TO RE%
1980R=5000+RND(3600)
1990BVDU%(R)=238:BMC%(R)=3:BOC%(R)=149:BID%(R)=10
2000BVDU%(R+1)=238:BMC%(R+1)=3:BOC%(R+1)=149:BID%(R+1)=10
2010BVDU%(R+2)=238:BMC%(R+2)=3:BOC%(R+2)=149:BID%(R+2)=10
2020NEXTREDSTONE%
2030REM EMERALD ORE SPAWNING
2040FOREMERALD%=1 TO EME%
2050R=5000+RND(3600)
2060BVDU%(R)=238:BMC%(R)=8:BOC%(R)=149:BID%(R)=14
2070BVDU%(R+1)=238:BMC%(R+1)=8:BOC%(R+1)=149:BID%(R+1)=14
2080NEXTEMERALD%
2090REM TREES
2100IF TREES=0 THEN GOTO 2150
2110FOR T=1 TO 20
2120R=-95+RND(190)
2130PROCTREE(R)
2140NEXTT
2150REM PLAYER
2160XX=-95+RND(195)
2170X%=XX+1
2180Y%=BY%(XX+100)-1
2190ENDPROC
2200DEFPROCTREE(R)
2210BX%(BLOCK%)=R+1:BY%(BLOCK%)=BY%(R+100)-
1:BID%(BLOCK%)=2:BMC%(BLOCK%)=1:BOC%(BLOCK%)=128:BVDU%(BLOCK%)=235
2220BX%(BLOCK%+1)=BX%(BLOCK%):BY%(BLOCK%+1)=BY%(BLOCK%)-
1:BID%(BLOCK%+1)=2:BMC%(BLOCK%+1)=1:BOC%(BLOCK%+1)=128:BVDU%(BLOCK%+1)
=235
2230BX%(BLOCK%+2)=BX%(BLOCK%):BY%(BLOCK%+2)=BY%(BLOCK%)-
2:BID%(BLOCK%+2)=2:BMC%(BLOCK%+2)=1:BOC%(BLOCK%+2)=128:BVDU%(BLOCK%+2)
=235
2240BX%(BLOCK%+3)=BX%(BLOCK%):BY%(BLOCK%+3)=BY%(BLOCK%)-
3:BID%(BLOCK%+3)=2:BMC%(BLOCK%+3)=1:BOC%(BLOCK%+3)=128:BVDU%(BLOCK%+3)
=235
2250BX%(BLOCK%+4)=BX%(BLOCK%):BY%(BLOCK%+4)=BY%(BLOCK%)-
4:BID%(BLOCK%+4)=2:BMC%(BLOCK%+4)=1:BOC%(BLOCK%+4)=128:BVDU%(BLOCK%+4)
=235
2260BX%(BLOCK%+5)=BX%(BLOCK%):BY%(BLOCK%+5)=BY%(BLOCK%)-
5:BID%(BLOCK%+5)=3:BMC%(BLOCK%+5)=8:BOC%(BLOCK%+5)=128:BVDU%(BLOCK%+5)
=236
2270BX%(BLOCK%+6)=BX%(BLOCK%):BY%(BLOCK%+6)=BY%(BLOCK%)-
6:BID%(BLOCK%+6)=3:BMC%(BLOCK%+6)=8:BOC%(BLOCK%+6)=128:BVDU%(BLOCK%+6)
=236
2280BX%(BLOCK%+7)=BX%(BLOCK%)-2:BY%(BLOCK%+7)=BY%(BLOCK%)-
3:BID%(BLOCK%+7)=3:BMC%(BLOCK%+7)=8:BOC%(BLOCK%+7)=128:BVDU%(BLOCK%+7)
=236
2290BX%(BLOCK%+8)=BX%(BLOCK%)-2:BY%(BLOCK%+8)=BY%(BLOCK%)-
4:BID%(BLOCK%+8)=3:BMC%(BLOCK%+8)=8:BOC%(BLOCK%+8)=128:BVDU%(BLOCK%+8)
=236
2300BX%(BLOCK%+9)=BX%(BLOCK%)-1:BY%(BLOCK%+9)=BY%(BLOCK%)-
2:BID%(BLOCK%+9)=3:BMC%(BLOCK%+9)=8:BOC%(BLOCK%+9)=128:BVDU%(BLOCK%+9)
=236
2310BX%(BLOCK%+10)=BX%(BLOCK%)-1:BY%(BLOCK%+10)=BY%(BLOCK%)-
3:BID%(BLOCK%+10)=3:BMC%(BLOCK%+10)=8:BOC%(BLOCK%+10)=128:BVDU%(BLOCK%
+10)=236
2320BX%(BLOCK%+11)=BX%(BLOCK%)-1:BY%(BLOCK%+11)=BY%(BLOCK%)-
4:BID%(BLOCK%+11)=3:BMC%(BLOCK%+11)=8:BOC%(BLOCK%+11)=128:BVDU%(BLOCK%
+11)=236
2330BX%(BLOCK%+12)=BX%(BLOCK%)-1:BY%(BLOCK%+12)=BY%(BLOCK%)-
5:BID%(BLOCK%+12)=3:BMC%(BLOCK%+12)=8:BOC%(BLOCK%+12)=128:BVDU%(BLOCK%
+12)=236
2340BX%(BLOCK%+13)=BX%(BLOCK%)+1:BY%(BLOCK%+13)=BY%(BLOCK%)-
2:BID%(BLOCK%+13)=3:BMC%(BLOCK%+13)=8:BOC%(BLOCK%+13)=128:BVDU%(BLOCK%
+13)=236
2350BX%(BLOCK%+14)=BX%(BLOCK%)+1:BY%(BLOCK%+14)=BY%(BLOCK%)-
3:BID%(BLOCK%+14)=3:BMC%(BLOCK%+14)=8:BOC%(BLOCK%+14)=128:BVDU%(BLOCK%
+14)=236
2360BX%(BLOCK%+15)=BX%(BLOCK%)+1:BY%(BLOCK%+15)=BY%(BLOCK%)-
4:BID%(BLOCK%+15)=3:BMC%(BLOCK%+15)=8:BOC%(BLOCK%+15)=128:BVDU%(BLOCK%
+15)=236
2370BX%(BLOCK%+16)=BX%(BLOCK%)+1:BY%(BLOCK%+16)=BY%(BLOCK%)-
5:BID%(BLOCK%+16)=3:BMC%(BLOCK%+16)=8:BOC%(BLOCK%+16)=128:BVDU%(BLOCK%
+16)=236
2380BX%(BLOCK%+17)=BX%(BLOCK%)+2:BY%(BLOCK%+17)=BY%(BLOCK%)-
2:BID%(BLOCK%+17)=3:BMC%(BLOCK%+17)=8:BOC%(BLOCK%+17)=128:BVDU%(BLOCK%
+17)=236
2390BX%(BLOCK%+18)=BX%(BLOCK%)+2:BY%(BLOCK%+18)=BY%(BLOCK%)-
3:BID%(BLOCK%+18)=3:BMC%(BLOCK%+18)=8:BOC%(BLOCK%+18)=128:BVDU%(BLOCK%
+18)=236
2400BLOCK%=BLOCK%+20
2410ENDPROC
2420DEFPROCVIEWSHIFT
2430IFX%>20 THEN PROCSHIFTL
2440IFX%<20 THEN PROCSHIFTR
2450IFY%>12 THEN PROCSHIFTD
2460IFY%<12 THEN PROCSHIFTU
2470ENDPROC
2480DEFPROCSHIFTL
2490S=X%-20
2500X%=X%-S
2510FOR B=0 TO 12000
2520BX%(B)=BX%(B)-S
2530NEXT
2540ENDPROC
2550DEFPROCSHIFTR
2560S=20-X%
2570X%=X%+S
2580FOR B=0 TO 12000
2590BX%(B)=BX%(B)+S
2600NEXT
2610ENDPROC
2620DEFPROCSHIFTD
2630S2=Y%-12
2640Y%=Y%-S2
2650FOR B=0 TO 12000
2660BY%(B)=BY%(B)-S2
2670NEXT
2680ENDPROC
2690DEFPROCSHIFTU
2700S2=12-Y%
2710Y%=Y%+S2
2720FOR B=0 TO 12000
2730BY%(B)=BY%(B)+S2
2740NEXT
2750ENDPROC
2760DEFPROCRENDERSELECT
2770DIS%=0
2780FOR B%=0 TO 20000
2790IF BX%(B%)<0 OR BX%(B%)>39 OR BY%(B%)>18 OR BY%(B%)<1 THEN GOTO
2820
2800SELECT%(DIS%)=B%
2810DIS%=DIS%+1
2820NEXTB%
2830ENDPROC
2840DEFPROCDISPLAY
2850PROCRENDERSELECT
2860COLOUR 128
2870CLS
2880FOR B%=0 TO DIS%-1
2890IFBID%(SELECT%(B%))=0 OR BID%(SELECT%(B%))=-1 THEN GOTO 2930
2900COLOUR BMC%(SELECT%(B%))
2910COLOUR BOC%(SELECT%(B%))
2920PRINTTAB(BX%(SELECT%(B%)),BY%(SELECT%(B%)));CHR$(BVDU%(SELECT%(B%)
))
2930NEXT
2940FOR B%=0 TO DIS%-1
2950IFBID%(SELECT%(B%))=0 OR BID%(SELECT%(B%))=-1 THEN GOTO 2990
2960COLOUR BMC%(SELECT%(B%))
2970COLOUR BOC%(SELECT%(B%))
2980IF BID%(SELECT%(B%))=16 THEN
PRINTTAB(BX%(SELECT%(B%)),BY%(SELECT%(B%)));CHR$(BVDU%(SELECT%(B%)))
2990NEXT
3000GCOL 0,42
3010RECTANGLE 0,412,1278,584
3020COLOUR128
3030IF WALK%=1 THEN GOTO 3090
3040IF DIR%=1 THEN GOTO 3050 ELSE GOTO 3070
3050COLOUR22:PRINTTAB(20,11);CHR$(224):COLOUR
21:PRINTTAB(20,12);CHR$(225)
3060 GOTO 3080
3070COLOUR22:PRINTTAB(20,11);CHR$(229):COLOUR
21:PRINTTAB(20,12);CHR$(230)
3080COLOUR 128:COLOUR0
3090PROCDATA
3100ENDPROC
3110DEFPROCDATA
3120COLOUR8:COLOUR129:PRINTTAB(3,21);CHR$(234)
3130COLOUR1:COLOUR128:PRINTTAB(6,21);CHR$(235)
3140COLOUR8:COLOUR128:PRINTTAB(9,21);CHR$(236)
3150COLOUR21:COLOUR149:PRINTTAB(12,21);CHR$(237)
3160COLOUR1:COLOUR128:PRINTTAB(15,21);CHR$(236)
3170COLOUR6:COLOUR149:PRINTTAB(18,21);CHR$(238)
3180COLOUR40:COLOUR149:PRINTTAB(21,21);CHR$(238)
3190COLOUR0:COLOUR149:PRINTTAB(24,21);CHR$(238)
3200COLOUR3:COLOUR149:PRINTTAB(27,21);CHR$(238)
3210COLOUR10:COLOUR149:PRINTTAB(30,21);CHR$(238)
3220COLOUR31:COLOUR170:PRINTTAB(33,21);CHR$(237)
3230COLOUR8:COLOUR128:PRINTTAB(36,21);CHR$(235)
3240COLOUR2:COLOUR170:PRINTTAB(3,24);CHR$(239)
3250COLOUR8:COLOUR149:PRINTTAB(6,24);CHR$(238)
3260COLOUR1:COLOUR128:PRINTTAB(9,24);CHR$(241)
3270COLOUR1:COLOUR128:PRINTTAB(12,24);CHR$(242)
3280COLOUR21:COLOUR149:PRINTTAB(15,24);CHR$(245)
3290COLOUR2:COLOUR170:PRINTTAB(18,24);CHR$(244)
3300COLOUR128:COLOUR63
3310PRINTTAB(3,22);INVGN%;" "
3320PRINTTAB(6,22);INVWN%;" "
3330PRINTTAB(9,22);INVLN%;" "
3340PRINTTAB(12,22);INVSN%;" "
3350PRINTTAB(15,22);INVDN%;" "
3360PRINTTAB(18,22);INVIN%;" "
3370PRINTTAB(21,22);INVDIN%;" "
3380PRINTTAB(24,22);INVCN%;" "
3390PRINTTAB(27,22);INVRN%;" "
3400PRINTTAB(30,22);INVGON%;" "
3410PRINTTAB(33,22);INVSANDN%;" "
3420PRINTTAB(36,22);INVCACTUSN%;" "
3430PRINTTAB(3,25);INVTNTN%;" "
3440PRINTTAB(6,25);INVEN%;" "
3450PRINTTAB(9,25);INVCHESTN%;" "
3460PRINTTAB(12,25);INVDOORN%;" "
3470PRINTTAB(15,25);INVCSN%;" "
3480PRINTTAB(18,25);INVBRN%;" "
3490IF INVSELECT$="GRASS" THEN PRINTTAB(3,20);CHR$(95)
3500IF INVSELECT$="WOOD" THEN PRINTTAB(6,20);CHR$(95)
3510IF INVSELECT$="LEAVES" THEN PRINTTAB(9,20);CHR$(95)
3520IF INVSELECT$="STONE" THEN PRINTTAB(12,20);CHR$(95)
3530IF INVSELECT$="DIRT" THEN PRINTTAB(15,20);CHR$(95)
3540IF INVSELECT$="IRON" THEN PRINTTAB(18,20);CHR$(95)
3550IF INVSELECT$="DIAMOND" THEN PRINTTAB(21,20);CHR$(95)
3560IF INVSELECT$="COAL" THEN PRINTTAB(24,20);CHR$(95)
3570IF INVSELECT$="REDSTONE" THEN PRINTTAB(27,20);CHR$(95)
3580IF INVSELECT$="GOLD" THEN PRINTTAB(30,20);CHR$(95)
3590IF INVSELECT$="SAND" THEN PRINTTAB(33,20);CHR$(95)
3600IF INVSELECT$="CACTUS" THEN PRINTTAB(36,20);CHR$(95)
3610IF INVSELECT$="TNT" THEN PRINTTAB(3,23);CHR$(95)
3620IF INVSELECT$="EMERALD" THEN PRINTTAB(6,23);CHR$(95)
3630IF INVSELECT$="CHEST" THEN PRINTTAB(9,23);CHR$(95)
3640IF INVSELECT$="DOOR" THEN PRINTTAB(12,23);CHR$(95)
3650IF INVSELECT$="CHISELED STONE" THEN PRINTTAB(15,23);CHR$(95)
3660IF INVSELECT$="BRICKS" THEN PRINTTAB(18,23);CHR$(95)
3670PRINTTAB(16,31);INVSELECT$;" ";
3680ENDPROC
3690DEFPROCKEYS
3700KEY$=INKEY$(0)
3710INVCHANGE$=INVSELECT$
3720IF KEY$="2" THEN PROCSCREENSAVE
3730IF KEY$="-" AND INVSELECT$="GRASS" THEN INVGN%=0:PROCDISPLAY
3740IF KEY$="-" AND INVSELECT$="WOOD" THEN INVWN%=0:PROCDISPLAY
3750IF KEY$="-" AND INVSELECT$="LEAVES" THEN INVLN%=0:PROCDISPLAY
3760IF KEY$="-" AND INVSELECT$="STONE" THEN INVSN%=0:PROCDISPLAY
3770IF KEY$="-" AND INVSELECT$="DIRT" THEN INVDN%=0:PROCDISPLAY
3780IF KEY$="-" AND INVSELECT$="IRON" THEN INVIN%=0:PROCDISPLAY
3790IF KEY$="-" AND INVSELECT$="DIAMOND" THEN INVDIN%=0:PROCDISPLAY
3800IF KEY$="-" AND INVSELECT$="COAL" THEN INVCN%=0:PROCDISPLAY
3810IF KEY$="-" AND INVSELECT$="REDSTONE" THEN INVRN%=0:PROCDISPLAY
3820IF KEY$="-" AND INVSELECT$="TNT" THEN INVTNTN%=0:PROCDISPLAY
3830IF KEY$="-" AND INVSELECT$="SAND" THEN INVSANDN%=0:PROCDISPLAY
3840IF KEY$="-" AND INVSELECT$="CACTUS" THEN
INVCACTUSN%=0:PROCDISPLAY
3850IF KEY$="-" AND INVSELECT$="EMERALD" THEN INVEN%=0:PROCDISPLAY
3860IF KEY$="-" AND INVSELECT$="GOLD" THEN INVGON%=0:PROCDISPLAY
3870IF KEY$="-" AND INVSELECT$="DOOR" THEN INVDOORN%=0:PROCDISPLAY
3880IF KEY$="-" AND INVSELECT$="CHEST" THEN INVCHESTN%=0:PROCDISPLAY
3890IF KEY$="/" THEN PROCCOMMAND
3900IF KEY$="Q" THEN INVSEL%=INVSEL%-1
3910IF KEY$="E" THEN INVSEL%=INVSEL%+1
3920IF KEY$="S" AND INVSEL%<8 THEN INVSEL%=INVSEL%+12
3930IF KEY$="W" AND INVSEL%>12 THEN INVSEL%=INVSEL%-12
3940IF INVSEL%<1 THEN INVSEL%=1
3950IF INVSEL%>18 THEN INVSEL%=18
3960IF INVSEL%=1 THEN INVSELECT$="GRASS"
3970IF INVSEL%=2 THEN INVSELECT$="WOOD"
3980IF INVSEL%=3 THEN INVSELECT$="LEAVES"
3990IF INVSEL%=4 THEN INVSELECT$="STONE"
4000IF INVSEL%=5 THEN INVSELECT$="DIRT"
4010IF INVSEL%=6 THEN INVSELECT$="IRON"
4020IF INVSEL%=7 THEN INVSELECT$="DIAMOND"
4030IF INVSEL%=8 THEN INVSELECT$="COAL"
4040IF INVSEL%=9 THEN INVSELECT$="REDSTONE"
4050IF INVSEL%=10 THEN INVSELECT$="GOLD"
4060IF INVSEL%=11 THEN INVSELECT$="SAND"
4070IF INVSEL%=12 THEN INVSELECT$="CACTUS"
4080IF INVSEL%=13 THEN INVSELECT$="TNT"
4090IF INVSEL%=14 THEN INVSELECT$="EMERALD"
4100IF INVSEL%=15 THEN INVSELECT$="CHEST"
4110IF INVSEL%=16 THEN INVSELECT$="DOOR"
4120IF INVSEL%=17 THEN INVSELECT$="CHISELED STONE"
4130IF INVSEL%=18 THEN INVSELECT$="BRICKS"
4140IF INVSELECT$<>INVCHANGE$ THEN PROCDISPLAY
4150PROCCHECKPOS
4160IF BR%<>0 AND BL%<>0 AND BJ%<>0 THEN GOTO 4250
4170IF BR%<>0 AND BL%<>0 THEN GOTO 4230
4180IF BR%<>0 THEN GOTO 4200
4190IF KEY$="D" THEN PROCMOVEPLAYERRIGHT
4200IF BL%<>0 AND BJ%<>0 THEN GOTO 4250
4210IF BL%<>0 THEN GOTO 4230
4220IF KEY$="A" THEN PROCMOVEPLAYERLEFT
4230IF BJ%<>0 OR JUMP%=1 THEN GOTO 4250
4240IF KEY$=" " THEN PROCJUMP
4250MOUSE XA,YA,ZA
4260XA%=XA/32
4270YA%=32-((YA+4)/32)
4280IF XA%<16 OR XA%>24 OR YA%>15 OR YA%<8 THEN ENDPROC
4290IF ZA=2 THEN PROCUSEITEM
4300IF ZA=4 THEN PROCMINE
4310IF PBM<>0 THEN GOTO 4330
4320IF ZA=1 THEN PROCPLACE
4330ENDPROC
4340DEFPROCCHECKPOS
4350BL%=0:BR%=0:BJ%=0:MBM=0:PBM=0
4360IF POINT(624,654)<>0 THEN BL%=1
4370IF POINT(624,628)<>0 THEN BL%=2
4380IF POINT(658,684)<>0 THEN BJ%=1
4390IF JUMP%<>0 THEN GOTO 4410
4400IF POINT(658,588)=0 THEN PROCFALL
4410IF POINT(688,654)<>0 THEN BR%=1
4420IF POINT(688,628)<>0 THEN BR%=2
4430ENDPROC
4440DEFPROCCRAFTINGTABLE
4450IF KEY$="C" AND CRAFT%=0 THEN CRAFT%=1:KEY$=""
4460IF KEY$="C" AND CRAFT%=1 THEN CRAFT%=0:KEY$="":PROCDISPLAY
4470IF CRAFT%=1 THEN PROCCRAFT
4480ENDPROC
4490DEFPROCTELEMETRY
4500IF TEL%=0 AND KEY$="1" THEN TEL%=1:KEY$=""
4510IF TEL%=1 AND KEY$="1" THEN TEL%=0:KEY$="":PROCDISPLAY
4520IF TEL%=0 THEN ENDPROC
4530PRINTTAB(0,30);"X,Y: ";XA;",";YA;" SX,SY: "XA%;",";YA%;" "
4540PRINTTAB(0,31);"PX,PY: ";X%;",";Y%;" ";
4550ENDPROC
4560DEFPROCMOVEPLAYERRIGHT
4570WALK%=1
4580DIR%=2
4590COLOUR22:PRINTTAB(20,11);CHR$(229):COLOUR21:PRINTTAB(20,12);CHR$(2
31)
4600T=TIME+3
4610REM JUMP HERE
4620IF TIME>T THEN GOTO 4630 ELSE GOTO 4610
4630COLOUR22:PRINTTAB(20,11);CHR$(232):COLOUR21:PRINTTAB(20,12);CHR$(2
33)
4640FOR B%=0 TO 20000
4650BX%(B%)=BX%(B%)-1
4660NEXTB%
4670TNTX%=TNTX%-1
4680PROCDISPLAY
4690T=TIME+3
4700REM JUMP HERE
4710IF TIME>T THEN GOTO 4720 ELSE GOTO 4700
4720COLOUR22:PRINTTAB(20,11);CHR$(229):COLOUR21:PRINTTAB(20,12);CHR$(2
31)
4730T=TIME+5
4740REM JUMP HERE
4750IF TIME>T THEN GOTO 4760 ELSE GOTO 4740
4760COLOUR22:PRINTTAB(20,11);CHR$(229):COLOUR21:PRINTTAB(20,12);CHR$(2
30)
4770X%=X%+1
4780WALK%=0
4790ENDPROC
4800DEFPROCMOVEPLAYERLEFT
4810WALK%=1
4820DIR%=1
4830COLOUR22:PRINTTAB(20,11);CHR$(224):COLOUR21:PRINTTAB(20,12);CHR$(2
26)
4840T=TIME+3
4850REM JUMP HERE
4860IF TIME>T THEN GOTO 4870 ELSE GOTO 4850
4870COLOUR22:PRINTTAB(20,11);CHR$(227):COLOUR21:PRINTTAB(20,12);CHR$(2
28)
4880FOR B%=0 TO 20000
4890BX%(B%)=BX%(B%)+1
4900NEXTB%
4910TNTX%=TNTX%+1
4920PROCDISPLAY
4930T=TIME+3
4940REM JUMP HERE
4950IF TIME>T THEN GOTO 4960 ELSE GOTO 4940
4960COLOUR22:PRINTTAB(20,11);CHR$(224):COLOUR21:PRINTTAB(20,12);CHR$(2
26)
4970T=TIME+5
4980REM JUMP HERE
4990IF TIME>T THEN GOTO 5000 ELSE GOTO 4980
5000COLOUR22:PRINTTAB(20,11);CHR$(224):COLOUR21:PRINTTAB(20,12);CHR$(2
25)
5010X%=X%-1
5020WALK%=0
5030ENDPROC
5040DEFPROCFALL
5050FORB%=0 TO 20000
5060BY%(B%)=BY%(B%)-1
5070NEXTB%
5080TNTY%=TNTY%-1
5090Y%=Y%-1
5100PROCDISPLAY
5110JUMP%=0
5120ENDPROC
5130DEFPROCJUMP
5140JUMP%=1
5150FOR B%=0 TO 20000
5160BY%(B%)=BY%(B%)+1
5170NEXTB%
5180TNTY%=TNTY%+1
5190Y%=Y%+1
5200PROCDISPLAY
5210PROCJUMPKEY
5220FORT=0TO300000:NEXTT
5230IF POINT(658,588)=0 THEN PROCFALL ELSE JUMP%=0:GOTO 5240
5240JUMP%=0
5250ENDPROC
5260DEFPROCJUMPKEY
5270KEY2$=INKEY$(50)
5280PROCCHECKPOS
5290IF BR%<>0 AND BL%<>0 THEN GOTO 5340
5300IF BR%<>0 THEN GOTO 5320
5310IF KEY2$="D" THEN PROCMOVEPLAYERRIGHT
5320IF BL%<>0 THEN GOTO 5340
5330IF KEY2$="A" THEN PROCMOVEPLAYERLEFT
5340MOUSE XA,YA,ZA
5350XA%=XA/32
5360YA%=32-((YA+4)/32)
5370IF XA%<16 OR XA%>24 OR YA%>15 OR YA%<8 THEN ENDPROC
5380IF ZA=2 THEN PROCUSEITEM
5390IF MBM<>0 THEN GOTO 5410
5400IF ZA=4 THEN PROCMINE
5410IF PBM<>0 THEN GOTO 5430
5420IF ZA=1 THEN PROCPLACE
5430ENDPROC
5440DEFPROCMINE
5450FOR T=0 TO 50000:NEXTT
5460FORB%=0 TO DIS%-1
5470IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=1 AND INVGN%<96 THEN
BID%(SELECT%(B%))=0:INVG%(INVGN%)=SELECT%(B%):INVGN%=INVGN%+1
5480IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=2 AND INVWN%<96 THEN
BID%(SELECT%(B%))=0:INVW%(INVWN%)=SELECT%(B%):INVWN%=INVWN%+1
5490IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=3 AND INVLN%<96 THEN
BID%(SELECT%(B%))=0:INVL%(INVLN%)=SELECT%(B%):INVLN%=INVLN%+1
5500IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=4 AND INVSN%<96 THEN
BID%(SELECT%(B%))=0:INVS%(INVSN%)=SELECT%(B%):INVSN%=INVSN%+1
5510IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=5 AND INVDN%<96 THEN
BID%(SELECT%(B%))=0:INVD%(INVDN%)=SELECT%(B%):INVDN%=INVDN%+1
5520IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=15 AND INVGON%<96 THEN
BID%(SELECT%(B%))=0:INVGO%(INVGON%)=SELECT%(B%):INVGON%=INVGON%+1
5530IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=7 AND INVIN%<96 THEN
BID%(SELECT%(B%))=0:INVI%(INVIN%)=SELECT%(B%):INVIN%=INVIN%+1
5540IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=8 AND INVDIN%<96 THEN
BID%(SELECT%(B%))=0:INVDI%(INVDIN%)=SELECT%(B%):INVDIN%=INVDIN%+1
5550IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=9 AND INVCN%<96 THEN
BID%(SELECT%(B%))=0:INVC%(INVCN%)=SELECT%(B%):INVCN%=INVCN%+1
5560IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=10 AND INVRN%<96 THEN
BID%(SELECT%(B%))=0:INVR%(INVRN%)=SELECT%(B%):INVRN%=INVRN%+1
5570IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=12 AND INVSANDN%<96 THEN
BID%(SELECT%(B%))=0:INVSAND%(INVSANDN%)=SELECT%(B%):INVSANDN%=INVSANDN
%+1
5580IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=13 AND INVCACTUSN%<96 THEN
BID%(SELECT%(B%))=0:INVCACTUS%(INVCACTUSN%)=SELECT%(B%):INVCACTUSN%=IN
VCACTUSN%+1
5590IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=14 AND INVEN%<96 THEN
BID%(SELECT%(B%))=0:INVE%(INVEN%)=SELECT%(B%):INVEN%=INVEN%+1
5600IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=16 AND INVCHESTN%<96 THEN
BID%(SELECT%(B%))=0:INVCHEST%(INVCHESTN%)=SELECT%(B%):INVCHESTN%=INVCH
ESTN%+1
5610IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=11 AND INVTNTN%<96 THEN
BID%(SELECT%(B%))=0:INVTNT%(INVTNTN%)=SELECT%(B%):INVTNTN%=INVTNTN%+1
5620IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=17 AND INVDOORN%<96 THEN
BID%(SELECT%(B%))=0:INVDOOR%(INVDOORN%)=SELECT%(B%):INVDOORN%=INVDOORN
%+1
5630IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=18 AND INVCSN%<96 THEN
BID%(SELECT%(B%))=0:INVCS%(INVCSN%)=SELECT%(B%):INVCSN%=INVCSN%+1
5640IF BX%(SELECT%(B%))=XA% AND BY%(SELECT%(B%))=YA% AND
BID%(SELECT%(B%))=19 AND INVBRN%<96 THEN
BID%(SELECT%(B%))=0:INVBR%(INVBRN%)=SELECT%(B%):INVBRN%=INVBRN%+1
5650NEXTB%
5660FOR T=0 TO 50000:NEXTT
5670PROCDISPLAY
5680FOR T=0 TO 100000:NEXTT
5690ENDPROC
5700DEFPROCTC
5710FOR B2=0 TO DIS%-1
5720IF BX%(SELECT%(B2))=XA% AND BY%(SELECT%(B2))=YA% THEN BP1%=0
5730NEXTB2
5740ENDPROC
5750DEFPROCPLACE
5760BP1%=0:BP2%=0
5770FORB=0TODIS%-1
5780IF BX%(SELECT%(B))=XA% AND BY%(SELECT%(B))=YA% AND
BID%(SELECT%(B))<>16 AND BID%(SELECT%(B))<>0 THEN BP1%=1
5790IF BID%(SELECT%(B))=16 AND BX%(SELECT%(B))=XA% AND
BY%(SELECT%(B))=YA% THEN BP2%=1
5800NEXT
5810IF BP2%=1 THEN PROCTC
5820IF BP1%=1 THEN ENDPROC
5830FOR T=0 TO 100000:NEXTT
5840IF INVSELECT$="GRASS" AND INVGN%>0 THEN BX%(INVG%(INVGN%-
1))=XA%:BY%(INVG%(INVGN%-1))=YA%:BID%(INVG%(INVGN%-
1))=1:INVGN%=INVGN%-1
5850IF INVSELECT$="WOOD" AND INVWN%>0 THEN BX%(INVW%(INVWN%-
1))=XA%:BY%(INVW%(INVWN%-1))=YA%:BID%(INVW%(INVWN%-
1))=2:INVWN%=INVWN%-1
5860IF INVSELECT$="LEAVES" AND INVLN%>0 THEN BX%(INVL%(INVLN%-
1))=XA%:BY%(INVL%(INVLN%-1))=YA%:BID%(INVL%(INVLN%-
1))=3:INVLN%=INVLN%-1
5870IF INVSELECT$="STONE" AND INVSN%>0 THEN BX%(INVS%(INVSN%-
1))=XA%:BY%(INVS%(INVSN%-1))=YA%:BID%(INVS%(INVSN%-
1))=4:INVSN%=INVSN%-1
5880IF INVSELECT$="DIRT" AND INVDN%>0 THEN BX%(INVD%(INVDN%-
1))=XA%:BY%(INVD%(INVDN%-1))=YA%:BID%(INVD%(INVDN%-
1))=5:INVDN%=INVDN%-1
5890IF INVSELECT$="IRON" AND INVIN%>0 THEN BX%(INVI%(INVIN%-
1))=XA%:BY%(INVI%(INVIN%-1))=YA%:BID%(INVI%(INVIN%-
1))=7:INVIN%=INVIN%-1
5900IF INVSELECT$="DIAMOND" AND INVDIN%>0 THEN BX%(INVDI%(INVDIN%-
1))=XA%:BY%(INVDI%(INVDIN%-1))=YA%:BID%(INVDI%(INVDIN%-
1))=8:INVDIN%=INVDIN%-1
5910IF INVSELECT$="COAL" AND INVCN%>0 THEN BX%(INVC%(INVCN%-
1))=XA%:BY%(INVC%(INVCN%-1))=YA%:BID%(INVC%(INVCN%-
1))=9:INVCN%=INVCN%-1
5920IF INVSELECT$="REDSTONE" AND INVRN%>0 THEN BX%(INVR%(INVRN%-
1))=XA%:BY%(INVR%(INVRN%-1))=YA%:BID%(INVR%(INVRN%-
1))=10:INVRN%=INVRN%-1
5930IF INVSELECT$="TNT" AND INVTNTN%>0 THEN BX%(INVTNT%(INVTNTN%-
1))=XA%:BY%(INVTNT%(INVTNTN%-1))=YA%:BID%(INVTNT%(INVTNTN%-
1))=11:INVTNTN%=INVTNTN%-1
5940IF INVSELECT$="SAND" AND INVSANDN%>0 THEN BX%(INVSAND%(INVSANDN%-
1))=XA%:BY%(INVSAND%(INVSANDN%-1))=YA%:BID%(INVSAND%(INVSANDN%-
1))=12:INVSANDN%=INVSANDN%-1
5950IF INVSELECT$="CACTUS" AND INVCACTUSN%>0 THEN
BX%(INVCACTUS%(INVCACTUSN%-1))=XA%:BY%(INVCACTUS%(INVCACTUSN%-
1))=YA%:BID%(INVCACTUS%(INVCACTUSN%-1))=13:INVCACTUSN%=INVCACTUSN%-1
5960IF INVSELECT$="EMERALD" AND INVEN%>0 THEN BX%(INVE%(INVEN%-
1))=XA%:BY%(INVE%(INVEN%-1))=YA%:BID%(INVE%(INVEN%-
1))=14:INVEN%=INVEN%-1
5970IF INVSELECT$="GOLD" AND INVGON%>0 THEN BX%(INVGO%(INVGON%-
1))=XA%:BY%(INVGO%(INVGON%-1))=YA%:BID%(INVGO%(INVGON%-
1))=15:INVGON%=INVGON%-1
5980IF INVSELECT$="CHEST" AND INVCHESTN%>0 THEN
BX%(INVCHEST%(INVCHESTN%-1))=XA%:BY%(INVCHEST%(INVCHESTN%-
1))=YA%:BID%(INVCHEST%(INVCHESTN%-1))=16:INVCHESTN%=INVCHESTN%-1
5990IF INVSELECT$="DOOR" AND INVDOORN%>0 THEN BX%(INVDOOR%(INVDOORN%-
1))=XA%:BY%(INVDOOR%(INVDOORN%-1))=YA%:BID%(INVDOOR%(INVDOORN%-
1))=17:INVDOORN%=INVDOORN%-1
6000IF INVSELECT$="CHISELED STONE" AND INVCSN%>0 THEN
BX%(INVCS%(INVCSN%-1))=XA%:BY%(INVCS%(INVCSN%-
1))=YA%:BID%(INVCS%(INVCSN%-1))=18:INVCSN%=INVCSN%-1
6010IF INVSELECT$="BRICKS" AND INVBRN%>0 THEN BX%(INVBR%(INVBRN%-
1))=XA%:BY%(INVBR%(INVBRN%-1))=YA%:BID%(INVBR%(INVBRN%-
1))=19:INVBRN%=INVBRN%-1
6020FOR T=0 TO 100000:NEXTT
6030PROCDISPLAY
6040FOR T=0 TO 100000:NEXTT
6050ENDPROC
6060DEFPROCCRAFT
6070CR2%=1
6080FOR C=1 TO 4
6090CRID%(C)=0
6100NEXT
6110GCOL 0,63
6120RECTANGLE 1020,60,72,72
6130MOVE 1020,96:DRAW 1092,96
6140MOVE 1056,60:DRAW 1056,132
6150COLOUR 63:COLOUR128
6160COLOUR128:COLOUR63:PRINTTAB(35,29);"="
6170RECTANGLE 1180,60,40,40
6180REPEAT
6190CRAFT$=INKEY$(0)
6200IF CRAFT$=" " THEN FOR T=0 TO 1000000:NEXTT:CR2%=CR2%+1
6210IF CRAFT$="C" THEN GOTO 6580
6220IF CRAFT$="Q" AND INVSEL%>1 THEN INVSEL%=INVSEL%-
1:PROCINVCRAFTCHANGE
6230IF CRAFT$="E" AND INVSEL%<18 THEN
INVSEL%=INVSEL%+1:PROCINVCRAFTCHANGE
6240IF CRAFT$="S" AND INVSEL%<8 THEN
INVSEL%=INVSEL%+12:PROCINVCRAFTCHANGE
6250IF CRAFT$="W" AND INVSEL%>12 THEN INVSEL%=INVSEL%-
12:PROCINVCRAFTCHANGE
6260GCOL 0,63
6270RECTANGLE 1020,60,72,72
6280MOVE 1020,96:DRAW 1092,96:MOVE 1056,60:DRAW 1056,132
6290PRINTTAB(35,29);"="
6300RECTANGLE 1180,60,40,40
6310IF CRAFT$="=" AND INVSEL%=1 AND INVGN%>0 THEN
CRID%(CR2%)=1:COLOUR8:COLOUR129:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%));
CHR$(234):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6320IF CRAFT$="=" AND INVSEL%=2 AND INVWN%>0 THEN
CRID%(CR2%)=2:COLOUR1:COLOUR128:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%));
CHR$(235):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6330IF CRAFT$="=" AND INVSEL%=3 AND INVLN%>0 THEN
CRID%(CR2%)=3:COLOUR8:COLOUR128:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%));
CHR$(236):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6340IF CRAFT$="=" AND INVSEL%=4 AND INVSN%>0 THEN
CRID%(CR2%)=4:COLOUR21:COLOUR149:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(237):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6350IF CRAFT$="=" AND INVSEL%=5 AND INVDN%>0 THEN
CRID%(CR2%)=5:COLOUR1:COLOUR128:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%));
CHR$(236):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6360IF CRAFT$="=" AND INVSEL%=6 AND INVIN%>0 THEN
CRID%(CR2%)=7:COLOUR6:COLOUR149:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%));
CHR$(238):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6370IF CRAFT$="=" AND INVSEL%=7 AND INVDIN%>0 THEN
CRID%(CR2%)=8:COLOUR40:COLOUR149:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(238):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6380IF CRAFT$="=" AND INVSEL%=8 AND INVCN%>0 THEN
CRID%(CR2%)=9:COLOUR0:COLOUR149:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%));
CHR$(238):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6390IF CRAFT$="=" AND INVSEL%=9 AND INVRN%>0 THEN
CRID%(CR2%)=10:COLOUR3:COLOUR149:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(238):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6400IF CRAFT$="=" AND INVSEL%=10 AND INVGON%>0 THEN
CRID%(CR2%)=15:COLOUR10:COLOUR149:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%)
);CHR$(238):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6410IF CRAFT$="=" AND INVSEL%=11 AND INVSANDN%>0 THEN
CRID%(CR2%)=12:COLOUR31:COLOUR170:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%)
);CHR$(237):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6420IF CRAFT$="=" AND INVSEL%=12 AND INVCACTUSN%>0 THEN
CRID%(CR2%)=13:COLOUR8:COLOUR128:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(235):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6430IF CRAFT$="=" AND INVSEL%=13 AND INVTNTN%>0 THEN
CRID%(CR2%)=11:COLOUR3:COLOUR170:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(239):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6440IF CRAFT$="=" AND INVSEL%=14 AND INVEN%>0 THEN
CRID%(CR2%)=14:COLOUR8:COLOUR149:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(238):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6450IF CRAFT$="=" AND INVSEL%=15 AND INVCHESTN%>0 THEN
CRID%(CR2%)=16:COLOUR1:COLOUR128:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(241):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6460IF CRAFT$="=" AND INVSEL%=16 AND INVDOORN%>0 THEN
CRID%(CR2%)=17:COLOUR1:COLOUR128:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(242):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6470IF CRAFT$="=" AND INVSEL%=17 AND INVCSN%>0 THEN
CRID%(CR2%)=18:COLOUR21:COLOUR128:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%)
);CHR$(240):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6480IF CRAFT$="=" AND INVSEL%=18 AND INVCSN%>0 THEN
CRID%(CR2%)=19:COLOUR2:COLOUR170:PRINTTAB(CRXPOS%(CR2%),CRYPOS%(CR2%))
;CHR$(244):CR2%=CR2%+1:FOR T=0 TO 1000000:NEXTT
6490UNTIL CR2%>4
6500IF CRID%(1)=7 AND CRID%(2)=8 AND CRID%(3)=8 AND CRID%(4)=7 AND
INVDIN%>1 AND INVIN%>1 THEN PROCCRAFTRED
6510IF CRID%(1)=9 AND CRID%(2)=10 AND CRID%(3)=10 AND CRID%(4)=9 AND
INVRN%>1 AND INVCN%>1 THEN PROCCRAFTTNT
6520IF CRID%(1)=2 AND CRID%(2)=2 AND CRID%(3)=2 AND CRID%(4)=2 AND
INVWN%>3 THEN PROCCRAFTCHEST
6530IF CRID%(1)=2 AND CRID%(2)=0 AND CRID%(3)=2 AND CRID%(4)=0 AND
INVWN%>1 THEN PROCCRAFTDOOR
6540IF CRID%(1)=4 AND CRID%(2)=4 AND CRID%(3)=2 AND CRID%(4)=2 AND
INVWN%>1 AND INVSN%>1 THEN PROCCRAFTCOAL
6550IF CRID%(1)=3 AND CRID%(2)=0 AND CRID%(3)=3 AND CRID%(4)=0 AND
INVLN%>1 THEN PROCCRAFTCACTUS
6560IF CRID%(1)=4 AND CRID%(2)=4 AND CRID%(3)=4 AND CRID%(4)=4 AND
INVSN%>3 THEN PROCCRAFTCSTONE
6570IF CRID%(1)=18 AND CRID%(2)=5 AND CRID%(3)=5 AND CRID%(4)=18 AND
INVDN%>1 AND INVCSN%>1 THEN PROCCRAFTBRICKS
6580CR2%=0:CRAFT%=0
6590PROCDISPLAY
6600ENDPROC
6610DEFPROCCRAFTRED
6620INVIN%=INVIN%-2:INVDIN%=INVDIN%-2
6630INVR%(INVRN%)=CRB%
6640INVRN%=INVRN%+1
6650BID%(CRB%)=0:BMC%(CRB%)=3:BOC%(CRB%)=149:BVDU%(CRB%)=238
6660CRB%=CRB%+1
6670COLOUR 3:COLOUR149:PRINTTAB(37,29);CHR$(238)
6680FOR T=0 TO 3000000:NEXTT
6690ENDPROC
6700DEFPROCCRAFTCHEST
6710INVWN%=INVWN%-4
6720INVCHEST%(INVCHESTN%)=CRB%
6730INVCHESTN%=INVCHESTN%+1
6740BID%(CRB%)=0:BMC%(CRB%)=1:BOC%(CRB%)=128:BVDU%(CRB%)=241
6750CRB%=CRB%+1
6760COLOUR 1:COLOUR128:PRINTTAB(37,29);CHR$(241)
6770FOR T=0 TO 3000000:NEXTT
6780ENDPROC
6790DEFPROCCRAFTTNT
6800INVRN%=INVRN%-2:INVCN%=INVCN%-2
6810FOR C=1 TO 2
6820INVTNT%(INVTNTN%)=CRB%
6830INVTNTN%=INVTNTN%+1
6840BID%(CRB%)=0:BMC%(CRB%)=2:BOC%(CRB%)=170:BVDU%(CRB%)=239
6850CRB%=CRB%+1
6860INVTNT%(INVTNTN%)=CRB%
6870INVTNTN%=INVTNTN%+1
6880BID%(CRB%)=0:BMC%(CRB%)=2:BOC%(CRB%)=170:BVDU%(CRB%)=239
6890CRB%=CRB%+1
6900NEXT
6910COLOUR
2:COLOUR170:PRINTTAB(37,29);CHR$(239):COLOUR63:COLOUR128:PRINTTAB(38,2
9);"4"
6920FOR T=0 TO 3000000:NEXTT
6930ENDPROC
6940DEFPROCCRAFTDOOR
6950INVWN%=INVWN%-2
6960INVDOOR%(INVDOORN%)=CRB%
6970INVDOORN%=INVDOORN%+1
6980BID%(CRB%)=0:BMC%(CRB%)=1:BOC%(CRB%)=128:BVDU%(CRB%)=242
6990CRB%=CRB%+1
7000INVDOOR%(INVDOORN%)=CRB%
7010INVDOORN%=INVDOORN%+1
7020BID%(CRB%)=0:BMC%(CRB%)=1:BOC%(CRB%)=128:BVDU%(CRB%)=242
7030CRB%=CRB%+1
7040COLOUR
1:COLOUR128:PRINTTAB(37,29);CHR$(242):COLOUR63:COLOUR128:PRINTTAB(38,2
9);"2"
7050FOR T=0 TO 3000000:NEXTT
7060ENDPROC
7070DEFPROCCRAFTCOAL
7080INVWN%=INVWN%-2:INVSN%=INVSN%-2
7090INVC%(INVCN%)=CRB%
7100INVCN%=INVCN%+1
7110BID%(CRB%)=0:BMC%(CRB%)=0:BOC%(CRB%)=149:BVDU%(CRB%)=138
7120CRB%=CRB%+1
7130INVC%(INVCN%)=CRB%
7140INVCN%=INVCN%+1
7150BID%(CRB%)=0:BMC%(CRB%)=0:BOC%(CRB%)=149:BVDU%(CRB%)=138
7160CRB%=CRB%+1
7170COLOUR
0:COLOUR149:PRINTTAB(37,29);CHR$(138):COLOUR63:COLOUR128:PRINTTAB(38,2
9);"2"
7180FOR T=0 TO 3000000:NEXTT
7190ENDPROC
7200DEFPROCUSEITEM
7210USE%=0
7220FOR B%=0 TO 20000
7230IF BX%(B%)=XA% AND BY%(B%)=YA% AND BVDU%(B%)=243 THEN
USE%=2:USENUM%=B%
7240IF BX%(B%)=XA% AND BY%(B%)=YA% AND BVDU%(B%)=242 THEN
USE%=1:USENUM%=B%
7250IF INVSELECT$="REDSTONE" AND BX%(B%)=XA% AND BY%(B%)=YA% AND
BID%(B%)=11 THEN USE%=3:USENUM%=B%:SPREAD%=0
7260NEXTB%
7270IF USE%=1 THEN PROCOPENDOOR
7280IF USE%=2 THEN PROCSHUTDOOR
7290IF USE%=3 THEN PROCPRIMETNT
7300ENDPROC
7310DEFPROCOPENDOOR
7320BVDU%(USENUM%)=243
7330PROCDISPLAY
7340ENDPROC
7350DEFPROCSHUTDOOR
7360BVDU%(USENUM%)=242
7370PROCDISPLAY
7380ENDPROC
7390DEFPROCCHECKTNT
7400IF TNTD%<>0 AND TIME>TNTD% THEN PROCDETONATE
7410IF CHAPP%=1 THEN GOTO 7430
7420IF TNTD%<>0 AND TIME>TNTD%-200 AND TIME<TNTD%-180 THEN CHAPP%=1
7430IF CHAPP%=1 THEN
CHAPP%=0:BVDU%(USENUM%)=240:BMC%(USENUM%)=63:PROCDISPLAY
7440ENDPROC
7450DEFPROCPRIMETNT
7460IF SPREAD2%<>0 THEN TNTD%=TIME+100:GOTO 7480
7470TNTD%=TIME+TNTDEL
7480TNTX%=BX%(USENUM%)
7490TNTY%=BY%(USENUM%)
7500SPREAD2%=0
7510ENDPROC
7520DEFPROCDETONATE
7530BID%(USENUM%)=0
7540FOR TNT%=0 TO 84
7550RR=RND(6)-3:RR2=RND(6)-3
7560TNTX2%=TNTX%+RR
7570TNTY2%=TNTY%+RR2
7580FOR B%=0 TO DIS%-1
7590IF BX%(SELECT%(B%))=TNTX2% AND BY%(SELECT%(B%))=TNTY2% AND
BID%(SELECT%(B%))<>11 THEN BID%(SELECT%(B%))=0
7600IF BX%(SELECT%(B%))=TNTX2% AND BY%(SELECT%(B%))=TNTY2% AND
BID%(SELECT%(B%))=11 THEN SPREAD%=1:USENUM%=SELECT%(B%):SPREAD2%=1
7610NEXTB%
7620NEXTTNT%
7630GCOL 0,10
7640CIRCLE FILL 640,512,800
7650GCOL 0,63
7660TNTD%=0
7670IF SPREAD%=0 THEN GOTO 7690
7680SPREAD%=0:PROCPRIMETNT
7690PROCDISPLAY
7700ENDPROC
7710DEFPROCSETTINGS
7720*DIR $
7730*DIR BLOCKBUILD
7740*DIR GAMEDATA
7750*DIR SETTINGS
7760LSET=OPENIN "SETTINGS"
7770INPUT#LSET,TREES
7780INPUT#LSET,TNTDEL
7790CLOSE#LSET
7800*SHUTDOWN
7810*DIR $
7820*DIR BLOCKBUILD
7830*DIR GAMEDATA
7840ENDPROC
7850DEFPROCCOMMAND
7860COLOUR 42:COLOUR 128
7870PRINTTAB(0,30);" "
7880PRINTTAB(0,30);"/";
7890INPUT "" COMMAND$
7900IF COMMAND$="CLEAR" THEN PROCCLEARINV
7910IF LEFT$(COMMAND$,2)="TP" THEN PROCTELEPORT
7920PROCDISPLAY
7930ENDPROC
7940DEFPROCCLEARINV
7950INVGN%=0:INVWN%=0:INVLN%=0:INVSN%=0
7960INVDN%=0:INVIN%=0:INVDIN%=0
7970INVCN%=0:INVRN%=0:INVTNTN%=0
7980INVSANDN%=0:INVCACTUSN%=0:INVEN%=0
7990INVGON%=0:INVCHESTN%=0:INVDOORN%=0
8000ENDPROC
8010DEFPROCMENU
8020COLOUR 63:COLOUR 149
8030CLS
8040GCOL 0,42
8050PRINTTAB(16,10);"MENU"
8060COLOUR 0
8070COLOUR 170
8080RECTANGLE FILL 280,496,600,64
8090RECTANGLE FILL 280,304,600,64
8100RECTANGLE FILL 280,208,600,64
8110GCOL 0,0,0
8120RECTANGLE 280,496,600,64
8130RECTANGLE 280,304,600,64
8140RECTANGLE 280,208,600,64
8150PRINTTAB(12,15);"BACK TO GAME"
8160PRINTTAB(12,21);"SAVE AND QUIT"
8170PRINTTAB(13,24);"DONT'T SAVE"
8180REPEAT
8190MOUSE X,Y,Z
8200IF X>280 AND X<880 AND Y>304 AND Y<368 THEN GCOL 0,32:RECTANGLE
280,304,600,64 ELSE GCOL 0,0,0:RECTANGLE 280,304,600,64
8210IF X>280 AND X<880 AND Y>208 AND Y<272 THEN GCOL 0,32:RECTANGLE
280,208,600,64 ELSE GCOL 0,0,0:RECTANGLE 280,208,600,64
8220IF X>280 AND X<880 AND Y>208 AND Y<272 AND Z=4 THEN PROCDONTSAVE
8230IF X>280 AND X<880 AND Y>304 AND Y<368 AND Z=4 THEN PROCSAVEWORLD
8240IF X>280 AND X<880 AND Y>496 AND Y<560 THEN GCOL 0,8:RECTANGLE
280,496,600,64 ELSE GCOL 0,0,0:RECTANGLE 280,496,600,64
8250UNTIL X>280 AND X<880 AND Y>496 AND Y<560 AND Z=4
8260COLOUR 0:COLOUR 128
8270PROCDISPLAY
8280FOR T=0 TO 1000000:NEXTT
8290*FX 12,36
8300*FX 11,36
8310GOTO 230
8320ENDPROC
8330DEFPROCSAVEWORLD
8340MOUSE ON 3
8350*DIR $
8360*DIR BLOCKBUILD
8370*DIR WORLDS
8380*DIR DATA
8390LWD=OPENIN "WORLDDATA"
8400INPUT#LWD,W$
8410CLOSE#LWD
8420*SHUTDOWN
8430*DIR $
8440*DIR BLOCKBUILD
8450*DIR WORLDS
8460SW=OPENOUT W$
8470FOR SA=0 TO 20000
8480PRINT#SW,BX%(SA),BY%(SA),BID%(SA),BMC%(SA),BOC%(SA),BVDU%(SA)
8490NEXT SA
8500FOR SA=0 TO 100
8510PRINT#SW,INVG%(SA),INVW%(SA),INVL%(SA),INVS%(SA),INVD%(SA),INVI%(S
A),INVDI%(SA),INVC%(SA)
8520NEXT SA
8530FOR SA=0 TO 100
8540PRINT#SW,INVR%(SA),INVTNT%(SA),INVSAND%(SA),INVCACTUS%(SA),INVE%(S
A),INVGO%(SA),INVDOOR%(SA),INVCHEST%(SA),INVCS%(SA),INVBR%(SA)
8550NEXT SA
8560PRINT#SW,INVGN%,INVWN%,INVLN%,INVSN%,INVDN%,INVIN%,INVDIN%,INVCN%
8570PRINT#SW,INVRN%,INVTNTN%,INVSANDN%,INVCACTUSN%,INVEN%,INVGON%,INVD
OORN%,INVCHESTN%,INVCSN%,INVBRN%
8580PRINT#SW,INVSELECT$,LAYER%,BLOCK%,S%,DIR%,CRAFT%,CRB%,USE%,USENUM%
8590PRINT#SW,SPREAD%,TNTD%,TNTD%,TNTX%,TNTY%,CHAPP%,X%,Y%,SPREAD2%,INV
SEL%
8600CLOSE#SW
8610OSCLI "SETTYPE "+W$+" TEXT"
8620*SHUTDOWN
8630*DIR $
8640*DIR BLOCKBUILD
8650*DIR GAMEDATA
8660CHAIN "MENU"
8670ENDPROC
8680DEFPROCLOADWORLD
8690COLOUR0:COLOUR149
8700CLS
8710*DIR $
8720*DIR BLOCKBUILD
8730*DIR WORLDS
8740*CAT
8750PRINT:PRINT
8760PRINT:PRINT"WORLD DATA HAS BEEN INITIALISED":INPUT "PLEASE ENTER
WORLD NAME: " W$
8770*DIR DATA
8780WD=OPENOUT "WORLDDATA"
8790PRINT#WD,W$
8800CLOSE#WD
8810*SHUTDOWN
8820*DIR $
8830*DIR BLOCKBUILD
8840*DIR WORLDS
8850CLS
8860FOR X=0 TO 39:FOR Y=0 TO 31
8870COLOUR 0:COLOUR 149
8880PRINTTAB(X,Y);CHR$(238);
8890NEXT:NEXT
8900COLOUR 170:COLOUR 63
8910PRINTTAB(12,8);" "
8920PRINTTAB(12,9);" LOADING WORLD "
8930PRINTTAB(12,10);" "
8940PRINTTAB(10,12);" "
8950PRINTTAB(10,13);" UPDATING TERRAIN "
8960PRINTTAB(10,14);" "
8970LW=OPENIN W$
8980FOR LO=0 TO 20000
8990INPUT#LW,BX%(LO),BY%(LO),BID%(LO),BMC%(LO),BOC%(LO),BVDU%(LO)
9000NEXT LO
9010FOR LO=0 TO 100
9020INPUT#LW,INVG%(LO),INVW%(LO),INVL%(LO),INVS%(LO),INVD%(LO),INVI%(L
O),INVDI%(LO),INVC%(LO)
9030NEXT LO
9040FOR LO=0 TO 100
9050INPUT#LW,INVR%(LO),INVTNT%(LO),INVSAND%(LO),INVCACTUS%(LO),INVE%(L
O),INVGO%(LO),INVDOOR%(LO),INVCHEST%(LO),INVCS%(LO),INVBR%(LO)
9060NEXT LO
9070INPUT#LW,INVGN%,INVWN%,INVLN%,INVSN%,INVDN%,INVIN%,INVDIN%,INVC%
9080INPUT#LW,INVRN%,INVTNTN%,INVSANDN%,INVCACTUSN%,INVEN%,INVGON%,INVD
OORN%,INVCHESTN%,INVCSN%,INVBRN%
9090INPUT#LW,INVSELECT$,LAYER%,BLOCK%,S%,DIR%,CRAFT%,CRB%,USE%,USENUM%
9100INPUT#LW,SPREAD%,TNTD%,TNTX%,TNTY%,CHAPP%,X%,Y%,SPREAD2%,INVSEL%
9110CLOSE#LW
9120*SHUTDOWN
9130*DIR $
9140*DIR BLOCKBUILD
9150*DIR GAMEDATA
9160ENDPROC
9170DEFPROCERROR
9180COLOUR 149:COLOUR 0
9190CLS
9200IF ERR=222 THEN PROCLOADERROR
9210PRINTTAB(9,12);"BLOCKBUILD HAS CRASHED!"
9220PRINT:PRINT
9230PRINT"FOR MORE INFORMATION, A CRASH REOPRT"
9240PRINT"HAS BEEN SAVED IN SDFS::riscos.$."
9250PRINT"BLOCKBUILD.CRASH_REPORTS"
9260COLOUR 21 TINT 0
9270*DIR $
9280*DIR BLOCKBUILD
9290*DIR CRASH_REPORTS
9300CR$="hs_err_cr_report_"+CHR$(47+RND(10))+CHR$(47+RND(10))+CHR$(65+
RND(29))
9310OSCLI "SPOOL "+CR$
9320PRINT SPC(20);"*** BlockBuild Crash Report ***":PRINT"-----------
-------------------------------------------------------------"
9330PRINT"The crash happened inside the BASIC Interpreter at
monotonic time: ";TIME:PRINT"Please show this information to the
BlockBuild corporation based at Appleby Grammar School.":PRINT:PRINT
9340PRINT"The error number is: ";ERR;" The error line number is:
";ERL
9350PRINT
9360PRINT
9370M$="The game has encountered a bug within the source code. The
error reference number shown above should be shown to an official at
the BlockBuild corporation in order to fix the bug in the next
update."
9380IF ERR=4 THEN M$="The BASIC virtual interpreter found a
nonsensical command within the code. This command caused the game to
stop working correctly please fix this error and re-try the game."
9390IF ERR=11 THEN M$="The Game has run out of virtual memory in the
RAM. Your computer may not be able to run this game as it requires a
minimum memory of 520Kb."
9400IF ERR=15 THEN M$="The BlockBuild virtual memory manager has
failed to keep up with demand for RAM. a negative Array element or an
element within an array was to large Please restart the game."
9410IF ERR=220 THEN M$="The BASIC Virtual interpreter has encountered
a syntax command error This is a bug within the code. Please show this
data to the BlockBuild corporation."
9420IF ERR=26 THEN M$="The game has detected that a dynamic data
storage vector within the code does not exist. Please fix this error."
9430IF ERR=44 THEN M$="The BASIC virtual machine cannot deal with
more than the critical number (20) of nested loop variables causing
the game to be deactivated."
9440PRINT M$
9450PRINT:PRINT"If the game crashes again or if this error persists
please contact the Blockbuild corporation to fix the error."
9460*SPOOL
9470OSCLI "SETTYPE "+CR$+" TEXT"
9480*SHUTDOWN
9490COLOUR 0 TINT 0
9500PRINT:PRINT "PRESS SPACE TO QUIT TO TITLE"
9510A=GET
9520*DIR $
9530*DIR BLOCKBUILD
9540*DIR GAMEDATA
9550CHAIN"MENU"
9560ENDPROC
9570DEFPROCLOADERROR
9580COLOUR 63
9590PRINTTAB(5,12);"THIS WORLD DOES NOT EXIST"
9600A=GET
9610*DIR $
9620*DIR BLOCKBUILD
9630*DIR GAMEDATA
9640CHAIN "MENU"
9650ENDPROC
9660DEFPROCSCREENSAVE
9670*DIR $
9680*DIR BLOCKBUILD
9690*DIR SCREENSHOTS
9700SCR$=CHR$(47+RND(10))+CHR$(47+RND(10))+CHR$(47+RND(10))
9710OSCLI "SCREENSAVE SCR_"+SCR$
9720*DIR $
9730*DIR BLOCKBUILD
9740*DIR GAMEDATA
9750ENDPROC
9760DEFPROCTELEPORT
9770TELE$=RIGHT$(COMMAND$,6)
9780TELX%=VAL(LEFT$(TELE$,3))
9790TELY%=VAL(RIGHT$(TELE$,3))
9800IFX%>TELX% THEN PROCTELEL
9810IFX%<TELX% THEN PROCTELER
9820IFY%>TELY% THEN PROCTELED
9830IFY%<TELY% THEN PROCTELEU
9840ENDPROC
9850DEFPROCTELEL
9860S=X%-TELX%
9870X%=X%-S
9880FOR B=0 TO 20000
9890BX%(B)=BX%(B)+S
9900NEXT
9910ENDPROC
9920DEFPROCTELER
9930S=TELX%-X%
9940X%=X%+S
9950FOR B=0 TO 20000
9960BX%(B)=BX%(B)-S
9970NEXT
9980ENDPROC
9990DEFPROCTELED
10000S2=Y%-TELY%
10010Y%=Y%-S2
10020FOR B=0 TO 20000
10030BY%(B)=BY%(B)-S2
10040NEXT
10050ENDPROC
10060DEFPROCTELEU
10070S2=Y%-TELY%
10080Y%=Y%-S2
10090FOR B=0 TO 20000
10100BY%(B)=BY%(B)-S2
10110NEXT
10120ENDPROC
10130DEFPROCDONTSAVE
10140*DIR $
10150*DIR BLOCKBUILD
10160*DIR GAMEDATA
10170FOR T=0 TO 2000000:NEXTT
10180CHAIN"MENU"
10190ENDPROC
10200DEFPROCINVCRAFTCHANGE
10210IF INVSEL%=1 THEN INVSELECT$="GRASS"
10220IF INVSEL%=2 THEN INVSELECT$="WOOD"
10230IF INVSEL%=3 THEN INVSELECT$="LEAVES"
10240IF INVSEL%=4 THEN INVSELECT$="STONE"
10250IF INVSEL%=5 THEN INVSELECT$="DIRT"
10260IF INVSEL%=6 THEN INVSELECT$="IRON"
10270IF INVSEL%=7 THEN INVSELECT$="DIAMOND"
10280IF INVSEL%=8 THEN INVSELECT$="COAL"
10290IF INVSEL%=9 THEN INVSELECT$="REDSTONE"
10300IF INVSEL%=10 THEN INVSELECT$="GOLD"
10310IF INVSEL%=11 THEN INVSELECT$="SAND"
10320IF INVSEL%=12 THEN INVSELECT$="CACTUS"
10330IF INVSEL%=13 THEN INVSELECT$="TNT"
10340IF INVSEL%=14 THEN INVSELECT$="EMERALD"
10350IF INVSEL%=15 THEN INVSELECT$="CHEST"
10360IF INVSEL%=16 THEN INVSELECT$="DOOR"
10370IF INVSEL%=17 THEN INVSELECT$="CHISELED STONE"
10380IF INVSEL%=18 THEN INVSELECT$="BRICKS"
10390PROCCRAFTDATA
10400ENDPROC
10410DEFPROCCRAFTDATA
10420COLOUR 128:COLOUR 63
10430PRINTTAB(0,20);" "
10440PRINTTAB(0,23);" "
10450IF INVSELECT$="GRASS" THEN PRINTTAB(3,20);CHR$(95)
10460IF INVSELECT$="WOOD" THEN PRINTTAB(6,20);CHR$(95)
10470IF INVSELECT$="LEAVES" THEN PRINTTAB(9,20);CHR$(95)
10480IF INVSELECT$="STONE" THEN PRINTTAB(12,20);CHR$(95)
10490IF INVSELECT$="DIRT" THEN PRINTTAB(15,20);CHR$(95)
10500IF INVSELECT$="IRON" THEN PRINTTAB(18,20);CHR$(95)
10510IF INVSELECT$="DIAMOND" THEN PRINTTAB(21,20);CHR$(95)
10520IF INVSELECT$="COAL" THEN PRINTTAB(24,20);CHR$(95)
10530IF INVSELECT$="REDSTONE" THEN PRINTTAB(27,20);CHR$(95)
10540IF INVSELECT$="GOLD" THEN PRINTTAB(30,20);CHR$(95)
10550IF INVSELECT$="SAND" THEN PRINTTAB(33,20);CHR$(95)
10560IF INVSELECT$="CACTUS" THEN PRINTTAB(36,20);CHR$(95)
10570IF INVSELECT$="TNT" THEN PRINTTAB(3,23);CHR$(95)
10580IF INVSELECT$="EMERALD" THEN PRINTTAB(6,23);CHR$(95)
10590IF INVSELECT$="CHEST" THEN PRINTTAB(9,23);CHR$(95)
10600IF INVSELECT$="DOOR" THEN PRINTTAB(12,23);CHR$(95)
10610IF INVSELECT$="CHISELED STONE" THEN PRINTTAB(15,23);CHR$(95)
10620IF INVSELECT$="BRICKS" THEN PRINTTAB(18,23);CHR$(95)
10630ENDPROC
10640DEFPROCCRAFTCACTUS
10650INVLN%=INVLN%-2
10660INVCACTUS%(INVCACTUSN%)=CRB%
10670INVCACTUSN%=INVCACTUSN%+1
10680BID%(CRB%)=0:BMC%(CRB%)=8:BOC%(CRB%)=128:BVDU%(CRB%)=235
10690CRB%=CRB%+1
10700COLOUR 8:COLOUR128:PRINTTAB(37,29);CHR$(235)
10710FOR T=0 TO 3000000:NEXTT
10720ENDPROC
10730DEFPROCCRAFTCSTONE
10740INVSN%=INVSN%-4
10750FOR C=1 TO 4
10760INVCS%(INVCSN%)=CRB%
10770INVCSN%=INVCSN%+1
10780BID%(CRB%)=0:BMC%(CRB%)=21:BOC%(CRB%)=149:BVDU%(CRB%)=245
10790CRB%=CRB%+1
10800NEXT
10810COLOUR21:COLOUR149:PRINTTAB(37,29);CHR$(245):COLOUR63:COLOUR128:P
RINTTAB(38,29);"4"
10820FOR T=0 TO 3000000:NEXTT
10830ENDPROC
10840DEFPROCCRAFTBRICKS
10850INVCSN%=INVCSN%-2:INVDN%=INVDN%-2
10860FOR C=1 TO 4
10870INVBR%(INVBRN%)=CRB%
10880INVBRN%=INVBRN%+1
10890BID%(CRB%)=0:BMC%(CRB%)=2:BOC%(CRB%)=170:BVDU%(CRB%)=244
10900CRB%=CRB%+1
10910NEXT
10920COLOUR2:COLOUR170:PRINTTAB(37,29);CHR$(244):COLOUR63:COLOUR128:PR
INTTAB(38,29);"4"
10930FOR T=0 TO 3000000:NEXTT
10940ENDPROC
10950DEFPROCWORLDINF
10960*DIR $
10970*DIR BLOCKBUILD
10980*DIR GAMEDATA
10990*DIR SETTINGS
11000WI=OPENIN "WORLD_GENERATION"
11010INPUT#WI,I%,CO%,GO%,DIA%,RE%,EME%
11020CLOSE#WI
11030*SHUTDOWN
11040*DIR $
11050*DIR BLOCKBUILD
11060*DIR GAMEDATA
11070ENDPROC