Is there any good in-depth do's and dont's guide for IF?

Yes, this is how you deal with multiple objects that are the same name, by using the privately-named property and “understand” rules. Another approach is to just make sure everything in the game is unique at least by giving it an adjective: The bay window, the arched windows, the large windows, the dirty windows, and so on.

I’m fairly sure it will work to have a “car window” even if there is a car, though sometimes you want to be absolutely clear to the I7 parsing by using this phrasing:

There are some windows called the car windows.

“Does the player mean” rules become fairly important when dealing with ambiguities like that, though.

No, don’t bother with that. Nobody should ever(*) use privately-named.

(* There are situations where it turns out to be useful. I think. But I can’t name one off the top of my head.)

Creating a hidden state for a door, since you can’t just teleport the door out of nowhere.

True! But not my favorite way of dealing with that case.

(It turns out you can teleport a door into nowhere, and then later teleport it back, and it works fine as long as you put it back in its original location. And fix up the map connection references each way. Is there already an extension for this?)

I kind of got into the habit of using privately-named because I figured the player being able to type “get intro-room-ball” is a crime against mimesis.

That, specifically, is the attitude I disagree with.

Because one: the player will never do that. And two: if the player does it, they know what they’re getting into and won’t hold it against you. Three: there is no mimesis on the parser side of things, that’s pure get-the-damn-machine-to-understand-me. Four: really, the player will never do that – unless they’ve read the source code, in which case they know exactly what they’re getting into.

(Raise your hand if you were bothered by all the hyphenated internal names in Hadean Lands.)

Oh I fully understand it’s more satisfying my own obsessiveness than actually improving player experience.

Would it potentially create problems with an auto-complete or auto-correction extension for Inform?

It seems I’ve used it in my last two projects. One of them was simply a matter of allowing myself to use a non-hyphenated internal name:

