Call functions from photon on other photons

It’d also be nice to get variables from photons, but subscribe kinda already does this. To get around the lack of device-to-device function calls, I’ve been sending special events that trigger things on the other device. Not ideal.

What is the problem with using Publish() and Subscribe() ?
Maybe you could use UDP connection as well.

What is the problem with using Publish() and Subscribe() ?

For the same reasons why you have Particle.function instead of just Particle.publish/subscribe... different purposes. Events can be 1:n where function calls are 1:1 and object specific. It's also more code. Instead of Particle.function(...) being the only call, you have to also call Particle.subscribe.