This is a suggestion for WorldPortalPreCrossed and WorldPortalCrossed event handlers. These would work exactly like WorldLinePreActivated and WorldLineActivated, except they'd fire when an actor crosses a portal (as of 3.7.0, these line activation event handlers aren't triggered when crossing through a portal).
Spoiler: original post re. gzdoom 3.6.0
If you set up a portal with Line_SetPortal (line special 156), and make that line activatable when things cross it, the WorldLinePreActivated event will fire when things cross over it. Unfortunately that event fires after the teleportation happens.
It would be really useful if WorldLinePreActivated fired immediately before portal teleportation happens, and WorldLineActivated fired immediately afterwards.
I realize these portal lines are not being activated in the same way as other activatable lines -- they don't need any activation flags to work when things cross over them -- so giving them activation flags is a bit of a hack in the first place. But it's still useful to hook into this event, and would be even more useful if we could do something immediately before the teleportation happens.
If this is impossible because the teleport actually happens earlier in time than line activation, I guess this is a suggestion for something like WorldPortalPreCrossed and WorldPortalCrossed event handlers instead.
Re: WorldPortal(Pre)Crossed event handlers?
Posted: Fri Dec 28, 2018 12:59 pm
by gramps
Made some major changes to this, as the behavior that sort of partly worked in 3.6.0 no longer works at all in 3.7.0. Bumping this in case it got missed.
Re: WorldPortal(Pre)Crossed event handlers?
Posted: Fri Dec 28, 2018 1:12 pm
by Graf Zahl
It was never supposed to work for portals, actually. The changes probably come from straightening out some issues with the events.
Re: WorldPortal(Pre)Crossed event handlers?
Posted: Fri Dec 28, 2018 1:41 pm
by gramps
Makes sense, no complaints here. Actually glad it changed before I committed to using it.
Still, it would be really useful to be able to detect these events. In my case I want to fill in some gaps in monster behavior, which involves monitoring portal crossings (I could have something running every tick instead, but this would be much cleaner and cheaper).