Archive for June, 2011

I know what’s going to happen in Doctor Who series 6

Doctor Who is off the air until September, and a number of questions remain unanswered. But just because we don’t get any new Who for three months doesn’t mean we have to stop talking about it! So here is my chance to answer all of your burning questions. Because I know everything that’s going to happen in the second half of series 6. All the reveals.

Spoiler Warning for everything, up to and including A Good Man Goes to War, and for the rest of the series too, if I’m right!

Okay, so I don’t really know all the reveals. I don’t have access to the scripts, and I certainly don’t have a retro-futuristic thought recorder pointed at Steven Moffat’s head (not that you can prove, anyway). But I do have a pretty good idea where the story is going, and I think I’ve got at least one reveal pegged.

To start, let’s review the two biggest questions that the show left unanswered after A Good Man Goes to War:

  • Who kills the Doctor (i.e., Who is in the Astronaut suit on the lake in 2011)?
  • How does the doctor survive being killed? Because, let’s face it, he does.
  • Who did River Song kill?

I think I know the answer to the last one. Here’s your big spoiler: River Song kills her father, Rory Williams.

How do I know this? Moffat has left us a lot of evidence hinting in this direction. The evidence comes down to a theme in Moffat’s work: misdirection, specifically repeated misdirection.

Let’s start with the misdirection. By misdirection, I mean that there is a tendency in Moffat’s writing to tell us something in such a way that we assume something else. The easiest example to spot is in Amy’s monologues about Rory in series 6. The first one is in Day of the Moon, when she is captured by the Silence, and is talking to herself (but directing the words to Rory). She says:

I love you. I know you think it’s him. I know you think it ought to be him. But it’s not. It’s you. And when I see you again I’m gonna tell you properly. Just to see your stupid face. My life was so boring before you just dropped out of the sky. Just get your stupid face where I could see it, okay?

So, this is designed to make you assume she’s confessing her love for the Doctor – especially the phrase ‘just dropped out of the sky’. This is even lampshaded later, when she tells Rory it was just a figure of speech. That lampshade is, of course, Moffat gently mocking the audience for falling for his misdirection. He likes mocking us for falling for it, too: he does the same thing with FleshAmy and FleshMelody. Kovarian tells the Doctor, “Oh, Doctor, fooling you once was a joy. But fooling you twice, the same way, it’s a privilege.” These are both moments where the fourth wall is broken while still maintaining diegetic cohesion (Russel T Davies did the same thing with the 10th Doctor’s last line, “I don’t want to go”, which is clearly meant to be spoken by Davies, Tennant, and the Doctor simultaneously).

There is a second example of the Doctor-Rory misdirection; at the beginning of A Good Man Goes to War:

I wish I could tell you that you’ll be loved. That you’ll be safe and cared for and protected. But this isn’t the time for lies. What you are going to be, Melody, is very, very brave. But not as brave as they’ll have to be. Because there’s someone coming. I don’t know where he is, or what he’s doing. Trust me, he’s on his way. There’s the man who’s never going to let us down. And not even an army can get in the way. He’s the last of his kind. He looks young, but he’s lived for hundreds and hundreds of years. And wherever they take you, Melody, however scared you are, I promise you, you will never be alone.

Now, this one drops a really big hint, because both the phrases ‘there’s someone coming’ and ‘you will never be alone’ parallels what Rory said in Day of the Moon: “She can always hear me, Doctor. Always. Wherever she is and she always knows that I am coming for her, do you understand me? Always.” And, of course, we get the reveal immediately:

Because this man is your father. He has a name, but the people of our world know him better as the Last Centurion.

So, where does this tie in with River’s story? In Flesh and Stone; when the Doctor asks River about the man she killed, she says he was “A very good man. The best man I’ve ever known.” It’s easy to assume this refers to the Doctor, but we’ve seen evidence that River has no illusions about the Doctor being a good man, particularly the line “This is cold. Even by your standards, this is cold” from The Impossible Astronaut, and her rant that begins “This was exactly you. All this. All of it. You make them so afraid” in A Good Man Goes to War. No, River wouldn’t call the Doctor the best man she’s ever known; she knows him too well. But she might say that about her father, who shows, time and again, limitless dedication to his wife.

There’s more evidence, too. In Flesh and Stone, Father Octavian says that “She killed a man. A good man. A hero to many.” Again, this could refer to the Doctor, and that’s the obvious choice. But it could also refer to Rory, in light of Amy’s line that “the people of our world know him better as the Last Centurion.” (which is interesting, because as far as we know Rory is not widely known as a hero on Earth. We appear to be missing a little bit of story there)

Ultimately, the reason I think this is more than just a lot of circumstantial evidence and idle speculation is that Moffat has already done the Doctor-Rory misdirection twice, and has blatantly lampshaded how much he likes fooling us with misdirection. A third misdirection is, at this point, a logical way to finish the series.

There is at least one problem with my theory, though I think it fits in with the same misdirection again. The episode title of A Good Man Goes to War has every indication of being about the Doctor. River’s poem certainly seems to talk about him:

Demons run when a good man goes to war
Night will fall and drown the sun
When a good man goes to war

Friendship dies and true love lies
Night will fall and the dark will rise
When a good man goes to war

Demons run, but count the cost
The battle’s won, but the child is lost

On the other hand, nothing in the poem (or the episode) explicitly says that the Doctor is the good man in question. In fact, River’s “This was exactly you…” monologue happens at the end of this episode, which leads me to believe the misdirection is complete – every reference to ‘a good man’ has been a reference to Rory, without exception.

So, how and why does River kill Rory? A friend of mine suggested that Madame Kovarian is River Song. This is plausible – River was raised as a weapon against the Doctor. There are certain physical similarities (Alex Kingston and Frances Barber have similar facial structures and hair, at least), although those aren’t even necessary given that River can regenerate. The River we know has always seemed more than a little haunted by her past, and raising an army against the Doctor, killing Rory, and being generally heartless and cruel might certainly explain those demons.

