TGC Codebase Backup



FPS Gun Movement by Hamish McHaggis

28th Jan 2004 15:56
Summary

This demo shows the stereotypical bobbing and swaying of the gun that you see in most FPSes.



Description

This demo shows the stereotypical bobbing and swaying of the gun that you see in most FPSes. It uses an angle and triganometry (sin + cos) to make a smooth bobbing action. Also swaying is implimented using curveangle.



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    `----------------------
`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