As my latest interactive fiction nears completion, I think I may not start another one right away. Getting everything right is just too darn complicated!
Every beta-tester tries different commands, and most of the commands are reasonable, which means I need to implement, at the very least, a sensible, non-default “you can’t do that” message. That’s one of the things testing is for — to give me a peek at what players may try. Armed with this information, I can enrich the experience of the folks who will download the final version.
But consider: If there are 300 objects in the game, including scenery, and 50 different commands, to give an appropriate response to each command with each object I would have to write 15,000 messages. The default messages generated by Inform make sense for many of these, but not for others. For instance: I’ve implemented some chickens in the farmyard. The chickens are a scenery object — they’re just there to make the world seem more real. But if someone tries ‘give turnip to chickens’, the default response (because the chickens are a scenery object) is, “You can only do that to something animate.” Oops!
I could create a separate set of animate scenery objects, and give them their own default messages, but that’s extra work. Where do you draw the line? You never know what players will try, so do you try to think through all 15,000 possible commands to figure out which ones will need non-default responses?
In fact, that estimate (15,000) is probably low. Many commands take two objects, not one. I’m not going to estimate the real total, because I don’t know exactly how many of the commands take two objects, and because it depends on whether the player can get the two objects into the same room — that is, whether at least one of them is portable. But the total is surely in the 50,000 range.
But wait, there’s more! Certain command words map to the same internal action (in Inform-speak). For instance, ‘hit’, ‘smash’, and ‘attack’ all lead to the attack action. This is generally a fine and sensible scheme for giving the player synonyms — but in some specific case (which would have to be determined by mulling it over), two of these words might have subtly different meanings, which would require some new code.
And we aren’t even talking about fixing bugs here, we’re just talking about enriching the implementation. Most of the effort that one puts into this type of coding is simply wasted: A typical player will notice about 3% of it. But you don’t know which 3%, so you have to do it all! It doesn’t improve the story, it’s just window dressing.
As Nero Wolfe used to say, “Pfui.”