Making a good action game involves doing things like creating a variety of moves that each have a specific niche that they’re good at, but which other moves compete for their place, so choosing the right move for a situation is an interesting choice. Good action games have you use skill to perform moves by either remembering combo strings or finding ways to link different moves together with juggles or cancels.
Good action games have moves with different ranges, speeds, and areas of effect.
Good action games usually have at least 2 different defensive options with tradeoffs that make them easier or harder based on circumstance, and require some type of situational awareness, as well as different payoffs for success that themselves are situational.
In good action games, multiple enemy types are mixed and matched, so their overlapping attack patterns prevent you from just countering any individual enemy and locking them down.
A good action game has commitment, so when you perform an action, you are usually stuck performing that action when it is unsuccessful, so you can potentially take damage. When you are allowed to cancel your commitment or hedge your bets, it is usually costly, or forces you into a different type of commitment instead.
So how do you make a bad action game? Easy, just make everything uniformly functional and only aesthetically different, and give different moves clearly defined purposes that no other move can perform, like a specific key to a specific lock. This way every move is only good for 1 thing and it’s completely clear what that move is good for, and no other move will do.
Instead of making it so you perform different strings or combos through experimentation or skill, make it automatic. Instead of varying the properties of moves, make it so you play a paired animation with enemies and select the appropriate animation so your attacks always connect and always have the optimal followup. Randomly vary the combo followups so they look cool, but because it’s a paired animation, don’t have different properties in any real sense of the word.
Instead of having a few defensive options with varying rewards and situationality, add 1 defensive option that can beat anything regardless of circumstance and always leaves you in a good situation.
Instead of mixing multiple enemies that compliment each other with overlapping attack patterns, mix enemies that have functionally the same attacks, and limit them so only 1 enemy can attack at a time. Allow individual enemies to be locked down easily if there is no one else around to interrupt your attacks, and don’t let them interrupt if you’re in the middle of a paired animation.
Instead of restricting your ability to cancel moves or creating commitment to bad decisions, a bad action game lets you cancel offense into defense or more offense at any time, so choosing between different types of commitment is never necessary. To go further, allow the defensive options to cancel into themselves, or just give you a block against all damage with no associated cost that can cancel anything.
Basically, if you want to make a bad action game instead of a good one, make Batman Arkham Whatever.
Notice that doing this removes all interesting choices from the game and makes it resemble an easy version of DDR more and more as you continue to strip out everything fun. You’ll also end up with a game that is really easy to understand, and frees you up to make any type of cool looking thing you want happen without most of the technical hurdles usually associated with making that work in gameplay, like good collision detection.
So now your character could do absolutely anything as a paired animation with an enemy, and you don’t need to worry about positioning hitboxes and hurtboxes, coding complex state changes on hit, block, or dodge, or coming up with ways that different moves can have tradeoffs with one another while accomplishing similar purposes. Just animate really cool shit happening constantly, and you can have players mashing the button for it all the time.
Doesn’t that sound enjoyable?