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.
And so it came to pass, that the deadline of the great feast of Christ (what is commonly called Christmas) was missed, and only several days later, did the game enter alpha-testing. Behold! New Cat has entered alpha-testing. Methinks it will be a long three(?) weeks, but after that, let the world quake with the beta period of New Cat!
Here’s more things that I wish were part of the language.
- Synonyms, synonyms, synonyms. Human (for person). Getting for taking.
- Allow a variable to be substituted for a number in the phrase “for ZZZ turns”. Right now, you can only use a bare number value here, which is poor programming practice.
- Condensed statements. Allow “X is a male person.” instead of “X is a person. X is male.”
- Showobj. What happened to this? In debug mode, you still have purloin, and showverb, but no showobj.
- In a rule, a verb that can take two or more objects. You can say “Instead of burping or changing the baby”, but you can’t say “Instead of taking the orange or the sock”.
- In a rule, allowing in to take more than one room object. You can’t say “if sock is in Bar or Bathroom”.
- A way to remove objects from scope explicitly. Right now you’d have to examine every object in a room to decide whether to put it into scope, because once you put a room in scope, you can’t take any of its objects OUT. *facepalm*.
- Allow synonyms for verbs easily. You should be able to say “Understand pee/potty/tinkle” as urinating. You can’t. You have to define urinating and then three separate verbs understood as it.
I got this in the e-mail this morning. Interesting stuff. I was most surprised/intrigued by the referrers section, because WP makes discovering that info a chore. Anyway, here ’tis:
The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here’s a high level summary of its overall blog health:
The Blog-Health-o-Meter™ reads Fresher than ever.
A Boeing 747-400 passenger jet can hold 416 passengers. This blog was viewed about 2,300 times in 2010. That’s about 6 full 747s.
In 2010, there were 36 new posts, growing the total archive of this blog to 84 posts.
The busiest day of the year was November 18th with 89 views. The most popular post that day was Inform 7 Bug Tracking Used For Personal Attacks.
Where did they come from?
The top referring sites in 2010 were Google Reader, en.wordpress.com, twitter.com, storme.livejournal.com, and ifmud.port4000.com.
Some visitors came searching, mostly for sturm und drang if, sturmdrangif, and zegrothenus.
Attractions in 2010
These are the posts and pages that got the most views in 2010.
Inform 7 Bug Tracking Used For Personal Attacks November 2010
The Sins of Inform 7 October 2010
The Inform 7 Documentation Fails as a Reference November 2010
How Many More Can We Lose? January 2010
The People’s Republic… July 2010