Friday, May 7, 2021

2021 IGF nominees: stunning environments

The IGF finalists have just been announced. Usually this happens in January, so that the winners can be revealed at GDC. Guess what, this year is different! Again! But here we are.
Last year, I wrote:
2019 was a heck of a game year, folks. There were so many brilliant narrative games rolling around jostling for attention like fuzzy puppies in a sandbox.
You know what? Even more this year.
They're not easy to talk about, though. Not like last year. What happened in narrative gaming in 2019? Heaven's Vault, that's what happened. State of the art: vaporized.
2020 wasn't about new frontiers in narrative technology. It was about games that were delightful. In lots of ways. Often in flawed ways! You're going to see a lot of comments about "what's wrong with this game" or "why I had trouble with that game". Or even "this game wasn't for me." But the theme of 2020 was, a game can be janky or fiddly or underimplemented or frustrating -- and still be a delight to play. If the creator wanted to do something and did the hell out of it, that shines through.
As usual, I'm going to group these games in rough categories. I'm not ordering them from best to worst (or vice versa) -- it's just games that seem to go together.
(Necessary footnote: I was on the narrative jury and played free review copies of Beyond Blue, Nuts, and Mundaun. I bought Cloudpunk last year. I played South of the Circle in a free trial month of Apple Arcade.) (My second free trial month; I dunno how that works.)

In this first post: a batch of games whose environments just blew me away. They don't necessarily have the most intricate gameplay -- although some of them pull some fascinating tricks! But if the ambience pulls me in, I'm sold.
  • Beyond Blue
  • Cloudpunk
  • NUTS
  • Mundaun
  • South of the Circle

Thursday, April 8, 2021

IF talks at Flights of Foundry

A quick notice that I'm part of the program of Flights of Foundry, a virtual SF conference on April 16-18.
There's quite a bit of IF-related content on the schedule, in fact. I'm on two panels, but look at this:
That is, mind you, just the narrative-related topics with names that I recognized. There are entire other tracks for SF/fantasy prose, art, poetry, comics, tabletop games, and more. The organizers have taken the idea of a virtual, distributed conference as a license to run the thing round the clock. There is, as people say, a lot.
The event is run by Dream Foundry, a new nonprofit supporting "professionals working in the field of speculative literature". This is adjacent to SFWA, the SF writers' association. Dream Foundry's idea (I gather) is to include artists, designers, translators, editors, and other such people. Of course SFWA is also trying to expand to more kinds of creators, so it will interesting to see if the two organizations develop different focuses.
The upshot is that Flights of Foundry is more professionally-focused than the fannish SF cons I usually attend, but hipper and more game-literate than, say, Readercon. Which is not to see you won't see some of the same people at all these events! But, again, different focus.
Hope to see you around that weekend.

Sunday, February 14, 2021

Unwinnability and Wishbringer