So, this is what I think we’ll see in the remainder of series 6: River is not rescued (or if she is, it is not for long). She grows up to be Kovarian, her mind being twisted by the Silence to hate the Doctor. Subsequently, she kills Rory (while trying to kill the Doctor). Somehow, she has a change of heart eventually, and becomes the River we are familiar with.

The biggest mystery left, for me, is why Kovarian and the Silence seem to be at odds with one another. The Silence went out of their way to kidnap Amy (did they know she was Flesh at the time?), and to try to make Amy tell the Doctor she is pregnant. These things don’t make a lot of sense if Kovarian and the Silence are allies, but we know River was raised, at least for some of her life, in the Silence-infested Graystark Hall Orphanage. So, either the theory about Kovarian being River is wrong, or Kovarian and the Silence have a falling out, and/or she manages to keep secrets from them.

Comments (9)

Project TreeWars: The Beginning

My goal is two posts a week – typically, one on Wednesday and one on the weekend. This is usually a pretty easy goal to obtain – it doesn’t take too much of my free time to churn out two posts between 750 and 1500 words. And yet, there almost wasn’t a post this weekend. Was I playing Minecraft? Nope.

I was writing code.

Programming is something I’ve always wanted to do professionally, but somehow I managed to end up doing enterprise technical support instead. So, it has become a hobby. And when a project really starts flowing, it is easy to lose myself in it. So I spent three days this week spending every available moment adding code to my new project: a game I’m tentatively calling TreeWars. I’ve managed to tear myself away from the project for a while, but rather than put it out of my mind, I’ve decided to blog about interesting things that happen during the development process.

First, meet TreeWars:

Not much to look at, I know. But the project is still very much a work in progress.

Some interesting things about TreeWars:

  • It is my second attempt at games programming, and my first was just a software implementation of a classic abstract board game (hnefatafl). And it was written using the graphics tools in GTK (which are serviceable, but not ideal). As a result, I’m learning all sorts of interesting things about the fundamentals of programming games.
  • It is my first (real) attempt at graphics programming as well. I’m using SDL, and may eventually rewrite the rendering engine (and parts of the game engine) to make the game 3d and use OpenGL. Either way, I hope to make it cross-platform, although I’m currently only focusing on Linux, since it’s my native platform.
  • It is based on trees from graph theory, not those other kind of trees.
  • Currently, all of those beautiful graphics are procedurally generated. It is actually harder than you would think to draw a circle, at least in SDL.
  • It (and the idea to blog about the process) was inspired by Project Frontier, a fascinating project by an experienced graphics programmer who is making far more interesting things than I am with procedural content generation! But hey, give me time…

So, the first step on the path to TreeWars was to learn enough SDL to generate a simple accelerated 2D image (not that it really needs to be accelerated right now, but I hope that will change in time). It turns out, this is both somewhat harder and somewhat easier than I expected.

I found a reasonably nice SDL tutorial here. In fact, TreeWars was just ‘sdltutorial’ (with plans to start writing a game once I’d worked through some tutorial programs) until I got to lesson where you implement Tic Tac Toe, and my mind insisted ‘Tic Tac Toe is boring, let’s make a real game!’ I justified that I often learn better when I’m puzzling out the best way to do something myself, and leapt into it.

The problem is, I often learn better that way, but I also often learn the hard way. I stumbled through a lot of ‘wrong’ ways of doing things in SDL, wasting a good deal of time hunting down the correct function (out of numerous functions available in the API) for getting a particular result. In the middle of all of that, it occurred to me that there is a knowledge level for which tutorials are never written. Tutorials are often written in a way that is so basic that I have to skip past large portions and carefully pluck out that bits that are relevant to me. On the other hand, APIs are often dense, and each function definition assumes you know the platform generally, so getting deep knowledge out of it presents a bootstrapping problem. Libraries almost never have a ‘using our library for the first time’ guide, or a best practices document, or a list of caveats that newcomers to that particular library may need to know about. So you get your choice between a too-low-level API for a huge, unfamiliar library, or a guide that tells you over and over that you need to call SDL_FreeSurface() when you’re done with a surface.

Instead, I’d like a guide that goes something like this:

Before you start drawing anything with SDL, you need to include the headers and call SDL_Init. In Linux, the headers are typically at /usr/include/SDL/SDL.h, but for portability it is recommended that you include the SDL header directory directly with ‘-I /usr/include/SDL’ and use “#include <sdl.h>”. A common init call would look like this:

if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
    // error handling code goes here (return false
    // if calling from an object or function,
    // perhaps, or possibly exit())
}

Typically, drawing graphics in SDL starts by creating a double-buffered, hardware-accelerated SDL_Surface object with SDL_SetVideoMode, like so:

SDL_Surface* window;
window = SetVideoMode(1024, 768, 32,
                      SDL_HWSURFACE | SDL_DOUBLEBUF);

You can think of this as your main window (or root window, if you are comfortable with that terminology). You can draw other SDL Surfaces onto it (a process known as ‘blitting’ for some reason), and you can render the current contents of the (double-buffered) window with:

SDL_Flip(window);

‘Flip’ may not make much sense until you understand the metaphor in use for a double-buffered surface. Think of a flat, thin surface with 2 sides – one side is visible (facing the user). When you draw onto the surface, all of your images are drawn on the invisible side – the side facing ‘away’ from the user. When you ‘flip’ this surface, the part that they were looking at is hidden, and the part you were drawing on is exposed. This lets you do your graphics updates ‘all at once’ instead of having the user see each object as you draw it.

So, to refresh the screen once per second, you might do something like this:

// assuming you have already initialized
// a surface called 'window'
while (true)
{
    // draw some stuff on window here
    SDL_Flip(window);
    sleep(1);
}

There are several ways to draw things on surfaces – you can blit another surface on with SDL_BlitSurface(), or use SDL_FillRect() to draw a rectangle (this is SDL’s primary primitive shape, so procedurally generating curves becomes an interesting problem).

