I committed your patch with minor tweaks (hunk allocated array, made the touch->v.solid test in SV_AreaTriggerEdicts the same as the one in SV_TouchLinks.. shouldn't make much difference?).
https://sourceforge.net/p/quakespasm/code/1485/
Did some more experimenting, and it turns out you can make a teleporter setup that behaves differently depending on the engine's SV_TouchLinks, with vanilla id1 progs:
http://www.quaketastic.com/files/misc/touchlinks-test2.zip
(DarkPlaces = you pick up RL and SSG, winquake = you pick up SSG only). Kind of annoying since I was hoping this change wouldn't be visible to a map running on id1 progs, but I did set up the map specifically to show a difference..
My attempt to summarize the behaviour of vanilla's SV_TouchLinks:
Say the player touches a trigger_teleport, whose touch function setorigin()'s the player on top of a weapon pickup:
- if the weapon's areanode was visited by SV_TouchLinks before the player's starting areanode, the weapon's touch function won't run this frame
- if the weapon is in the same areanode as the player's starting areanode, the weapon's touch function will run this frame if the weapon appears later in the areanode's trigger list than the trigger_teleport
- if the weapon is in an areanode that hasn't been visited yet by SV_TouchLinks, the touch function will run this frame.
So to sum up, whether the weapon touch function runs the same frame as the teleporter touch is pretty much random. What happens in my test map is the player misses picking up the RL because the RL is earlier in the linked list than the teleporer they just arrived through.. but there's another teleporter later in the list that can still be touched on the same frame, so they go through that before they have a chance to pick up the weapon.
With the new patched SV_TouchLinks, the weapon touch function will never run until the next frame. Hopefully QC code / maps are not relying on touch functions making changes and then other touches happening as a result that same frame, since whether that is possible in vanilla is unreliable.