Friday, February 6, 2009

Project Report: TourGuide

I started TourGuide in April of 2006, when we were all leveling our second and third (and in my case fourth and fifth) characters to 60 in WoW, and someone (I think it was K--) stumbled across a fantastic questing guide by Jame of WoW-Pro. It included a step-by-step process to get your character from 30 to 60, and made sure you visited every corner of the world and completed all the most interesting quests along the way. Not only did his guide encourage you to explore areas and participate in storylines you'd probably never experienced before, it did that in a much more efficient way than anything any of us had come up with on our own.

So we all started following the guide when leveling our alts, but it became something of a pain to Alt-Tab every time we needed to know where to go next (and something of an expense to print out so many pages), so I found a way to bring that information into WoW.

First, I converted every direction in the guide into distinct steps, then I narrowed those steps down into a small set of types ("Go to," "Get Quest from NPC," "Complete Quest," "Turn in Quest to NPC," "Turn in Quest and Get Follow-up" and a few more). I copied these into an Excel spreadsheet, going through the original guide line by line, and reformatting everything he said by hand into this spreadsheet.

Once that was done, I saved the spreadsheet to a CSV file (computer-readable text file, basically) and then used a Python script to read it in, and write it back out as a LUA file that just constructed a massive table containing all of the steps, in a form that a WoW Addon could use.

Python is the scripting language I use most, but WoW Addons use a different scripting language called LUA. So here, in this one project, I'm hand-coding an English web-page into a pseudocode spreadsheet, then using one scripting language to convert the contents of that spreadsheet into code for a different scripting language, which will be interpreted by WoW.

Oh, and then I had to display it in WoW somehow. For that, I wrote the actual Addon, using LUA and XML (for GUI elements and layout). I finally settled on a pretty simple frame in-game, that showed the current step you're on (with all the code translated back into English), as well as where the guide thinks you ought to be, where your hearthstone should be set, what level you should be, and some buttons so you can move forward or backward through the guide. And then the Addon had to save all of that information, separately for each character, so that when you log out and log back in you still know where to go and what to do.

As I said, I started on this back in 2006, and when the Burning Crusade expansion came out, it completely broke the Addon, as well as adding new zones so that the 30-60 guide wasn't really all that useful anymore (we all had a handful of 60s by then, and everyone wanted a guide to get them from 60-70). So I spent a couple months getting it working again and incorporating the new content.

Well, that's why I'm talking about a three-year-old project here in this post. In November, the second expansion to the game came out, Wrath of the Lich King, and it did the same things to my Addon all over again -- broke its functionality, and obsolescenced its content. So I spent some time getting it working again in November and December, including adding some new functionality. It now presents the most recent informational Note in addition to the text of the Step you're currently on, so your step might say, "Go to the Emerald Dragonshrine, Dragonblight (45, 27)" which is a long run to the northwest, but right below that is a copy of the recent step which said, "As you run to the northwest, kill all the Kobolds you see along the way." That's a more common scenario than you might imagine. (Also, I completely made up those coords for the Emerald Dragonshrine -- don't hold me to them).

I have currently updated the content up through the fourth out of seven or eight zones, but had to stop there because the guy who writes my guides hasn't gotten beyond that. It's kind of frustrating. Anyway, it's still an active project, as I'll start working on new spreadsheets as soon as he releases the next installment of his guide, but I'm pretty happy with the UI right now, so that's probably all I'll be doing. I haven't really done any new work on TourGuide since early January.

Status: Stable, v. 3.0

No comments:

Post a Comment