Archive for category Games

More Shift

OK, so I didn’t have the issues with my video card quite as under control as I thought I did.  RivaTuner established the overclocking profile, but at certain places in Starcraft 2′s cinematics I still got the black-screen reboots.  Every time.

So I got fed up and decided to replace the card.  Having been burned out a bit by ATI, I checked into the recent nVidia cards, but didn’t find one that hit the graphics horsepower levels I wanted with low power consumption at a decent price point.  Continuing to look around, I discovered the Radeon 5770 card, which very closely matches my old 4870 for pixel-pushing power, but is built on a 40 nm process so it runs at much lower power.  The price was great and reviews were positive, and the kicker was that the card only takes one PCI power cable, so I’m confident my PSU can handle the load.

There are several manufacturers of ATI-based graphics cards, so the next choice was which company to pick.  Sapphire was off the table from the get-go — I don’t know if the issues I had with the 4870 were power-related or card-related, but I wasn’t going to risk another round of video card instability if I could help it.  In the end, I decided to go with the MSI board, which cost about $20 more, but has uniformly high reviews for performance, form factor, low temperatures, and overclockability.

I ordered the card from Newegg and got it in Wednesday.  I didn’t install it until last night, partly to try to keep myself focused on writing.  But once I did, the install was simple and clean.  The old card came out and went back into its box, ready for one of my friends to buy it used, and the new card went in.  Drivers were uninstalled, swept, and reinstalled, and the card came up perfectly and ready to go.

Except that it makes no noise at all.  Even under load, this card is quiet, and at idle you’d never know it was there.  It idles at 37 C, which is absurdly low for a video card.  I guess I shouldn’t complain about it being quiet, but it really is spooky knowing that the card is cranking away and the fans are barely running.  I keep expecting the computer to catch fire.

So welcome to the component family, MSI 5770 Hawk.  May you have a happy, healthy, and long life.

Shift Happens

I’ve mentioned my video card struggles before.  It’s been a constant source of low-grade annoyance that I haven’t been able to use my card to its full capacity, but at least I found a way to allow myself to play.  Last night, though, even with underclocking I still had restarts just looking at the main menu screen in Starcraft 2.

Let’s not get off on the subject of why I was playing Starcraft 2 rather than working on my interactive fiction game — I’m saving that for a self-flagellating post later.  But once this problem started happening, I really wanted to figure out what the deal was, so I hit up Google and started browsing.

Some people had power issues, and that seemed plausible.  After all, it required some gyrations to get the card up and running in the first place.  Some people blamed heat, but when checking the card temps it just didn’t seem that high.  But then I found another article that finally got me looking in the right direction.

Apparently my model of video card has a feature where it automatically shifts the clock speed of the card between 500 MHz and 750 MHz depending on what you’re trying to do with it.  I don’t know all the details, but apparently 3D games under Windows 7 can confuse the card and get it to try to shift modes back and forth repeatedly, which causes the fan to go nuts and the card to eventually trigger a system shutdown.

The suggested fix for this was to lock the GPU to 750 MHz using an overclocking tool.  I downloaded RivaTune, followed the simple instructions for setting this up, and was rewarded with a card that runs stably (and quietly) at full rated clock speed.  Sure, it probably eats a bit more power just idling at the desktop, but it’s worth it to not have to worry about random reboots any more!

Tags:

Interactive Fiction WIP Progress Report

I’m working on a project for this year’s Interactive Fiction Competition (IFComp 2010).  It’s one that I started as kind of a small palate-cleanser after last year’s Comp, intended to be a quickie adventure for my son.  As I worked through the idea and setting, however, I realized that there was more there than I was planning on implementing, and I reevaluated the scale of the project.

The result is my current work in progress (still nameless for now).  I’ve been working on it almost since I submitted last year’s entry, aside from a couple of breaks, and I’m happy to report that I’ve completed implementation of the last puzzles and the ending sequence, at least in skeletal form.  Much of the early game is more completely implemented, but getting the “bones” of the rest of the game laid down means that I don’t have to worry too much about infrastructural issues any more, and can concentrate on finishing the writing and improving the polish.

