The Secrets Game (idea)

Sunday, February 20, 2011

Comments: 4   (latest February 12, 2014)

Tagged: echo bazaar, casual rpgs, secrets, game design, text generation


A while ago, Emily Short posted an online chat that I was involved in:

zarf says, "(this reminds me that I should write a blog entry about that MMO prototype that I never did anything with)"

zarf says, "the secret plan that I never did anything with was to combine the window dressing with a power law of frequency, so that the room descriptions are random but one particular random room is your home base and you see it more often"

I was referring to a gameplay prototype that I came up with back in September. The idea was for a casual MMO-RPG -- something on the level of Kingdom of Loathing or Echo Bazaar. I didn't create an online demo, though. I just wrote an interactive Python script to try out the gameplay and the text environments.

You have dreamed of this for years -- who has not? But now it's in sight. You're not bogged down in the World any more; you've reached the gates of the City.

"Welcome to Mezzohaus -- the City of Secrets."

...Or that's what's carved over the archway as you approach. You frown; wasn't this place called "Middlehorst" in the old stories? Probably vandalism. Never mind.

Why here? Because you need the City. Why you? Because you belong here: you hold your own secrets. The blood of the Martians flows in you, and that will give you an edge. You know only scraps of Martian lore; but even the smallest secret is coin here.

You pass beneath the arch, and the stink of Mezzohusse's docks rolls over you. Pheugh -- but it's a place to start. You turn, at a thought, for one last look out at the World.

There is no archway behind you. You see only a battered iron door, tight-locked, in the side of a shambled building. Fluttering on the lintel is a note, which you pull free. It reads: "The first secret is to wait and watch."


This may strike you right away as an Echo Bazaar rip-off. The setting is a mysterious city, and the gameplay is all about trading secrets. In fact I was inspired to pick up the idea by reading Emily's posts about EB, though I've never played EB myself. However, this is an iteration of a design I've been toying with since 2004. I never got far with it; I still haven't. (Last fall, of course, I put my prototype aside for the Hadean Lands kickstarter project.)

But I like the way the text generation came out. So imagine you're reading the above text in a nice Web interface, along with a nice pen-and-ink illustration maybe, and it's followed by this option:

You stand on the edge of The Docks -- a mazy expanse of piers, wharfs, warehouses -- all of low character. Surely not all of Mezzohusse is this unprepossessing? But this is where you must begin.
  1. Explore The Docks

It wouldn't be a numbered option on the web page, but I'm pasting in my test script's output directly here. You'd also have an inventory listing:

You know 3 secrets:
  • The first secret is to wait and watch. {not tradable}
  • The name of the city is Mezzohaus. {4}
  • You've found The Docks. {not tradable}

So you select "Explore The Docks":

> 1
You wander through The Docks, until you come to...

Boat Run {2}

You stand on a long splintery dock, by a dockside. The wharf is littered with bits of paper, and a rowboat is tied up nearby.
  1. Wait and watch (in Boat Run)
  2. Continue exploring The Docks

The numbers in brackets are the value of the secrets. Knowing the city's name is worth 4; knowing the location of the Boat Run is 2. Again, this is rapid-prototyped UI, not real game UI.

Following the "wait and watch" advice:

> 1
You loiter around Boat Run. Eventually you notice someone...

Meeting Tall Abdul {3}
  1. Trade a secret (with Tall Abdul)
  2. Return to Boat Run {expired}

> 1
You have 3 secrets you can trade to Tall Abdul:
  1. The name of the city is Mezzohaus. {4}
  2. You know how to find Tall Abdul (in Boat Run). {3}
  3. You know the way to Boat Run (The Docks). {expired, 1/2}

Trade which secret > 1
Tall Abdul nods attentively, and then tells you...

Love is like a bucket.

Meeting Tall Abdul {2}
  1. Trade a secret (with Tall Abdul)
  2. Return to Boat Run {expired}

> i
You know 6 secrets:
  • Love is like a bucket. {4}
  • You've found The Docks. {not tradable}
  • You know the way to Boat Run (The Docks). {expired, 1/2}
  • You know how to find Tall Abdul (in Boat Run). {2/3}
  • The first secret is to wait and watch. {not tradable}
  • The name of the city is Mezzohaus. {3/4}

The core mechanic is that secrets aren't a currency. When you trade a secret away, you still have it... but it's less valuable for being more widely known. So the fact of knowing Tall Abdul is itself a secret which you can trade in the game. (Though not to Tall Abdul, obviously!) You don't lose access to him if you do this; he just becomes less of a secret.

But the reason I bring all of this up is that all the specifics you've read so far are procedurally generated text. The description of the Boat Run, the names of the city and of Tall Abdul, even the secret "love is like a bucket." (In the latter case, I wasn't trying very hard to be profound! It might equally well have been "death is like a dream.") To see more, let's go back and explore further:

Boat Run {1}

You stand on a long splintery dock, by a dockside. The wharf is littered with bits of paper, and a rowboat is tied up nearby. This place seems abandoned.
  1. Wait and watch (in Boat Run)
  2. Meet with Tall Abdul
  3. Continue exploring The Docks

> 3
You wander through The Docks, until you come to...

One Trout Course by Crate {2}

A pair of warped piers line this disused waterfront.
  1. Wait and watch (in One Trout Course by Crate)
  2. Visit Boat Run {expired}
  3. Continue exploring The Docks

