Looking for an engine that meets the criteria below

Hello all!

I’ve been playing around with some Javascript, but I find that the knowledge I have so far isn’t able to create the type of game that I’d like to see. Therefore, I’d like to use one of the main engines out there to create my game in. I’ve experiemented with TADS, Inform7 and Quest, but I can’t figure out which one meets all of the criteria that i’m looking for:

  • Ability to have a visual map displayed -somewhere- at all times, similar to the way Beyond Zork does it. (I know Quest will do this with some fiddling)
  • Ability to have an inventory displayed that will automatically update to show what the player is carrying (I know Quest will do this)
  • Ability to keep track of stats and statuses for the player (I believe that Quest, I7 and TADS can all do this)
  • Ability to develop fairly in-depth conversation trees using flags or any other method (I believe that Quest, i7 and TADS can all do this to some extent)
  • Ability to publish to a website that I host. (I believe I7 and TADS can do this, but Quest cannot (and that makes me SAD)).

So does anyone know if there is any IF engine out there that will meet all the above criteria?

Thanks for all your help!

Welcome, dodge!

Just for the sake of clarity: you’re talking about parser-based interactive fiction, right? A “classical text adventure” where player types commands, as opposed to making choices by, say, clicking hyperlinks? It sounds to me like you are, in part because TADS, Inform, and Quest are all parser-based systems, but many people mentioning JavaScript are thinking about choice-based IF, so I wanted to be clear.

