Posted: 28th Jan 2004 22:54
This code demonstrates the stereotypical bobbing and swaying of the gun that you find in most FPSes . Enjoy.

+ Code Snippet
`----------------------
`FPS Gun Movement Demo
`By Joseph Thomson
`28/01/04
`--------------------------------------------------------
`Please give credit to me if you use this code in any way
`--------------------------------------------------------

`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
MAKE OBJECT BOX 2,10,10,100
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
	`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
LOOP
Posted: 18th Feb 2004 21:49
That code was just was I was looking for.... thanks...

Niels
Posted: 18th Feb 2004 21:57
Wow! A reply... no problem .
Posted: 17th Mar 2004 3:27
Is this for DBP?
Posted: 4th Apr 2004 17:49
Very nice!!!
It´s help me!