Code archives/Graphics/2.5D Terrain Generator

This code has been declared by its author to be Public Domain code.

Download source code

2.5D Terrain Generator by Andy_A2008
Nothing great but could be helpful to others to see how GUI can be implemented.

There are also some nice functions in the first program which stores bitmaps in 'packed' data statements.
There are two parts to this code.
Part 1: Save necessary bitmaps to disk
Part 2: Terrain Generator in BlitzPlus GUI

Part 1: (Run First!)
[code]AppTitle "Data Images"

Global sw%, sh%
Global maskRed%, maskGrn%, maskBlu%
Global imgHandle%, imgWidth%, imgHeight%
;========== masking constants for 32 bit color =========
	maskRed% = 16711680
	maskGrn% = 65280
	maskBlu% = 255
;========= masking constants for 16 bit (5-6-5) ========
;		maskRed% = 16252928
;		maskGrn% = 64512 ;change To 63488 For (5-5-5)
;		maskBlu% = 248
;=======================================================
sw% =  800: sh% =  600

Graphics sw, sh, 32, 2
SetBuffer BackBuffer()

Dim vecs(1) ;vector array (true dimension size in image data)
Dim pal%(1) ;Color palette array (true dimension size in image data)
Dim pow%(5) ;array to hold powers of two for HEX2DEC function
pow(0)=1        : pow(1)=16
pow(2)=256      : pow(3)=4096
pow(4)=65536    : pow(5)=1048576

;filenames to store on disk
Dim name$(4)
name$(1) = "TG.bmp"
name$(2) = "ltArrow.bmp"
name$(3) = "rtArrow.bmp"
name$(4) = "okButton.bmp"


;=======================================================


Cls
Color 0,192,255

st = MilliSecs()
For i% = 1 To 4
	Select i%
		Case 1: Restore TG
		Case 2: Restore ltArrow
		Case 3: Restore rtArrow
		Case 4: Restore okButton
	End Select
	getImgData()
	temp% = CreateImage(imgWidth, imgHeight)
	SetBuffer ImageBuffer(temp%)
	displayImg(0,0,imgWidth, imgHeight)
	SaveImage(temp%,name$(i%))
	SetBuffer BackBuffer()
	Text 20,i*20,name$(i%)+" saved."
	Flip
	FreeImage temp%: temp% = 0
Next

Color 0,192,255
et = MilliSecs()-st
Text 20,sh-100,"Time to save .bmp's: "+et
Text 20,sh-80,"Click to exit."
Flip		

WaitMouse()
End

Function getImgData%()
	Local numVecs%, palSize%, inc%, palData$
	Local i%, vecData$, double$, vecLen%, idx%
	Read imgWidth		;global var
	Read imgHeight	;global var
	Read numVecs
	Read palSize
	Dim vecs(numVecs)
	Dim pal(palSize-1)
	inc = 0
	While inc% < palSize-1
		Read palData$
		For i = 1 To Len(palData$) Step 6
			pal(inc%) = HexDec(Mid$(palData$,i,6))
			inc = inc + 1
		Next
	Wend
	inc% = 0
	While inc < numVecs
		Read vecData$
		For i = 1 To Len(vecData$) Step 8
			double$ = Mid$(vecData$,i,8)
			vecLen = hexDec(Left$(double$,4))
			vecs(inc) = vecLen
			inc = inc% + 1
			idx = hexDec(Right$(double$,4))
			vecs(inc) = pal(idx)
			inc = inc + 1
		Next
	Wend
End Function

Function displayImg(x%, y%, imgWidth%, imgHeight%)
	Local angle%, angle2%, vCount%, i%
	Local p#, q#, r#, s#
	Local lineLen%, vecLen%, red%, grn%, blu%
	angle = 0
	angle2 = 90
	vCount% = 0
	For i% = 1 To imgHeight
		p# = Cos(angle2)*(i-1)+x
		q# = Sin(angle2)*(i-1)+y
		lineLen% = 0
		While lineLen < imgWidth
			vecLen = vecs(vCount)
			lineLen = linelen + vecLen
			;========== masking constants for 32-bit color =========
			red% = (vecs(vCount + 1) And maskRed) Shr 16
			grn% = (vecs(vCount + 1) And maskGrn) Shr 8
			blu% =  vecs(vCount + 1) And maskBlu
			;======= un-comment next 3 lines for 16-bit color ======
			;red = red Shr 3 Shl 3
			;grn = grn Shr 2 Shl 2 ;change to Shr 3 Shl 3 for (5-5-5)
			;blu = blu Shr 3 Shl 3
			;=======================================================

			Color red,grn,blu
			r# = Cos(angle)*vecLen+p
			s# = Sin(angle)*vecLen+q
			Line p,q,r,s
			vCount = vCount+2
			p=r
			q=s
		Wend
	Next 
End Function


Function wordHex$(decValue)
	Local hexVal%, hexStr$, i%
	hexStr$ = Str( Hex (decValue))
	hexStr$ = Right$(hexStr$, 4)
	Return  hexStr$
End Function

Function byte3Hex$(decValue)
	Local hexVal%, hexStr$
	hexStr$ = Str( Hex (decValue))
	hexStr$ = Right$(hexStr$, 6)
	Return hexStr$
End Function

Function HexDec(HexVal$)
	Local HexChar$, numLen%, i%
	Local rev%, h$, decVal%, accumul8%
    HexVal$ = Upper$(HexVal$)
    HexChar$="0123456789ABCDEF"
    numLen=Len(HexVal$)
    If numLen <= 8 Then
        For i = numLen-1 To 0 Step -1
            rev = numLen-i
            h$ = Mid$(HexVal$,rev,1)
            decVal = Instr(HexChar$,h$)-1
            accumul8 = accumul8 + decVal*pow(i)
        Next
    Else
        accumul8 = 0
    End If
	Return accumul8
End Function

.TG
Data 178,134,3352,13
Data "0080FFFFFF00FFFFFF7FBF7FBFDF3F9FCF5F004040BFCF109FB7187F9F20FFFFBFFFFF9FFFFF7F"
Data "00B2000000B2000000B2000000B2000000B2000000B2000000B2000000B2000000B20000002400000011000100410000000500010037000000240000"
Data "0011000100410000000500010037000000240000001100010041000000050001003700000024000000110001004100000005000100370000002A0000"
Data "0005000100830000002A000000050001006C00000001000200160000002A000000050001000C00000001000300020004000300010002000400010003"
Data "000600000005000100020000000100050001000400020001000200000005000100020000000100050001000400020001000200000001000300010005"
Data "0002000400040001000200040001000500070000000500010004000000050001000200000001000500010004000200010001000400010005000E0000"
Data "0003000200150000002A000000050001000B000000010004000900010001000400050000000500010001000300010004000400010002000000050001"
Data "00010003000100040004000100020000000C00010001000300050000000500010004000000050001000100030007000100010004000C000000050002"
Data "00140000002A0000000500010009000000010003000C00010001000400040000000B000100020000000B000100020000000D00010001000300040000"
Data "0005000100040000000E000100010005000A00000007000200130000002A000000050001000900000001000400040001000100050002000000010003"
Data "000500010001000300030000000B000100020000000B000100020000000D000100010004000400000005000100040000000E00010001000400090000"
Data "0009000200120000002A0000000500010008000000010003000400010001000500040000000100030004000100010004000300000005000100010004"
Data "000100030006000000050001000100040001000300060000000100010001000400010005000100030003000000010003000100040005000100040000"
Data "00050001000400000005000100010004000100030001000000010003000100040005000100080000000B000200110000002A00000005000100080000"
Data "000100040004000100060000000500010003000000050001000800000005000100110000000500010004000000050001000400000005000100040000"
Data "000100030005000100070000000D000200100000002A000000050001000800000010000100030000000500010008000000050001000A000000010003"
Data "00020005000200040007000100040000000500010004000000050001000500000005000100060000000E000200100000002A00000005000100080000"
Data "0010000100030000000500010008000000050001000800000001000300010004000C0001000400000005000100040000000500010005000000050001"
Data "0005000000100002000F0000002A0000000500010008000000100001000300000005000100080000000500010007000000010003000E000100040000"
Data "00050001000400000005000100050000000500010004000000120002000E0000002A0000000500010008000000050001000E00000005000100080000"
Data "000500010007000000010004000400010001000400010005000100030002000000050001000400000005000100040000000500010005000000050001"
Data "0003000000140002000D0000002A00000005000100080000000100040004000100010005000800000001000300010001000300000005000100080000"
Data "00050001000700000005000100050000000500010004000000050001000400000005000100050000000500010002000000160002000C0000002A0000"
Data "000500010008000000010005000500010001000400010003000300000001000300010005000100040002000100030000000500010008000000050001"
Data "000700000005000100010005000200000001000300010005000500010004000000050001000400000005000100050000000500010001000000180002"
Data "000B0000002A0000000500010009000000010004000E00010003000000050001000800000005000100070000000F0001000400000005000100040000"
Data "000500010005000000050001001A0002000A0000002A0000000500010009000000010003000E00010003000000050001000800000005000100070000"
Data "00010005000E0001000400000005000100040000000500010005000000050001001B000200090000002A000000050001000B000000010004000B0001"
Data "000100040003000000050001000800000005000100080000000100040007000100010004000500010004000000050001000400000005000100050000"
Data "00050001001C000200080000002A000000050001000C0000000100030001000500010004000500010001000400010005000100030004000000050001"
Data "000800000005000100090000000100050001000400040001000100050001000000050001000400000005000100040000000500010005000000050001"
Data "001D000200070000008A0000002200020006000000890000002400020005000000880000002600020004000000870000002800020003000000860000"
Data "002900020003000000850000002B00020002000000840000002D00020001000000830000002F00020082000000300002008100000031000200800000"
Data "00320002007F000000330002007E000000340002007D0000003500020019000000010003000100050001000400050001000100040001000500010003"
Data "00580000000F00020003000600240002001700000001000300010004000B000100010004000100050055000000020006000300020005000100060002"
Data "00040006002300020016000000010005000F000100540000000400060002000200050001000600020006000600210002001500000001000500100001"
Data "005300000006000600010002000500010006000200080006001F00020014000000010003000600010001000400010003000300000001000300010005"
Data "000400010052000000070006000100020005000100050002000A00060014000200020006000800020014000000010004000500010001000300080000"
Data "000100050002000100510000000900060005000100050002000C000600110002000900060002000200130000000100030005000100010003000A0000"
Data "000100030001000100070000000100030002000400030001000200040001000300060000000500010002000000010005000100040002000100010004"
Data "000100050009000000010003000200040003000100020004000100030006000000050001000200000001000500010004000200010002000000010003"
Data "000100050002000400040001000200070001000800050006000C000100050006000100090002000700030001000200070001000A0007000200050001"
Data "000200020001000B00010007000200010008000600130000000100050004000100010004001300000001000400090001000100040005000000050001"
Data "00010003000700010001000400070000000100040009000100010004000500000005000100010003000100040004000100020000000C000100010009"
Data "00030006000C000100030006000100090001000700090001000100070001000A00050002000500010001000A0001000C000400010008000600130000"
Data "0001000400040001000100030011000000010003000C00010001000400040000000E0001000100050004000000010003000C00010001000400040000"
Data "000B000100020000000D00010001000900020006000C00010002000600010009000D00010001000A00040002000B0001000800060013000000050001"
Data "000D000000010002000400000001000400040001000100050002000000010003000500010001000300030000000E0001000100040004000000010004"
Data "00040001000100050002000000010003000500010001000300030000000B000100020000000D00010001000700020006000C000100020006000E0001"
Data "000100070001000600030002000B00010008000600130000000500010005000000090001000100020002000000010003000400010001000500040000"
Data "000100030004000100010004000300000005000100010004000100030001000000010003000100040005000100030000000100030004000100010005"
Data "000400000001000300040001000100040003000000050001000100040001000300060000000100010001000400010005000100030001000000020006"
Data "000100090001000700050001000400060005000100040002000200060001000800050001000100080003000600010008000500010001000800010006"
Data "00020002000500010001000C0001000A000C000600130000000500010005000000090001000200020001000000010004000400010006000000050001"
Data "000300000005000100040000000100030005000100030000000100040004000100060000000500010003000000050001000C00000005000600050001"
Data "0004000600050001000400020002000600010007000400010001000800050006000100080004000100010007000300060005000100020002000C0006"
Data "001300000005000100010003000400000009000100030002001000010003000000050001000500000005000100030000001000010003000000050001"
Data "000A00000001000300020008000200070007000100040006000500010001000600020002000300060005000100010009000500060001000900050001"
Data "000300060005000100020002000C00060013000000010004000400010001000300040000000900010003000200100001000300000005000100050000"
Data "0005000100030000001000010003000000050001000800000001000300010004000C0001000400060005000100020006000100020003000600050001"
Data "0007000600050001000300060005000100010002000D0006001300000001000400040001000100040008000000050001000300020010000100030000"
Data "000500010005000000050001000300000010000100030000000500010007000000010003000E00010004000600050001000600060005000100070006"
Data "00050001000300060005000100010002000D0006001300000001000300050001000100030006000000010002000500010003000200050001000E0000"
Data "0005000100050000000500010003000000050001000E0000000500010007000000010004000400010001000700010008000100090002000600050001"
Data "00040006000500010006000600050001000100090005000600010009000500010003000600050001000E000600140000000600010001000500040000"
Data "0002000200050001000300020001000C0004000100010005000800000001000300010001000300000005000100050000000500010003000000010004"
Data "000400010001000500080000000100030001000100030000000500010007000000050001000500060005000100040006000500010006000600010007"
Data "0004000100010008000500060001000800040001000100070003000600050001000E0006001400000001000300060001000100040001000500010003"
Data "0003000200050001000300020001000B0005000100010004000100030003000000010003000100050001000400020001000300000005000100050000"
Data "000500010003000000010005000500010001000400010003000300000001000300010005000100040002000100030000000500010006000000010006"
Data "000500010001000800020006000100090001000800050001000400060005000100010007000200060001000900010001000100060001000800050001"
Data "000100080001000900010006000100090001000800050001000100080003000600050001000E0006001500000001000400100001000400020001000C"
Data "000E0001000300000005000100050000000500010004000000010004000E000100030000000500010005000000020006000F000100040006000A0001"
Data "0002000600010007000E00010004000600050001000E00060016000000010004000F0001000400020001000A000E0001000300000005000100050000"
Data "000500010004000000010003000E00010003000000050001000400000003000600010008000E00010004000600010008000900010002000600010009"
Data "000D0001000100090004000600050001000E00060017000000010003000D00010001000B000600020001000C000B0001000100040003000000050001"
Data "00050000000500010006000000010004000B000100010004000300000005000100030000000500060001000700070001000100070005000100050006"
Data "00010007000800010003000600010009000100070009000100010007000100090005000600050001000E00060019000000010003000100040001000C"
Data "000400010002000C0001000B0001000A000900020001000A0001000B0001000C00050001000100040001000500010003000400000005000100050000"
Data "000500010007000000010003000100050001000400050001000100040001000500010003000400000005000100020000000700060001000800010007"
Data "000400010001000800010006000500010006000600010008000100070004000100010007000100080005000600010009000200070003000100020007"
Data "000100090007000600050001000E0006001A00000019000200340000004B000600190000001B000200320000004C000600190000001C000200300000"
Data "004D000600180000001E0002002E0000004E00060017000000200002002C0000004F00060016000000220002002A0000005000060015000000250002"
Data "0027000000510006001400000027000200250000005200060014000000280002002300000053000600130000002A0002002100000054000600120000"
Data "002C0002001F000000550006001100000020000200010006000D0002001D00000056000600100000000A0002000100060014000200050006000A0002"
Data "00020006001B000000570006000F00000009000200040006001200020008000600070002000400060019000000580006000F00000007000200060006"
Data "00110002000A0006000400020007000600170000000E000600010009000100080001000700040001000200070001000900110006000E000100040006"
Data "000A000100020007000100080001000900100006000E00000006000200090006000E0002000E0006000100020009000600150000000E0006000B0001"
Data "0001000700100006000E000100040006000E00010001000700010009000E0006000D000000050002000C0006000C0002001A000600130000000F0006"
Data "000C000100010007000F0006000E0001000400060010000100010008000D0006000C000000050002000E0006000A0002001C00060011000000100006"
Data "000D000100010008000E0006000E0001000400060011000100010008000C0006000B0000000400020011000600070002001F0006000F000000110006"
Data "00020001000100070001000800030006000100080005000100010007000E000600050001000D00060005000100040006000100090001000800010007"
Data "0006000100010009000B0006000A00000001000600020002001300060006000200210006000D00000012000600010001000100090006000600010008"
Data "00050001000E000600050001000D00060005000100070006000100080005000100010007000B0006000A000000010002001600060004000200230006"
Data "000B0000001C000600050001000E000600050001000D00060005000100080006000100080005000100010009000A0006000900000019000600010002"
Data "0026000600090000001D000600050001000E000600050001000D00060005000100090006000100070004000100010008000A00060008000000420006"
Data "00070000001D0006000100090004000100010007000E0006000900010001000700010008000100090006000600050001000900060001000800040001"
Data "00010007000A0006000700000044000600050000001E0006000100070004000100010008000E0006000C000100010007000500060005000100090006"
Data "0001000900050001000A0006000600000046000600030000001E00060001000900050001000F0006000D0001000100070004000600050001000A0006"
Data "00050001000A0006000500000048000600010000001E0006000100090005000100010008000F0006000E0001000100080003000600050001000A0006"
Data "00050001000A000600050000006700060001000700040001000100070010000600010001000100070002000900030006000100090001000700050001"
Data "000100070003000600050001000900060001000900050001000A00060004000000670006000100070004000100010007001A00060001000800050001"
Data "000300060005000100090006000100090004000100010007000A00060003000000660006000100090005000100010007001C00060005000100030006"
Data "0005000100090006000100070004000100010008000A00060002000000660006000100090005000100010007001D0006000500010003000600050001"
Data "00080006000100080005000100010009000A00060001000000660006000100080005000100010007000A000600050001000400060001000100010008"
Data "00080006000100080004000100010007000300060005000100070006000100080005000100010007000B000600660006000100070005000100010008"
Data "000B00060005000100040006000300010001000800010009000300060001000900010007000500010001000800030006000500010004000600010009"
Data "000100080001000700060001000C00060065000600010007000F0001000300060005000100040006000F0001000400060011000100010009000C0006"
Data "0065000600100001000300060005000100040006000E000100010009000400060010000100010009000D000600650006001000010003000600050001"
Data "00040006000C0001000100070001000900050006000E000100010007000F000600650006001000010003000600050001000500060001000900010008"
Data "0002000700040001000200070001000900070006000A00010002000700010008000100090010000600B2000600B2000600B2000600B2000600B20006"
Data "00B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B20006"
Data "00B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B2000600B20006"


