Writing for Seltani: an Aspel Post-mortem

Screen Shot 2015-05-05 at 10.42.07 AM

Seltani is Andrew Plotkin’s platform for multiplayer choice-based IF. He’s written about it and its world model here, and we had an IF discussion club meet in/about it, from which the transcript is available. I’ve also been kicking around some ideas for multiplayer IF for a while, in one form or another, which I’ve previously written about with respect to Guncho and to Velvet Sundown. Versu also spent some time in multiplayer testing though that feature never reached the production phase.

So I thought I’d see what I could do with Seltani. In my view, the Seltani realms I’d tried so far, though entertaining, were essentially single-player realms where it just happened to be possible to have some collaborators along as buddies; whereas I wanted to do a story where having multiple players was critical to the way the game played and felt. (Edited to add: Barbetween is sort of an exception, but it is asynchronous, so that players never meet one another in the realm.)

Herewith is part 1 of a multi-part post-mortem of Aspel, because it turned out that building and then iterating on this over the course of Spring Thing produced a lot of discoveries. Many thanks to everyone who came along, played, and gave feedback (or just through action showed what was working and what wasn’t): it was a great help.

Things I considered that did not get into the game because of either time or the restrictions of designing for Seltani:

1. options to help or harm other players. There are a couple of points where you can see the scaffolding for this. It’s hard-bordering-impossible to have actions that directly affect other players in Seltani, but I realized you could do booby-traps: set up the qualities of an object so that the next person to interact with it would be hurt or killed by it. I had considered letting players loosen the creaky rail of the airship, for instance, or poison the honeycakes or other consumables. That sort of thing. But, other than as a prank, it wasn’t clear to me that this would really be helpful, and I thought that maybe really it would be more confusing than cool, because I also didn’t have a lot of…

2. individual narrative goals for different players. There’s a little bit of this (and most of it was added after Tour 1), but there’s not enough to establish strong and distinctive player motivations, partly because there’s just not enough time. When players have other players around, it seems that they want to be doing stuff together, not lengthily exploring backstory options; even when it comes to the limited amount of character-building stuff that Aspel does supply, some players told me they felt they didn’t have time to take it in fully.

People have suggested several possible solutions for this. Set the game in an established trope-land so that it’s easier for people to get into roles. Provide a single-player prologue game for people to go through in advance. Send out feelies establishing background.

But I have mixed feelings about whether I actually want to do this backstory stuff as secret, private, individual work. Tabletop storygames usually start with (sometimes rather extended) backstory establishment, but you get to see and hear what everyone else is doing, which helps place their roleplaying in context. There’s room for a lot more exploration here.

I also found it challenging to build:

3. shared decisions in which people vote on the outcome and what they collectively decide then happens

In Seltani, players can enter and leave (and reenter) a realm at any time. You also cannot restrict the number of players entering a global instance and you cannot require an instance to be “full” before gameplay starts.

All this means that it’s fragile to make triggers depend on whether each player has taken an action. If you set it up as “did everyone who entered this realm during this session make a choice/take a role?”, then that’s vulnerable if people leave. If you set it up as “has everyone currently in this realm made a choice?”, it can fire prematurely if anyone leaves, and also it is vulnerable if people go idle (which they did, during both of our first two sessions, because people have lives and stuff happens away from their keyboard and what can you do).

So for all those reasons, it’s really hard to do voting for decisions or narrative hooks where each player is handed or forcibly chooses a particular role. You’re left with softer forms of enforcement: voluntarily assumed roles, loosely-accounted joint decision-making. There is a sort of voting mechanic in Aspel, but the final decision is taken in a soft conversation with the Empress of the realm — though your vote affects your conversation options in that scene. That’s because I could construct the Empress scene to be a lot more forgiving.

Things that got in, but didn’t quite work as intended:

1. small modifiable aspects that intentionally did not get reset between games, which would allow player groups to leave a few little fingerprints on the world for future players. The Lightning room contains a label which you can overwrite to indicate whom you’d wish the lightning to strike. I had imagined people might fill this in in various imaginative ways. And indeed I got an interesting jolt at one point when I entered Aspel thinking no one had been there yet, and found that someone had changed that label.

But it wasn’t perfect. The first team to play the game filled it in with the names of some dead soldiers mentioned in another room, thinking this might be a puzzle solution. The second team saw and recognized that fact and thought it was narratively meaningful. So “leave fingerprints on” became “leave red herrings in”.

2. jokey bits where people saw one another do goofy things that they could react to.

When one person consumes magic-memory-inducing flesh, other people see… odd things:

