I cannot initiate a "strafe left" or "strafe right" command if i have Ctrl held down already, no matter what configuration of keybindings I use. The game client behaves this way with anyone I have asked to test the problem on their own system, and I have had the same problems happen with multiple different keyboards. And yes, I run my game as administrator.



Even if I explicitly bind Ctrl+A to "strafe left", and Ctrl+D to "strafe right", I still cannot start moving with these keys while Ctrl is held down. Also, even with Ctrl+A bound to strafe left, using that keybinding still toggles ambience (I don't understand why this has not yet been fixed). Ctrl+S behaves perfectly fine, as long as "toggle sound" is unbound (as expected); Ctrl+W only initiates a "move-forward" if explicitly mapped to it (doesn't initiate "move forward", even if not bound to anything). To the best of my knowledge, Ctrl+W and Ctrl+D are not bound to anything by default. I have no such issues with the two other modifiers (Alt and Shift).



What I don't understand is: why does the game client appear to discriminate between these keys? Even if it were just an issue of certain keybindings not being able to be overridden (as appears to be the case with Ctrl+A), wouldn't Ctrl+W and Ctrl+D at least behave the same way? If i switch it up and bind Ctrl+W to "strafe right" and Ctrl+D to "move forward", Ctrl+D's command still doesn't work, but Ctrl+W does. And why is there a difference between the ways the separate modifiers are handled?



My best guess is that there is a fallthrough algorithm present for every event-firing (non-modifier) key, which checks for commands bound to those keys while a modifier is being held down. These algorithms should, and appear to do so with most keys, "fall through" to commands bound to unmodified keystates in such cases where a modifier is held down, but no command is present for that key-modifier combination. In the case of Ctrl+A, fallthrough is prevented because the client does not allow the "toggle ambience" command to be overridden. Ctrl+D prevents fallthrough by firing an apparently blank command that cannot be overridden. Ctrl+W probably also has this blank command, but for whatever reason, can at least be overridden with keybindings (but defaults back to the blank command if Ctrl+W is subsequently unbound).



I really didn't want to bring my programming background into this with my unproven game design experience at all, and I know how madpist people get when the players tell the developers how to write their code, but I feel obligated to judge. In a good OOP model, separate key events should not have separate code handling them, and all bindable commands should implement a common interface that allows them all to be bound and unbound indiscriminately (even the absence of "Toggle Ambience" in the Keybindings UI wouldn't prevent this). One of those two conventions would have to be violated to produce problems like these.