So I've spent days coding together a working, temporary solution. An assistant thinker for polyobject line portals. This thinker doesn't influence/dictate the polyobject's movement but rather monitors the portal line's position. It can detect whether the line has moved and in what direction.
If the portal line moved backwards or sideways, then nothing happens, but
if it moved forward it runs a blockmap search to see if it crossed any actors
and tries to make said actors cross the portal line. This is all done after all
polyobjects and all actors made their move. (It ticks last.)
This was admittedly crudely put together.
Any criticisms and suggestions for how to improve this would be greatly appreciated.
Link: https://www.dropbox.com/s/80wxpam7ti5unk5/polyportalassistant-v1.3.1.pk3?dl=1
This PK3 contains the thinker, an event handler that spawns thinkers for each portal line on a polyobject (that isn't the "visual only" type), and a test map with 3 polyobjects. A rectangular platform that moves around picking up items and misc things, a train, and a rotating platform. Basically, stuff you'd expect out of a Duke Nukem 3D map.
Feel free to use this and modify it in whatever fashion you see fit.
All I ask is that you remove the "FC_" prefix and mention me in the credits.
Spoiler: Changelog