You may remember Random Carrier Battles, if you’ve been here for long enough. That project is now abandoned, because modern alternatives like Task Force Admiral exist, and although they lack the Random element, they hit the Carrier Battles part of the project with more verisimilitude and much prettier graphics.
But the germ of the idea stuck around, and a better, easier 2d engine in the shape of Flutter presented itself. The idea (small-scale strategy-game air combat in the Pacific) got me thinking: what other settings would fit this kind of design?
Enter Skypirates! (Exclamation mark included.) Skypirates! is a game of air piracy, zeppelin aircraft carrier combat, and high adventure in the South Seas. My current, very preliminary design document covers three main gameplay layers.
Send your zeppelin’s air wing into combat against all challengers: other planes and airships, surface targets, ships at sea, and more. From your radio room, direct squadrons of your own construction, staffed with pilots and officers whose personalities and particular abilities affect the way dogfights play out.
Airship and Crew Management
Design a zeppelin, or choose from premade options, with which to tackle the unfriendly skies of the Far East. Pick and choose aircraft to fill its hangars, and crew to fill its cabins.
Careful weighting of the options will pay off! Pilots with certain temperaments and skills match certain planes better than others.
Daring deeds and thrilling exploits are just around the corner in every port of call. Choose your own path through branching stories of treacherous pirates, ancient civilizations, and treasures thought lost to the mists of time.
These are the very early days, so it’s time for some generalities!
“Flutter?” I hear the technologically-inclined in the audience asking. “The mobile app framework?”
It is an unusual choice, but not an unreasonable one, from where I stand.
Reason one: I’m familiar with Flutter right now, thanks to work. It’s simple and expressive, easy to extend, and ludicrously cross-platform. (I don’t intend to support anything beyond desktop, though.) It being a UI-centric toolkit, it makes the hard part (pretty UI) easy.
Reason two: Dart has gone from a pretty good language to a great one, with the addition of null safety. It’s concise without being unreadable, I like having named parameters, and it doesn’t go overboard on the punctuation.
Reason three: it’s less opinionated than most game engines about how world and data ought to be structured. This isn’t an attack on traditional game data modeling practice, merely a note that I find it easier to reason about when there’s a world state on one hand, and a rendering engine on the other, and they only talk in strictly limited ways.
Design: Scope and Scale
The world map image above is a lot of the map, but not the whole thing: it runs from about the top of Honshu west to Afghanistan, and south to about the northern third of Australia.
In this alternate history, that region of the planet has all of the ingredients for a vigorous population of pirates: namely, a lot of territories belonging to a lot of different powers, most of whom are busy in their home theater(s) with more pressing threats, and all of whom want to obstruct their opponents’ progress in overseas holdings as much as possible. Nearly every player in Europe is represented somewhere on the map: Britain, France, the Dutch Republic (alternate history, remember), Germany, Italy, Portugal… There are American colonies too, in and around the Philippines, from all the several American nations, and local powers too.
Because I am lazy, I’m using Cartesian geometry instead of spherical geometry, so distances aren’t quite accurate. Eventually, that may change, if I decide to expand the scope of the world, but India, Southeast Asia, and some very near parts of Oceania seem like plenty of room to run to start with.
The world runs on one-minute time steps, and although positional accuracy is basically ‘as high as floating-point numbers allow’, I’m planning on an ‘interaction range’ of 5-10 miles, at which point other systems (dogfights, visiting a port or point of interest, etc.) come into play. Maybe. This part’s still up in the air.
The typical player faction is a single zeppelin, its crew, and its air wing, an independent with an eye toward privateering or outright piracy. The design likely admits some mild variations on the theme (employee of an aviation security company, a task force of two or three airships…), but those will come later if they come at all. As alluded to in the elevator pitch, crew will have relatively detailed character sheets, and crew characteristics and aircraft characteristics intersect somewhat. A pure virtuoso pilot might prefer a more agile machine, while a tactician might want something with better energy fighting. An instinctive gunner might do best with a few heavy guns, carefully choosing his shot. A more exuberant personality might prefer more ammo.
Characters under the player’s command get placed into three categories, to reduce skill management minutiae: the player’s avatar, over whose sheet the player has full control; officers, who the player can guide down certain paths; and ordinary crew, who level up and gain skills on their own, according to templates.
All of which will be accounted for in aircraft design—although designing airframes is outside of the player’s scope. On the other hand, souping up an existing model, swapping its engine for a bigger one, or adding guns are within reason.
I have a lot more to say about aircraft, because getting the math down took a ton of effort, so I’ll save it for its own post.
Anyway, that’s a very brief introduction to a few parts of Skypirates! As I continue the creative process, I’ll have more to say.