There was a particular genre of games, a rather niche genre, that existed in my gaming youth. It could best be described as "action flight simulator" and while it hasn't carried forward into today's gaming market as readily as the 'shmups and platformers, many of its ideas and mechanics can be found in modern flight sims. Kenneth Backus, the one-man development team behind Sky Rogue, shares with us his history with this particular genre and how he's bringing it back.
If you were a gaming enthusiast in the late ‘80s or early ’90s, you may fondly remember spending far too much time in stores which were entirely devoted to PC games, something that would be a living fossil in today’s world of instant downloads, paperless trading cards, and moderately humble bundles. The boxes were colossal, almost the size of a laptop screen, and contained hefty stacks of floppy disks (now known as “3d-printed save icons”), or along with a printed, often lavishly illustrated instruction manual. You would actually need to read the manual, both to have some hope of knowing how to play the game (tutorials were a largely unknown species), and to proceed past the copy-protection quiz that greeted you every time you started the game, a primitive and often endearing form of DRM.
Alongside the “Doom clones”, Gold Box RPGs, and so-called “real-time” strategy games (as opposed to wargames… “turn-based strategy” had not yet entered the gamer patois), among the lavishly coloured cardboard boxes that dwarfed their console cousins, you could find a genre of game that’s now considered niche, and that rarely, if ever, finds a few moments in the spotlight: the flight simulator.
To call the graphics simplistic was an understatement. These were some of the very first 3D games on the market, so merely being able to render a clash of polygons floating over a featureless coloured plane was an accomplishment. Since there were no textures, the ground would often have a grid of dots drawn over it so you could sense how far away you were. You would need to pore over the manual carefully to learn all of the numerous control bindings: raise/lower landing gear, raise/lower flaps, switch weapons, switch radar mode, adjust aileron trim, the list goes on.
Thankfully, there are a handful of flight simulators and series (literally a handful, I can count them on one hand) which simplify the gameplay quite a bit, and could be accurately termed “action flight simulators”. They generally give you an absurdly unrealistic amount of ammo, something even the 90s sims didn’t do, but to great effect: the more missiles you have, the more things you can blow up, and the more fun you might have in the end. Unfortunately, they often adhere to a few unspoken rules of the genre that I frankly don’t care for at all:
Almost exclusively feature only real-world aircraft Only one way to play: a very linear campaign with warring Whateveristans in an obligatory story that is basically Tom Clancy fanfic Rarely, they feature cramped environments, floating powerups, and stifling car-like controls which likely make them more accessible but reduce them from “flight simulator” to “flying game”In doing so, they certainly get more back to the basics of the ‘90s ancestors more than today’s properly-simulating flight simulator, but often lack the spirit of freedom, experimentation, and “making your own fun” that the sparsely-populated sims of yore would have simply due to the limitations in hardware and dev team size.
This is where Sky Rogue gets its inspiration, not just from the clean, sharp lines of flat-shaded polygons, but from the balance of space, unpredictability, action, and technicality that you might get from F-15 Strike Eagle III, A-10 Tank Killer, or Chuck Yaeger’s Air Combat. Explore another gaming family tree whose roots run deep, the “roguelike”, and you’ll find Sky Rogue’s other source of inspiration.
Back in 2009, I made Hard Aether, a “hard sci-fi” space sim for TIGSource’s Cockpit Compo, and in the aftermath I was inspired to move on to another simulator-related idea that was, simply put, “flight simulator roguelike”. This started as “Operation Shoumei”, a prototype that I actually can’t find the source code for, but never got very far. Four years later, I was making one game a month as part of, well, One Game a Month, and decided to revisit the idea. Despite not making any progress on the “roguelike” end of the idea, I was able to finish something that got some attention.
Eventually, I had gotten around to the “roguelike” part, and found an artist who shared my love for the not-so-new “lowpoly” revival, along with a musician with plenty of experience making chiptunes for games like Spelunky and Super Crate Box. It released first on itch.io as pay-what-you want, and later on Indie Game Stand, finally making its way onto Steam. Getting to that point, obviously, was quite a challenge, namely the difficulties in designing something that’s not only an “action flight simulator” but a “roguelike flight simulator”. I had to make a number of binding design decisions which are probably completely invisible to players
“Fwoosh” is the name of the game. A default third-person perspective lets you admire your aircraft, and having the camera rotation lag slightly behind your movements makes them more evident and, in seeing your aircraft from many angles, gives you more appreciation of it as a flying machine and an object of control. The camera’s field of view contracts slightly when throttling up and widens when throttling down, giving the critical throttle control more visual impact. This intentionally happens based on throttle, not airspeed, so it’s always linked directly to player input and thus gives feedback for player intent. Thin lines whip towards the camera (called “fwooshies”) when your airspeed is high, a common effect in vehicular games to make it seem like you’re moving faster than you actually are. All of these effects are part of the “fwoosh”, and they are all things you’d likely not find in a more serious flight simulator since none of them are realistic in the slightest.
Aerodynamics are partially simulated. This isn’t just an arbitrary checkbox to tick so that I can call it a “flight simulator”, it’s critically important for the game feel! If you fly upwards, you can expect to eventually stall, reminding you that gravity exists. If you make a sharp turn, your actual direction of motion will lag behind a little bit because of momentum. If you roll onto your side, you’ll naturally start to dip towards the ground, confirming that you’re flying an aircraft, not driving a car in the air.
The environment is spacious, and you’re free to fly anywhere you want. This seems pretty obvious, but it’s important to keep in mind since the extremely high depth of the environment gives a very large sense of scale that helps a lot in making you feel like you’re actually flying. It also happens to make it incredibly hard to make it a “roguelike”: usually, to complete a floor you just need to find the stairs and defeat any obstacles in the way. If you’re flying, there’s not really any obstacles, you can certainly get shot at by enemies but there’s no good reason why you should be prevented from flying directly to the “stairs”.
Designing the “permadeath” and other “roguelike” mechanics were more difficult than you might think, and it’s still something I’m not finished with yet. It’s certainly not hard to implement, but making a fun game out of those while still needing to adhere to the rules of the flight simulator lead to some significant roadblocks.
- Items : Roguelikes generally depend on staying interesting in each playthrough by throwing a bunch of random items at you constantly, giving you chances to stop, examine, craft, equip, or identify said items… something you can’t really do while constantly in flight and in danger of crashing into something. I have to force all of the itemization into menus between missions or after landing during a mission.
-Specialization : This is not something I was really forced to do, but the 90s flightsim inspiration pushed me towards a deep and varied aircraft loadout system, with specialized types of aircraft (fighter, interceptor, bomber) which can exclusively equip more specialized types of weaponry. Unfortunately, this means it’s not necessarily going to be any fun to have random items thrown at you every time: you may get a bomber and a bunch of advanced air-to-air missiles you can’t even use. This motivated me to have permanent technological upgrades, which is important for its own reasons that I’ll get into below.
-New-school Permanent Progression : In Rogue, Nethack, and other directly rogue-like games, you’ll lose absolutely all of your progress if you die. Thanks to the success of games like FTL, Rogue Legacy, and Binding of Isaac, players have come to expect being able to make some sort of long-term numeric progress beyond their personal understanding of the game. These are often either upgrades, side-grades, new classes that are a “reward for dying”. I completely understand why players like these, but they are difficult to balance with the necessity of taking things away when the player dies so there’s still risk. I settled on letting players keep any money they earned and rebuild their lost items when they died, but even then the system is sometimes confusing, lacks enough risk for expert players, and is far from perfect.
Sky Rogue also offers a local splitscreen co-op mode, which comes with its own challenges, which are generally complicated even more by the permadeath.
-Significantly less difficulty - This isn’t something I really consider a flaw, the game is already challenging and I don’t mind if people even the odds with a friend, but beyond the obvious fact that you’ve got more guns on your side, you also have doubled the number of targets your enemies might shoot at. This is a pretty big deal when half of the challenge is surviving incoming fire, since enemy aircraft might focus on one player and ignore the other. There’s nothing really special going on under the hood here: enemies frequently try to target the closest player.
-No free respawns - Games made with co-op in mind generally have some way to revive dead players during combat, or at the very least allow them to quickly respawn. Doing so in a permadeath-driven game would pretty much fundamentally break the game. Sky Rogue doesn’t do anything clever yet, the dead player is dead and just has to wait, but that’s not a good solution in the long term, especially when it’s very easy for beginning players to crash very early in flight. Spelunky lets dead players float around as ghosts and blow on things, at least giving them something to do. However, when starting a new level, the dead players stay dead, while in Sky Rogue they get to fly again.
-Technical challenges - Rendering the game on two cameras is simple enough, but that’s only the tip of the iceberg. The game was formerly coded as a singleplayer game and needed some code rewritten to conceive of a game with multiple players. Each time a new feature is added, or even when bugs are fixed, they need to be tested in splitscreen as well as in singleplayer. Most notably, Unity doesn’t natively support multiple audio listeners, meaning only one player gets to hear correct audio. There are off-the-shelf plugins to implement this functionality, but they require you to basically re-implement all existing audio code to use the plugin’s methods and not the built-in Unity ones.
Thankfully, Sky Rogue has extremely lightweight graphics, so it doesn’t go up against perhaps the main reason why splitscreen modes aren’t finding their way in most AAA titles: rendering performance. It’s already hard enough to get the game to look great with a single camera at an intentionally-limited 30fps, imagine having almost double the load because you have two cameras which could be looking at completely different things at the same moment. In many cases, games capitalize on intentional limitations, such as Wolfenstein 3D limiting itself to a 2D map to allow for some highly optimized fake-3D rendering. In Sky Rogue’s case, and in more cases than you may realize, it’s entirely unintentional: we wanted to pursue the low-poly, flat-shaded look anyways, and it just happened to make things a lot easier for splitscreen. It also avoids many other unexpected issues; our shaders don’t break when upgrading to the next Unity version because we only use about 3-4 built-in ones.
Despite the challenges, splitscreen co-op definitely adds a lot to the game. I don’t have any hard-and-fast numbers, since I haven’t (yet?) implemented any analytics into the game, so I’m not sure how many people are actually playing it. However, the ancedotes are frequent: of those who play co-op, parents playing with their children is pretty common, and it’s a natural fit for streamer teams such as Average Giants who are physically next to each other. It’s a game that lends itself well to being played with company despite not explicitly being designed for it. Players who suffer from the “no free respawns” are generally willing to restart the game if their friend dies too early.
Overall, Sky Rogue has been a difficult game to design, despite the fact that many decisions came easily. Your home base aircraft carrier is floating in the sky… because it happens to be cool. The enemy sends reinforcements the more destructive you are, because otherwise players would use the boring-but-optimal tactic of destroying everything dangerous and then destroying absolutely everything it was protecting, on every single level. It seems like the easy decisions are self-evidently right, but the hard decisions that took weeks or months of feedback and refinement seem like arbitrary compromises. Having a solid vision for a game seems like a platitude, but it’s really quite critical, and knowing what’s not important for the game is just as important as knowing what’s important. Like the flight simulators of the 80s and 90s, we’re working within constraints, but this time most of them are intentional. A clash of polygons flying over a (not entirely) flat plane is part of Sky Rogue’s vision; not an empty throwback, but as a critical piece of a game that’s not quite been made before.