Building a Better Single-Player and Co-Op Experience

Full Metal Furies is an Action-RPG that is designed to be both a single-player and co-op multiplayer game.  When we first started development, we had two goals in mind:  Modernize the brawler genre, and create an experience that truly “worked” regardless of party size.  The first point aimed to address a lot of the issues that have plagued “old-school” beat-em-ups, and the second meant making a game that was just as fun to play alone as it was with a group of friends.  In this article, want to talk specifically about the trials of implementing both a single-player and multiplayer mode, and what we did to overcome them.

The Problem

Games are usually made with an ideal party size in mind.  During production, a priority is set on either the single-player experience or the multiplayer one, and attempts to accommodate the other often feels tacked on.  This “accommodation” is typically done by removing features in single-player that are multiplayer-centric (such as reviving teammates), or adding a scaling difficulty algorithm to balance the game as players join in or drop out of it.

For Full Metal Furies, we wanted an experience that didn’t make you feel like you were playing the “worse” version, regardless of the amount of players.  This ended up being a massive challenge, and added two years to our development schedule, but we think the results were worth it.  To start, because it is a two-pronged problem (solo/co-op), it needs a two pronged solution.


FIXING SOLO:  Pick 2 and Quickswitch

Making every feature in co-op available in single-player isn’t exactly a simple task.  Things like reviving your teammates or performing team combos is strictly a two (or more) person affair, so what can you do about that?  The first thing we ruled out was the inclusion of a teammate AI bot.  Because if there’s one thing everyone can agree on, it’s that AI bots suck.  They’ll always suck.  They suuuuuck.

We felt it was probably impossible to fully reproduce the co-operative dynamic in a single-player environment, so instead, we decided to double-down on each mode’s strength.  For single-player that strength is a mechanical mastery of the game, so to that end we implemented the Pick 2 and Quickswitch systems.

We’ll go over them in this article, but we’ve also released a video that gives a quick rundown of what these two features are.

ABC’s of FMF – Quickswitch Quintessentials


Pick 2

In FMF, if you play the game solo, you choose two hero classes to play as instead of one.  Each hero is their own completely separate character.  They have their own lifebar, cooldowns, equipment, etc.


The Quickswitch system works in conjunction with Pick 2.  You can switch between both characters instantly at the press of a button.  Characters that are “swapped out” will still have things like their cooldowns recharging in the background, meaning you are effectively given 2 entire ability kits to use at any time.


Retaining Co-op Functionality

Since the two heroes you choose are separate, and because swapping is instant, it means that we were able to retain all of the multiplayer specific functionality in solo play.

  •  Reviving remains – If you fall, you instantly switch to your other hero, giving you a chance to revive your fallen ally.
  • Combos conserved – Immediate character switching means the moment an enemy is knocked into the air, you have the option of swapping and continuing the combo with your other hero. It’s a bit more mechanically complex to pull off, but dang does it feel good when you do.
  • Barriers abound – The coloured barriers that protect enemies will be generated between the two colours of the selected characters on your team. You’ll need to swap to overcome them (Read on to get a quick explanation on barriers).
  • Team-oriented abilities endure – All buffs that are meant to apply to your entire team will still apply to your entire team. Those last minute saves still happen in solo.

Quickie – Barriers

Barriers are shields that can appear around enemies in Full Metal Furies.  All barriers are colour-coded, and only heroes of the same colour can damage them (but everybody else can still pull aggro, stun lock, etc).  After enough damage, the barriers will break, allowing everyone else to attack the enemy.


Barriers in action


Balancing Skill Difference in Multiplayer

With Quickswitching, solo play focuses on mechanical mastery since you must juggle two champions, and gain an expertise over twice as many abilities.  Playing with friends reduces that complexity since you only play as one character each.  Instead, it compensates by emphasizing communication and teamwork to execute on a plan of attack.

One problem in multiplayer games is the skill difference of the various players participating.  One player might be a veteran to the game, while the other is a newcomer.  In Full Metal Furies, this is addressed in numerous obvious ways, but one of the more subtle solutions lies under the hood.  The game applies an enemy aggro system that acts as a soft balance for player skill.  The better the player is, the more they naturally draw enemy aggression towards him or her.  It’s a light touch, but does make the game harder for good players, while easing the pressure on the less-skilled, and is a dynamic absent from single-player.

Rather than make a game that played as closely in single-player as it would in multiplayer, we ended up with something that played so differently, it was almost an entirely new experience.  We won’t go as far as saying they’re two different games, but we highly recommend giving both modes a shot if you get the chance.


FIXING CO-OP: Dynamic Scaling for 1-4 players

I was raised with 3 siblings, and when we were young we played any co-op game we could get our hands on.  That meant we often played co-op games with wildly different party sizes.   What you notice is that a lot of co-op games don’t play really well unless you’re enjoying it with the “ideal” number of players.  This is because most games use a very rudimentary form of scaling that are generally broken into three categories:

  1. Non-scaling co-op
    A co-op implementation where the game simply does not change regardless of how many people are playing. They bank on inherent game systems to work themselves out, or they’ll just tell the user what the optimal player count is.  Oftentimes there is a noticeable breakpoint where the system just stops working properly, either getting too hard or too easy.
  2. Forced numbers co-op
    Similar to non-scaling co-op, except these games enforce a set number of players in order to progress. For example, most MOBAs like Dota 2 require 5 players per side before the game starts, and will not accept any more or any less.
  3. Flat scaling co-op
    The most common attempt at balancing co-op where a difficulty algorithm is implemented, scaling enemy difficulty and the number of enemies based on the players available. Unfortunately making a one-size-fits-all equation often leads to a lopsided experience.  A game might start too easy, then become ridiculously hard near the end.  You can get pretty far with flat scaling in brawlers, but in some cases it just doesn’t pan out (such as ours, which we’ll explain at the end).

