I am considering an interactive fiction project. The trouble is, I’m not sure whether to use Inform 7 to make a parser-based experience versus using Twine 2 to make a hyperlink based one. Neither of them has all the features I need out of the box, but I’m 90% confident that both of them can have the features I need added in just by making use of variables and such. My question is, from people who are more experienced with this kind of thing, which of the two would be easier to get what I’m looking for?
The features I want from Inform 7 is primarily its movement system. I really like how a parser-based game can give you a real sense of place and exploration as you move from one room to another and see what’s around. In a parser game, you can create a location with three dozen rooms and it’s quick and easy enough to navigate around that it feels satisfying to explore so long as it’s all well-written and interesting. I can simulate this in hyperlink-based Twine by having either a list of available locations to check out or else by making each room a passage and having hyperlink options to go to connecting rooms, but the latter makes it hard to navigate larger spaces since you have to click through lots of links to get from one end to the other rather than just hammering “n” “n” “e” “n” like you can in a parser game with a well-designed layout. The problem with the list of locations option is that it makes things feel disconnected, like each location has no specific position relevant to any of the others. Things like a map where you click on the labeled locations to reach their relevant passage can help, but 1) this requires that I make maps and 2) I still feel like it delivers an overall lesser sense of place and location than parser-based exploration can.
The features I want from Twine 2 is hyperlink-based encounters, especially for conversations, which are very likely going to be the meat of the encounters in my game. To be clear, I’m not designing a dungeon crawl. I don’t have a whole lot of details hammered down yet, but I’m mainly thinking of a small town where you can talk to a lot of people, and at the end you break into a place to steal a thing and maybe shoot the owner in the face. Most of what I’m calling “encounters” are conversations, and I like how Twine 2 handles those: I can write a bunch of dialogue, and when there’s an important decision to be made I can serve up several options to the player. I’m pretty confident that I can code in a similar system into Inform 7, by delivering large text passages in conversation and then listing numbered responses, but stapling Twine 2 onto Inform 7 like this would definitely be a lot harder than just using Twine 2. I’d have to prevent a player from leaving the room without ending the conversation, teach Inform 7 to recognize, in context, what typing “1” means not only for conversations with different people, but for different branch points of each conversation (i.e. a conversation with the same person might have “1” initially mean “have you heard about the smuggler in town?” and then in the next stage of the conversation that same command with that same person means “I’d stay away from Southside if I were you”).
Based on all this, I lean towards parser-based because, while it’s a hassle, I should be able to get all the features I want from Twine into Inform, but not vice-versa. However, I don’t really know either software very well and would appreciate any advice from people who know one or both systems better.
Check out AW Freyr’s “Hybrid Choices” extension for Inform 7. It lets you create numbered choice menus for conversation or anything else, switch between parser and menus based on rules, and you can have choices affect the world state.
I generally prefer the feeling of Inform based games, but that might be because I’m old.
Having said that, I have also been working on a directional navigation system for Twine 2.0 that uses NSEW and in which all the passages are named grid coordinates.
It displays as a little nav-box in the upper-right corner:
You could add ne/nw/se/sw/up/down as well (which I intend to do eventually). Up down would require passage names of 0x0x0 for depth. Once I’ve developed and tested it more, I’ll be dropping the “Location is 0x0” thing. It’s there for debugging purposes at the moment.
You can see in this screenshot that none of the passages are actually connected. Movement is controlled via the navigation script alone.
I’ve included the Twine exported html file attached to this as well, in case you want to look over the source (which is rudimentary and kludgy, but works). It could give you ideas for making your own variation.
I will note that the Inform feature you mention – a movement system organized on a grid – is relatively easy to reimplement in Twine. (Or any other language.)
Where Inform gives you good leverage is the construction of movable objects and a system of verbs for manipulating them. And the parser library, obviously.
I don’t need a movement system organized on a grid. I need a movement system that can be very rapidly navigated even when there are relatively few direct connections between locations. In order to achieve that in Twine, I’d need to make sure the commands to move from one location to another are always in the exact same place, are as readily accessible as keys on a keyboard, and are as instantaneously responsive as keyboard commands are - no half-second fade while one passage disappears and another is called up, the player can move from place to place as fast as their fingers are capable of hitting the appropriate commands. A parser encourages a player to wander around and see if they can find anything, hyperlinks encourage them to stay put until they’re ready to make a decision. I want walking around town to feel like the first one.
I encourage you to check out some of the French ifcomp games. Most of them are inform games that have been heavily modified to provide hyperlink support. You don’t have to speak French to appreciate the structure (although in the I form game Faute de Servo, the commands are color coded buttons that are unlabeled for story purposes, so watch out for that).
Question from rookie: How do you utilize an extension such as Hybrid Choices when it is not included in the Extensions available through the 6M62 menu? Cut and paste?
I implemented a compass rose in Alice Aforethought (it’s in AXMA which is similar to Twine) just by brute force - copying the compass rose code and links to any page where I needed it.
If you need fast movement in a choice environment, why not set flags on which rooms are visited, and include direct links to visited rooms on every page? In Sugarcube you could do that with a header or a footer, and I’m sure there are other ways besides just copying the link list to every page.
I don’t work with Twine much so I don’t know if this is feasible, but could you have a link for “previously visited rooms” that expanded into a list instead of going to a new passage?
Thank you for the help on extension installation. I am still more comfortable with TADS but Inform 7 seems to have the publishing flexibility that I find necessary.