.ltArrow
Data 93,50,468,3
Data "0000FF000045FFFFFF"
Data "005D0000005D000000020000002800010001000200300001000200000002000000270001000200020030000100020000000200000025000100040002"
Data "003000010002000000020000002300010006000200300001000200000002000000210001000800020030000100020000000200000020000100090002"
Data "003000010002000000020000001E0001000B0002003000010002000000020000001C0001000D0002003000010002000000020000001A0001000F0002"
Data "003000010002000000020000001800010011000200300001000200000002000000170001001200020030000100020000000200000015000100140002"
Data "003000010002000000020000001300010016000200300001000200000002000000110001001800020030000100020000000200000010000100190002"
Data "003000010002000000020000000E000100430002000800010002000000020000000C000100450002000800010002000000020000000A000100470002"
Data "000800010002000000020000000800010049000200080001000200000002000000070001004A000200080001000200000002000000050001004C0002"
Data "00080001000200000002000000030001004E000200080001000200000002000000010001005000020008000100020000000200000001000100500002"
Data "00080001000200000002000000030001004E000200080001000200000002000000050001004C000200080001000200000002000000070001004A0002"
Data "0008000100020000000200000008000100490002000800010002000000020000000A000100470002000800010002000000020000000C000100450002"
Data "000800010002000000020000000E00010043000200080001000200000002000000100001004100020008000100020000000200000011000100400002"
Data "000800010002000000020000001300010016000200300001000200000002000000150001001400020030000100020000000200000017000100120002"
Data "0030000100020000000200000018000100110002003000010002000000020000001A0001000F0002003000010002000000020000001C0001000D0002"
Data "003000010002000000020000001E0001000B000200300001000200000002000000200001000900020030000100020000000200000021000100080002"
Data "003000010002000000020000002300010006000200300001000200000002000000250001000400020030000100020000000200000027000100020002"
Data "00300001000200000002000000280001000100020030000100020000005D0000005D0000"

