Dungeon crawler onKeyUp lowercases the key (event.key.toLowerCase()), so releasing Shift becomes "shift".
DungeonKeybindingManager.normalizeKey only lowercases single-letter keys. For "Shift" / "shift" it returns the string unchanged, so matchesAction(..., "sprint") compares stored "Shift" against input "shift" and never matches.
Result: after sprinting, releasing Shift does not restore playerCurrentSpeed to playerBaseSpeed. The player stays at 1.5× walk speed until something else resets it.
Repro (unit): playerCurrentSpeed = 12, playerBaseSpeed = 6, onKeyUp({ key: "Shift" }) → speed stays 12. Rebinding sprint to "x" and releasing x restores 6 (the restore line is reachable).
Fix: either stop lowercasing before matchesAction, or make normalizeKey case-insensitive for named keys (Shift, Space, ArrowUp, F-keys).
Dungeon crawler `onKeyUp` lowercases the key (`event.key.toLowerCase()`), so releasing Shift becomes `"shift"`.
`DungeonKeybindingManager.normalizeKey` only lowercases single-letter keys. For `"Shift"` / `"shift"` it returns the string unchanged, so `matchesAction(..., "sprint")` compares stored `"Shift"` against input `"shift"` and never matches.
Result: after sprinting, releasing Shift does not restore `playerCurrentSpeed` to `playerBaseSpeed`. The player stays at 1.5× walk speed until something else resets it.
Repro (unit): `playerCurrentSpeed = 12`, `playerBaseSpeed = 6`, `onKeyUp({ key: "Shift" })` → speed stays 12. Rebinding sprint to `"x"` and releasing `x` restores 6 (the restore line is reachable).
Fix: either stop lowercasing before `matchesAction`, or make `normalizeKey` case-insensitive for named keys (`Shift`, `Space`, `ArrowUp`, F-keys).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Dungeon crawler
onKeyUplowercases the key (event.key.toLowerCase()), so releasing Shift becomes"shift".DungeonKeybindingManager.normalizeKeyonly lowercases single-letter keys. For"Shift"/"shift"it returns the string unchanged, somatchesAction(..., "sprint")compares stored"Shift"against input"shift"and never matches.Result: after sprinting, releasing Shift does not restore
playerCurrentSpeedtoplayerBaseSpeed. The player stays at 1.5× walk speed until something else resets it.Repro (unit):
playerCurrentSpeed = 12,playerBaseSpeed = 6,onKeyUp({ key: "Shift" })→ speed stays 12. Rebinding sprint to"x"and releasingxrestores 6 (the restore line is reachable).Fix: either stop lowercasing before
matchesAction, or makenormalizeKeycase-insensitive for named keys (Shift,Space,ArrowUp, F-keys).Fixed in
spikersoft-angularPR #823 (a0f0ccd9). Closing.