Argh. So I did a lot of minor changes to my WIP. I mean, A LOT of minor changes. And I screwed something up, because now I get this message:
**Problem.** You wrote '"This is the Duke's personal wing o [...] ghting up the room with lightning."' [!(blob:https://intfiction.org/4560a5b7-4813-4d8d-b3a8-64b475fcfbae)](source:story.ni#line5811): but this looks like a contradiction, because the same property seems to be being set in each of these sentences, but with a different outcome.
It isn’t listing two sentences, just that one, so there is no contradiction to see. That room was not something I made a change to since the last compile. If I remove the text of the description of this room, it complains about the text description of a different room (and so on). I went back through every place I could think of that I had changed, but couldn’t remember them all, of course, and couldn’t find any problems.
Does anyone have a tip so I can find out what I did wrong here? Any grammar issues that might cause this? I didn’t create any new rooms since the last compile, but I altered many of their descriptions.
This is so unwelcome right now. I’ll take any advice I can get on finding the problem. Inform hates me.
*** Edit: Also, the room it’s complaining about is the last room in the code. It skips complaining about the room immediately before that, and then starts complaining about the description of every room in order going backwards in the code. If that helps.
For really, really weird bugs, I sometimes realize I forgot to close quotes. So what happens is, Inform is reading the game-text as code. This bug sounds familiar to me… sometimes the IDE forgets to format things.
This is tough to track, though I’ve found some python scripts can look for lines with one quote in them.
A regex in notepad++ would be ^[^“]+”[^"]+$.
ETA: I’ve used Mike’s approach as well for weird errors. Perhaps you could combine them.
make a backup copy first (I’m bolding this because I forgot to once.)
commenting out code until the problem goes away. You can use a binary search to see what lines cause the error e.g. block out lines 9900-10000, then 9900-9950 or 9950-10000, and keep narrowing things down by halves. Eventually you’ll get a different more sensible error, and you’ll see what line does what.
I noted the problem of imbalanced quotes earlier–there may be a problem with imbalanced comments, too, but that’s less likely.
(I’m speaking from experience where I’ve chopped code off.)
Another step towards a solution would be if you have a day-old file somewhere, to use WinMerge or some comparison software. The error must be somewhere the code was changed, and if only the differences are highlighted, I can often say “Oops, duh, of course that’s what I did wrong.”
I’ve had stuff like this happen, and it’s usually a downstream indication that something’s gone wrong with grammar/syntax earlier in the code (so the error message is deceptive – that sentence is probably OK).
They can be a little challenging to track down, short of re-proofreading the entire game, but I think the general approach is to comment out increasingly large chunks of your WIP, working backwards, until you get it to a point where it will compile, by which point you’ll have hopefully isolated the place where the error must be happening.
Even in languages that aren’t ridiculously flexible, specific compiler error messages are frequently completely wrong. All you can really count on is that something was off somewhere before the place it complained about… and “before” is a very flexible concept in Inform compilation, even moreso in v10.
This is total barn-door advice, but this is a reason source-control is useful: so you can actually compare what you have to the most recent known-to-work version and not rely on trying to remember your changes.
@aschultz and @DeusIrae have good suggestions; I’d add looking to the places where you define properties/attributes – all the “[whatever] can be…” or “[whatever] has…” assertions and/or the places you’ve defined subkinds of kinds – looking for typos or weirdness.
OK, so per Mike’s advice I silenced everything in a whole section of the game, the one I’d been working on, and sure enough, it compiles. So then I add back rooms. They’re fine. Then I add back people. They’re fine. Then I add back items. And here we go, and this is So Odd. The offending line was:
The dairy farmer carries a whip. The whip is scenery. The description of the whip is "A thin leather whip coiled on the man's belt.".
This is unedited from the project. There is nothing wrong with its grammar. There are no other whips in the game. But I remove it, and everything’s fine. I can totally live without the whip, but I am curious as to why Inform pitched such a major hissy fit about this.
Hopefully that will serve as my major heart attack of the day.
Well, good to know that this kind of little thing blows Inform’s mind SO MUCH that it can’t even tell me where the boo-boo is. What a baby. I mean, I was expecting find something like what Andrew said-- an open quotation or some other blockheaded error. But no. When things like this happen, I am usually reminded of how ignorant I am, but this time, it’s Inform that really screwed the pooch.
Not that I am bitter about the last panicked hour of my day or anything.
Thanks for all the speedy and helpful replies, y’all.
Big if for non-programmers. I source control all of my Inform code, but most people don’t, I imagine. It would be nice if there were a “Git for non-programmers” out there for those who don’t need the power of real Git.
Andrew’s comment about a thing called WinMerge, and your response about a thing called Git, are Sanskrit to me. I think you’re probably talking about GitHub? I have visited there to download things and sometimes I can manage that and sometimes I cannot, but mostly I find it a scary and bewildering place where real grown-ups go to talk about serious stuff. So it’s clear that there’s another level of programmer beneath non-programmer. The sub-non-programmer? Whatever it is, that’s me.
GitHub/Git? Yeah. Don’t touch that until you’re ready. Don’t worry if you never are. You’re doing a whole lot without it, and I lived without it for several years. It’s one of those things that, if it works for you, great. If not, don’t feel you are missing something critical.
WinMerge is a downloadable executable that simply takes two text files and compares them. I used it a lot if I had two computers I did work on. I think the authors of Summerland used it to piece code together–it’s neat because you can copy parts of one file over to the other, if they’re very similar.
(Of course, if you’re on a Mac, WinMerge won’t run. But there has to be something else to compare files.)
I used to back up my files nightly with a (simple) script before I used GitHub. This allowed me to use WinMerge to say, okay, this is what I changed today, and I can narrow down what went wrong.
Oh, and congrats on finding the bug! Trust me, it’ll go much easier the next time now you get the hang of it.
Yep; this is one of Inform’s least helpful error messages and it’s a huge pain in the ass to figure out what it really means.
My guess at what’s happening here is that carried implies portable, and scenery implies fixed in place. So those implications conflict and Inform can’t figure out which one should win out and gets horribly confused.
Has anyone reported this as a bug? At the very least the error message should be clearer about what it means.
I would have settled for it just telling me WHERE the problem was. It could have said, “I am so confused that I don’t know what’s wrong here, but I hate this thing here so much I want to die.” That would be fine.
Yeah, I wasn’t suggesting you actually go off and learn industrial strength software development tools! I was wishing there was a way you and other people who don’t want deal with that nonsense could more easily figure out what edits you made to a story file in the last hour, say. I’d be tempted to write one, if I didn’t have a post-comp release and another game to write, plus all the teaching I have to do…
This was the bug that tripped up everyone who tried to port Counterfeit Monkey to Inform 7 6M62, because the error message indicates a completely different line in the source, far from where the actual problem is.