{ "name": "static random colors", "id": "vrijJKhMQdpCaCCtM", "sources": { "main": "// This pattern generates random colors each time it is loaded\n// it works by using a consistent pseudorandom number generator that is seeded\n// with a value that is picked during initialization\n\n// this seed will be set to a random value each time the pattern is loaded\nvar seed = random(0xffff) \n\n// 16 bit xorshift from \n// http://www.retroprogramming.com/2017/07/xorshift-pseudorandom-numbers-in-z80.html\nvar xs\nfunction xorshift() {\n xs ^= xs << 7\n xs ^= xs >> 9\n xs ^= xs << 8\n return xs\n}\n\n// return a pseudorandom value between 0 and 1\nfunction pseudorandomFraction() {\n return xorshift() / 100 % 1\n}\n\nexport function beforeRender(delta) {\n xs = seed //reset xs each render frame so it starts in a consistent state\n}\n\nexport function render(index) {\n h = pseudorandomFraction()\n s = pseudorandomFraction()\n // adjust saturation to favor vibrant colors, but still allow whites/pastels\n s = 1 - s*s*s \n v = 1\n hsv(h, s, v)\n}" }, "preview": "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" }