Here is the code for dark basic pro:
`Setup
SYNC ON
SYNC RATE 60
SET DISPLAY MODE 800,600,32
HIDE MOUSE
`Set gun holding-limb position
gunOffsetX AS FLOAT = 15.0
gunOffsetY AS FLOAT = -20.0
gunOffsetZ AS FLOAT = 20.0
`Make main player object and hide it
MAKE OBJECT CUBE 1,10
HIDE OBJECT 1
`Attach a limb and delete the mesh
MAKE MESH FROM OBJECT 1,1
ADD LIMB 1,1,1
DELETE MESH 1
`Make a weapon and attach it to the limb
LOAD OBJECT "1.x",2
position object 2, 2, -1, 18
GLUE OBJECT TO LIMB 2,1,1
`Make matrix to walk on
MAKE MATRIX 1,10000,10000,100,100
`Variables
xPos AS FLOAT
zPos AS FLOAT
speed AS FLOAT = 10.0
xLook AS FLOAT
yAng AS FLOAT
lookSpeed AS FLOAT = 0.2
`The gun bobbing values
gunBobSpeed AS FLOAT = 6.0
gunBobMove AS FLOAT = 3.0
gunBobHeight AS FLOAT = 1.5
gunBobAng AS FLOAT
gunTurnAng AS FLOAT
gunLookAng AS FLOAT
mouseMovementX AS FLOAT
mouseMovementY AS FLOAT
DO
gosub player
LOOP
player:
`Store mouse movement
mouseMovementX = MOUSEMOVEX()
mouseMovementY = MOUSEMOVEY()
`Control movement using trig
IF UPKEY()+DOWNKEY()+LEFTKEY()+RIGHTKEY() > 0
IF UPKEY() = 1
INC xPos,SIN(yAng)*speed
INC zPos,COS(yAng)*speed
ENDIF
IF DOWNKEY() = 1
DEC xPos,SIN(yAng)*speed
DEC zPos,COS(yAng)*speed
ENDIF
IF RIGHTKEY() = 1
INC xPos,COS(yAng)*speed
INC zPos,-SIN(yAng)*speed
ENDIF
IF LEFTKEY() = 1
DEC xPos,COS(yAng)*speed
DEC zPos,-SIN(yAng)*speed
ENDIF
`Increase gun-bobbing angle to get gun bobbing
gunBobAng = WRAPVALUE(gunBobAng+gunBobSpeed)
ELSE
`Otherwise slowly change the value to nothing to bring the gun to the centre again
gunBobAng = CURVEANGLE(0,gunBobAng,10)
ENDIF
`Control the gun swaying according to how much the player is turning
gunTurnAng = CURVEANGLE(WRAPVALUE(mouseMovementX),gunTurnAng,10)
gunLookAng = CURVEANGLE(WRAPVALUE(mouseMovementY),gunLookAng,10)
`Position the gun-holding limb and rotate it to give swaying effect
OFFSET LIMB 1,1,gunOffsetX+SIN(gunBobAng)*gunBobMove,gunOffsetY+ABS(COS(gunBobAng))*gunBobHeight,gunOffsetZ
ROTATE LIMB 1,1,gunLookAng,gunTurnAng,0
`Turn player
yAng = WRAPVALUE(yAng + mouseMovementX*lookSpeed)
xLook = WRAPVALUE(xLook + mouseMovementY*lookSpeed)
`Position player object and camera
POSITION OBJECT 1,xPos,100,zPos
ROTATE OBJECT 1,0,yAng,0
PITCH OBJECT DOWN 1,xLook
POSITION CAMERA xPos,100,zPos
ROTATE CAMERA xLook,yAng,0
SYNC
return
This will give realistic gun movement. The camera will not bounce up and down though.
C. Nom De Plum