You're on the right track. Here's an example of using afterTravel to trigger a fuse that moves the NPC.
/* ... */
bathroom: Room 'bathroom' 'bathroom'
"Just another bathroom. "
west = bedroom
afterTravel(traveler, connector) {
if (traveler == gPlayerChar && bob.getOutermostRoom != self)
bob.summon(self);
}
;
bob: Person 'Bob' 'Bob'
"It's Bob! "
isProperName = true
summon(loc) {
_targetLoc = loc;
_summonFuseID = new Fuse(self, &_summonFuse, 3);
}
_summonFuse() {
_summonFuseID = nil;
self.moveInto(_targetLoc);
"Bob has arrived! ";
}
_summonFuseID = nil
_targetLoc = nil
;
/* ... */
By the way, most of the TADS 3 activity has migrated over to
intfiction.org. You'll likely get a faster response if you join the rest of us there.