Of course, in practice you would probably want to do other things than just continuously render images – you need to respond to user input, iterate any data that needs to periodically change, etc. You might do those things in separate threads, but it is often simpler to check for them in a loop like this one. In fact, most graphics-based programs that respond to user input do things like this.

Oh, one other thing. When you’re done with a surface, you always want to clean it up with:

SDL_FreeSurface(window);

Next time, we’ll look at some particular problems I encountered, and how I solved them. Then we’ll look at how I solved them correctly, to demonstrate that there are usually many ways to solve a problem. This will also let us highlight the difference between good and bad code. And we might talk some more about the joys of using the SDL API.

Leave a Comment

Rambling Review: Braid

The Rambling Review is a series where I review games, books, movies, and TV series, both new and old, in a rambling, disorganized style.

“Can video games be art?” is one of those questions that has been discussed to death. Of course, the problem domain of defining art is a notoriously snare-laden landscape. But by almost any definition, it is clear from nearly the beginning of the game Braid that it is a conscious attempt to argue the case that video games can be art. At the very least, it is aesthetically compelling, with strongly cohesive sprites, backgrounds, music, and animations. But I would argue that it is more than just aesthetically interesting, and that it passes muster as a piece of art by almost any definition.

But more than that, the art direction reflects the themes and mood of the story, to say nothing of the symbolism encoded in the art. And the story emerges from and is intertwined with the gameplay. As Phil of The Nintendo Project recently observed:

[In Braid,] the story extends from the gameplay. It’s a story about the passage of time, memory, and regret, but all of the aspects of the story are simply thematic meditations on things about the gameplay. When the game introduces time-locked objects, the story introduces the idea of mistakes that cannot be undone. When it introduces the ability to have a shadow Tim carry out one set of actions while Tim carries out another, it introduces the idea of regret for lives unlived.

This is something that no other game in my memory has ever done. Coupling the gameplay not just to the content of the story (such as it is), but with the emotional and psychological themes of the game. Now, every game, however devoid of life, contains emotional and psychological themes. Everything we interact with does, because our minds are founded, by definition, in psychology. We approach the world by interpreting it, even if we do it on an unconscious level. Even pong can be discussed in terms of boundaries, liminal spaces, conflict, and the repetition of actions for an arbitrary and meaningless rewards.

However, games like Braid are different. They are written purposefully to draw out certain themes. They are intended to have emotive content rather than simply being circumscribed by our emotional reactions to them. Another insight of Phil’s, and the topic I really want to talk about with Braid, is this:

The thing about Braid that I think a lot of people miss, despite it probably being the most important thing about the game, is that it is one of an increasing number of games to operate in a lyrical mode as opposed to an epic mode. Implicit in this, of course, is the idea that the nearest textual medium to video games is poetry. And so Braid, instead of telling a narrative story about rescuing a princess, instead offers an extended poem in which video game mechanics, growing up, the apocalypse, and love are all intertwined into a… well… braid.

So, let’s start with something pretty basic. Phil is discussing here a dichotomy between poetry and narrative. Now, obviously he doesn’t mean poetry as an art form generally – after all, narrative poems certainly exist. Rather, what we’re talking about is a difference between two modes of writing – that is, two different things you can do with the written word. You can tell a straightforward story in which the narrative flows directly – in this mode, regardless of whether your story is allegorical or contains deeper meanings and metaphors, there is a surface level of actions that are related in some basic order. This mode, which I will call the ‘narrative mode’ for simplicity, is how most stories are told.

Another mode, though, and one that is associated in many people’s minds with poetry in general, is what Phil calls a ‘lyrical mode’. Narrative story is thrown out in favor of suggestive imagery and implicit connections. It is harder to tell a story in this mode, because we think of stories as following a single cause-and-effect sequence that we call its narrative. However, stories can be told like this, and Braid does so.

The result is a story that, while clearly a story, doesn’t have a single narrative in it. There are certainly many interpretations of Braid, but the only one I’ve seen that does them justice is the one quoted above. The story is not ‘a metaphor for the development of the nuclear bomb’, as one interpreter suggests. The development of the nuclear bomb is certainly a clear theme, but it is not the one correct interpretation of the story. Rather, there are many interpretations of the story that are all true, simultaneously. And the writer probably didn’t intend for all of them to be there – the interesting thing about writing in the lyrical mode is that you can make connections, while writing, that you weren’t consciously aware of, and that others can make connections from the symbols you use that you didn’t intend. It is a way of using language (and art, and music) that would seem messy to anyone who insists that a sentence only have one correct meaning, but the result is a beautiful and moving piece of art about regret, love, and the inevitability of loss.

Final Score: Yes

Leave a Comment

The Escapist – decline of a website

I have been a fan of The Escapist for a long time. I’ve been watching Zero Punctuation almost since it began. I’ve been following Unskippable, Experienced Points, and Stolen Pixels for a long time as well. And I regularly browse around the site, watching videos and reading columns that look interesting. You could say I’m a fairly loyal customer of The Escapist.

But I’ve had it. I can’t stand it any more. Look, Themis Media, I get that your product is advertising. That the Escapist exists, to you, as a medium through which you can deliver ads to people. But you’ve gone overboard. Your site now has all the charm of a geocities page from 1998 combined with an ad/malware site from 2005. You have made your site so horrible to look at and difficult to use that I can only conclude you are actually trying to drive people away from your site. Were you getting too many pageviews? Is that it? Because if that’s the case, feel free to redirect every, oh, 10th user or so over to http://stringofbits.net instead. I could use the traffic.

If you are trying to drive people away from your site, well, you succeeded. I’m unsubscribing from my Zero Punctuation and Unskippable RSS feeds, and I’ll be ignoring Shamus’ blog posts about Experienced Points and Stolen Pixels. Because your site really is that bad.

Look, I can’t even always use your site. Sometimes, when I try? I get this:

I tried to watch the latest Zero Punctuation recently, and that’s what I got. Your ads crashed my browser. If I looked at an ad in a magazine, and it sprayed me with a chemical that temporarily blinded me, I think we could probably agree that it is a poorly designed advertisement (the cause, by the way, appears to be a full-screen flash ad that overlays the entire screen with a semi-transparent background, then plays a video in the middle of that). And even when the site doesn’t crash, well, it still isn’t exactly pretty:

