Listing where everyone is sitting

A rather complex scene in my game includes a lot of people sitting around for a while, including the player. The game is listing each person separately, including where they are sitting. It’s very awkward to read through and I’d rather it not list them at all for this room, so that I might write my own paragraph describing the seating.

This is what the game is doing:

This is what I would prefer:

I should probably add that the chairs are considered enterable and the player is inside of the bench. I’m assuming that is why it’s separating it out into different clauses.

Is there some rule for printing people who are present, like the ‘print people who are present rule’?

I just want it to stop telling me what everyone is sitting on, or who is in the room altogether.

If you’re not satisfied with Inform’s default presentation of a certain thing in a room description, Inform generally expects you to ‘write a paragraph’ about the thing in question, such as:

For writing a paragraph about a person: say "[Jane] is sitting atop her favorite stool, while [John] is seated beside you on the bench." But this doesn’t work for things that are not directly in the location but on top of supporters or inside containers. The Standard Rules don’t make such things eligible for writing paragraphs about.

One way around is to add a rule to the choosing notable locale objects activity, which is the one that picks out the things you are offered to write paragraphs about.

This seems to work as wanted:

The Kitchen is a room. "Here is a long paragraph describing the setting."

A stool and a kitchen bench are enterable scenery supporters in the Kitchen. A grunka is on the bench.

Jane is a woman on the stool.
John is a man on the kitchen bench.

An apple, a banana, and a cantilever are in the Kitchen.

For writing a paragraph about a person:
	say "[Jane] is sitting atop her favorite stool, while [John] is seated beside you on the bench."

For choosing notable locale objects when in the Kitchen:
	repeat with domain running through enterable supporters in the kitchen:
		let the held item be the first thing held by the domain;
		while the held item is a visible person:
			set the locale priority of the held item to 5;
			now the held item is the next thing held after the held item;
	continue the activity.

EDIT –
Note that calling a thing’s name property (as by “[Jane]” inside brackets) from the writing a paragraph about activity will tell Inform that this object has already been mentioned in the present room description and therefore will not be considered either for a paragraph of its own or inclusion in the list of nondescript objects at the end of the room description. That way you can write a single paragraph about all people in the room. (The rule for writing a paragraph about will run once for the ‘first’ person in the room, whoever it might be; but it mentions everybody in the room; therefore it won’t run again for the rest of the persons in the room).

Of course, all of this becomes horribly more complicated if people move about in the room or change places with each other during the scene. (But, possibly, unless the player has to be able to sit on Jane’s stool or climb the kitchen bench, you may not even need to simulate the relations between people and their ‘sitting material’ in the fictional world to that depth. Perhaps you can make do with the persons and one furniture scenery object that reacts to several names – "stool, “chair”, “kitchen bench”, etc. – with a single response to the effect that the player can’t do anything with these things.)

When I try your code, for whatever reason it’s still printing the first line about Jane being on a stool, then the later line is changed how you had specified.

Is this because the player is sitting on the same bench as ‘John’?

How might I correct this?

EDIT: I found a weird fix to this issue. If I declare Jane as scenery, everything seems okay. What am I forgetting? Will making Jane a scenery have any other negative effects. I should probably mention that I don’t intend her to move for the entire game. She’s only ever going to appear in this one room.

EDIT2: I’ve declared both of them as scenery and wrote them into the room description. After this scene ends I’ll have them convert back to not being scenery if I need to, or just abandon them in this room forever since they sort of go off stage anyway.

The problem is that now when I type “push John”, it says ‘you are unable to’. What other functions am I going to have to overwrite the output for to make them behave like peoples?

EDIT3: As far as I can tell, pushing and pulling are the only relevant actions, since making people scenery causes them to be fixed in place. Taking seems to behave normally.

When I’ve used scenery people, I generally just use instead rules for anything the player might reasonably do with them. But that’s probably terrible advice, and I’d be interested to know if there’s a better solution.

I think this happens if one of the seats has a lower (non-zero) locale priority than the people sitting on them, causing it to be mentioned first. Which can only happen if the seats are not scenery, so I suspect yours aren’t. Anyway, one possible workaround is to explicitly give any non-scenery supporters a higher locale priority, e.g. like this:

The Kitchen is a room. "Here is a long paragraph describing the setting."

A stool, a chair and a kitchen bench are enterable supporters in the Kitchen. 
The bench is scenery.

Bob is a man in the kitchen.
Jane is a woman on the stool.
John is a man on the kitchen bench.
A grunka is on the bench.

An apple, a banana, and a cantilever are in the Kitchen.

Definition: a person is John-or-Jane if he is John or she is Jane.
For writing a paragraph about a John-or-Jane person:
	say "[Jane] is sitting atop her favorite [stool], while [John] is seated beside you on the [bench]."

For choosing notable locale objects when in the Kitchen:
	repeat with domain running through enterable supporters in the kitchen:
		if the domain is not scenery:
			set the locale priority of the domain to 6;		
		repeat with held person running through persons held by the domain:
			set the locale priority of the held person to 5;
	continue the activity.

I made a few other tweaks to Felix’s example while I was at it, like properly handling the possibility that some person other than John or Jane might be present in the kitchen too.