# Controls Keyboard and mouse. The same list is shown in-game, bottom-right of the frame (`AGigLineHUD`), and the packaged Linux build ships with these bindings. | Action | Key | Notes | | --- | --- | --- | | Move forward | `W` | 4 m/s walk | | Move back | `S` | | | Strafe right | `D` | | | Strafe left | `A` | | | Look | Mouse | Captured on launch; `Escape` releases it | | Jump | `Space` | | | Reset to start | `R` | Returns to the grounded spawn point | | Pause / release mouse | `Escape` | Second press resumes and recaptures the mouse | | Swap first / third person | `V` | First person is the default; the body is hidden in that view | ## Notes - Movement is relative to where you are looking (controller yaw), so the capsule stays upright on the sloped street. - The mouse is captured on launch, so looking works without clicking first. `Escape` toggles the capture as part of pause. - Bindings are Enhanced Input actions in `/Game/Input` built by `Tools/ue_create_input_assets.py`; the mapping context is `IMC_Default`. ## Changes since `0.1.0` - **`V` swaps first and third person** (`0.2.0`, `IA_ToggleCamera`). The shipped default view is still first person, as the owner decided for `0.1.0`; third person adds a collision-tested spring-arm camera and a visible, animated body. `Escape` still pauses and releases the mouse in either view. ## Review and harness switches These are command-line switches for the screenshot pipeline and QA runs, not player controls. They exist so a capture is reproducible rather than dependent on a human pressing keys at the right moment. | Switch | Effect | | --- | --- | | `-thirdperson` | Starts the pawn in the third-person rig, so a capture shows the body without anyone pressing `V` | | `-walk` | Holds forward input from the first frame — what makes the stride shot possible | | `-qaselftest` | Runs the scripted walk / reset / pause / transect checks and quits | The walking shot is driven per shot rather than by the switch: the shot actor enables the walk only while a tracking (`ShotFollow`) camera is being captured, and returns the pawn to spawn afterwards, so the fixed-camera shots still find it in place. ## Testing input without a physical keyboard `Tools/input_test.py` injects OS-level keyboard/mouse events through a virtual `/dev/uinput` device (see `Tools/input_emulation.py`), e.g.: ```bash python3 Tools/input_test.py --sequence move:2,look:3 ``` It drives the focused game window exactly like real hardware, which is how the controls were regression-tested on the packaged build.