I’ve already enumerated my objections to Duke Nukem Forever, and I have to say I’m a bit disappointed that you’re still agreeing to show ads for that now that you’ve had time to learn about the game’s content. Also, that image is repulsive all by itself. But mostly it’s the sheer number of things vying for my attention here. It’s obnoxious, and it immediately drains the excitement that was building at the thought of watching another Zero Punctuation.

And keep in mind, this was a fairly light instance of the page, ad-wise. Usually I get a full-screen video ad, or an ad popping up annoyingly from the bottom of the screen (usually right as I’m trying to click play, so it intercepts my mouse click).

This just isn’t a good way to do business. I know, I know. You’re giving away free content! Why am I complaining? Well, yes, you’re giving away free content. So are tons of other ad-revenue-driven sites, and they manage to find a way to make my browsing experience much more pleasant. There are better ways to spend my time. And even if there weren’t, you have exceeded my personal threshold for how much I’m willing to be annoyed when I’m trying to be entertained. You have literally made it not worth my time to visit your site.

Congratulations, I guess?

Comments (5)

Duke Nukem Forever should not exist

Today’s post was going to be a review of Braid. But Duke Nukem Forever was released yesterday, and, well… I have comments. So, next week: Braid. Now: Angry Feminist Rant.

Trigger Warning: descriptions of rape and violence ahead. Please do not read if these things may be harmful to you.

First, the backstory – Duke Nukem Forever was released after a decade of anticipation and shifting release dates, with the game being dropped and picked up by development houses and publishers along the way. And now that it is out? Almost every review of Duke Nukem Forever has been negative. It has an abysmal metacritic score (although higher than it deserves, it seems to me). Many of the reviews have pointed out, in addition to poor graphics and boring gameplay, the blatant misogyny that fills the game in place of interesting content. Even Destructoid, which doesn’t have the best track record when it comes to sexism, lambasted the game for its immaturity and offensiveness.

The game doesn’t just support rape culture incidentally by propagating misogynistic tropes, though; it absolutely revels in it. According to the Destructoid review:

…at times, the game’s attempts to be funny come off as downright horrific. One level in particular takes place in an alien nest where Earth’s women are being inseminated by giant penises. The women writhe and moan in a fairly humiliating fashion, and they regularly sob with no small amount of implied misery. In essence, the women look like they’re getting raped. In fact, they are. That’s the big joke of the level. The aliens are raping the women to create babies… By the time Duke Nukem finally makes a “You’re fucked,” joke, which he makes in front of two girls who are about to die in the process of getting sexually assaulted, Duke does not come across as cool, witty or likable in the least. He comes across as a vile, callous, thoroughly detestable psychopath.

I was speechless after reading this. This is simply heinous. It completely falls flat as humor. Even for people who are regularly amused by harmful, offensive humor, I suspect this just isn’t funny. It’s sad and disgusting that the writers of this game felt the need to use violent sexual assault as a setup for an excruciatingly bad joke.

In light of the bad reviews, The Redner Group, the PR agency responsible for sending out review copies got angry and lashed out on twitter, saying:

too many went too far with their reviews… we are reviewing who gets games next time and who doesn’t based on today’s venom

So, if someone writes a massively harmful misogynist game that includes the premise ‘rape is funny’, and you have the audacity to point that out, you deserve to be punished by losing access to review any game from that publisher. I mean… look. While Feminists often talk about the silencing tactics that people use to keep rape culture intact, we don’t usually get such a blatant example. You’re blatantly saying “if you speak out about this, we will blacklist you”. It is a direct threat to damage the career of anyone who calls you out for your misogyny. If nothing else, Redner Group, thanks for such an illustrative example.

The Redner Group isn’t the only group that has issues with the negative reviews. We have some fine apologetics going on over here on Kotaku. One user in particular, with the outstanding handle of 0LunarEclipse0, had this to say:

Just because you can’t handle shock humor does not make it not funny. Everything can be funny. I’ve laughed at some of the most racist and disgusting jokes. Maybe that makes me a horrible person… Just because something pushes you to far doesn’t mean it pushes everyone to far… Nothing should ever be off limits. If we sacrifice freedom we sacrafice [sic] life.

The very fact that this offends you is more truth that it should be defended. Because you want it silenced. Censored. Well freedom means free. Regardless of how much something offends you, we can say and do what we want. Because your feelings don’t matter.

I don’t support rape and this joke goes a little to far even for me. But I beleive [sic] in freedom. So nothing ever should be off limits.

Okay, 0 (can I call you 0?). There’s a lot wrong with this – it’s basically a giant mess of privilege denial – so let’s take it a piece at a time. Frankly, I don’t care whether you’re offended. Offense is not the point. When I say that Duke Nukem Forever should not exist, I don’t say that because I think it is offensive. I say it because it will cause material harm. It reinforces – undeniably and strongly – the cultural narrative that rape is acceptable. Because when something is made into a joke, it is normalized. It is established as a set part of our culture. This will inevitably make it seem more reasonable, or justifiable, because it is normal. That is what rape culture does – it makes rape seem normal, inevitable, and by extension, acceptable.

So let’s lay out what we’re really talking about here. Duke Nukem Forever normalizes rape. It contributes to and propagates rape culture. To defend this game is to defend the act of rape. So no, I don’t care who is offended by Duke Nukem Forever. I care about who it is going to hurt.

On to the next premise: “freedom means free”. First, I don’t know what Randian faux-Utopia you live in, but in the reality I’m accustomed to, society puts certain limits on freedom. For instance, you are not free to kill another person. But i digress – let’s talk about what’s really on your mind. You’ve erected a strawman argument here that suggests the game’s detractors are trying to say the game should be pulled from the shelves, or banned, or something similar. I don’t know if reviews have been suggesting that – I can’t find any that have. I, at least, am not going to suggest that.

