s&box/field-guide
the symptom, in your words

"Input.config and AnalogMove for a new game"

✓ verified on engine 26.07lane: Getting set upposted
▸ SYMPTOM
  • Input.AnalogMove stays zero despite WASD.
  • New action in Input.config never fires Input.Pressed("MyAction") even though dotnet build is green.
  • Gamepad bumpers don't bind with LeftShoulder / RightShoulder names.
▸ CAUSE

ProjectSettings/Input.config is a JSON list of actions. WASD only feeds Input.AnalogMove when actions are named Forward / Backward / Left / Right.

New actions do not register until the editor restarts (or at least a full Play restart that reloads the action list) — headless compile success does not reload bindings.

▸ FIX

Schema

Each entry: { Name, GroupName, Title, KeyboardCode, GamepadCode }.

  • Input.Pressed / Down / Released("name") — case-insensitive; underscores must match.
  • Input.MouseWheel is a Vector2; Mouse.Position is pixels; use Screen.Width / Height for math.

Project-standard set

Movement (Forward/Backward/Left/Right) + Run + Jump, Interact (F), Attack1/2 (mouse), Slot1–9, plus game-specific (Build, Admin, …).

Gamepad codes that work

Verified strings include: "A", "B", "X", "Y", "LeftTrigger", "RightTrigger", "LeftJoystickButton", "RightJoystickButton", "DpadNorth" / South / East / West, "None".

Bumpers: "SwitchLeftBumper" / "SwitchRightBumper" — not LeftShoulder / RightShoulder. Menu: "SwitchLeftMenu" / "SwitchRightMenu".

Optional: Input.UsingController exists for pad-only feel gates. Prefer engine ConVars for user look sensitivity — don't override ControllerLookPitchSpeed / ControllerLookYawSpeed from game code.

After editing Input.config

Restart the editor (or fully reload so the action list refreshes). Then Play-test the new binds.

Wish-dir pattern once AnalogMove works:

snippet
var wish = Rotation.FromYaw(cameraYaw)
    * new Vector3(Input.AnalogMove.x, Input.AnalogMove.y, 0);
▸ WHY IT WORKS

AnalogMove is a derived stick built from specifically named digital actions — rename them and the vector dies. The input action table is loaded with the editor session, not with every hotload, so new names need a restart to appear.

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