Once you have detected your collision, you reposition the player.
for example your game loop might look like this:
do
GET oldPlayerX
GET oldPlayerZ
MOVE PLAYER
IF COLLISION
POSITION PLAYER AT oldPlayerX and oldPlayerZ
ENDIF
loop
Now as a side, I was going through some code I have lying around and I found this function. It does sliding collision to an object with the camera (sadly I cant remember the original creator and I didnt put it in a comment at the top of the code

)
function playerCollisionHandler(cameraNum, mapNum, radius#, floor#, ceiling#)
`Step 1: collect current position
positionX# = camera position x(cameraNum)
positionY# = camera position y(cameraNum)
positionZ# = camera position z(cameraNum)
`Step 2: Check the Vectors
vectorRight# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#+radius#, positionY#, positionZ#)
vectorLeft# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#-radius#, positionY#, positionZ#)
vectorForward# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#, positionY#, positionZ#+radius#)
vectorBackward# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#, positionY#, positionZ#-radius#)
vectorForwardRight# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#+radius#, positionY#, positionZ#+radius#)
vectorForwardLeft# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#-radius#, positionY#, positionZ#+radius#)
vectorBackwardRight# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#+radius#, positionY#, positionZ#-radius#)
vectorBackwardLeft# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#-radius#, positionY#, positionZ#-radius#)
vectorUp# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#, positionY#+ceiling#, positionZ#)
vectorDown# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#, positionY#-floor#, positionZ#)
`Step 2 and a half: Check these values for zero and re-assign values if necessary
if vectorRight# = 0 THEN vectorRight# = radius#
if vectorLeft# = 0 THEN vectorLeft# = radius#
if vectorForward# = 0 THEN vectorForward# = radius#
if vectorBackward# = 0 THEN vectorBackward# = radius#
if vectorForwardRight# = 0 THEN vectorForwardRight# = radius#
if vectorForwardLeft# = 0 THEN vectorForwardLeft# = radius#
if vectorBackwardRight# = 0 THEN vectorBackwardRight# = radius#
if vectorBackwardLeft# = 0 THEN vectorBackwardLeft# = radius#
if vectorUp# = 0 THEN vectorUp# = ceiling#
if vectorDown# = 0 THEN vectorDown# = floor# : canjump=0
`Step 3: Get info from the vector data
if vectorRight# <= radius# THEN additionValueX# = (radius# - vectorRight#)
if vectorLeft# <= radius# THEN additionValueXTwo# = radius# - vectorLeft#
if vectorForward# <= radius# THEN additionValueZ# = (radius# - vectorForward#)
if vectorBackward# <= radius# THEN additionValueZTwo# = radius# - vectorBackward#
if vectorForwardRight# = 0 THEN additionValueForwardRight# = radius# - vectorForwardRight#
if vectorForwardLeft# = 0 THEN additionValueForwardLeft# = radius# - vectorForwardLeft#
if vectorBackwardRight# = 0 THEN additionValueBackwardRight# = radius# - vectorBackwardRight#
if vectorBackwardLeft# = 0 THEN additionValueBackwardLeft# = radius# - vectorBackwardLeft#
if vectorUp# <= ceiling# THEN additionValueY# = (ceiling# - vectorUp#)
if vectorDown# <= floor# THEN additionValueYTwo# = floor# - vectorDown#
if vectorDown# < floor# THEN canjump=1 : if spacekey() = 1 then jump = 2
`Step 3 and a half: Re-assign for the closest vector
if additionValueX# > additionValueXTwo# THEN finalValueX# = additionValueX#*-1 ELSE finalValueX# = additionValueXTwo#
if additionValueY# > additionValueYTwo# THEN finalValueY# = additionValueY#*-1 ELSE finalValueY# = additionValueYTwo#
if additionValueZ# > additionValueZTwo# THEN finalValueZ# = additionValueZ#*-1 ELSE finalValueZ# = additionValueZTwo#
if additionValueForwardRight# > additionValueBackwardLeft#
finalValueDiagOne# = additionValueForwardRight#*-1
addOnX# = finalValueDiagOne#/2
addOnZ# = finalValueDiagOne#/2
ELSE
finalValueDiagOne# = additionValueBackwardLeft#
addOnX# = finalValueDiagOne#/2
addOnZ# = finalValueDiagOne#/2
endif
if additionValueForwardLeft# > additionValueBackwardRight#
finalValueDiagTwo# = additionValueForwardLeft#
addOnX# = finalValueDiagTwo#/2
addOnZ# = (finalValueDiagTwo#/2)*-1
ELSE
finalValueDiagTwo# = additionValueBackwardRight#
addOnX# = (finalValueDiagOne#/2)*-1
addOnZ# = finalValueDiagOne#/2
endif
`Step 4: Apply info from the vector data to the object's position
posX# = camera position x(cameraNum)
posY# = camera position y(cameraNum)
posZ# = camera position z(cameraNum)
position camera cameraNum, posX#+finalValueX#+addOnX#, posY#+finalValueY#, posZ#+finalValueZ#+addOnZ#
endfunction
And here is that code implemented into the code you supplied:
`----------------------
`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
autocam off
`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 world ===============================
load object "map.x",10
` ==========================================================================
`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
position camera 0,100,0
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)
` ======================= Edited by brk_oth ===============================
`Position player BEFORE collision is worked out
POSITION CAMERA xPos,yPos,zPos
ROTATE CAMERA xLook,yAng,0
` alter player with collision, then update new x,y,z pos variables
playerCollisionHandler(0, 10, 99, 100, 15)
xPos = camera position x()
yPos = camera position y()
zPos = camera position z()
// place gun in view
POSITION OBJECT 1,xPos,yPos,zPos
ROTATE OBJECT 1,0,yAng,0
PITCH OBJECT DOWN 1,xLook
` ========================================================================
SYNC
LOOP
function playerCollisionHandler(cameraNum, mapNum, radius#, floor#, ceiling#)
`Step 1: collect current position
positionX# = camera position x(cameraNum)
positionY# = camera position y(cameraNum)
positionZ# = camera position z(cameraNum)
`Step 2: Check the Vectors
vectorRight# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#+radius#, positionY#, positionZ#)
vectorLeft# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#-radius#, positionY#, positionZ#)
vectorForward# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#, positionY#, positionZ#+radius#)
vectorBackward# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#, positionY#, positionZ#-radius#)
vectorForwardRight# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#+radius#, positionY#, positionZ#+radius#)
vectorForwardLeft# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#-radius#, positionY#, positionZ#+radius#)
vectorBackwardRight# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#+radius#, positionY#, positionZ#-radius#)
vectorBackwardLeft# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#-radius#, positionY#, positionZ#-radius#)
vectorUp# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#, positionY#+ceiling#, positionZ#)
vectorDown# = INTERSECT OBJECT(mapNum, positionX#, positionY#, positionZ#, positionX#, positionY#-floor#, positionZ#)
`Step 2 and a half: Check these values for zero and re-assign values if necessary
if vectorRight# = 0 THEN vectorRight# = radius#
if vectorLeft# = 0 THEN vectorLeft# = radius#
if vectorForward# = 0 THEN vectorForward# = radius#
if vectorBackward# = 0 THEN vectorBackward# = radius#
if vectorForwardRight# = 0 THEN vectorForwardRight# = radius#
if vectorForwardLeft# = 0 THEN vectorForwardLeft# = radius#
if vectorBackwardRight# = 0 THEN vectorBackwardRight# = radius#
if vectorBackwardLeft# = 0 THEN vectorBackwardLeft# = radius#
if vectorUp# = 0 THEN vectorUp# = ceiling#
if vectorDown# = 0 THEN vectorDown# = floor# : canjump=0
`Step 3: Get info from the vector data
if vectorRight# <= radius# THEN additionValueX# = (radius# - vectorRight#)
if vectorLeft# <= radius# THEN additionValueXTwo# = radius# - vectorLeft#
if vectorForward# <= radius# THEN additionValueZ# = (radius# - vectorForward#)
if vectorBackward# <= radius# THEN additionValueZTwo# = radius# - vectorBackward#
if vectorForwardRight# = 0 THEN additionValueForwardRight# = radius# - vectorForwardRight#
if vectorForwardLeft# = 0 THEN additionValueForwardLeft# = radius# - vectorForwardLeft#
if vectorBackwardRight# = 0 THEN additionValueBackwardRight# = radius# - vectorBackwardRight#
if vectorBackwardLeft# = 0 THEN additionValueBackwardLeft# = radius# - vectorBackwardLeft#
if vectorUp# <= ceiling# THEN additionValueY# = (ceiling# - vectorUp#)
if vectorDown# <= floor# THEN additionValueYTwo# = floor# - vectorDown#
if vectorDown# < floor# THEN canjump=1 : if spacekey() = 1 then jump = 2
`Step 3 and a half: Re-assign for the closest vector
if additionValueX# > additionValueXTwo# THEN finalValueX# = additionValueX#*-1 ELSE finalValueX# = additionValueXTwo#
if additionValueY# > additionValueYTwo# THEN finalValueY# = additionValueY#*-1 ELSE finalValueY# = additionValueYTwo#
if additionValueZ# > additionValueZTwo# THEN finalValueZ# = additionValueZ#*-1 ELSE finalValueZ# = additionValueZTwo#
if additionValueForwardRight# > additionValueBackwardLeft#
finalValueDiagOne# = additionValueForwardRight#*-1
addOnX# = finalValueDiagOne#/2
addOnZ# = finalValueDiagOne#/2
ELSE
finalValueDiagOne# = additionValueBackwardLeft#
addOnX# = finalValueDiagOne#/2
addOnZ# = finalValueDiagOne#/2
endif
if additionValueForwardLeft# > additionValueBackwardRight#
finalValueDiagTwo# = additionValueForwardLeft#
addOnX# = finalValueDiagTwo#/2
addOnZ# = (finalValueDiagTwo#/2)*-1
ELSE
finalValueDiagTwo# = additionValueBackwardRight#
addOnX# = (finalValueDiagOne#/2)*-1
addOnZ# = finalValueDiagOne#/2
endif
`Step 4: Apply info from the vector data to the object's position
posX# = camera position x(cameraNum)
posY# = camera position y(cameraNum)
posZ# = camera position z(cameraNum)
position camera cameraNum, posX#+finalValueX#+addOnX#, posY#+finalValueY#, posZ#+finalValueZ#+addOnZ#
endfunction
No signature found...