Gosub GlobalVariableDeclaration
`Display Setup
Global Width
Global Height
Width = Desktop Width()
Height = Desktop Height()
Global Sw = Width
Global Sh = Height
Set Display Mode Width, Height, 32, 1
Set Window On
Set Window Layout 0, 0, 0
Set Window Position 0, 0
Sync On
Sync Rate 60
Set Camera Range 0, 1, 100000
Set Camera Fov 0, 85
`World Setup
LoadSky(5, 10)
Rts Set Hour 6
LoadTerrain("test2", 0.3)
`Make Water(Objnum , Fxnum ,Imgnum ,Imgsize, Water Height)
Water = Find Free Object()
WaterImage = Find Free Image()
MakeWater(Water, 500, WaterImage, 512, 0 , 10000, 10000)
`Player Setup
Player = Find Free Object()
Make OBJect Cube Player, 1
Do
Gosub GUIHandler
Gosub PlayerHandler
Gosub CameraHandler
UpdateSky()
UpDateWater()
Sync
Loop
GUIHandler:
Text 10, 10, " "
Text 10, 10, "FPS: " + Str$(Screen FPS())
Text 10, 20, " "
Text 10, 20, "Player X: " + Str$(Int(PlayerX()))
Text 10, 30, " "
Text 10, 30, "Player Y: " + Str$(Int(PlayerY()))
Text 10, 40, " "
Text 10, 40, "Player Z: " + Str$(Int(PlayerZ()))
Text 10, 50, " "
Text 10, 50, "Time: " + Str$(Rts Get Hour()) + ":" + Str$(Rts Get Minutes()) + ":" + Str$(Rts Get Seconds())
Return
PlayerHandler:
If Keystate(17) = 1 Then Move Object Player, PlayerSpeed
If Keystate(31) = 1 Then Move Object Player, -PlayerSpeed
If Keystate(30) = 1 Then Yrotate Object Player, PlayerAngleY() - PlayerTurnSpeed
If Keystate(32) = 1 Then Yrotate Object Player, PlayerAngleY() + PlayerTurnSpeed
Position Object Player, PlayerX(), 1 + BT GetGroundHeight(TerrainID, PlayerX(), PlayerZ()), PlayerZ()
Return
CameraHandler:
CameraDistance = CameraDistance - (MouseMoveZ() / 30)
If CameraDistance < 10 Then CameraDistance = 10
Set Camera To Follow PlayerX(), PlayerY(), PlayerZ(), PlayerAngleY(), CameraDistance, CameraDistance * 0.8, 5, 1
Return
Function LoadTerrain(Name$, YScale#)
Global Terrain
Global TerrainID
HM = Find Free Image()
Load Image "Files\Terrain\" + Name$ + "\HM.png", HM
Tex = Find Free Image()
Load Image "Files\Terrain\" + Name$ + "\Tex.png", Tex
Terrain = Find Free OBJect()
TerrainID = BT MakeTerrain()
Bt Setterraintexture TerrainID, Tex
Bt Setterrainheightmap TerrainID, HM
Bt Setterrainyscale TerrainID, YScale#
Bt Buildterrain TerrainID, Terrain, 1
Bt Enableautorender 0
Endfunction
Function LoadSky(TimeSpeed#, CloudDensity)
Backdrop On
Fog On
Color Backdrop 0 : Clear Camera View 0
Dim Obj(7)
Rts Set Auto Zoom 1.0
Rts Fog On
Rts Setup Skybox "RTS_DesertMountain2", 0
Rts Set Clock 0 , 0 , TimeSpeed#
Rts Set Wind Speed 0.00005, 0.00001
Rts Set Cloud Density CloudDensity
Rts Set Mist Density 0
Set Camera Range 1 , 100000
Clear Camera View 0 , Rgb( 0 , 0 , 0 )
Endfunction
Function UpdateSky()
Rts Update Skybox
If Rts Get Hour() < 12
DaylightFactor# = ((12*60) - ((Rts Get Hour()*60) + Rts Get Minutes())) * 0.3541666666666667
Else
DaylightFactor# = (((Rts Get Hour()*60) + Rts Get Minutes()) - (12*60)) * 0.3541666666666667
Endif
If DaylightFactor# > 200 Then DaylightFactor = 200
Set Object Emissive Terrain, Rgb(255 - DaylightFactor#, 255 - DaylightFactor#, 255 - DaylightFactor#)
If Rts Get Hour() < 5
`DisableShadows()
Else
`EnableShadows()
Endif
If Rts Get Hour() > 18 Then `DisableShadows()
Endfunction
Function DisableShadows()
Set Shadow Shading Off Player
For OBJect = 1 To 1000
If OBJectNumber(Object) <> 0 Then Set Shadow Shading Off ObjectNumber(Object)
Next Object
Endfunction
Function EnableShadows()
Set Shadow Shading On Player
For OBJect = 1 To 1000
If OBJectNumber(Object) <> 0 Then Set Shadow Shading On ObjectNumber(Object)
Next Object
Endfunction
````WATER STUFF````
//--------------
` Create Water
//--------------
function MakeWater(Obj,Shader,Img,ImgSize,Height#, XSize, ZSize)
`Globals
global WaterObj=Obj
global WaterHeight#=Height#
global Fx=Shader
`Setup Cameras
Sw#=width:Sh#=height
for c=1 to 2
make camera c
set camera range c,1,100000
set camera aspect c,Sw#/Sh#
backdrop off c
set camera to image c,Img+(c-1),ImgSize,ImgSize
set camera fov c,85
next c
set current camera 0
`Make Water plain
load image "Media/Waves.dds",Img+2
load image "Media/Fresnel.bmp",Img+3
load image "Media/WaterMask.bmp",Img+4
make object plain WaterObj,XSize,ZSize
position object WaterObj, -500, 0, -500
texture object WaterObj,0,Img
texture object WaterObj,1,Img+1
texture object WaterObj,2,Img+2
texture object WaterObj,3,Img+3
texture object WaterObj,4,Img+4
xrotate object WaterObj,270
load effect "FX/Water.fx",Fx,0
set object effect WaterObj,Fx
set object transparency WaterObj,1
set object emissive waterobj, rgb(0,0,255)
endfunction
//--------------
` Update Water
//--------------
function UpDateWater()
`UpDate Water plain
position object WaterObj,object position x(WaterObj),WaterHeight#,object position z(WaterObj)
Hide object WaterObj
`Upade Refract/Reflect cameras
set effect technique Fx,"Refract"
UpDateRefraction()
if camera position y()>WaterHeight#
set effect technique Fx,"ReflectRefract"
UpDateReflection()
else
//fog on:fog color rgb(55,65,75)
//fog distance 300
endif
`Show Water
show object WaterObj
sync mask 2^0
BT SetCurrentCamera 0
BT RenderTerrain TerrainID
endfunction
function UpDateRefraction()
position camera 1,camera position x(),camera position y(),camera position z()
rotate camera 1,camera angle x(),camera angle y(),camera angle z()
BT SetCurrentCamera 1
BT UpdateTerrainCull TerrainID
BT UpdateTerrainLOD TerrainID
BT RenderTerrain TerrainID
if camera position y()>WaterHeight#
//set camera clip 1,1,0,WaterHeight#+FOV,0,0,-1,0
set camera clip 1,1,0,0,0,0,-1,0
//fog on:fog color rgb(55,65,75)
//fog distance 250+(camera position y()-WaterHeight#)*10
else
//set camera clip 1,1,0,WaterHeight#-30,0,0,1,0
set camera clip 1,1,0,0,0,0,1,0
//fog off
endif
set camera clip 2,0,0,0,0,0,0,0
sync mask 2^1
fastsync
//fog off
endfunction
function UpDateReflection()
position camera 2,camera position x(),WaterHeight#-(camera position y()-WaterHeight#),camera position z()
rotate camera 2,-camera angle x(),camera angle y(),camera angle z()
BT SetCurrentCamera 2
BT UpdateTerrainCull TerrainID
BT RenderTerrain TerrainID
set camera clip 1,0,0,0,0,0,0,0
//set camera clip 2,1,0,WaterHeight#-15,0,0,1,0
set camera clip 2,1,0,0,0,0,1,0
sync mask 2^2
fastsync
endfunction
You'll have to disable the sky if you don't have extends
Position Object Game Master1330, Object Position X(Reader), Object Position Y(Reader), Object Position Z(Reader) - 5
Hide Object Game Master1330