.rtArrow
Data 93,50,468,3
Data "0000FF000045FFFFFF"
Data "005D0000005D000000020000003000010001000200280001000200000002000000300001000200020027000100020000000200000030000100040002"
Data "002500010002000000020000003000010006000200230001000200000002000000300001000800020021000100020000000200000030000100090002"
Data "00200001000200000002000000300001000B0002001E0001000200000002000000300001000D0002001C0001000200000002000000300001000F0002"
Data "001A00010002000000020000003000010011000200180001000200000002000000300001001200020017000100020000000200000030000100140002"
Data "001500010002000000020000003000010016000200130001000200000002000000300001001800020011000100020000000200000030000100190002"
Data "0010000100020000000200000008000100430002000E000100020000000200000008000100450002000C000100020000000200000008000100470002"
Data "000A00010002000000020000000800010049000200080001000200000002000000080001004A000200070001000200000002000000080001004C0002"
Data "00050001000200000002000000080001004E000200030001000200000002000000080001005000020001000100020000000200000008000100500002"
Data "00010001000200000002000000080001004E000200030001000200000002000000080001004C000200050001000200000002000000080001004A0002"
Data "00070001000200000002000000080001004900020008000100020000000200000008000100470002000A000100020000000200000008000100450002"
Data "000C000100020000000200000008000100430002000E0001000200000002000000080001004100020010000100020000000200000008000100400002"
Data "001100010002000000020000003000010016000200130001000200000002000000300001001400020015000100020000000200000030000100120002"
Data "001700010002000000020000003000010011000200180001000200000002000000300001000F0002001A0001000200000002000000300001000D0002"
Data "001C0001000200000002000000300001000B0002001E0001000200000002000000300001000900020020000100020000000200000030000100080002"
Data "002100010002000000020000003000010006000200230001000200000002000000300001000400020025000100020000000200000030000100020002"
Data "00270001000200000002000000300001000100020028000100020000005D0000005D0000"

.okButton
Data 101,51,734,3
Data "0000FF000045FFFFFF"
Data "00650000006500000002000000610001000200000002000000610001000200000002000000610001000200000002000000110001000B0002001B0001"
Data "000700020012000100050002000C00010002000000020000000E00010012000200150001000A0002000F000100090002000A00010002000000020000"
Data "000C00010015000200140001000B0002000C0001000C0002000900010002000000020000000B00010017000200120001000D000200090001000F0002"
Data "000800010002000000020000000A00010019000200110001000E0002000600010011000200080001000200000002000000090001001B000200100001"
Data "000E0002000500010013000200070001000200000002000000080001001D0002000F0001000F00020003000100140002000700010002000000020000"
Data "00070001001F0002000E0001000F000200010001001600020007000100020000000200000006000100210002000D0001002600020007000100020000"
Data "000200000005000100230002000C0001002600020007000100020000000200000005000100240002000B000100260002000700010002000000020000"
Data "0005000100240002000B0001002600020007000100020000000200000005000100240002000B00010025000200080001000200000002000000040001"
Data "00250002000B0001002400020009000100020000000200000004000100260002000A000100220002000B000100020000000200000004000100110002"
Data "0003000100120002000A000100210002000C0001000200000002000000040001001000020005000100110002000A0001001F0002000E000100020000"
Data "0002000000040001000F00020007000100100002000A0001001D000200100001000200000002000000040001000F00020007000100100002000A0001"
Data "001C000200110001000200000002000000040001000F00020007000100100002000A0001001A000200130001000200000002000000040001000F0002"
Data "0007000100100002000A00010019000200140001000200000002000000040001000F00020007000100100002000A0001001700020016000100020000"
Data "0002000000040001000F00020007000100100002000A00010019000200140001000200000002000000040001000F00020007000100100002000A0001"
Data "001A000200130001000200000002000000040001000F00020007000100100002000A0001001C00020011000100020000000200000004000100100002"
Data "0005000100110002000A0001001D000200100001000200000002000000040001001100020003000100120002000A0001001F0002000E000100020000"
Data "000200000004000100260002000A000100200002000D000100020000000200000004000100260002000A000100210002000C00010002000000020000"
Data "0004000100260002000A000100220002000B000100020000000200000005000100240002000B00010024000200090001000200000002000000050001"
Data "00240002000B0001002600020007000100020000000200000005000100240002000B0001002700020006000100020000000200000006000100220002"
Data "000C0001002800020005000100020000000200000006000100220002000C0001000E0002000100010019000200050001000200000002000000070001"
Data "00200002000D0001000E0002000300010017000200050001000200000002000000080001001E0002000E0001000E0002000400010016000200050001"
Data "000200000002000000090001001C0002000F0001000E00020006000100140002000500010002000000020000000B00010019000200100001000E0002"
Data "0007000100130002000500010002000000020000000D00010016000200120001000D0002000800010011000200060001000200000002000000100001"
Data "0010000200150001000D0002000900010010000200060001000200000002000000370001000A0002000B0001000E0002000700010002000000020000"
Data "00610001000200000002000000610001000200000065000000650000"[/code]

Part 2:
[code]
Global sw%, sh%, can1%
;=================================================
; Set screen res here
; recommend: 800x600 to Maximum monitor resolution
;=================================================
sw% = GraphicsWidth() : sh% = GraphicsHeight()
;=================================================

Dim c%(15,3), hz%(1,1)
SeedRnd MilliSecs()
arial9B% = LoadFont("Arial",18,True,False,False)
arial12% = LoadFont("Arial",24,False,False,False)
arial12U% = LoadFont("Arial",24,False,False,True)
arial24B% = LoadFont("Arial",48,True,False,False)

ok% = LoadImage("okButton.bmp")
lt% = LoadImage("ltArrow.bmp")
rt% = LoadImage("rtArrow.bmp")
Global TGen% = LoadImage("TG.bmp")
If (ok=0) Or (lt=0) Or (rt=0) Or (TGen=0) Then
	RuntimeError "A required bitmap image is missing!"
End If
	

; Create main window
dw% = GadgetWidth(Desktop())
dh% = GadgetHeight(Desktop())
x% = (dw%-sw%) Shr 1
y% = (dh%-sh%) Shr 1
tg% = CreateWindow("Terrain Generator 2.5D", x%, y%, sw%, sh%, 0, 5)
; Create the drawing canvas'
can0% = CreateCanvas(   0, 1,     178,    134, tg%)
can1% = CreateCanvas( 180, 1, sw%-192, sh%-10, tg%)

