Several of my regular commenters have expressed interest in Battle For Wesnoth and my role in it. I’ll give a narrative summary of my role in the project, expanding on a comment I uttered a while back.
For the narrative to make sense, you need to know that Wesnoth is a turn-based strategy game with a fantasy setting. It has elements of both traditional hex wargame and role-playing game in it; a “campaign” is a collection of tactical puzzles knit together by a prose plot. There is also support for multiplayer-networked battles, but I’m mainly interested in the campaign game.
Campaigns are written in a domain-specific language called WML, Wesnoth Markup Language. The game engine is, essentially, a WML interpreter. WML supports designing maps, setting up army lists, and connecting the battles with a prose narrative (which need not be strictly linear — it’s common for campaigns to have multiple narrative paths dependent on player choices). Additional flavor is provided by animated sprite graphics for combat and background music of remarkably high quality, neo-classical orchestral pieces that will remind you of the better grade of movie soundtrack rather than the mediocre electronica you usually get in games.
It’s all open source., with ports for OS X and Windows as well as Linux.
I’ve been a dev for a bit less than two years. My first project was helping prepare the “Northern Rebirth” campaign to be mainlined (e.g shipped with the game as opposed to unofficial user-maintained content). I did a lot of prose-doctoring on NR, enough that I was declared a co-author by its originator. He’s retired from Wesnoth stuff and I maintain it now.
A major focus of my early work on the project was mainlining more campaigns. When I joined we shipped only six, and I went through them pretty rapidly – I felt like the amount of content Wesnoth had was really underutilizing the game engine. I quickly discovered that the other devs were resistent to mainlining more campaigns mainly because each one imposed continuing maintenance overhead, if only because the WML they’re written in evolves gradually as the devs extend it to do more things.
Consequently, I got heavily into writing tools to mechanize routine WML maintenance tasks. A cross-referencer, to check for dangling reference (nonexistent graphics and other resource files referred to in WML). An indenter — there was a confusion of different indenting styles in mainline, making the code harder to read. Most importantly, I wrote a lint-like tool that could both perform extensive semantic sanity checks on WML and lift constructs from older dialects of it into newer versions.
The effect of these tools was pretty dramatic. They reduced WML maintenance overhead by an order of magnitude or so, making it easy for us to ship a lot more campaigns – I successfully mainlined no fewer than seven written by other people and eventually wrote and mainlined an original one of my own, The Hammer of Thursagan. They also made it possible to evolve WML more rapidly, because I could be counted on to write lifting logic in my lint tool that would carry forward old campaigns mechanically, rather than requiring painful and error-prone hand-work .when the language or the layout of the game data tree changed.
As my original surge of work on these tools trailed off, I took on a very different task – improving the prose quality in the game. Though the working language of the project is English, most of the devs and campaign designs are not native speakers and the quality of their prose is highly variable. Then, too, the appropriate style for a game like this is not all that easy to generate even for literate native speakers.
I felt strongly that playing a Wesnoth campaign ought to be like reading an epic-fantasy novel in miniature. I say “miniature” because the campaign format doesn’t really allow paragraph upon paragraph of voluminous scene-setting and character development – you have to do a lot with a really low word-count, rather like building a ship in a bottle. It’s even more of a challenge if you think (as I do) that the prose ought to have a preceptible flavor of Tolkien, Eddison, and Dunsany about it. Or, if one can’t manage that, at least Robert E. Howard…
Revising the mainline prose content to meet my standards was an immense amount of work and isn’t quite finished yet even for the older content. Fortunately, the other devs and our campaign designers quickly noticed that this project was a Good Thing and were, in general, actively helpful and not at all territorial about having their prose rewritten. As a side-effect, I became the project’s go-to guy for all English-related issues — I help non-native speakers with vocabulary and have been asked to write the announcement for the upcoming major 1.6 release.
Along the way I’ve done some writing I’m rather proud of. Kalenz’s and Cleodil’s love scene in Legend of Wesmere; the final confrontation between the mage Delfador and arch-villain Ihiah-Malal, also in LoW; the Elven lady Ethiliel’s horrifying reunion with her former mentor, the mad undead sage Mal M’Brin, in The South Guard; the death of Mal-Ravanal in Eastern Invasion and the Epilogue that follows; Mal Keshar’s monologue about how he got expelled from the Academy on Alduin in Descent Into Darkness; and, most recently the scene at the tomb of An-Usrukhar from the not-yet-mainlined Delfador’s Memoirs.
(I am, however, only the second-best writer the project has had available. The best was the author of The Rise of Wesnoth. He actually made successful, fluid transitions between archaized high-fantasy prose and humorous snarkiness expressed in modern slang, something I’m not at all sure I could do gracefully and have been too chicken to try. He also wrote what I think is the single creepiest line in the entire corpus, in A Final Spring, from the undead Fool Prince: “”Fath-er! Join… us…” Brrr….)
A third hat I eventually took on was bug triage. While all the senior devs do a bit of this, I’m the person who does most of the filtering and dispatching of tracker issues to developers. I’ve also organized at least three major bug-stomping runs and personally nailed a count of bugs running well into three digits. I did the forensic analysis and organized the recovery a few month ago when now-vanished developer seriously broke the game’s AI.
At one point I overhauled the game’s visible UI pretty seriously. The translucent dialogue windows with lightweight click-to-next behavior were my doing. I’m also responsible for the review mode you enter when you finish a battle, which lets you review the end state and change settings before committing to go to the next scenario.
More recently I’ve been more or less dubbed the keeper of the history and geography of the Wesnoth setting. Some of this is because I’m unusually willing to sweat the details of getting an imaginary setting consistent, but a surprisingly large part of it is that I’m good at generating plausible names — the Estmarks, the Forest of Lintanir, the Heart Mountains, Bitterhold, and the River Listra were among mine. Campaign designers have learned to use me as a name generator for their characters and places.
Now for the things I don’t do:
Though I’ve my share of coding in the C++ core (I have to in order to chase bugs, and there was the UI overhaul, and then there was refactoring the map editor…), I avoid it as much as possible because I’ve grown to violently dislike C++ during my time on this project. Wesnoth has many virtues, but the core codebase is a pile of OO scar tissue with way too many deeply intertwingled classes. I know the developers and I blame the language; it seems as difficult to avoid this kind of excess in C++ as it is to write readable code in Perl.
Though I’ve contributed one terrain-tile graphic (the snow-covered stone hut) following an enjoyable frankensteining session with the GIMP, I’m not skilled enough as a visual artist or composer to contribute that stuff regularly.