func_door_rotating in rotated instance is buggy

So, I want to build the interior of a house almost entirely out of brushes (partially for my own amusement, and partially because the game I’m using doesn’t have appropriate door models). So, I created a fancy little brush based door using a few brush entities and some I/O, and so far, it’s worked beautifully. However, I’ve run into a situation where the door needs to be rotated 180 degrees. So I just copied the func_instance from before and rotated it 180 degrees. When I open it from one side, it does what you’d expect it to do, rotating away from me at 90 degrees. However, if you attempt to open it from the other side, it tries to spin towards the player, going through all the walls I placed, just to get in the right position. And if you close it while its’ open in that position, it’ll do the same buggy movement in reverse!

I tried creating four door instances at different angles, to see what angles affected what (in a vain attempt to find a solution to the problem). This is what I found:

  • 0 degrees: Functions as expected
  • 90 degrees: Always ends up in the same position, but will rotate their in a different way depending on where the player is (always rotates away from player to get to the one position, even if that requires a 270 degree turn)
    -180 degrees: When opened from one side, it acts as normal. When opened from the other side, it will rotate 450 degrees (yes, 450 :why:), but will end up in the correct position.
  • 270 degrees: Works normally, but only opens in one direction.

The doors do have solid objects around them, but deleting them doesn’t fix the issue.

How would I get around this? I’m going to need to place a lot of these doors in my map, but setting up the IO separately for each one would be painful, and I want the ability to update all the doors at once (as pretty much everything is still WIP).

Do you have one func_door_rotating parented to another ?
In that Situation the Angels seam to “add” up.

You could also try using a momentary_rot_button.
Place the door closed Set thea moving distance to 180° and set the startvalue to .5
That way you can have the door open in both ways using I/O

For your multiple doors:

Select the whole door (including all triggers etc so it works independently) press ctr + C then ctr + shift + V

Make sure you have “Make pasted entity names unique” ticked

If your entity relies on special orientation properties that go beyond the standard “pitch yaw roll”, instances will likely screw them up. Your best bet is to collapse those troublesome entities in specific before compile.

Displacements suffer from this because the relative skewing isn’t adjusted. light_spot does too thanks to its unique “pitch” keyvalue, though they’ll be fine if only rotated around the vertical axis. Doors of all types will as well as they rely on at least two orientation values. Any brush entities (not func_detail) will be lit incorrectly as they keep the same orientation they do in the source vmf when lighting is compiled.

In that case, I guess I’ll just make 2-4, already rotated instances. It’s kinda redundant, but it’ll get around the issue at hand whilst letting me continue to use instances. Thanks for the help :3