Hey, I made a Quake I style movement system and I’ve stumbled upon something that I’m really bad with. One of those things being collision detection and flattening a vector against a wall (at least I think that’s what it’s called). By flattening a vector against a wall I mean this:

and right now this happens in my movement system:

I would want to know how I would detect if a wall is in front of the player and flatten the vector against it like shown in the GMOD example.

What I mean by flattening the vector against the wall on an image:

I would greatly appreciate snippets of code, videos, websites or anything really that would help me understand this

(I am using the Linear Velocity body mover with a Vector Velocity Constraint Mode, ForceLimitMode is PerAxis and MaxAxesForce is Vector3.new(math.huge, 0, math.huge) )

Sorry for the bad handwriting on the image , it’s hard to write on PC.

I don’t know the best way to implement this using Roblox’s API, but I can tell you the math for calculating the “flattened” vector. Based on the drawing you made, you already know your velocity vector v. If you can get the normal vector n of the surface you are colliding with then you can calculate the “flattened” vector f = v - (v dot n)n.

(v dot n)n will give you the component of v parallel with n going in the opposite direction. From there, we can subtract it from the original vector to get the component of v that is perpendicular to n and in the direction of v. I’ve drawn a picture that can hopefully illustrate what I mean. The dotted lines are just the vectors shifted so that the origins are the same as the normal vector (It makes the illustration easier to understand).