Responsive Mobile Action Controls in BOSSGAME (2022)
By Lily Valeen (cohost / twitter / email)
Hi! I’m Lily Valeen, the developer behind the game BOSSGAME: The Final Boss is My Heart. Bossgame was originally released for mobile in 2022. It’s a fast-paced boss-rush where the player controls two characters in battle against a variety of tricky enemies with complex attack patterns.
Since Bossgame came out, quite a few folks have mentioned how responsive the game feels despite being on mobile, and how they were surprised they never dropped inputs while playing. Yay! Thank goodness, because it took me ages to get that right.
I'm genuinely pretty proud of the control scheme for Bossgame. One of my central goals (more of a self-challenge) was to make a mobile action game that created the same sort of back-and-forth tension of something like Dark Souls, without the frustration that trying to press buttons quickly on a phone usually entails. So let's chat about why it works!
Remove accidental commitment
One absolute necessity for Bossgame was to prevent accidental button presses that would lead to massive punishment. In typical action games, you tap a button on the controller, it resists a little before giving a satisfying click, and your character attacks or jumps. These actions are often a commitment, with lots of risk & reward. If you attack at the right time, you defeat an enemy, if you attack at the wrong time, you get slapped.
However, on a phone, it is really easy to slide your fingers over any of the buttons without resistance. If a stray tap on your phone had the same level of commitment, you might find yourself jumping at the wrong time and falling down pits, or stuck attacking when you want to defend. This was something I had to avoid at all costs if Bossgame was ever going to work, so I experimented until I found a set of controls that felt reliable.
In Bossgame, attacks are high-commitment actions, because they cost a large chunk of energy that you also need to defend. If you accidentally fire one off at the wrong time, you could find your character unable to block a dangerous attack. To prevent this, every attack requires a short hold & release to unleash, which looks like this:
You press an attack button. There is a small vibration, the button glows, and the respective character plays a “charging” animation of particles.
After being held a set duration, the charge completes. There is a larger vibration, a small “chirp” sound, and the character starts glowing.
You release the attack button. The attack animation plays, with all the associated sprites, particle explosions, and sounds. Damage is dealt and the character’s energy is consumed..
Weak, low-risk attacks take 0.5 seconds to charge, while heavy, high-risk attacks take 1.1 seconds to charge. If you accidentally tap the attack button for a split second and release, nothing happens. This has a few interesting effects!
By making the player press & hold the button to actually execute an action, you can greatly reduce the chance players accidentally overcommit.
The sound and vibration help you confirm that you’ve fully charged your attack without you needing to even look. After playing for a while, players will mentally learn how long they have to hold each attack button, making it a reflex.
Your finger’s "release" after holding becomes a replacement for the satisfying click of a gamepad button; the player knows they've acted. All in all, the hold & release action has the sensation of winding up a baseball bat before swinging… It feels good!
On the flip side, there is one other main action in Bossgame that works entirely differently: defending. Defending is indiscrete. It has no windup or duration; your characters can put up a shield for 0.05 seconds or 3 seconds. Every moment of defense costs your character a miniscule amount of energy, so it's relatively low-commitment.
If you press the defend button on accident due to a stray press, it costs you very little. Because defending is not risky, it can be a simple on/off button hold. I made sure that accidentally defending was something that was never punished - the only risk is if you hold your shield for a long period of time.
Where can we use this?
Of course, I did have to design Bossgame around these ideas. The "holds" had to be at least long enough to prevent accidental presses, so I couldn't add attacks with no windup. And because blocking is so immediate, I could never have the game punish the player for blocking accidentally.
There are a lot of limitations to the designs this control scheme works for. In general, movement mechanics don’t work well with hold & release controls. For example, a common game verb like “jumping” is usually designed to be a quick, no-windup action, but has a high commitment & risk factor (falling into pits, etc.). Walking/running in games is usually very precise and instantaneous, but punishment for bad movement goes from 0 to 100 very quickly (it's either safe ground or spikes) which makes it a bad fit for this "hold & release" control scheme.
The above is why Bossgame is a game with zero player movement! A game with Dark Souls-esque combat but with zero movement seems simplistic; however, with the addition of a second hero to control & very mobile bosses, it manages to work in a lot of verve and depth regardless. In many ways, Bossgame's battles are closer to something like Punch-Out, or the Mario & Luigi series.
There are definitely more ways to use these principles to make action games on mobile that feel responsive & fair, and I'm really curious to tweak & explore this idea more in future games.
Extra notes:
Fewer, bigger buttons: Having only three buttons on each side of the screen makes it difficult to accidentally press the wrong thing. Try and make the most out of every action that requires its own button, instead of adding more buttons.
Haptic feedback: Play a small vibration when players start any action; play a medium vibration when it's complete. Don't use vibration for anything else. It's not as good as the *click* of a controller button, but it adds a lot, so take what you can get. A lot of playtesters said this helped them feel confident their hands were doing what they wanted without having to look for the buttons manually.
Input leniency: Phone presses are always going to feel more finicky than a physical button, so consider leniency when it comes to inputs. In Bossgame, if an attack is nearly charged (within 5-10 frames) and the player releases early, I count it as an attack anyway. If the player drops their defense early, or puts it up late (within 5-10 frames) I also count it as a successful block.
Thanks for reading! Control schemes are a hard thing to show off or even talk about, but I hope that this helps inspire folks who might be interested in designing fast-paced mobile games.
If you're interested in Bossgame, you can check it out on Steam, Itch.io, Google Play, or the App Store.
Lily 💜
Take the reader survey!