I think I have a working object shuffler in udon that syncs across clients properly. the shuffle itself is way more straightforward than anything in animation state hacks, but the sync and broadcast behavior in udon is awkward. Here the cube interact() on the master (bottom right) shuffles and sets the `tileno` int on each individual udon component, where setting public variables is implicitly master (owner) only. Then the sphere interact() actually resets the material on each tile to match its `tileno`, but only locally, so each player has to do it. In theory, the tiles could reset the material on Update() every frame to avoid the extra trigger, but that's probably expensive.

https://github.com/Merlin-san/UdonSharp is much much better than the node graph bullshit at least. Finally feels like a reasonably sane scripting environment, albeit still without good documentation on what you can and can't do.