Certainly, the case could be made that this game should not be allowed to see release. My discussion of its harmful nature above edges in that direction. But I would rather err on the side of letting something harmful be created than that of censoring something worthwhile. So, I’m going to say this: Certainly, 2K games is free to develop and publish a game with this content. But I stand by my assertion in this post’s title, as well: the game should not exist. The world is not made a better place, in any way, by its existence. In fact, as I have suggested above, I hold that the world has been actively made a worse place by this game existing. It should not exist in the sense that decent human beings should know better than to create something this full of hate. But none of that is to suggest that the game shouldn’t be allowed to be released, or should be banned or censored, which is what the strawman argument says (although I would suggest that, if we’re going to have a rating system at all, the ESRB’s rating of M is dismissive of the seriousness of rape; this game should absolutely be AO). Rather, I’m suggesting that it is a negative mark for our entire society that we produce people capable of producing this game.

Moreover, you are applying your freedom conspicuously in only one direction. If the developers should have the freedom to make this game, why shouldn’t reviewers have the freedom to express their opinions about the game? It seems more a little hypocritical to complain about people exercising the freedom you’re so insistent on. So which is it? Do we ‘believe in freedom’, or not? Or does that freedom only apply when it lets you laugh at women being raped to death, and not when people suggest that maybe that’s a little bit fucked up?

One last thing I’d like to talk about is this claim:

I don’t support rape

By defending this game under the guise of ‘humor’, you do support rape. You may claim to have taken some abstract stand against rape, but you are contradicting that claim with your words. The same goes for anyone who would argue that this game has any redeeming value. The game contains content that is tantamount to hate speech against women. You are free to purchase and play Duke Nukem Forever – as you say, freedom is an important thing! However, if you do choose to support this game, you are supporting rape culture. So just, you know, keep that in mind.

Comments (32)

D&D Post-mortem: I wanna cast ‘magic missile’!

In D&D Post-mortem, I talk about my experiences running D&D 4e games, about 4e as a whole, and about collaborative storytelling in general.

When D&D 4e was launched, I was highly skeptical. I joined the vocal legion of gamers who saw it as a move towards MMO-like game mechanics and immersion-breaking shallow gameplay, and as little more than a money grab by Wizards of the Coast. However, after reading several posts by Alexandra Erin on the subject, I decided to give it a try. Her insight into the game’s design decisions convinced me that there might be something worth trying.

As I began playing around with the rules, creating sample PCs, NPCs, encounters and sketching the rough framework for several stories, I began to see that 4e had a lot of promise. I spent a good deal of money buying source books, and started looking to get a game together. I finally got a game going, albeit with a very small number of players (only two of them!). I set this game, as I do all of my D&D games (dating back to 2nd edition), in my homebrew setting of Yord.

So, we finally got together and played what I am going to affectionately refer to as our first two gaming sessions. In practice, this was actually four shorter sessions, but I digress. Here are some impressions of 4e, and things that I learned from these first sessions.

I don’t really know how to structure skill challenges. My character-driven approach to running games means that building skill challenges in advance is difficult, at least early on before the story has begun to take shape. Building them on the fly is difficult, too, and they tend to end up feeling contrived and kludgy, not to mention a bit of a slog to get through. Hopefully designing these well will become easier as I gain experience with the system.

Combat encounters, by contrast, are a joy to design and to run. It is easy to scale back encounters to account for fewer PCs, and encounter design in general is faster and less haphazard than in previous editions. It gives me more time to focus on making interesting tactical scenarios, place difficult terrain and other interesting aspects of the encounter.

I also love the game’s focus on making traps and hazards into part of an encounter. Lone traps always seemed tedious more often than they are interesting, and this makes it easy to put in the requisite traps to make a dungeon feel like a dungeon without leading to the depressing “disarm the next pit” slog. Interesting traps that deserve time to allow the PCs to pore over and tinker with them can still be encounters of their own, but most traps can now be seamlessly incorporated into combat, where they actually make things more interesting.

Another thing I love about 4e, and this is something that D&D has needed for a long time, is the concept of Power Types and Combat Roles. The roles neatly encapsulate what the ‘core four’ classes have always done – fighters look big and dangerous so that the fight will concentrate on them, rogues slip in to deal tons of damage to single targets, clerics provide buffs and healing, keeping the party alive and together, and wizards mop up the smaller targets so that everyone else can focus on the bigger threats. Someone at Wizards finally realized that these four roles, while important and useful, were somewhat arbitrarily tied to their class concepts. In 4e, the ‘Power Type’ has been divorced from the Role, so that there are classes that encapsulate the cleric’s healing and buffing abilities, but are rooted in martial or arcane themes.

This makes it a lot easier to create a character concept first, and then implement it according to the game mechanics. The general effect is that 4e makes it very easy to provide your own flavor without affecting the game balance – in general, the de facto rule is that ‘anything that doesn’t affect the game mechanics is fair game, unless your DM disapproves’. This encourages much more creativity and narrative flair than previous editions.

And yet, for all of the flexibility and useful decoupling of combat roles vs class theme, the system excels at ensuring that a given character is basically functional, and has a cohesive set of powers. This is something I noticed while running battles; they did a pretty good job of making sure everyone can be useful in combat. No more ‘I was a wizard but now I am tired’ effects, to steal a quote. This is an advantage over more piecemeal systems like GURPS, Savage Worlds, or D&D 3e – it’s pretty hard to build a useless character.

So, those are my general impressions of 4e after a couple sessions of play. Now let’s look at some anecdotes from my session.

During character creation, both of my players settled on Arcane classes – a Wizard and a Warlock. I rounded out the party with a DM-controlled companion character; a gnomish Arcane Leader. He is basically a Bard, but I chose his powers to play to the Gnome Illusionist trope. This party seems to work pretty well; I used a kobold raid on the town to test-drive the combat system, and things went well. I then used the companion character to drive a simple story – he offered looting rights in exchange for helping him recover a statue from some nearby goblins.

