Writing for Seltani, in general

Screen Shot 2015-05-21 at 7.16.49 PM

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.

7 thoughts on “Writing for Seltani, in general”

  1. Agree. I think all the problems (about too much windows) solves themselves with a traditional buffer scroll window and a hyperlink for “look”.

    I would have only three panels.”Adventure panel” for the traditional text buffer, “the navigation”, quite useful as is. And the chat window, but this later should not echo in-world actions.

  2. I like this scroll-buffer UI idea. I hadn’t thought about it until this post, but now that I have, it’s not such a stretch.

    To be clear, I’m talking about an alternate client UI, not a change to the underlying world model. There would still be a current locale display, a current focus-object display, and a series of event messages. But they’d be combined in a single scrolling window rather than placed in separate panes. Hyperlinks would only be active in the most recent output; they’d be automatically stripped from a section that’s been obsoleted.

    (In theory a player could hotkey back and forth between UI models at will!)

    There would still be some awkward points. Output would be verbose, sometimes outpacing your reading speed. (Imagine examining a complex machine at the same time as someone else is pushing buttons. Your description would be updated frequently — that is, new paragraphs would keep scrolling by. In the current UI these might just be small changes, but in the scrolling UI the whole description would be reprinted each time.)

    I don’t think it’s possible to separate chat from in-world actions. They’re both plain (non-linked) text pinned to a moment in time. They could both be communicative. Also, it’s a planned feature that the world will be able to respond to spoken text, so they’ll eventually blur together anyhow.

    Anyhow, I’ve added this as a suggested feature. Thanks.

  3. I think Seltani needs a complete interface overhaul. It’s cumbersome and stands in the player’s way.

    First, the max-width rule is ridiculous. 900px is too little for 2 columns.
    The chat panel needs only the chat. You can provide 2 tabs: “Realm Chat”, “Local Chat” – it would be just a chat. Also it should be collapsible because frankly it isn’t important or populated enough.
    Does the player need the global preferences on every page? You can hide them in a popup window under a button.
    Also, the World Creator introduces a navigation bar which doesn’t exist in the player interface. Is it really necessary?

    At least consider this CSS: https://paste.sh/R6_GwreB#RbDFaFy-HQVu2AjgwZjASIWN

  4. The instancepane is a pane that I found particularly easy to miss, but it could be a nice place to put inventory if you can somehow get the player to notice it’s there.

    Right now I’m using the instancepane for a compass rose, which is nice because its location doesn’t shift around on the screen when the room description changes.

    1. The instance pane is definitely suboptimal. I intended it to manage inventory, or even a map if I ever get around to adding image support. But the pane is near-invisible and its size constraint (the right-hand column) would suck for a map.

      Put it in the main column above the room description? Switch to a true three-column layout? I don’t know.

      (N.b.: I omitted image support because I didn’t want Age-building to turn into a graphical art contest — setting people who could make nice landscape art above text-only slobs. Of course that was all guessing on my part about how Seltani might turn out. It’s not a big concern for me at this point, and it doesn’t apply at all to a non-Myst server)

      1. Personally, I mainly care about things other than maps. For instance, I’d like to list NPCs alongside the players, preferably in a vertical list. I’d like to have easier options for managing Age links, URLs, and instances. I’d actually like to see the chat pane intermixed with the room description pane, since I think that’s the main source of disorienting pane-switching in the current UI. Some of this might affect the UI enough to change where a map would go.

        I like Seltani a lot the way it is. The things I want to make don’t necessarily require as many mobile NPCs, complex portable objects, and one-way windows between Ages as I want to believe, and I should see how far I can get without building complex systems for their own sake. :)

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: