best i can do.
Rem Project: projectblah
Rem Created: Saturday, November 13, 2010
Rem ***** Main Source File *****
Rem Project: Dark Basic Pro Project
Rem Created: Friday, November 12, 2010
Rem ***** Main Source File *****
color backdrop rgb(200,200,255)
sync on
sync rate 0
autocam off
`position camera 0,-1000, -600
`point camera 0,1000,0
position camera 0,300,-700
point camera 0,150,0
set ambient light 70
fov#=60.0
set camera fov fov#
sw#=screen width()
sh#=screen height()
screenaspect#=sh#/sw#
`screenx#=object screen x(205) `(0-camera position z())*tan(fov#/2.0)/screenaspect#
`screeny#=object screen y(205) `(0-camera position z())*tan(fov#/2.0)
global pick : global picked
global loopnumber
global maxangv#=2.0 `maximum angular velocity
type objecttype
mass as float
velocityx as float
velocityy as float
angv as float
radius as float
endtype
type nodetype
x as float
y as float
objectnumber as integer
ang as float
endtype
`Load image "C:\Users\bne101003\Desktop\carpet.bmp", 201
`load image "C:\Users\bne101003\Desktop\background.bmp", 202
`load image "C:\Users\bne101003\Desktop\BlockA.bmp", 203
`load image "C:\Users\bne101003\Desktop\black.bmp", 204
`Load Object "C:\Users\Desktop\basic level and blocks\level.X", 200
Load Object "stan.X", 205
position object 205,500,25,0
rotate object 205, 0,90,0
scale object 205, 350,350,350
sc_setupobject 205,0,2
`Load Object "cow.x", 206
`position object 206,-500,25,0
`rotate object 206, 0,270,0
`scale object 206, 150,150,150
`sc_setupobject 206,0,2
`Texture object 200, 202
`position object 200, 0,90,-500
`rotate object 200, 270,0,0
`scale object 200, 2500,2500,2500
`make a plane for the ground
make object plain 10000,1000,1000
xrotate object 10000,90.0
Texture object 10000, 201
create bitmap 1,50,50
ink rgb(100,100,100),0
box 0,0,50,50
ink -1,0
for n=1 to 200
dot rnd(50),rnd(50)
next n
blur bitmap 1,3
get image 10000,0,0,50,50
delete bitmap 1
texture object 10000,10000
ghost object on 10000
position object 10000,0,0,0
sc_setupobject 10000,0,2
`make some objects
`set the seed number here
lowestobjectnumber=1
`set the number of boxes here
highestobjectnumber=10
global dim node(highestobjectnumber,4) as nodetype
global dim object(highestobjectnumber) as objecttype
randomize hitimer()
dim tp(highestobjectnumber - lowestobjectnumber)
temp = 1
for object = lowestobjectnumber to highestobjectnumber
`set the box sizes here
make object cube object,50
texture object object, 203
create bitmap 1,10,10
ink rgb(rnd(255),rnd(255),rnd(255)),0
box 0,0,10,10
if image exist(1)=1 then delete image 1
get image object,0,0,10,10,1
delete bitmap 1
sc_setupobject object,0,2
texture object object,object
create_nodes(object)
`position the boxes (make sure none of them are colliding with another)
okay = 0
repeat
btc = rnd(highestobjectnumber - lowestobjectnumber)
if tp(btc) = 0 then okay = 1 : tp(btc) = 1 : x = (btc * 75) - 400
UNTIL okay = 1
position object object,x,25,0 : `rnd(200)-100,0
`set the mass of the boxes
object(object).mass=object size x(object)*object size y(object)*0.01
object(object).velocityx=0
object(object).velocityy=0
object(object).angv=0
next object
undim tp(0)
ink 0,0
make object sphere 100,10
do
gosub drag_and_rotate
apply_physics(lowestobjectnumber,highestobjectnumber)
text 0,0,"fps: " + str$(screen fps())
text 0,30,"picked = " + str$(picked)
//Control System
if rightkey()= 1 then move object 205,3
if leftkey ()= 1 then move object 205,-3
If upkey()=1 then move object up 205, 1
//If Player collides with anything
if sc_objectcollision(205,0)
//If you hit the spacekey
if spacekey()= 1
//set grab and drop to 1
grabdrop = 1
else
//set grab and drop to 0
grabdrop = 0
endif
//position player at collision point
position object 205,`REPLACE WITH SC_OBJECTCOLLISIONX(),SC_OBJECTCOLLISIONY(),AND SC_OBJECTCOLLISIONZ()
`NOT SURE OF THE ABOVE COLLISION COMMANDS, THAT IS THE REASON FOR REPLACING THEM
endif
`If you grab the box, then hide the object, position it above the player's head, then show it and drop it
if grabdrop
hide object 1
position object 1,object position x(205),object position y(205)+10,object position z(205)
show object 1
endif
remstart
if glue
xoff# = 1.5
yoff# = 0.0
zoff# = 0.0
glue object to limb 1,205, 0
offset limb 1,0,xoff#,yoff#,zoff#
else
unglue object 1
endif
remend
text 10, 100, "X: "+str$(object position x(1))
text 10, 130, "Y: "+str$(object position y(1))
text 10, 150, "Z: "+str$(object position z(1))
text 10, 170, "Coll:"+str$(sc_objectcollision(205,0))
sync
loop
end
function apply_physics(lowestobjectnumber,highestobjectnumber)
for object=lowestobjectnumber to highestobjectnumber
for node=1 to 4
`store current position of nodes and update
node(object,node).x=object position x(object)+object(object).radius*cos(90+object angle z(object)+node(object,node).ang)
node(object,node).y=object position y(object)+object(object).radius*sin(90+object angle z(object)+node(object,node).ang)
for target=lowestobjectnumber to highestobjectnumber
if target <> object
collision=sc_spherecast(target,object position x(object),object position y(object),object position z(object),node(object,node).x,node(object,node).y,object position z(object),2.5,0)
if collision > 0 and collision <> node(target,node).objectnumber and collision <> node(object,node).objectnumber
` get collision normals on target
cx#=sc_getcollisionnormalx()
cy#=sc_getcollisionnormaly()
` get new node position based on sliding data
sx#=sc_getcollisionslidex()
sy#=sc_getcollisionslidey()
` get x and y adjustments from original node position to new node position
adjustx# = 0.0 : adjusty# = 0.0
` adjustx#=(sx#-node(target,node).x)/2.0
` adjusty#=(sy#-node(target,node).y)/2.0
if object <> picked and picked > 0
` adjustx# = 0.0 : adjusty# = 0.0
adjustx#=(sx#-node(object,node).x)/2.0
adjusty#=(sy#-node(object,node).y)/2.0 : `apply force equal to the adjustment value
ax#=adjustx#/object(object).mass
inc object(object).velocityx,ax#
ay#=adjusty#/object(object).mass
inc object(object).velocityy,ay#
position object object,object position x(object)+adjustx#,object position y(object)+adjusty#,object position z(object)
if object position y(object)< 25 then position object object,object position x(object),25,0 : object(object).velocityy = 0.0
endif
` adjustx# = 0.0 : adjusty# = 0.0
` if target <> picked and picked > 0
` adjust the target position by the negative adjustment value
position object target,object position x(target)-adjustx#,object position y(target)-adjusty#,object position z(target)
` apply force equal to the adjustment value
` adjustx#=(sx#-node(target,node).x)/2.0
` adjusty#=(sy#-node(target,node).y)/2.0 : `apply force equal to the adjustment value
ax#=-adjustx#/object(target).mass
inc object(target).velocityx,ax#
ay#=-adjusty#/object(target).mass
inc object(target).velocityy,ay#
` rotate target
` calculate moment
forcex#=node(target,node).x
forcey#=node(target,node).y
forceangle#=atanfull(cx#,cy#)+180
pivotx#=object position x(target)
pivoty#=object position y(target)
forcesize#=sqrt(adjustx#^2+adjusty#^2)/2.0
moment#=moment(forcesize#,forcex#,forcey#,forceangle#,pivotx#,pivoty#)
angularacc#=moment#/object(target).mass
inc object(target).angv,angularacc#
` endif
endif
endif
next target
next node
next object
`update positions
for object=lowestobjectnumber to highestobjectnumber
oldx# = object position x(object)
oldy# = object position y(object)
oldz# = object position z(object)
if object(object).velocityy > -0.10 then object(object).velocityy = -0.10 : ` add downward gravity
position object object,object position x(object)+object(object).velocityx,object position y(object)+object(object).velocityy,object position z(object)
if object position x(object)>450 then position object object,450,object position y(object),0
if object position x(object)<-450 then position object object,-450,object position y(object),0
if object position y(object)< 25 then position object object,object position x(object),25,0 : object(object).velocityy = -0.10
`if object position y(object)<-0 then position object object,object position x(object),-0,0
if object(object).velocityx <> 0.0 then object(object).velocityx=object(object).velocityx*0.98
if object(object).velocityy <> 0.0 then object(object).velocityy=object(object).velocityy*0.98
` rotate object object,0,object angle y(object)+object(object).angv,0
object(object).angv=wrapvalue(object(object).angv*0.95)
if object(object).angv>maxangv# then object(object).angv=maxangv#
`check collision with anything else
collide = sc_objectcollision(object,0)
if collide > 0
` put it back and set the movement velocities
position object object,oldx#,oldy#,oldz#
object(object).velocityx = 0.0
object(object).velocityy = -.10
endif
sc_updateobject object
next object
endfunction
drag_and_rotate:
screenx#=object screen x(205) `(0-camera position z())*tan(fov#/2.0)/screenaspect#
screeny#=object screen y(205) `(0-camera position z())*tan(fov#/2.0)
mc = mouseclick()
if mc > 0 and picked = 0
pick = pick object(mousex(),mousey(),lowestobjectnumber,highestobjectnumber)
if pick > 0
picked = pick
`store offsets
x#=((2*screenx#*mousex()/sw#)-screenx#+camera position x())
y#=-((2*screeny#*mousey()/sh#)-screeny#)+camera position y()
dx#=-x#+object position x(picked)
dy#=-y#+object position y(picked)
endif
endif
if picked > 0
if mc = 1
x#=((2*screenx#*mousex()/sw#)-screenx#+camera position x()) + mousemovey()
y#=-((2*screeny#*mousey()/sh#)-screeny#)+camera position y() + mousemovex()
position object picked,x#+dx#,y#+dy#,0
object(picked).velocityx=0
object(picked).velocityy=0
endif
endif
`if picked > 0
` if mc = 2 and rotate = 0
` mx = mousex()
` ang# = object angle z(picked)
` rotate = 1
` else
` rotate = 0
` endif
`endif
`if rotate = 1
` rotate object pick,0,0,ang#-(mousemovey())
` object(pick).angv=0
`endif
if picked > 0 and mc = 0 then picked = 0 : `rotate = 0
return
function free_object()
repeat
inc n
until object exist(n)=0
endfunction n
function free_node()
n=1000
repeat
inc n
until object exist(n)=0
endfunction n
function create_nodes(object)
object(object).radius=sqrt((object size x(object)/2.0)^2+(object size y(object)/2.0)^2)
node(object,1).ang=atanfull(object size x(object)/2.0,object size y(object)/2.0)
node(object,2).ang=atanfull(object size x(object)/2.0,-object size y(object)/2.0)
node(object,3).ang=atanfull(-object size x(object)/2.0,-object size y(object)/2.0)
node(object,4).ang=atanfull(-object size x(object)/2.0,object size y(object)/2.0)
endfunction
delete memblock 1
function moment(forcesize#,forcex#,forcey#,forceangle#,pivotx#,pivoty#)
`distance from point of application of force to pivot
distance#=distance(forcex#,forcey#,pivotx#,pivoty#)
`angle of the line joining point of application of force to pivot
bearing#=bearing(forcex#,forcey#,pivotx#,pivoty#)
`angle between force and perpendicular to line joining point of application of force to pivot
theta#=90-(forceangle#-bearing#)
moment#=forcesize#*distance#*cos(theta#)
endfunction moment#
function distance(x1#,y1#,x2#,y2#)
x#=x2#-x1#
y#=y2#-y1#
distance#=sqrt(x#*x#+y#*y#)
endfunction distance#
function bearing(x1#,y1#,x2#,y2#)
x#=x2#-x1#
y#=y2#-y1#
bearing#=atanfull(x#,y#)
endfunction bearing#
CHECK OUT SOME MUSIC FROM MY NEW TECHNO CD! TECHNOKINESIS
http://www.youtube.com/watch?v=4a8KedfgVv0
ALSO, CHECK OUT MY NEW TECHNO CD! http://www.imageposeidon.com/