There, And Back Again: The Long, Arduous and Mostly Uninteresting Tale of the Ill-fated Metis Engine
It’s been a while, huh?
There’s been a lot of nothing from us lately, which some of you have correctly noticed as being pretty weird, as I’m normally all about showing progress as it comes out. There are quite a few reasons for that, and I can’t touch on the big ones just yet, but in the interim, I’d like to dam the silence with an update on one of the main reasons that Awakening is taking so long.
Early days: The wild west
In the beginning, we didn’t really know what we were going to use to develop the game. What we did know was what platforms we wanted to support: at the very least, PC, Android, Ouya, Windows Phone, Windows RT, and Playstation Vita. I played around with every development tool under the sun: XNA, Unity, Flixel, and even Haxe for a brief stint (I got halfway through porting Encarmine before the buggy Haxe workflow finally made me throw up my arms in defeat).
Unity was the fastest to develop with, thanks to my past experience with it, but it lacked support for three of our key platforms: Windows Phone, Windows RT, and Vita. So that got dropped. It was around that time that I heard about Monogame, which had just announced support for Vita by way of its Playstation Mobile branch. Since Monogame and XNA are mostly compatible, getting the game onto Windows Phone wouldn’t be difficult, either.
I must have started on coding the game in at least a dozen different tools and languages before settling on building a new engine based on Monogame. This must sound odd coming from me, as when I mentor others in programming and gamedev, I always advocate starting on making your game ASAP, and once you get started, never question the basic design choices you settled on, otherwise you’re liable to keep stopping and restarting forever.
Vacant Sky Awakening is kind of a weird game, though, and the problem space it occupies has continually defied all my nuggets of conventional wisdom.
The biggest problem I’ve been contending with throughout development of the game, aside from its broad spectrum of platforms, is future-proofing. The game is going to be released in 8, or maybe 9, episodes over the course of the next couple of years. Whatever design choices I make now have to stand two years from now as still a good move at the time: still easy to develop for and still marketable as a product.
I learned from Contention about the dangers of starting a long-term project on a crappy foundation. The legacy code I still deal with has made the task of updating Act III a nightmare of frustration and wasted time. I don’t want to run into that problem ever again.
As a result, making the correct choice of development tools now is extremely important, so much so that I’ve been willing to prototype the game on a dozen or more different tools and throw it all away each time to try a different approach.
Post-Kickstarter: VSA Alpha and Metis Engine
After the success of the Vacant Sky Awakening Kickstarter, we got to work on building Metis2D, the Monogame/XNA-powered game engine that would carry the game to its many platforms. Because we coded the engine ourselves, we had full control over it and would be able to adapt to new platforms and requirements as they came into being.
The high level vision was to eventually create something that brought the flexibility and ease of use of Unity into the 2D space, which we could then sell after the game was finished and use it to finance further games.
It was a colossal undertaking.
We ended up releasing our first Metis-powered game, the Ouya port of The Vestibule, in time to be one of the Ouya’s launch titles. It went… well, I wouldn’t say smoothly, but it went acceptably. There were bugs and crashes and race conditions and altogether it was kind of a nightmare, but it was still better than dealing with VS1CE, and that’s something.
With those issues ironed out, we continued hammering away at Awakening EP1, and developed several alpha builds, including the most recent one, Alpha 5, which has the entire game (sans battles) playable from start to finish. The game was playtested by several people, we got helpful feedback, and most importantly, it was adored by everyone who played it! All that was left was to polish up some graphics and add in the battles and the game was ready to release, right?
Yes, actually. We didn’t run into any serious problems, we had a basic version of the battle system working, and everything about the game seemed like it was coming together. This is the part where you’re expecting I’m going to say “that’s when we discovered some horrific bug that changed everything” but the truth is, Vacant Sky Awakening Episode 1 was pretty much done and ready to go into beta.
Beta 1’s Shocking Twist…!
There wasn’t a problem with the game or the engine.
Actually, there wasn’t a problem at all.
But a couple of developments happened in quick succession that had a significant impact on our future plans for the game. I can’t talk about all of them just yet (sorry!), but there were four in particular that caused us to seriously reevaluate what we were doing: 1) We got the thumbs up to release VSA on the PSN as opposed to the much more limited PSM; 2) Microsoft pulled the plug on supporting XNA going forward 3) Unity added support for Vita, Windows RT, and Windows Phone; and 4) Unity announced version 4.3 with native 2D support.
We agonized about what to do for a long while. We had a nearly-complete game with no significant issues, but the rate of Unity’s evolution was making it clear that an eventual switch was going to be inevitable. Unity’s workflow is much cleaner, easier, and faster than Metis’s, especially where UI and shaders are concerned. It can add platforms much faster than we can, with the added assurance that they’ll be fully debugged and well-documented. We would be able to spend our development effort entirely on the game as opposed to developing the game and maintaining the engine.
We could’ve released EP1 as is, but at what point would we make the switch? We needed savegames to be portable between all episodes. What if we ran into a last-minute showstopper bug in some platform for Monogame (as we did on Android, which required a huge rewrite of the rendering code) that knocked us on our feet?
On top of that, there were already fractures starting to open up in our plans because you can’t use Monogame on Vita outside of PSM, which meant we would need to recode the Vita version from scratch and we were now looking at maintaining two engines at that point.
I know it’s bound to be an unpopular move, but for all the above reasons, we decided that the best move would be immediately shifting gears to developing Vacant Sky Awakening with Unity.
That’s not to say that everything has to be thrown away and recoded from scratch. In fact, one of the main reasons we chose to go with Monogame was because it used C# (like Unity) and that we’d be able to reuse most of our code if we ever needed to switch over. On account of good planning, we had anticipated exactly this scenario and took measures to ensure it would be as easy as possible to make the move. One aspect of this was writing the story content in a Lua dialect, which is easily portable to just about everything with no code changes needed.
We’re currently working on the Unity version of the game, as well as polishing up the art assets and producing some new ones. There’s another big surprise yet for the game that I can’t talk about just yet, too. I’m sure the question you’re all asking is when you’ll be able to play the game, and the answer is… probably soon! Surprisingly enough, the move hasn’t delayed the game very much at all. Unity is just so much faster to develop with that rebuilding the game is only taking slightly more time than implementing the rest of the missing features in Metis would have been.
The highly visual nature of Unity gives us greater control over how the game will look and lets us rapidly iterate off ideas and track down bugs, which is an enormous godsend when it comes to the battle system (more on that soon…).
So what will become of Metis? It will still exist, albeit in a stripped down form. Most likely, it’s going to evolve into an RPG/VN-centric Unity plugin that we may or may not sell depending on how well it works out for us.
The end result to you all is a slightly longer wait, but in a much more polished game and smaller wait times between individual episodes in the future.
Sorry again for all the delays, but I hope I’ve outlined the rationale behind the changes well enough that you understand why we’ve made the choices that we did.
Post-script: Another announcement
It’s not exactly true that we’re developing the game entirely in Unity. Because of the prohibitive console licensing for Unity, we’re actually not going to be using it for the Vita version of the game. The Vita version of Vacant Sky Awakening is being developed with Sony’s PhyreEngine (which is why it’s most likely going to be released at some point after the Unity-based version). Unfortunately, due to the proprietary nature of PhyreEngine, I can’t talk about it much, so please understand that I won’t be able to discuss the technical details behind the Vita version going forward. I do plan to do a tech post in the future about our workflow involving designing for two engines in tandem, though, so look forward to that!