I’m very relieved to be at this stage; I pushed hard to get here over the past month and am happy that I achieved this.  I can hear you saying “But Matt, it’s the middle of July!  Why are you worked up about completing your game when you have two and a half months left until the Comp submission deadline?!?”

Well, there are several reasons.  First, with a baby in the house that’s almost exactly as old as my WIP, plus two other young kids and a wife I enjoy spending time with, getting time to work on the project is not easy.  I’ve used almost the entire amount of my free time since the last Comp (except for a Dragon Age break) to get here, and I’ve needed it.  I know that finishing the rest of the game in time is still going to require focused effort, especially when school starts back up in the fall.

Second, I have a much better idea of what goes into creating a finished, polished game than I did last year.  For Grounded in Space, I didn’t give myself enough time for development, for learning the tools, or (most importantly) for testing.  This year, even with the game scaffolding implemented end-to-end, I still have the following left to do (in roughly the order they need to be accomplished):

  • Enhancing the in-game tutorial
  • Fixing some known game-derailing bugs
  • Write out the ending sequences in full
  • Test and enhance the default message modifications
  • Implement some additional short scenes and interactive dialogue
  • Review my keyword implementation to ensure it’s consistent and useful
  • Perform object testing a la Juhana’s Object Response Tests
  • Alpha testing
  • Revise my writing
  • Test compatibility on various interpreters and platforms
  • Set up Quixe-specific modifications required for proper keywording and exit-lister display
  • Do cover art and a blurb
  • Beta testing and bug fixing

So no, I’m not resting on my laurels having gotten to this point.  If anything, getting this far has only permitted me to lift my head up and see how far away the finish line still is.

Wish me luck — I’m going to need it!  And for all the other authors this year – both returnees and first-timers — I wish you the best of success with your stories!

Tags: , , ,

Upgrading to Inform 7 6E72

With the recent releases of both the in-browser Glulx interpreter Quixe, and the newest Inform 7 Build 6E72, it was pretty obvious that I’d have to upgrade.  Sure, theoretically it would be possible to stick with the last version of Inform and manually roll out a playable website for my WIP.  But why turn down all the labor-saving power of the new “release along with an interpreter” option?  It automatically builds you a nice website, converts the Glulx file to Javascript for you, and packages it neatly up for release.  I’d also modified my source to remove the very few procedural rules I’d previously used, since I’d heard I7 is deprecating them, so I figured getting my WIP up and running wouldn’t be too arduous.

Happily, I was right!  I did run into about a dozen errors, which fell into two broad categories:

  1. Errors due to more strict syntax checking in the new build.  These were easy to find and fix — I spent maybe 5 minutes on these.
  2. Errors due to changes in the extensions I use.  My WIP uses a lot of extensions, and I hack some of them up a bit as well with overrides.  So pulling down the newest versions of all these extensions caused me a bit of worry.  Of them all, however, the only one that gave me any more than the most ephemeral trouble was the new version of Jon Ingold’s Flexible Windows.  Instead of a single drawing rule, it now uses an object-based rulebook, which required a couple of minor changes (as he points out in the changelog, I should note).  Actually making the code changes was easy; finding out exactly what needed to change was the trick.  Even this, though, didn’t take me more than about 15 minutes.

So the first thing I did now that I could get up and running in the new I7 was to set up Quixe and try a test release using it.  I was pleasantly surprised by the nice CSS defaults for the web pages.  The result isn’t quite up to the level of typography you can get with Gargoyle, of course, but for a literally no-effort setup it’s more than serviceable.  The only thing I ended up doing to the generated pages was to modify the User1 and User2 styles so that they reflected the colored text defaults that I start with, and I was off and running.

I have noticed that I7 is a touch slower to compile now than it was before, and generates a larger story file as well.  Before the upgrade I was running at just over 800 KB, and after the upgrade I’m up over 1 MB.  All the changes and improvements in the I7 release probably contribute to this, but I was pretty surprised to see the size of the generated file increase by 20%.  What this really means, I guess, is that it’s a good thing Quixe came out when it did, since the new I7 has pretty well priced itself out of the Z-machine’s range for all but the most trivial stories.

