My Preliminary Survey of Text-Adventure Development Systems

IIRC from NarraScope 2019, the plan is to parse those fragments of Inform 6 code and translate them into the same intermediate form as Inform 7 code, which will then be translated to the target language (possibly Inform 6 itself). This should be transparent to authors.

1 Like

The distinction between “implementation detail” and “disguise” can be a bit philosophical, but I think the right question to ask is, “how is the code best understood?”

Is SQL best understood by reading the analyze query plan? I say no. You can learn quite a bit by reading the query plan, but the query plan makes some things easier to understand while it makes other things harder. TypeScript is not best understood by reading the JavaScript it transpiles to. C++ is not best understood by reading the C version, say nothing of its assembly code.

Similarly, Inform 7 isn’t “best understood” by reading the Inform 6 transpilation output, or even by thinking about what ideal Inform 6 output would/should be.

I recognize that what is easy for one person to understand may be hard for another person to understand, especially depending on their background. If you’re a C expert, you might appreciate reading the C++ transpiled output, at first, in order to learn how the machine works. But as you learn more C++, you stop thinking about what the C output would/should be, and instead think about the code in terms of inheritance, encapsulation, and polymorphism.

5 Likes

I didn’t intend to start a language war. I was only wondering if my research covered the viable options for the task I plan.

I think all the systems I found are capable, and it looks like Inform 6, I7, and TADS 2 & 3 all have users around here who can help if I have any implementation problems.

AdvSys, Alan 3, and Hugo users appear to be absent or elsewhere, and Dialog, Adventuron, and ZIL are still being developed.

I look forward to working with you guys. You all appear to be quite knowledgeable.

1 Like

I’ll put a plug in for TADS 3… I love using it and find it very powerful, and I don’t even work on a Windows machine with the Workbench program…

2 Likes

When I first encountered SQL, I had a surprisingly difficult time wrapping my head around it. I was so used to procedural languages and the concept of a declarative language through me for a loop. (Or, rather, I kept wondering where were the loops in the program?) It seems odd now, but it was so.

I sort of had the same initial reaction to Inform 7. I think the paradigm just takes some getting used to and coming from a programming background may actually be something of a hindrance when it comes to learning Inform 7. You need to take it on its own terms.

2 Likes

I’ve noticed that each language seems to adapt itself to certain types of games and puzzles. Eric Eve used TADS’s conversation possibilities extensively, as well as its modeling of real-world phenomenon like smells. In my opinion, its structure (which I know almost nothing of!) focuses on place and object.

Inform games with the before/instead/after rules seem a lot more ‘event’ based. Especially with scenes, which let you string all the events together.

Quest and ADRIFT (which I think you left off because they’re not multi-platform?) tend to focus only on an exact playthrough and any deviation from that remains unimplemented, unless the author puts in a lot of effort (like Denk).

I haven’t really looked into the others (although Dialog looks cool), but I swear there’s a Sapir-Whorf hypothesis thing going on where the ‘language’ you use shapes your artificial reality.

(I love game/system preservation, so I think it would be awesome if you did TADS).

8 Likes

I like TADS 2 & 3’s user interface too.

Things like image maps, dynamic window panes, lists and such give you a lot of presentation options like the ones Legend and Magnetic Scrolls used.

2 Likes

I don’t want to sound like a jerk, but you’re not talking about entering this year’s comp, are you? I mean, that’s the the part of your question that would concern me most. I realize some people work best under pressure, but think of your beta-testers. :wink:

2 Likes

I’ll assume you’re not as familiar with debate as with compilers. The facts were and are correct, but as you point out my argument was faulty because it was essentially a straw man argument, which I didn’t really consider at the time. Well played.

This basically says what I intended to say.

Musings of another onlooker: In terms of my own programming experience with typed-in languages, I went straight from Applesoft BASIC and a bit of 8 and 16 bit assembly in the 80s and 90s to Inform 7 in 2010.

Based on that, you might expect me to be someone who thinks of I7 in terms of what’s underneath the English language element. But I don’t. I just know that instead of saying

10 A=0

I’d now say ‘A is initially 0.’ In my brain, they’re equivalent, and I suppose this is the bit of learning I7 that is tricky for non-programmers; to me, a lot of its statements and the logic you’ll use to get things done are still programming in the traditional way, which I did back on the Apple II. So new folk who’ve never had to write a For… Next loop have to take that concept on board as well as the syntax for it in I7, the first time they need it. I only had to learn the syntax. The idea of using it came to me as appropriately as ever.

The rules-based element was the new bit for me. But it’s fairly specific, so you just keep reading the instructions and doing it and asking questions, and then you get it. Well, I should say ‘and then I got it’. And actually I used Aaron Reed’s book in the beginning.

My I6 is shallow and I only ever think about it if I have to include a weird bit that does something weird. I can sometimes hack I6 code with instinct, but I could mostly never write it from scratch, nor have I ever needed to. I went to I7 to mostly avoid that kind of thing!

-Wade

3 Likes

Multi-platform seems to be something you are keen on, so what platforms are you actually wanting to target?

