This works, you had to replace the 2 random vars to something else.
I used randomValue.
Rem ***** Main Source File *****
REM SCREEN INIT
Sync Rate 60 : Sync On : AutoCam Off : Backdrop On
Set Camera Range 0, 0.1, 10000 : Set Camera Fov 62
Set Normalization On
Set Ambient Light 75
REM MAKE LEVEL
oTerrain = terrainCreate("1", 2.0, 0.0, 0.0, 0.0)
vegetationCreate("1", oTerrain, 100, 32, 255, 0, 1)
GLOBAL mx, my, mz, mmx, mmy, mmz
setMouse(0)
While Not EscapeKey()
setMouse(0)
ax# = WrapValue(ax# + mmy)
ay# = WrapValue(ay# + mmx)
Rotate Camera ax#, ay#, 0.0
If MouseClick()=1 Then Move Camera 5
If MouseClick()=2 Then Move Camera -5
vegetationUpdate(400)
Print freeObject()
GOSUB Info
Sync
EndWhile
End
Function vegetationUpdate(minDistance As Integer)
For i = 1 To Array Count(vegetation())
If Object Exist(vegetation(i))
If getDistanceObjToCam(vegetation(i)) > minDistance
Exclude Object On vegetation(i)
Else
Exclude Object Off vegetation(i)
Point Object vegetation(i), Camera Position X(), Object Position Y(vegetation(i)), Camera Position Z()
EndIf
EndIf
Next i
EndFunction
Function vegetationCreate(folder As String, terrain As Integer, minHeight As Integer, grassSize As Integer, grassColor As Byte, treeColor As Byte, randomValue As Boolean)
grass1Obj = freeObject() : Make Object Plain grass1Obj, grassSize, grassSize, 1
grass1Img = freeImage() : Load Image folder + "/grass/grass1.tga", grass1Img
Texture Object grass1Obj, grass1Img : Set Object Transparency grass1Obj, 6
Offset Limb grass1Obj, 0, 0, Object Size Y(grass1Obj)/2.0, 0
grass2Obj = freeObject() : Make Object Plain grass2Obj, grassSize, grassSize, 1
grass2Img = freeImage() : Load Image folder + "/grass/grass2.tga", grass2Img
Texture Object grass2Obj, grass2Img : Set Object Transparency grass2Obj, 6
Offset Limb grass2Obj, 0, 0, Object Size Y(grass2Obj)/2.0, 0
grass3Obj = freeObject() : Make Object Plain grass3Obj, grassSize, grassSize, 1
grass3Img = freeImage() : Load Image folder + "/grass/grass3.tga", grass3Img
Texture Object grass3Obj, grass3Img : Set Object Transparency grass3Obj, 6
Offset Limb grass3Obj, 0, 0, Object Size Y(grass3Obj)/2.0, 0
grass4Obj = freeObject() : Make Object Plain grass4Obj, grassSize, grassSize, 1
grass4Img = freeImage() : Load Image folder + "/grass/grass4.tga", grass4Img
Texture Object grass4Obj, grass4Img : Set Object Transparency grass4Obj, 6
Offset Limb grass4Obj, 0, 0, Object Size Y(grass4Obj)/2.0, 0
DIM vegetation(0) As Integer
bmpPlantMap = freeBitmap()
Load Bitmap folder + "/plant.bmp", bmpPlantMap
Set Current Bitmap bmpPlantMap
Local color As dWord
For x = 1 To Bitmap Width(bmpPlantMap)
For z = 1 To Bitmap Height(bmpPlantMap)
color = RgbG(Point(x,z))
If color = grassColor
x# = (Object Size X(terrain) / Bitmap Width(bmpPlantMap) * x) - (Object Size X(terrain)/2.0)
z# = (Object Size Z(terrain) / Bitmap Height(bmpPlantMap) * z) - (Object Size Z(terrain)/2.0)
If randomValue = 1
x# = x# + (Rnd(grassSize)-(grassSize/2.0))
z# = z# + (Rnd(grassSize)-(grassSize/2.0))
EndIf
y# = Get Terrain Ground Height (terrain, x#, z#)
If y# < minHeight
Array Insert At Bottom vegetation()
arrayCount = Array Count(vegetation())
obj = freeObject()
vegetation(arrayCount) = obj
sourceObj = Rnd(3)+1
If sourceObj = 1 Then Instance Object obj, grass1Obj
If sourceObj = 2 Then Instance Object obj, grass2Obj
If sourceObj = 3 Then Instance Object obj, grass3Obj
If sourceObj = 4 Then Instance Object obj, grass4Obj
Position Object obj, x#, y#, z#
EndIf
EndIf
Next z
Next x
Set Current bitmap 0
Delete Bitmap bmpPlantMap
EndFunction
Info:
Set Cursor 0, 0
Print "Fps: ",Screen Fps()
Print "Static: ", Statistic(1)
`Paste Image showImage, 576, 0
Return
`>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
`folder = terrains folder
`s = size
`x,y,z = position coordinates
Function terrainCreate(folder As String, s As Float, x As Float, y As Float, z As Float)
imgC = freeImage() : Load Image folder + "/color.bmp", imgC
imgD = freeImage() : Load Image folder + "/detail.tga", imgD
oTer = freeObject()
Make Object Terrain oTer
Set Terrain Heightmap oTer, folder + "/height.bmp"
Set Terrain Scale oTer, 5.0*s, 0.5*s, 5.0*s
Set Terrain Split oTer, 8
Set Terrain Tiling oTer, 4
`Set Terrain Light oTer, x#, y#, z#, 1, 1, 0.78, 0.5
Set Terrain Texture oTer, imgC, imgD
Build Terrain oTer
Position Object oTer, x-Object Size X(oTer)/2.0, y, z-Object Size Z(oTer)/2.0
Set Object Light oTer, 1
EndFunction oTer
`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
`>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Function getDistanceObjToCam(o As Integer)
xd# = Camera Position x() - Object Position x(o)
yd# = Camera Position y() - Object Position y(o)
zd# = Camera Position z() - Object Position z(o)
Distance# = ((xd#*xd#) + (yd#*yd#) + (zd#*zd#))^0.5
EndFunction Distance#
`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
`>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Function setMouse(debug As Boolean)
mx = mouseX() : my = mouseY() : mz = mouseZ()
mmx = mouseMoveX() : mmy = mouseMoveY() : mmz = mouseMoveZ()
If debug > 0
Center Text mx, my+14, "Mx: "+Str$(mx)
Center Text mx, my+28, "My: "+Str$(my)
EndIf
endFunction
`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
`>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Function freeBitmap()
Repeat
Inc i
Until Bitmap Exist(i) = 0
EndFunction i
`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
`>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Function freeImage()
Repeat
Inc i
Until Image Exist(i) = 0
EndFunction i
`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
`>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
Function freeObject()
Repeat
Inc i
Until Object Exist(i) = 0
EndFunction i
`<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<