Uhm I'm not sure what you are saying here.
If the charactar is changing screens by transport couldn't you just init the ego in room three at any arbitrary point why does it need to be in the same position.
oldx, oldY, ohp wait I think I understand now, the problem is that the transporter animated view doesn't know where to position.
Try something like this instead:
(if(Said('use/communicator'))
(if(send gEgo:has(INV_COMM))
programControl()
(send gEgo:view(008)loop(1)cycleSpeed(1)setCycle(End))
Print("Beam me up Scotty!")
Wait(180) // does wait work?
(send gRoom:newRoom(3))
)
(else
Print("You don't have a communicator.")
) // ends INV check
) // ends Use Com
I'm not sure if the wait command will work here, but otherwise since you are hiding the ego, instead you can just change the view.