One thing I hope people continue to look at is the performance of Quixe.  The speed difference when running under Gargoyle vs. when running under Quixe is shocking — Quixe is at least an order of magnitude slower than standalone compiled interpreters, and I suspect more can be done to optimize Quixe given how brand-new the implementation is.  My fairly large WIP is certainly playable, but the slow response time is jarring.  Until speed improves I’ll still be playing most games through a standalone interpreter.

Now the only trick remaining is for me to work out how to support the dynamic color shifting for user styles that the standalone interpreters can use.  I have an extra window created below the status line that should be able to display one of four choices of colored text depending on what the user wants.  I’m thinking that with some judicious changes to the standard styles for that window, along with some minor changes to the code that displays the text, that I can support the appropriate choices in Quixe with a single set of CSS.  If I can’t, I guess I can create alternate windows with different color settings in their specific CSS sections and swap them in appropriately.  I’ll just have to ensure that whatever I end up doing for Quixe doesn’t break the solution I’m using for other interpreters.

Tags: , , ,

Andrew Plotkin’s Quixe Beta: Glulx Games Directly In-Browser!

In a surge of holiday-weekend coding, Andrew Plotkin (Zarf) has progressed his Quixe project to the beta stage and released it for evaluation.  If you’re very familiar with the excellent Parchment project, you’ll know that Parchment provides a Javascript implementation of the Z-machine, which is one of the major virtual machines used in the interactive fiction community.  When you play a game via Parchment, you don’t need plugins or standalone interpreter software at all — you play directly and natively in the browser.  This has obvious advantages for outreach — many people are leery of downloading unknown executable files at all.  And unless your game runs in Flash, convincing someone to install a browser plugin can be almost as hard a sell.  So Parchment has been a great mechanism to make Z-machine games available to not just a wider audience, but to a wide variety of devices as well.  Almost any device that supports a Javascript-enabled web browser can access interactive fiction through Parchment.

But until now, Glulx games were left in the cold.  Glulx is an alternate virtual machine developed by Andrew Plotkin to address some of the limitations of the Z-machine.  There’s more addressable memory as well as support for multiple windows, graphics, and sound, among other improvements.  Inform 7 gives you a choice of using Glulx or one of the Z-machine formats when you compile a game.

Unfortunately, using Inform 7 for a game of any complexity almost forces you into using Glulx, whether you are making use of its enhanced capabilities or not.  Inform 7 generates large game files that easily push past the Z-machine limits.  Particularly if you make use of the growing extension libraries you are likely to inflate yourself right past even the Z8 format’s cap on size.

So Inform 7 developers have (for the most part) found themselves unable to enjoy the same advantages of accessibility and ubiquity that Parchment gives Z-machine authors.

Enter Quixe.  Quixe provides a native Javascript implementation of the Glulx VM.  When combined with a suitable output layer (in this case I believe Zarf is using his own GlkOte implementation) it enables the same type of direct-in-browser play for Glulx-based games that Parchment enables for the Z-machine.

He’s currently got five games up on his page, but authors are able to convert any existing Glulx games using the zcode2js tool, and run them via his engine.  If you do this, you’ll notice that not everything is functional yet.  In particular, if you play the conversion of Rover’s Day Out you’ll miss much of the text formatting and screen effects that are visible in the game when played via a standalone interpreter.  Also, Internet Explorer does not currently work (!) Presumably these problems will be fixed and capabilities will be added in as development proceeds.  I expect we’ll also see the new style model that Zarf has been discussing over the past few months.

And of course, I had to run a conversion of my own Glulx game, Grounded in Space!  Despite not being very long or complex, I had to use Glulx for this game due the need for fairly high-precision floating-point math for one of the puzzles.  I haven’t gone through it in detail yet, but it seems to have converted correctly.  It doesn’t use any odd tricks that should prevent it from being playable, although the geometry puzzle might be even less comprehensible due to style and font issues.  At any rate, it’s very cool to have this capability, and I hope by the time this year’s Comp rolls around we’ll have a much larger number of games able to be played online due to Quixe!

