
I don't see that we need this custom RNG thing. Storing the generated random number with the star gives us portability and more.
What is non-portable about this simple formula? Depending on a system-provided RNG, on the other hand, may result in different rendering on different platforms or lib versions.
For example, the seed can be controlled independently of tip position, allowing smoother variation of the output function and easier to get back to "that one half a second ago" without needing exceptional mouse stability: can use a "lower-geared" widget (less rapidly changing as a function of mouse position) or keyboard.
This seems to require some extra UI, and I'm not sure it's worth the trouble.
Much less importantly: I'd guess that there can be consistency problems with using tip position to seed the RNG, due to different floating point behaviour on different machines (and even with different compiler or compiler flags).
When computing the unique int, the coordinates are rounded to approx 1/1000 of px, which is likely to protect it from rounding errors of any kind.