Monday, October 9, 2017

Thaumistry: design ruminations

When I mentioned to my friends that I'd finished playing Thaumistry, the first thing they asked was: "Is it old-school?" What a delightfully multivariate question! The answer is "yes and no", of course, but let's not drop it there.
Bob Bates is old-school, because he wrote for Infocom. But he's at the tail-end of Infocom's history: Sherlock and Arthur were two of the final titles in the Infocom canon, as the company tried to push forward into audio and graphics. So in that sense, he's modern. And Bates is better known for his work on the graphical adventures of Legend Entertainment. That was "modern IF" in the 1990s, but it's pretty old-school today, isn't it?
Thaumistry was published with Kickstarter support, and there's not much more modern than a Kickstarter game. Someone will say "how about a game that avoided Kickstarter because that bubble has burst," but let's not be cynical. I like to point out that Hadean Lands got 700 backers and $31000 in 2010, whereas Thaumistry got 1000 backers and $35000 in 2017. That makes the Kickstarter audience for parser IF look awfully stable, doesn't it? But my very rough comparison of the backer lists doesn't convince me that they're the same crowd. The lists overlap some, but they're not primarily the same group.
I don't know what the moral of that is. I backed the Thaumistry KS, in case you're wondering.
What I'll say is that even though Bates is a generation older than me, Thaumistry was constructed within the context of modern IF. I recognized many of the names who tested the game and helped develop the app. I was around when Bates asked coding questions on the intfiction forum. He used TADS 3; he took advantage of a modern parser. The game lays down prose as needed, free of that 1980s sense that every word is a precious commodity. (Or the late-1970s sense that every letter is! Ah, Scott Adams.) It understands that X is short for EXAMINE. It lets you UNDO three whole times in a row.
The game adheres to that principle (more modern than Infocom, but older than Myst!) that the player should not have to worry about getting stuck in a corner and needing to start over. There is one spot where you can die but it's heavily signposted. ("Now might be a good time to save your game," the game says. Even if you don't, UNDO has you covered.) It also supports autosave, which is absolutely necessary for any modern game -- not just IF!
And yet, with all this, Thaumistry feels... old-school. Not the implementation (solid) or the puzzles (reasonable) or the writing (energetic, usually funny). It's about the way the protagonist is presented. Or not presented.

Sunday, September 17, 2017

Meanwhile: now in development for Mac and Windows

I wrote that long post about SkiaSharp in Unity, but I never answered the question: what kind of Unity project am I working on, which requires vector outlines and polygons?
Here's your hint:
Almost six years ago, I released Meanwhile: an Interactive Comic for iPhone and iPad. I've since ported it to Apple TV, but folks without Apple hardware have been forced to live without it. (Or to buy the hardback graphic novel, which I admit is a fine alternative.)
But relief is in sight! I have started building a Unity port of Meanwhile, and am working towards a Steam release for Mac and Windows.
For those who aren't familiar with Jason Shiga's nonlinear tale of mad science:
On the way home from the ice cream store, little Jimmy discovers a mad scientist’s wonderland: an experimental mind-reading helmet, a time machine, and a doomsday device that can annihilate the human race. Which one would you like to test out first?
Meanwhile is not an ordinary comic. You make the choices that determine how the story unfolds. Meanwhile splits off into thousands of different adventures. Most will end in doom and disaster. Only one path will lead you to happiness and success.

Sunday, September 10, 2017

Aporia: design ruminations

