A backdrop in most, but not all, of a region

Is there a way to succinctly place a backdrop in all rooms of a region except for one? (Here I’m also putting it in an extra room outside the region too.)

Line A is a room.  Line B is a room.  Platform is a room.  Siding is a room.  Foyer is a room.
Line A, Line B, Platform, and Foyer are in a region called Railyard.

The track is a backdrop.  It is in Siding and in Railyard except Foyer.
[Also tried:  The track is a backdrop.  It is in Siding and in Railyard.  It is not in Foyer.]

This fails on the last lines. I can make it work by spelling out the individual rooms again, or by removing Foyer from the Railyard, but I don’t really want to do either of those things.

I also tried the more complicated wording:

To decide whether or not (place - a room) needs a rail:
    if place is Siding, decide yes;
    if place is Foyer, decide no;
    if place is in Railyard, decide yes;
    decide no.
The track is a backdrop.  It is in each room that needs a rail.

This one compiles, but doesn’t seem to actually put the track in any of the rooms. Any other ideas, or do I have to do it the long way?

Hmm, looking at the Index, it appears that each room that needs a rail was interpreted as the name of a new thing, which seems a bit peculiar.

If I remember correctly, you can create a smaller region, in which you would put your track backdrop, inside the larger region. Regions can contain smaller regions, but they are not allowed to overlap other than by one being entirely inside the other.

How would you phrase that, though? I tried:

Line A, Line B, and Platform are in a region called Rail-Adjacent.
Foyer and Rail-Adjacent are in a region called Railyard.

But, at least according to the Index, this results in only Foyer being in Railyard and the rest only in Rail-Adjacent.

Just checked - according to 8:8: http://inform7.com/book/WI_8_8.html

(b) A backdrop can be moved to a category of rooms:

move (object) backdrop to all (description of objects)

This phrase moves the backdrop so that it is now present in every room matching the given description. Example: If we define

A room can be wet or dry. A room is usually dry. The Rock Pool is wet.

then we can write

move the stream backdrop to all wet rooms;

This phrasing, “move the … backdrop to all …” is deliberately meant to look unlike the simpler “move … to …”, to emphasise that this kind of movement is possible only for backdrops.

So you could give specific rooms an adjective and move the backdrop there perhaps at the beginning of play (if it doesn’t move after that).

Sadly no, while you can move backdrops you can still only supply a single description that represents all of the rooms. Or repeat the names of all the rooms individually, which is exactly what I was trying to avoid.

Having said that, it looks like the sub-region thing above did work; while at the top of the Index they appear as entirely separate regions, further down it says “The Rail-Adjacent region within the Railyard region”. And it does look like it’s showing up in the right places. It’s still a bit ugly in the Index, though, but I guess I can live with that.

2 Likes

A description can be made arbitrarily complicated by careful use of adjectives. E.g

When play begins:
	move the stream backdrop to all wet rooms in the Zone.

Interestingly, this sort of thing doesn’t seem to work in the story text itself, at least:

A room can be rail-adjacent.
Line A is a rail-adjacent room.......
The track is a backdrop.  It is in all rail-adjacent rooms.

The last issues a Problem specifically that you’re not allowed to use adjectives there. It also seems like a fairly big club to be hitting this problem with, wasting a bit of adjective storage on every room (not that this is for a big story, so that doesn’t really matter).

Correct. The compile-time and run-time handling of backdrops are inconsistent here. I’m not sure whether it’s an oversight or a gap in how the compiler handles descriptions.

One flag per room is a very small cost if you’re not targetting Z-code.

Also, to be clear, not all adjectives require storage. If you really wanted to define this in a way which doesn’t increase RAM use, you could say:

Definition: a room is rail-adjacent if it is the Siding or it is the Railyard or it is the Crossing.

You can even do it without listing them directly, if you want!

Definition: a room is rail-adjacent:
    if it is The Exception Room, no;
    if it is in the Railyard, yes;
    if it is The Other Exception, yes;
    no.

Whether this helps or not depends how many rail-adjacent rooms you have.

That’s an interesting trick I wasn’t aware of. Though it does still need a play-begins rule due to the weird handling of adjectives.