Someone asked recently about a version of Zork modified to avoid all the classical Infocom annoyances. Expiring light sources, random combat, crucial items stolen by the thief... Zork comes from an era where all these were simply part of the fun. You saved a lot, optimized your run, and tried again if you failed. But the gaming world -- I include myself -- has largely decided over time that this isn't fun.
As far as I know, there is no such modified Zork. But it's an intriguing idea! In fact someone is working on a modified Planetfall in just this vein. A new MODERN command switches to a mode with no hunger timer and, ideally, no unwinnable situations.
When we talk about those early games, it's easy to fall into the trap of calling those unwinnable situations mistakes or design flaws. Once you do that, you're stuck searching for explanations of why the designers made those mistakes. Answers come in two flavors. Either (a) the state of the art was too primitive to understand that unwinnable situations were bad; or (b) the designers were padding out their games to a given level of difficulty or play time.
Speaking as one who played the games back in the day: this is just wrong.
This Giant Bomb article puts it well:
The early generations of text adventure games tended to have a lot of chances that could lead players to unwinnable states, as a way to make a game deeper and more challenging; this kind of game design was not yet considered unfair to players. It was usually considered a product of the game’s difficulty rather than poor design and encouraged (or, as its critics would say, forced) replayability.
The need for many failed run-throughs before one figures out the perfect approach was certainly an element of the challenge. But it was never padding. It was as much a part of the design as the treasures and the magic words.
There's a deeper confusion, though. The same article goes on to say:
Mike Dornbrook, Infocom's Head of Marketing, conducted a customer survey in late 1984 which showed a clear correlation between the Infocom games players considered their favourites and the games they had actually finished. This piece of marketing intelligence led to the more foolproof design of Wishbringer and later games.
-- ibid
Wishbringer was Infocom's second junior-level game. It is friendlier than earlier games, more forgiving, and more generous in its design. Most of the major puzzles have at least two solutions. But it's a misconception to say that Wishbringer avoids unwinnable situations, or that Infocom changed its design stance after 1984.
It's true that Wishbringer was immediately followed by A Mind Forever Voyaging, which was focused on narrative exploration rather than puzzles. But this was just halfway through Infocom's high season. Their later slate (Spellbreaker, Leather Goddesses, Trinity, Lurking Horror, ...) embraced the model of failable game design and refined it into some of their best-regarded work. With Journey, Infocom redesigned IF from the ground up (discarding the parser!) -- but doubled down on failable puzzles, structuring the game around a limited resource system which took much trial and error to solve.
To untangle this, we're going to have to dig into the ways in which games can become unwinnable. How does it happen and why?

Friday, February 12, 2021

A couple of Myst fandom notes

We're still waiting for the PC release of the new rebuilt Myst. But that doesn't mean that nothing's going on.

This week Cyan announced official support for the long-standing Myst fan wiki at
We are delighted to announce that as part of the Lore Project, Cyan Worlds, Inc. will be utilizing the Guild of Archivists website as the Official wiki for the Myst franchise!
The Lore Team knows how important the preservation of the franchise’s mythos and our community’s history is, and wants to ensure it can live on a continuing platform which is not filled with ads or subject to shutting down.
To that end, while Alahmnat will still remain the Guild’s Grand Master, today Cyan is formally committing to providing server space and our support to ensure the Archive and other Guild of Archivists resources will remain online, independent, and ad-free forever!
-- Cyan announcement, Feb 9 2021
The Guild of Archivists (according to its own about page!) has been running for twenty years. If you look back into my old Uru pages you'll find many links to D'niPedia, the wiki's original home at It's one of those fan resources which has become invaluable to the original creator, and Cyan's offer of support reflects this.