Tags: , , ,

Inform 7 Tips — Syntax Options for Action Responses

There are several ways to approach writing complex behavior in Inform 7.  Two common ones are what I’ll call “action oriented” and “subject oriented”.  It might make more sense to use “object oriented”, but that term already has enough associated connotation and confusion.

The “action oriented” style seems to be the one used most consistently in the Inform 7 documentation, and as you would expect it’s very useful and readable.  An example is something like this:

Instead of examining something in the presence of Dan when Dan is bored:
	say "'Quit gawking at the scenery and entertain me!'";

Note that this code applies to the player whenever he or she examines anything.  Although there are additional qualifiers attached that limit the scope of the rule, and we could certainly add more, it fundamentally works as a modifier (or in this case, a replacement) for a single action against a range of possible objects.

But it’s often the case that you want specialized responses for a number of different actions performed in certain circumstances.  You can achieve this using a more “subject oriented” style:

Instead of doing something to the teak table in the presence of Dan when Dan is bored:
	say "'Quit screwing around with the table and entertain me!'";

We now have a rule that makes anything you do — to the table, and the table only — trigger a generic complaint message.

All this is great as far as it goes, but what if we want to get more ambitious yet?  Let’s say Dan mocks you when he’s bored, and you’d like him to have something different to say depending on what you happen to be doing.  How would we express this?

If we went by the book we could make a bunch of “action oriented” rules, arrange them in a rulebook, and run that rulebook when the proper conditions apply.  If we did that, we’d have something that looked like this (code changed due to Andrew Plotkin pointing out that the Report rulebook doesn’t have a generic version):

The block singing rule is not listed in any rulebook.

After doing something in the presence of Dan when Dan is bored:
	consider the mockery rulebook;

A mockery rule when examining:
	say "'Ooooh, look at me!  I'm wasting time looking at something completely irrelevant!'";

A mockery rule when singing:
	say "'Hold on there, pal!  Ryan Seacrest is holding on line one!  He wants you to be the next audition reject on American Idol!'";

etc.

This works, and works well.  In the case where you want to do anything dynamic to the rules on the fly, this is definitely the way to go.

But there’s another syntax that allows expressing these kinds of constructs in a more straightforward manner, particularly if you don’t need the full power of a rulebook.  The Inform 7 documentation hints at this, but doesn’t always give you full examples of the syntax.  Here are the above rules expressed in this other format:

The block singing rule is not listed in any rulebook.

After doing something in the presence of Dan when Dan is bored:
	if examining:
		say "'Ooooh, look at me!  I'm wasting time looking at something completely irrelevant!'";
	otherwise if singing:
		say "'Hold on there, pal!  Ryan Seacrest is holding on line one!  He wants you to be the next audition reject on American Idol!'";

This is good — I like it because it groups together all the special responses when a particular condition obtains — but often we might want to specify an action that can involve multiple nouns.  In that case, you can use the following syntax (if you have a filling action defined):

...
	otherwise if filling something with something:
		say "'You're wasting your time with that...'";

and, of course, you can specify either or both of the nouns as well:

	otherwise if attacking Dan:
		say "He easily dodges.  'C'mon, wimp!  You'll need to do better than that!'";

It would be nice, as long as we’re valuing brevity, to be able to use the “switch/case” syntax for this — something like:

The block singing rule is not listed in any rulebook.

After doing something in the presence of Dan when Dan is bored:
	if the current action is:
		-- examining:
			say "'Ooooh, look at me!  I'm wasting time looking at something completely irrelevant!'";
		-- singing:
			say "'Hold on there, pal!  Ryan Seacrest is holding on line one!  He wants you to be the next audition reject on American Idol!'";

… but I haven’t been able to find a variant of this syntax that works properly.  Perhaps the new version of Inform 7, scheduled to be released today, will allow this.

