Elevator as Booth, or Room (TADS3)

I have an elevator in my game, and I originally implemented it as an object that was an Enterable leading to a room.

th_elevator : Enterable ->rm_elevator
    name = 'elevator'
    vocabWords = 'actual elevator'
    location = rm_fame
    dobjFor(Examine) {
        action() {
            "It's an ornate, old-fashioned elevator. ";

But this creates problems when I’m standing in the elevator (room) that has arrived at the lobby, for example. When I >x lobby, I get “You see no lobby here.” I could go after this problem with distanceConnectors and Occluders that kick in depending on which floor the elevator is on, but that quickly gets messy.

I have tried an alternative implementation that makes only one elevator object that is the class Booth, and that seems to work OK, although it will need some tweaks. (BTW, I don’t ever need the player to be in the elevator with the doors closed, so it seems I can just move the Booth from room to room, and everything should work out).

Before I go further in either direction, does anyone have words of wisdom for me on this?



I think the Booth idea will probably work well. Haven’t tried it, but it makes sense.

Just as side note I thing that room with distanceConnector would work probably equally well. You could have one distance connector and move it with the elevator so probably no need for occluders. But by all means use Booth if it seems to you as more approachable solution.

Thanks to both of you.
@tomasb, I’m not sure how to “move” a distance connector with the elevator. Once I have declared a distanceConnector with a locationList of [rm_elevator, rm_lobby], for example, I don’t know how to make the elevator not “see” the lobby when it has moved to the basement.

Also, I’m pretty sure that when I am standing in the elevator, if I >throw foo at frob, when the frob is in the adjacent room, if I use a distanceConnector I think the foo will “fall short” and end up in the elevator at my feet, whereas if I use a Booth, the foo will strike the frob with little effect and fall to the ground in that room, which seems more natural.

I have a SenseConnector object called cctvLink in my game which has locationList = [robotRoom], ie. it has only one location. Once I need to connect with another room, then I call cctvLink.moveIntoAdd(otherRoom); I’m not moving it anymore, but seeing implementation of moveIntoAdd and moveInto it looks quite simple to move it as needed. However as I said, I’m including this here merely for completness. Booth will be fine.