[ Content | Sidebar ]

gls 2010: wednesday

June 9th, 2010

I’m at the Games, Learning, and Society conference for the rest of the week; here are my notes on today’s events.

I started the day by finally getting to meet Roger Travis in person! I’ve been hearing his disembodied voice weekly for ages now at the VGHVI gaming sessions that I feel like I know him rather well, but it was great to finally get to meet him in person! (Incidentally, I spent the previous evening hanging out with Jordan; great to see him where he’s now living, looking forward to seeing his family tomorrow.)

I then spent the rest of the morning at the Mobile Learning Summit. This was structured around coming up with a game idea; my table’s brainstorming sentence was: “create an engaging game about playing piano for parents in an artistic/social context”. (We ended up ditching the parent idea, though.)

And, after a fair amount of chatter, we ended up with a game idea, a sort of musical version of foursquare which we called Starter Culture Sounds. It’s location based; if you’re at a location, you can upload a snippet of music to that location. These pieces of music get classified (to detect similar themes, or even moods; we thought it might be cool to find a way to algorithmically merge them, though that sounded pretty hard to me), resulting in a visual representation of popular themes at that location. You can also vote for other people’s tunes, and upload edited version of people’s tunes; either of those actions increases the prominence of that theme in the visual classification. (Maybe those would feed into some sort of badges/achievement system, too.) Votes age over time. Once you’ve been to a place and contributed to hit (just voting is enough), you get a virtual mic that lets you later listen in on the music there. (But you can only contribute if you’re physically present.)

After that, Michael Abbott showed up; great to see him, as always! (A pity that Roger is on the East coast, Michael is in the middle of the country, and I’m on the West coast…) We went off to lunch, where Kurt Squire gave a keynote on Games and Education.

He started off talking about Sid Meier’s Pirates! as an educational game. Here, he mainly discussed the various short-, medium-, and long-term goals that the game gives you: for the first several hours, you always have something clear to do, enriching your understanding of the game’s mechanics, and eventually leading to more free-form experimentation with those mechanics.

He then moved on to social spaces: World of Warcraft and a discussion of MUDs, where a fifth grade teacher he knew had discovered kids in her class were participating in one, and she ended up joining (serving as a Jane Jacobs-style “watchful eye”) and incorporating this into the classroom work. (For example, kids produced versions of the Hundred-Acre Woods and of their school in the MUD.)

He wove these examples into a taxonomy of progression: controls -> basic knowledge -> systemic expertise -> tools/tinkering -> fundamental design, plus another branch systemic expertise -> social control of play.

He also presented a rubric for quality of games:

  • Interesting choices, good progression
  • Enable systemic understanding
  • Scope for transgression
  • Immersive possibilities
  • Room for socialization
  • Does it inspire creativity?
  • Smooth ramp from consumer to creator?
  • (One or two other things – he talks really fast…)

I only have sporadic notes for the rest. He listed some educational game genres: microworlds, linear action, role playing, open-ended sandbox, persistent worlds. He had an interesting discussion of Civilization as a learning tool, including the biases it has: management is good, technology is good, people will attack you for oil, geography is destiny. He said some nice things about Montessori, and showed bits from a cool game about saving the lake that students had made.

At 2pm, I went to a presentation about a game called WolfQuest. Which was billed as a “Chat and Frag”, but was a straight lecture; too bad. Still, the game sounded interesting enough – you play as a wolf trying to survive in Yellowstone. I’ll mention it to Miranda, maybe she’ll like it?

And at 3:30pm, I went to a talk about Unity. Which was also misleading: it was labeled as a workshop, but it was really just a straight talk. Or at least I think it was: I seem to be incapable of going to a conference without sleeping through one of the sessions, and that session was today’s choice.

After that I wandered around the poster session, and then had dinner with Michael and Roger. (Where I got to eat green jackfruit for the first time in almost 17 years; it continues to be very good stuff.) A lovely way to end the day.

100 years of the progressive

June 8th, 2010

Some quotes from the hundredth anniversary edition of The Progressive:

The income tax is the fairest and most equitable of the taxes. It is the one tax which approaches us in the hour of prosperity and departs in the hour of adversity. Certainly it will be conceded by all that the great expense of government is in the protection of property and of wealth. There is no possible argument founded in law or in morals why these protected interests should not bear their proportionate burden of government. —William E. Borah, July 17, 1909

Let the wage earner take heart. The eight-hour day will come, and come soon, to all the workers of every state in the nation. —Robert M. La Follette, July 19, 1913

Every nation has its war party. It is not the party of democracy. It is the party of autocracy. It seeks to dominate absolutely. It is commercial, imperialistic, ruthless. It tolerates no opposition. … In times of peace, the war party insists on making preparation for war. As soon as prepared for war, it insists on making war. If there is no sufficient reason for war, the war party will make war on one pretext, then invent another, possibly more effective, pretext after war is on. —Robert M. La Follette, June 1917

The moral conscience of the nation was deeply shocked when it learned from undisputed and admitted evidence that there had been spent in the Illinois and Pennsylvania primaries several millions of dollars in an effort to obtain nominations for candidates for the United States Senate. … The expenditure of such huge sums for seats in the United States Senate cannot be justified unless we desire to turn over that great legislative body to the multimillionaires of the country who are willing to buy legislation the same as though it were merchandise sold for cash to those who are willing and able to pay the price. If this practice is to be condoned then we have placed seats in the highest legislative assembly of the world upon the auction block, and we have, by indirection, defeated every fundamental principle that underlies our government. —George W. Norris, January 1927

Without authority from Congress, American Marines have been landed in Nicaragua. This armed invasion of a friendly republic and the support of the government of General Diáz are justified by the Coolidge Administration under the flimsy pretext of protecting American lives in Nicaragua. … It has undertaken that intervention on behalf of a government whose chief claim for support is its willingness to accept dictation from our State Department and the American business interests which seek to exploit Nicaragua. The inevitable result of this harsh, bullying, and unjustifiable action is to set the nations of South and Central America against us. —Robert La Follette Jr., January 1927