At any rate, I hope this was useful.  Rulebooks are exceptionally powerful and many times they are the proper solution to your design issues, but don’t underestimate the power of the “subject oriented” approach.  By keeping your related actions in close proximity like this, you can keep your code clean, readable, and well-organized.

Tags: ,

Inform 7 Tips — Keyword Disambiguation For Verb/Noun Conflicts

I thought I’d share an Inform 7 programming tip I’ve come up with in recent work on my new game.  As you could probably have guessed from previous blog entries (here and here), I’m using a keyword-based interface in this new work.

At its core, what a keyword-based interface does is to link up a generic single-token input to one or more default actions, such as examining, asking about, or going.  Here’s a very basic example of some code that you might use to effect this:

Understand "[something]" as examining.

Simple, right?  Now if you type a word that refers to an object, the game will examine it.

Well, most of the time it will, except in a couple of annoying cases.  What if you have a drill in your game?  You could refer to the drill as the keyword “drill”, but if you have a drill you likely also have a drilling action as well.  What happens then?

Drilling is an action applying to one thing.

Understand "drill [something]" as drilling.
Understand "drill in/into [something]" as drilling.

What happens here is that whenever you type “drill”, the system immediately assumes that you want to use the specific “drilling” action rather than the generic keyword examination, and it asks you to clarify what you want to drill.

Likely this is not really what you want.  If it is, you’re fine; you can leave things as they are.  But in a keyword-focused game, you might judge it more important to preserve the behavior of the keywords and force the user to actually specify an object to drill if they want to perform the drilling action.

The reason the parser resolves a command of “drill” the way it does is not easy to pin down through standard Inform debugging commands, but is almost certainly due to the same general prioritization rules that it uses throughout the system:  the most specific match wins.  Even though “[something]” and “drill [something]” are both potentially valid matches for an input string of “drill”, Inform counts the exact text match of the drilling action as a closer match, even though it requires a second token. To Inform, that’s not a problem; it knows how to prompt the player for that required noun.

To get around this behavior, you need to provide a match that’s even closer.  Fortunately, this is pretty easy:

Drill-referring is an action applying to nothing.

Understand "drill" as drill-referring.

Instead of drill-referring:
	try examining the electric drill;

Now we’ve implemented an action tied to an exact match to the input token.  “Drill-referring” is now the best match for an input string of “drill”, and we can wire up the “drill-referring” action to do the appropriate thing.

Likely you won’t run into this type of behavior in a whole lot of places, but it can be nice to know how to resolve it if you do.

Tags: ,

The Fruits of My “Research”

I recently took what ended up as a 2 1/2 month break from interactive fiction development.  Most of that time got spent on Dragon Age, but I also played through Left 4 Dead 2 due to an offhand comment by Zarf on rec.arts.int-fiction.  In addition, over the Easter weekend I traveled to my in-laws for the holiday and also to celebrate the birthdays of a niece and nephew.  While at Chuck E. Cheese for the latter event, I found an interesting game called “Let’s Go Jungle”, which in addition to sounding like something my daughter might say, incorporated an interesting gameplay mechanic that adds interest to what is otherwise a garden-variety rail shooter.

So to rationalize to myself that I didn’t just flush the last couple of months down the toilet, here’s some of the musings I drew from my “research”:

Read the rest of this entry »

Tags: ,

Game Review — Left 4 Dead 2

While gearing back up for some more interactive fiction development after my two-and-a-half-month detour through Dragon Age, I made a comment on rec.arts.int-fiction to the effect that the Drama Manager in Blue Lacuna, Aaron Reed’s XYZZY Award-winning interactive fiction title, was unique in my knowledge in terms of providing an auto-adapting pacing mechanism for gameplay.

Zarf (Andrew Plotkin) responded with a link to a design postmortem presentation for the game “Left 4 Dead“, by Valve Software, which talked about their use of procedurally-generated content to provide dramatic pacing for that game.  Now, Left 4 Dead is substantially different from an interactive fiction title, but I like a good FPS as much as the next guy, and was intrigued by the paper.  In a coincidence that was happy for my wallet but not for my productivity, Valve was having a half-price sale for Left 4 Dead 2 right after this exchange, so I was able to pick up the game for just $25 and give it a spin.

