Scaling Up the Spy Game

Back in November, I wrote a game about spies to be played using SMS messages at a cocktail party. There’s an extensive writeup of my design and build process over at my Hacker School blog, but in summary, how the game worked was:

  • There were approximately 10-15 players at a casual cocktail-oriented birthday party.
  • When a new player arrived, they received an agent number to keep secret.
  • At irregular intervals—basically, whenever I felt like it—all active agents received a text message with a new code word. They were encouraged to surreptitiously insert the word into conversation. Code words were not re-used.
  • If an agent thought another agent was using a code word, they could report the word by texting it in. The accused agent would then receive a text telling them that either “enemy agent [number]” or “friendly agent [number]” had intercepted the message; ideally, agents could use a process of elimination to discover other agents’ numbers and attempt to only use their secret words around established friendly agents.
  • At some point, I also opened up the ability for agents to text each other based on agent number, so they could message an agent without necessarily knowing their identity.
  • The endgame was supposed to be that agents would have to reveal an enemy’s identity to qualify for a slice of birthday cake, but my understanding was that the cake was so delicious-looking that they ate it early.
  • The rules were communicated solely through the text messages the players received.

More recently, I was talking to my friend Rebecca about Hacker School, and I mentioned this game. Rebecca manages the MAKESHOP at Children’s Museum of Pittsburgh and she also loves spies: she was excited to let me know that the next MAKEnight was going to be spy-themed! (MAKEnight is an after-hours 21+ event at the MAKESHOP; it generally features good food, fancy booze, and a variety of fun maker-y tasks.) She thought my game would be a fun addition to the night, and I was delighted to have another test audience.

But the rules needed a rewrite: the original rules weren’t as easy to follow as I’d hoped, and they were written for a small group of close friends, not a larger group of probable strangers. Trying to remember a list of agent identities is much easier with a small group size, and the direct texting mechanic in particular would work best for people who could make guesses about which friend they were talking to. (Also, direct texting has potential for creepiness with strangers.) And I wanted rules that would work better with people dropping in and out.

Rebecca and David volunteered to help with the rewrite. We had a long and lovely conversation hashing out various possible systems of allies and code words. We even discussed some low-tech Mafia-esque variants that might make for fun summer camp games if properly written up, but we really wanted to keep the magic of the SMS aspect for MAKEnight. In the end, we kept the basic “goofy code words” mechanic, but rearranged pretty much everything else. Here are the v2 rules:

  • There were approximately 50 people who decided to play, amidst a flurry of other activities.
  • When a new player arrived, they chose their own agent number as a sticker that they wore visibly.
  • They texted their agent number in, and received a list of code words that friendly agents would also be using. (For MAKEnight, there were ten teams with four words each.)
  • If an agent heard a friendly agent (using one of their own code words), they could text in the friendly agent’s number and both agents would be rewarded. If an agent heard an enemy agent (using a suspicious word), they could text in the suspected enemy’s number along with the word; the agent would be rewared and the enemy would lose points. Incorrect reports would cost points.
  • Scores and spurious reports were projected in a public place. (At the end of the evening, the highest-scoring players would be giving a MAKESHOP-decided award.)
  • The rules were written on a handout, and I explained them to each new player.

One more bit of polish was that I was even more careful about the words I selected to be secret words. I’d tried in the first iteration to use words that were easy to spell, but one slipped through with an alternate spelling (“sulfur”) and a few reports had the right word but the wrong tense, and that was clearly frustrating. This time, I wanted to pick words that could only be spelled one way. That meant no verbs (with different tenses), no counting nouns (that could be pluralized), and nothing with regional spelling variations. They needed to be sort of funny without being obvious, and lastly, they needed to be words that were generally going to encourage conversations that would be fun for all the participants. I’m not going to give away my full list here, but here are the wordlists that were in play for MAKEnight:

[
    [
      "fancy",
      "mellow",
      "algebra",
      "tiny"
    ],
    [
      "local",
      "dreadful",
      "sweet",
      "math"
    ],
    [
      "jovial",
      "glib",
      "sheep",
      "sharp"
    ],
    [
      "viral",
      "scissors",
      "monopoly",
      "tropical"
    ],
    [
      "hollow",
      "cinnamon",
      "vintage",
      "vocal"
    ],
    [
      "fluffy",
      "magenta",
      "pants",
      "theatrical"
    ],
    [
      "sweet",
      "arctic",
      "slippery",
      "soap"
    ],
    [
      "luggage",
      "sparkly",
      "mushy",
      "salt"
    ],
    [
      "custard",
      "chance",
      "cotton",
      "thrifty"
    ],
    [
      "lucid",
      "swift",
      "juice",
      "velvety"
    ]
  ]

The game went surprisingly well. Or rather: I was expecting a burst of activity at the beginning but not much sustained interest as people found other fun things to do, but the actual pattern was more of a constant slow burn. There was only a report every three minutes or so, but that pace kept up throughout the three-hour event. People seemed to understand the rules, though as usual they tended to only reluctantly read the written version.

Perhaps the award for cleverness (cheekiness?) goes to the friend who noticed that the spurious reports were being posted on the public leaderboard in reverse chronological order, and sent in this series of reports:

23:39: Agent 16 spuriously reported Agent 32 for the code "points"
23:39: Agent 16 spuriously reported Agent 32 for the code "of"
23:39: Agent 16 spuriously reported Agent 32 for the code "lot"
23:39: Agent 16 spuriously reported Agent 32 for the code "a"
23:40: Agent 16 spuriously reported Agent 32 for the code "costs"
23:40: Agent 16 spuriously reported Agent 32 for the code "board"
23:40: Agent 16 spuriously reported Agent 32 for the code "the"
23:41: Agent 16 spuriously reported Agent 32 for the code "on"
23:41: Agent 16 spuriously reported Agent 32 for the code "stuff"
23:42: Agent 16 spuriously reported Agent 32 for the code "putting"

The mechanics were different enough that I rewrote most of the code for this iteration, but the basic tech remained the same: Twilio communicating with a Flask app running on Heroku with MongoDB. Since I wasn’t in any less of a hurry, the code isn’t any less of a mess—in particular, I’d rewrite the leaderboard frontend before running this again. But it is, as usual, available on github.

| Code, Game