The progress of science in furnishing the Government with means of espionage is not likely to stop with wire-tapping. Ways may some day be developed by which the Government, without removing papers from secret drawers, can reproduce them in court, and by which it will be enabled to expose to a jury the most intimate occurrences of the home. —Justice Brandeis, quoted by Robert La Follette Jr., July 1928

We are face to face with another unemployment crisis in this country. More men are out of work than at any time since the depression of 1920. There has been no serious effort by this government to study the causes and possible cures. The United States is today the only important civilized country in the world which has failed to plan for or aid in the relief of unemployment. —Robert La Folette Jr., May 1928

It’s Not as Late as the War Party Thinks … No War with Japan —headlines from the December 6, 1941 issue

President Truman has announced that a single atomic bomb has been dumped on a Japanese city of 340,000, probably wiping it and most of its inhabitants off the blasted acres of the Earth. … The very stuff of God, then, molded into the hands Satan but used—oh, to be sure—in a righteous, a glorious cause, and all people of peace, goodwill, and kindliness should gloat and sing paeans on the edge of that enormous crater where tens of thousands of mangled bodies fester in the stench of death. Gloria in excelsis. —Ernest L. Meyer, August 20, 1945

The Soviet Union’s establishment of a nuclear striking force on the island of Cuba was an act of criminal irresponsibility. Soviet guilt is clear, but the judgment of history will not absolve the United States from blame. … Although we are people born of revolution, we are stridently impatient with other people’s revolution. … We have behaved, on occasion, as though we were omnipotent and could enforce a double-standard on the world, under which we regarded ourselves as free to ring the Soviet Union with military bases which we say are “defensive” and “precautionary” while regarding comparable Soviet moves as “offensive” and “provocative.” —Morris Rubin, November 1962

I went rummaging recently in America’s atomic bomb factory, expecting to find an alien world of tight-lipped, hard-shelled rightwing types. I was wrong on all counts. Instead of Dr. Strangelove, I found Mr. Clean. Rightwing? Not at all. They are the pillars of liberalism in many places where they work—articulate and active in Democratic Party politics, environmental protection, urban redevelopment, equal rights for women and minorities, and yes, even the peace movement. —Samuel H. Day Jr., October 1978

If anyone ever undertook a serious study, I suspect it would show that the most common occupational diseases of clerical workers do not stem from typing posture or photocopying fumes; rather, they would turn out to be the blinding headaches and digestive problems caused by years of swallowing anger, repressing normal human responses, becoming not just efficient workers but pleasant, efficient workers, smiling on schedule, speaking on cue. —Erwin Knoll, May 1979

The struggle to prevent nuclear war is, in an altogether unprecedented way, a struggle for spirit, heart, and mind. The intention to use the Bomb—most Americans would use it, in one circumstance or another—evidences a moral paralysis, a militarization of soul, a submission to violence as necessity, a bankruptcy of ethical option that amounts to slavishness. —Philip Berrigan, May 1981

Our government has declared a military victory in Iraq. As a patriot, I will not celebrate. I will mourn the dead—the American GIs, and also the Iraqi dead, of whom there have been many, many more. Those who died in the war did not die for their country. They died for their government. They died for Bush and Cheney and Rumsfeld. And yes, they died for the expansion of the American empire, for the political ambitions of the President. They died to cover up the theft of the nation’s wealth to pay for the machines of death. —Howard Zinn, June 2003

psychonauts

June 7th, 2010

For its most recent game, the Vintage Game Club returned to its Tim Schafer roots with Psychonauts. Which I was curiously ambivalent about: many people speak highly about it, but I hit 3D platformer fatigue fairly suddenly several years ago, and only one game has really managed to break through that.

Still, it’s a genre that I was once very fond of indeed; and I enjoyed noodling around the camp at the beginning. Not so much once I dove into the first level, though: it’s of the linear level school of 3D platformer design, and I’ve really never enjoyed those platformers as much as the more free-roaming ones. (With, of course, that same glorious exception; though, as I’ve claimed before, Super Mario Galaxy is its own unique beast in the taxonomy of platformers.) Moving from A to B was pleasant enough but rarely grabbed me; and the ridiculous numbers of items to collect got really old really fast.

So, fairly soon on, I was only playing it out of duty. But then, a strange thing happened: I got to the Milkman level, and it was wonderful. The psychological issues turned from a more-or-less arbitrary way to suggest design elements of the level into something that grabbed me unexpectedly; and the gameplay turned from a straight linear wander into something with a few more twists. And the same thing happened with the Actress level, and with the Board Gamer level.

And then, somehow, the magic went away just as suddenly as it appeared. I think it happened part way through the Board Gamer level for me: a combination of running into a bug, of getting overly seduced by collecting, and of not figuring out how to deal well with one of the enemies flipped the switch back to tedium for me. Where it stayed through the end of the game, alas.

So: what to make of the game? If I went back, would I find more to like in the earlier levels as well, would I see a magic that I didn’t notice before? Maybe, but I’m not convinced: too much of the game seems to me to be following genre conventions without really making a statement about why the game exists. Coming right on the heels of playing Another World, Psychonauts doesn’t have more than a fraction of the clarity of purpose of that game, of its uncompromising attitude to waste.

To be sure, I don’t want every game to be as spare as Another World—but what I do want is for more games to ask the question of what purpose their design choices serve, and for the answer not to be an uncritical acceptance of genre conventions. (A critical acceptance is great, though: many genre conventions have evolved because they work rather well!) Perhaps Killer 7 is a more interesting model; that game took genre conventions that I’m even less interested in but treated them so roughly as to make it clear that they were only the barest of scaffolding, all the while animating them with a vision the likes of which I’d never seen before. There were glimpses of that here, but never as bright or as sustained.

