NOTE: If this autistic deep dive into controls minutia doesn’t interest you, I’m going to have a much longer and more typical post tomorrow.
When we last left off I had what I believed to be a small conundrum with respect to controls. I could no longer pretend that it was acceptable to ask the player to press LCTRL and TAB in quick succession. However, almost as soon as I wrapped up that article, I came up with what I believed to be a perfect solution. Instead of LCTRL, I would simply use the left alt (LALT) button instead, since that is pressed with the otherwise unoccupied thumb. The pinky would then comfortably rest on the tab key, with no other responsibilities.
It was absolutely brilliant. Nothing bad could possibly come from this.
Well, it turns out that asking the user to sweatily press the alt button and the tab button in quick succession fails miserably. This can’t be worked around, nor should it. The user expectation that alt-tab will function as expected is more important than any game mechanic detail.
I laughed this failure off, but still went to bed with the same problem. After a bit of tossing and turning, I had another “genius” idea. Why stick with the TAB key for switching weapons, when I could use Q/E?* Implementing this change was easy. Just a few lines of code here and there, and I had a game that felt… absolutely awful to play.
*Q/E as one, because you the user does have to take their fingers off WASD to press these keys, so giving them this redundancy means that they don’t have to choose between moving in the sideways direction of their choosing and – in this case – switching weapons.
At first I chalked this up to inexperience with the new control scheme. I have a lot of muscle memory hitting TAB to switch weapons, in this game and others, and that can’t just be turned off. Unfortunately, it runs deeper than that, because there’s a very good reason PC shooters almost unanimously put TAB as the weapon switch button instead of Q/E; the pinky is free, the index and ring fingers are not.
No matter, I had an even better idea. Let’s rework the guns. The old method of alt-firing was to hold down the alt-fire button (LCTRL) in combination with the LMB. The new method was through discreetly set modes. So the user is firing the plasma gun the usual way, then presses Q/E and switches to the alt mode. They then continue pressing LMB as usual, with no other key combinations, and get the alternate fire.

Left, regular fire, right stasis chosen.
The gun’s current mode would need to be represented of course, but all we have to do is render an icon in the center of the reticule, which changes based upon the mode. You can see this in the image above, and it was a total disaster. But why?
First of all, the player needs to be constantly reminded what mode they’ve chosen, yet if the reticule is shown above the enemies, it hides the enemy. That might not be such a huge deal for the very large enemy in the picture below, but it’s a dealbreaker for most enemy types. Placing the graphic underneath the enemy effectively just hides it, so you’re back to not knowing what mode of fire your gun is in.

Left, can’t tell what enemy I’m targeting. Right, can’t tell what mode my gun’s in.
Yes, with a great artist/UI designer this problem might be alleviated somehow, but that’s speculative, and doesn’t help me during development. In the meantime, this UI experience is atrocious, and if you’ve played any games before, you don’t need me to tell you how frustrating it is to die because you were unable to quickly and accurately assess what mode the gun is in, something that gets really tricky when you’re also swapping between the two weapons and trying to remember what mode the other is in because you can’t see shit because there’s enemies everywhere and the game is already visually confusing.
On top of all that, pressing Q/E is just irritating. As touched upon earlier, theoretically this doesn’t impact the player’s movement. If they are moving to the right, they can press Q, and if they are moving to the left, press E. In practice, there are a lot of quick movements back and forth when the action gets going, and on top of that, it’s weird to have the same function on multiple keys. Most users, myself included, are going to stick to using one or the other, so that theoretical advantage doesn’t really exist.
The final solution to the alt-fire control problem was to rip out the alternate fire modes entirely. I really like them, both the stasis and the concussion grenade, and I also did a ton of work on them, from design, to shaders, to regular programming, just to get them to an almost good enough state. Unfortunately, I can’t justify this terrible user experience, so I walled that all off. Right now we’re back to the regular plasma rifle and sniper fire, with no extraneous details.
I am not the first developer to suffer through this.

Torchlight 2
I was never a fan of the Action Role Playing genre, but I remember installing Torchlight 2 during the pandemic, and mostly enjoying the first act, before quitting at the start of the second act. My skill bar had filled up, and I have zero patience for a control scheme that requires me to quickly and accurately press arbitrary numerical keys down while also casting all my other abilities.

Zooming in on the quick cast bar. This one isn’t even full.
But I get it. Developer ambition has always been negatively correlated with great controls. There are 104 keys on your standard PC keyboard. It’d be amazing if we could use them all. Unfortunately, for a shooter, you get to use about ten of them, and even that’s pushing it. If you want a truly seamless experience, you’re sticking to WASD, TAB, SHIFT, SPACEBAR, and maybe one of the R,T,G, keys plus the three buttons on the mouse.
Looking at the keyboard is like dying of thirst, and seeing a pristine, fresh stream on the other side of a canyon. There are so many cool things we can almost do a keyboard, but can’t because it feels bad to ask the player to hit TAB and LCTRL in close succession, or because alt-tab is a thing.
Anyway, that’s my rant. I’ll post a more fun update tomorrow.