I also caught scent of an online documentary series called Preserving Worlds. I'm not familiar with Means TV, the studio that created it -- they seem to cover political topics primarily -- but they seem to have taken a stab at videogame history. The show was created by Derek Murphy and Mitchell Zemil; it consists of six thirty-minute episodes covering ZZT, Second Life, Myst Online, and other multiplayer games of yore.
(Bonus points for the Chicago font styling!)
I just watched the Myst Online episode. It consists of an in-depth interview with Zib (Max Batchelder), a long-time fan -- I've seen him around the forums and conventions forever. He gives a good thumbnail overview of Uru's checkered history and its many fan incarnations, followed by a tour of several fan-created Ages.
The background footage of the show is clips from Uru Ages. Some are familiar areas from Cyan's original game, others are fan Ages; but the documentary presents them on an equal footing. There's no hierarchy of "canon versus fandom" -- they stand entirely on their own merits until Zib begins to introduce particulars. (And then there's a credits list at the end.) I thought that was a nice touch.
The interview was recorded last summer, before Cyan's surprise release of three fan Ages on the official Myst Online server. Each of those three appears in the show; so do several others that I'd only seen as static snapshots in a gallery. I appreciated the walking tour.

Friday, January 8, 2021

Four (or five) recent Lovecraftians

"Lovecraftian game" is an improbable label to begin with. We don't say "Conan-Doylian game" or "Gibsonian" or "George-Lucasian". Games have adapted stories by Poe and Verne and so on, but not enough to talk about them as a category. Tolkien adaptations are an industry in themselves, but you'd say "Middle Earth games" -- maybe -- certainly not "Tolkienian".
Lovecraft, as always, is weirdly liminal: a collection of tropes that can be, and arguably should be, detached from the stories themselves.
So. A game genre (subgenre) is a set of conventions about what you do. Except Lovecraftian-ness isn't defined by what you do; it's defined by what happens to you. You are shaken out of your mundane reality and forced to confront the cosmically terrifying. (Or cosmically astonishing, but we'll get there.) What you do in your mundane reality is an open question. The opening and closing of the story, before and after revelation, can go anywhere! It's not like a "Sherlock Holmes" game where you know exactly what's on the menu.
Of course, a game that leads up to cosmic discoveries may well start out with mundane discoveries. That's an obvious model; it's why the Call of Cthulhu RPG is canonically about investigators. I don't have hard stats, but I'd bet that the most common Lovecraftian crossover is the hard-headed private eye who's seen it all and is about to see a whole lot more.
Now look: I'm going to ignore the kind of game where phallic oozing horrors swarm at you and you mow them down with a shotgun. That's Lovecraftian only in the sense of H. R. Giger and the Aliens franchise -- the influence is unarguable, but anything you can blow up ain't cosmic. (Nor run over with a boat; really, don't get me started.)
(Yes, I'm handwaving a lot of ground here. The FPS Gigeresques led directly to survival horror by simply deleting the shotgun. Many undeniably Lovecraftian titles there. But "shooting" and "dodging" are the easy answers in game design, right? And even with those answers, players demand at least a little plot.)
A lot of Lovecraftian games start out with the general question: what's going on here? As these games indeed do. But that doesn't mean that you do the same stuff in them. Let's compare.
  • Moons of Madness
  • Transient
  • Old Gods Rising
  • Call of the Sea
  • Paradise Killer

Friday, December 18, 2020

Twitter makes it harder to read tweets

Yesterday I touched off a teacup-storm when I tweeted:
Twitter cut off the ability to read a tweet by fetching its URL with a normal HTTP GET. You need Javascript or an authenticated API call.
I know most people don't care. It's normal web browsing, with all the data-hoovering we've come to expect.
Just want to say that it matters.
Quite a few people started discussing this, and it wound up on this HackerNews thread.

What's going on here?

The problem here might not be clear. After all, if you click my tweet link in a regular web browser, you'll see the tweet and its replies, right?
"Twitter cut off the ability to read a tweet by fetching its URL with a normal HTTP GET. You need Javascript or an authenticated API call."
That's because a regular web browser supports Javascript, cookies, and everything else that's been thrown into the Web over the years. When you browse like this, Twitter can cookie-track you (notice that I'm using Safari's Private Browsing feature). They can nag you to log in. They can show you ads. All the usual stuff.
If you try turning off Javascript, you see this:
"JavaScript is not available."

(This is iCab, a third-party browser with some nice features. Twitter supports iCab just fine if JS is turned on.)
But let's reduce the situation to bare essentials: a raw HTTP GET request using curl.
curl -v
HTTP/2 400
This browser is no longer supported.
Please switch to a supported browser to continue using You can see a list of supported browsers in our Help Center.
I've elided most of the headers, but that's an HTTP "400: Bad Request" error response.
In the past, all of these requests would work; you could read a tweet this way. Twitter added warnings a while back ("Do you want the mobile site?") but you could get through if you wanted.
However, a few weeks ago, Twitter added a warning saying that on Dec 15th, they would remove support for legacy browsers. That's what changed this week. I didn't catch the exact time, but on Dec 15th, they started returning this error page which includes no information about the tweet.

What problems does this cause?

I admit up front that my browsing setup is weird. My default browser has JS turned off; it has a strict cookie expiration limit. This is hardcore privacy mode and most people don't do it. Lots of web pages work badly for me. But most of the web works at least a little bit -- when I go to a web page, I can usually see what's there.
(Of course, if I want to buy something or edit a Google doc, I need to switch modes. I use four different browsers and about six or seven different profiles with different levels of privacy protection. I told you it was weird.)
The point is, I am willing to trade off convenience for privacy. But as of Dec 15th, when I go to a Twitter URL, I see nothing. The tradeoff just got a little worse.
This isn't about me, though. From followup discussion:
  • My friend Jmac is working on a tool which displays chat from several sources, including Twitter, in a single window. Twitter broke it.
  • Keybase is an open platform which supports personal end-to-end encryption. It uses Twitter as one (of several) means of identity verification. Twitter broke that.
  • Someone in the HN thread mentioned a script they use to check for broken links on their web site. Twitter broke that (for links to tweets).
  • I've heard that previews of tweets on other chat/discussion platforms has also broken. (Not sure which ones, though.)
To be more ideological about it (yes I will), Twitter is asserting that people reading tweets is not their priority. Twitter is not about people communicating. They'll block communication if it pushes up their corporate numbers.
This was my summary from last night (slightly edited for clarity):
The point of the web is that a public URL refers to information. You can GET it. There may be all sorts of elaboration and metadata and extra services, but that HTTP GET always works.
Tools rely on this. Blogs pull previews via HTTP. RSS readers collect and collate posts. People peek pages using fast or low-bandwidth tools. It's not part of any company's value proposition or stock price; it just works. Until somebody breaks it.
The error message that appears now when I do this on Twitter (and the warning that popped up a few weeks ago) says that Twitter is dropping support for legacy browsers. But you support legacy browsers with an HTTP reply that contains the tweet text. That's all.
The only reason not to do this is that someone at Twitter said, "Why are we letting people just read tweets? That doesn't benefit us. They need The Full Twitter Experience." Which boils down to selling ads.
Yes, I could be using the API in various ways without directly hooking into the ad firehose. But then at least [Twitter] controls the experience -- [they] give out the API keys, [they] can decide to cut people off or otherwise control what's going on.
If I can just read a public tweet the same way every other web document works, then I can make the experience work how I want; I can have the conversation on my own terms and in my own framework.
To Twitter, this is anathema. So Twitter cut it off.
That's all. That's where we are. I don't expect different because Twitter is an ad company. I expect other changes in the future which will make Twitter even less hospitable to me. Maybe next week [or] maybe in ten years -- I'll find out when it happens.

Alternatives and workarounds

Of course there are many.

Twitter's public API

Twitter supports a web API. You can use it from any language you like (Perl, Python, whatever). In fact you can use it with curl or wget if you enjoy web plumbing.
As is usual for big web APIs, you have to register as an app developer and request an access key. This is free, but it puts the process under Twitter's control. In theory they can revoke your access if they think you're a baddie.
Also, the API has rate limits. This isn't a shock; every web service has some kind of rate limit, even if it's just Cloudflare or your ISP cutting you off. But Twitter has made it clear that they limit use of the API to make sure that third-party clients never get too popular. They don't exactly want to squash third-party clients, but they see them as a threat to be contained.
(See this 2012 blog post -- particularly the bit about "if you need a large amount of user tokens". I wrote more about this in 2018, when Twitter deprecated some functionality from their API.)

Several people referred me to, an alternative Twitter front-end which doesn't require Javascript. Pretty much aimed at people like me! You can substitute Nitter in any public tweet URL and get a URL that works in all the ways we've been talking about. For example,
curl -v
This downloads an HTML document which contains my original text, and all the replies. You can also visit to see my Twitter profile, except there's no ads, no promoted crap, and it loads fine (and fast!) without Javascript.
I'm sure that Nitter uses Twitter's API, mind you. It is, de facto, a third-party Twitter client. Which means that -- again, in theory -- Twitter could just cut it off. I don't know whether they're likely to. At any rate, at present, Nitter is a useful interface.

Faking your User-Agent

Turns out that if you're Google, you can GET tweets all you like! And pretending to be Google is pretty easy.
curl -v -A "Mozilla/5.0 (compatible; Googlebot/2.1; +"
This sends Google's User-Agent string (instead of the standard curl string). Twitter happily sends back the same web page I was getting before Dec 15th.
Now, this web page asks me to turn on Javascript. But the text of my tweet is in there (along with people's replies in the thread). You can extract the text by looking for og:description, which is the standard web preview metadata.
Is this a viable workaround? It certainly works. But it's a hack. Twitter's policy is that I should not be allowed to get this page. Only Google can, because Google is king. I'm a peon. Their enforcement of this policy is crude and easy to cheat -- but that's a bug. Maybe they'll fix the bug. Maybe it's not important enough to fix. Again, I don't know.
It's also worth noting that the page you get this way is 586 kb. The equivalent is 28 kb. Twitter has piled a lot of junk into their UI.

So now what?

Honestly I haven't decided. I think I'm going to set up my default browser to redirect URLs to That will take care of most of my day-to-day needs.
(I do use Twitter clients, by the way. Tweetbot on Mac, Echofon on iOS. But I try to use them in a mindful way. I don't want them to pop up just because I clicked somewhere.)
Mostly, this is an opportunity to look clearly at Twitter and remember that it does not love us. It's a commercial social network; we are its fuel and in its fire we shall burn. I use Twitter, but -- as with the web in general -- I want to remain aware of the tradeoffs.
For what it's worth, Mastodon never got traction for me. Sorry. My private social circles are now on Slack and Discord. Slack just got bought. Maybe it'll be okay. Discord's heel-turn is still in the unclear future. I don't know. We have to stay flexible.
So, you know... the usual story. Enjoy your holidays. Stay home and videochat. Play some games.

Tuesday, December 8, 2020

Reading Myst for detail

The VR remake of Myst is due out for Oculus Quest on the 10th. I will not be playing it this week because I'm not into VR or Facebook. The updated Myst will be released for other VR platforms and flatscreen PCs in 2021 -- I believe they said "early 2021" -- and I am happily anticipating that. The screenshots look amazing.
(Cyan has walked a painful line insisting that this is not a "Quest exclusive" release. It's just a game that releases on Quest this week, and other platforms at an unannounced future date. My personal theory is that Facebook walked into Cyan's office with a bucket of money and said "Make Myst VR a Quest exclusive!", and Cyan said "Oh, no, we really can't do that," and then there was a lot of pacing and gesticulating, and they wound up with this handwavy compromise where the PC version ships a couple of months later and nobody calls it a Quest exclusive. This is only a theory.)
Anyway, I thought it would be fun to go back and look at how little we know about the Myst story!
The original game does an incredible job of painting a complex story of betrayal with just a few brushstrokes of narration. But it's surprisingly hard to pin down exactly what happened. We know that Atrus trapped his sons in the red and blue books, and the boys trapped Atrus in D'ni... hang on, how did that work? Who was trapped first?
Here, try this puzzle. You've played Myst. Using only your knowledge of the original game, put these events in chronological order:
  • (A) Atrus creates the red and blue trap books.
  • (B) Atrus goes to D'ni and is trapped.
  • (C) Atrus moves four linking books from the library to the protected places on Myst.
  • (D) Atrus records a message to Catherine in the Forechamber imager.
  • (E) Atrus tears pages from the red and blue books and scatters them.
  • (F) Sirrus and Achenar burn the library on Myst.
  • (G) Sirrus and Achenar do something ("used Catherine") to trick Atrus into going to D'ni.
  • (H) Sirrus and Achenar enter the red and blue books and are trapped.
  • (I) Sirrus and Achenar tear one page from Atrus's Myst linking book.
(I've put these in alphabetical order to avoid giving hints!)

Spoilers farther down the post. While you think about it, I'll mention some other recent Cyan news...

A month ago Cyan released a photo-sharing iPhone app called Crowbox. No, it's not a game; it really is a photo-sharing app. It uses peer-to-peer networking. You browse through your photos on your phone, select one, and everybody else standing near you can see it pop up on their phone. That's the whole gimmick. It's free, no ads, with a paid DLC option for extra features (more shareable albums).
Cyan teased this idea last year at Mysterium. Now they're pushing it as ideal for pandemic times -- you can show people your photo album while standing six feet away from them. (Outdoors, preferably, but you know this.)
They also posted an in-character Atrus journal touting the idea, in case you like your marketing ARG-style.

If you're into merch, Cyan has put new mugs, shirt, posters, and other stuff on their company store page. Some of this has art from the upcoming Myst; some spotlights fan artist Lauren Herda. I snagged a couple of mousepads, which are now sold out, ha ha.