tdd and javascript

June 5th, 2010

As I mentioned earlier, I’ve been having a lot of fun at work playing around with JavaScript and CSS. But there is one area where I’ve been failing miserably: for the first time in years, I’m writing very few tests while programming.

I’m working on a legacy code base, with all that entails, but that hasn’t stopped me in the past. So why am I not writing as many tests this time? For that matter, is it possible that it’s correct for me to not be writing so many tests?

There is, I think, a good reason for some of this. A lot of what I’m doing is arranging graphical elements so they look good on screen. And tests wouldn’t help with that: they’re great for getting logic right, but with presentation, all they’d do is pin down unimportant details. So if I later decide that a margin should be seven pixels wide instead of five, having a test would be pure overhead. (Incidentally, placing images properly is another thing that I’m surprised how much I enjoy—I really like participating in a process that leads to a much better-looking page, even though the art team is doing most of the hard work.)

But some of my lack of testing stems from unfamiliarity with unit testing in JavaScript. I’d done my due diligence, and decided that JsTestDriver is a pretty good unit testing framework: it lets me kick off unit tests in multiple browsers simultaneously from the command line, so I can make sure my code runs in production environments while not having to leave my IDE.

So I wrote a few JsTestDriver tests as a proof of concept. At which point I ran into my first roadblock: without trying to do anything tricky, the first four tests that I wrote all failed in Internet Explorer! Which was useful information—I learned that querying CSS properties is not likely to give the results I expect in IE—but the functionality in question actually worked fine in IE, I was doing the querying to check results in tests, not as part of the product code.

Since then, I’ve written a few more unit tests, when I didn’t understand why a piece of JavaScript logic wasn’t doing what I expected, and it has saved me time on those occasions. But I haven’t even begun to get into a good TDD rhythm at work.

So I decided to experiment at home to understand how much of this had to do with JavaScript, how much of it had to do with my ignorance, how much of it had to do with the kind of layout-heavy work that I’d been doing, how much had to do with legacy code, how much had to do with Internet Explorer. (Which I’m certainly not worrying about at home!) Specifically, I wrote an animation of moving boxes; there’s enough layout in that code for it to not be too unrepresentative of front-end work, but it’s also not about getting images positioned in the most attractive locations. (In fact, there aren’t any images at all, as will be obvious if you take a look; none of this new HTML5 stuff, either, the animation is all done by manipulating CSS positions and dimensions on a timer.)

The good news: I could, indeed, get into a TDD rhythm. Looking at the code right now, I have 374 lines of product code and 294 lines of test code; that amount of test code looks a little small (or, actually, given what the animation does, that amount of product code looks a little high…), but it’s not a ridiculously low proportion of test code.

More good news: a couple of nice generic abstractions popped out of the code as I was writing it (including one which got better as I added more functionality), and there are a few more abstractions that are specific to the animation that are waiting to be teased out of it. So it’s helped me improve my feel for good JavaScript code. (Though I certainly have a ways to go there…)

Indifferent news: I’m still not sure that all the tests are really getting at the core of what I’m doing. A fair amount of the thought in the programming exercise involved fiddling with CSS classes and creating HTML elements to give the illusion that you have a single box that is stacked up, then moving, then entering the stack again, while behind the scenes there are actually two HTML elements involved. (One positioned in the normal document flow, one positioned absolutely.) And the tests for that part of the code have too little to do with the desired visual effect and too much to do with implementation details. (Though not my all unit tests involving animations were bad: e.g. the unit tests for the movement of the element once I’d lifted it out of the normal document flow were perfectly reasonable.)

And then the bad news: I’m used to unit tests that run in isolation and that I can feel confident are testing something. (Though, being a fallible programmer, they may not always be testing what I intend!) And, it turns out, JsTestDriver fails on both counts. (I don’t actually think that’s JsTestDriver’s fault, I think it has more to do with the way JavaScript implementations work.)

I typically was running my tests in both Safari and Firefox. And, on more than one occasion, a test would just fail repeatedly in one of the browsers, for no apparent reason. The first couple of times this happened, I would curse the lack of cross-browser compatibility, check that the product code behaved as I expected, and reluctantly proceed. But then I noticed that, if I actually killed the browser where the tests were passing and restarted it, then the tests would start working again! So it seems to be the case that it’s rather difficult for JsTestDriver to completely wipe out its state from test run to test run. (I’m not sure if I tested just closing the window where JsTestDriver was running instead of exiting the browser completely; so maybe unit test frameworks where you have to manually reload a page in every browser each run wouldn’t suffer from this problem.)

Worse, there were times where I would make a syntax error and a whole suite of tests would silently stop running in one (or both?) of the browsers. That’s really disturbing: I expect my code to either try to run or give me some indication that it might not be running, but that didn’t always happen. I wasn’t in the habit of having Firebug open in the web browser to see if I get errors there; next time this happens, I’ll do that, but I shouldn’t have to, given that many JavaScript errors did make it out to the command line where I was invoking JsTestDriver. I’ve never had something like this happen to me before: I could chalk it up to dynamic language weirdness, but Ruby is pretty permissive and I’ve never seen anything like that in my Ruby tests.

An interesting experience; I definitely want to spend more time playing around with JavaScript at home. (Anybody have JavaScript code they want me to write?) I’m less sure how I’ll apply this at work; though certainly, when I look for smaller classes to extract, I should make them testable and actually add tests for them. But I’m having enough fun (and being useful enough) working on presentation issues that I’m not going to stress if I don’t spend a lot of time doing that.


James Shore has also blogged recently about his experiences with test-driving JavaScript. And, though he was using a different unit testing framework (QUnit instead of JsTestDriver), he ran into the same problem that I did of tests silently failing to run. (His reaction: “The mind boggles.”)

random links: june 2, 2010

