WorldMaker.netBlog

Blog

KeyLimePie Visual Novel Engine and the Deceptive Power of Simplicity

6 hours, 51 minutes ago

I've mentioned briefly on twitter my attempt to write a game or two in the "Visual Novel" format [1]. It's an easier to write genre than IF, as much as I love IF, and a more interesting genre than just a CYOA. The art requirements are generally a bit kinder if I try to explain them to any interested artists than the traditional adventure game (fewer animations, no walk cycles, ...).

I've smashed this in with my desire to play with writing Mass Effect-like 2D conversations. I realized that a single 2D "compass" menu makes a lot of sense as the driving focus for a Visual Novel game. In particular, it gives more of an IF-like "map directions" relationship to locations, albeit with an even more visual Pie menu chooser.

I think its safe to announce the engine I've been writing, the Keystone Literary Menu Pie (abbrev. KeyLimePie), named of course for the Pie Menu that is the keystone in the engine. If anyone is actually interested, I am planning to release it as Open Source as it comes closer to completion (which should be soon, I expect). I'm focussing on cross-platform, browser-based Silverlight (with IronPython magic!) for the main player engine, which means I will be testing it in Moonlight as well (but I don't expect any difficulties; Moonlight rocks). I've also been building some editing/development tools against normal CPython. (It will be easy to port the engine to non-Silverlight platforms, which are in my mind primarily iPhone and Android. I could see writing a pygame engine as an excuse to better learn pygame, and because that would also be really easy.)

(I guess I should note that I'm not actually announcing any games that I'll be writing for ...

Game of the Moment: Mass Effect 2

6 days, 13 hours ago

I feel the Mass Effect team is slowly stumbling in the direction of using game mechanics that best fit the story being told. It is fascinating to watch them do so from such a different direction from my own. I was raised, to an extent, by Tim Schaefer's experiments in this direction and Double Fine is certainly the model for me in terms of choosing game mechanics that fit a world. It is silly that gaming has named its genres after collections of mechanics and systems, with the boxing constraints that entails, rather than after anything more meaningful.

Mass Effect comes from a pinnacle of Western RPG orthodoxy. I respect the talent and skill represented in Bioware's catalog. I've bought many of their games over the years, and yet Mass Effect games are thus far the only ones I've beaten. I even beat them in back to back marathons, an altar offering to a gaming god as yet unnamed that gives me some small recharge in my interest in possibly working in the industry. (Hire me.)

As someone else pointed out, it has been useful to throw Dragon Age into the mix for added perspective. Dragon Age is very much somewhere near the apex of the orthodox western RPG. It's a fascinating collection of systems, certainly, but one that more often than not distances me from the games.

Mass Effect, the first, pared down the required systems, and Mass Effect 2 only continues the surgery, trying to focus on the meaningful stories and necessary systems. It's a fascinating progression that belies the traditional nature of game sequels as generally more complex over time. Mass Effect 2 is easily my favorite Bioware game to date, given how much it throws out and re-evaluates as much ...

On Open Source Avatar Systems

2 weeks ago

I've mentioned before how important I think it might be to get "open source game cities" of the GTA sort available for use in many different kinds of projects...

Just recently I've been thinking more about a similar need for "open source avatar systems". It's easy to see that avatars have become nearly ubiquitous, particularly with Microsoft's, PS Home's, and Wii's avatars all used to varying degrees across multiple game projects. (Of the three, Microsoft's being the most accessible to independent development via the XNA platform.) Character creators and character customization can be a key differentiator today between big RPGs and the little guys. Even 2D games have customizable and reusable avatars beginning to be more common.

I think that a collaborative, highly customizable avatar system would be hugely useful if it were open source and available as a relatively easy API to embed into nearly any independent or open source game. Add in even basic sharing of avatars between games, and easy to use customization tools for both in-game player-oriented customization and out-of-game NPC development, and you could easily find a tool that many, many people would heartily use.

Of course, the blocking factor may not even be the technology so much as the art. Good customizable 3D avatars require complicated deformable models that I expect require a lot of smart tweaking from smart artists to get a good, wide, range of possibilities. That's before you start trying to build clothes and accessories that similarly fit the wide range of possibilities... 2D avatar systems are nearly as art intensive, as well I'm sure.

I started wondering if Second Life could at least provide some or all of an open source 3D avatar system. It seems like a decent place to ...

On The Tactics of Morality in Dragon Age

2 weeks, 5 days ago

I'm coming into Dragon Age: Origins after a replay of Mass Effect, with Mass Effect 2 clearly on the horizon, so expect more than a few Mass Effect comparisons. Plus, Mass Effect thus far is the only Bioware RPG I've managed to complete a playthrough (with a record of two, now).

I appreciate Dragon Age's use of relative morality over the dualism models that have become fairly standard. The morality of a given choice is primarily determined by the reactions of whichever companions you brought with you to witness them. It fits a world that is full of many shades of gray on the morality spectrum (including the central Gray Wardens).

In practice, however, I find the control of this as a system somewhat opaque and aggravating, particularly within the larger context of the game as a whole. Firstly, there are the obvious complexities from moving from a 2-Bar morality system (as in Mass Effect's Paragon and Renegade counters) to an N-Bar system. Where Mass Effect can (smartly) use the vertical axis of its conversation wheel in rough correspondence with the Paragon/Renegade decision, Dragon Age has no such shorthand. (On the other hand, it would be nice if Dragon Age had at least found some replication for Mass Effect's use of the horizontal axis. But that's a whole other topic of discussion.)

What frustrates me most, however, is the dissonance between the work put into combat tactics systems compared to the lack of equivalents in morality and conversation tactics. Certainly this is nothing new in the world of RPGs, but Dragon Age seems to especially make it more obvious and harder to swallow (particularly as I start to read FAQs/wikis to see the fragility of decisions easily accidentally made). Before even getting ...

The HCE Bee

1 month ago

I've introduced the "Bee" choreographer bot for playing HoneyComb Engine games by Wave, Email, or IM before. However, this is probably closer to the official "launch" of the bot: all three front ends (Wave, Email and IM) are now available and should now work (knock on wood). I've finally setup the code site for the bot, and the full darcs repository is now available for perusal as open source under the Microsoft Reciprocal License:

http://hce-bee.code.worldmaker.net/

I'm hosting the main instance of the bot, and I encourage people to use it as I can most easily watch its logs to help fix bugs. If anyone does find interesting reasons to fork the bot, I'd love to hear them.

I'll be rewriting this into the issues log of the repository/code site in the near future, but for those that want a brief overview of my agenda going forward:

  • More visual elements, particularly displays for the LifeWheel and maps
  • More Channel moderation tools, including archiving games and basic security tools such as a whitelist
  • Update the game mechanics to the most recent HCE edition, particularly the new Heroic Actions
  • Audit the game mechanics for missing checks and remaining TODOs.
  • Finish support for defensive actions
  • Update the language documentation to better reflect the implemented game mechanics
  • Determine the best approach to support additional "dialects" where HCE elements/influences/et al can take on more domain-appropriate names for individual games (such as "sanity" for "ego" in a lovecraftian setting)
  • Test, test, test

Obviously there is plenty left to do, so any interest in helping me better prioritize these features for real player scenarios or even collaborating on features is welcome. I'm also interested in exploring opportunities for "commercial support", but don't have any ...

Further Adventures with Token Stream Diffs

1 month ago

I've taken, with a tiny bit of prodding, the Token Stream Diffs Using Pygments from toy to a nascent toolchain that may even almost be useful.

I've brought in two new dependencies Google diff-match-patch and, for nice argument parsing, argparse. The diff-match-patch library provides a character-based diff algorithm and patch format (a character-based unidiff-like format with character escaping) in a number of languages, including my friend Python. I can use diff-match-patch to produce useful patch output (and apply said patches with a simple new tokpatch.py file that is but a wrapper around diff-match-patch patching).

tokdiff.py has grown three new output formats. The original "toy" format I've renamed "verbose" and its quite interesting for debugging and getting an idea of why diffs look the way they do. Most useful, and the new default, is the unidiff-like output. There's also diff-match-patch's much more compact tab-delimited "delta" format, which is interesting, but I don't think is all that safe. (It's an undocumented, outside of the code itself, feature...)

The final output format is the "compare" which outputs some pretty HTML visually showing the differences between the tokenized diff approach and diff-match-patch's standard character-based diff, plus some basic benchmarking of the two algorithms.

Both tools and both dependencies can be grabbed from the darcs repository:

darcs get http://repos.worldmaker.net/tokdiff/main tokdiff

I'll consider putting together a deeper code site for it in the near future.

Some brief observations and thoughts for future directions:

  • I shouldn't be too surprised by it, but the tokenized diff does generally seem to be an order of magnitude faster than diff-match-patch's more generalized character-based diff algorithm.
  • I think there are still some interesting heuristics that can be further applied to make the tokenized ...

On Free Realms' December Combat Update

1 month, 3 weeks ago

I'm certainly amused about the hypocrisy I'm about to unleash. I've criticized hardcore players at times for complaining about nerfs that only they seem to care about. As a midcore player of moderate skill, I find it fascinating that Free Realms managed to turn the tables on me. Now I get to play the role of the crotchety person that dislikes recent MMO changes.

For Free Realms, December's update brought a large number of changes. One big swath of which was a full front-to-back combat reform. I can see what the developers where trying with the update and the casual, very young, ADD audience they've always seemed to be targeting. To some extent I believe they have succeeded, but I've never been in that weird demographic they want so I'm probably a poor judge here. On the other hand, as someone that "beat" almost every aspect to the combat system that was, I don't think the combat update was much of a progression towards anything of interest.

I feel even more hypocritical in defending the previous combat system. It was a a by-the-numbers "lite" version of MMO's D&D and Diku-derived traditional combat systems. I complained about its grind, and wondered aloud if perhaps they couldn't have found a more original formula somewhere... But it did its job service-ably and if they had just reduced the number of classes (another Diku-ism I find odd: quantity of classes over quality) or increased the number of experience-giving quests or even just increased the speed of experience then the grind wouldn't have felt as onerous (to those OCD enough to wish to max level all of the classes, at least).

The new system focuses on zerg rushes of mobs and obvious spawners ...

I've Been Thinking of it Lately as a Year in Exile

1 month, 3 weeks ago

I've been thinking that I'm plus or minus a few days from one graduation milestone anniversary or another. I certainly expected to be in a different place than I am a year out from my graduation... We'll see where the next year takes me.

Late Show of the Moment: Late Night with Jimmy Fallon

1 month, 3 weeks ago

Several months after NBC's shake-up of their late night show line-up, the show that has really grown on me is Late Night with Jimmy Fallon. I enjoyed Conan from time to time in his old slot, but his new show conflicts with Colbert and my loyalties, as a long time Daily Show stalwart at this point, are obviously with "the nation"...

I'll admit that I actually enjoyed some of Fallon's tenure on SNL, but I did think that he didn't have as much talent as some of the others in that show's illustrious history. Certainly, I thought his attempt at a movie career was a bad idea. Fair to say that I wasn't enthusiastic about the idea of him hosting a late night show, but I also wasn't that skeptical.

Hulu and a few choice guests encouraged me to catch the show, and I've been slowly becoming more hooked. The show excels when Jimmy Fallon's sense of childish, nerdy humor is on full display. Fallon is obviously a fan of video games, and his attempts at covering game releases as if they were big movie releases have been well appreciated. Fallon also is sometimes at his most relaxed and funny when behind a older, fatter style of microphone, reminiscent of the one that Bob Barker seemingly refused to relinquish, that he brings out for silly recurring mini-games.

As Jimmy Fallon gets into the rhythm of doing the show every night and shirks his initial nervousness, the show gains strength. Fallon can make excellent use of his SNL talents, including some of his better impressions, and unlike SNL it is even more likely that a break in character is more helpful than hurtful in the talk show format.

What really makes the ...

Wave Annotation Markup "Language"

2 months ago

This is another itch I needed scratched while working on the HCE bot (which is in alpha testing on Wave). In this case I was butting heads with the API provided by Google Wave for Python, which has provided no end of complaints from me. The poor documentation and brutal "let's just do a rough conversion of the Java API" nature of it haven't helped.

Anyway, I wanted the ability to write rich markup in a friendly neighborhood Django Template (just as I use for the bot's HTML output). The Wave API has a method to append a very anemic subset of HTML, which doesn't come anywhere close to a 1-to-1 correlation with the markup model used on the wire by Wave.

What I'm about to post is a technological turducken: my Wave Annotation Markup "Language" here uses Django templates to render YAML documents (the data structure of which is then used to make API calls that in turn get boiled down into "ops" in Wave's ugly Java-infused "JSON RPC" dialect). But it seems to work, mostly, and that was the point.

I refused to get much closer to the API metal and work inside its innards because I was afraid I'd be too tempted to gut the whole thing and start from scratch to make it all more Pythonic. I'd prefer to get a paycheck from someone to do that sort of thing, before resorting to that. (Hire me!)

Here's the latest version, as of this post, of my "waml" tool, while I continue to procrastinate uploading the entire HCE bot repository:

# Simple, stupid Wave Annotation Markup
# Copyright 2009 Max Battcher. Licensed for use under the Ms-PL.
from google.appengine.ext.webapp import template
from waveapi.document import FormElement, Gadget ...

Simple App Engine JSON Serialization Snippet

2 months ago

I wanted a simple way to easily output JSON for a couple of AppEngine models. A brief search didn't turn up a snippet that looked like what I was looking for, so I wrote this simple module that I call gaejson.py:

# Simple GAE Model JSON Serialization
# Copyright 2009 Max Battcher. Licensed for use under the Ms-PL.
from django.utils import simplejson as json
from google.appengine.ext import db

class GaeEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, db.Model):
            return dict([(name, getattr(obj, name)) for name
                in obj.properties().keys()])
        return super(self, GaeEncoder).default(obj)

# vim: ai et ts=4 sts=4 sw=4

Usage is simple:

from gaejson import GaeEncoder, json
from mymodels import TestModel

test = TestModel.get(... some db key ...)
json.dumps(test, cls=GaeEncoder)

An HCE Bot Sandwich with a Chewy Slab of Bathos

2 months, 2 weeks ago

The short story is that this week I relieved some stress and helped relieve some creative blockage by jumping headlong into over-thinking and over-working a new project. I'm working on a "Choreographer bot" for playing games with Corvus Elrod's HoneyComb Engine online via wave, email, and IM. I've got a command language parser written (and I think very well tested at this point) and written up documentation for said parser, which currently assumes familiarity with the HCE. I'll post the source code eventually.

I've hesitated to blog it, but most of the longer story should be familiar by now: I'm running on borrowed passion at this point; this year has been a huge kick to the groin for me. As is the case with many works that involve groin kicks, this post may be dark at times, but I'm trying to keep it on the side of dark humour or at least slapstick. I, at least, find the occasional bathetic introspection useful to get out of the system. If you want to invest your sympathy in "Ego credits", may I suggest applying extra funds to Deirdra's Life Flashes By project. Also, I wouldn't be opposed to gifts arriving in my Steam account or PayPal account, not that I expect any this year... I of course still continue daily my shingle hanging and search for gainful employment as a measure of my worth in society, should rumours of such reach little birdies in y'alls ears. If anyone has any ideas on bankrolling a good Relocation Fund, that might be useful, too.

I'm used to being my own worst critic. I've grown up very familiar with the adage that familiarity breeds contempt, and I've seen myself grow angry at ...

Blogs of the Round Table: The Ending Has Not Yet Been Written

3 months, 3 weeks ago

October's topic is on the subject of the denouement in gaming. Already the round table has provided somewhat clear calls to action that more and better denouements are needed in games, and provided good examples of both good and bad denouements. As is my temperament, I'm inclined to play devil's advocate and provide voice to the underrepresented sides of the argument (regardless to my own opinions on the deeper subject matter). On this matter I've decided to discuss whether or not the traditional story-telling arc's resolution/denouement applies to games at all...

The ending has not yet been written.

You probably don't need much help from me to hear those words in a specific voice from a specific game introduction. Sometimes this sentence fragment from Myst is a cliche and sometimes this sentence fragment is a mantra. Given the Myst game was an experiment, a baby step towards richer storytelling by a company that had developed up to that point talent in ambience and worldbuilding, but not storytelling, I can't help but think of that line as lampshade hanging as well.

Myst, arguably, left the majority of its resolution to its sequels and books. Much of the interpretation and larger storytelling of Myst is delegated to the player, and thus to communal storytellers spread across fora and mailing lists.

It is certainly easy to describe this as the norm for storytelling in games. The Halo series barely has patience to provide useful briefings to players, it shouldn't come as a surprising that it basically skips debriefings. The games survive on the pace of the action and the pretty scenery is rarely more evocative than "pretty" for most players. There are, however, those people that seek out the written fiction that flesh out ...

Blogs of the Round Table: Spatio-Temporal Navigation

4 months, 1 week ago

September's Topic

Isn't that spatial?

I was at first apprehensive that my base assertion for this month's round table was perhaps a bit of a stretch given the open topic, but my motive is to push into a larger topic, whose larger, crazier assertion I will bury at the end of this post.

However, I'm thankful that a few of this month's contributors have wonderfully set the stage for my assertion this month: the only mechanisms that games have to explore the temporal aspects of games are spatial in nature. The course of "time" across a game is indelibly intertwined with the traversal of space.

Narrative influences affect the space of game. More often than not this can be seen as opening up new spaces to explore, or providing new reasons to re-explore existing spaces in new forms. (In the easy case, as most FPS games provide, the narrative and space are integrally intertwined and in fact the current design strategy of choice for FPSes is that the spaces themselves should tell the story. I don't think it is far to extrapolate from the FPS to more complicated narrative forms that there still exists a deep, inherent connection between the spaces of the game and the narrative of the game.)

It is increasingly rare that players are not offered maps, guides, and various sorts of route finders across the standard two and three dimensions of spatial travel. I find it fascinating that there are very few similar tools for mapping a player's path through narrative spaces and world configurations. At this point the sole tool at the disposal of the player, in most games, for both narrative mapping and narrative traversal is the venerable, but aging "save game".

In terms of tracing a ...

Creating In-Game Awards Part 3: Getting In-Game Awards Production Ready

4 months, 2 weeks ago

In Part 1 Nick Gravelyn introduced a simple framework for displaying award notifications in an XNA game. In Part 2 Daniel Hanson improves upon the award notifications adding in simple progress notification support and simple support for multiple gamer profiles.

The Updated Awards Demo

This article further improves upon the award notifications by better following some XNA best practices, making the notifications more configurable, more reusable, and more animated. The updated AwardsDemo application includes the full darcs source code repository of the changes with respect to the version presented in Part 2. This article will mostly follow the repository's changes in chronological order and you are welcome to follow along. [1] With basic source control skills you can even attempt to cherry-pick some or part of the changes made to get a customized version of the code.

(It is always a good idea to get into the habit of using a source control system that you trust, even on the smallest projects.)

Best Practice: Resource Strings

In the AwardsDemo for Parts 1 and 2 there were several strings that were left as constants at the top of source code files. This is an easily made faux pas that can easily come to haunt a project as it nears completion. It can be quite easy to forget where in a game's source code a particular phrase or text is located, making it harder to tune the output to its best and particularly making it much harder to translate the game into other languages.

Even if you don't plan on releasing your game in multiple languages, it is still handy ...

Colophon Copyright © 1999-2009 Max Battcher / WorldMaker. Some Rights Reserved. With our thoughts, we make our worlds.