POSITIVELY AGOG SUNDAY 21ST OCTOBER 2012
So when I said
back in July that I was taking a break because of real-life commitments, that was a
teeny tiny fib. In fact I was beavering away undercover with the fine people at
GOG.com to help them launch their DOS games catalogue on Mac.
On October 18th
the fruits of our labours were finally revealed, and I can finally gush about what I’ve been working on all this time:
Boxer standalone. This is a streamlined and state-of-the-art Boxer built for one purpose: releasing DOS games as individual apps. It's also a peek into Boxer’s future.
WHY A SEPARATE VERSION?
When we were figuring out how to deploy GOG.com's DOS games on the Mac, it became abundantly clear that
Boxer in its current form wasn't gonna cut it. It sticks you with a folder full of sample games to help you figure out the emulator. Its gameboxes are document files that can’t be played without downloading a separate application. Its emulation is studded with peripheral features to help you install new games and configure them and add new drives to them and all that jazz.
The entire app is designed around turning your box of old CDs into a games collection.
But GOG.com are selling
games, not raw materials for someone else’s curated emulation experience. Their games already come ready to play, so they don't need any of the features to help you get there. Each game needs nothing but to
look and feel like a native Mac game.
So I began macheteing off all the bits of Boxer that weren’t part of that experience. Sample games and game importing were the first to go; the preferences window, inspector panel and drag-drop drive addition all hit the cutting-room floor. The UI was tailored to clean away everything that smelled like emulator infrastructure instead of a native game.
Making a game app isn’t as easy as making a gamebox – there’s resources to bundle, app IDs to choose, help links to define, behaviour to tweak, branding to slap on – so I also developed a
bundler utility that takes a gamebox and wraps it into an app according to your specifications.
It’s not as slick as Boxer’s game importer and it’s not intended for end-users: you’ll need to build it and Boxer standalone from source yourself.
With Boxer’s dead weight liposuctioned away and gamebox-to-app conversion a reality, new challenges came to light. Ones that required exciting and shiny new features.
THE LAUNCHER, RETHOUGHT
Boxer’s program panel was designed for one task:
choosing the right executable once and never touching it again.
But many of GOG.com’s games
don’t have just one true executable: there may be a main game and expansion packs, there may be separate singleplayer and multiplayer options, there may be setup utilities and campaign editors. Boxer’s program panel was woefully inadequate for switching back and forth between different launch options.
Even worse, the program panel insisted on appearing alongside the wretched old DOS prompt, and it wouldn’t even appear at all in fullscreen mode. In a standalone game app, that makes for a
terrible user experience.
So I threw it away and started again.
The first time you launch one of these games, you’ll be greeted with a tidy list of predefined launch options. Click an option to launch that program; quit back to DOS, and the app will return to the launch options. (You can also get back to the launch options at any time from the File menu.)
If you quit the app while a program is still running, the app will remember which launch option you’d chosen and start up with that next time. This way, it’s easy to switch back and forth between launch options, without needing to choose one every time you start up.
The launch options panel only appears in GOG games that actually have multiple options. For games with only a single launch option, the game will start up straight away and exiting to DOS will quit the app instead of returning to the launch options.
SHADOW BOXING
As you’d expect, inside each game app are all the files for that game. And as you also know, DOS games like to dump their savegames in the same place as all their other program files.
These two facts are on a head-on collision course.
OS X apps aren’t expected to be self-modifying: and if you’re not running as an administrator, then apps in the Applications folder
are not even allowed to write to themselves. This would prevent you from saving your game and in many cases would prevent the game from running at all.
The solution is one I’ve discussed in the past:
write shadowing. Attempts to write to game files are instead written to a ‘shadow’ location inside the current user’s Application Support folder. The app reads changes from there first, before reading the original game files from inside the app. This way noone’s trying to modify the app itself and everyone’s happy.
This has several knock-on benefits:
• The game can be run safely from a read-only location (such as the DMG file it comes in).
• Each OS X user account gets their own separate savegames and game configuration.
• You can restore the game to its original state just by deleting the shadowed files. The game apps have a ‘Reset game data’ menu option for exactly this purpose.
SHADERS A-GO-GO
Dropping OSX 10.5 support let me pull the trigger on a feature I’ve had in my sights for a long time:
pixel shaders for rendering styles. Shaders are programmable effects that run on the GPU, and they allow for faster and
considerably fancier scaling effects.
The game apps ship with three shader-powered rendering styles: the original untouched output, a
5xBR smoothing shader by Hyllian and crazy46guy, and a
simply awesome curved CRT shader by cgwg, Themaister and DOLLS. I cherry-picked these from the thriving BSNES shader community; the coders deserve much love for creating such great-looking shaders.
For older Macs that can’t run pixel shaders at an acceptable speed, Boxer standalone falls back on the old software rendering styles you get in Boxer 1.3.
Naturally, the game apps also natively support those newfangled retina displays.
THERE’S ALWAYS A BUT
The game apps are slick as hell, but that comes in exchange for flexibility and features. Hence some caveats:
• As mentioned above,
there’s no UI for tweaking emulation settings.
• For ass-covering reasons,
the game apps do not come with Gravis Ultrasound music patches.
• Similarly the game apps offer no way to add MT-32 ROMs, though
they will find and use any MT-32 ROMs you’ve plugged into Boxer. You’ll still have to reconfigure the games to use MT-32 music, which will be tricky because…
•
The game apps remove access the DOS prompt, so you cannot run setup programs unless a launch option has been provided for them.
Each game app has a gamebox inside, so if you prefer you can just run the gamebox in Boxer 1.3.2 instead. However, Boxer 1.3.2 does not utilise the new launch option structure, nor does it support write shadowing: your game state will not be consistent between Boxer and the game app, and any changes you make in Boxer will be saved permanently into the app.
SO WHEN DO I GET TO SEE ALL THIS NEAT STUFF IN BOXER ITSELF?
Soon! But there’s still a bunch of work to do before these features are ready to appear in Boxer 1.4:
• The launch options panel still needs UI for choosing executables and turning them into launch options.
• The write-shadowing still needs extra magic to handle edge cases: it’s difficult to install patches and add-ons without their changes getting shadowed and made user-specific.
• I still need to stop finding reasons to add new features and rethink old ones.
For now,
buy the hell out of GOG.com’s DOS game collection and get the goodies right away. If you don’t mind wet paint and you’re familiar with XCode, you could build
Boxer 1.4pre from source and take advantage of all the new features; or even build
Boxer standalone and its
bundler utility and start churning out your own game apps (some assembly required!)
CLOSING REMARKS
It's been a huge pleasure to collaborate with the cool guys at GOG.com and big ups to them for choosing Boxer. By doing so, they’ve ensured that their Mac gamers get the best DOS gaming experience across any platform.