June 2nd, 2010

1000 posts

June 1st, 2010

My WordPress dashboard tells me that this is my thousandth blog post. Which I find hard to believe; going through the archives, however, it really is true. I’ve been blogging for 2084 days, so I’m averaging almost a post every other day; I’m not managing that rate any more, but weeks when I do three posts are still not rare, and a few years ago I was rather more prolific.

Thanks to all of you for reading! Who knows, maybe after a few thousand more posts I’ll have figured this blogging thing out…

javascript and css

May 31st, 2010

I transitioned to a game team at work a couple of months ago. One of the reasons why I chose that particular team was that they were willing to let me do front end work, despite my lack of experience in that realm; this excited me because I figured I’d learn more that way than doing back end work. Also, I’m working on one of our older games; most of our new games have Flash front ends, but this game’s front end is in JavaScript, so working on this game does double-duty in that it helps fill in a notable gap in my programming experience.

So: JavaScript. It’s pretty cool. I’m glad to be working in a scripting language, I’m glad to be working in a dynamic language. I can’t say I’ve developed particularly good JavaScript style yet: in particular, the prototype-based inheritance model opens up a wider range of choices than I’m used to, choices where I don’t see a compelling reason to follow one path or another. I’m hoping that that will gel more; in the mean time, every once in a while I write some code that involves the fact that methods are properties just like any other, letting me do some cool code modification that I wouldn’t be able to do as easily in most other languages that I’m familiar with. (Though I suppose most of the time when I’m doing that it has a sort of Ruby monkeypatching feel.) And, given a desire to do that, a prototype-based system makes a fair amount of sense. I’m also not entirely sure how to react to member variables being public; for now, though, I’m just going with the flow and using that when it makes my life simpler, rather than being scrupulous about adding getters when I don’t need them or using closures to hide member variables entirely.

So, fun stuff; this doesn’t mean that I’m completely in love with the language, however. It has a few flat-out bugs; the worst is that, if you’re in a method and create an anonymous function, then, inside that function, ‘this’ is bound to the function object instead of the object whose method you are evaluating, which is never the behavior you want. (For that matter, having to type ‘this.’ all the time isn’t too thrilling, either.) And, coming from Ruby, the built-in tools for working with collections are surprisingly weak; I’m glad that I have jQuery.each and jQuery.map to help me, but that should be built into the basic language. (It doesn’t help that the callback that jQuery.each wants has its arguments in the wrong order, either. Hmm, maybe I should be looking into Prototype more?)

Of course, front end work doesn’t just mean working with JavaScript: it means working with HTML and CSS. And what I’ve been completely surprised by is how much I’m liking CSS. Previously, CSS had struck me as a basically good but banal idea, without as many tools to help me not have to repeat myself as I’d like. But now I’m really getting into the concrete benefits of the CSS Zen approach, where identical HTML is getting styled in different ways based on the context.

This really hit home when I was reworking the game’s keepsakes/scrapbook interface. Both of those pages want to display collections of items; and, on both of those pages, we make a distinction between featured collections (with a green background) and regular collections (with a blue background), leaving us with four different contexts. What I ended up doing was writing a single function that will display all the items in the collection; but outside of the HTML generated by that function I put a div with a class saying whether the collection was regular or featured, and outside of that div I put another div saying whether I was on the keepsakes page or the scrapbook page.

So then I would write simple CSS rules that specified the parts of the layout that were identical in all four contexts: e.g. pictures had the same size no matter where you were. But I’d write two rules for the backdrop: if it was contained within the featured div, the backdrop should be green, while if it’s within the regular div, it should be blue. And there were some bits of the decoration (e.g. buttons beneath the items) that I didn’t want to show at all on the scrapbook page; I’d still generate the HTML for them, but I’d include appropriate CSS selectors to get it not to be displayed on the scrapbook.

All of this resulted in nice-looking JavaScript generating nice-looking HTML, with CSS rules being easy to figure out, and making it as easy as possible to get a consistent look. Way cool. I even found some nice CSS nested selector tricks to get help bubble images to appear when I hovered over items; unfortunately, when I tried that code on Internet Explorer, it completely failed to work, so I had to redo it using JavaScript.

(In general, I would be happy if I never had to think about Internet Explorer again. Unfortunately, that’s not realistic for me right now. (At least professionally; when I’m playing around with JavaScript at home, I don’t care!) Fortunately, nine out of ten times, IE 7 and 8 are happy to render my layout in the way I expect; and in three out of the four times when it doesn’t, I can find a workaround that doesn’t look too bad or mess up my code too much. But that last time out of 40 can be a real pain…)

I also want to talk about testing, but I’m already over 900 words, it’s getting late, and I’m at a reasonable stopping point. So I’ll come back to that later in the week.

experience points podcast appearance

May 28th, 2010

I had the pleasure of being a guest on the Experience Points podcast recently; so if you want to hear me ramble, have a listen! I certainly enjoyed the conversation (and the subsequent games of Pandemic), though I wish I’d done a better job of explaining the virtues of market segmentation; many thanks to Jorge and Scott for having me on.

mysims agents

May 24th, 2010

MySims Agents is a delightful video game. The presentation is charming; the puzzle solving is lightweight enough to never be frustrating while being engaging enough to keep me happily playing through it; several of the NPCs are amusingly quirky; one of the minigames is surprisingly tricky; the mixture of your main character’s journey plus the extra stories you hear through the phone messages works rather better than I expected; and it’s long enough to feel satisfying without even beginning to overstay its welcome. Liesl and I both happily played through all of it; Miranda’s played through a little more than half, which is quite good considering that she never finishes (or even gets particularly close to finishing) games with plots and linear storylines.