; Identify the 'root' menu for the window that we just created.
; All our menus must be attached to this 
menu=WindowMenu(tg)
; Create "File" menu on "Menu Bar"
file=CreateMenu("File", 0, menu)
CreateMenu(     "Load Terrain BMP",  1, file)
CreateMenu(     "Save Terrain BMP",  2, file)
CreateMenu(                     "", 98, file)
CreateMenu("Load Terrain Settings",  3, file)
CreateMenu("Save Terrain Settings",  4, file)
CreateMenu(                     "", 99, file)
CreateMenu(                 "Exit",  5, file)

; Create "Map View" menu on "Menu Bar"
view=CreateMenu("Map View", 0, menu) 
chkNormal = CreateMenu("Normal View", 6, view)
chkPoster = CreateMenu( "Posterized", 7, view)
  chkWire = CreateMenu( "Wire Frame", 8, view)
terrainView = 1

; Create "Color Scheme" menu on "Menu Bar"
pal=CreateMenu("Color Scheme", 0, menu)
    chkSea = CreateMenu("Sea and Turf", 9,pal)
   chkSand = CreateMenu(  "Sand Dunes",10,pal)
  chkPolar = CreateMenu(   "Polar Ice",11,pal)
   chkMars = CreateMenu(        "Mars",12,pal)
  chkVenus = CreateMenu(       "Venus",13,pal)
chkNeptune = CreateMenu(     "Neptune",14,pal)
   chkGray = CreateMenu(    "Midnight",15,pal)
colorScheme = 1

; Create "Help" menu on "Menu Bar"
help=CreateMenu("Help", 0, menu)
CreateMenu( "Help",20,help)
CreateMenu("About",21,help)



; Shows which items on "Map View" and "Color Scheme" are checked
CheckMenu chkNormal
oldView = chkNormal
CheckMenu chkSea
oldColor = chkSea

; Create Draw Button
draw = CreateButton("Draw Terrain!",30,141,128,40,tg)


; Finally, once all menus are set up / updated, we call
; UpdateWindowMenu to tell the OS about the menu 
UpdateWindowMenu tg%

; Draw the image on canvas0
SetBuffer CanvasBuffer(can0%)
DrawBlock TGen%,0,0
FlipCanvas(can0%)

;Set canvas1 as the drawing canvas
SetBuffer CanvasBuffer(can1%)

;Create text boxes
tBox1 = CreateTextField(96, 196, 50, 25, tg)
tBox2 = CreateTextField(96, 241, 50, 25, tg)
tBox3 = CreateTextField(96, 286, 50, 25, tg)
tBox4 = CreateTextField(96, 331, 50, 25, tg)
tBox5 = CreateTextField(96, 376, 50, 25, tg)
tBox6 = CreateTextField(96, 421, 50, 25, tg)
tBox7 = CreateTextField(96, 466, 50, 25, tg)
tBox8 = CreateTextField(96, 511, 50, 25, tg)
;Fill the text boxes with default values
SetGadgetText tbox1, "200" :     Xsize% = 200
SetGadgetText tbox2, "160" :     Ysize% = 160
SetGadgetText tbox3,   "3" :      Blur% =   3
SetGadgetText tbox4,   "2" :     Water% =   2
SetGadgetText tbox5,   "3" : Pixelsize% =   3
SetGadgetText tbox6,   "6" :     Scale% =   6
SetGadgetText tbox7,   "4" :    Height% =   4
SetGadgetText tbox8,   "0" :      Skew# =   0.0

;Create labels
sTxt1 = CreateLabel(    " Width",40, 201, 56, 20, tg) 
sTxt2 = CreateLabel(    "Length",40, 246, 56, 20, tg) 
sTxt3 = CreateLabel(      "Blur",56, 291, 40, 20, tg) 
sTxt4 = CreateLabel(     "Water",40, 336, 56, 20, tg) 
sTxt5 = CreateLabel("Pixel Size",16, 381, 80, 20, tg) 
sTxt6 = CreateLabel(     "Scale",48, 426, 48, 20, tg) 
sTxt7 = CreateLabel(    "Height",40, 471, 56, 20, tg) 
sTxt8 = CreateLabel(      "Skew",48, 516, 48, 20, tg) 