I consider the Legend UI the best for text/graphic adventure (albeit the adaptive command sidebar can be considered a major spoiler source…) so I concur and agree.

1 Like

my general comment, from one polyhedric in coding (and actually my first question in tackling a general programming/coding problem is "what is the best language for tacking this) is that all major IF parser-based language has is strenghts.

TADS 3 has by far the best support for NPC handling, when I7 has by far the best support for act-based IF and an excellent handling of adaptive prose (said handling even got implemented in TADS3.1.x), and ALAN has the maximum flexibility in parser definition (from verb-noun to a sophisticated one) and together with Hugo, are the easiest to code.
TADS 2 and Inform 6 are very flexible and have a large contribuition library, and are the twin foundation stones of IF programming. IMO, a serious IF coder must know both as their hands.
Lastly, Dialog is the “black horse”, based on goal-orienting general-use language (Prolog), and I think that a goal-oriented language can be be an interesting innovation in IF coding.

of the “legacy” IF language, ZIL/ZILF is, for obvious reasons, by far the major one (now having unquestionably the best set of source code examples…), when advSys and ADL have their foundation in LISP, and strong as object-oriented language, but for me, even with modern editors and syntax-checkers, I can’t suffer more than a pair or three nested same-type parenthesis (I have no issues with mathematical parenthesis nesting {[()]} <— as those) when AGT/Magx trade true programming with ease of use, and remain good for non-sophisticated IF.
Scottfree suffer from the original author lost under bo(u)rne again, if one catch my drift, and indeed I’m still prodding him for info on the remaining issues in decoding his format, but scottkit is an excellent language and sac is “without infamy nor merit”, as we say in Italy. (if scott2zil is modernised, should be possible to even use scottkit as I6 frontend, like I7)

that’s all. sooorry for the wall of text :wink: but I suppose I have done a worthwile perspective on current parser-based IF language scene.

3 Likes

Anything you can type on, ideally. That’s why I was looking at Glk support. As far as I can tell, someone’s built a Glk I/O library for just about everything.

They both looked very versatile. I think the biggest difference is presentation. Inform 6/Z-Machine seems to only provide two window panes with text, while TADS/TADS VM allows for any number of window panes filled with any combination of text and images and hyperlinks.

That is true, but if what you’re particularly interested is multi-window UI, images, and automapping, Glk will, uh, “gracefully degrade” that for you, eliminating all of that stuff.

In practice, if you do the naive thing, the mobile version of your game will probably just not have a map. Some of the many platforms that Glk supports won’t even have a status bar.

There’s a good argument to be made that you should design your game with accessibility in mind, which means screen reader support. Screen readers typically don’t support any of that stuff, either. If you design your game with the assumption that the game has to work in single-window mode, and make all of the UI enhancements optional, then you’ll probably be fine.

But following that rule that means that you just can’t design a puzzle that inherently requires an image, which is a tough pill for some designers to follow.

2 Likes

Let me just add, that just like SQL, Inform 7 is especially good at handling relationships. If you want your eyes opened, read chapter 13 of the Inform manual, especially example 244.

This goes way beyond “syntactic sugar.” Do any other IF systems put such an emphasis on relationships?

2 Likes

I can live with that. Thanks.

I7+Glulx can do any number of windows, graphics, and hyperlinks too. (It’s also possible to do this in I6+Glulx but it takes more work since you don’t have the ready-made extensions at your disposal.)

It doesn’t have built-in auto-mapping, although there are some extensions that provide support (I haven’t tried them myself, so can’t comment on that).

1 Like

I never liked the default “Menu” mode in the Legend games, since I find it much quicker to just type what I want and I think the menus make the screen look cluttered. The first thing I do when playing one is to switch to the “Half” mode instead. That leaves the entire bottom half for the text, and the top half for the graphics, the compass rose and a handful of buttons.

So I agree that it’s a good UI in the sense that it has a mode for me as well. If anyone wants to emulate that, I’m all for it. :grinning:

On the other end of the spectrum, one adventure game interface that does not work for me is the “Magnetic Windows” one that Magnetic Scrolls used for Wonderland and the Magnetic Scrolls Collection. It’s technically impressive, and it looks nice on paper: A window manager with movable, resizable, overlapping windows. One for the text, and optional ones for the illustrations, the map, the compass rose, your inventory, and objects in the current room. (Objects are shown as icons.)

But once I started playing, I found it hopelessly cluttered. If I tried to use more than two of the optional windows I just couldn’t find any way of arranging them that I found useful, and when I started moving around I realized that not every illustration was the same size so all of a sudden it might overlap the text window, and… I just found it frustrating to use, especially compared to their older and - in my opinion - more elegant solution of a plain text screen with the graphics as a roll-down curtain at the top.

1 Like

What type of modernisation o Scott2Zil are you thinking about?

I wrote Scott2Zil this summer and it lets you take the output from ScottKit (or one orginal SA DAT-file) and drop it in a ZIL-template file that you then can compile with ZILF to get it to run inside a Z-machine.

Maybe you are thinking of Scott2Zip that is a couple of years old and converts the DAT-file to I6 format?