Anyone have a RPG stile collision routine to share? Better yet how about one for sliding collision. I have started on one below:
Function PlayerToWallCollision(p.tPlayer) ;Find four corners of Player and check ;them For collision with the walls. ; ;Also steer around corners automaticly ; +---+ ; | P | ; +---+ Local TL=0,BL=0,TR=0,BR=0 If Walls((p\Sprite\X)/TileSize,(p\Sprite\OldY)/TileSize)=1 Then TL=1 If Walls((p\Sprite\OldX)/TileSize,(p\Sprite\Y)/TileSize)=1 Then TL=1 If Walls((p\Sprite\X+p\Sprite\Width)/TileSize,(p\Sprite\OldY)/TileSize)=1 Then TR=1 If Walls((p\Sprite\OldX+p\Sprite\Width)/TileSize,(p\Sprite\Y)/TileSize)=1 Then TR=1 If Walls((p\Sprite\X)/TileSize,(p\Sprite\OldY+p\Sprite\Height)/TileSize)=1 Then BL=1 If Walls((p\Sprite\OldX)/TileSize,(p\Sprite\Y+p\Sprite\Height)/TileSize)=1 Then BL=1 If Walls((p\Sprite\X+p\Sprite\Width)/TileSize,(p\Sprite\OldY+p\Sprite\Height)/TileSize)=1 Then BR=1 If Walls((p\Sprite\OldX+p\Sprite\Width)/TileSize,(p\Sprite\Y+p\Sprite\Height)/TileSize)=1 Then BR=1 If 1=1 Then;p\Jump= False Then If TL+BL+TR+BR > 0 Then Select p\Sprite\WalkDir Case UPDIR If TL+TR < 2 Then If TL > 0 Then If BR <> 1 Then p\Sprite\X=p\Sprite\OldX+p\Speed:p\Sprite\Y=p\Sprite\OldY End If If TR > 0 Then If BL <> 1 Then p\Sprite\X=p\Sprite\OldX-p\Speed:p\Sprite\Y=p\Sprite\OldY End If Else p\Sprite\Y=p\Sprite\OldY End If Case DOWNDIR If BL+BR < 2 Then If BL > 0 Then If TR <> 1 Then p\Sprite\X=p\Sprite\OldX+p\Speed:p\Sprite\Y=p\Sprite\OldY End If If BR > 0 Then If TL <> 1 Then p\Sprite\X=p\Sprite\OldX-p\Speed:p\Sprite\Y=p\Sprite\OldY End If Else p\Sprite\Y=p\Sprite\OldY End If Case LEFTDIR If BL+TL < 2 Then If BL > 0 Then If BR <> 1 Then p\Sprite\Y=p\Sprite\OldY-p\Speed:p\Sprite\X=p\Sprite\OldX End If If TL > 0 Then If BL <> 1 And BR <> 1 Then p\Sprite\Y=p\Sprite\OldY+p\Speed:p\Sprite\X=p\Sprite\OldX End If Else p\Sprite\X=p\Sprite\OldX End If Case RIGHTDIR If BR+TR < 2 Then If BR > 0 Then If TL <> 1 Then p\Sprite\Y=p\Sprite\OldY-p\Speed:p\Sprite\X=p\Sprite\OldX End If If TR > 0 Then If BL <> 1 Then p\Sprite\Y=p\Sprite\OldY+p\Speed:p\Sprite\X=p\Sprite\OldX End If Else p\Sprite\X=p\Sprite\OldX End If End Select If TL+BL+TR+BR >=3 Then p\Sprite\X=p\Sprite\OldX:p\Sprite\Y=p\Sprite\OldY End If EndIf End Function