Beginning with Inform 6 in 2011...

I would like to start writing IF, but I don’t like Inform 7. I want to use Inform 6, but I like Inform 7’s nice IDE. I seem to remember it was possible to write Inform 6 code in Inform 7’s IDE… but only on the Mac side. I am a Windows user, so is there any way I can write in Inform 6 without going back to the old interpreters, editors, etc.?

I don’t know of any I6 IDE for Windows. With an I6 project that I was working on last fall (still unfinished), I found a very nice freeware text editor called Notepad++. It has user-definable syntax coloring and code folding.

To compile the game while working on it, I created a batch file (as described in Roger Firth’s Inform pages). No need to open a Command Prompt – just double-click the .bat file in Windows Explorer, and then double-click the .z8 (or whatever) file to launch the game in the interpreter of your choice. It’s a pretty transparent workflow.

There’s no index or map creation utility, but if I recall correctly you can save and run .rec script files. Don’t remember the details, but it’s almost as good as the Replay button.

BTW, I happen to think I6 is a very nice authoring system, easy to use and not obsolete at all. On the I6 extensions page you’ll find an extension I wrote last fall that provides TADS-3-style event lists, which I found very convenient for implementing flexible conversation systems. (They have other uses as well.)

Similar to Jim, though I use Textpad. Its also described on Roger’s page how to set it up. Colour coding if required using a config file from Textpad’s website. Compilation and execution is done from commands added into Textpad so very easy and quick. I6 fan here as well :slight_smile:

Beyond the use of an IDE, is there any inherent loss of functionality from a language standpoint in with going with Inform 6 rather than Inform 7?

I know Inform 7 has the nice IDE and the (to some) nice natural language approach. There are constructs that I could do without (tables) and constructs that I like (relations). But what’s not clear is if the same overall gaming experience, from a game-writer perspective, could be provided by Inform 6. I can see how it might be harder in some ways to code an equivalent experience in Inform 6, but is it possible? Is there anything that can be done in Inform 7 that just can’t be done in Inform 6?

I’m guessing not since Inform 7 seems to be, when you really get down to it, just a pretty face for Inform 6 and, in fact, a high-level DSL for Inform 6. But it would nice to know if that impression of mine is true. I guess what I’m trying to figure out is whether the relationship between Inform 6 and 7 is more like that between Java and C# (i.e., real close but some things are made easier based on what you choose) or is it more like that between, say, Visual Basic 6 and Ruby (i.e., some conceptual things are similar but there are just certain aspects you aren’t going to get in the one versus the other).

Inform 7 programs compile into Inform 6, so the answer is “no” (if I understand your question aright).

That’s what I figured. So that would mean that relations – a seemingly key feature of Inform 7 – could be done in Inform 6, albeit with perhaps more apparent work on the part of the programmer since you’d have to do all the back-end work yourself. The tables, I’m guessing, would be done with arrays or something of that nature.

There is the matter of extensions to consider. Inform 7 has, I believe, more (and more modern) 3rd-party extensions. There’s a nice set of I6 extensions in the archive, but many of them are older, some are definitely obsolete, and many are no longer supported by the authors.

Things like relations, scenes, and tables are easier to code in Inform 7; you’ll have to do it yourself in I6, and that will take some mental effort. Directions on the map require a bit more coding, because you have to specify the exits for each room; I6 doesn’t attempt to guess.

For my personal taste, I6 is a better programming language, simply because its syntax is always conceptually clear. In trying to be friendly to novice authors, I7 provides a forest – seemingly scenic, but nonetheless a forest – in which confusion lurks behind every tree.

I6 has multiple inheritance; I7 doesn’t. For some types of programming, this may become a useful tool.

Perhaps the most attractive feature of I6 is that it’s stable. New features are not being added; old features are not being deprecated. There are still a few known bugs (and you can find the list online if you hunt for it), but they’re rather obscure.

The I7 IDE will wrap your game inside of a web page for online publishing on your own site. This is very cool – but you can use the I7 IDE to wrap your I6 game in exactly the same way.

Even for experienced authors I think I7 presents that forest – it’s just one that’s been slightly better charted. I say that because I find that even as you get used to some of the aspects of the forest, you still find yourself having to jump through hoops. Sometimes I get the feeling these hoops exist because of Inform 7’s heritage, which is apparently Inform 6. That’s why I started investingating Inform 6 itself.

Most programmers who have been in the industry awhile will prefer composition over inheritance so this isn’t that big of a deal to me.

