One Finger Death Punch is a game developed by Silver Dollar Games available on Steam for 5$, the price of a Starbucks coffee.
Even though it has a very small price considering the videogame market these days, It makes some very interesting design decisions, the first one being how it is highly dependent on it's animations.
Chapter 1: The animations are key
With such simplistic mechanics as two button inputs the game need a way to be longer than a simple mobile-like endeavour, so how did they keep the player coming back, they used very responsive animations. I have a feeling that they might have QA tested the animations a lot during development to get just the right timing in order to the player's actions feeling responsive. The animations are simplistic but with the added effects they look particularly pleasant. The timing of animations is one of the keys in animation, and it usually takes a really long time to get it right not only for one particular animation, but for the animator to get a feel for when an animation should start. Also the timing for animations inside videogames is much harder to get right, as you have to know how long the player is willing to wait for the animation to finish. This amount of time can never be too long, but it really determines the phase of the game.
Take Dark Souls for example, it has a real clear distinction between fast rolling and fat rolling, the amount of time you have to wait is significantly more if you fat roll, but the most important part is that it is too much time the player needs to wait, so he cannot accept that, it feels like it's one second too long, thus the game encourages the player to fast roll.
In One Finger Death Punch the phase is very fast, thus the player not being willing to wait that much for an animation to end. The animations also have invincibility frames which raise the skill ceiling while lowering the skill floor.
The game does not have hit-boxes so the animation only plays when the player attacks, and he is attacked when the enemy has reached the center of the screen, the enemies are technically on rails.
Even taking that into consideration, the game has a lot of variety, with lots of animations for all sorts of weapons from melee to bows and throwables, which raises the skill sealing while again lowering the skill floor as the player has a minute of pause while preparing to throw the bombs while experienced players can just throw them immediately.
And this takes us into my next point.
Chapter 2: The variety of similar but slightly changed content
The first candidate for this are the nunchuck and lightsaber rounds, they are effectively the same type of stage, but they feel different due to the different effects that are used.
There is a lot of weapon variety, even though there are only 3 weapon types: melee, throwables and bows. Take the scimitar and the pole, they have the same reach but yet they feel different due to the different animations that are used.
Those characteristics make the player keep playing as he is not bored due to the variety of content and how it cycles every few seconds.
For example the survival mode in the game would have felt stale if the game only had one stage, so they added the lightsaber mode but then if the player completes the normal stage again he would play the lightsaber stage again, which would create repetition, so they added the nunchuck round.
Lots of game developers should take advice from this game regarding replayability. The assets could be generated using random number generation, but just remember the limitation of pseudo random number generation for lots of assets, as it is pseudo random after all, with the most basic implementations taking the system clock's milliseconds for the number, which is a very flawed system. Thankfully with C# and C++11 we now have very reliable pseudo number generators, but just remember to just reuse a generator as it has some very complex code in order to not repeat itself, so if there is just another one, if they are ran at the same time, they would give the same results.
Watch out as GCC does not have support for random_device yet so use Visual Studio for random number generation.
Chapter 3: Simple mechanics and play session length
The mechanics of one finger death punch are really simple, two buttons are needed to play, this technically makes it a rhythm game. The advantage of a rhythm, or any other game with simplistic mechanics really is that the play sessions can be very short, or the player could play a lot of very short sessions for a long amount of time, so when the player doesn't or cannot play anymore they just complete the 2 minute session.
One way to reduce the maximum amount of time the player can play is gating, with I am not approving of, but most mobile games use this. It locks content for the player unless they pay more or wait an arbitrary amount of time. I see this as very poor design, and I will continue to think this until a game comes and makes it right.
Another way is to create diminishing returns relative to the time invested, like have a hidden timer inside the game set to whatever your desired game session length, and just set the game to give the player lower and lower rewards after that length is reached. The change should be noticeable. How steep the drop should be depends on how strict you want your game's play sessions to be.
The simple mechanics also have another side effect, they create a dependence on content upon the game, which is not a problem for this game, but could become on for any game that settles for very simple mechanics.
If a game has deep mechanics with a high skill ceiling then it is not as based around content as it is based upon the mastery of the mechanics by the player.
Every developer should play and learn from this game, so I invite you to play it, One Finger Death Punch is available on Steam for 5$.