What I wanted

For my Lab17: SlimeLab map, I needed a huge, heavy door to allow passage between the East end of my lab and the caverns outside. I did not want it to behave as a normal door (ie, reverse when blocked) so I modelled it as a func_train. Additionally, there had to be two func_buttons to trigger my "door" -- and when one button was pushed, it had to trigger the other button, so that the two buttons remained synchronised.

What I did

I modelled my "door", placed the two buttons, and set them up as follows:

What happened

It didn't work. Pushing either button appeared to trigger the door, because it started making the movement noise I'd assigned to it, but the door never actually moved -- and, of course, it continued to make its noise until we quit out of the game.

It was especially frustrating, because this door was one of the last two operable items I had placed in the level, and the other didn't work either. Oh, and the level, by this stage, had a 25.5 hour compile time! Whatever was wrong, there was not going to be a quick fix.

How I fixed it

Troubleshooting

Because of the huge compile time, I finally realised that the best way to troubleshoot the failed door was to create a new, empty level with one large room, and copy all the troublesome elements into it -- making for a 10 second compile time and ease of getting to the bits that needed testing. I did this, copying across the func_train and its related path_corner entities, and one of the func_button entities.

I played around with everything for a little while, but could see nothing obviously wrong, so I compiled and tested my mini-level. Of course, the door worked. I scratched my head a little more, and finally mentioned it to one of my play-testers, who suggested the obvious: bring both buttons into the level. I hadn't bothered because I knew the two-button-plus-door combination worked. So I copied the other button into the level, tested it -- and the door no longer worked!

It seems that while a func_door is quite happy to share the name of two or more self-referencing func_buttons, a func_train is not.

Solution

Perhaps there are other ways to resolve this issue; my solution was to use a multi_manager:

This then worked perfectly, as intended.