I suppose these questions can best be answered by supplying my code. Luckily, I just started a new game engine from scratch, so it only takes up about 100 lines as of now. I temporarily removed the crate material as nothing seemed to work on it, but if you can somehow manage to get it to work, Id be grateful. Cheers.
Edit: I forgot the code! Sorry.
rem declare variables
global PlayerObj as integer
global PlayerObjPusher as integer
global FirstPersonResetVar as integer
rem setup display
set display mode 1024,768,16
hide mouse
rem set screen refesh rate
sync on
sync rate 60
rem turn off autocam
autocam off
rem start physics engine
phy start
rem make level
load object "C:\Documents and Settings\Owner\Desktop\Old Projects\BattleLegacy Media\Media\3D\Levels\MoonBase\MoonBase.dbo",100
scale object 100,12.5,12.5,12.5
phy make rigid body static mesh 100
rem make character object
rem make visible player object and it's character controller
PlayerObj = 1
load object "C:\Documents and Settings\Owner\Desktop\Land of Rysumkal\Game\Media\Zephith\Zephith.x",PlayerObj
set object speed PlayerObj,35
scale object PlayerObj,1000,1000,1000
yrotate object PlayerObj,180
fix object pivot PlayerObj
phy make capsule character controller PlayerObj, 0, 20, 0, 4, 12, 1, 2, 45.0
rem make player pusher object
PlayerObjPusher = 2
make object box PlayerObjPusher,8,20,8
hide object PlayerObjPusher
phy make rigid body dynamic box PlayerObjPusher
phy set rigid body kinematic PlayerObjPusher,1
rem make crate
make object cube 10,10
position object 10,0,10,10
phy make rigid body dynamic box 10
phy set rigid body gravity
rem begin game loop ---
do
rem handle player movement
Player_Movement()
rem update
phy update
rem call camera function
if shiftkey() = 1
Player_Camera(1)
else
Player_Camera(0)
FirstPersonResetVar = 0
endif
rem update screen
sync
loop
rem end game loop ---
rem player movement function
function Player_Movement
rem if foward key pressed
if keystate(17)=1
phy move character controller PlayerObj,50
loop object PlayerObj,0
endif
rem if backward key pressed
if keystate(31)=1
phy move character controller PlayerObj,-50
loop object PlayerObj,0
endif
rem if run key pressed
if keystate(30)=1
`phy move character controller PlayerObj,15.0
endif
rem if jumpkey pressed
if spacekey()=1
`phy set character controller displacement PlayerObj, 0,20
endif
rem if no key pressed
if keystate(31)=0 and keystate(17)=0
phy move character controller PlayerObj,0.0
stop object PlayerObj
endif
rem rotate player object acordinly with mousemovement
yrotate object PlayerObj,wrapvalue(object angle y(PlayerObj)+(mousemovex()*0.2))
rem position pusher object
phy set rigid body position PlayerObjPusher,Object position x(PlayerObj),Object position y(PlayerObj),object position z(PlayerObj)
phy set rigid body rotation PlayerObjPusher,object angle x(PlayerObj),Object angle y(PlayerObj),object angle z(PlayerObj)
endfunction
rem camera function
function Player_Camera(PlayerCamView)
Rem Store Player Object Angles
PlayerObjAngY# = Object angle Y(PlayerObj)
PlayerObjAngX# = Object angle X(PlayerObj)
Rem get player object position and store in X# and Z#
PlayerObjPosX# = Object position x(PlayerObj)
PlayerObjPosY# = Object position y(PlayerObj)
PlayerObjPosZ# = Object position z(PlayerObj)
rem third person view
if PlayerCamView = 0
rem show player object
if object visible(PlayerObj)=0 then show object PlayerObj
Rem get new camera position and store in cZ# and cX#
CamX# = Newxvalue(PlayerObjPosX#,PlayerObjAngY#-180,35)
CamZ# = Newzvalue(PlayerObjPosZ#,PlayerObjAngY#-180,35)
Rem position camera
Position Camera CamX#,PlayerObjPosY#+4,CamZ#
Rem point the camera at the player object
Point camera PlayerObjPosX#,PlayerObjPosY#+4,PlayerObjPosZ#
endif
rem first person view
if PlayerCamView = 1
rem position camera at eye level
position camera PlayerObjPosX#,PlayerObjPosY#,PlayerObjPosZ#
rem if first person view was just initiated, aim camera in defualt direction
if FirstPersonResetVar = 0
hide object PlayerObj
LookCamX# = camera angle x()
Xrotate camera 0
FirstPersonResetVar = 1
UpdateMouseMoveY = mousemovey()
else
rem handle looking with mouse
LookCamX# = camera angle x()
xrotate camera LookCamX# + (mousemovey()/6.0)
yrotate camera object angle y(PlayerObj)
endif
endif
endfunction
Back by unpopular demand!
Battle Legacy has gone MMORPG! Nah, Im just kidding. But seriously, check the WIP