The Missing Tools

This Sunday (March 30, 2:15 PM) the Oxford/London IF Meetup group is having a meetup with guest presentations by Graham Nelson (Inform) and Eric Eve (TADS 3’s adv3lite library), and general discussion about what kinds of tools and toolsets we’d like to see in interactive fiction.

In prep for that, I’d like to open this question more generally: what do you wish you had an IF tool to do? What are you longing to write if only you had the right toolset to do it?

92 thoughts on “The Missing Tools”

  1. The main thing I’ve been wanting for years: a choice based system with native support for proper coding. (Not ‘learn Javascript, then come back’.) Ice-cream-pony, something that lets me do all the things I rely on in I7 – list-manipulation, both object- and rule-based code, text substitution that’s highly powerful, compact and customisable – but actually targeted for a choice-based interface, and probably requiring you to build most of the world-model yourself.

      1. That would be great, although… hm. The thing is, I7 has a huge amount of structure built-in. That’s good in parser IF, where you need things like scope, containment, rooms, and roughly the same set of core verbs in 99% of games. In a choicey format, that’d end up being deadweight an awful lot of the time (and it would be a nontrivial, if not totally impractical, task to shuffle that all out into optional libraries). That would be fine if performance wasn’t an issue in web/mobile I7.

      2. (But all that said, if I were offered properly choice-based I7, without the need to awkwardly push hypertext commands through a parser prompt, I’d regard it as manna from heaven and to hell with performance issues.)

    1. I’m not sure I understand your point re: “learn JavaScript, then come back.” Inform is a programming language; JavaScript is a programming language. You have to learn a programming language to do the stuff you’re talking about.

      Maybe your point is that you want a language that’s “easy for beginners?” Python, Lua, and Ruby are all popular suggestions there, but so is JS. Maybe you’d prefer CoffeeScript, which compiles to JS but is a little more Pythonic? (CoffeeScript also has much better multiline string support.)

      1. But if I want to write a game in Inform, I only have to learn one language: Inform, which is specifically designed for what I want to do. If I want to write something in Twine, I apparently have to learn Twine and Javascript too, or depend on other people’s Javascript macros. It’d be nice to have a system/language/library/whatever that was designed to support choice-based games and that supported proper coding within the same system/language/library/whatever.

        This is not even to get into debugging — does Twine have debugging support? When I hit a bug in the Twine project I wrote I had no idea how to go about debugging it, although it turned out the answer was “Just get the latest version of Twine because the bug was in the old version of Twine you were using.”

      2. I specifically had Undum in mind, where the whole thing is JS. (I agree that switching to a different language to get more power feels like a design flaw.)

        I feel like there’s a weird dynamic where people say, “I wish I could write choice-based IF in a real language, but not JavaScript, because I don’t want to have to learn a real language to write IF.”

      3. Honestly Undum barely seems like a domain-specific solution to me. It’s not just that I don’t know JavaScript, I don’t think, but the Undum stuff I’ve looked at offered absolutely zero way in. The documentation boiled down to “Here’s an HTML file, here’s some JavaScript, you know what to do.” The availability of Undum constitutes a choice-based system with support for proper coding to the same extent as the fact that someone could probably code a choice-based system from scratch in C++ or whatever.

        Don’t just take my word for that, listen to Jon Ingold: “I found writing for Undum absolutely horrible until I made a tool, because JS is a language full of punctuation and with a very slow test/debug cycle…. For the games I’ve written I’ve used a perl script to turn a plain-text format into the .game.js file.” (Which I’m pretty sure has not seen release yet.)

        So maybe the request is: a choice based system with proper support for native coding that isn’t so painful to work with that a professional game programmer has to write a PERL script to make it non-awful. (In related news, the estimated completion time of the project I was talking about in that thread has moved from “2012” to “Never.”)

      4. The main argument for IF DSLs in my mind is that punctuation characters which typically are syntactically reserved in programming languages are meaningful in fiction. Switching from author-brain to programmer-brain disrupts flow, and so the default for IF should be (for example) that quotation marks MEAN quotation marks, and you don’t have to backslash them every time one character says something to another. This sounds like it should be trivial to implement, but doing it properly without sacrificing the power of a full programming language (ideally with first-class functions, static typing, etc) is not totally trivial, and I don’t think anyone’s really done it yet, including my 4 or 5 experiments….

      5. JavaScript is adding support for multiline “template strings” in the next version (called “EcmaScript 6”). Like this:

        var place = “world”;
        console.log(`Hello,
        ${place}!`);

        I’m pretty sure that would solve the vast majority of the ugliness in Undum’s syntax. Traceur is a library to automatically compile ES6 JS to modern-day JS; I’m pretty sure you could just add Tracur scripts to any Undum game and get rid of all those backslashes in a jiffy.

    2. It’s pretty easy to do, I’ve hacked together several such systems in JQuery and PegJS. One of them, Boswell, is an interactive development environment for multiplayer networked choice games written in a domain specific language, based on context-free grammars. It does not have all the language features you mention, primarily because a design goal was simplicity. I suppose my question would be, and I say this as a fan (and serial creator) of choice DSLs: what is the payoff for crafting a language that is nearly as complex as JavaScript (and has all the high-level features of JavaScript such as objects, arrays, text pattern substitution, etc) and yet is not JavaScript, thus requiring you to learn a complex DSL for one purpose only? I could see myself using it, and maybe a few others, but it seems like a nice graphical interface for constructing & debugging the game would be more useful to most authors. Anyway, Boswell is here: https://github.com/ihh/boswell

  2. There’s a trick I’d like to do in a choice-based work but haven’t been able to achieve yet: I’d like to have a change in one section of the text on a single page alter the options elsewhere.

    As a rather bald example: say the protagonist starts with the quality “vicious”. When the protagonist first hits a given story node, we see something like,

    The customer service agent tells me there aren’t any more planes to Tulsa tonight. I am a vicious person, so I perform a throat strike on her.

    But clicking “vicious” rotates out the quality to, say, “rather sweet” — and in the process also changes the forward-motion action:

    The customer service agent tells me there aren’t any more planes to Tulsa tonight. I am a rather sweet person, so I tell her I sympathize with her having to deal with so many angry customers.

    ChoiceScript and inklewriter aren’t designed for this kind of thing at all. I’ve been able to hack some vaguely similar functionality in Twine, but only if clicking “vicious” takes me to a new page and then brings me back again (at which point the if statements around the second link are reevaluated and provide the new text). I could almost certainly do it with some hyperlink text in clickable Glulx windows, but I haven’t tried that yet because it feels like overkill and because the UI presentation of hyperlinked Glulx does not always make me happy. Undum… I don’t know.

    This is a very basic example because it’s the thing I was trying to get to work most recently, but it reflects two things I’d like to be able to do with choice-based tools more generally:

    — allow the player to make decisions along more than one axis before moving forward from a given node (First Draft of the Revolution does do this, arguably, but in a handrolled way and it’s not tracking variables forward)

    — have some choices in a given node not be obvious immediately, allowing for a more puzzle-solving sort of experience (I realize that some Twine games manage to achieve this in various ways)

      1. It was messing with <> and <> that I got closest, but I couldn’t get a link that simultaneously changed itself and another piece of text — possibly I didn’t go about it the right way?

      2. Hmm, let’s see… I believe I get the behavior you specified with:

        The customer service agent tells me there aren’t any more planes to Tulsa tonight. I am a <> person, so I <>perform a throat strike on her<>tell her I sympathize with her having to deal with so many angry customers<>.

        Note the use of “end” after the “revise” text.

        AFAIK there’s no way to get a “cycling revise” kind of behavior, such that you could alternate between vicious and sweet arbitrarily often, though. And it would be nice if the author could generalize these behaviors in some way other than asking Leon to write more macros :)

      3. It *is* possible, though. Just do this:

        1. copy L’s Replace macro.
        2. use the <> macro like so: <>
        3. Use the <> macro like so: <><>perform a throat strike on her.<>tell her I sympathize with her having to deal with so many angry customers.<><>

        The timedcycle macro is the key here, since it’s being rerun every second and according to the value of $mood, it could update itself without changing passages. :)

      4. Excellent. Appears to work (and I think I see what went wrong with my previous attempt). Immediately gave me other ambitions I’m not sure how to fulfill, but hey, progress!

    1. Re timedcycle — cool. I was concerned that if I used that it might get things out of sync (e.g., that the player might do something that should cause an update, but then be able to interact with another link before the update executed). But I suppose if the cycles are tight enough that might not be a problem. I’ll experiment more.

      1. All in all, I think Twine provides truly remarkable flexibility, between L’s macros (also the Sugarcube header, courtesy of T. Edwards: http://www.motoslave.net/sugarcube/) and learning some 10 additional lines of syntax to be able to work with arrays and some other parts of the Twine API. I’ve managed to implement (after a fashion) stuff like fuzzy logic, messaging systems, finite-state machines… And my background is English Literature, not programming.

      2. Oh, definitely — I don’t mean to diss Twine. I find my biggest issue with it as a user is the diaspora of documentation: it’s not always obvious to me where I should be looking to research whether a particular piece of functionality is available. I’m sure this is something that would come in time, though, and people who’ve reached a greater level of mastery can do some truly astonishing things with it.

      3. Agreed on the documentation issue.

        T.Edwards has done a great job of documenting his own Sugarcube btw; the drawback is that it’s somewhat different from Sugarcane, i.e. macro naming and Story API mostly. I’ve been using it for some time now and I’ve found that the safest way of doing anything hacky with Twine is to just cram all the custom macros in one place and through the error messages weed out the ones that are somehow incompatible :)

      4. I don’t really feel that timed cycle is a satisfactory solution to this problem. It works, but in a way that’s unnecessarily different from the cycling version, and it’s “polling” rather than “event-based”, meaning the program sits there spinning in a loop checking a variable rather than only firing when something relevant happens — for absolutely no good reason.

        And I want to use this as a case in point to emphasize what I said above: the macro system should be extensible, at least in a useful (if limited) fragment of the ways it currently is, by the average Twine user. There’s no reason Javascript experts have to gatekeep functionality like this. I don’t think it’s just lack of documentation, either; writing custom macros is fundamentally a different task from writing Twine stories. So in answer to your post’s original question, what I want out of an IF tool is something very much like Twine, but with a more general system for specifying “what a link does.”

      5. I don’t think that the polling action of timedcycle is a problem of the macro so much as a problem of the HTML medium. I don’t know if there exists such a thing as a part of a text changing in response to another WITHOUT some sort of update loop. Can’t imagine it, especially in an essentially static environment like HTML.

        Also, I don’t think it’s a problem at all. If it was a massive polling effort, running through tens of variables until it hits upon the right one – then yes, quite clunky. In that example? Not at all.

      6. Come to think of it, even if it had to run through hundreds of variables in a loop, it’s still completely acceptable for a text-based program. That sort of polling’s only dramatically stupid when you implement it in more processor-heavy software, like a graphics-and-CPU-cycle-intensive game. For something like a text-based game, it’s actually much quicker and not messier to code, even if it’s a brute-force method.

      7. @Emanuil Tomov: I’m not complaining about it from the perspective of performance, I’m complaining about it from the perspective of abstraction. It’s fine if “the HTML medium” wants to implement it that way, but there’s no reason a story author needs to think about it in those terms, especially when *nowhere else* in their story do they need to conceive of a passage as a constantly-running loop.

        I haven’t investigated sugarcube though — I’ll check it out! Thanks.

    2. Still – and that’s my opinion of any potential authoring tool out there, – you can’t escape the need for some lateral thinking. Even if one has the hypothetical tool (I want that too) that lets one define “what links do”, it would still be a matter of recombining some atomic macro-like functions in creative ways; which automatically means “not necessarily intuitive”. (See the Combs fuzzy logic inference method: not intuitive, but efficient.)

      1. “it would still be a matter of recombining some atomic macro-like functions in creative ways”

        Figuring out an expressive, general, and concise set of “macro-like functions” is designing a programming language, which is the activity I’m using my education and career to understand. I suppose I can’t convince you that it’s possible to build a language for hypertext with consistent abstractions without showing you something that doesn’t exist, but I’m hoping in a few years I’ll be able to put my money where my mouth is on that.

    3. Emily, your “vicious”/”rather sweet” example sounds very much like the demo for the Tangle JavaScript framework.

      That would be pretty interesting for storytelling. It would let the player search for non-obvious options (like you said) in hypertext, while letting them keep their bearings during the search. They wouldn’t be scrubbing backward and forward in time (like CYOA lawnmowering), nor would they be leaping between separate pages.

      Besides Tangle, there are other JavaScript frameworks that achieve similar live-update functionality, such as Knockout and Angular.js. I don’t know what kind of learning curve IF authors would face with these tools, or how well they would integrate with Twine (or Undum, etc.) in particular, but it’s at least a start.

    4. Boswell does this fairly naturally, since you’re basically just creating a dynamic text. Having said that, Boswell is not exactly usable (or used by anybody) yet, so this is kind of an annoying/useless answer i’m afraid

    5. Storytron did this, as you built your response to the current environment as a sentence, iteratively. The options available for choosing later words (and the generated filler text in between options) was dependent on what you had selected previously in the sentence. Despite its left-to-right linearity in construction, the system was surprisingly robust.

      But it’s gone now.

  3. I’ll qualify this by saying I know little or nothing about building choice-based games, but have played a number of the recently well-received stories. I do know Inform 7 to some degree. I may not completely understand what the example above intends, but I think it’s the ability to switch perspectives without necessarily progressing the story.

    From an Inform 7 perspective, I see this as a solution requiring multiple parts. The language support for building choice-based stories is only one part. The library support would be supplemental to the standard library features. The UI would probably need choice-specific operations, but that’s really my perspective from using Channel-IO instead of Glk.

    The thing in Inform 7 that might be needed would be to define “alternate scenes”. So maybe:

    The Kitchen is a room with N variations.
    The Kitchen variations are Kitchen1 and Kitchen2.
    The description of Kitchen1 is “This is the first Kitchen. It’s dark and gloomy.”
    The description of Kitchen2 is “This is the second Kitchen. “It’s bright and sunny.”

    And the I7 compiler would turn tags into or ,

    Then a new verb “switch” or something like it would be used to help the parser decide which variation is in place.

    The UI side converts the link tags to hyperlinks as needed.

    Not sure how my example works in the building/authoring process, but it’s just my first-pass thoughts.

    It might get complicated with Inform7 to see a single location with variant definitions. Probably a Graham question.

    Dave

  4. For me its more a case of platform. What would scratch my particular itch is a tool that works on my Android Tablet without access to the internet. Because that is what I have with me when I have time to write something, My most common daily writing time being while I commute to and from work every day. At the moment the closest I can come is a generic html editor and Undum, which is not my favourite platform.

    Having Inform complete with compiler on my tablet would be awesome. Though really I’d be happy with even a basic Choose Your own adventure type tool.

    1. Hm, no idea how possible that is. My impression is that it’s a nonstarter for the iPad because of Apple’s restrictive rules about what apps are allowed to do, but I don’t know whether an Android tablet presents significant barriers. I think there’ll be an Android programmer around on Sunday, though, so I can raise this.

      1. a custom text editing app with playfic integration would be fine enough already — and not particularly hard.

        Developers should wake up and smell the coffee: desktop computing is going the way of the dodo and Apps shouldn’t mean just entertainment or games, but productivity tools as well. There’s nothing nowadays impeding you of connecting your mobile device to a large screen and keyboard and be as productive as with jurassic beige boxes…

        I don’t care for Apple but Google seems far more liberal for its software ecosystem. It’s a shame that each have their favorite language and tools: Objective C for iOS, Java for Android and C#/C++ for Windows

      2. Google doesn’t have any particular restrictions on emulators and compilers. As far as I’m aware the Google play store takes the approach of allowing anything, and only examining things more closely if users report them as inapropriate. Right now I have a zCode interpreter on my tablet, and an App that lets me write epub books,

        Note that installing code from 3rd party sources is also possible if you enable this feature in the settings menu, so strictly speaking you don’t have to go via the Google store at all. Again this is different to Apple who make the iStore the only way of installing anything.

  5. The other thing I’d like is, more or less, a tool for things like Olivia’s Orphanorium – a sim-like GUI able to tidily display and interpret lots of data at once, a back-end designed to handle lots of crunchy generated content, but an IF-y focus on prose and hand-generated content. (And I7-level text subs, again. That’s kind of a necessary feature for any platform, really.)

    This is wandering way off into my very specialised tastes.

    1. Presumably when you say “handle lots of crunchy generated content”, you mean that you want something with better performance than I7 usually shows, and possibly the ability to do dynamic object generation?

      1. Those are the two big things, yeah. (I was being handwavy against the possibility that someone more code-savvy than I would be able to identify other ways in which I7 is not designed for that kind of thing.)

  6. I would like the choice-based system with native support for proper coding, too, and a more user-friendly coding than Undum’s “Here, have a giant helping of Javascript.” This might just mean I7 with links (which I somewhat know how to do) and the command line hidden from view. Someone might be able to do this as an Inform extension.

    Along with this I’d like nicer support for window layout — I suppose something like Undum’s sidebars and the like, but perhaps with a bit more control perhaps; and with documentation which doesn’t make my head spin, which both Undum and Flexible Windows do. I think this is something like what Sam asked for in the last entry.

    Something completely different that I’d really like is a more flexible dynamic parser. Something where I could take those dynamic I7 text subs, use them to generate a description of something in a complicated way, and then have the parser understand that description. Like this, but not horrible. This seems to be very difficult with the VMs I7 compiles to; there may be a suggestion that it’s possible with TADS, which may mean that my request is for a more comprehensible TADS that compiles to formats that can go more different places.

    1. …hmm. I’d have to spend longer with the code to work out exactly why that example needed to be so complex, but in general in I7 you can have the parser understand indexed text phrases for an object, or adjectives that describe qualities of that object, which often does get understanding for things like “the heavy black vase” when “heavy” and “black” are both distinguishing characteristics that are part of the world model. And then repaint the vase if you want and call it “the heavy white vase”.

      Possibly there’s something going on in that particular example I’m missing, though.

      1. That particular example doesn’t need to be so complex — I could much more easily have made the color a property, and used “Understand the color property as describing a block” — but I’m not sure if it would scale up to the kind of text generation that I’d like to be able to do (and could already do in I7, if I put in enough work).

        In particular, I’m envisioning things where the description doesn’t correspond in a nice one-to-one way with the world model; something like this, say (pseudocode):

        A thing is reflective if it is glass or it is metallic or it is (wet and not porous).
        A thing has a direction called the placement in the room. [n if it’s on the north wall, etc.; d if it’s on the floor, u if it’s on the ceiling).
        To decide whether a direction is illuminated: (in morning, ne, e, se; in midday, se, s, sw; in afternoon, sw, w, nw).
        A room is illuminated from a direction if the direction is illuminated and the room has a window in the direction. [note: “the room” and “the direction” should be variable names but this is pseudocode]
        A thing is shining if it is reflective and the opposite of the placement of the room of it is illuminated in the location of it.
        Before printing the name of a shining thing: say “shining “.

        …now, I think I could get what I want in this case by adding Understand “shining” as a thing when the item described is shining. But if I had a lot of stuff in there to generate stuff like this, adding those special Understand clauses for every such property would be tedious and would also probably wind up getting bugged. Whereas if I could cast all the behavior to a string of some sort that corresponds to the text that gets printed when you print the name, and then have the parser check those strings against the player’s command, that’d be more robust.

        Understanding an indexed text property as describing a thing won’t be particularly helpful here because the player has to type the whole indexed text for this to work — if the thing has an indexed text “shining golden crown” then the parser won’t understand “x shining” alone, it has to be “x shining golden crown.”

        You might reasonably ask why I want to do this. The idea is to have interesting procedurally generated room descriptions, like the maze in Hunter In Darkness maybe, but make it possible to interact with them. And hey, you asked for what I wished for….

      2. Hmmm.

        Okay. So the desire is to be able to build an indexed text and then understand reasonable subsets of that indexed text automatically. This makes sense to me.

        Of course, that doesn’t mean it’s something Graham will want to deal with, but I’ll bring it up.

      3. Also, on that note, I would say that procedural text generation, in general, is an area that is totally underserved by extant IF tools and that there are a lot of places it could go beyond this. So that’s another thing I would be really interested to see. Curveship does some with this, but I don’t know of any other systems that explicitly attempt to model the textual output layer separately, or (for instance) has a method of saying “the following pieces of text are all ways of representing the same idea; here are some rules for combining them; now _you_ build a description of the world state.”

        One can hand-roll that stuff in Inform under various circumstances (and I’ve done so), but it’s not really set up for this as a first order thing. The upcoming version of Inform comes closer, in that it does explicitly know about things like verb tense and person, but that still leaves it far shy of being a system for robust procedural text generation even in the domain of describing a standard text adventure world model.

      4. “So the desire is to be able to build an indexed text and then understand reasonable subsets of that indexed text automatically.”

        Yes! You have expressed what I wanted much more concise

        “Of course, that doesn’t mean it’s something Graham will want to deal with, but I’ll bring it up.”

        Ah, I didn’t necessarily mean “I hope Graham will do this!” Just “I wish someone would do this.” I think it’s a specialized enough desire and goes far enough against the grain of what I7 does that I wouldn’t expect Graham to take it on board. Also, from my puzzling over Ron Newcomb’s reinterpretation of the parser in I7, it seems as though it’d be very difficult just by the nature of the virtual machines involved; it seems to me as though the VMs (reasonably enough) really want you to use dictionary words as the main building blocks of your parser, and I’m trying to get around that. I could be entirely wrong, though.

        “procedural text generation, in general, is an area that is totally underserved by extant IF tools and that there are a lot of places it could go beyond this.”

        Yes yes yes exactly. I’m somewhat mildly obsessed with procedural text generation, after reading (or not-reading) the same nice bit of prose over and over in so many different things (games that have five bits of rotating text for the background action of a character who’s hanging around for eighty turns, a short graphical space game called Strange Adventures in Infinite Space that I replay a lot, Fallen London). And I think it could go so much further than it has. Imagine if a thousandth of the collective person-hours that have been devoted to 3D graphics were put into procedural text generation — I bet we could get some pretty smooth-reading text out of that.

      5. For me this isn’t just an issue about text output variety (though that is also interesting). It’s also that a) I am interested in IF that runs on more complex simulations than most currently do, but b) a simulation that cannot communicate its state accurately to the player is no good from a gameplay perspective and c) hand-authoring all the text to cover all the emergent states of the simulation is likely to impose an intolerable burden. So being able to specify procedural text in a reasonably compact fashion would be a prerequisite to that type of IF becoming common.

      6. On a maybe related topic, it’d be cool to have an IF tool that interacts with WordNet. I’m not sure what I might do with it, but it’d be cool.

      7. Using the text to accurately report complex simulation stuff would be nice too!

        That reminds me of another thing, more I7-specific and perhaps more attainable: I’d like to be able to cache action reports and write a summary of them at the end. Suppose I have four characters in the location and three of them go west; instead of “Alice goes west. Bob goes west. Claire goes west.” it’d be nice to save all the action reports for a “print everything the turn resulted in” phase, check that I have three people going west, and write “Alice, Bob, and Claire go west.” (Avoiding things like “A sturdy rebel man-at-arms cannot reach a thin royalist man-at-arms. A sturdy rebel man-at-arms cannot reach a thin royalist man-at-arms. A ruddy-faced rebel man-at-arms cannot reach a thin royalist man-at-arms. A pale rebel archer cannot reach a thin royalist man-at-arms.”) At the moment I think the rules that print action reports are so widely scattered that I’d have to rip out an enormous amount of the machinery, or more likely use Text Capture to divert all the text gets printed until I’m ready for it to appear.

  7. I would greatly appreciate better multimedia support on all fronts.

    Twine is very powerful, simply from CSS and Javascript. However, browser support is awful (not Twine’s fault per se, just the nature of web design). I gave up working with Twine simply because I get too many errors on anything but Chrome. Here is just a few screens of a WIP I abandoned, which I feel showcases how powerful Twine can be. Note: it really only works in Chrome, and to a lesser extent, Firefox (music playback is choppy and the replace macro won’t fade text).

    https://googledrive.com/host/0B1-c4QlMnrtNbEhqYkFLQk1KdGc/CrushingSkiesBuild.html

    Inform 7, which I’m currently working in, has the bare bones of multimedia support. There’s very little music control (I can bring in different layers of songs, but the lack of a fade in or out makes the transition ugly). There’s no animation support at all, so I’m going with static pictures in the style of a graphic novel. But even a little motion that reacts to the parser would make a tremendous difference.

      1. Glimmr is amazing but unless you need a parser you’d be better sticking with Javascript! Glk is very limited. :(

      2. I was assuming from “a little motion that reacts to the parser” that that was what was wanted — but yeah, if the parser is optional, than other tools would almost certainly be better.

      3. I think when I first read through the Glimmr documentation awhile ago, I was turned off by how it couldn’t read a compressed video format that I drew in Flash or Toon Boom. But reading through it again does give me a glimmer (yuk yuk) of hope. I’ll put this on my to-do. Thanks!

  8. I’d like to see easier audio support in Inform7. Mostly I’d just like to know when the next update on Inform7 is coming. Thanks much

    1. If Graham makes an announcement about release times at the meetup, I’ll share that, but I can’t guarantee that he will. He tends to dislike announcing dates in advance.

      1. Yes, I’ve noticed that. I’m not looking for a precise commitment, but it would be good to know a bit more about what new features are under development and if we should expect something in 2014. It’s been a while since there has been any news.

  9. In I7, you can do all kinds of animation and such with Glimmr.

    Concerning audio fades, I was on about this for awhile, and Zarf already added support for built in fades in a new Glulx spec that already exists. However the spec’s audio features are supported by next to no interpreters at the moment, which to me amounts to it being unuseable at this time.

    You can roll your own fades at the moment using the Glulx timer, but the game can’t do anything else while the fade is happening, and audio-wise these are less than ideal. However, they’re good enough for the ears of the average IFfer.

    The I7 interpreters are sliding. Zoom has a good number of broken features now – it’s no longer a legitimate interpreter to test a new game on if you want to see if things are working to spec. Gargoyle is not being updated.

    In answer to ‘What would you like working’, I’d lke the I7 interpreters to be up to date and I7’s multimedia features supported online before I wished for any new stuff. Well, the online power would be new stuff, but you know what I mean.

    1. To be clear, I’m not asking just “what would be nice to have from people who do I7 support” (which obviously has limited resources) but about what might be nice to have in the IF area more generally. (Though obviously it’s fine if your personal wishes are focused on I7 things.)

    2. I second this. Currently you have to choose between the power of Inform’s parser (say if you wanted to use Threaded Conversations) and the multimedia capabilities of almost anything other than Inform.

      1. What I’d really love is if someone converted Gargoyle to use Webkit! I’ve almost considered it myself, but someone who knows C would be in a much better place to do it.

      2. The parsing is really one of the most problematic aspects of Threaded Conversations, though — handling parsing of dialogue quips is the biggest source of performance problems, and also one of the biggest reasons for authorial burden, since one needs to provide a bunch of equivalents.

        Versu’s conversation engine made use of a lot of ideas from TC but eliminated the need for parsing, and that also made it a lot faster to write for.

        So a TC-alike for a (publicly available) choice-based system is something I’ve been thinking about, though I don’t see how it would work for most of the existing choice engines, because it does require a real programming language under the hood. But maybe if we had Inform-for-Choice, as other people in this thread have been discussing…

  10. As to what I’d like to see in an IF tool – it’s something that Sugarcube’s “widget” macro does to some extent: I’d like to have some sort of template-making function, so I can codify a chunk of logic under a simple, and then just plug different variables in it without copy/pasting the whole chunk of code, if for example I want to use it 4 times in a row.

    (This is basically what the widget macro does, only I think its funcionality could be extended. Dunno though, not a programmer.)

    My reason is that writing huge bowls of conditional spaghetti, for instance really kills my writing buzz.

  11. In Inform7 specifically, the main things I find myself wanting frequently are:

    – Dynamic object generation
    – Algebraic data types (see http://en.wikipedia.org/wiki/Algebraic_data_type), not necessarily for _values_ but for _objects_. I want to be able to give not just an *enumeration* of things like “the spells are healing, fireball, and telekinesis” but data-carrying and recursive definitions, like “a spell is either healing, fireball, telekinesis, or a compound of two spells.”

  12. Another thing that would be fun is a nice visual editing tool for JS-based games like Candybox and A Dark Room. I’ve had lots of ideas for little click-on-buttons, gradually-reveal-more-functionality, simulationy games like this that I’ve never implemented because of the (perceived, anyway) startup cost of getting all the JS working right.

  13. This is comparatively out there, I also want a thing that is mostly about manipulating bits of text as typographical entities, so what the player is doing is swapping words out or dragging them around, or perhaps granting emphasis to some text and removing it from other text. This idea is still in a pretty vague and floaty state compared to the other ones here, but I envision this being useful for a game whose primary mechanic is about translation.

    1. You mean a little like how 18 Cadence is set up? That would be neat, although I have trouble thinking of more than a couple game concepts it could be used for.

      1. That, perhaps, merged with something like Twine’s Replace feature. Ideally, something general enough that it could be used for a range of experiences somewhere between 18 Cadence and First Draft of the Revolution, where the player is selecting or assembling pieces of text.

        The overall meaning and effect of the submitted text might then be assessed via variables and might affect the game state if one progressed to the next scene. So you could do things where gameplay consists of composing letters or texts, editing poetry, putting together stories, editing which evidence is submitted and which is left out, censoring messages in wartime, …

  14. Started working with Codea over the past few days.

    It would be nice if there was an equivalent for Twine. Being able to write IF for an iPad and on an iPad would make the experience a lot more pleasant.

    I currently find Twine games to be rather flaky experiences in tablet browsers and yet I prefer to experience IF on a tablet because there is still the sense of “curling up with a book” that you can’t get from a desktop computer. Versu worked well in that regard, and I can’t imagine reading it on my laptop and getting the same experience.

    1. This thing of wanting to create on one’s tablet has come up a bunch in this discussion (on Twitter, too, where I also asked this question).

      That’s interesting to know, but I find it counterintuitive because the prospect of typing out an entire IF source text (even if that’s in Twine and not something code-heavy like Inform) sounds like it would be tough going on a touch screen. My touch-screen typing is both slower and more error-prone than my typing with a keyboard, and then copying and pasting accurately is a real beast.

      But evidently lots of other people are comfortable with this? Or maybe I’m underestimating what percentage of iPad users have an attachable keyboard?

      1. I think implied in the idea of “coding on the iPad” is the idea that writing a game would be as easy as using an iPad. When we say, “You can write interactive fiction on your iPad!” people think, “Wow, I could do that! Even my toddler knows how to use an iPad.” When we say, “You can write interactive fiction on your computer!” people think, “Hmm, I’d have to figure out how to use the computer to do that. No way could my kid do it. I’m not even sure I could figure this out before giving up.”

        Also, I think of tablets as very cheap computers. You can’t buy a good Mac for $400, but you can buy a good iPad for that amount, and you can buy a top-of-the-line iPhone for $200 down. We should let people write games on the cheap computers they already have, and that means mobile.

        If they get serious about it, maybe they’ll get a keyboard, but that’ll be a relatively easy upgrade.

      2. Hmm. I think the most iPad-*easy* kind of writing option is probably inklewriter. I tried that out from my iPad just now, and it does pretty much work, though transitions are slow and the typing experience isn’t terribly enjoyable. But then, I was playing it through iPad Safari, and presumably a native app version of the same thing would be smoother.

      3. I mention it chiefly because I wrote my undergraduate thesis on a PDA with a attachable keyboard back in 2006. I was able to go into the British library, pull the combo out of my pocket and happily type notes. Admittedly I had to transfer the document to PC to polish it and add pictures, but I easily past 10,000 words on the PDA alone. It’s hard to be distracted when your device only runs one thing at a time.

        The external keyboard is definitely a prerequisite. Perhaps what I’m really hoping for is a browser solution to Twine that is tablet friendly. That would be the most ideal, having the greatest install base.

    2. Twine 2.0 is going to be fully tablet-friendly! More details at Twinery.org. It’s in testable beta stage at the moment, but I’m not sure how much of the tablet functionality is ready-to-try just yet.

      Regarding the onscreen iPad keyboard, I found it an absolute pain until my laptop broke and I had nothing else to write on (well, I might have had a napkin somewhere, but the iPad was shinier). And then within about a month I got completely used to it and could type at almost the same speed as a normal keyboard, without typos.

  15. 1) I want Inform games to run fast enough to use comfortably on a mobile web browser, presumably by compiling them to asm.js.

    2) I’d like a way to build games like “The Colder Light.” Jon/Erik at times suggested that the code might become publicly available at some point, but as far as I know, it never materialized.

    3) I bet some useful code could be written to help people write entire games in the style of the “path of love” in Blue Lacuna’s opening chapter, where the player can type anything in response to prompts, and the game can try to pattern match your responses against pre-canned answers, but if it doesn’t understand you, the text tries to “fake it,” misleading the player into thinking that the input was understood.

    It’d be a choice-based parser game, but the game would never say “I didn’t understand that.” Just roll with it.

    4) I’ve been idly daydreaming about a point-and-click interface for text adventures. Tap to examine. Double-tap to “use;” if there are multiple relevant actions, present a menu when the action is performed. Do a secondary tap (long press, right-click, or two-finger tap) to “select” an object, to combine it with another object on the next tap.

    Exits and inventory would be visible as on-screen panels. Menu-based dialogue with NPCs.

    There’d also be a limited parser, for players without pointing devices and to provide shortcuts. It would accept object names (which would autocomplete) without any verb required, normally presenting a menu, accepting just three verbs: examine (e or x), use (u), and combine (c).

    (Maybe there’s a better word for “use” when it comes to interacting with NPCs…?)

      1. namekuseijin, I prefer not to host comments on my blog that are insulting to other commenters. Courteous disagreement is fine; rudeness is not.

  16. I remember playing with a sample-transcript-to-code tool once, but it pretty much made a map of rooms and that was it. I’d like something that could go a little farther and even make intelligent guesses about objects and daemons and so forth (even if tweaking needs to be done after, it’d be a nice way to make a structure).

    1. Maybe if it had the aforementioned WordNet hookup, plus a big library of common object types, TADS 3-style, so that if you mentioned a CANDLE or TAPER in your description it would run off and put in the right class of object?

      This might be too blunt an instrument to use to make much really finished IF, but it might be okay for setup, and I bet it would be a fun toy in itself.

  17. One thing I’d like with choice-based works is the last choice be a parser prompt.

    Another is the system remembering what the player has done in the world (and tried to do) so it is easy for [the author to have the] NPCs bring it up later.

    Another is better prose generation, though in which ways I’m unsure. For example, the Inform 7 extension Automated Verb Phrases can print a sentence as either a question or a statement based on a variable, but maybe that ability wouldn’t be as useful as the action report combining thing Matt W mentioned. So with prose generation, it’s more of a question of what kinds of system state or changes does it need to describe.

    And most of the IF authoring tools in the vein of Zork have had poor typographical and layout support, being primarily command-line programs. I’m not real big on multimedia in IF, but font, color, italic/bold, and hyperlink stuff seems natural.

    Another is that ability of detectives to figure out the order of several events based on known facts. A logic problem solver, basically. It’s like the pathfinding in Inform 7: a simple, useful little phrase or two that just happens to be kinda complicated to implement.

    1. Another is the system remembering what the player has done in the world (and tried to do) so it is easy for [the author to have the] NPCs bring it up later.

      Inform does do a bit of tracking of what the player has done, and Twine lets you check which nodes have been visited and set variables. I think the hard part is really more the second half of your sentence: “so it is easy for the author to have the NPCs bring it up later.” *That* requires a lot of additional information that goes beyond just “what did the player do?”

      With Versu we had characters who constantly noticed things that other characters did, and adjusted their opinions accordingly. So after a scene or two of interaction, a character was likely to have several memories about another character and to know whether that memory made them think better or worse of the other character, and in what way.

      But that didn’t solve the problem of when they should talk about those memories. Just having characters blurt out things they knew about a person who was under discussion proved to be unrealistic and weird (though sometimes comical).

      So, as a baseline, characters filed memories depending on whether bringing up that memory might be considered a positive or negative comment about the character, and they triggered those mentions when they wanted to compliment or insult somebody. You might insult someone if you were having a fight with them, or if they were out of the room but you wanted to influence other people present to dislike them, for instance. That provided a decent framework for determining when many of these utterances should be used.

      But there were also certain kinds of player action that were more plot-meaningful, like betraying someone or kissing someone’s wife. Information like that needed to have a bigger effect on the game state. We needed to weave that kind of information into the more scripted parts of the conversation. So that sort of information we would store a bit differently, with extra information.

      Short version: modeling NPC knowledge is often easier than modeling the manifestation of that knowledge.

Leave a comment