This is the latest (with Perlin and 40k blocks)
sorry but we will have to put the inventory items on this one and the click3dobject you created for when we hover over any blocks and the add block function
// Project: Craft-A-Lite v3
// Created: 2018-02-25
// show all errors
SetErrorMode(2)
#constant screenwidth=800
#constant screenheight=800
// set window properties
SetWindowTitle( "Craft-A-Lite v3" )
SetWindowSize( screenwidth,screenheight, 1 )
SetWindowAllowResize( 1 ) // allow the user to resize the window
// set display properties
SetVirtualResolution( screenwidth,screenheight ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 1200, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
// setup perlinmapdata
#constant perlinw = 1000
#constant perlinh = 1000
#constant perlinz = 50
type _perlinmap
r
g
b
a
noise
endtype
// initalise the area map (192x192x256 - this will store locations of each added / deleted block
// this will be used to do Load/Save feature later on and move with the map
global perlinmap as _perlinmap[perlinw,perlinh,10]
#constant mapx=200
#constant mapy=200
#constant mapz=200
type _blocks
id
x#
y#
z#
endtype
global blocks as _blocks[mapx,mapy,mapz]
global angx#,angy#,startx#,starty#,player,blockcount,mapsprite,cube
// start perlin map data
NoiseInit()
mapimg=generateperlinimage()
mapsprite = CreateSprite(mapimg)
SetSpriteSize(mapsprite,100,100)
SetSpritePosition(mapsprite,screenwidth-100,10)
// end
setupskyandfog()
generatechunk()
SetCameraRange(1,.01,300)
SetRawMousePosition(1024/2,768/2)
//Get the starting coordingates for the mouse (the mouse always stays in centre of screen and the camera's move
startx# = getpointerx()
starty# = GetPointerY()
angx# = GetCameraAngleX(1)
angy# = GetCameraAngleY(1)
SetCameraPosition(1,getobjectx(blocks[mapx/2,mapy/2,0].id),getobjecty(blocks[mapx/2,mapy/2,0].id)+4,getobjectz(blocks[mapx/2,mapy/2,0].id))
// End
do
if GetRawKeyState(37) then movemap(-1,0)
if GetRawKeyState(39) then movemap(1,0)
if GetRawKeyState(38) then movemap(0,-1)
if GetRawKeyState(40) then movemap(0,1)
if GetRawKeyPressed(27) then end
movecamerawithmouse()
// cull_objs_behind_camera(1)
print ("Blocks - " + str(blockcount))
print(GetPolygonsDrawn())
Print( ScreenFPS() )
Sync()
loop
function generatechunk()
// build chunk
cube=createobjectOurOwn()
blockcount=0
z=0
for a=0 to mapx
for b=0 to mapy
blocks[a,b,z].id = InstanceObject(cube)
blocks[a,b,z].x# = a-mapx/2
blocks[a,b,z].y# = perlinmap[a,b,z].noise
blocks[a,b,z].z# = b-mapy/2
SetObjectPosition(blocks[a,b,z].id,a-mapx/2,perlinmap[a,b,z].noise,b-mapy/2)
SetObjectColor(blocks[a,b,z].id,perlinmap[a,b,z].r,perlinmap[a,b,z].g,perlinmap[a,b,z].b,255)
inc blockcount
next
next
endfunction
function movemap(xvalue#,zvalue#)
SetCameraPosition(1,GetCameraX(1)-xvalue#,getcameray(1),getcameraz(1)+zvalue#)
endfunction
function movecamerawithmouse()
// SetSpritePosition(mouse,screenwidth/2,screenheight/2)
fDiffX# = (GetPointerX() - startx#)
fDiffY# = (GetPointerY() - starty#)
newX# = angx# + fDiffY#
if ( newX# > 40 ) then newX# = 40
if ( newX# < -60 ) then newX# = -60
SetCameraRotation( 1, newX#, angy# + fDiffX#, 0 )
// SetSpriteAngle(player,angy# + fDiffX#)
// These positions the block/weapon as if in the hand
// SetObjectRotation(playerblocks[0],newX#,angy#+fDiffX#,0)
// SetObjectPosition(playerblocks,.012,1.95,-.1)
// SetObjectRotation(player,3.6,fDiffX#,angy#)
endfunction
function createobjectOurOwn()
objfile = OpenToWrite("cube.obj")
WriteLine(objfile,"v -0.500000 -0.500000 0.500000")
WriteLine(objfile,"v 0.500000 -0.500000 0.500000")
WriteLine(objfile,"v -0.500000 0.500000 0.500000")
WriteLine(objfile,"v 0.500000 0.500000 0.500000")
WriteLine(objfile,"v -0.500000 0.500000 -0.500000")
WriteLine(objfile,"v 0.500000 0.500000 -0.500000")
WriteLine(objfile,"v -0.500000 -0.500000 -0.500000")
WriteLine(objfile,"v 0.500000 -0.500000 -0.500000")
WriteLine(objfile,"vt 0.000000 0.000000")
WriteLine(objfile,"vt 1.000000 0.000000")
WriteLine(objfile,"vt 0.000000 1.000000")
WriteLine(objfile,"vt 1.000000 1.000000")
WriteLine(objfile,"vn 0.000000 0.000000 1.000000")
WriteLine(objfile,"vn 0.000000 1.000000 0.000000")
WriteLine(objfile,"vn 0.000000 0.000000 -1.000000")
WriteLine(objfile,"vn 0.000000 -1.000000 0.000000")
WriteLine(objfile,"vn 1.000000 0.000000 0.000000")
WriteLine(objfile,"vn -1.000000 0.000000 0.000000")
WriteLine(objfile,"s 1")
WriteLine(objfile,"f 1/1/1 2/2/1 3/3/1")
WriteLine(objfile,"f 3/3/1 2/2/1 4/4/1")
WriteLine(objfile,"s 2")
WriteLine(objfile,"f 3/1/2 4/2/2 5/3/2")
WriteLine(objfile,"f 5/3/2 4/2/2 6/4/2")
WriteLine(objfile,"s 3")
WriteLine(objfile,"f 5/4/3 6/3/3 7/2/3")
WriteLine(objfile,"f 7/2/3 6/3/3 8/1/3")
WriteLine(objfile,"s 4")
WriteLine(objfile,"f 7/1/4 8/2/4 1/3/4")
WriteLine(objfile,"f 1/3/4 8/2/4 2/4/4")
WriteLine(objfile,"s 5")
WriteLine(objfile,"f 2/1/5 8/2/5 4/3/5")
WriteLine(objfile,"f 4/3/5 8/2/5 6/4/5")
WriteLine(objfile,"s 6")
WriteLine(objfile,"f 7/1/6 1/2/6 5/3/6")
WriteLine(objfile,"f 5/3/6 1/2/6 3/4/6")
CloseFile(objfile)
cube=LoadObject("cube.obj")
endfunction cube
function generateperlinimage()
// Generate image from memblock
size = perlinw * perlinh * 4 + 12
mem = CreateMemblock(size)
SetMemblockInt(mem,0,perlinw)
SetMemblockInt(mem,4,perlinh)
SetMemblockInt(mem,8,32)
offset as integer = 12
a as float, b as float
a = 5.0
b = 2.0
for y = 0 to perlinh - 1
for x = 0 to perlinw - 1
a = a + 0.0001
b = b + 0.002
// Try out these two noise methods
//noise = 255.0*Noise2D(x/10.0,y/10.0)
noise = 255.0*Noise2D(x/255.0,y/255.0)
noise = abs(noise)
//if x<chunksize# and y<chunksize# then
perlinmap[x,y,0].noise=noise/13
//clouds
if noise>255
perlinmap[x,y,0].r = noise
perlinmap[x,y,0].g = noise
perlinmap[x,y,0].b = noise
SetMemblockByte(mem, offset, noise)
SetMemblockByte(mem, offset+1, noise)
SetMemblockByte(mem, offset+2, noise)
SetMemblockByte(mem, offset+3, 255)
endif
//greenary
if noise>100 and noise<=255
perlinmap[x,y,0].r = 0
perlinmap[x,y,0].g = noise
perlinmap[x,y,0].b = 0
SetMemblockByte(mem, offset, 0)
SetMemblockByte(mem, offset+1, noise)
SetMemblockByte(mem, offset+2, 0)
SetMemblockByte(mem, offset+3, 255)
endif
//sand
if noise>50 and noise<=100
perlinmap[x,y,0].r = noise
perlinmap[x,y,0].g = noise
perlinmap[x,y,0].b = 0
SetMemblockByte(mem, offset, noise)
SetMemblockByte(mem, offset+1, noise)
SetMemblockByte(mem, offset+2, 0)
SetMemblockByte(mem, offset+3, 255)
endif
// water
if noise<=50
perlinmap[x,y,0].r = 0
perlinmap[x,y,0].g = 0
perlinmap[x,y,0].b = noise
SetMemblockByte(mem, offset, 0)
SetMemblockByte(mem, offset+1, 0)
SetMemblockByte(mem, offset+2, noise)
SetMemblockByte(mem, offset+3, 255)
endif
offset = offset + 4
next
next
map=CreateImageFromMemblock(mem)
DeleteObject(mem)
endfunction map
// interopolation for RGB
// send in colorfrom
// colorto - this maybe sky color
// t - time it takes so this could be travelling down to earth
/*
to be converted
public static Color LerpRGB (Color a, Color b, float t)
{
return new Color
(
a.r + (b.r - a.r) * t,
a.g + (b.g - a.g) * t,
a.b + (b.b - a.b) * t,
a.a + (b.a - a.a) * t
);
}
*/
// ***************************************************************************************************
// Ken Perlin's Simplex Noise 2D. AGK Version.
// Ported from Stefan Gustavson's Java implementation
// (http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf)
// 2015.02.03
// AGK reference https://forum.thegamecreators.com/thread/213532
// Thank you Thank you
#constant PN3DF2 = 0.5*(sqrt(3.0)-1.0)
#constant PN3DG2 = (3.0-sqrt(3.0))/6.0
Type sPNVECTOR
x as float
y as float
z as float
endtype
Global PNHash as integer[512]
Global PNGrad3 as sPNVECTOR[256]
Function NoiseInit()
Local n as integer, rn as integer
For n=0 To 255
PNHash[n] = n
Next n
For n=0 To 255
rn=Random(0, 255)
PNHash.swap(n,rn)
Next n
For n=0 To 255
PNHash[256 + n] = PNHash[n]
Next n
PNHash[511] = PNHash[0]
For n=0 To 15
PNGrad3[n * 16 + 0].x = 1 : PNGrad3[n * 16 + 0].y = 1 : PNGrad3[n * 16 + 0].z = 0
PNGrad3[n * 16 + 1].x = -1 : PNGrad3[n * 16 + 1].y = 1 : PNGrad3[n * 16 + 1].z = 0
PNGrad3[n * 16 + 2].x = 1 : PNGrad3[n * 16 + 2].y = -1 : PNGrad3[n * 16 + 2].z = 0
PNGrad3[n * 16 + 3].x = -1 : PNGrad3[n * 16 + 3].y = -1 : PNGrad3[n * 16 + 3].z = 0
PNGrad3[n * 16 + 4].x = 1 : PNGrad3[n * 16 + 4].y = 0 : PNGrad3[n * 16 + 4].z = 1
PNGrad3[n * 16 + 5].x = -1 : PNGrad3[n * 16 + 5].y = 0 : PNGrad3[n * 16 + 5].z = 1
PNGrad3[n * 16 + 6].x = 1 : PNGrad3[n * 16 + 6].y = 0 : PNGrad3[n * 16 + 6].z = -1
PNGrad3[n * 16 + 7].x = -1 : PNGrad3[n * 16 + 7].y = 0 : PNGrad3[n * 16 + 7].z = -1
PNGrad3[n * 16 + 8].x = 0 : PNGrad3[n * 16 + 8].y = 1 : PNGrad3[n * 16 + 8].z = 1
PNGrad3[n * 16 + 9].x = 0 : PNGrad3[n * 16 + 9].y = -1 : PNGrad3[n * 16 + 9].z = 1
PNGrad3[n * 16 + 10].x = 0 : PNGrad3[n * 16 + 10].y = 1 : PNGrad3[n * 16 + 10].z = -1
PNGrad3[n * 16 + 11].x = 0 : PNGrad3[n * 16 + 11].y = -1 : PNGrad3[n * 16 + 11].z = -1
PNGrad3[n * 16 + 12].x = 1 : PNGrad3[n * 16 + 12].y = 1 : PNGrad3[n * 16 + 12].z = 0
PNGrad3[n * 16 + 13].x = -1 : PNGrad3[n * 16 + 13].y = 1 : PNGrad3[n * 16 + 13].z = 0
PNGrad3[n * 16 + 14].x = 0 : PNGrad3[n * 16 + 14].y = -1 : PNGrad3[n * 16 + 14].z = 1
PNGrad3[n * 16 + 15].x = 0 : PNGrad3[n * 16 + 15].y = -1 : PNGrad3[n * 16 + 15].z = -1
Next n
endfunction
function Noise2D(xin as float, yin as float)
local n0 as float, n1 as float, n2 as float, s as float, t as float, x0 as float, y0 as float, xs as float, ys as float
local i as integer, j as integer, i1 as integer, j1 as integer, i2 as integer, j2 as integer, gi0 as integer, gi1 as integer, gi2 as integer
local x1 as float, y1 as float, x2 as float, y2 as float, x3 as float, y3 as float, t0 as float, t1 as float, t2 as float
s = (xin + yin) * PN3DF2
xs = xin + s
i = floor(xs)
ys = yin + s
j = floor(ys)
t = (i + j) * PN3DG2
x0 = xin - (i - t)
y0 = yin - (j - t)
if x0>y0
i1=1
j1=0
else
i1=0
j1=1
endif
x1 = x0 - i1 + PN3DG2
y1 = y0 - j1 + PN3DG2
x2 = x0 - 1.0 + 2.0 * PN3DG2
y2 = y0 - 1.0 + 2.0 * PN3DG2
i = i && 255
j = j && 255
gi0 = PNHash[i + PNHash[j]] && 15
gi1 = PNHash[i + i1 + PNHash[j + j1]] && 15
gi2 = PNHash[i + 1 + PNHash[j+ 1]] && 15
t0 = 0.5 - x0*x0-y0*y0
if t0<0
n0 = 0.0
else
t0 = t0 * t0
n0 = t0 * t0 * (PNGrad3[gi0].x * x0 + PNGrad3[gi0].y * y0)
endif
t1 = 0.5 - x1*x1-y1*y1
if t1<0
n1 = 0.0
else
t1 = t1 * t1
n1 = t1 * t1 * (PNGrad3[gi1].x * x1 + PNGrad3[gi1].y * y1)
endif
t2 = 0.5 - x2*x2-y2*y2
if t2<0
n2 = 0.0
else
t2 = t2 * t2
n2 = t2 * t2 * (PNGrad3[gi2].x * x2 + PNGrad3[gi2].y * y2)
endif
endfunction 70.0 * (n0 + n1 + n2)
function setupskyandfog()
// setup a skybox
SetSunActive(1)
SetSkyBoxHorizonSize(4.1,4)
SetSkyBoxHorizonColor(90,132,150)//nice horizon blue
SetSkyBoxSkyColor(0,122,193)//thunder horison thunderblue
SetSkyBoxVisible(1)
SetFogColor(155,155,155)
SetFogRange(mapx/2,1000)
SetFogMode(0)
plane=CreateObjectPlane(10000,10000)
SetObjectRotation(plane,90,0,0)
SetObjectColor(plane,0,0,50,255)
endfunction
function GetObjectInFront(obj, cam)
x1# = GetCameraX(cam)
y1# = GetCameraY(cam)
z1# = GetCameraZ(cam)
dx# = GetObjectX(obj) - x1#
dy# = GetObjectY(obj) - y1#
dz# = GetObjectZ(obj) - z1#
d# = sqrt(dx#*dx# + dy#*dy# + dz#*dz#)
ux1# = dx#/d#
uy1# = dy#/d#
uz1# = dz#/d#
d# = 1000
MoveCameraLocalZ(cam, d#)
dx# = GetCameraX(cam) - x1#
dy# = GetCameraY(cam) - y1#
dz# = GetCameraZ(cam) - z1#
MoveCameraLocalZ(cam, -d#)
ux2# = dx#/d#
uy2# = dy#/d#
uz2# = dz#/d#
res# = ux1# * ux2# + uy1# * uy2# + uz1# * uz2#
angle# = acos(res#)
inFront = 0
////////CHANGE THIS////////////
if angle# < 90 then inFront = 1
endfunction inFront
function cull_objs_behind_camera(mode) /// adapted to my own project but the jist is too cull all objects
z=0
for x = 0 to mapx
for y = 0 to mapy
// for z=0 to chunksizedepth#
if GetObjectExists( blocks[x,y,z].id )
v = GetObjectInFront( blocks[x,y,z].id, 1 )
if mode=1
if v = 0
// DeleteObject(blocks[x,y,z].id)
//SetObjectVisible(blocks[x,y,z].id,0)9979
if x-2>0 and z-2>0
blocks[x,y,z].x# = blocks[x-2,y,z-2].x#-1
blocks[x,y,z].y# = blocks[x-2,y,z-2].y#
blocks[x,y,z].z# = blocks[x-2,y,z-2].z#-1
SetObjectPosition(blocks[x,y,z].id,blocks[x,y,z].x#,blocks[x,y,z].y#,blocks[x,y,z].z#)
endif
endif
if v = 1
// blocks[x,y,z].id=InstanceObject(cube)
// SetObjectVisible(blocks[x,y,z].id,1)
endif
else
SetObjectVisible(blocks[x,y,z].id,1)
endif
else
/* blocks[x,y,z].id = InstanceObject(cube)
blocks[x,y,z].x# = x-mapx/2
blocks[x,y,z].y# = perlinmap[x,y,z].noise
blocks[x,y,z].z# = y-mapy/2
SetObjectPosition(blocks[x,y,z].id,x-mapx/2,perlinmap[x,y,z].noise,y-mapy/2)
SetObjectColor(blocks[x,y,z].id,perlinmap[x,y,z].r,perlinmap[x,y,z].g,perlinmap[x,y,z].b,255)
*/
endif
// next
next
next
endfunction
This is the one with the inventory items / add and click3dobject - just its gone to pot - got the thunder effect on this one too
// Project: rollingmap
// Created: 2018-02-13
// show all errors
SetErrorMode(2)
#constant screenwidth=800
#constant screenheight = 600
// set window properties
SetWindowTitle( "rollingmap" )
SetWindowSize( screenwidth, screenheight, 1 )
SetWindowAllowResize( 1 ) // allow the user to resize the window
// set display properties
SetVirtualResolution( screenwidth, screenheight ) // doesn't have to match the window
SetOrientationAllowed( 1, 1, 1, 1 ) // allow both portrait and landscape on mobile devices
SetSyncRate( 1200, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts
//SetVSync(1)
// iniaialise variables that dont change
// Set window properties
#constant perlinw = 1024
#constant perlinh =1024
#constant perlinz = 255
type _perlinmap
r
g
b
a
noise
endtype
// initalise the area map (192x192x256 - this will store locations of each added / deleted block
// this will be used to do Load/Save feature later on and move with the map
global perlinmap as _perlinmap[perlinw,perlinh,10]
#constant chunksize#=60
#constant chunksizedepth#=128
#constant xMax=80*192
#constant yMax=80*192
#constant gridx=1
#constant gridy=1
#constant gridz=1
// initallise necessary globals that all functions can see and change
global camerastep#=.15
global playermovement#=.05
global player,oldobj
global mySelection=0
global cx#,cy#,cz#, blockcount
global magnetic=0
//camera variables
global mouse,angx#,angy#,startx#,starty#,cameray#,camerax#,cameraz#,lookmodey#,lookmodez#
//global perlinmap as integer[mapx,mapy,mapx]
global playerblocks // stored the players object of which will use to add/destroy
global currentselectedplayblock
type _playblocks
spr
red
green
blue
endtype
global playblocks as _playblocks[10]
// setup the types - each entity may have multiple of entities to keep track of, these can be stored as Types
type _textures
id // texture store
r,g,b // colors
dr,dg,db // depths (because minecraft tiles is built with rectangular different shades of the color)
texturessize
endtype
global textures as _textures[50]
// this is the main play chunk which will be used through out - it will live with the player and dynamically updated
// with map data when move around
type _chunk
x#,y#,z#
id
biome as string
texture
alpha
damage
endtype
global chunk as _chunk[chunksize#,chunksize#,chunksizedepth#]
global chunkplanes as integer[4] // four planes that sit on the out side of the chunk
global worldplane as integer
type _breakcube
id
x#
y#
z#
texture
endtype
global breakcube as _breakcube[10]
type _clouds
x#,y#,z#
id
endtype
global clouds as _clouds[chunksize#,chunksize#]
player = CreateObjectSphere(.05,20,20)
player=CreateObjectSphere(.1,10,10)
NoiseInit()
mapimg=generateperlinimage()
setupinventoryitems()
createblockpointer()
CreateInfoText()
definetextures()
setupplayerblocks()
/*plane=CreateObjectPlane(128,128)
SetObjectRotation(plane,90,0,0)
SetObjectImage(plane,mapimg,1)
*/
spr=CreateSprite(mapimg)
SetSpriteSize(spr,100,100)
SetSpritePosition(spr,screenwidth-110,50)
setupclouds()
setupchunk()
setupskyandfog()
InitialiseStartingBlocks()
framestep#=timer()
lightningphasetimer#=random(20,50)
do
displayinventoryandhealth()
movecamerawithmouse()
checkkeypresses()
movecamera()
cull_objs_behind_camera(1)
settextstring(17,"Frame Rate = "+str(ScreenFPS()))
print ("Blocks - " + str(blockcount) + " - FPS " + str(ScreenFPS()))
//start the lightning off and set of the sky lightning colour
if (timer()-framestep#>lightningphasetimer#)
SetSkyBoxSkyColor(200,200,200) //lightning charge
// SetFogMode(0)
endif
// wait a fraction before reseting back to skys original
if (timer()-framestep#>lightningphasetimer#+.03)
SetSkyBoxSkyColor(90,132,150)//nice horizon blue
// SetFogMode(1)
endif
// wait a fraction to add an extra lightning charge (realty we tend to see a few burts in one flash
if (timer()-framestep#>lightningphasetimer#+.06)
SetSkyBoxSkyColor(200,200,200)//lightniing charge
// SetFogMode(1)
endif
// wait a fraction before reseting back to skys original
if (timer()-framestep#>lightningphasetimer#+.09)
SetSkyBoxSkyColor(90,132,150)//nice horizon blue
// SetFogMode(1)
// reset the timer so that the lightning occures again, but spread it out abit
framestep#=timer()
lightningphasetimer=random(20,50)
endif
Sync()
loop
function movecamera()
///movecameras local to the player
SetObjectPosition(player,cx#,cy#,cz#)
cx#=getobjectx(player)
cz#=getobjectz(player)
cy#=getobjecty(player)
SetCameraPosition(1,cx#+camerax#,cy#+cameray#+lookmodey#+2,cz#-lookmodez#)
endfunction
function checkkeypresses()
if GetRawKeyState(40) then shiftmap(0,-camerastep#) //key down
if GetRawKeyState(38) then shiftmap(0,camerastep#) //key up
if GetRawKeyState(39) then shiftmap(camerastep#,0) //key right
if GetRawKeyState(37) then shiftmap(-camerastep#,0) //key left
if GetRawKeyPressed(76) // Key L - Look mode
if GetTextString(12) ="L Toggle at the chunk - Chunk mode"
SetTextString(12,"L Toggle at the chunk - Play mode")
lookmodey#=20
lookmodez#=40
else
SetTextString(12,"L Toggle at the chunk - Chunk mode")
lookmodey#=0
lookmodez#=0
endif
endif
//A - rotate camera
/* if GetRawKeyState(65) then RotateObjectLocalY(player,-camerastep#*50) //Key A
if GetRawKeyState(68) then RotateObjectLocalY(player,camerastep#*50) //key D
if GetRawKeyState(87) then RotateObjectLocalX(player,-camerastep#*5) //key W
if GetRawKeyState(83) then RotateObjectLocalX(player,camerastep#*5) //key S
*/
// 1-8 for textures
//if GetRawKeyPressed(48) // 0 - Loads editor
for a=49 to 58
if GetRawKeyPressed(a) then changeplayblock(a-49)
next
if GetRawKeyState(65) then dec camerax# //Key A
if GetRawKeyState(68) then inc camerax# //key D
if GetRawKeyState(87) then dec cameraz# //key W
if GetRawKeyState(83)
RotateObjectLocalX(player,camerastep#*10) //key S
RotateObjectLocalZ(player,camerastep#*10) //key S
endif
// 69 UP camera 67 downcamera
if GetRawKeyState(69) then inc cameray#,camerastep# //KEY_E
if GetRawKeyState(67) then dec cameray#,camerastep# //KEY_C
if mySelection <> 0
if GetObjectExists(mySelection)
// magneticPlace(mySelection,GetObjectSizeMaxX(mySelection),GetObjectSizeMaxX(mySelection))
// SetObjectColor(mySelection,255,255,255,255)
endif
endif
mySelection=0
/*
SetObjectScale(ObjectID,1.03,1.03,1.03)
SetObjectfMode(ObjectID,2)
SetObjectColor(ObjectID,0,0,0,255)
DrawObject(ObjectID)
SetObjectScale(ObjectID,1,1,1)
SetObjectCullMode(ObjectID,1)
SetObjectColor(ObjectID,255,255,255,255) // Reset to old object color
*/
// attack / delete - maybe each type of cube with a certain texture as a damage ratio attached. like damage=10 = 10 hits before it deletes
if GetRawMouseRightPressed()
RotateObjectLocalX(player,camerastep#*5)
RotateObjectLocalZ(player,camerastep#*5) //key S
selectedObj=Click3dObject()
if GetObjectExists(selectedObj) and mySelection=0 then mySelection=selectedObj
if mySelection>0
// SetObjectColor(mySelection,150,150,150,20)
nx=1
nz=chunksizedepth#
ny=1
chunk[nx,ny,nz].id=CreateObjectplane(1,1)
SetObjectRotation(chunk[nx,ny,nz].id,90,0,0)
chunk[nx,ny,nz].texture=textures[1].id
SetObjectImage(chunk[nx,ny,nz].id,chunk[nx,ny,nz].texture,1)
chunk[nx,ny,nz].x#=nx
chunk[nx,ny,nz].y#=nz+1
chunk[nx,ny,nz].z#=ny
chunk[nx,ny,nz].biome="land"
SetObjectPosition(chunk[nx,ny,nz].id,chunk[nx,ny,nz].x#,chunk[nx,ny,nz].z#,chunk[nx,ny,nz].y#)
SetObjectCullMode(chunk[nx,ny,nz].id,1)
if chunk[nx,ny,nz].biome="land" then chunk[nx,ny,nz].damage=5
chunk[nx,ny,nz].alpha=255
inc blockcount
DeleteObject(mySelection)
// shiftPiece(mySelection)
endif
endif
if GetRawMouseLeftPressed()
RotateObjectLocalX(player,camerastep#*50) //key S
RotateObjectLocalZ(player,camerastep#*50) //key S
selectedObj=Click3dObject()
if GetObjectExists(selectedObj) and mySelection=0 then mySelection=selectedObj
if mySelection>0
bl=CreateObjectBox(1,1,1)
SetObjectPosition(bl,getobjectx(myselection),getobjecty(myselection)+1,getobjectz(myselection))
// add the block according to what the play has in his hand
// SetObjectImage(bl,textures[currentselectedplayblock].id,1)
// produce a count for debug purposes
inc blockcount
// store details some how in an map extension array
endif
endif
mouseOver=Click3dObject()
if GetObjectExists(mouseOver)
if getObjectExists(OldObj) then SetObjectColor(oldObj,0,0,0,100)
oldObj=mouseOver
else
if GetObjectExists(oldobj) then SetObjectColor(oldObj,255,255,255,255)
endif
if GetRawKeyPressed(27) then end
endfunction
function initialisestartingblocks()
cx#=getobjectx(chunk[chunksize#/2,chunksize#/2,chunksizedepth#].id)
cy#=getobjecty(chunk[chunksize#/2,chunksize#/2,chunksizedepth#].id)+1
cz#=getobjectz(chunk[chunksize#/2,chunksize#/2,chunksizedepth#].id)+1
SetCameraPosition(1,cx#,cy#,cz#-200)
SetCameraRange(1,0.01,9000)
cameray#=0
//Get the starting coordingates for the mouse (the mouse always stays in centre of screen and the camera's move
startx# = GetPointerX()
starty# = GetPointerY()
angx# = GetCameraAngleX(1)
angy# = GetCameraAngleY(1)
// End
endfunction
function movecamerawithmouse()
SetSpritePosition(mouse,screenwidth/2,screenheight/2)
fDiffX# = (GetPointerX() - startx#)
fDiffY# = (GetPointerY() - starty#)
newX# = angx# + fDiffY#
if ( newX# > 40 ) then newX# = 40
if ( newX# < -60 ) then newX# = -60
SetCameraRotation( 1, newX#, angy# + fDiffX#, 0 )
SetSpriteAngle(player,angy# + fDiffX#)
// These positions the block/weapon as if in the hand
// SetObjectRotation(playerblocks[0],newX#,angy#+fDiffX#,0)
SetObjectPosition(playerblocks,.012,1.95,-.1)
SetObjectRotation(player,3.6,fDiffX#,angy#)
endfunction
function setupskyandfog()
// setup a skybox
SetSunActive(0)
SetSkyBoxHorizonSize(4.1,4)
SetSkyBoxHorizonColor(90,132,150)//nice horizon blue
SetSkyBoxSkyColor(0,122,193)//thunder horison thunderblue
// SetSkyBoxHorizonColor(240,81,51)//sunset horiz
//SetSkyBoxSkyColor(253,187,48)//sunset sky
SetSkyBoxVisible(1)
SetFogColor(155,155,155)
SetFogRange(50,400)
SetFogMode(0)
endfunction
function setupchunk()
for a=0 to chunksize#
for b=0 to chunksize#
for z=0 to chunksizedepth#
// dont have a full block full of cubes, randomise it abit - so one, we conserve memory and 2 it will look like a cave
// the ground level have a complete flat surface for now until perlin noise comes
// otherwise shake underneath a bit.
// if random(1,10)>8 or z=chunksizedepth#-4
if z>chunksizedepth#-1
chunk[a,b,z].id=CreateObjectBox(1,1,1)
SetObjectRotation(chunk[a,b,z].id,90,0,0)
chunk[a,b,z].texture=textures[0].id
// SetObjectImage(chunk[a,b,z].id,chunk[a,b,z].texture,1)
// SetObjectVisible(chunk[a,b,z].id,0)
chunk[a,b,z].x#=a
chunk[a,b,z].y#=perlinmap[a,b,0].noise
chunk[a,b,z].z#=b
chunk[a,b,z].biome="land"
SetObjectColor(chunk[a,b,z].id,perlinmap[a,b,0].r,perlinmap[a,b,0].g,perlinmap[a,b,0].b,255)
SetObjectTransparency(chunk[a,b,z].id,1)
SetObjectPosition(chunk[a,b,z].id,chunk[a,b,z].x#,chunk[a,b,z].z#,chunk[a,b,z].y#)
SetObjectCullMode(chunk[a,b,z].id,1)
if chunk[a,b,z].biome="land" then chunk[a,b,z].damage=5
chunk[a,b,z].alpha=255
inc blockcount
endif
next
next
next
// create the outsides
// front
/*
chunkplanes[0]=CreateObjectPlane(chunksize#,chunksizedepth#)
SetObjectPosition(chunkplanes[0],chunksize#/2,chunksizedepth#/2,0)
//right
chunkplanes[1]=CreateObjectPlane(chunksize#,chunksizedepth#)
SetObjectRotation(chunkplanes[1],0,90,0)
SetObjectPosition(chunkplanes[1],chunksize#,chunksizedepth#/2,chunksize#/2)
// back
chunkplanes[2]=CreateObjectPlane(chunksize#,chunksizedepth#)
SetObjectPosition(chunkplanes[2],chunksize#/2,chunksizedepth#/2,chunksize#)
//left
chunkplanes[3]=CreateObjectPlane(chunksize#,chunksizedepth#)
SetObjectRotation(chunkplanes[3],0,90,0)
SetObjectPosition(chunkplanes[3],0,chunksizedepth#/2,chunksize#/2)
// bottom
chunkplanes[4]=CreateObjectPlane(chunksize#,chunksize#)
SetObjectRotation(chunkplanes[4],90,90,0)
SetObjectPosition(chunkplanes[4],chunksize#/2,0,chunksize#/2)
for a=0 to 4
SetObjectImage(chunkplanes[a],textures[0].id,1)
SetImageWrapU(textures[0].id,1)
SetImageWrapv(textures[0].id,1)
// SetObjectUVScale(textures[0].id,0,1000,1000)
next
// worldplane = CreateObjectPlane(20000,20000)
//SetObjectRotation(worldplane,90,0,0)
//SetObjectPosition(worldplane,0,chunksizedepth#,0)
*/// display the chunks
shiftmap(0,0)
endfunction
function setupclouds()
// setup clouds
for a=1 to chunksize#/2
for b=1 to chunksize#/2
clouds[a,b].id=CreateObjectbox(random(100,200),random(100,200),2)
SetAmbientColor(255,255,255)
SetObjectRotation(clouds[a,b].id,270,0,0)
clouds[a,b].x#=random2(-20000,20000)
clouds[a,b].z#=random2(-20000,20000)
clouds[a,b].y#=random(500,600)
SetObjectPosition(clouds[a,b].id,clouds[a,b].x#,clouds[a,b].y#,clouds[a,b].z#)
SetObjectColor(clouds[a,b].id,255,255,255,255)
next
next
endfunction
function shiftPiece(mySelection as integer)
if GetRawKeyState(40) then SetObjectPosition( mySelection, GetObjectX(mySelection), GetObjectY(mySelection)-.05, GetObjectZ(mySelection) ) //key down
if GetRawKeyState(38) then SetObjectPosition( mySelection, GetObjectX(mySelection), GetObjectY(mySelection)+.05, GetObjectZ(mySelection) ) //key up
if GetRawKeyState(39) then SetObjectPosition( mySelection, GetObjectX(mySelection)-.05, GetObjectY(mySelection), GetObjectZ(mySelection) ) //key right
if GetRawKeyState(37) then SetObjectPosition( mySelection, GetObjectX(mySelection)+.05, GetObjectY(mySelection), GetObjectZ(mySelection) ) //key left
if GetRawKeyState(65) then SetObjectPosition( mySelection, GetObjectX(mySelection), GetObjectY(mySelection), GetObjectZ(mySelection)-.05 ) //Key A
if GetRawKeyState(90) then SetObjectPosition( mySelection, GetObjectX(mySelection), GetObjectY(mySelection), GetObjectZ(mySelection)+.05 ) //Key Z
for a=0 to chunksize#
for b=0 to chunksize#
for z=0 to chunksizedepth#
if chunk[a,b,z].id=mySelection
chunk[a,b,z].x#=GetObjectX(mySelection)
chunk[a,b,z].y#=GetObjectY(mySelection)
chunk[a,b,z].z#=GetObjectZ(mySelection)
endif
next z
next b
next a
endfunction
function shiftmap(xvalue#,zvalue#)
z=chunksizedepth#
for a=0 to chunksize#
for b=0 to chunksize#
inc chunk[a,b,z].x#,xvalue#
inc chunk[a,b,z].z#,zvalue#
inc clouds[a,b].x#,xvalue#
inc clouds[a,b].z#,zvalue#
// move it on the perlin map
if GetObjectExists(chunk[a,b,z].id )
if chunk[a,b,z].x#>chunksize#
chunk[a,b,z].x#=0
endif
if chunk[a,b,z].x#<0
chunk[a,b,z].x#=chunksize#
endif
if chunk[a,b,z].z#>chunksize#
chunk[a,b,z].z#=0
endif
if chunk[a,b,z].z#<0
chunk[a,b,z].z#=chunksize#
endif
chunk[a,b,z].y# = perlinmap[a,b,0].noise
SetObjectPosition(chunk[a,b,z].id,chunk[a,b,z].x#,chunk[a,b,z].y#,chunk[a,b,z].z#)
// if a>0 and a<50 and b>0 and b<50 then SetObjectPosition(clouds[a,b].id,clouds[a,b].x#,clouds[a,b].y#,clouds[a,b].z#)
endif
next
next
endfunction
function moveclouds()
endfunction
function createtextures(sizex# as float, sizey# as float,density, toptexture, bottomtexture)
if bottomtexture=0
//do a full block of the same texture
texturecount=toptexture
swap()
for a=0 to sizex# step density
for b=0 to sizey# step density
rr=random(1,textures[texturecount].dr)
if textures[texturecount].dr-rr >0 then colorred=textures[texturecount].r - rr
if textures[texturecount].dg-rr >0 then colorgreen=textures[texturecount].g - rr
if textures[texturecount].db-rr >0 then colorblue=textures[texturecount].b - rr
if colorred<0 then colorred=textures[texturecount].r
if colorgreen<0 then colorgreen=textures[texturecount].g
if colorblue<0 then colorblue=textures[texturecount].b
drawbox(a,b,(A+density),(B+density), MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue), 1)
next
next
render()
textures[texturecount].id = getimage(0,0,sizex#, sizey#)
else
// do an half block with a different texture at bottom
texturecount=toptexture
swap()
for a=0 to sizex# step density
for b=0 to sizey#/3 step density
rr=random(1,textures[texturecount].dr)
if textures[texturecount].dr-rr >0 then colorred=textures[texturecount].r - rr
if textures[texturecount].dg-rr >0 then colorgreen=textures[texturecount].g - rr
if textures[texturecount].db-rr >0 then colorblue=textures[texturecount].b - rr
if colorred<0 then colorred=textures[texturecount].r
if colorgreen<0 then colorgreen=textures[texturecount].g
if colorblue<0 then colorblue=textures[texturecount].b
drawbox(a,b,(A+density),(B+density), MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue), 1)
next
next
texturecount=bottomtexture
for a=0 to sizex# step density
for b=sizey#/3 to sizey# step density
rr=random(0,textures[texturecount].dr)
if textures[texturecount].dr-rr >0 then colorred=textures[texturecount].r - rr
if textures[texturecount].dg-rr >0 then colorgreen=textures[texturecount].g - rr
if textures[texturecount].db-rr >0 then colorblue=textures[texturecount].b - rr
if colorred<0 then colorred=textures[texturecount].r
if colorgreen<0 then colorgreen=textures[texturecount].g
if colorblue<0 then colorblue=textures[texturecount].b
drawbox(a,b,(A+density),(B+density), MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue),MakeColor(colorred,colorgreen,colorblue), 1)
next
next
render()
textures[texturecount].id = getimage(0,0,sizex#, sizey#)
endif
endfunction textures[texturecount].id
function definetextures()
// grass=createtexture(64,64,0,200,0,8)
//grass
textures[0].r=0 :textures[0].dr=50
textures[0].g=80 :textures[0].dg=100
textures[0].b=0 :textures[0].db=50
//dirt
textures[1].r=139 :textures[1].dr=20
textures[1].g=69:textures[1].dg=20
textures[1].b=19:textures[1].db=20
//goldgold=createtexture(8,8,255,215,100,1)
textures[2].r=255 :textures[2].dr=100
textures[2].g=215 :textures[2].dg=10
textures[2].b=100 :textures[2].db=10
// water=createtexture(8,8,0,0,100,1)
textures[3].r=0 :textures[3].dr=50
textures[3].g=0 :textures[3].dg=10
textures[3].b=100 :textures[3].db=10
// emeralds=createtexture(8,8,39,89,45,1)
textures[4].r=39 :textures[4].dr=5
textures[4].g=89 :textures[4].dg=5
textures[4].b=45 :textures[4].db=5
// create the texturs
textures[0].id = CreateTextures(8,8,1,0,1) // top
// textures[1].id = CreateTextures(16,16,4,1,1) // bottom
// textures[2].id = CreateTextures(64,64,4,2,2) // sides
// textures[3].id = CreateTextures(64,64,4,3,3) // sides
// textures[4].id = CreateTextures(64,64,4,4,4) // sides
endfunction
function Click3dObject()
myX as float
myY as float
my3dX as float
my3dY as float
my3dZ as float
rayStartX as float
rayStartY as float
rayStartZ as float
rayEndX as float
rayEndY as float
rayEndZ as float
myX=GetPointerX()
myY=GetPointerY()
my3dX=Get3DVectorXFromScreen(myX,myY)
my3dY=Get3DVectorYFromScreen(myX,myY)
my3dZ=Get3DVectorZFromScreen(myX,myY)
rayStartX=my3dX+GetCameraX(1)
rayStartY=my3dY+GetCameraY(1)
rayStartZ=my3dZ+GetCameraZ(1)
rayEndX=800*my3dX+GetCameraX(1)
rayEndY=800*my3dY+GetCameraY(1)
rayEndZ=800*my3dZ+GetCameraZ(1)
theObjectHit= ObjectRayCast(0,rayStartX,rayStartY,rayStartZ,rayEndX,rayEndY,rayEndZ)
for a=0 to 4
if theObjectHit=chunkplanes[a] then theObjectHit=0
next
Print(theObjectHit)
endfunction theObjectHit
function magneticPlace(mySelection,x#,y#)
X1#=GetObjectX(mySelection)
Y1#=GetObjectY(mySelection)
Z1#=GetObjectZ(mySelection)
if magnetic=1
X1#=floor(X1#/gridx)
Y1#=floor(Y1#/gridy)
Z1#=floor(Z1#/gridz)
endif
SetObjectPosition( mySelection, X1#, Y1#, Z1# )
shiftPiece(mySelection)
endfunction
// this creates the centre pointer
function createblockpointer()
swap()
DrawLine(0,5,10,5,MakeColor(255,255,0),MakeColor(255,255,0))
DrawLine(5,0,5,10,MakeColor(255,255,0),MakeColor(255,255,0))
// DrawEllipse(5,5,5,5,MakeColor(255,255,0),MakeColor(255,255,0),0)
render()
mouse = CreateSprite(GetImage(0,0,10,10))
SetRawMousePosition(screenwidth/2,screenheight/2)
SetRawMouseVisible(0)
endfunction
function CreateInfoText()
createtext(1,"CraftLite") // Create the text to display current level number ******
createtext(2,"Left Arrow move left.") //create the text to keep track of how many objects we have so far
createtext(3,"Right Arrow move left.")
createtext(4,"Up Arrow move forward.")
createtext(5,"Down Arrow move back.")
createtext(6,"W Rotate up")
CreateText(7,"A Rotate left.")
CreateText(8,"S Rotate down.")
CreateText(9,"D Rotate Right.")
CreateText(10,"E Move Up.")
CreateText(11,"C Move Down.")
CreateText(12,"L Toggle at the chunk - Play mode")
CreateText(13,"Hold down shift to select.")
CreateText(14,"Selection="+str(mySelection))
CreateText(15,"M toggle snap to grid.")
CreateText(16,"Magnetic ="+str(magnetic))
CreateText(17,"Esc exit.")
CreateText(18,"Frame Rate=")
settextsize(1,20)
settextsize(2,20)
settextsize(3,20)
settextsize(4,20)
SetTextSize(5,20)
settextsize(6,20)
settextsize(7,20)
settextsize(8,20)
settextsize(9,20)
settextsize(10,20)
settextsize(11,20)
settextsize(12,20)
settextsize(13,20)
settextsize(14,20)
settextsize(15,20)
settextsize(16,20)
settextsize(17,20)
settextsize(18,20)
settextposition(1,10,20)
settextposition(2,10,40)
settextposition(3,10,60)
settextposition(4,10,80)
settextposition(5,10,100)
settextposition(6,10,120)
settextposition(7,10,140)
settextposition(8,10,160)
settextposition(9,10,180)
settextposition(10,10,200)
settextposition(11,10,220)
settextposition(12,10,240)
settextposition(13,10,260)
settextposition(14,10,280)
settextposition(15,10,300)
settextposition(16,10,320)
settextposition(17,10,340)
settextposition(18,10,340)
FixTextToScreen(1,1)
FixTextToScreen(2,1)
FixTextToScreen(3,1)
FixTextToScreen(4,1)
FixTextToScreen(5,1)
FixTextToScreen(6,1)
FixTextToScreen(7,1)
FixTextToScreen(8,1)
FixTextToScreen(9,1)
FixTextToScreen(10,1)
FixTextToScreen(11,1)
FixTextToScreen(12,1)
FixTextToScreen(13,1)
FixTextToScreen(14,1)
FixTextToScreen(15,1)
FixTextToScreen(16,1)
FixTextToScreen(17,1)
FixTextToScreen(18,1)
SetTextColor(1,0,200,0,255)
SetTextColor(17,200,0,0,255)
endfunction
// this creates the hand weapon to distroy /block to add and places on bottom right corner of the camera
function setupplayerblocks()
playerblocks = CreateObjectBox(.02,.02,.04)
SetObjectImage(playerblocks,textures[0].id,1)
FixObjectToObject(playerblocks,player)
SetObjectRotation(playerblocks,-25,-10,-2)
currentselectedblock=0
endfunction
function screenselector()
// Develop a combo style list to choose a screen resolution
/*
Fullscreen
1920x1080
1680x1050
1600x900
1440x900
1440x1050
1366x768
1360x768
1280x1024
1280x800
1280x768
1280x720
1024x768
800x600
*/
endfunction
function changeplayblock(id)
SetObjectImage(playerblocks,textures[id].id,1)
currentselectedplayblock=id
endfunction
function GetObjectInFront(obj, cam)
x1# = GetCameraX(cam)
y1# = GetCameraY(cam)
z1# = GetCameraZ(cam)
dx# = GetObjectX(obj) - x1#
dy# = GetObjectY(obj) - y1#
dz# = GetObjectZ(obj) - z1#
d# = sqrt(dx#*dx# + dy#*dy# + dz#*dz#)
ux1# = dx#/d#
uy1# = dy#/d#
uz1# = dz#/d#
d# = 300
MoveCameraLocalZ(cam, d#)
dx# = GetCameraX(cam) - x1#
dy# = GetCameraY(cam) - y1#
dz# = GetCameraZ(cam) - z1#
MoveCameraLocalZ(cam, -d#)
ux2# = dx#/d#
uy2# = dy#/d#
uz2# = dz#/d#
res# = ux1# * ux2# + uy1# * uy2# + uz1# * uz2#
angle# = acos(res#)
inFront = 0
////////CHANGE THIS////////////
if angle# < 10 then inFront = 0
endfunction inFront
function cull_objs_behind_camera(mode) /// adapted to my own project but the jist is too cull all objects
z=0
for x = 0 to chunksize#
for y = 0 to chunksize#
// for z=0 to chunksizedepth#
if GetObjectExists( chunk[x,y,z].id )
v = GetObjectInFront( chunk[x,y,z].id, 1 )
if mode=1
if v = 0 then SetBoxVisible( x,y,z, 0 )
if v = 1 then SetBoxVisible( x,y,z, 1 )
else
SetBoxVisible(x,y,z,0)
endif
endif
// next
next
next
endfunction
function SetBoxVisible (x,y,z, mode)
if mode=1
SetObjectVisible(chunk[x,y,z].id,1)
// SetObjectVisible(cube.top,0)
else
SetObjectVisible(chunk[x,y,z].id,0)
// SetObjectPosition(blocks[x,y],bl//ocks[x,y]-playareax,0,blockpositiony-playareay)
endif
endfunction
function setupinventoryitems()
for a=0 to 9
swap()
box=CreateObjectBox(.5,.5,.5)
SetObjectRotation(box,0,45,0)
red=random(0,255):playblocks[a].red=red
green=random(0,255):playblocks[a].green=green
blue=random(0,255):playblocks[a].blue=blue
SetObjectColor(box,red,green,blue,100)
SetObjectTransparency(box,1)
render()
playblocks[a].spr=CreateSprite(getimage(screenwidth/2-50,screenheight/2-50,screenwidth/2+50,screenheight/2+50))
DeleteObject(box)
next
DrawLine(0,0,1,1,MakeColor(255,255,255),MakeColor(255,255,255),1)
mouse=createsprite(GetImage(0,0,1,1))
SetRawMouseVisible(0)
endfunction
function displayinventoryandhealth()
SetSpritePosition(mouse,getpointerx(),getpointery())
for a=0 to 9
SetSpritePosition(playblocks[a].spr,(screenwidth/2-(50*5))+a*50,screenheight-150)
next
endfunction
// interopolation for RGB
// send in colorfrom
// colorto - this maybe sky color
// t - time it takes so this could be travelling down to earth
/*
to be converted
public static Color LerpRGB (Color a, Color b, float t)
{
return new Color
(
a.r + (b.r - a.r) * t,
a.g + (b.g - a.g) * t,
a.b + (b.b - a.b) * t,
a.a + (b.a - a.a) * t
);
}
*/
function generateperlinimage()
// Generate image from memblock
size = perlinw * perlinh * 4 + 12
mem = CreateMemblock(size)
SetMemblockInt(mem,0,perlinw)
SetMemblockInt(mem,4,perlinh)
SetMemblockInt(mem,8,32)
offset as integer = 12
a as float, b as float
a = 5.0
b = 2.0
for y = 0 to perlinh - 1
for x = 0 to perlinw - 1
a = a + 0.0001
b = b + 0.002
// Try out these two noise methods
//noise = 255.0*Noise2D(x/10.0,y/10.0)
noise = 255.0*Noise2D(x/255.0,y/255.0)
noise = abs(noise)
//if x<chunksize# and y<chunksize# then
perlinmap[x,y,0].noise=noise/13
//clouds
if noise>255
perlinmap[x,y,0].r = noise
perlinmap[x,y,0].g = noise
perlinmap[x,y,0].b = noise
SetMemblockByte(mem, offset, noise)
SetMemblockByte(mem, offset+1, noise)
SetMemblockByte(mem, offset+2, noise)
SetMemblockByte(mem, offset+3, 255)
endif
//greenary
if noise>100 and noise<=255
perlinmap[x,y,0].r = 0
perlinmap[x,y,0].g = noise
perlinmap[x,y,0].b = 0
SetMemblockByte(mem, offset, 0)
SetMemblockByte(mem, offset+1, noise)
SetMemblockByte(mem, offset+2, 0)
SetMemblockByte(mem, offset+3, 255)
endif
//sand
if noise>50 and noise<=100
perlinmap[x,y,0].r = noise
perlinmap[x,y,0].g = noise
perlinmap[x,y,0].b = 0
SetMemblockByte(mem, offset, noise)
SetMemblockByte(mem, offset+1, noise)
SetMemblockByte(mem, offset+2, 0)
SetMemblockByte(mem, offset+3, 255)
endif
// water
if noise<=50
perlinmap[x,y,0].r = 0
perlinmap[x,y,0].g = 0
perlinmap[x,y,0].b = noise
SetMemblockByte(mem, offset, 0)
SetMemblockByte(mem, offset+1, 0)
SetMemblockByte(mem, offset+2, noise)
SetMemblockByte(mem, offset+3, 255)
endif
offset = offset + 4
next
next
map=CreateImageFromMemblock(mem)
DeleteObject(mem)
endfunction map
// interopolation for RGB
// send in colorfrom
// colorto - this maybe sky color
// t - time it takes so this could be travelling down to earth
/*
to be converted
public static Color LerpRGB (Color a, Color b, float t)
{
return new Color
(
a.r + (b.r - a.r) * t,
a.g + (b.g - a.g) * t,
a.b + (b.b - a.b) * t,
a.a + (b.a - a.a) * t
);
}
*/
// ***************************************************************************************************
// Ken Perlin's Simplex Noise 2D. AGK Version.
// Ported from Stefan Gustavson's Java implementation
// (http://staffwww.itn.liu.se/~stegu/simplexnoise/simplexnoise.pdf)
// 2015.02.03
// AGK reference https://forum.thegamecreators.com/thread/213532
// Thank you Thank you
#constant PN3DF2 = 0.5*(sqrt(3.0)-1.0)
#constant PN3DG2 = (3.0-sqrt(3.0))/6.0
Type sPNVECTOR
x as float
y as float
z as float
endtype
Global PNHash as integer[512]
Global PNGrad3 as sPNVECTOR[256]
Function NoiseInit()
Local n as integer, rn as integer
For n=0 To 255
PNHash[n] = n
Next n
For n=0 To 255
rn=Random(0, 255)
PNHash.swap(n,rn)
Next n
For n=0 To 255
PNHash[256 + n] = PNHash[n]
Next n
PNHash[511] = PNHash[0]
For n=0 To 15
PNGrad3[n * 16 + 0].x = 1 : PNGrad3[n * 16 + 0].y = 1 : PNGrad3[n * 16 + 0].z = 0
PNGrad3[n * 16 + 1].x = -1 : PNGrad3[n * 16 + 1].y = 1 : PNGrad3[n * 16 + 1].z = 0
PNGrad3[n * 16 + 2].x = 1 : PNGrad3[n * 16 + 2].y = -1 : PNGrad3[n * 16 + 2].z = 0
PNGrad3[n * 16 + 3].x = -1 : PNGrad3[n * 16 + 3].y = -1 : PNGrad3[n * 16 + 3].z = 0
PNGrad3[n * 16 + 4].x = 1 : PNGrad3[n * 16 + 4].y = 0 : PNGrad3[n * 16 + 4].z = 1
PNGrad3[n * 16 + 5].x = -1 : PNGrad3[n * 16 + 5].y = 0 : PNGrad3[n * 16 + 5].z = 1
PNGrad3[n * 16 + 6].x = 1 : PNGrad3[n * 16 + 6].y = 0 : PNGrad3[n * 16 + 6].z = -1
PNGrad3[n * 16 + 7].x = -1 : PNGrad3[n * 16 + 7].y = 0 : PNGrad3[n * 16 + 7].z = -1
PNGrad3[n * 16 + 8].x = 0 : PNGrad3[n * 16 + 8].y = 1 : PNGrad3[n * 16 + 8].z = 1
PNGrad3[n * 16 + 9].x = 0 : PNGrad3[n * 16 + 9].y = -1 : PNGrad3[n * 16 + 9].z = 1
PNGrad3[n * 16 + 10].x = 0 : PNGrad3[n * 16 + 10].y = 1 : PNGrad3[n * 16 + 10].z = -1
PNGrad3[n * 16 + 11].x = 0 : PNGrad3[n * 16 + 11].y = -1 : PNGrad3[n * 16 + 11].z = -1
PNGrad3[n * 16 + 12].x = 1 : PNGrad3[n * 16 + 12].y = 1 : PNGrad3[n * 16 + 12].z = 0
PNGrad3[n * 16 + 13].x = -1 : PNGrad3[n * 16 + 13].y = 1 : PNGrad3[n * 16 + 13].z = 0
PNGrad3[n * 16 + 14].x = 0 : PNGrad3[n * 16 + 14].y = -1 : PNGrad3[n * 16 + 14].z = 1
PNGrad3[n * 16 + 15].x = 0 : PNGrad3[n * 16 + 15].y = -1 : PNGrad3[n * 16 + 15].z = -1
Next n
endfunction
function Noise2D(xin as float, yin as float)
local n0 as float, n1 as float, n2 as float, s as float, t as float, x0 as float, y0 as float, xs as float, ys as float
local i as integer, j as integer, i1 as integer, j1 as integer, i2 as integer, j2 as integer, gi0 as integer, gi1 as integer, gi2 as integer
local x1 as float, y1 as float, x2 as float, y2 as float, x3 as float, y3 as float, t0 as float, t1 as float, t2 as float
s = (xin + yin) * PN3DF2
xs = xin + s
i = floor(xs)
ys = yin + s
j = floor(ys)
t = (i + j) * PN3DG2
x0 = xin - (i - t)
y0 = yin - (j - t)
if x0>y0
i1=1
j1=0
else
i1=0
j1=1
endif
x1 = x0 - i1 + PN3DG2
y1 = y0 - j1 + PN3DG2
x2 = x0 - 1.0 + 2.0 * PN3DG2
y2 = y0 - 1.0 + 2.0 * PN3DG2
i = i && 255
j = j && 255
gi0 = PNHash[i + PNHash[j]] && 15
gi1 = PNHash[i + i1 + PNHash[j + j1]] && 15
gi2 = PNHash[i + 1 + PNHash[j+ 1]] && 15
t0 = 0.5 - x0*x0-y0*y0
if t0<0
n0 = 0.0
else
t0 = t0 * t0
n0 = t0 * t0 * (PNGrad3[gi0].x * x0 + PNGrad3[gi0].y * y0)
endif
t1 = 0.5 - x1*x1-y1*y1
if t1<0
n1 = 0.0
else
t1 = t1 * t1
n1 = t1 * t1 * (PNGrad3[gi1].x * x1 + PNGrad3[gi1].y * y1)
endif
t2 = 0.5 - x2*x2-y2*y2
if t2<0
n2 = 0.0
else
t2 = t2 * t2
n2 = t2 * t2 * (PNGrad3[gi2].x * x2 + PNGrad3[gi2].y * y2)
endif
endfunction 70.0 * (n0 + n1 + n2)
Ill remedy this when i dont have a nagging family to leave me in peace for the eve