Overall, though, interesting points you bring up. Like you say, Inform 7 is clearly the way that Inform development is going. To be honest, I see Inform 7 more as an experiment with natural language and rules. As such, I almost wish the development team had just come up with a new system rather than trying to rely on an existing one like Inform 6. (That, of course, would make Inform 7 something different entirely; maybe Inform NG: Next Generation.) I see why Inform 7 wanted to maintain the past with Inform 6 but in that case I would have just had people use Inform 6 to keep connection with the past and use Inform 7 for the future. I think some design limitations are built in to Inform 7 due to the nature of the baggage it brings from Inform 6 and from the fact that it still tries to support the Z-machine.

I’ve found where Inform 7 stores the auto.inf file which appears to be the Inform 6 code. I’m looking at that and comparing it with “non coverted” Inform 6 code to get a feel for what makes sense. The programmer in me screams for TADS 3 but like I said elsewhere, it looks like Inform has the momentum and I usually try to stick with what has the momentum.

The use of I6 as an intermediate language was not due to a desire to keep I6 around, but a desire to keep the Z-machine around (with Glulx as a planned upgrade path). I6 is pretty good as a thin layer over Z-machine capabilities. I7 could have been built to generate Z-machine assembly output, but that would have been a lot more work for very little benefit.

Whether I7 should have jettisoned the Z-machine/Glulx-style “primitive VM” model is a deeper question. There is indeed a lot of baggage there, but also a lot of advantages, and I don’t think you can conclude anything other than “it would have been a really, really different situation”.

Whether I7 should have jettisoned the name “Inform 7”, and positioned itself as something other than a successor to I6, is a much shallower question. :slight_smile:

Agreed on that. But I would argue keeping the z-machine around probably didn’t need to be such a focus. After all, Inform 6 could be used for that. There was already something perfectly viable and, as others have indicated, stable for those who wanted to focus on the z-machine. The fact that Inform 7 exposes aspects of the virtual machine logistics to a game author is potentially a questionable design decision as it is. Not wrong, mind. Just one at least open for debate.

True enough. Although the names of things can set expectations and also serve as a banner aspect that does matter in development projects. That’s why Visual Basic .NET was not originally called Visual Basic 7. Essentially because the break from Visual Basic 6’s model was quite severe in some cases. Positioning yourself as a successor and a new kind of entity is not a bad thing at all, particularly if you hope to bring in new audiences or get people of different skill levels involved. That’s certainly the case, for example, with C++ vs. C#. I think maybe it’s sometimes hard to tell the separation between Inform 6 and Inform 7 (particularly since many extensions have so-called “I6 inclusions”). So maybe calling Inform 7 by some different name would have been misleading since Inform 7 is really, at heart, a pretty face for an existing implementation while adding in a few frills of its own.

I agree though: there are some deep questions and them some not so deep ones.

I can’t argue with anyone bashing I7 - it’s a grotesquely baroque language that requires an insane level of obsessive dedication to make things work. And yet, it’s the reason I got back into writing IF. I started a project in I6 a decade ago and never finished it because I felt like there was too much programming tedium in the way of writing a story. The irony is that I probably spend even more time on programming tedium now, but in I7, I find it fun. Is that because it’s a weird backwards way of thinking about things that presents a fun challenge on its own, or because it’s actually appropriate for IF? I don’t know.

But the thing is, I7 appeals to me as a programmer who was getting sick of OO programming. I get the sense that I was never the target audience.

It seems to me that the opposition to I7 is growing now. Is that because more people are discovering it and and its shortcomings, or because it’s changing in some way that makes it less popular? It seems like an important one to answer while the language is still in flux. Even if the answer is that the best audience for I7 is not the originally intended one, and that it’s changing to suit the new audience.

One thing I can say about I7 is that although it can be fiendishly difficult to write, it’s usually quite pleasant to read. I’ve always felt gratified when it’s easy to read code that I (or someone else) wrote and forgot about.

I think that might be the issue there. You’re not really writing a story. You’re writing a game. Yeah, it’s a game with a story but approaching Inform (or any game system) if your goal is to write a story may be counter productive. If I wanted to write a story – purely for the purpose of telling a story – I wouldn’t be turning to game systems, even if they are said to be produce “interactive fiction.” In reality any game that has a story produces interactive fiction.

I could understand that. I’ve worked with programmers who have worked with, say, Java or C# for many years and get really tired of it. But then they jump into Ruby and have a great deal of fun. They too are doing just as much programming as before, but the language has a different feel and flavor that makes it seem more fun, usually because it makes harder things easier to do. I can certainly see that being the case between Inform 6 and Inform 7.

Hmm, that’s interesting in that clearly Inform 7 does hide a lot of object-basis behind its rules system. But ultimately it translates down to Inform 6 which is an object-based language. So maybe it is just the presentation, which certainly can matter.

I couldn’t say. I’m way too new to this. What I can say is that Inform 7 feels to me like an experiment that as tried for a specific purpose that’s related to game production but that has the feel more of an academic experiment of sorts. For me Inform seems like a clever toy but ultimately just a pretty face for Inform 6 which seems like a very dated kind of system when I compare it to something like TADS 3. (I did take a brief look at Hugo as well and Hugo seems very much like Inform 6.)

I would assume the audience for Inform 7 as a game authoring system is for those who want to create games based on the old style text adventure format. Inform 7’s documentation seems to have some affectation for appealing to writers but I highly doubt you’re going to find established authors that are willing to give Inform 7 more than a passing glance and certainly wouldn’t stick with it for the purposes of writing a story. It’s a game producing system when all is said and done.

I don’t understand what you’re getting at. Who do you mean with “established authors”? Philip Roth? Thomas Pynchon? I too highly doubt that you’re going to find any of them who are willing to give Inform 7 more than a passing glance… because these people don’t write interactive fiction. But if you’re talking about established interactive fiction writers, well, many of them are using Inform 7. So… what do you mean?

You also bring into play the story/game dichotomy, and claim that Inform 7 is more useful for writing “games” than for writing “stories”. But such a dichotomy simply doesn’t exist: the amount of “story” (which I’ll define as plot and character development) has very little to do with the amount of "game (which I’ll define as puzzles and tactics). An interactive fiction could contain a lot of both, a lot of one but not the other, or little of both. Four extremes would be Make It Good (story and game), The Art of Fugue (game, no story), Photopia (story, no game), and Being There (no story, no game). Two of those were written in Inform 7, and the other two were written in Inform 6 but could easily have been written in Inform 7 (had it been available at the time).

When all is said and done, Inform 7 is neither a game producing system nor a story producing system: it is an interactive fiction producing system. It allows you to model a world with places, objects and actions, and whether you use that world to tell stories, create challenges, or do something else is up to you. I fail to see how Inform’s features would force you to choose any particular path here.

Your distinction is what I meant. Saying established interactive fiction authors use interactive fiction systems means nothing except the obvious. Yes, obviously interactive fiction authors use interactive fiction systems. Saying established authors of fiction (novels, short stories) use interactive fiction systems would say a bit more because it would suggest they are trying new routes to for a fictional experience. This was tried with some games like Mindwheel and Amensia. I remember that much. That would be a different thing entirely if that was happening again and to me kind of interesting. So when I heard Inform 7 was designed to appeal to writers, it seemed obvious (given that it extended from Inform 6) that this would imply interactive fiction writers. The only reason I figured someone would mention “appeal to writers” is if they meant that in a wider context.

I think it does both. It allows you to produce a game that has a story component. (I suppose you could produce a game that has no story at all.) But any game engine can do this. The games out there now on the market are games created with an engine and that create an interactive fiction experience. How is a game like Dragon Age not interactive fiction? It’s a game you play (interact with) that tells a story. Or if you want to go with past games, consider Monkey Island or Maniac Mansion. Those were interactive fiction. The word interactive fiction doesn’t automatically mean “text only” although it seems like some people treat it that way. I know that Infocom used the term and no other game companies really picked it up but, again, that doesn’t mean that any game that has a story is not a form of interactive fiction unless you qualify that phrase to only apply to text-based games.

I love Python. I think programming in Python is fun too. But I use Python for data munging and GUI development. I don’t think it would be fun for writing IF. For me, traditional OO programming is great at GUI development, but not at the kind of parsing and world modeling needed in IF. OO programming is all about generalizing. It’s about separating data and logic. Realtime 3D games depend a lot on physics, which can be modeled well with OO code. But turn-based, text-only IF uses only as much physics as absolutely necessary. It’s more about special cases, where it would be difficult to separate data and logic. For that purpose, I7 feels more like a data language than a programming language.

As a matter of fact, I’m working on an application at my job that involves morphological analysis of natural language. The application is written in Python, but I’ve gotten very frustrated with the difficulty of implementing rules of grammar and morphology. I’ve been considering rewriting the code to use an I7-like rules model, where a text can be processed by a rulebook and if there is a problem, I can easily identify the rule that raised the error, and where the error occurred.

As an aside, how are you doing that in Python? I’ve had some success with NLTK, even for a non-configurational language it wasn’t really aimed at AFAIK. Lots of regexs are really essential and of course should be used for IF too, but the NLTK classifier I used did some fancy complex AI maths in the background and would be too slow for IF I fear.

Also, how did you get the job and can you set me up with one :stuck_out_tongue:

Nothing fancy, just some data files and a bunch of regexes. The main morphological analyzer is written in Perl (though someone here is working on a Python port) and mostly I just use the output. My code comes into play when the morphological analyzer doesn’t provide the correct output.

:laughing: Truthfully? I knew somebody who works here. But if you live in Philly, I’d say you have a shot. It’s at the University of Pennsylvania.

Well, OOP is also about encapsulating, meaning you put data and logic together where they are relevant or operative with each other. OOP is not just about generalizing; you can also say it’s about specializing. You create more specific instances of a general class. I agree that if you look at things in terms of polymorphism or patterns, then, yeah, the focus is on generalization. Which, of course, doesn’t mean that’s always how people conceptualize. Interactive fiction offers an interesting play ground for this because it’s a type of thing that has a relatively low barrier towards entry. You don’t have to be a musical composer. You don’t have to be a graphics artist. You don’t even have to necessarily be all that good at telling a story. All you work with is text. So really interactive fiction, which would seem to open itself up to people who want a slightly less demanding game-creating platform in terms of graphics/sound/etc, would be a good venue in which to see how people prefer to express ideas.

By this logic, it would mean Inform 6 and TADS 3 have had difficulties separating the data and the logic. I don’t necessarily see that.

In some ways I do think Inform 7’s natural language front-end is like SQL or maybe even LINQ to a certain extent. The rules make it more imperative than declarative although, obviously, the interior of rules (with the phrases) act largely procedural in nature, which is in effect similar to how the logic of a method in an OO language would work. In fact, I can see Rulebook and Rule as a class and then specific instances of each being objects. Then the actual phrase set that goes along with a rule would simply be a method that can be passed different parameters (to qualify the execution of the rule).

Since Inform 7 ultimately converts to Inform 6 behind the scenes, I’m guessing this sort of conceptual underpinning is realized in some way. I don’t really see the OOP versus Rules-based distinction to be all that much of a distinction. But in terms of how it feels, like you said: yeah, I can see that. That’s what I meant about Ruby versus a language like Java or C#. People often really don’t care that Java is strict OOP while Ruby is multi-paradigm. They care about how easy the language makes it to do what they want and how much the language stays out of their way while accomplishing their goals. I can definitely see Inform 7 satisfying that. I don’t see that Inform 7 necessarily did anything programmatically significant over Inform 6 but I certainly see that it may have opened Inform 6 (since that’s what Inform 7 translates down to) up to more people. Whether that’s because of the rules-based aspect is hard for me to say. The IDE and the natural language aspects probably did a lot for that but both of those could be operative with an object-based language as well.

As I think on it though, speaking to design paradigms, I could see a good argument made for aspect-oriented systems for interactive fiction (or maybe the subject-oriented subset). Hmmm.

I’m not a computer scientist (well, yet) but I feel it’s fairly misleading to say that Inform 7 can do everything Inform 6 can do because I7 compiles to I6. This is sort of like saying a spoon can do everything a dump truck can do because they both can pick up and drop material. Technically true, but for a lot of tasks you’re going to be extremely sorry you chose the spoon.

For me at least, I7 lets me move my thinking up to a much higher level. When I want to make all the doors in a story close, I like being able to say

instead of setting up a loop, iterating through doors, setting the isOpen variable to false or whatever, and so on. My stock example of how this scales well is the line:

This takes 8-9 lines of setup I7 code to actually compile (telling it what sort of thing a watchdog is, how ownership works, that some creatures can relate to others via a hatred relation, etc) but once you’ve done that setup, you’re suddenly expressing things much more elegantly and clearly than you could in any other language I’m aware of.

The idea of a domain-specific language is to make things easier for working in a given domain, and I think for the domain of IF, Inform 7 does that very well. (Full disclosure: see my sig, I’m probably biased.)

The TADS equivalent to your example is something like:

modify Tom
            if (!gPlayerChar.isArmed())
            foreach (local dog in allDogs.subset({dog: dog.isVisible() && dog.isOwnedBy(self)}))

Which has more boilerplate to be sure, but the substance is similar and the style not radically different.

Is the Inform 7 way more elegant? Sure. Is it “much” more? I wouldn’t say so, even in this somewhat contrived case. (In a real game, Tom would not stand by in silence while being attacked, at which point your rule would sprout colons, semicolons, and significant whitespace.)