The premise of the L4D series is that there’s been some sort of contagious infection that is turning people into zombies.  You play one of the four Survivors, humans that have proven immune to the contagion.  The goal is simple — escape the zombie hordes before your brains are eaten.  To do this, you have to work together to protect each other and carve a path through the ravening hordes of zombies to reach an extraction point at the end of the level.

It’s a cooperative first-person shooter game — even if you play alone, the game spawns three “bot” players to help you.  And it’s a good thing it does, because the gameplay depends on close cooperation between players.  If one person gets separated from the group, it’s very likely they’re going to get killed before too long, because certain of the enemies — the “special Infected” — can pin or otherwise incapacitate lone Survivors.  If one of your friends doesn’t quickly kill whatever’s on you, you’ll watch helplessly as the zombie rips you apart.

A big chunk of the magic of this game, as the paper I read indicated, is in the pacing.  L4D2 generates loot and enemies procedurally, depending on where you are and what your calculated level of “emotional intensity” is.  If you’ve been fighting hard, with lots of zombies on you, the game will hold at that level of intensity for a little bit and then back off to give you a breather.  If you’ve had some downtime, the game will slowly start spinning up more enemies and eventually subject you to a “horde”, where a mob of common Infected rush you, trying to overwhelm you with a human wave attack.  And every so often you get a special Infected or boss Infected thrown into the mix.

These special Infected are by far the toughest part of the game.  Each of the specials has a powerful ability it can use to wreak havoc on a team of Survivors.  Spitters can spit globs of caustic saliva, causing damage and potentially cutting off escape routes.  Chargers can sprint into a group, grab someone, and carry them along in a straight line until they reach a wall, both damaging and separating them from the group.  Jockeys can jump on your shoulders and force you to run away from your friends, and can even force you off ledges.  The dreaded Tank can absorb a ridiculous amount of firepower, and does amazing damage and knockback if you are foolish enough to let it close to melee range.

The complement to the dynamic pacing is the atmosphere.  Level design is excellent, with decaying architecture, weather effects, low-light areas, and close quarters all serving to keep the tension heightened.  The music used on each level is different, and thematically matched to the play environments.  Hordes and bosses all have special theme music, which is again different depending on the level you’re playing, and it wasn’t uncommon for me to start getting twitchy and panicky when I heard that horde theme start up again while I was stuck hip-deep in swampwater.

Your fellow survivors have a great deal of scripted conversation that is triggered in certain circumstances; you definitely get to know their personalities as the game goes by.  In addition to the level-specific dialogue, there are a lot of coordination comments they use, from alerting you to weapons nearby to reporting their imminent death.

I guess a good illustration of the intensity of the gameplay is my reaction to the weapons available on each level.  You always start a level in a “safehouse” — an impregnable room with a selection of health packs, weapons, and ammunition.  You can choose a single heavy weapon (such as a rifle or shotgun) to take with you, and you can’t change it until you find either another safehouse or a hidden stockpile of guns somewhere in the level.  And since the levels are procedurally generated, you don’t always get the same selection of guns on every playthrough.

In most first-person shooters I have weapon preferences — in Half-Life I’m a pretty big fan of the shotgun (if I don’t have the gravity gun) — but if I can’t get my weapon of choice, or if I’m out of ammo, it’s not a big deal.  I’ll just use one of the other ones.

In L4D2, if I don’t get either the AK-47 or the M-16 (on levels where that tier of weapon is an option) I feel naked and exposed.  It’s very uncomfortable not to have the precise weapon I’m most skilled with, and it’s just nervewracking and not very fun to play the game until I find an acceptable gun.  I think this more than anything else is the triumph of the Left 4 Dead series — that they can control pacing and atmosphere to such a degree that they can give you that “character in a horror movie” feel, just from your expectation of what’s coming next.