> 1
You loiter around One Trout Course by Crate. Eventually you notice someone...

Meeting One Foot Dave {3}
  1. Trade a secret (with One Foot Dave)
  2. Return to One Trout Course by Crate {expired}

Now we have a different location, with a new person. (The original location, the Boat Run, is "abandoned" because we've overused it -- its value has declined to 1.)

> 1
You have 6 secrets you can trade to One Foot Dave:
  1. Love is like a bucket. {4}
  2. You know how to find One Foot Dave (in One Trout Course by Crate). {3}
  3. You know the way to Boat Run (The Docks). {expired, 1/2}
  4. You know how to find Tall Abdul (in Boat Run). {2/3}
  5. You know the way to One Trout Course by Crate (The Docks). {expired, 1/2}
  6. The name of the city is Mezzohaus. {3/4}

Trade which secret > 1
One Foot Dave nods attentively, and then tells you...

"I know this person on One Trout Course by Crate."

You know how to find Tall-Foot Tom (in One Trout Course by Crate).

Meeting One Foot Dave {2}
  1. Trade a secret (with One Foot Dave)
  2. Meet with Tall-Foot Tom
  3. Return to One Trout Course by Crate {expired}

The game proceeds by meeting more and more interesting people, who know more and more interesting secrets. Those secrets, as you see, include more locations of people. Eventually they require more work for trades -- "I'll tell you about location X if you find person Y for me", that kind of thing.

The point, however, is that a series of locations can be procedurally generated, but still feel fairly distinctive. Let's find a third location:

You wander through The Docks, until you come to...

Empty Crate Street {2}

A long dock thrusts out from the dockside here.

You can see "dock" and "dockside" as repeated elements, but the setting still has some oomph.

I haven't done any real testing at all. But I can attest, of my own experience, that the prototype really started to come alive when I added the NPC names. At first I had "Person 1", "Person 2", and so on -- running through the quests felt like turning a crank. But when they were named One Foot Dave and Sneaky Cass, it felt like experience. I'm sure if I'd gotten around to generating physical descriptions of the NPCs, it would be even better.

Obviously, if you encountered a long list of these generated descriptions, the illusion would fray. Let me put the description-generator in a loop:

The muddy seawall here sports a warped dock.

A pair of slender barnacled docks thrust out from this wharf. Decaying posts march down the seawall.

This dockside hosts only a pair of warped, splintery docks. The wharf is littered with bits of wood and rope; a pile of moldering crates stands not far off.

A long barnacled dock thrusts out from this stretch of seawall.

A narrow pier thrusts out from this muddy seawall. A pile of crates molders close by.

This length of shoreline hosts only a couple of narrow, shoddy docks. A pile of disintegrating crates stands not far off.

A barnacled pier thrusts out from this length of shoreline. A pile of crates molders nearby; bollards march down the seawall.

A splintery pier leans from this disused shoreline. A pile of crates molders close by.

A few narrow shoddy piers line the seawall here.

A couple of long piers lean out from the wharf here. Hunched, dingy warehouses loom not far off, and an illegible signpost stands nearby.

You stand on the ancient shoreline here, looking out over warped piers. An unreadable signpost stands close by.

A few long shoddy piers lean out from the dockside here.

You stand on a rotten pier, just off an ancient seawall. An illegible signpost stands nearby.

A heavy rotting pier leans from this ancient stretch of seawall.

A heavy rotten pier juts from the waterfront here. A pile of crates molders not far off.

Reading down that list isn't like playing a seaside IF game. It palls quickly. I guarantee that you skimmed most of it.

But the point of the power law is that you wouldn't encounter a long list, not all in a row like that. If you explore the Docks repeatedly, you wind up returning to the same handful of locations over and over. You'd be going back and forth between the Boat Run, One Trout Course, and Empty Crate Street. New places don't appear until you "use up" old ones. And the game mechanics make it pointless to keep revisiting old, valueless locations.

So you always have this small region of interesting areas, which change slowly over time. If the game mechanics are clever enough (I never got that far), they would change at different speeds: you'd have a "home base" which was very familiar, some common haunts that changed perhaps once a week, and more transient locations that you visited for a day and then moved on. The same is true of characters. You'd have some regular liaisons and some one-off trade partners. So Tall Abdul would become a well-known character to you, even though (from the game's point of view) he's just a generated node.

The intent isn't to fool the player. If you play this game for a while, you realize that the descriptions are not all hand-written. But I think this approach can maintain the feel of a well-written world, without requiring that effort for every single description.

Naturally, this would all lead into hand-crafted segments. Make enough progress in the Docks, and you will eventually (statistically) stumble into the first Docks storyline. The same gameplay would be the same -- you'd be meeting people, looking for secrets, and trading them. And you'd go back to your familiar locales and contacts to get the resources (the secrets) for the storyline quests. But you'd get those unique elements distributed through your game experience.

Just like any other RPG: there's grinding and there's storyline. The goals here are (1) to integrate them better; (2) to give a little bit of unique color to every single "grind" action; and ultimately (3) to let the player suspend disbelief in the mechanics and feel immersed in the world.

(For added fun, the game designers might comb through each day's logs of generated text, looking for new story ideas. Or just pick a few nodes to receive special attention. So there's a small chance that Tall Abdul would turn up in a story quest, or say something new to you tomorrow! I think that would add a lot of pizzazz.)



Comments imported from Gameshelf