I occasionally repeat the mantra, "All game genres hybridize over time." Today's example is Aporia: Beyond the Valley, which presents itself as a Myst-genre puzzle adventure game. Okay, it's a graphical adventure game and it's got puzzles, but I was surprised at how much it didn't remind me of Myst. (Or that genre's modern exemplars, like Obduction or Quern.) Aporia reminded me of several different games, in fact, at different points.
The game opens with an extended introduction which I would call "linear" if that term weren't entirely dessicated. It is, at any rate, an amble down a trail of minor obstacles, geared to teach you mechanics rather than work your little grey cells. Fine; every game starts that way. But Aporia's intro is long enough to let you assume that you've got the rhythm of the entire game. Paths branch just enough to give you the sense of exploration, without letting you miss the next locked door or the key that opens it.
So that's not quite Myst / Quern / Obduction. The usual adventure formula gives you a small introductory area, and then throws the gates open on a world of puzzley madness. Aporia's guided exploration (with wordless narrative and a bit of resource-foraging) is more like, say, Ico. I don't mean it has combat or serious platforming; I just mean the shape of the map. Complex geography with a clean route through to the next area.
Then you pass through a major building, and the gates are thrown open on... a world. The valley. This is a game about a valley, remember? And the valley is enormous, wide open -- a puzzle shrine here, a puzzle building there, but primarily hills and rocks and waterfalls and trees and marshes. You've gone from Ico to Shadow of the Colossus.
That's not the usual adventure formula either, is it? I love open-terrain exploration, but coming from the Myst mindset, I suddenly wanted to wail: guide me! Show me a shiny beacon of goal in the sky! Where's the next locked door? Where am I supposed to solve?

Friday, September 1, 2017

Late Mysterium news roundup

Mysterium was the weekend of August 5th in Orlando. I didn't go, and I had trouble with the Twitch stream so I couldn't watch the presentations either. Happily, the team has gotten the videos up on Youtube, so I've been able to catch up on the Cyan Q&A.
Every year Rand Miller makes himself available for a chat with the fans. This year he was joined by Ryan Warzecha and some of the other art and production people at Cyan.
These Q&A sessions generally don't produce earth-shaking announcements, but there's usually a few interesting bits of company background and hints of what's to come. I've transcribed the niftiest; you can watch the whole 90-minute video if you want. Just remember that it was recorded a month ago.

Wednesday, August 30, 2017

Your load is too heavy: Zork deep reading

This past weekend a screenshot went around Twitter (my part of Twitter at least!)

weight = num_items * Max_held_mult;
  if( weight <= random(100) ) ?label8;
  print "You're holding too many things already!";
  new_line;
  rfalse;
.label8;
  move noun to player;
(-- @icculus, Aug 26)
The clear reading of this code (as the screenshot says) is that the inventory limit in Zork 1 is random, not a fixed number of items. Each item you pick up makes it more likely that you'll hit a "holding too many things" error. But since it's a random chance, you can just try again -- it might work next time.
This was passed around in a commentary cloud of "This game was unfair," "games in the 80s were terrible," and so on. (See this NeoGAF thread, for example.)
This is fascinating! I played Zork, as I played all the Infocom games, and I didn't remember this inventory detail. It felt dimly familiar when I was reminded of it, though.
Research time!

Monday, August 28, 2017

Using SkiaSharp in Unity

For the past two weeks I've been trying to make SkiaSharp work inside Unity. It has been zero fun but I got it to work. Painfully and creakily, but it works. I suspect I'm the first person to do this so I'm going to document the process here.
Yes, this is for a game project. I'll let you know when it's closer to release.
Background: Skia is an open-source 2D graphics library from Google. It lets you fill and stroke vector shapes (polygons, circles, spline curves, text). 2D graphics features are easy for native apps and web pages, but Unity doesn't have any such feature.
(There's LineRenderer but that's very limited. No polygon fill, no true curves.)
Skia is a native library -- you can download compiled libraries for Mac, Win, Linux, etc. Then the Xamarin people created SkiaSharp, which is a C# wrapper for Skia. Problem solved, right? Drop the library into Unity, build Mac and Windows apps, go.
Nope. It was a headache. But I made it work, in a very clunky way.
UPDATE, SEPT 4: Many thanks to Marshall Quander, who read my original blog post and clued me into the right way to set things up. Or, at least, the less-wrong way. This post is much shorter now!
I'm not going to describe every blind alley. (See the end of this post for a taste.) Instead, I will give a recipe for creating a tiny Unity project which displays some 2D graphics. Follow along!

Sunday, August 27, 2017

System's Twilight emulator packages

A couple of weeks ago I promised to set up emulator packages to play System's Twilight on modern machines. These are now ready!
These packages are based on Mini vMac, an open-source classic Mac emulator. Special thanks to David Pfaltzgraff-Carlson, who set up Cliff Johnson's puzzle games using Mini vMac in this manner. I just copied his package configuration.
(Yes, these packages include an unlicensed Mac ROM. The ghost of Steve Jobs can come yell at me about it.)