I’ve really only played the single-player campaign, so I don’t have the experience of going out and playing with three other guys using voice chat.  They do have several player-vs-player variants, including a very fun one where two teams of four alternate being the Survivors and the special Infected and then see which team can make it farthest through one of the levels.  It seems there’s a lot of replayability here, and I’m looking forward to giving some of those other modes a shot.

Even the single-player experience, however, was well worth the $25.  As an illustration of how procedural, dynamic content can serve the gaming experience, and as a darn good FPS game itself, L4D2 is well-worth playing if you have any taste for first person shooters — or zombie movies.

Tags: ,

Dragon Age — Game Review

At the beginning of the year I took a “quick” break from development on my next interactive fiction title to play Dragon Age, which I got for Christmas from Robin.  I’m a big Bioware RPG fan from way back; I’ve played most of their titles over the years and have been really impressed at how they’ve pretty much singlehandedly taken the Western RPG from life support to marketplace dominance.  So I was expecting an epic-scoped of game with plenty of character development, relevant player choice, and intricate, intertwined plots.

What I was not expecting was a massive, addicting game that would eat up three and a half months of my free time.  Granted, part of that is because the amount of time I have for gaming is a lot more limited now, with newborn Jonathan and his massive disrupting effect on our family schedule.  It was common for me to only get one three-hour block per week to play during this period, and the game has somewhere around 100 hours of content, depending on how you play.  Speed wasn’t enhanced by my decision to play on the “hard” difficulty level, which ramps up the difficulty of the combats.  The main result of elevated difficulty was to require more time fiddling around with gear and a few extra restores on tough fights — again, costing more time.  By the end, I was almost desperate to finish the game, as like Zeno’s Paradox the finale always seemed reachable, but each individual step towards it only got me partway there.  When it was over, I was pleased to be done, and impressed with the excellent main plot arc and the incredible detail in terms of allowing meaningful player choice.  But I was also sick of playing it, and almost resentful of it for refusing to let my mind go.

Dragon Age was a hard master, and I’d finally won free.  I wasn’t going to stick around to give it another shot at me.

I’m going to cover the branching plot and analyze the conversational model of this game in an upcoming post that focuses more on the craft of building these types of games and the lessons we can take when writing interactive fiction.  In this review I’ll just cover the game itself.  There will be some plot spoilers, so if you don’t want the backstory and a bit of the plot spoiled, it’s probably best to stop here.

There are six separate openings, which you can play depending on which race and class you chose, and what background you want your character to have.  Each of the openings is about two or three hours long, completely separate from the others, and sets you up with contacts, history, and a place in the story that is unique.  Depending on which opening you play, other options open up for you throughout the game.  Someone that you wouldn’t know from any random passerby if you played the City Elf opening turns out to be your renegade blood mage friend if you played the mage opening.

The continent of Thedas is recognizable if you’ve ever read any of the myriad Tolkein-rooted Western fantasy series.  The game takes place in the nation of Ferelden, a relatively recent political construct wrested from the domination of the Orlesian Empire by a popular king and his friend and general, Teyrn Loghain.  Despite its brief current incarnation as a kingdom, Ferelden has a long and storied history that is revealed piecemeal as you travel the lands.

The social structure is feudal, similar to medieval Britain.  The king nominally rules over the whole land, but vassals administer the actual holdings.  The majority of these nobles are known as “banns” — the equivalent of “barons”.  Particularly exalted banns are known as “arls”, and the top rank of the nobility are the “teyrns” — analogous to dukes, or more accurately the sovereign princes of the Holy Roman Empire.

Actually, the comparison to the Holy Roman Empire is fairly apt, as the church is a major force in Ferelden as well.  In this game, it’s known as the Chantry, and consists of priestesses of the prophetess Andraste, the Beloved of the Maker, and their militant arm of Templars.  Templars are warriors trained to fight rogue mages, known as maleficarum.  They also serve as protectors of Chantry property and personnel, and as somewhere between guardians and jailers for the approved mage circles.  No one trusts the wizards after the tyranny of the magister lords of the old Tevinter Imperium, and Chantry policy in Ferelden and nearby lands since that time has been to lock down all mages until they have proven themselves able to resist demonic corruption.

