I’ve written a couple of blog posts (1, 2) about particular design decisions for Aspel, a multiplayer game I wrote for Andrew Plotkin’s Seltani platform. Those posts were mostly about how I structured puzzles and information around having multiple characters, touching occasionally on how Seltani’s possibilities and restrictions changed design decisions.
I have a few other thoughts about the platform more generally, about what it’s like to write for.
The overall gist: Seltani offers several obvious and several non-obvious features that made me feel like I was enjoying some of the advantages of Twine (hyperlinked text, the ability to dig deeper into system descriptions, relatively low time/effort cost for embellishing with new details) but had more systemic control. On the other hand, there are definitely some things that it can’t do, and some formatting choices that I understand but am still not crazy about.
I’m not crazy about the multi-pane layout. In Seltani, text describing the location appears at the top of the screen. Conversation and in-the-moment actions appear at the bottom. Descriptions of things you’re looking at appear in a little pop-up window in the middle of the screen. Links to other worlds appear in a sidebar.
For me, that’s at least one panel too many. The sidebar doesn’t bother me too much — I can mostly ignore it when I’m playing, as it’s a navigational aid that’s chiefly relevant when I’m picking a new realm to visit — but the top, middle, and bottom panels split my attention for game content.
It was only after I did some work as an author that I understood why it was all happening that way: you need the middle panel to exist because links aren’t allowed in the bottom panel, and sometimes you want to look at an object and have that object’s description containing links that lead you on to further object descriptions. However, if you added that stuff in the top panel, it would quickly overflow, and the whole idea is to have a persistent location description always available. Meanwhile, the bottom panel has no links because it’s the panel with persistent scrollback, so if you put links there you would also need some way of telling the system when the functionality of those links should expire.
When I’m playing, though, I find it disconcerting the way text can appear unpredictably in either of several places in response to a click. It also makes it difficult to imagine what a transcript for Seltani would even look like. On which note…
I miss scrollback. Lots of Twine games don’t have scrollback to speak of, but many text games do, especially ones with a heavy puzzle emphasis. In Seltani, there’s a small amount of scrollback to allow you to review what’s been said in the chat window recently, but a) it doesn’t go very far and b) it doesn’t include all the text that you’ve seen recently, so vital information can easily be lost.
This is tricky to play with and it’s also kind of tricky from a beta-testing perspective: you really can’t ask a tester to send you a transcript, because there’s no such thing, even if you had a tester dedicated enough to copy and paste diligently.
I miss being able to move objects trivially. Objects in a Seltani world are typically defined via a series of fields in the location in which they appear. Which is fine, until you decide that the prop you put in the Long Hall would really be better placed out in the courtyard. That’s the kind of tweak I make constantly when I’m building an Inform game, where it’s a matter of copying and pasting something to another place in the code (usually only in order to keep the code organized, since functionally it will usually compile anyhow) and changing a couple of words specifying the item’s location.
In Seltani, you can copy and paste an item description to a new field on a new location, yes. And that’s a little bit more work, but not grotesquely so… unless you’ve also already coded a lot of behavior for that item. Then it starts to get ugly.
Zarf has mentioned that there may eventually be some export functionality that would allow duplicating or moving fields from one location to another, but for right now, that’s how it is.
I don’t really miss deluxe CSS formatting so far, but maybe I should. Seltani doesn’t provide many ways to make your project look different, not even at the level of font changes. You can have italics and monospace, and that’s more or less it. There is an option to use a D’ni font, but if you’re not doing Myst fanfiction, that may not be a high-priority goal. You can’t make things funny colors.
And far as I know, you can’t insert images. I did kind of wish there were a way for me to stick in some line drawings in Aspel — I know an artist who would probably be able to do something quite cool with the floating platform at the beginning — but to the best of my knowledge the system just doesn’t go there.
There’s a text randomization feature (woo) but its default behavior is the opposite of what I would default to (eh). Seltani offers a system for expanding templates with randomized content, so you can have text like “The explorer is wearing a [[color]] [[accessory]]” and have it expand out to blue/black/red hat/scarf/hairbow. Tokens can nest, so you can get considerably more complex results than this too; and there’s some nice help with punctuation. However, by default it does this based on a consistent instance seed, so what you see in a given instance is always the same unless the author has gone out of her way to re-randomize.
Since I tend to use this kind of effect less often for persistent scenery than for passing environmental effects, I’d prefer the opposite: a fresh random roll each time the text is printed unless the author goes out of her way to make it fixed. In Aspel, for instance, I wanted to have some timed random behavior in a chamber that contained NPCs, so naturally I didn’t want it to repeat the same sentence again and again; I wanted a different sentence each time.
Still, you can make it do what I want; it’s just a little more effort.
Code inclusions. There’s straight-forward access to code blocks, which allow coding in more-or-less standard Python. I occasionally ran into some points where some bit of Python syntax I’m used to wasn’t covered by Seltani, but mostly it was transparent. Using this functionality, I was able to code for myself the behavior of one of the standard Twine word-cycling macros in about five minutes. After which I could always see how it worked and could tweak that working for myself if I needed to. Win. (This is in a WIP, not in Aspel, but if people are interested when it’s done I can share the code for that.)
I know, you can do macros in Twine, but in my experience this is such a black box that one is usually pasting something found on the internet into a special code node and then hoping one never has to touch it again.
If you’re code-averse, you don’t have to use this option: you don’t need to write any code to make basic things happen in Seltani.
Realm properties. There’s a clear place to put global realm behavior that you can access from any of the subordinate locations. That gives me a sensible place to organize reusable verbs; it’s also where I do any inventory implementation sorts of things. This still requires that each location explicitly use those hooks — if I’ve written realm-wide inventory listing, I still have to explicitly put “[[inventory]]” into the end of each room description — but it helps, all the same. It would be even niftier if there were hooks so that I could have realm-defined text appended to the beginning or end of a room description, but let’s not get greedy.
Debugging. Choice-based game systems don’t always offer much access to the underlying world model (if there is one) during play. As an author, you can always lard up your game with print statements that report variable information, but this is a clumsy and inelegant solution compared with more systemic tools. In Seltani, because you are allowed a text entry window (where you would normally chat with other players), you also get some debugging options to check property values and run arbitrary commands.