the symptom, in your words

"Vector3.Right is (0, -1, 0), not +X"

✓ verified on 26.07.08e
lane Getting art inposted

▸ SYMPTOM

Geometry or movement that should go along +X instead travels along -Y. Doors slide along their face normal instead of sideways, wall grids tile across the wrong axis, or a directional offset points 90 degrees off from where a comment says it should.

▸ CAUSE

s&box inherits the Source engine's left-hand coordinate convention:

Named vectorValue
Vector3.Forward(+1, 0, 0), world +X
Vector3.Left(0, +1, 0), world +Y
Vector3.Right(0, -1, 0), world -Y
Vector3.Up(0, 0, +1), world +Z

Vector3.Right is not +X. If you write Vector3.Right intending "the positive X direction," every calculation using it silently operates on -Y instead.

▸ FIX

Use literal axis vectors for anything directional where you mean a specific world axis:

snippet
// DON'T - Vector3.Right is (0, -1, 0)
var slideDir = Vector3.Right;

// DO - be explicit about the axis you want
var slideDir = new Vector3( 1, 0, 0 ); // world +X

For rotated-frame directions, derive from the object's own Rotation:

snippet
var localRight = Transform.Rotation * new Vector3( 0, -1, 0 );
var localForward = Transform.Rotation.Forward; // +X in local frame

Catching it early

A build-time audit that checks spawned transforms against their expected plane catches axis swaps before they ship. For a grid of objects that should lie in a plane, assert that the max off-plane distance is near zero:

snippet
float maxOff = spawned.Max( t => MathF.Abs( Vector3.Dot( t.Position - origin, planeNormal ) ) );
if ( maxOff > tolerance )
    Log.Warning( $"Grid off-plane by {maxOff:F1}u - suspect axis swap" );

▸ WHY IT WORKS

This is a silent wrong-value bug: the code compiles, runs, and looks almost plausible. You only notice when a door slides the wrong way or a grid is rotated 90 degrees. The Source convention is consistent (Forward = +X everywhere), but naming Right as -Y catches anyone coming from Unity or Unreal conventions.

Verified on engine 26.07.08e: seen in a real project.
s&box moves fast; an undated fix is a liability. Spot a stale detail?

Want to know when new guides or fixes drop? Join the community to help build this out. Report gotchas, flag outdated fixes, or just lurk.

Join the Discord