There’s a very noticeable Gnostic influence at play in the depiction of the Chantry; the Maker is presented as capricious and almost petulant, an aloof and grudge-holding god who seems to expect the worst of the world he created.

Humans are the dominant race in Thedas, having destroyed the ancient elven culture centuries ago.  Elves now either roam the wilderness, trying to avoid human encroachment, or live as an underclass in “alienages” in major cities.  Dwarves exist as well, although their great subterranean civilization has dwindled to the single city of Orzammar under the constant onslaught of the darkspawn.

Oh, yes, the darkspawn.  How could I forget?  The darkspawn usually roam the Deep Roads — the abandoned underground highways and outposts of the dwarves.  Every few centuries, however, they find… something buried in the earth, and awaken it.  These paragons of evil become archdemons, forge the mindless darkspawn hordes into legions of evil, and lead them onto the surface to wreak havok on the kingdoms of men in an event known on the surface as a Blight.

In Dragon Age, regardless of which origin story you play, you end up becoming a Grey Warden — one of an elite group of warriors dedicated to fighting darkspawn and ending Blights.  And just as you become one, all the other Wardens in Ferelden but one get themselves killed.  So it’s up to you to secure allies, figure out what’s going on, try your hand at politics and intrigue, and eventually put an end to the archdemon and end the Blight.

That’s the 10,000 foot view of the plot.  The actual game is played out through a series of interlocking quests, seasoned with cut scenes and extensive dialogue.  There is plenty of combat, and they’ve done a good job implementing it, but what really makes the game shine is the setting, the writing, the structure of the plot, and the interactions between you and the other characters in your party.

As you travel around, the characters in your party will have conversations among themselves.  These are generally short exchanges unconnected to surrounding events, and appear to be triggered at certain geographical points.  You can also initiate conversation with your party members at any time, although certain topics (and the romantic subplots) can only be pursued in camp.  You can find out a great deal about the backstory of the characters by talking to them, but often you can only get them to really open up if they trust you, which involves impressing them in conversation or with your actions when they are accompanying you.

I chose to travel with: Morrigan, an amoral sorceress from the Korcari Wilds; Alistair, a templar, the other Ferelden Grey Warden and secret bastard son of old King Maric; and Leliana, an Orlesian lay sister of the Chantry and sneak thief.  The writers did a pretty good job with these characters — although they have distinct personalities (approaching caricatures at times) there is a bit of subtlety in the changes in the way they react to you over the course of the game.  For the most part, their attitudes seem consistent with their backstories, and the writing and voice acting flows well.  There was a wide selection of other potential party members, many of which I acquired but never traveled with.  They ended up relegated to spots in camp, where I could talk to them but little else.

It was really the NPC interactions that drove the game forward, and here they did a very good job.  There were very few “FedEx”-style quests involving delivering items from one place to another.  There were a larger number of “kill” quests where someone wanted you to take care of some sort of problem, from protecting them to eliminating competition, but there was almost always a compelling rationale provided for your actions, and you could usually get to the solution in multiple ways.

This is particularly true for the main plot quests.  There were always major choices to be made that could have serious ramifications in the future.  Ally with the elves or the werewolves?  Mages or templars?  A choice here could not only affect the ending of that particular quest segment, it could affect options available in the next segment, and change the disposition of troops available to you at the endgame.

And speaking of the endgame, the sheer number of ways the denouement can play out based on the choices you’ve made throughout the game is just crazy.  Who rules Ferelden (there are about 5 different possibilities here)?  What becomes of Loghain?  Does the main character even live?  Not only do you get to talk to each of the major characters at the end of the game to get a debriefing on their status, but at the very end you get an epilogue summary for each character that lets you know what became of them.

It’s a fantastic, deep game, one that I’d strongly recommend for folks with a taste for dark heroic fantasy and some time to burn.

Tags:

The Quern is Digg proof thanks to caching by WP Super Cache