Saying absolutely nothing

I’m trying to find a way for Inform to print nothing, with no paragraph break, nada, zilch… but I am having trouble. It started when I made a rule to write paragraphs about people. Since the player is a person, it seems to include the player, even though usually the player is excluded from room descriptions. The weird part is, even if I try to explicitly exclude the player from the paragraph rule, the player ends up being described in the room descriptions anyway… like just because there is a rule about people, even if said person is excluded, it is implied that all people need some kind of rule. So I tried adding a rule to not describe the player, but the best that I seem to be able to do is to say a paragraph break… and I don’t want that either, it’s untidy and could potentially lead to metagaming situations.

Rule for writing a paragraph about a person (called x):
	if x is not hidden:
		say "You see [the printed name of x].";

Rule for writing a paragraph about the player:
	say "";

I tried ‘say “[run paragraph on]”;’ but this doesn’t do anything because it’s after the fact.

How can I make say “”; actually say nothing, including not printing a new line?

“do nothing” does nothing nicely. But you want to trigger I7’s flag that the object has been mentioned, which is normally done by printing text. So do this:

Rule for writing a paragraph about the player:
	now the player is mentioned.

I’m not sure how you’re handling this hidden flag, but you might have avoided the whole issue if your first rule was:

Rule for writing a paragraph about a not hidden person (called x):
	say "You see [the printed name of x].";

setting the player to now be mentioned solved this specific dilemma, thank you.

I had the hidden person condition moved around and all sorts of other attempts with that, to no avail, including what you have above. Besides, the player will never be hidden, because things are only ever hidden from the player, and you’d never want the player hidden from themselves. That’s irrelevant though to the topic. You did solve the immediate dillema, again, but I’m still curious how to have it not do anything instead, in general.

Do nothing didn’t work. I tried that too. When I had the rule for the player be do nothing, it didn’t write a paragraph about the player, but it still tried to list the player in the nondescript items.

It seems like a lot of mysteries here, but as for the topic question, is there not a way to say nothing?

Yes, just use an empty string.

There is an after printing the name rule that gives something the mentioned property if it is named while writing a paragraph about. If you don’t print something’s name, it’s not mentioned. “Do nothing” doesn’t print the name and doesn’t set the mentioned flag, so the flag isn’t changed. “Say “”” doesn’t print the name and doesn’t set the mentioned flag, so the flag isn’t changed. “Now the player is mentioned” doesn’t print the name, but it sets the mentioned flag, so the flag is changed. It’s as simple as that.

(Technically there are other rules that give the mentioned property, such as if the object in question is unhandled and it has an initial appearance, but they aren’t relevant in this case.)

But an empty string always seems to also produce a line break/paragraph break. That’s not nothing, it’s a line break/paragraph break.

No, it doesn’t always. Try this:

When play begins:
	say "One-";
	say "";
	say "-two."

Any print statement may generate an extra line break, in cases where a rulebook or activity is invoked. The details are complicated (that is, I don’t understand them all :). But in this case, it’s just that the parser checks after the “writing a paragraph” activity and prints its own line break if you printed anything.

Oh! Ok, this is just the only time I’d run into worrying about this, so I was confused. Thanks for your patience and help on this one! I think I get it now, and again, the immediate issue is solved.