I think Inform 7 will do most of what you want, though you’ll need to use some extensions to get some of it. In particular, there’s at least one onscreen map extension, and people do write Inform 7 games with onscreen maps. (One of my favorites was Vain Empires from last year’s IFComp, which had a gorgeous map; there’s at least a littie bit of information in the linked article on IFDB about the extension used, and there’s at least one other automapping extension for Inform (I’m not sure if that last one works with current builds, though; you’ll note that I linked an old thread). I don’t believe it’s an easy thing to set up, but I’ve never tried to do so myself.

Inform 7 will allow you to keep track of stats and statuses in a flexible way, either by customizing the object used to model the world or just by storing relevant global variables (“values that vary” in Inform’s terminology).

Inform 7 has built-in support for basic conversation, but doing complex conversation stuff is, again, made easier by extensions. I myself like Eric Eve’s conversation extensions (Conversation Package for the whole collection at once; but Conversation Nodes can be used without dragging all of the others in, and is the single extension that most directly makes it possible to build a conversation tree). it’s built in a way similar to TADS-style conversation, if I understand correctly. There are other branching conversation extensions, though.

Inform will also happily create a website for you with a built-in interpreter that lets people play your published work directly from the website.

I cannot say whether there’s an easy way to get a constant inventory window in Inform, but suspect you could create multiple windows in a Glulx-type Inform project that would make this not too difficult. (I myself would find this annoying in a game unless the game really was doing something unusual – changing inventory a lot, or was otherwise heavily inventory-focused – but that’s just my opinion, and other people might feel differently, and I wouldn’t mind in a game that made it pay off.)

So the first two items are your list, as far as Inform 7 is concerned, are “yes, but there’s less precedent than for some other stuff, and you should expect to put some work into getting it going.” The answer to the other three bullet points is “Sure, no problem.” (Though writing a conversation tree is a surprising amount of work even with an extension handling much of the coding-based heavy lifting.)

I can’t speak nearly as much about TADS or Quest, so I’ll stay silent on those. Hopefully other people will come by to be helpful.

2 Likes

Heyo! Thanks for the informative (get it? :D) response.

Just for the sake of clarity: you’re talking about parser-based interactive fiction, right?

Correct, I’m looking for parser-based, zork-ish-style games. Choice games just don’t interest me as much, as it just seems limiting in the sense that I want people to actually have to formulate some sort of response or action.

there’s at least one onscreen map extension, and people do write Inform 7 games with onscreen >maps

I should really look into this. I tried looking at some source of one Inform7 game, and it looks like the author made about 15 or 20 different map images and would just switch the image based on some code. Reasonable solution, but not really what I’m looking for. I was thinking more of some sort of automapper utility. But I will look into it.

storing relevant global variables

Honestly, this is what i’m mostly looking for. Either just global variables or as attributes to some sort of player object. Having a ‘living being’ object that could also individually store attributes would just be a big bonus.

but doing complex conversation stuff is, again, made easier by extensions

I’ve done several deep (6-layer) conversations in Quest a /long/ time ago using some sort of extension for that. It’s something I kinda enjoy doing. IMO, these types of games need some good conversations to be able to get the level of immersion that I’m thinking I need for my game.

Inform will also happily create a website for you with a built-in interpreter that lets people play your >published work directly from the website

This is a big plus for Inform. I do like the export-for-web option. Honestly, it’s the future. Browser-based apps are where it’s at. Nobody is going to actually download an additional program to be able to play a game anymore… except for the hardcore dedicated who already have it.

suspect you could create multiple windows in a Glulx-type Inform project that would make this not too >difficult

This is something I will look into. In respect to some sort of inventory window, it’s the bullet probably rated lowest of my ‘needs’. Sure would be nice to have though!

I can’t speak nearly as much about TADS or Quest, so I’ll stay silent on those. Hopefully other people > will come by to be helpful.

After reading up on all of them, and trying them all out (most time spent w/ Quest, then TADS, then I7), I’m leaning trying that out, to see if I can get it to behave how I want. Hopefully others will chime in with regards to their experiences and the possibilities of doing the above with TADS / Quest.

Thanks again for the detailed reply!

1 Like

Glad to be helpful!

Here’s a few basic code samples on the topics you asked for to give you a flavor of what some of this might look like in Inform 7. They’re all just quick sketches, and all could be implemented in different ways. (Also, I’ve made only a cursory effort to compile them, so a bit of syntax may be off here and there. But hopefully they’ll give you a sample to compare to Quest’s syntax.)

Tracking player attributes, take 1:

Strength is a number that varies. Strength is 7. Wisdom is a number that varies.
Wisdom is 12. Intelligence is a number that varies. Intelligence is 14.

Alignment is a kind of value. The alignments are lawful good, neutral good,
chaotic good, lawful neutral, true neutral, chaotic neutral, lawful evil,
neutral evil, and chaotic evil.
The player-alignment is an alignment variable. [Means the same thing as "alignment that varies."]
The player-alignment is chaotic neutral.

You can then check player stats just by referring to the value of the global variable:

Check opening the rusty door:
    if strength is less than eight, say "You'll never force it open!" instead.

But if you wanted to track stats for NPCs in the game in the same way, that’s easy enough:

Temple is a room.

High Priestess Mxplutwxn is a woman in Temple. The player is a man in Temple.

A person has a number called strength. The strength of Mxplutwxn is 9.
The strength of the player is 10.

A person has a number called wisdom. The wisdom of Mxplutwxn is 18.
The wisdom of the player is 5.

A person has a number called intelligence. 
The intelligence of a person is usually 12. [Easy enough to set defaults.]

A person has an alignment. [Assuming we repeat the previous definition.]
The alignment of a person is usually true neutral.
The alignment of Mxplutwxn is lawful evil.
The alignment of the player is chaotic good.

You can then refer to the individual attributes of each individual:

if the intelligence of the player is less than four: end the story saying "You're too dumb to survive!"

if the alignment of High Priestess Mxplutwxn is true neutral: [...].

Generating a playable website just involves adding this declaration to the source:

Release along with an interpreter.

That’s it.

Simple conversation with Eric Eve’s largest, most inclusive package:

Include Conversation Package by Eric Eve.

Last Chance Saloon is a room. The bar is a supporter in Last Chance Saloon.
The bartender is a woman in Last Chance Saloon. The empty bottle is a thing in Last 
Chance Saloon.

Response of the bartender when asked-or-told about the player:
    say "She snorts. 'Don't try to run your game on [italic type]me[roman type].'".

Response of the bartender when given-or-shown the bottle:
    say "She rolls her eyes. 'We've been through this already once tonight. You're not getting another drink until you pay your tab down.'".

Response of the bartender when asked-or-told about "money":
    say "'Right, that's what you'll need in order to pay down your tab and get another drink, Einstein.'".

It’s possible to create conversation trees, too, using the same package, that close off and open up conversational options, but I hesitate to sketch one out because they’re a little more involved. You can take a look at the extension’s documentation for samples, though, if you’d like.

Anyway, I hope that’s helpful! Good luck with your project.

2 Likes

QuestJs aka Quest 6 lets you do all that. It has two mapping systems, plus an inventory and status. I guess the conversations side may be weaker, depending on exactly what you want.

A QuestJS game is just a web site, you can do what you like with it. I have uploaded to Itchio:

Note that there is no GUI editor as yet. You would be typing into a text editor, but there is a tutorial to get you started.

3 Likes

If you find tads3 satisfying in the other criterias you can use my extension for the automapper functionality.

It’s somewhat in the style of beyond zork, at least if running with ascii renderer, the svg renderer would be suitable if you run the game with the webui (see examples in the repo for this) and can be tweaked to look in all kinds of ways. This is an option if you want to have the game running on a website.

You can find the extension here:

(Or in the ifarchive)

Other than that my opinion tads3 is great in the conversation area. It’s a bit steep learning curve to learn the language if you are starting from scratch but well worth the effort. I see nothing that stops it from fulfilling the rest of the criterias.

1 Like

Hello!

Yeah, I found QuestJS after this and have actually been playing around with it. I -really- like the sidebar information such as statuses, inventory management, etc. (I’ve even played around with the SVG mapper.) As I mentioned in my previous posts above, I don’t have that much experience in JS, so getting going with it is a little iffy so far. I find myself scouring the supplied wiki to try and find the default attributes and methods available for things such as the onExit(). eg figuring out how to lock a container in the room using the onExit function onExit(w.garage_container(LOCK)) (or something similar, I forget off the top of my head.

Though I think it’ll be pretty awesome when I learn more JS and how to use it properly, it’ll make a lot more sense.

Thanks much!

I did like exploring around with TADS3. I might give it another shot and try that extension. I was getting a little irritated with it because I found the workbench crashes on occasion when exiting a build of a game. I’ve also found that if the build is throwing bugs, but they don’t look like bugs, sometimes you can exit out of the program, go back into it, and the issues with compiling will magically be resolved.

Overall, I still haven’t decided which I’d like to dedicate the majority of my time to-- I keep flipping between the three, doing little bits on on all of them and learning more and more about it.

Thanks!

TADS 3 also has support for creating inventory windows using the banner tag, although I have no clue how it works. Using the T3 Cartographer extension to create the map, then displaying the map in a banner window, as well as creating an inventory window shouldn’t be too hard, but it does require knowledge of the banner API.

1 Like