door sides isOpen property not being kept in synch (adv3Lit

The Adv3Lite manual says the isOpen property on both sides of a door is kept in synch automatically…

But that’s not what I see.

I have a Room (hibernationChamber) with a Door (well, a SecretDoor, actually—hibernationChamberExitHatch) that leads to another Room (TransitBay) which defines the other side of the Door (hibernationChamberHatch).

The hibernation chamber hatch opens and the player char exits into the Transit Bay. So far, so good. But when the player then tries to reenter the hibernation chamber, the transcript displays…

…even though the door was opened on the other side.

Going to debug after departing the chamber but before trying to reenter it shows…

hibernationChamberExitHatch.isOpen true
hibernationChamberHatch.isOpen     nil

Here’s the transcript…

And here’s the code…

#charset "us-ascii"

#include <tads.h>
#include "advlite.h"

versionInfo: GameID
    IFID = '445C38A3-AD1B-4729-957A-F584600DE5C1'
    name = 'test'
    byline = 'by Jerry Ford'
    htmlByline = 'by <a href="mailto:jerry.o.ford@gmail.com">
                  Jerry Ford</a>'
    version = '1'
    authorEmail = 'Jerry Ford <jerry.o.ford@gmail.com>'
    desc = 'Testing door opened/closed synchronization.'
    htmlDesc = 'Testing door opened/closed synchronization.'

;

gameMain: GameMainDef
    /* the initial player character is 'candidate' */
    initialPlayerChar = saturnExplorer
    paraBrksBtwnSubcontents = nil
   
;

// candidate, initial player char
saturnExplorer: Actor 'you;self body' @hibernationChamber
    "You are a...well, that's what we're here to find out. <.p>"
    globalParamName = 'saturnExplorer'
    isHim = true
    person = 2
    contType = Carrier
   
;

hibernationChamber: Room 'Hibernation Chamber' 'hibernation chamber'
    "The hibernation cylinder is some 12 feet in length, five in diameter on the
    outside, 10 feet in length and 4 in diameter inside measurments. 
    <<triggerHatchOpening()>>
    <.p>"
    
    up = hibernationChamberExitHatch
    triggerHatchOpening()
    {
        new Fuse(hibernationChamberExitHatch, &open, 2);
        hibernationChamber.replaceVocab('hibernation chamber');
    }
    
;
+ hibernationChamberExitHatch: SecretDoor 'exit hatch'
    ""
    
    isOpen = nil
    
    canTravelerPass(traveler)
    {
        return isOpen;
    }

    otherSide = hibernationChamberHatch
    vocabWhenOpen = 'exit hatch'
    
    contentsListed = nil
    
    open()
    {
        if(!isOpen)
        {
            "A pair of clamshell doors unfold along the entire
            length of the capsule. \b
            Propelled by the air current suddenly created when the doors popped
            open, you drift out.\b
            <b>Transit Bay</b>
            <.p>";
            isOpen = true;
            saturnExplorer.moveInto(transitBay);
            transitBay.desc;
        }
    }
;
transitBay: Room 'Transit Bay' 'transit bay'
    "The most prominent features of the Transit Bay are two large cylindrical
    capsules where deep-space voyagers ride out their long voyages in
    suspended animation, inside the hibernation cylinders. \b
    <.p>"
    
    down = hibernationChamberHatch
;
+ hibernationChamberHatch: Door 'hibernation chamber hatch; cylinder'
    "Through the open bay doors that expose nearly the entire length of the
    cylinder, you see the soft, cuhsioned interior
    surface that protects hibernating passengers when they drift to the edge
    of their void. <.p>"

    otherSide = hibernationChamberExitHatch
;

That’s because your code is calling isOpen = true directly, despite the fact that the section of the manual you quoted tells you that you have to use makeOpen(stat). Try changing:

isOpen = true;

To

makeOpen(true);

Well, hmmm, umm, so it does. :astonished: RTFM, then RTFM again, I guess. Thanks.