An aside on my DMing style here: I play a heavily character-driven style. Where some DMs would railroad the party for the sake of the story, I will sacrifice the story for the sake of the party’s actions. If they had chosen to turn Mim down, he would have gone his way while they continued on theirs. This DMing style has its disadvantages (notably, it requires a lot of improvising!), but it has some strong advantages as well. It creates the feeling from the outset that the characters’ actions actually have an impact on the story. I build the story around those actions, largely in terms of causal consequences. I do begin to practice a subtle railroading as the story develops – it often becomes easy and logical to put the story in front of the characters, and then simply observe how they deal with it. At any rate, most people seem to like this style of game, based on the feedback I’ve gotten in the past.

So, our next combat encounter occurred at the entrance to the goblins’ den. A few goblins were guarding the entrance; the party fought them off, but at least one escaped into the complex. Reasoning there was probably at least one other entrance, and that the bulk of the goblins would be through the main entrance, the party Wizard decided to blast the cave ceiling with magic missiles until it collapsed. This was my first serious blunder as a DM in 4e, I think – I said no to this idea. In retrospect, it was narratively interesting, tactically interesting, and there wasn’t a terribly good reason to say no. Given the imminence of goblin reinforcements, it was actually a great time for a skill challenge – Arcana and Dungeoneering checks to bring the cave down. After realizing this, I (much later) retconned the encounter and allowed that the cave had been partially collapsed.

These first couple of sessions were promising, and 4e looks like a system that is well-designed. It leaves a lot of room for creativity without being so free-form as to lose its sense of cohesion.

If you want to learn more about my homebrew setting of Yord, or follow the antics of the PCs, check out my campaign at Epic Words.

Leave a Comment

Tabletop Roleplaying over the Internet

I have been playing tabletop roleplaying games since a fateful day when I was 13. I had gone with a friend to play Magic: the Gathering at a local video game shop that also happened to sell Magic cards. One of the players mentioned a gaming group starting up at the local Media Play.

Curious, my friend and I got a ride over to Media Play. There, I found a pretty large group of people playing Magic. I also saw an interesting sight: some people with books, funny shaped dice, and little painted figures arranged on a square grid. I watched for a few minutes, and quickly got the gist of what they were doing. I asked if I could join. The response? “Sure, we need a cleric.”

Thus began a hobby that has spanned half my life and cost a great deal of money. I have played a number of systems: World of Darkness, Cyberpunk 2020, Shadowrun, Rifts, Call of Cthulhu, Star Wars (the older edition that used d6s), homebrew systems created by various friends. But I always come back to D&D. It was my first system, and it remains my favorite through three editions of the game. In a lot of ways, it has grown with me.

In the last few years, though, I haven’t had many chances to play D&D. I was skeptical of 4e at first, and then spent a lot of money buying 4e books after Alexandra Erin convinced me of its merits in her repeated, impassioned blog posts about it (all of those links are excellent reading, even if you already know you like 4e). I sat on these purchases for months, planning games, even getting some people to make characters. But no game formed; the other players either didn’t have free time, or I didn’t have free time, or we were too far away.

The Search for a Gaming Table

Eventually I found a little free time to bring a game together, and since I couldn’t solve the problem of my friends’ lack of free time, I started looking to solve the problem of people who had free time, but were too far away. So I started looking for a solution to playing D&D over the Internet. Namely, what I needed was something known as a virtual tabletop. I started out with simple requirements: free is good, open source is even better. Since there was no good overview or comparison of the existing virtual tabletop options, I decided to make one. I’ll describe, briefly, why I didn’t pick each one (until I get to the one I *did* pick, of course).

OpenRPG – frustratingly deprecated

Years ago (about 10 of them), I tried using WebRPG as a virtual tabletop. I remember it having a somewhat cumbersome and over-engineered interface, and being frustrated with it on many levels. Still, it was the first thing in my memory, so it’s the first thing I looked up. Turns out it went open source a while back, and is now called OpenRPG.

Unfortunately, this was a non-starter. OpenRPG is written in Python (yay!), but doesn’t work with Python 2.7, which is the de facto standard in Fedora. I didn’t want to maintain a separate Python install for just one program (this is possible, but would be a pretty big hassle to set up), so OpenRPG was a bust.

Screen Monkey – expensive and cumbersome

The next program I discovered was Screen Monkey. Once again, Alexandra Erin was instrumental in this – she mentioned using it for her online games. Screen Monkey has one big advantage – for the players, it is browser based, so only the DM needs to install any client software. Unfortunately, that software only runs in Windows. So, I found an old install disk for Windows XP, and installed it as a virtual machine using KVM. Then I installed Screen Monkey Lite.

More bad news, though. Screen Monkey Lite turns out to be rather light on useful features. The biggest problem is that you can’t save your work – you have to buy the $35 version of the program to save and restore a session. The tools for hiding what the players can see was also fairly awkward. Awkward, in fact, is the word I would use to describe the program’s feeling as a whole. NBOS are terribly proud of their software ($35 proud) only to be outdone by multiple free and open source competitors. Sounds like some other software companies I know.

Gametable – RIP

Gametable looked promising, but doesn’t seem to be actively developed (there was a sourceforge project available a while back, and remnants of it are here, but it seems to be dead now), and it didn’t work very well for me.

Fantasy Grounds – pretty, but overpriced

Next up is Fantasy Grounds. I didn’t even try the demo once I saw the price tag – $40 for the DM-capable client, and $24 each for the players’ clients. One of my hard requirements is that my players not have to spend any money on the solution, so this one was right out. For a more affluent group, though, it might be a great solution. I will concede that it is gorgeous, and looks very well polished. Certainly a better contender for your money than Screen Monkey. And it has acknowledged, if unofficial, plugins for various game systems, including D&D 4e.

MapTool – the right balance

