diff --git a/AGENTS.md b/AGENTS.md index 8abaca9..251599d 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -261,12 +261,12 @@ keep the controller pointed at the spawner rather than the transient instance. #### Game Mode Input -Game mode input is kept in sync with the physical keyboard each frame by -calling `SDL_PumpEvents()` followed by `SDL_GetKeyboardState()`. This prevents -missed `keyReleased` events from leaving movement keys stuck (the original -cause of the "infinite slow walk" after releasing Shift+W). Event-driven -`keyPressed`/`keyReleased` handlers are still used for one-shot actions such -as `ePressed`, `fPressed` and `iPressed`. +Game mode movement keys (`W`, `A`, `S`, `D`, left/right `Shift`) are handled +inside `keyPressed`/`keyReleased` by `keysym.sym`. Repeated `KEYDOWN` events +(`evt.repeat != 0`) are ignored for movement keys, because releasing `Shift` +while `W`/`A`/`S`/`D` is held can generate a repeated keydown with a different +symbol after the physical release, which would otherwise leave the key stuck. +One-shot actions (`E`, `F`, `I`, `Escape`) are still matched by `keysym.sym`. #### CharacterSpawnerComponent