FPS Gun Movement by Hamish McHaggis28th 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 |