Repeat
	; Wait for an event to occur... 
	id=WaitEvent() 

	; exit on a window close event
	; and release all resources
	If id=$803 Then
		FreeImage TGen% : TGen% = 0
		FreeImage ok%   : ok% = 0
		FreeImage lt%   : lt% = 0
		FreeImage rt%   : rt% = 0
		FreeGadget tBox1
		FreeGadget tBox2
		FreeGadget tBox3
		FreeGadget tBox4
		FreeGadget tBox5
		FreeGadget tBox6
		FreeGadget tBox7
		FreeGadget tBox8
		FreeFont arial9B%
		FreeFont arial12%
		FreeFont arial12U%
		FreeFont arial24B%
		End
	End If

	; check the Draw button
	If id=$401 Then
		If EventSource() = draw Then
			;check for valid input ranges
			Xsize = Floor(TextFieldText$(tbox1))
			If Xsize < 10 Or Xsize > 1600 Then
				Xsize = 200
				SetGadgetText tbox1,"200"
			End If
			Ysize = Floor(TextFieldText$(tbox2))
			If Ysize < 10 Or Ysize > 1200 Then
				Ysize = 160
				SetGadgetText tbox2,"160"
			End If
			Blur = Floor(TextFieldText$(tbox3))
			If Blur < 0 Or Blur > 10 Then
				Blur = 3
				SetGadgetText tbox3,"3"
			End If
			Water = Floor(TextFieldText$(tbox4))
			If Water < 1 Or Water > 50 Then
				Water= 2
				SetGadgetText tbox4,"2"
			End If
			Pixelsize = Floor(TextFieldText$(tbox5))
			If Pixelsize  < 1 Or Pixelsize  > 8 Then
				Pixelsize  = 3
				SetGadgetText tbox5,"3"
			End If
			Scale = Floor(TextFieldText$(tbox6))
			If Scale < 1 Or Scale > 50 Then
				Scale = 6
				SetGadgetText tbox6,"6"
			End If
			Height = Floor(TextFieldText$(tbox7))
			If Height < 1 Or Height > 50 Then
				Height = 4
				SetGadgetText tbox7,"4"
			End If
			Skew = Float(TextFieldText$(tbox8))
			If Skew < -10.0 Or Skew > 10.0 Then
				Skew = 0
				SetGadgetText tbox8,"0"
			End If
			
			;create color scheme
			createPalette%(colorScheme%)
			;allocate enough memory for height map size
			Dim hz%(Xsize% + 1, Ysize% + 1)
			;make a height map using randomly placed pixels
			map%(Xsize%, Ysize%, Pixelsize%, Water%)
			;create smooth color gradients between different colored pixels
			For i% = 1 To Blur%
			    smooth%(Xsize%, Ysize%)
			Next
			;make the 2.5D terrain
			terraGen(Xsize%, Ysize%, Scale%, terrainView%, Height%, Skew#)

			FlipCanvas(can1%)
		End If
	End If

	;handle a menu event 
	If id=$1001 Then 
		; evtID contains EventData() the menu ID specified during setup
		evtID=EventData() 
		Select evtID
			Case 1 
				;load saved terrain bmp
				loadName$ = ""
				loadName$ = RequestFile("Load Terrain BMP","bmp",False)
				If loadName$ <> "" Then
					pic% = LoadImage(loadName$)
					Cls
					DrawBlock pic%,0,0
					FlipCanvas(can1%)
					FreeImage pic%
					pic% = 0
				Else
					RuntimeError "Requested file NOT found!"
				End If
			Case 2
				;save terrain bmp to disk 
				saveName$ = ""
				saveName$ = RequestFile("Save Terrain BMP","*.bmp",True,"Terrain001.bmp")
				If saveName$ <> "" Then
					pic% = CreateImage(sw%-192,sh%-10)
					GrabImage pic%,0,0
					fine% = SaveImage(pic%,saveName$)
					If fine% = 0 Then
						RuntimeError "An error occurred. Image Not saved!"
					End If
					FreeImage pic%
					pic% = 0
				End If
			Case 3
				;load terrain settings from ".TRS" file
				loadName$ = ""
				loadName$ = RequestFile("Load Terrain Settings...","trs",False,"Default.trs")
				If loadName$ <> "" Then
					fileIn% = ReadFile(loadName$)
					temp$ = ReadLine(fileIn%)
					terrainView = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					colorScheme = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					SetGadgetText tbox1,temp$
					Xsize% = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					SetGadgetText tbox2,temp$
					Ysize% = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					SetGadgetText tbox3,temp$
					Blur% = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					SetGadgetText tbox4,temp$
					Water% = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					SetGadgetText tbox5,temp$
					Pixelsize% = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					SetGadgetText tbox6,temp$
					Scale% = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					SetGadgetText tbox7,temp$
					Height% = Floor(temp$)
					temp$ = ReadLine(fileIn%)
					SetGadgetText tbox8,temp$
					Skew# = Float(temp$)
					CloseFile(fileIn%)
				Else
					RuntimeError "Requested file NOT found!"
				End If
			Case 4 
				;save terrain settings to ".TRS" file
				saveName$ = ""
				saveName$ = RequestFile("Save Terrain Settings...","trs",True)
				If saveName$ <> "" Then
					fileOut% = WriteFile(saveName$)
					temp$ = Str(terrainView%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(colorScheme%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(Xsize%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(Ysize%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(Blur%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(Water%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(PixelSize%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(Scale%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(Height%)
					WriteLine(fileOut%,temp$)
					temp$ = Str(Skew#)
					WriteLine(fileOut%,temp$)
					CloseFile(fileOut%)
				Else
					RuntimeError "Filename "+saveName$+" is NOT a valid name/location!"
				End If
			Case 5 
				;free all resources then end
				FreeImage TGen% : TGen% = 0
				FreeImage ok%   : ok% = 0
				FreeImage lt%   : lt% = 0
				FreeImage rt%   : rt% = 0
				FreeGadget tBox1
				FreeGadget tBox2
				FreeGadget tBox3
				FreeGadget tBox4
				FreeGadget tBox5
				FreeGadget tBox6
				FreeGadget tBox7
				FreeGadget tBox8
				FreeFont arial9B%
				FreeFont arial12%
				FreeFont arial12U%
				FreeFont arial24B%
				End
			Case 6 ;Normal View
				terrainView = 1 
				If oldView <> chkNormal Then
					UncheckMenu oldView
					oldView = chkNormal
					CheckMenu chkNormal
					UpdateWindowMenu tg
				End If
			Case 7 ;Posterized
				terrainView = 2
				If oldView <> chkPoster Then
					UncheckMenu oldView
					oldView = chkPoster
					CheckMenu chkPoster
					UpdateWindowMenu tg
				End If
			Case 8 ;Wire Frame
				terrainView = 3
				If oldView <> chkWire Then
					UncheckMenu oldView
					oldView = chkWire
					CheckMenu chkWire
					UpdateWindowMenu tg
				End If
			Case 9 ;Sea and Turf
				colorScheme = 1
				If oldColor <> chkSea Then
					UncheckMenu oldColor
					oldColor = chkSea
					CheckMenu chkSea
					UpdateWindowMenu tg
				End If
			Case 10 ;Sand Dunes
				colorScheme = 2
				If oldColor <> chkSand Then
					UncheckMenu oldColor
					oldColor = chkSand
					CheckMenu chkSand
					UpdateWindowMenu tg
				End If
			Case 11 ;Polar Ice
				colorScheme = 3
				If oldColor <> chkPolar Then
					UncheckMenu oldColor
					oldColor = chkPolar 
					CheckMenu chkPolar 
					UpdateWindowMenu tg
				End If
			Case 12 ;Mars
				colorScheme = 4
				If oldColor <> chkMars Then
					UncheckMenu oldColor
					oldColor = chkMars
					CheckMenu chkMars
					UpdateWindowMenu tg
				End If
			Case 13 ;Venus
				colorScheme = 5
				If oldColor <> chkVenus Then
					UncheckMenu oldColor
					oldColor = chkVenus
					CheckMenu chkVenus
					UpdateWindowMenu tg
				End If
			Case 14 ;Neptune
				colorScheme = 6
				If oldColor <> chkNeptune Then
					UncheckMenu oldColor
					oldColor = chkNeptune
					CheckMenu chkNeptune
					UpdateWindowMenu tg
				End If
			Case 15 ;Midnight
				colorScheme = 7
				If oldColor <> chkGray Then
					UncheckMenu oldColor
					oldColor = chkGray
					CheckMenu chkGray
					UpdateWindowMenu tg
				End If
			Case 20 ;Help
				pic% = CreateImage(sw%-192, sh%-10)
				GrabImage pic%,0,0
				ClsColor 255,250,196
.arrows
				Cls
				Color 0,0,0
				help1(arial24B%, arial9B%)
				DrawBlock ok%,240,482
				DrawBlock rt%,485,482
				Text 260,535,"Exit Help"
				Text 470,535,"Help continued"
				FlipCanvas(can1%)
				WaitMouse()
				mx% = MouseX(can1%)
				my% = MouseY(can1%)
				If mx% > 485 And mx% < 585 And my% > 481 And my% < 528 Then
					Cls
					help2(arial24B%, arial9B%)
					DrawBlock ok%,240,482
					DrawBlock lt%,28,482
					Text 260,535,"Exit Help"
					Text 60,535,"Back"
					FlipCanvas(can1%)
					WaitMouse()
					mx% = MouseX(can1%)
					my% = MouseY(can1%)
					If mx% > 27 And mx% < 128 And my% >481 And my% < 528 Then Goto arrows
				End If
				DrawBlock pic%,0,0
				FlipCanvas(can1%)
				FreeImage pic%
				pic% = 0
				ClsColor 0,0,0
			Case 21 ;About
				pic% = CreateImage(sw%-192, sh%-10)
				GrabImage pic%,0,0
				ClsColor 255,250,196
				Cls
				Color 0,0,0
				SetFont arial24B%
				Text  70,90,"About Terrain Generator"
				SetFont arial12%
				Text  20,140,"Terrain Generator is based on 'Lands.Bas' by Per Larsson."
				Text  20,170,"Source:"
				SetFont arial12U%
				Color 0,0,255
				Text 90,200,"http://scottserver.net/basically/abc/1998pack.htm"
				Text  90,230,"http://www.qbasic.com/classic/c2.html"
				SetFont arial12%
				Color 0,0,0
				Text  20,280,"Optimizations and enhancements have been applied to"
				Text  20,310,"this conversion to make it run on just about any modern"
				Text  20,340,"Windows computer."
				Text 100,420,"This version by Andy Amaya - March 12, 2007"
				DrawBlock ok,240,455
				SetFont arial9B%
				Text 235,510,"Left-Click to Exit"
				FlipCanvas(can1%)
				WaitMouse()
				DrawBlock pic%,0,0
				FlipCanvas(can1%)
				FreeImage pic%
				pic% = 0
				ClsColor 0,0,0
		End Select
	End If			
Forever

Function createPalette%(colorScheme%)
	Local i%
	Local rgb%
	Local r%
	Local g%
	Local b%
	Select colorScheme%
		Case 1  ;Sea and Turf
			c%(1,1) = 0 : 	c%(1,2) = 60 : c%(1,3) = 128
			c%(1,0) = (c%(1,2) Shl 8) + (c%(1,3) Shl 16)
			For i% = 2 To 7
				c%(i%,1) = 0 : c%(i%,2) = i%*8 : c%(i%,3) = 0
				c%(i%,0) = (i% * 8) Shl 8
			Next
			c%(8,1) = 32 : c%(8,2) = 64 : c%(8,3) = 0
			c%(8,0) = c%(8,1) + (c%(8,2) Shl 8)
			For i% = 9 To 15
				r% = i% * 5
				g% = i% * 6
				c%(i%,1) = r% : c%(i%,2) = g% : c%(i%,3) = 0
				c%(i%,0) = r% + (g% Shl 8)
			Next
		Case 2	 ;Sand Dunes
			c%(1,1) = 96 : c%(1,2) = 64 : c%(1,3) = 16
			c%(1,0) = c%(1,1) + (c%(1,2) Shl 8) + (c%(1,3) Shl 16)
			For i%= 1 To 14
				r% = i% * 13 + 64
				g% = i% * 9 + 48
				b% = i% * 2
				c%(i%+1,1) = r% : c%(i%+1,2) = g% : c%(i%+1,3) = b%
				c%(i%+1,0) = r% + (g% Shl 8) + (b% Shl 16)
			Next
		Case 3  ;Polar Ice
			c%(1,1) = 0 : c%(1,2) = 16 : c%(1,3) = 65
			c%(1,0) = (c%(1,2) Shl 8) + (c%(1,3) Shl 16)
			For i% = 2 To 15
				rgb% = i% * 12 + 75
				c%(i%,1) = rgb% : c%(i%,2) = rgb% : c%(i%,3) = rgb%
				c%(i%,0) = rgb% + (rgb% Shl 8) + (rgb% Shl 16)
			Next
		Case 4  ;Mars
			c%(1,1) = 160 : c%(1,2) = 50 : c%(1,3) = 0
			c%(1,0) = c%(1,1) + (c%(1,2) Shl 8)
			For i% = 2 To 15
				r% = i% * 12 + 75
				g% = i% * 5
				c%(i%,1) = r% : c%(i%,2) = g% : c%(i%,3) = 0
				c%(i%,0) = r% + (g% Shl 8)
			Next
		Case 5  ;Venus
			c%(1,1) = 65 : c%(1,2) = 0 : c%(1,3) = 49
			c%(1,0) = c%(1,1) + (c%(1,3) Shl 16)
			For i% = 2 To 15
				r% = i% * 12 + 75
				b% = i% * 9
				c%(i%,1) = r% : c%(i%,2) = 0 : c%(i%,3) = b%
				c%(i%,0) = r% + (b% Shl 16)
			Next
		Case 6  ;Neptune
			c%(1,1) = 16 : c%(1,2) = 81 : c%(1,3) = 65
			c%(1,0) = c%(1,1) + (c%(1,2) Shl 16) + (c%(1,3) Shl 8)
			For i% = 2 To 15
				g% = i% * 17
				b% = i% * 17
				c%(i%,1) = 0 : c%(i%,2) = g% : c%(i%,3) = b%
				c%(i%,0) = (g% Shl 8) + (b% Shl 16)
			Next
		Case 7  ;Midnight
			For i% = 1 To 15
				rgb% = i% * 10
				c%(i%,1) = rgb% : c%(i%,2) = rgb% : c%(i%,3) = rgb%
				c%(i%,0) = rgb% + (rgb% Shl 8) + (rgb% Shl 16)
			Next
	End Select
End Function

; Create a height map using random pixels
Function map%(Xsize%, Ysize%, Pixelsize%, Water%)
	Local i%, j%, x%, y%, value%, pen%, xPos%, count%
	Cls
	For i% = 0 To Ysize% + 1
		hz%(0,         i%) = 1
		hz%(Xsize% + 1, i%) = 1
	Next
	For i% = 0 To Xsize% + 1
		hz%(i%,         0) = 1
		hz%(i%, Ysize% + 1) = 1
	Next
	If Pixelsize% = 1 Then
		pen% = 1
	Else
		pen% = Pixelsize% Shr 1
	End If
	Water% = Water% + 1

	Color 0, 160, 255
	xPos% = 10
	Text(xPos%, 20,"Mapping >")
	FlipCanvas(can1%)
	xPos% = xPos% + 70
	x% = 0
	While x% < Xsize%
		count% = count% + 1
		If count% Mod 10 = 0 Then
			xPos% = xPos% + 10
			Text(xPos%, 20,">")
			FlipCanvas(can1%)
		End If
		y% = 0
		While y% < Ysize%
			value% = Rand(1,Water%)
			If value% = 1 Then value% = 15 Else value% = 1
			If Pixelsize% = 1 Then
				hz%(x%, y%) = value%
			Else
				For j% = y% To y% + Pixelsize%
					For i% = x% To x% + Pixelsize%
						If i% <= Xsize% And j% <= Ysize% Then hz%(i%, j%) = value%
					Next
				Next
			End If
			y% = y% + Pixelsize%
		Wend
		x% = x% + Pixelsize%
	Wend
	
	Cls
	FlipCanvas(can1%)
End Function

; Smooth the raw pixels in height map by color averaging (blurring)
Function smooth%(Xsize%, Ysize%)
	Local x%, y%, z%, xPos%
	Cls
	
	Color 0,160,255: xPos% = 10
	Text(xPos%, 20,"Smoothing >")
	FlipCanvas(can1%)
	xPos% = xPos% + 80
	For y% = 0 To Ysize% -1
		If y% Mod 10 = 0 Then
			xPos% = xPos% + 10
			Text(xPos%, 20, ">")
			FlipCanvas(can1%)
		End If
		y1% = y% + 1
		For x% = 0 To Xsize% - 1
			x1% = x% + 1
			z% =      hz%(x1% - 1, y1% -1)  + hz%(x1%, y1% - 1) + hz%(x1% + 1, y1% - 1)
			z% = z% + hz%(x1% - 1, y1%)     + hz%(x1%, y1%)     + hz%(x1% + 1, y1%)
			z% = z% + hz%(x1% - 1, y1% + 1) + hz%(x1%, y1% + 1) + hz%(x1% + 1, y1% + 1)
			z% = z% / 9
			If z% < 1 Then z% = 1
			hz%(x%,y%) = z%
		Next
	Next
	Cls
	Text(10,20,"Rendering...")
	FlipCanvas(can1%)
End Function 

; Three different ways to view resultant height map
Function terraGen%(Xsize%, Ysize%, Scale%, terrainView%, Height%, Skew#)
	Local x%, y%, value%, value2%, value3%, x1%, y1%, x2%, y2%, pen%, yOffset%
	Cls
	yOffset% = Scale% * Height% + 40
	Select terrainView%
		Case 1			;Normal View
			For y% = 0 To Ysize%-2
				For x% = 0 To Xsize%-2
					value% = hz%(x%, y%)
					Color c%(value%,1), c%(value%,2), c%(value%,3)
					x1% = (x% * Scale% + y% * Skew#) + 8
					y1% = (y% * Scale% - value% * Height%) + yOffset%
					x2% = (x% * Scale% + y% * Skew#) + Scale% + 8
					y2% = y% * Scale% + (Scale% -1) + yOffset%
					Rect x1%, y1%, x2%-x1%, y2%-y1%, True
				Next
			Next
		Case 2			;Posterized
			If Scale% = 1 Then
				pen% = 1
			Else
				pen% = pen% Shr 1 + 1
			End If
			For y% = 0 To Ysize%-2
				For x% = 0 To Xsize%-2
					If hz%(x%+1,y%+1)<1 Then
						value% = 1
					Else
						value% = hz%(x%+1, y%+1)
					End If
					Color c%(value%,1), c%(value%,2), c%(value%,3)
					x1% = (x%+1) * Scale% + (y%+1) * Skew# + 8
					y1% = (y%+1) * Scale% - (value% * Height%) + yOffset%
					If Pixelsize% = 1 Then
						Plot(x1%, y1%)
					Else
						Oval x1%-pen%, y1%-pen%, Scale% , Scale% , True
					End If
				Next
			Next
		Case 3			;Wire Frame
			For y% = 0 To Ysize%-2
				For x% = 0 To Xsize%-2
					If hz%(x%,y%)<1 Then value% = 1 Else value%  = hz%(x%, y%)
					If hz%(x%+1,y%)<1 Then value2% = 1 Else value2% = hz%(x%+1, y%)
					If hz(x%,y%+1)<1 Then value3% = 1 Else value3% = hz(x%, y%+1)
					x1% = (x% * Scale% + y% * Skew#) + 8
					y1% = (y% * Scale% - value% * Height%) + yOffset%
					x2% = ((x% + 1) * Scale% + y% * Skew#) + 8
					y2% = (y% * Scale% - value2% * Height%) + yOffset%
					Color c%(value%,1), c%(value%,2), c%(value%,3)
					Line x1%, y1%, x2%, y2%
					x2% = x% * Scale% + (y% + 1) * Skew# + 8
					y2% = (y% + 1) * Scale% - value3% * Height% + yOffset%
					Line x1%, y1%, x2%, y2%
				Next
			Next
	End Select
End Function

Function help1(arial24B%, arial9B%)
	SetFont arial24B%
	Text 100, 5,"Terrain Generator Help"
	SetFont arial9B%
	Text  10, 60, "File Menu:"
	Text  10, 80, "    Load Terrain BMP - loads a saved terrain from the current folder"
	Text  10,100, "    Save Terrain BMP - saves on screen terrain to the current folder"
	Text  10,120, "    Load Terrain Settings - loads your saved settings (Width, Length,"
	Text 215,140, "Blur, etc..) from the current folder"
	Text  10,160, "    Save Terrain Settings - saves the Width, Length, Blur, etc..."
	Text 215,180, "values to the current folder for later retrieval."
	Text  10,200, "Map View Menu:"
	Text  10,220, "    Normal View"
	Text 133,220, "- fully renders the terrain"
	Text  10,240, "    Posterized"
	Text 133,240, "- partially renders the terrain"
	Text  10,260, "    Wire Frame"
	Text 133,260, "- structural render of the terrain"
	Text  10,290, "Color Scheme:"
	Text  10,310, "    Nature"
	Text 130,310, "- renders blue water and graduated shades of green"
	Text  10,330, "    Sand Dunes"
	Text 130,330, "- renders in graduated shades of yellow"
	Text  10,350, "    Polar Ice"
	Text 130,350, "- renders blue water and graduated shades of white"
	Text  10,370, "    Mars"
	Text 130,370, "- renders in graduated shades of red"
	Text  10,390, "    Venus"
	Text 130,390, "- renders in graduated shades of magenta"
	Text  10,410, "    Neptune"
	Text 130,410, "- renders in graduated shades of cyan"
	Text  10,430, "    Midnight"
	Text 130,430, "- renders in graduated shades of gray"
	Text  10,460, "Draw Terrain Button - click to render terrain at current settings"
End Function

Function help2(arial24b%, arial9B%)
	SetFont arial24B%
	Text 100, 5,"Terrain Generator Help"
	SetFont arial9B%
	Text  10, 90,"Here's how the settings affect your terrain:"
	Text  10,120,"Width  - sets the width of the map used to generate the terrain"
	Text  78,140,"valid range is 10 => Width <= 1600"
	Text  10,160,"Length - sets the height of the map used to generate the terrain"
	Text  78,180,"valid range is 10 => Length <= 1600"
	Text  10,200,"Blur     - more blur creates less jagged terrains"
	Text  78,220,"valid range is 0 => Blur <= 10"
	Text  10,240,"Water  - sets the amount of water visible in terrain"
	Text  78,260,"valid range is 1 => Water <= 50"
	Text  10,280,"Pixelsize - size of pixel used to create the random map"
	Text  93,300,"valid range is 1 => Pixelsize <= 8"
	Text  10,320,"Scale   - makes your terrain bigger or smaller"
	Text  78,340,"valid range is 1 => Scale <= 50"
	Text  10,360,"Height - makes terrain mountains higher or lower"
	Text  78,380,"valid range is 1 => Height <= 50"
	Text  10,400,"Skew   - makes terrain lean left, right, or not at all (zero)"
	Text  78,420,"valid range is -10.0 => Skew <= 10.0"
End Function[/code]

Comments

None.

Code Archives Forum