We weren’t satisfied with those options, so we created a dynamic scaling system integrated directly into the game’s architecture.  Rather than tweak a few available variables on a grand scale to account for the changing number of players, FMF has 100+ variables that are directly changed based on player count.  And rather than apply a linear algorithm, many of these variables are arrays that allow us to handcraft the numbers.  Of course, there are drawbacks to this.  Want to expand the game from four players to five?  Not. Gonna. Happen.


The Combat System Conundrum

Aside from the meticulous tweaking of variables in FMF, a more insidious problem lurks beneath the surface.  Before we go into more detail, we need to quickly talk about Combat Systems.

Quickie – Combat Systems

*Reminder, this is our own nomenclature and not official stuff.

One-vs- One (or few) Combat System

These combat systems are designed towards encounters with small groups or even singular enemies.  Because the battles are so intimate, it allows for enemies to feature complex AI and move sets in order to provide a good challenge.  This becomes problematic if too many enemies are on-screen at once, so some games fake large groups of enemies by implementing a queuing system, where the baddies take turns attacking.

One-vs-Many Combat System

These combat systems are intended for players to fight many enemies at once.  Each enemy acts independently from one another and there is no queuing, so more enemies means more attacks to look out for.  Every additional bad guy in this type of combat system increases the difficulty of the encounter exponentially.  This is the type combat styling we use in Rogue Legacy and in Full Metal Furies.

Example of One-vs-Many combat in FMF

 Most brawlers adopt the one-vs-one system.  In that scenario, adding more enemies to add more challenge is fine, because it just means more enemies have queued up.  There could be five enemies on-screen, but in reality you’re only fighting two at a time.  This works great because regardless of how many players are on the screen, the actual complexity of the encounter always stays the same.

Of course, this falls apart when you use a one-vs-many system like FMF does.  More enemies with no queuing means more threats to look out for.  And on top of that we use full-range combat, so your opponents will attack as often from far back as they will up close.  Suddenly readability of your surroundings becomes a real issue.  We can’t just add an enemy every time we add a player, because the difficulty stacks astronomically for all players involved.  To compensate, we had to use all tools at our disposal, with a full mix of tweaking stats (mentioned earlier), changing the enemy count, and changing enemy combinations and logic for every single arena in the game (of which there are over 200).


The Three-Level Difficulty Manager

The Difficulty Manager – or “DM” for short (hyuck!) – curates the game based on the total amount of people playing, in order to ensure the best possible experience. It does this at three different levels.

At the lowest level, the DM balances things at a micro scale, tweaking the enemies themselves based on total number of players.  This involves applying modifications to their base stats, determining their aggressiveness, which skills they can perform (all enemies in the game have three versions of varying AI complexity), and things like which barriers they should create.

The second level controls the combat arena.  It sets the “style” of the encounter, prepping details such as which combination of enemies are allowed to appear, the boundaries of the arena, and other nuances.

The highest level sets the rules on what is considered a “good” encounter.  It creates rules such as the general difficulty of the encounter, how many enemies can be on-screen, the speed at which they spawn, etc.  Because enemy count per arena is constantly changing based on players, this level ensures no encounters get completely out of hand.

In certain cases, all lower levels can override the numbers set by the higher levels to allow for unique combat situations.


The three level difficulty management system in action.  With more players, more Giant Brutes were added. Note though, that the jump from 2 to 3 players didn’t add an extra brute because the system decided that having 3 of them was enough.


Array Scaling

We touched upon this briefly earlier, but the final point we’d like to cover is scaling enemy difficulty using an array of values.  Rather than apply an equation to enemy stats, that simply go up or down in a formulaic fashion, we instead pull from an array of set values depending on the number of players.  This allowed us to fine-tune the difficulty curve, and apply a generally logarithmic curve in enemy stats.  As more players joined in, enemy stat increases became smaller, as we found adding a second player to the game did not make it twice as easy (and so on for three and four players).

When we set out to design enemy types, one rule guided the creative process:  No cannon-fodder.  That required every enemy to be unique in their own way.  No more damage sponges, and no more brainless filler enemies for free gold.  This asynchronous enemy logic inevitably meant some enemies were harder than others, which also meant a generic scaling formula for how much damage an enemy dealt, or how many hits they could take, would not work at all for this game.  Hence the necessity to tweak the numbers by hand.

Make no mistake, this was a ton of work, but handcrafting the difficulty curve was absolutely essential for FMF.

Is there more?

Of course, this only skims the surface of what we did to improve the experience and address solo vs multi play.  We did a ton more, but is anybody still reading at this point?

This endeavour ended up being hugely expensive and time-consuming.  But the real question is, did it work and was it worth it?  Believe me, we want to know the answer as much as you do, but it’s tough to say without any critical review!  All tests have gone great… internally.  Groups of one, two, three, and four players all enjoy the game… again, internally.  No matter who we solicit to play the game, it’s not the same as getting large-scale, real-world feedback from the consumer base.  And that can only happen when the game launches.

The goal of this article was not to claim we succeeded where other developers failed.  A lot of these features are below the surface, unnoticeable because it feels right to play.  That means they’re working as intended, but at the same time are completely taken for granted.  We just wanted to dive deeper into the mechanisms that run Full Metal Furies, and show you things we did to make the game as enjoyable as possible.  We hope you look forward to it!

® All Rights Reserved Cellar Door Games 2024

® All Rights Reserved Cellar Door Games 2024