Puzzlehunts: Afternoon at Isotope

Other #terngame2013 sites:

On Thursday, June 27th I helped run Terngame 2013. This was an afternoon-length Hayes-Valley neighborhood-scale puzzlehunt for work. It was named "Terngame" in honor of our excellent summer interns, but was open to full-timers, too.

I spent most of it site-monitoring at Isotope, the Comic Book Lounge. This was a good place to hang out, but a little nerve-wracking; if players destroyed the place, would I still be welcome to buy comics there?

The Call to Action

Back in mid-April, I was sitting at work, minding my own business, taking a break from technicalling and writing to check email. There was mail from Jan Chong, asking a few folks who she knew were puzzlehunters: Did we want to run a puzzlehunt for the interns?

Work folks might think of Jan as an engineering manager; Puzzle-hunt folks might know her as one of Coed Astronomy, the puzzlehunt team who'd run the No More Secrets weekend-long The Game game and a BANG-made-from-Iron-Puzzler-puzzles and one of my favorite games ever, the "Leisurely" SF Minigame. But I knew more: I'd attended events where puzzlehuntists gathered to gossip. I'd listened when her teammates talked about her behind her back. They'd said... "Everything just goes really smoothly." When they'd worked on Jan-less hunts and someone made some last-minute janky change that broke, they'd told each other "This never would have happened if Jan were here."

I was busy. That influx of interns wasn't just inspiring puzzlehunts; it was demanding documentation and other technical writing services. But... When might I next have a chance to work with the legendary-albeit-in-limited-circles Jan Chong? So I signed up.

I was glad I did. Everything just went really smoothly.

Game Control

There was me. There was Jan. Trisha Quan had attended puzzle-friendly school CMU and had kept up puzzlehunting when she came to San Francisco. Trisha knew a sizable fraction of folks at work; she assembled an excellent crew of playtesters. Tiffany Dohzen had played in some local hunts. She put her design skills to work to design not just a good-looking puzzle but also our poster (itself a puzzle). (We went on to rip off the poster's design elements to decorate our puzzles.) Robert Harris had impressive bona fides; he'd played on Team RadiKS back in the day. He'd do some playtesting, but would drop out before game day when work rose up to consume his time; he was the only one of us not to write a puzzle.

We started in mid-April; the game was in late June. We met once a week to present prototypes, figure out logistics, and the like. At each meeting, we'd figure out things that needed doing; Jan would post a to-do list and we'd pick items from it. At a couple of meetings, one or two folks from TwitterU, the university relations/recruiting team showed up. They were doing the hard work of promoting the event: sending out emails, posting posters, handling questions from confused people.

TwitterU really came through on game day: they monitored several sites and checked entries for our photo scavenger hunt. They took to puzzlehunt GC like ducks to water. I went up and visited with them the evening before game day. We talked over the puzzles; I thought I was going to tell them how the puzzles worked; they caught me in mistakes. Those folks were on the ball.

Afternoon at Isotope

I'd written a puzzle featuring some cartoon characters. Where better to present it than at Isotope? I'd first visited it while preparing for a puzzlehunt. It's not just Hayes Valley's local comic store; it's also known for its welcoming atmosphere and friendly proprietor, James Sime. So I asked him if it was OK.

This turned out to be a great idea. I wanted to put up six posters, "covers" to some fake comic books. I had a place in mind to put them; he found a better place, up in his shop's mezzanine. On game day, he greeted teams as they arrived and watched them figure out that they were allowed to go up the stairs. And, at the same time, he helped regulars, tourists, and new residents to get their regular comics, discover new comics, and contact the local digital comics scene(!).

What with James' superior greeting abilities, if I'd written a better puzzle, I might not have had much to do. But I'd written something that required American cultural knowledge. If you didn't grow up seeing ads for Cocoa Puffs breakfast cereal, then a puzzle that expected you to recognize its cuckoo mascot was pretty difficult. There were a few teams whose members all spoke with thick accents; I acquainted them with the visual language of American seven-year-olds.

After a while, Trisha came by to say that the last of the teams had stampeded through. We were free to go! Which in my case meant I was free to "clean up." This meant that I took down the posters and finally had a chance to buy this week's comics. (New Comic Day had been the day before, but I'd been busy late with before-game-day prep stuff.)

I hadn't been kicked out. So I probably could still count on buying comics there. Whew!

The Answer Checker App

Here's an easy way to make an answer checker web app for your puzzle hunt: just make some little tweaks to an existing answer checker you already have handy like, say, Octothorpean. Then tweak the UI to hide the parts you won't use. Except it almost didn't go so well.

At first, we weren't sure how we teams were going to sign up. Around this time, we decided Let's not have them log in to the answer checker. This was reasonable: if teams formed at the last minute, asking those teams to figure out a login would have been dicey. So for ternga.me, I hid the log-in UI.

Octothorpean is designed with the idea that serious players will be logged in. E.g., if a team makes more than 10 guesses within a minute, Octothorpean delays its responses (and warns the guess-happy team that it's doing this). But since ternga.me teams didn't log in, I took out that protection.

On game day, one team wrote a simple computer program to guess many, many words quickly on the ternga.me answer checker, just the kind of thing that Octothorpean's delay was meant to discourage. I'd guessed that nobody would try this on the ternga.me, since we were giving away hints (and answers) for free as part of the hunt. But I'd guessed wrong.

Octothorpean is designed with the idea that serious players will be logged in. It stores a lot of data with this in mind. E.g., when a team makes a wrong guess, it stores that wrong guess. This is useful: I can ask for the list of recent wrong guesses. If everyone's guessing that the answer to a puzzle is LINCOLN and it's actually ABRAHAMLINCOLN, the list of wrong-guesses tells me that, so I can tweak the game to say "First and last name please" the next time someone guesses LINCOLN.

So when someone made 100,000 wrong guesses on a puzzle, ternga.me stored all of those. When that someone realized they'd written their script wrong and made another 100,000 wrong guesses, it stored those, too. And there were more hundreds-of-thousands. ternga.me stores a bunch of information with each guess; not all of it makes sense outside of Octothorpean. E.g., ternga.me carefully records the team name—but teams don't log in, so the "team name" is always blank. ternga.me then uses up more storage space by building up an index so that it can sort… those blanks… alphabetically. No, that doesn't make sense; but it does require storage.

ternga.me runs on Google App Engine. It's pretty cheap to run. It's so cheap that I hadn't bothered to authorize much of a daily budget. But over the course of the hunt, thanks to the folks guessing the whole dictionary, that app did about a million database writes; not many, but enough to eat up 2/3 of my daily budget. If those kids hadn't stopped, they would have shut down the automatic answer checker.

This wouldn't have been the end of the world. Jan had made sure that we had a plan B in case the automatic answer checker pooped out. Still, it pointed out that we should do things differently next year: either have teams log in or else tear out some of the over-complex behavior left in there from Octothorpean.

[next]

comment? | | home |