Game development encompasses a large amount of questions, and one major one is the subject of random chance. It’s not a subject to take lightly, either. As someone who’s played several competitive and/or highly-strategic games, I know full well how much random numbers can screw people over. Whether it’s drawing a random card in any given TCG, randomly-generated stats you can influence in Pokémon, or even the chance of missing with an attack in most RPGs, the more strategic player will decry one thing on a consistent basis: luck is negatively influencing their grand master plan.
There’s also good things to say about random chance, of course. Random chance allows a certain dynamism to be present if a game is to be played solo. Without it, most games would have the same results from the same inputs every time, which causes problems when you’re not playing a multiplayer game.
In multiplayer games, whoever loses a match will inevitably try to shake things up. In those cases, random chance does nothing but get in the way unless it’s intended as more of a party game and it’s there either for laughs (see Super Smash Bros. and Mario Party) or as a form of rubber-banding (see Mario Kart). Still, even in that case, it gets in the way of players whom would prefer it not be there, which is why most games that do this provide an option to disable it.
But enough about other games. This is a very important decision I had to make early on when designing Battlefield of Love. Would I embrace random chance and allow for things like random missing and critical hits?
My answer was actually no. My logic here being simple: I wanted to give the player complete control over their options at any given time, and for them to know that action X will always get result Y. I’ve already gone over how I messed with status ailments to make them all very deadly and dangerous, and one step I took that you may have noticed was paralysis not being random, but consistent.
For those who didn’t see that post, paralysis in Battlefield of Love is three-tiered, with each one expiring at a separate rate based on what inflicted it. Having one tier of it on a character will make them skip every third turn. Having two will make them skip all but every third turn. Having three skips all turns. However, I was not able to move it 100% in that direction, as I still needed to make paralysis random for support characters due to their lack of turns. For them, any given action has a 1 in 3 chance of failing for each tier of paralysis that’s active.
I also made attacks hitting or missing consistent based on stats and the current status of the attacker and defender. If the attacker is close enough for the defender to notice (which is based on a stat), then a calculation is run comparing certain stats of the attacker and defender. If the defender’s stats are higher by 10% or more, they avoid the attack unless the attack is simply unavoidable. Some or all status conditions may impair or completely disable avoiding attacks based on whether it’s a dodge or a parry.
Another reason I did this is because players already have to deal with up to 20 actors – 8 player characters and 12 enemies. Things move really fast. Big groups of enemies with any amount of teeth could gang up on one character and knock them out immediately (provided, of course, the attacks aren’t all being avoided). You don’t want to deal with random chance when you already have too much to consider.
At least, not major random chance. Minor bonuses tied to random chance are fine, maybe for the sake of flavour. For example, one of the player characters is slated to have a 20% chance to parry any parriable move that they would otherwise fail to. Before you see this as a major balance concern, that character still manages to get themselves killed very often as I implement various things.
There’s a good reason why I see minor, positive random chance as a good thing, though. I would never advocate this for a multiplayer game, but positive random chance in a single-player game in small doses allows for the aforementioned sense of dynamism. At the same time, being saved by luck leads to fun stories of how you snatched victory from the jaws of defeat, while the inverse would lead to complaints of the game snatching away from your victory and tossing you to the wind, your only companion being an undeserved failure.
Now, I’m sure one naive question comes to mind. “Why not implement random misses only for the opponent, or only give the player a chance to deal critical hits?” Simple – for the sake of fairness. It’s for that same reason (on top of many, many others) that I intend to avoid making bosses immune to status ailments. Having things be so one-sided can take one out of the experience if it’s done in a noticeable way.
For me to use critical hits, I would want to have a system similar to that seen in Trails in the Sky. That game announced critical hits ahead of time (tied to a specific turn) and let you shift the turn order to control who gets it. However, to be perfectly honest, I cannot think of a way to implement such a system here while giving the player ample time to prepare for it, so I’m just not.
The planned AI for the enemies will also make things more dynamic based on enemy targeting preference, but that’s something for another time.
Yup, I have a new prototype handy. Click here. Most changes are under-the-hood, but there should be quite a few obvious ones. Especially visually.
I do not know of any glitches in this build (though we’re getting to the point where they could pop up anywhere without my knowledge). Well, that is, aside from a visual bug with the UI that could pass off as natural (buttons hang in the air after being pressed for longer than I’d like if you don’t stay hovered over them).
What I will note is that most skills are not yet implemented. Those not implemented will show up as not yet being unlocked, to distinguish from those that do not currently meet usage conditions. Additionally, trying to use a skill with a support character will, as before, lead them to perform a basic attack on a random target.
Feedback is appreciated. Noting any bugs you encounter (and how you got it to show up) is doubly appreciated.