Despite all of that, very few people seem to have played the game: I heard about it through Michael Abbott, but the game’s only other appearance in my feed reader was in a (rather interesting) review by Christopher Williams. I would like to construct some sort of narrative out of this about how juvenile art doesn’t get its due, were it not for the uncomfortable fact that I actually don’t have much to say about the game myself. At first I thought that might be because it’s very good but no BioShock, and not quite a Mass Effect 2, either, but looking through the list of games I’ve recently played, that’s not the only issue going on here: I see games like Yakuza 2 on that list that are much worse than MySims Agents but that gave me something active to whine about.

That’s been happening to me a fair amount recently: the same thing happened with Plants vs. Zombies, for example. (Which is the only game that I can think of that I thought I was done with playing and then picked up again half a week after blogging about it; and my iPad purchase has spawned a third round of playing it!) Plants vs. Zombies was another game that didn’t spawn a lot of discussion on the blogosphere, but at least people seemed to be playing it: I’d see various throwaway comments about it on blogs, or offhand mentions in my Twitter feed.

Whereas I get the feeling that Michael is the only other person I know who has played this game at all. Which is a shame. Give it a try: it’s charming, it’s fun, and it knows when you’ve had your fill.

another world

May 16th, 2010

Another World‘s opening cut scene shows an experiment gone awry, with my character being transported to another world, where I got dropped into a pool of water.

At which point I died.

On my next attempt, I moved out of the water; after a bit of trial and error, I killed the slugs on the next screen, but the lion on the screen after that killed me. Repeatedly, in fact. Eventually, I decided that fighting wasn’t going to work, and moving forward wasn’t going to work; a process of elimination suggested that I should try moving back, which allowed me to get away from the lion using a handy vine.

Another World looks like an action game; it may be more of a puzzle game (in the text adventure tradition) than anything else, however. You have a limited set of options at any given moment; if you choose from them appropriately, you will advance, but doing so may require consciously avoiding the standard gameplay choices at any given moment.

Soon, I got captured, and escaped with a fellow prisoner. My combat options increased when I acquired a gun, as did the range of environmental possibilities; in particular, I soon ended up in a cage with a few branching possibilities. Going up didn’t seem right just yet; releasing the water looked promising, but shut off the possibility of going further down. So I went further down, destroyed a wall that, I assumed, would be relevant later, then backtracked, released the water, and headed up top. The changing checkpoint codes as I died along the way reinforced my belief that this was the right sequence of action.

Another World and Abe’s Oddysee have a lot in common. Both are platformers built up out of distinct screens; both use large sprites to further constrain the range of options; in both, you die a lot, but the puzzles are generally fair and frequently checkpointed.

My reactions to the two games are quite different, however. Abe’s got me actively angry; Another World was quietly wonderful. I think this is largely due to the tone: to me, Another World felt melancholy, while Abe’s had a certain offhand cruelty, a cruelty that extended out of the in-game scenario to the way that the game treated the player.

As I moved on, the game continued to discard tactics that I had mastered, and wove together new possibilities out of the same set of ingredients. I was proud of myself for noticing, in the palace, that one of the guards will raise his hands and hit a switch, lowering a door which enables you to change the outcome of a subsequent battle. But I was unhappy that, after I mastered that subsequent battle, I was apparently completely stuck.

Eventually, I resorted to a walkthrough, which told me that had to let a grenade (or, apparently, four grenades?) go through to blast a hole in the floor. I felt that two new ideas in the same checkpoint was a bit unfair, and several other VGC participants also got stuck there; still, if that’s the most unfair the game gets in terms of puzzle solving, then it’s a very fair game overall.

Jesse Schell defines a puzzle as “a game with a dominant strategy”, with the implication that “puzzles are just games that aren’t fun to replay”. Which Another World takes to its heart to a remarkable extent; I’m so used to games that are filled with repetitive combat for its own sake that it’s very refreshing to see a game that refines or discards mechanics as soon as you’ve proven that you’ve mastered them. This results in a quite short game, but I don’t mind that at all; instead, I wish more game designers had the courage to strip out padding, had the vision to be able to see padding in the first place.

By this point, I was almost done with the game. It threw a completely new mechanic in at the Arena, then had one last firefight; that firefight turned into a capstone experience, where the skills that I had developed earlier (especially in the area where I got stuck, ironically), after a bit of further polish, allowed me to reliably finish the firefight first slowly then quickly. Which led to a final confrontation where, instead of a traditional boss fight, you crawl painfully across the floor, with legs apparently broken. And then you and your companion escape, perhaps to freedom.

One of the arguments we had (well, I had!) on the VGC forums was to what extent the game was minimalist. I eventually decided that I didn’t know what the term “minimalist” meant, so I don’t have an opinion on that subject, but there are some related concepts that the game does touch on.

In terms of its gameplay construction, it is spare with the concepts that it allows, while being systematic with the ways in which it combines those concepts. And the gameplay itself carries the story forward, with very few cut scenes after the game gives you control initially.

Its visual style is rough and sparse, but with a strong aesthetic that still holds up well in today’s high-polygon-count world. It gives me a certain wabi-sabi feel (if I understand that term right, which I probably don’t!), with its transience and roughness.

But the game also fights against that wabi-sabi feel in one important way: while you are lonely in that you are stranded on a strange world, with only one companion whom you can’t talk to and who isn’t with you for much of the game, you’re never actually alone. Instead, the game moves you directly from struggle to struggle, sometimes environmental but usually struggling against actual living enemies.

Looking at that tension through the lens of my favorite analytical categories, some properties that might be relevant are Positive Space, Roughness, The Void, and Simplicity and Inner Calm. The game does well in terms of Roughness and Simplicity. (I’ll have to think more about the Inner Calm half of that last one.) And, on a geometric level design sense, there is quite a bit of Positive Space.

But on a more conceptual level, the Positive Space is missing, and there’s no sense of The Void. You’re constantly forced to interact with the game, and usually with living enemies within the game: it throws one puzzle after another at you, you’re never actively invited to rest, and the spaces between puzzles rarely invite contemplation.

