(For the impatient: A new version — version 1.00 at last, in fact — of Filfre, an interpreter for IF games running under the Z-Machine or Glulx, is now available. You can get it from this very site.)
Seven years ago, I decided to write my own Z-Machine interpreter for Windows for two main reasons: 1) I wanted an interpreter with an integrated scroll-back buffer, and no one seemed inclined to provide one; and 2) I thought it would be a crazy fun project. Nerd that I am, the latter expectation proved to be correct. The first game I got working, opcode by opcode, was Infocom’s Infidel. I’ll never forget the feeling of satisfaction I had when that first paragraph of text finally appeared on my screen. There’s nothing quite like creating something for yourself, then stepping back and watching it work.
Still, that first version was very much a learning experience. I had only dabbled in Windows development before I started on it, and had no idea how to put together a modern object-oriented C++ application. When I decided to add Glulx support along with all the multimedia goodies that entails, I quickly realized that the only viable approach was to rip it all up and start again. I now understand that I still didn’t really know how to build a modern etc., etc., application, but I was at least a little better at it than I’d been the first time around. Since the burst of activity that resulted in Filfre 0.97, the first to support Glulx, in July of 2007, I’ve only come back to it in fits and starts, generally to fix bugs when my list of them got sufficiently long and to implement additions to the Glulx and GLK standards as Andrew Plotkin has made them.
I’ve been working with the specifications on Andrew’s site quite a lot recently for another project, one about which I’m quite excited and hopefully can tell you more very soon. A couple of weeks ago I downloaded the exhaustive suite of Glulx unit tests Andrew has recently uploaded there, one of the first fruits perhaps of his new status as a full-time IF “professional.” I decided, just for grins, to try them out quickly on Filfre. Lo and behold, what I found was pretty disheartening, in the form of great swathes of Glulx opcodes (dealing mostly with floating-point support) and GLK functions (dealing mostly with Unicode support) not yet implemented at all, and, even more embarrassingly, quite a few old opcodes that didn’t always work quite right under my implementation. So, the exciting project went on hold for a while, and two weeks later I finally have a Filfre that passes every one of the unit tests, and thus should fully conform with every aspect of the latest Glulx standard. And so I’ve decided to call it version 1.00 at last.
Mind you, I still die a little bit inside when I look at the code for Filfre. When I developed it I was still essentially treating C++ like C with a few useful new conveniences; all of the GLK I/O layer, for instance, is essentially implemented in a single class. And I have another burgeoning problem: the whole thing was developed with Borland C++ Builder 6, and relies on Borland’s VCL libraries from 2002. Builder 6 in fact has a number of compatibility issues with Windows 7, which made the last two weeks less fun than they otherwise would have been. My instinct is to rip it all up yet again, start over, and see if the third time really is the charm. But not right now. I still have the more exciting project, after all. And, while the old girl is a bit ugly on the inside, she works quite well from the user’s perspective. (The compatibility problems I spoke of affect only the Builder IDE, not applications created with it.)
Filfre hasn’t exactly taken the IF world by storm, but there has been one particularly gratifying thing about the experience: it turns out that Filfre works very well with screen readers, and thus it’s allowed quite a few blind people who had problems with other interpreters to play and enjoy IF. I wish I could say I anticipated and designed Filfre for this, but I can’t. It’s simply a happy accident, a result of my choosing to use the RichEdit libraries to implement I/O rather than drawing directly onto a canvas. But it still makes me pretty happy, and the emails I’ve received from the blind over the years have been some of the most gratifying of my life.
So, if you know and use Filfre, the latest and greatest is waiting for you. (And yes, the bugs that caused problems with The Blind House and Aotearea from last year’s Comp are both fixed.) And if you don’t, and you use Windows, and you’d like an interpreter with a somewhat more full-featured interface than the norm, an integrated scrollback, and a few useful convenience features, maybe you’ll want to check it out.