Eventually, I found MapTool, one of the applications created by the RPTools team. MapTool originally didn’t impress me – it seemed cumbersome and unwieldy. After working with it for a while, though, I found that most of its design decisions make sense, and that it is very powerful. Like most powerful toolkits, it is subsequently pretty complicated, and using it effectively took some practice. However, once I got the hang of it, it’s unbeatable. It’s more stable than any of the other open source offerings, and it runs well out of the box. It lets you use fog of war, individual player views (based on available light sources), and it lets you make maps in advance but have them hidden from the players until you are ready to show them.

Also invaluable was Dorpond’s 4e framework. This is a set of configuration settings and macros that work together to make MapTool work well with the D&D 4e rules. I have modified his macros a bit to fit my particular play style (notably, I prefer to let players roll their own initiatives), and am continuing to do so as I playtest them. You can find my latest version of the framework here.

Also, three caveat with maptool:
1. The network functionality doesn’t work with OpenJDK. Linux users will want to install the Java JRE instead. In Fedora, I just installed the jre RPM from Sun’s website, then edited MapTool’s startup script and added ‘export JAVA_HOME=/usr/java/default’ and ‘export PATH=\$JAVA_HOME/bin:\$PATH’ near the top of the file.
2. When starting a server, if you do not select ‘Use Individual Views’, the GM will not see an accurate version of the player’s view.
3. When you have tokens in the initiative list, players can only move their token on their own turn. Trying to move when they don’t have initiative will send them into an annoying endless loop of NullPointerExceptions. I’m hoping this gets fixed soon by the MapTools team, because it’s an obnoxious bug. Luckily, MapTools is Open Source – I may take a crack at finding that bug myself.

D&D Virtual Table – still cooking

Wizards of the Coast has recently announced a beta version of their own virtual tabletop – called, simply enough, D&D Virtual Table. It is only available to select D&D Insider subscribers. And, since D&D Insider is not worth the price for me personally (a topic worthy of an entire post unto itself), I have no idea whether it is any good. It would also certainly require every player to have their own D&D Insider subscription, so it breaks my stated rule. Still, it might be something to keep an eye on.

Adding Voice

So, now that we had a game table, we needed a way to talk to each other. Luckily, there is a readily available, cross-platform solution to this: TeamSpeak. Now, TeamSpeak isn’t open source, and it is not free if you want to host multiple teamspeak servers on one machine (or have more than 32 clients connected). But it’s great for a D&D game, which would never need those resources. It’s dead simple to set up the server in Linux, and the permissions management is very intelligent (and again, dead simple).

Let’s look at the options I didn’t choose for voice chat: Skype relies on a central server, and has a history of iffy privacy practices. Ventrilo offers a Linux server, but no Linux client. And the voice chat available in various Instant Messaging programs is either unreliable, or doesn’t work in Linux either. So, TeamSpeak it is, and it works great.

Passing Notes

The last thing I needed was a way to present textual information to the players. I do a lot of world-building and writing background material, and I want to make sure that is available to the players (at least, the publicly revealable parts). I also want to be able to give them things like notes that they might acquire, and possibly conduct some roleplaying between sessions if a session ends during downtime.

There are plenty of ways to simply share files, and these would be adequate. Dropbox could be used, especially for image files. Google Docs seemed like a pretty good way to share documents with players. After considering it for a while, I discovered a site called Epic Words. Epic Words gives you a journal system, so players can post in-character summaries of game sessions; this also works well as a means to deliver chunks of story-based text such as notes, riddles, etc. in a way that the players can easily access and remember.

Epic Words also has wiki-like functionality, and lets you define “references”, including NPCs and places, that will be linked automatically when mentioned in a blog post. This is an especially useful feature, because it lets me, as the DM, add content to the players’ writings without actually changing their creative work. It also gives you a private forum, which is perfect for the kind of between-session downtime roleplaying I have in mind.

Epic Words’ biggest problem is that it only allows you to run a single campaign without either upgrading, ‘retiring’ the existing campaign, or deleting it. And even with the upgrade, there doesn’t appear to be a way to share references / wiki content between campaigns (I don’t know this for sure, because I can’t really test that, but it appears to be the case). If I were running multiple campaigns, there is a slew of generic world history and other setting information I would like to share between campaigns. If you could make wiki pages independent of campaigns and then ‘link’ them in, that would be ideal. As it is, I happen to only be running one campaign at the moment, so I will have to cross that bridge if and when I come to it.

Final Thoughts

In the end, I ended up using three tools to interact with my players: MapTool, TeamSpeak, and Epic Words. I like this solution because it is very Unix-philosophy friendly – each tool serves one purpose. MapTool acts as our tabletop, TeamSpeak is how we communicate, and Epic Words gives us a handy place for wrap-up/reference/between-session play. The overall experience is pretty excellent; this is a good way to play D&D. It is better than I was hoping for, and even surpasses actual face-to-face play in some ways (I would love to find a way to use MapTool with a projector for face-to-face play).

Comments (3)

Doctor Who: A Good Man Goes to War

Well. That was certainly an intense hour of television.

Absurdly Huge Spoilers Ahead!

Read the rest of this entry »

Comments (3)

Obligatory River Song speculation thread

Since the previews for A Good Man Goes to War have promised that the Doctor will learn “who River Song really is”, this may be my last chance to go on the record with some wild speculation about what the reveal will be.

Spoilers!

Read the rest of this entry »

Leave a Comment

Gaming in Linux – my adventures with wine

I like playing games. My 1600-word review of Portal 2 should have been at least some indication of that. I enjoy console and PC video games, tabletop roleplaying games, and board games. But today, I’m talking about playing PC video games in Linux.

wine is not an emulator

Let’s start with the basics (then probably skip the middle ground and jump straight to the advanced stuff). Programs written for Windows or Mac OS can’t be run natively in Linux. By ‘natively’, I mean you can’t just click on a Windows application, or type its name on your terminal, and expect it to work. You’ll get an error like this:

bash: ./windowsprogram.exe: cannot execute binary file

There are a number of reasons this doesn’t work. The first and most fundamental is that Windows and Linux use different binary file formats; that is, the actual program code is structured in an entirely different way.

