First contact is a truth state that varies. That seems to be working fine. Boo-ba-la-looba-ba-la is only getting printed after first contact has been switched to true.
I’m not the best (most efficient) coder, but I got this to work:
lab is a room.
Player is in lab
second lab is a room. The description is "A generic room in a playtesting enviornment". lab is west.
First contact is a truth state that varies. first contact is true
instead of going to second lab:
now player is in second lab;
if first contact is true:
say "Boo-ba-la-looba-ba-la.";
now first contact is false;
stop the action;
lab is a room.
parlor is north of lab. "xx"
last report going when the parlor was unvisited: say "qq".
The details are complicated, but, roughly speaking there’s a report going rule that invokes a looking action if it’s your first time seeing the room. So if you want something after that, you want last report going.
You don’t need first contact; using was with unvisited will cover it.
I wouldn’t recommend moving the player manually in an instead of going rule: that’s just inviting pain.