Ueda is frequently cited as a designer who is influenced by Another World. And if my memories serve me well, Ico has somewhat of the same problem: the game world is wonderful, but far too often in it, if you stop to drink in the world, you’ll find yourself getting attacked. It wasn’t until Shadow of the Colossus that Ueda really broke away from this, with a recognition that this combination of exquisitely crafted puzzles together with magnificently desolate environments is best served by leaving huge amounts of space between those puzzles, letting the player disengage from the puzzles and letting the nature of the environments seep into the gameplay.


I haven’t done my usual gathering of links for Another World, but I certainly recommend the discussion of the game at the Vintage Game Club.

random links: may 10, 2010

May 10th, 2010

habitable blog posts

May 4th, 2010

In my recent post on habitable software, I proposed evaluating software through the lenses of functionality, openness, and habitability. Given that one of my schticks is to yank analytical concepts out of one context and try to apply them elsewhere, this suggested a followup question: does this classification only make sense when talking about software, or can I use it elsewhere? And, given that another one of my schticks is relentless navel-gazing, this in turn led to a specialization of that question: what happens if I apply that classification to this blog?

So: functionality. In the context of a blog, I suppose that means: does this blog talk about topics that you’re interested in, and have interesting / useful / provocative contributions to the discussion about those topics? I’ll mostly leave that to others to decide; certainly I wouldn’t blame anybody else for not being at all interested in what I have to say here! But I do try to dig a bit into whatever topic happens to interest me in the moment; if you happen to find my topic du jour interesting, maybe I’ll have something worthwhile to say. I’m sure I can do better in that regard, but I’m also sure I could do worse, under the (very) generous assumption that I’m speaking of a reader who shares my peculiar collection of concerns.

And openness. I try not to hoard my ideas, I’m happy to talk about them with other people and let them build on them or disagree with them. And I try to look at what others have written, too – I read a lot of blogs, I dig for blog posts on topics that I’m focusing on, I include references to them even if I can’t find ways to fit them into the main thrust of my discussion. Again, I’m sure that there’s room for improvement, but I’m not particularly concerned on this front either.

Habitability, however, is another matter entirely. In fact, part of the reason why I’m happily giving myself a pass on the previous two criteria is that I strongly suspect that my blog is about as uninhabitable as they come, at least for readers who don’t happen to be me! This blog is a record of my day to day obsessions: when I find something I’m interested in, I try to use this blog as a way to get a piece of my thoughts on the matter better defined to myself. But I’m not particularly concerned with presenting those thoughts in a fashion that’s going to fit well with anybody else’s thought patterns. Habitability doesn’t mean “reduced to a least common denominator”, and one thing that this blog has going for it in that regard is that it is very much inhabited, but I don’t think that it’s inhabited in a way that manifests core living structures that will resonate more broadly.

One of the directions to approach this from is to come up with a set of constraints, a set of patterns. Looking around, I see some other interesting experiments. Roger Travis has been talking about taking a bardic approach recently; I’m curious about that, but I don’t have a clear vision what it would be like. (If I were still teaching, though, I would be thinking very hard indeed about what he’s been doing.) I’m very impressed by what Duncan Fyfe has produced recently, but his approach wouldn’t work at all for me. Justin Keverne seems to be in the process of rethinking his blog; some of the seeds there really appeal to me.

And then there’s Gödel, Escher, Bach, which I’ve just reread for the first time in more than a decade, and which is fascinating both as a model and as a cautionary tale. As a model: the dialogues are wonderful, and are a form that I’ve loved for ages. As a cautionary tale: while I enjoy the non-dialogue parts of the book, I also suspect that a large part of the reason why they’re there is that Hofstadter can’t bear to not explain what he’s thinking about, so they’re really there for his sake more than the readers’ sake; this is something that I do All The Time. As a model: the pictures in the book are pretty wonderful, too.

(Presentation Zen pointed out rather forcefully the strengths of pictures as well. The blogger computer geek thing to do seems to be to start taking photography seriously; perhaps inspired by my daughter, though, I’d be more interested in drawing, were my “learning non-programming stuff” slot not taken up by Japanese. Still, having a camera in my pocket isn’t the worst thing in the world; and there are zillions of images out there on the web if I only take the time to think about how to use them.)

I suspect that I should take a lesson from both Justin and from Hofstadter and play around with length. I have enough experience with writing posts in the 1000-2000 word length; I should experiment with both much smaller and much larger pieces. (Possibly starting from the same basic material, but presenting it in either a suggestive or a well worked out approach, instead of typical blog pontificating.) And I should cast my net for presentation approaches more broadly: while linear written exposition is pretty deeply embedded into my brain, now more than ever it’s not the only approach worth considering.

I have a lot to think about in terms of presentation and habitability, that’s for sure. Though I should return to the question of functionality: if I’m considering writing something longer form, I do wonder what other people would be interested in reading about from me. Obviously it’s mostly my problem to figure out what I have that’s worth saying, but I am curious what suggestions and advice others have.

After more than five years of writing this (and a couple of years of Twitter usage), it feels quite odd to be thinking about writing something that won’t immediately be available via an RSS feed. Don’t get me wrong, this blog isn’t going anywhere, but I should carve out a quieter space to think and experiment, too.

electronic book formats

April 30th, 2010

I was quite late to the music download party, but my experiences on that front have been good; that, combined with my desire to not run out of wall space in my house, suggests that I should start buying books electronically as well.