A bread knife is on the countertop. The bread knife is privately-named. Understand "breadknife" or "bread knife" or "knife" as the bread knife. [So "bread" doesn't keep disambiguating to the ding bing bread knife.]

I could’ve called it the bread-knife and used the Understand statements and a rule for printing the name, but that would’ve been more work than what I did. (Or I could’ve just called it the “breadknife” internally. That probably would’ve been simplest.)

The other was, well, this mess:

[code]A terrain feature is usually privately-named.

Understand “ridge” as a ridge when the person asked surveys the item described. [etc.][/code]

where all the terrain features are actually always in scope, being in the same room as all the robots (which is in scope for the player), with some hand-rolled visibility checks to determine whether the robots can actually see the terrain features (that’s what’s in the “surveys” check). So I don’t want “ridge” to be understood unless the robot being commanded can actually see the ridge.

That’s… not a case that’s likely to come up for anyone else.

iFrotz has autocomplete. It is probably not fun to start playing and find the autocomplete filling out hyphenated words.

Seems to be another case where privately-named comes in useful. Disambiguation can be nasty when it’s not working 100%.

That’s the player’s decision. Autocompletion is never going to work well for my games; I always put in way more synonyms than are suitable for a good autosuggest list.

Matt was specifically talking about the case where he chose a non-hyphenated internal name that turned out not to disambiguate well.

Really, the easiest way to avoid all of this is to use hyphenated names for every object, set Understand lines carefully, and ignore privately-named as irrelevant.

Depends on what you count as easiest. It’d be pretty annoying for me to type hyphens every time and then keep hitting compilation errors (or worse, silently double-created objects) because I typed “rice cooker” instead of “rice-cooker” in the source text, when the rice cooker doesn’t have any namespace clashes. And it was also probably less effort to type “privately-named” for one object than to set Understand lines for every multi-word object.

It’s surely easier for you to have got into the habit of hyphenating and setting Understand lines, but this is a case where mileage varies.

…for that matter, even if I were in the habit of creating hyphenated object names and then writing Understand lines for every multiword object, I still would’ve automatically had “bread” and “knife” and “bread knife” understood as the bread knife and then gone through the exact same process where I discovered that “cut bread” disambiguates to the bread knife rather than the loaf of bread (because the player is holding the knife).

True. I suggest it publicly in case any new I7 authors are looking for good habits to start with. :slight_smile:

Sure. But you wouldn’t have had the additional hassle where the direct solution (removing a synonym) was more awkward because it was baked into a lot of source code.

Baked. Ha ha. Baked.

In my IFComp game, I had privately-named objects in rooms that represented hallucinations so scope could pick them up when randomly selecting an object to show in the dark, but the player couldn’t ever encounter them when the room was lit.

That’s an interesting case. Normally I’d say, if you don’t want the player to refer to an object, don’t put the object in the room. Relying on namelessness can leave you open to accidental “all” or “it” references.

But you want objects conditionally in the room. Swapping lots of objects on and off-stage when the lighting changes might be expensive.

Instead, I might rely on a conditional place-in-scope rule. Or I might get really cheesy, and make all the hallucinations part of a “darkness” object so I only have to swap one object on and off-stage. :slight_smile:

And it’s a pretty obvious decision on a mobile device, and it’s pretty unfriendly of an author, in this day and age, to know about this case and not take it into consideration. It’s not something the player should be punished for. It’s not like source-diving. It’s just trying to the play the game comfortably on a smaller device.

Especially when the author in question is actively pursuing iOS as a platform for his games. iOS does include iPhones and iPod Touch, not just iPads.

I really dislike autocomplete on my desktop. On my iPod, though, it’s a necessity and I’ve come to love it.

Having said my piece, though, I admit: I’ve played lots of your games in iFrotz and the issue never did arise.

Slightly off-topic but since it came up and is related to playing on smaller devices, could you consider upping the maximum font size limit? The only font I can read comfortably on your iOS terp is the maxed-out Euphemia, or whatever it’s called, and it’s pretty ugly. I’d like to be able to use Baskerville, which you do provide, and all I’d need for that is for you to increase the font max limit a bit.

iFrotz also had a smaller font max limit. I asked the dev to up it. He did. My eyes are eternally grateful.

First of all: I didn’t mean to kill off the thread and/or the discussion…

Secondly: I’ve just started playing Hadean Lands. You may be pleased/interested to know (but then again, you may not) that so far iFrotz (which I’m using even though I also bought your app because autocomplete is a necessity for my iPod Touch; it’s a paying user’s feedback, ignore at will) has completely failed to bring up a horrendous list of hyphenated nouns. Privately-named or publicly-named, it’s autocompleting only proper words. This is either a happy accident or good design in naming stuff in the first place; since it’s zarf we’re talking about, I incline towards the latter.

Thirdly: I’m enjoying the game a lot. I’ll probably curse you mightily when I start getting stuck, but so far it’s refreshing, solid, intriguing. I always did like your games. And your writing.

Lastly: I would very much like to know why you keep stum every time I mention the font limit. Is my feedback not good enough because I didn’t back your kickstarter (because I never give out my credit card information over the net; I instead create a virtual card, which is only good for 24h, making it impossible for me to use kickstarter), and instead bought two copies of your game? A simple “Acknowledged” would be sufficient. I’m not asking you to run off and make that change on my say so; but you’d think it wouldn’t be too much to expect the author to say something to a paying user, especially when that author is around here and freely available and is clearly choosing to ignore my issue.

Mods: I would have PMd this, except that a) the first point is for this thread, and b) zarf already said that PMing him is a lost cause.

I honestly haven’t look at how iFrotz does this. Nothing in HL is declared privately-named.

Ok, I’ve seen your comment.

Thank you. :slight_smile:

I believe iFrotz takes a look at the game’s dictionary somehow… anyway, I’m still playing and I still haven’t run across anything hyphenated (except for stuff which is meant to be hyphenated). So maybe the whole thing was moot to begin with, and if so, my apologies.