When compiling to v3, the compiler (v6.41) fails to give
'shelves//p'the plural flag.
When compiling to v3 or v5, the compiler fails to give
'superstructures//p'the plural flag.
(Also turned out to be true for
'superstructures//p' in Glulx.) Basically, the compiler would stop looking at the dict word after 6 or 9 characters, thus missing the
I agree that’s a pretty silly policy. It also leads to other inconsistencies. For example, if you write the dict word
'superstructüres' in Z-code, the compiler won’t notice the invalid character because it’s past the ninth character.
Okay, this is all easy to fix. I have a patch which tells I6 to scan the entire dict word. It limits the length of the generated dict entry, but not the source text scan.
However! It turns out this meaningfully affects the behavior of Inform 7 games.
As you know, I7 likes to add plural kind names to all objects. (There will be ways to tweak this in the next release, but it will still be the default behavior.) This means that every direction object has the synonym
'directions//p'. Which is, whoops, ten characters long, so it gets truncated. (Under both Z-code and Glulx, which default to nine character dict words.)
With the current I6 back end, the
'direction' word is not plural. With my updated I6, it is plural.
This gives us this change in behavior:
Which do you mean, the north, the northeast, the northwest, the south, the southeast, the southwest, the east, the west, the up, the down, the inside or the outside?
What do you want to get those things from?
Now, out of the box this isn’t very important. You can’t take direction objects. So this is just a matter of what confusing error you get from a command that experienced players will never type anyhow.
But it’s really hard to tell how this will affect games that define custom actions around directions. (Maybe a LOOK NORTH command.) Verb testing is always fragile in IF; any change like this could upset somebody’s carefully-tuned pile of grammar hacks.
It’s true that any major I7 release can upset game grammar. However, we’re trying to set a policy that you can always download the latest I7 release and then set your project to “9.3” (or whatever) to get the old behavior. But the included I6 is used for all projects, regardless of I7 settings. So this would be a bit of behavior that you can’t revert.
What do people think? Is it worth breaking backwards compatibility in this way? Too big a change? Should I maybe put the I6 bug fix behind a compiler setting (to make it opt-in)?