My initial hardware device for this will be an iPad, but I’m wondering what my preferred format should be for books that are available from Apple and Amazon but not from elsewhere. Some specific questions I had:

  • My understanding is that both formats involve encryption; is that correct, and, if so, is it possible to remove the encryption? (Googling suggests Amazon’s isn’t too hard to remove.)
  • My understanding is also that Apple uses a somewhat more widespread format, but their proprietary DRM makes their content unportable for now; is that right? (Is there an Apple-sanctioned way to read an iBooks book on a device other than an iPad or an iPhone/iPod Touch at all?)
  • Is there any way to browse Apple’s bookstore through a computer, or can it only be browsed within the iBooks application?
  • In general, are Kindle books or iBooks books more pleasant to read on an iPad, or is it a tossup?
  • Are there any other large stores for non-public-domain electronic books that I should be aware of?
  • Anything else I should be asking that I’m not?

Thanks in advance for any suggestions people provide.

vintage game club reboot, continued

April 27th, 2010

As I mentioned previously, we’ve relaunched the Vintage Game Club under new game selection rules. And I’m very pleased with how it’s gone so far: after about a week of feeling out what games people might be interested in playing, two games emerged with champions, and in both cases we’ve had enough support that the games have been chosen.

So we’ll start playing Another World more or less immediately; we’re still deciding when to start Psychonauts, but it’s next in the queue, and (given Another World‘s short length) we’ll probably start it in a couple of weeks.

If either of those games strikes your interest, please join us! If they don’t, please suggest another game that does strike your interest! I’m looking forward to playing both of them, and I’m very grateful to the members for being willing to work with the new system and to AndrewArmstrong and oozo (and Michael, of course) for stepping up as our first champions!

(Side grumpiness: I would be even more excited about playing Another World if my Virtual Box installation of Windows actually worked acceptably. Fortunately, I have another couple of options for playing that game, but I’m wondering if I should break down and buy a cheap Windows PC for VGC purposes. At some point, I’ll buy a reasonably powerful desktop Mac that I’ll set up for dual booting, but I’m not planning to do that any time soon, especially since I just ordered my new computing device for the year…)

random links: april 25, 2010

April 25th, 2010

christopher alexander’s fort mason bench

April 24th, 2010

One of the surprises I encountered when reading The Nature of Order was that Christopher Alexander designed a bench at Fort Mason. (He talks about the process of its construction in the third volume of Nature of Order.) So when Agile Open California returned to Fort Mason last year, I made a point to duck out between sessions and find it.

At first glance, the bench was rather disappointing: it’s seen better days, the concrete isn’t the most attractive, and there’s an odd sort of pedestal up front.

Left side of benchRight side of benchBack of benchPedestal

This being Christopher Alexander, though, I was willing to believe that there was more than met the eye at first glance, so I spent a bit of time there (and returned a second day), and ended up rather fond of it.

Point one: levels of scale. The concrete is not my favorite material, but it’s not all that there is to the bench: there are tiles on the sides, on the octagon, and in strategic locations on the front on the bench. And the tiles turn out to be rather lovely; I was particularly fond of the fox tile in the center of the front of the bench.

Front of benchFox tile

With that in mind, the concrete ends up being a rather fitting backdrop for the tiles to find themselves in. (A bench that was completely worked out at the level of the detail of the tiles would be a different work indeed!) Also, while I don’t know what constraints in terms of time and money Alexander had to work with, in general you have to make tradeoffs as to where you spend your efforts; rather than treating everything uniformly, he made sure that the tiles were special, while leaving their surroundings perfectly functional but requiring much less work.

Point two: this isn’t a work of art to be admired, it’s a bench to be used. The proportions of the bench seemed a little odd when I was looking at it, but it was really quite comfortable to sit on. And flexible, too: you can sit on the first row, you can sit on the second row, a single person wouldn’t feel overwhelmed by it but I imagine you could get as many as 20 people sitting around there if you really wanted to. (To be honest, I’m not sure why you’d want to, but still.)

And then there’s the odd octagonal pedestal at front. When I first saw it, I was nonplussed: I was willing to believe that the area in front of the bench would have felt a bit odd without something there, but I wasn’t completely convinced by the pedestal as a solution to the problem. When I came back the second day (which is when all of these pictures were taken), however, a man was there fishing, and the pedestal was in just the right place and at just the right height for him to keep his gear. So, in fact, the pedestal turned out to work very well in the living context of people actually using this area, standing closer to the water. (The trash can, in contrast, just looked ugly there.)

Pedestal in use

Point three: the setting. As Alexander repeatedly points out, you can’t consider a construction in isolation, you have to consider the construction in context. And the context for this bench is rather remarkable: you have rather steep hills covered with trees behind you and to your right, you have the Fort Mason buildings to your left, and in front of you you have a gorgeous view of the San Francisco Bay, with Alcatraz and Angel Island in the distance.

Hill behind benchBuilding to leftFront left viewFront center view (Angel Island and Alcatraz)Front right view

So it’s a funny sized area, far too small to place an actual building, but exactly the sort of secluded nook where people might want to hide out, relax, chat, and drink in the scenery. And a traditional park bench wouldn’t work nearly as well in the space: the space is large enough that a traditional bench would be so small as to feel at sea, and a traditional bench would also direct your view exclusively across the bay (which, while the most scenic view, is far from the only view of interest). And the size of the hills behind and to the right of the bench demand a certain response; the substantial nature of the bench and its cinderblock construction make it just the sort of object that doesn’t get overwhelmed by that context.

When all is said and done, I ended up quite fond of the bench. I just wish I’d had more time to spend there, instead of having to steal time between sessions. Agile Open California will be back at Fort Mason this year; maybe I’ll run a session at the bench instead of in the regular meeting rooms, weather permitting?

galcon

April 23rd, 2010

(Short Game disclaimer: There is a trial version of Galcon available in the app store, you’ll have a very good idea of what the game is like after playing it for less than five minutes.)

I got curious about Galcon when Randy Smith used it as an example in his GDC talk on “Designing to Grab and Retain Players” this year. My memory turns out to be faulty: I thought he’d talked about it as an affordance example, and I was going to quibble about that (given some surprises I had when trying to select multiple planets when first playing the game), but nope: in the “grab players” section, he rightly praised the game for the simple controls (you just tap on planets to send fleets from one to another), but he also said the affordances were weak, and that there were too many clicks before you got started. (I remember being confused by the tutorial.)