Doug Orleans picks up a ritually cleaned fish and eats it raw. He looks dazed and stands stock still with his mouth open for several moments. Pale blue bubbles come out of his ears.
Doug Orleans says, “aha, there’s a sunken city here, Altanas”
joshg says, “Sir, you had bubbles emerge from your ears”
joshg asks, “Are you sure these aren’t hallucinogenic?”

This worked as designed in the small groups, prompting small role-playing moments. It worked less well in large groups, because when multiple copies of a flesh-type were available, most people wanted to try them for themselves, which meant lots of repetitions of the same weird actions. These then became unfunny and it was not worth roleplaying responses.

3. small multi-room pacing puzzles where people can see the effects of people acting elsewhere.

There’s a pretty simple light puzzle that requires the players to have done something in one room before being able to see in another. In single-player IF, the purpose of such a puzzle would be straightforward: make sure that the player was acquainted with the idea that the palace was built by people who could wield lightning, before showing some of the aftereffects of this.

In multiplayer IF, that doesn’t work at all. In most runthroughs, one person had turned the light on before a totally different person stumbled into the lit basement. I don’t think they were ever aware that they’d solved a small puzzle here, and to the best of my knowledge, they also didn’t discuss what had happened.

The puzzles that worked best appeared to be the ones where all the components were in scope at the same time, so that the players who could see any of it could see all of it. This situation slightly improved when I added the team journal to Aspel — but I’ll cover that later.

Next time: more on what I changed during the Spring Thing period as I iterated on this project.

11 thoughts on “Writing for Seltani: an Aspel Post-mortem”

  1. Regarding “things I considered #2”, perhaps more fundamentally I didn’t know straight out of the bat of what kind of roleplaying rules where being used. Was this a straight up no-OOC, like we were actors in a LARP, or were we more like tabletop players in a d20 game where we discussed things as ourselves with moments of character, or was it some in-between state like an improv play? (Reading things over, it is pretty clear you meant the first option, but that’s the sort of thing I want to know before I even click ‘start game’. It’s like not knowing if you are in a first-person shooter or a point-and-click adventure game before you boot it up.)

    1. I could definitely see different players wanting to approach this in different ways, though, and to some extent I wasn’t sure how much I should try to direct that, and how much I should let it emerge as a social contract in individual instances.

      That said, I’ll probably provide a lot more framing for my next experience: if players decide they don’t like the frame or want to subvert it, that’s okay, but at least it will leave people less at sea.

  2. Thanks for starting these posts. I will, of course, be hovering nervously in the comments.

    “It’s hard-bordering-impossible to have actions that directly affect other players in Seltani…” I said “What?” but then I tried to build such a thing. Oh, I get it… The obstacle is not code but the UI model. There’s no obvious way to express “swing a sword *at that other player*”.

    After some futzing around, I managed to construct a game text that says “You could whack [player1] [player2] [player3]…” for all the players in the location, and then respond appropriately for each link.

    What can you *do* to another player? The options are (1) just display a message, (2) apply a property, (3) move them to another room, (4) panic them out (Seltani’s stand-in for *** You have died ***).

    Of these, (2) is most consequential, since the property is permanent (unless cleared by other code) and can act as a disabler.

    1. Yes, exactly. I’d be fine with setting or changing properties, if I just had a way to let players actually select that decision.

      How did you even do ‘“You could whack [player1] [player2] [player3]…”’? I haven’t been able to figure out how to do something that loops over the players in a location.

      For that matter, I think I haven’t managed to do a workable loop in code at all. (“for i in range(0, len(some_list))”, for instance, gets me an error message that “range” is not understood.)

  3. On the voting thing: I’ve said (in email) that my *minimal* solution to the “looking for group” problem is to make it easy to (a) spawn fresh instances of a world and (b) invite other players to your instances.

    This is just a piece of the puzzle, of course. I think the pattern to build on top of that is a world with an “antechamber” location. First N people who arrive in the antechamber are marked as actors. (Variations: Instead take the first N people who click a registration link in the antechamber. Or, accept at least N but no more than M players; fix the actor list when that is true and a button is pushed.) Only actors can pass the antechamber. We assume that the instance can only be played through once, unless the author takes the effort to build a giant reset button like Aspel’s.

    With this model, you know how many players there are. A player who leaves can walk back in, but no new players can join the party. You can easily set up a “death” consequence that sends a player back to the antechamber and revokes their ability to re-enter. You still have to allow for a player who bails and never returns, though.

    This structure can be built today. It’s impractical because of the reset issue, which is where my (a) and (b) above come in.

    (BTW, discussions about Aspel have become a fertile source of bug/feature requests at https://github.com/erkyrath/tworld/issues .)

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: