I’ve been hanging around the IF forum for a while now, and there is a commitment to use the still-in-beta I7 that puzzles me. Two particular misunderstandings leapt off the page at me.
One is that people generally recognize that the Inform 7 docs suck (as I’ve pointed out in several articles here, and here), yet they continue to use the language anyways. Why? Maybe they were where I was, thinking that their game was small enough, or easy enough. Maybe they think that other people learning stuff and telling it to them piecemeal on a forum is enough. Maybe they have some kind of faith that the docs will eventually end up in a useable format.
If it’s the first of these, I can understand that pall of benighted intellect; I too thought I7 was a realistic environment for a game of about 20 rooms. I was wrong, and while my code didn’t end up look as bad as Weischaupt Scholars, it got uncomfortably close. If it’s the second reason, they are fools and are doomed to be frustrated, and if it’s the last, their faith is horribly misplaced.
After three years in beta, the Inform 7 docs are not going to reach a state of usefulness any time soon. They are not written like a technical manual and in order to get them to that point, they will have to be rewritten entirely (see the whole rationale here). In other words, there’s a reason why other manuals for I7 exist. Even they are not enough, as the frustrated folks on the forum attest.
Another person blithely thought that someone could learn English by learning I7. *expression of gape-jawed incredulity* That statement would deserve a pass if I7 modeled English’s word-order flexibility, its natural synonyms, and its general robustness (leaving out an article doesn’t render the sentence wholly incomprehensible, for instance). However, I7 does none of these things, which guarantees that prospective learners will not understand English, but at best will master elevating their own heart rate unproductively. Unfortunately, they will learn how to despise a caricature of a language, and believe that the caricature is the language itself.
First, I7 assumes that there’s only one way to word your sentence: e.g. Now the boat is floating (works), is not the same as The boat is floating now (fails). Learning I7 would not teach anyone about English’s word-order flexibility. You would learn a set of arbitrary rules, not the language, and even those rules would be erroneous (that ‘now’ must come first in any sentence is wholly false).
Second, I7 teaches that words have few or zero synonyms, which is about as far from the spirit of English as possible! It teaches that you can never use options as choices for verbs or prepositions — that selling the baby or the sock doesn’t make sense. Yet, that phrase is structurally sound English and simply comprehended. Another example: the phrase in the bathroom or the bowl, likewise isn’t understood by I7.
I7 was never designed to be English, so any dreams of learning English by learning I7 are woefully misconstrued. Other computer programming languages, although they using a handful of phrases in idosyncratic ways (with in VB, for in C, picture in COBOL, etc), do not read like English, and at best read as some sort of pidgin language. The text surrounding their appropriated phrases is clearly not English and that makes it easier/easy for the programmer to craft a separate semantic space for the new language. When learners scan a block of text, they are able to tell quickly, “Ok, this is VB. I will understand ‘with’ in the VB way.” However, Inform7 doesn’t allow you to do that. When you look at I7 code snippets (not real games — they look like this) at first blush, they seem to be English — only, frustratingly, their words don’t mean what English words mean. So you have to keep reminding yourself that this is not English and that the words you see don’t mean what they mean in English and most frustrating of all, that they can’t be used like English words. The lack of typical programming language constructs confuses and makes understanding the language a constant challenge, because whenever you attempt to use I7 like English, there’s only a small chance that you’ll guess what its idosyncratic designers designed the language to do. Programming in Inform is much like learning to conduct a symphony with your right hand when you are a southpaw that suffers from hearing loss. The context doesn’t help you interpret the language. It tells you that you are reading or writing, and you aren’t.
Finally, what I7 teaches the prospective English learner about English itself is that it is: changeable by only a few (false), highly resistant to change (false), that it does not adapt to the needs of its learners (false), that it consists of a maze of one-way streets (false), that it is poorly documented (false), that it is brittle (false), and that it is unsuited for long works (false).
If I had realized earlier the true nature of I7 (brittle, deceptive, poorly documented), I would not have used it for New Cat. I would have gone the I6 route or even the Alan route. What did I learn? Even a relatively small game will end up in pages and pages of confusing quasi-English that becomes almost impossible to parse. The problem there is that the prose isn’t a narrative, so there’s no built-in way for you to understand it, and artificial distinctions don’t make sense from a linguistic perspective. As a point of comparison, Seasons is ten times the size of New Cat (at least) and because of its semantic shortcuts and non-English nature, it is only a quarter more difficult to understand.
Liberate te ex infernis.
You know, sometimes programming sucks, especially when you’re at the mercy of other people who use English like silly putty.
Recently, I decided to use backdrops in Inform 7. I went and read the docs (3.9). Ok, all was well and good. I had a statement like this:
Carpet is a backdrop in Urinal Mint City, Defecatory, and Turdopolis.
Defecatory is a room.
When I compiled and ran the game, the first room turned out to be Urinal Mint City! I was stunned, and it chewed up probably an hour of my life figuring out what had gone wrong. So, I opened a ticket. In return, I get this.
Yes, I feel that the documentation is inadequate. That’s mostly because the DOCUMENTATION SAYS NOTHING AT ALL ABOUT LISTING A ROOM IN A BACKDROP DETERMINING WHERE PLAY BEGINS.
The problem here is that Inform7 attempts to use natural language — only when it doesn’t. So you have a freshly-minted newbie trundling along only to hit a pothole; he says, “huh?” and extricates himself. Then it happens again, and again, and again. Or, you have the case of a programmer who is trying to make the switch to a psuedo-NL construct and finds that he really can’t trust anything he reads or types.
Specifically, to say that listing an item in a list “defines” a room is so foreign to me and probably most other people that I’m speechless. What sort of definition does it give to an item? None! It says that backdrop is in that, but what that is, is wholly unknown. Even if you wanted to say “From the compiler’s perspective, it indicates that the items are rooms and that they exist”, that’s fine — except that there’s no defining of the room in English! It’s a forward reference people! That’s all! It’s no definition! And anyway, why is being listed in a backdrop, from a human-understanding perspective, saying “This is where play begins”? No-one would ever deduce that by looking at it, and I thought the goal of Inform7 was to make readable code? The website definitely implies it!
The problem here is that instead of making a design decision that makes sense — listing items in a backdrop will place them into a backdrop — and leaving it at that, I7 has decided this: “The writer must know that placing rooms in a backdrop will tell the language that the rooms are being defined, and thus, that game will start in the first room listed.” This forces the writer to understand what’s going on in the compiler, which means that the entire abstraction of Inform7 has been discarded.
Now we have to be aware of what the compiler is doing when we write code. Lovely. If we’re going to do that, why don’t we just use Inform 6? This whole ping-ponging back and forth is so tiresome. Just when I think I’ve got my game done, I’ve discovered another shortcoming of Inform7, and worse, when discovered, I get some holier-than-thou blowback about it “being by design”. Why don’t the people at I7 just admit that they don’t have a consistent design philosophy except that the language is assembled by whim?
I don’t mind learning a new paradigm, but when the paradigm is just what a handful of people have decided to do, then learning it is impossible, because there is no regularity.
While working on New Cat, I was curious how to do a one-time room description; in Inform 6, I used the visited attribute. How could I do it in Inform 7?
As it turns out, I’m still not sure. I searched through the documentation provided by the IDE, and the results returned by the search were completely unhelpful. The closest thing I got was a page that talked about how to set the initial descriptions of items, but which (horribly unhelpfully) noted that you can’t do that with a room because a room doesn’t have an initial attribute. And how was this noted? You guessed it — with the usual pat on the head, the “good dog” kind of insulting, demeaning language. Yes, the personality of the writer (whom we all know) is shining though. Freaking thanks. So what are the properties of a room? Are they the same as in I6? If so, how do I manipulate them in I7?
Fifteen minutes of looking didn’t turn up an answer to any of these questions. Ok, fine, whatever. I went out there to find other manuals and apparently no-one else has addressed this issue either, which I find nothing short of amazing.
I guess it’s up to me to write an Inform 6 -> Inform 7 technical guide which explains how to do the things in I7 that you used to do in I6.
Yes, I have decided to start some side projects along the way towards completing Seasons.
The first one, thus far named Brickhouse is a modern-day/surreal/horror story set in corporate environs. It is not related to my previous effort, Building. I’m writing it in ALAN 3. It will be a game of medium length.
The next one is a dreamy/romantic/slice-of-life story called New Cat. I’m writing this one in Inform 7. It will be a medium-short game.
Why am I doing this? Am I glutton for punishment? Have I no life at all? Leaving those questions as merely hypothetical ones, I did want to learn other IF programming languages to see how well they stacked up to Inform 6. I also have the feeling that Inform 7 is probably ready for prime time.
So here goes nothing. I’ll be keeping myself on track here as usual.