So why not just create a tool that can take one binary format and convert it to another? Well, to begin with, that would be pretty complicated, and probably fraught with problems; these binary formats are actually pretty complex, and include things like how to dynamically access libraries. Libraries are big chunks of code that are written separately from the program, then used by the program so that software developers don’t have to repeatedly write the same code to accomplish common tasks.

And that leads us to the real problem – Linux and Windows have fundamentally different sets of libraries available. Each OS has a large collection of system libraries that developers can use to interact with the Operating System in different ways. And there is very, very little overlap between these libraries. A prominent example of a library that exists only in Windows is Direct3D, which is used by a lot of game developers; it contains code that makes it easier to do a lot of complicated things with the graphics card, thus making it easier to make pretty, visually involved games.

So, if you want to run a Windows program in Linux, you would have to create a tool that could take a Windows program, make it “think” it is running in a Windows environment, and then take its library calls and somehow convert them into a set of library calls that Linux can understand. Direct3D calls, for instance, might be converted into equivalent OpenGL calls in Linux. This is exactly what the wine project does.

Wine has been around for a long time, and it has aged well (these are the jokes, folks). The latest wine codebase does a great job handling a ton of Windows applications, including a great many games. This article is an overview of my experience using wine to play games on Fedora.

blizzards and steam valves

My journey begins with wine-1.3.18, the version packaged with fedora 13. Wanting to play Starcraft 2, I ran the installer, which executed without a problem. The game itself also ran great, without having to make any tweaks at all to wine’s configuration. So, Starcraft 2 was an easy win. Blizzard’s games, in general, work great under wine. I’m not sure if Blizzard just avoids strange API calls, or if wine has a lot of developers interested in making certain Blizzard’s games work. Either way, this one was phenomenally easy.

The next thing I tried was Valve’s Steam client. If you’re somehow reading this from the past, or Steam no longer exists in the future (or you have recently emerged from a coma), Steam is a game distribution platform. You can buy electronic copies of games, install them in steam, and play them. Many games also support achievements and server-side syncing of your game data. This makes gaming on multiple computers really nice (as long as you’re the only one using Steam, that is). It also has community features; you can see what your friends are playing, join them in multiplayer games, etc.

So, I have quite a few games on Steam, and before I can try to run the games under wine, I have to get Steam to run. This was a little bit trickier than running Starcraft 2. First, the Steam installer is a .msi file, which requires the msiexec tool to run. Luckily, recent versions of wine come equipped with an open-source clone of the msiexec tool. So, all I had to do was:

msiexec SteamInstall.msi

Once this was done, Steam launched, but I ran into a new problem: every time I move my mouse over the Steam windows, they would flicker, making it hard to see what I was doing. This was solved by using winecfg to set the ‘Windows Version’ to Windows 7. Problem solved.

The next problem I encountered with Steam was that, when I drag a Steam window, it continues to move around after I release the mouse button, as if I’m still holding it. I have to click on another Steam window to make it stop. This problem remains unsolved in the latest version of wine (1.3.21 as of this writing).

Having Steam running, though, I was able to try a few games. The first thing I discovered was that every game I tried had major problems until I unchecked ‘Enable Steam community in-game’. Once I had done this, Plants vs Zombies and Darkstar One both worked great ‘out of the box’, with no tweaking required.

Portal, on the other hand, was not as great. Every few seconds of game play (not exactly precise, and it happens more when portals are open) the game will stutter for a moment. I spent a lot of time tweaking wine to try to fix this, but the problem remains in the latest version of wine. In addition, in wine 1.3.20, an even worse problem appeared – instead of stuttering, the game would act as if the mouse had been moved a random distance in a random direction periodically.

The last game I tried out was Team Fortress 2. It refused to start until I added an override for hl2.exe (in winecfg) disabling gameoverlayrenderer.dll and changing the Windows version to NT 4.0 (who knew Windows NT was a good gaming platform?). After this, the game worked with a stuttering problem similar to Portal’s, but more dependent on how much action was happening on screen. This was probably my most disappointing experience with wine, and 1 problematic game out of 5 isn’t bad.

So far, I have a (let’s say) 80% success rate with running Windows games under Linux using wine, with comparatively little effort required on my part. This is a fantastic result compared to even 2 years ago, and I look forward to watching the wine project enable ever more games under Linux.

tips, tricks, caveats

If you’re using Fedora, you may run into problems with pulseaudio. I recommend disabling it completely, via the following:

yum remove alsa-plugins-pulseaudio
echo > ~/.pulse/client.conf << EOF
autospawn = no
daemon-binary = /bin/true
EOF

Then, reboot your machine (or make sure you kill all running pulseaudio processes). Wine works a lot better this way. You’ll probably also want to run:

setsebool wine_mmap_zero_ignore 1

To make SELinux play well with games in wine.

Something I wanted to do but was unable to achieve was run native Linux games directly from Steam, and have Steam keep track of them. After asking on the wine-users mailing list, I learned that the way wine emulates Windows process handling makes this impossible. So, instead, I created steamstub, a Windows program written specifically for Steam under wine. To use it, add it as a non-steam game to Steam, then edit the game’s properties and change the name to a native Linux game of your choice. Now, before you go play your Linux game, click ‘Play’ on this game in Steam. Steamstub will deliver a small popup, and to your Steam friends, it will look like you are playing a non-steam game until you click ‘OK’. This lets you advertise what game you are playing, even when Steam can’t launch it.

One more thing you may find interesting is a tool I developed called wino. It lets you keep track of multiple wine prefixes (virtual Windows environments), so you can keep your programs separated. This makes it easier to recover if something in your drive_c directory gets broken; you only have to worry about reinstalling at most one program. If you make heavy use of steam’s ‘non-Steam game’ functionality, like I do, then this is not as useful for you. However, wino also does a lot of other useful things, like allow you to have a default command assigned to a wineprefix (so you could just run ‘wino steam’ to launch Steam.exe). It can also run winecfg (and a lot of other tools) on a prefix via ‘wino prefixname –config’.

Leave a Comment

Follow

Get every new post delivered to your Inbox.

Join 134 other followers