Quick note: Development blogs for my upcoming game Gunmetal Arcadia are located at http://gunmetalarcadia.com/.
For years, I’ve been sharing this link whenever I were asked about the CRT simulation featured in a number of my games. Over time, that post has gotten increasingly out of date, so I figured I would do a proper write-up about my CRT simulation algorithm as it exists today in Super Win the Game. This method varies slightly from the one used in the original You Have to Win the Game, but the core principles are the same.
Two weeks ago, I wrote about my efforts to port You Have to Win the Game to Mac and Linux, primarily focusing on scheduling and finances. I was also writing in the context of being right in the middle of the task with an unknown amount of work ahead of me. It wasn’t until a few hours after I posted that blog that I was finally able to run an in-development version of the game on a non-Windows platform and reach the title screen without segfaulting immediately.
Over the last two weeks, I’ve finished the remaining work, releasing the Linux port last Wednesday and the Mac port three days later. They aren’t perfect by any means. There are a number of known bugs in each, several wholly omitted systems like patching and telemetry, and a few disparities among all three platforms that I’d like to unify at some point. I’m not done yet, but I do feel pretty good about the builds I’ve shipped and the potential ease with which these changes will allow me to ship future titles on all three platforms simultaneously.
In contrast to my previous blog, this time I’m going to cover the entire porting process from inception to deployment from a day-to-day diary point of view. As this was my first real experience with non-Windows development to speak of (aside from dabbling a bit in Xbox 360 and PlayStation 3 as my job required on past titles), I can bring a first-timer’s perspective, and if you’re a developer who’s been considering taking your games from Windows to Mac and Linux, maybe you can learn from my mistakes. More than a postmortem or a how-to guide, though, I really want to put into words, as objectively as possible, just what goes into this sort of thing.
Last October, I began porting my NERD Engine to non-Windows platforms, using You Have to Win the Game as a test case. This involved rewriting all my rendering code to use OpenGL instead of Direct3D, which in turn required a solution for converting HLSL effect files to both GLSL and a proprietary format that would specify sampler and render state information. Input code and audio code that depended on DirectInput, XInput, Raw Input, and DirectSound had to be rewritten using SDL2 and a custom audio renderer. After three weeks of intensive work, I had a nearly 100% accurate Windows build of You Have to Win the Game that did not utilize any DirectX APIs.
That was only the tip of the iceberg. The next step was to begin compiling on other platforms, which would require the removal of all remaining Windows platform APIs as well as dealing with any unexpected compiler- or platform-specific issues. I spent a very frustrating day or two excising code wholesale and eventually wound up with a build that would at least compile on Linux. Of course, it segfaulted immediately on launch, due in part to 64-bit portability issues that I knew I would have to address someday but which hadn’t yet become an issue. In the interest of preserving my sanity, I abandoned the ports at that time, deciding that I could return to them once my next game were finished and on its way to recouping development costs.
Fast-forward to last week when I attended Steam Dev Days. Much of the first day’s material was focused on why and how developers should be targeting Linux. I hoped there would be a magic bullet. There wasn’t. In truth, there was very little I hadn’t already figured out for myself or with the help of my brother, who had just recently ported Eldritch to other platforms. What is clear is that Steam’s future is placing a tremendous importance on Linux development. I wish that there were a less painful solution, and maybe someday there will be, but we’re not there yet. Right now we are in a place in which developers are compelled to give up the comfort and familiarity of battle-tested tools if we are to target these platforms.
As a mostly-solo developer, that’s scary. As someone who has little or no immediate income because he left his job to focus on indie development not too long ago, it’s even scarier. And when I consider that my goal in the short term is to bring a free game to other, smaller platforms, it makes me question its worth.
You Have to Win the Game is free. It always has been, and it always will be. Being on Steam would not change that. I’ve even promised that if it were Greenlit, I would develop a new remixed campaign which would also be free. But considering the time investment involved in the porting effort and the hardware investment that will eventually be necessary once I turn my attention to Mac, I begin to question whether those costs, both in terms of time and money, are enough to put myself and my company at risk.
Of course, much of the work involved in porting You Have to Win the Game would translate directly to future projects, and in that regard, it’s conceivable that it would eventually pay for itself. Furthermore, I believe that doing this work upfront and targeting a finished game would allow me to better validate the results and hopefully catch some of the corner cases that might be more difficult to find if I were to attempt this process on an in-development title. That means easier development in the future and an increased likelihood of being able to sim-ship future titles on multiple platforms at once. So that’s cool. But I’m still burning money at a constant rate. The longer I spend on these tasks now, the longer it will be before I can ship another game, and the longer it will be before I can start recouping costs.
The worst case scenario is that I once again put the porting effort on hold and focus on shipping my next game on Windows first. But that’s not my preference, and I think it would be a small misstep for the company. So I’m looking for feedback on the situation. I would love to be able to make this game available for free on more platforms, but I also want to feel financially secure in my ability to do so. Without coloring the discussion too much, I feel like a donation or pay-what-you-want model could be a possible solution, or perhaps a crowdfunding campaign for development with the game released for free on completion. There’s no right answer, and I can’t make everyone happy, but I’m curious to see where y’alls’ heads are at.
With the PlayStation 4 out last weekend and the Xbox One landing in just a few days, it feels like a good time to reflect on some of my favorite titles from the last generation, or what Wikipedia would call the “seventh generation.” This is by no means an objective list; I’ve never owned a PS3, so there are some notable omissions from its library of exclusives. There probably aren’t too many surprises in here, either; these are simply the games that I enjoyed the most or that stuck with me the longest or that I find myself coming back to again and again. I’ll try to avoid spoilers just in case no one’s played them, but I make no guarantees. In no particular order (okay, you got me, it’s alphabetical order), here are my favorite games of the last generation:
Update: I debated revising the last sentence of this rant because I never want to attack developers — after all, I’ve had my own experiences working on problematic games — but I do feel it accurately reflects my perceptions of the game and its writing.
This isn’t a review. I haven’t finished GTA V yet. I’ve barely scratched its surface. This is just some scattered thoughts after the first few hours of gameplay.
So there was that thing that happened with Fez II. I’ve been trying to encapsulate why exactly this bothers me so much (besides the obvious I wanted to play Fez II), and I think its coincidence with the Vahn story helped to crystallize my thoughts. Kind of. This is still a little bit of a disjointed ramble, but hopefully there’s something worthwhile in here.
Get cozy. This might be a long one.