It actually turns out that Smith had more positive to say about the game in the “depth” section of his talk: the randomly generated levels, the consequences that the simple rules lead to, the different game modes for different play styles. And here too, I generally agree with Smith: I had to go through one major shift in strategy as I went up the difficulty chain in the main game mode, I’m pretty sure I would have had to make another strategic shift if I’d really wanted to make it all the way to the most advanced difficulty, and of the other game modes, one was too mellow for me, one was too frantic for me, one was too mysterious for me, one was arguably a slight improvement over the main mode, and they all brought something to the table.

All that aside, though, I think the reason why I must have bought the game is that it just looked like a neat idea. A very simple playing field with large circles and small triangles; you control the game just by touching the circles; and if there turns out to be actual depth there, what’s not to like? And I’m happy to have bought it, and it’s a good example of the sorts of design possibilities the iPhone opens up: I like the tactile feel of the game a lot more than I would have liked it if I were playing it with a mouse or trackpad, and I suspect also more than I would have liked it if I were playing with a stylus.

One aspect of my interaction with the game that I’m not sure what to make of: as you go up the difficulty levels, it doesn’t just give the enemy more ships, it also switches from showing you the count of enemy ships on planets to not showing you the count. Which rather annoyed me at the time; in retrospect, I’m not sure if I would prefer for the game to have its current design, for it to have show/hide ships to be an option that’s orthogonal to other difficulty changes, or for the game to have picked one mode or the other and stuck with it. I guess I would tentatively lead towards the latter (probably with hidden numbers, despite my general preference for visibility of that sort of thing): the game’s current design let me be actively disappointed about something that I wouldn’t have thought about at all otherwise, and in general I’m not a big option fan. (So, going back to the depth discussion from a few paragraphs up, I don’t see the multiple game modes as the most satisfying form of depth, either.)

plants vs. zombies

April 21st, 2010

Plants vs. Zombies is a thoroughly delightful game about which, for better or for worse, I have very little to say. Despite not being a tower defense fan, I enjoyed the main gameplay mode: while I had my favorite tactics, it threw enough changes at me to keep me interested but not overwhelmed. The minigames allowed the game to experiment further, exposing me to more options; and, as I made it part way through the second story mode a second time, it continued to throw new wrinkles at me.

But what sets the game apart is the charming touches that are everywhere: the title, the art, the help screen, the descriptions in the almanac, the music video. Miranda was fascinated as soon as she saw it, and both she and Liesl have spent quite a bit of time with the game as well.

So I really wish that I had something deeper to say about the game! The fact that I don’t, though, is in no sense a criticism of the game (though perhaps it is a criticism of me): I thoroughly enjoyed the time that I spent with it.

(Random fact, just to make you jealous: over lunch on Mondays and Fridays at work, I play board games in a group that Dave Rohrl, the model for Crazy Dave in this game, organizes. Steve Meretzky is another regular participant.)


Not a lot out there about the game in the blogs, but some links:

vintage game club, iteration two

April 19th, 2010

The Vintage Game Club has been going on for more than a year and a half now, and I’ve had a great time with it. But, as with any endeavour, its first appearance in the world leads to areas where the initial plan was, perhaps, not the best; so we’re experimenting with a new way to organize the participation.

I don’t want to speak for my fellow moderators, but I thought I’d explain some of the reasons why I thought these changes might be useful. Some of the issues I had:

  • The moderators were busy enough that the between-game decision periods lasted rather longer than I was comfortable with.
  • On several occassions, we selected games that people didn’t want to stick with, with even the game’s biggest proponents in the voting dropping off quickly.
  • The voting process itself wasn’t very satisfactory: console gamers and PC gamers couldn’t agree on what to play, and the need to satisfy a large number of people and the rhythm of play meant that we couldn’t choose games that were too hard or to short or too long. (The Another World suitability discussion was the best example of this latter problem.)

Looking at all of these, I saw one theme: voting. It was directly causing problems (point three), it didn’t give particularly satisfactory results (point two), and it made the moderators a bottleneck (point one). Which raises the question: why are we voting?

I’m not sure we ever made that explicit, but the idea behind voting was that it would encourage a reasonably large number of people to play and discuss a game together, even if they wouldn’t necessarily play it otherwise. And we had some success with that, at least initially, but I don’t think we’ve really done a great job on that metric. In particular, the mental model implicit in that view is that people’s preferences in what to play are relatively flexible; but there are important ways in which that’s not the case, the biggest of which is that not everybody has access to every relevant game platform.

So we’re experimenting with stepping away with the model that we want as many people to play a given game as possible: instead, we’re switching to a model that we’ll work with people’s pre-existing desires to play a given game, and we’re trying to make as welcoming a space as possible for different groups of people to play older games together. This way, even a small group of people who want to find a home for discussing a game will be able to do it at the VGC.

The selection mechanism isn’t the only change: in particular, our change to requiring champions will also, I hope, help directly with all three of the pain points above.

Incidentally, I do hope that, even with these changes, we’ll still have occasional games that get a broad spectrum of participation—the BioShock playthrough was a reminder of how well that can work. I think that is a valuable model, but I no longer think that it should be our only model for a successful playthrough.

caching, take two

April 18th, 2010

It turns out that yesterday’s attempt at setting up caching for the blog didn’t work: my feed was broken. (Or rather, one out of the three feed formats.) Sheer luck that I discovered it so quickly—I’d e-mailed the Akismet folks about a reader whose comments were regularly getting flagged as spam, and as part of their (delightfully quick) response they pointed me at ismyblogworking, which told me that, in fact, my blog wasn’t working.

So I’ve tured off hyper-cache, and am now trying W3 Total Cache. Hopefully things will work better this time…