What’s best practice for creating areas within a larger room? Ideally these would appear as:
At the Party (by the coat check) At the Party (on the dance floor) At the Party (in the punch line)
…but I would want them each to have their own separate room descriptions, and for items in one not to be reachable from items in another.
I’ve thought of making At the Party a region and each sub-room a room, or making At the Party a room and each sub-room a supporter, but both of those feel kludgy and ripe for disaster. Am I missing an obvious solution? I hope?
Do you want items from one subroom to be visible from the others?
If not, they’re logically separate rooms. You can just give them names like “At the Party (by the coat check)”. (You’d have to tweak some printing routines to get the boldface to work the way you’ve quoted, but that’s minor.)
If you want objects (or people) to be visible but not reachable between subrooms, that takes more work. There may be an extension for this, though.
Seconding Andrew’s suggestions of separate rooms–I’m doing something similar in one of my WIPs and that’s the strategy I ended up using. There are also ways to make items from one room visible from other rooms–I’d recommend a combination of the example “Rock Garden” from the Recipe Book and Jon Ingold’s Far Away extension.
It makes sense to make them separate rooms since you want different room descriptions and no scope between them.
I was going to suggest you could do things like make the “Punch Line” an enterable transparent container and the “dance floor” an enterable supporter to get the line descriptions like that if you wanted the same room. You could vary the room description using At the Party is a room. "Wooo! Great party![if the player is on the dance floor] You're boogie-ing your shoes off![otherwise if the player is in the punch line] You are really parched and scouting some punch.[end if]" …but that could goof up scope depending what you want.
I think I did something similar in Groove Billygoat - there was a coat check and a dance floor with a different room near the jukebox. I believe they were different rooms and I had some kind of ambiance message that showed up in all of them using a token to insert the “you’re in the same room, important lyrics are happening, people are dancing all around[random stuff]” message. Like Near the Jukebox is a room "You are in da club close to the source of the music. [dancemusic]"
Thanks all, good suggestions! I think the answer in this case is “cross-visibility would be nice, but not worth a coding headache,” so I’ll go with separate rooms and take a look at Rock Garden/Far Away to tweak the behavior from there. Will report back here when and if things break.
I’ve written an extension that makes people and their actions visible at a distance, a la Deadline. Not terribly well tested, but if you want to look at or use the source, you’re welcome to.
Backdrops are definitely your friend here. I had a similar situation and it wasn’t too fussy to have varying descriptions and interactions based on where the player physically was.
If I recall correctly, Shade did something neat where not only could one see the objects and scenery from other sub-rooms, but, assuming the player was in a different sub-room, if one specifically examined or interacted with anything, the game would automatically and silently move the player into that sub-room before completing the action. It really created the impression of one seamlessly moving around slightly in the same open space. I’m assuming this was done with some sort of check rule.
Sheesh, you’re going to make me look at my twenty-year-old I6 code? :)
The I6 equivalent of a check rule is an obj.before() clause. Turns out I dealt with the problem by brute force: Shade has over a hundred of these clauses, one for every verb on every object which I thought the player might try. Good thing the game was so small, eh?