Mirai's Miscellaneous Misadventures

M21 / core / noise.c

1// copyright 2022 zamfofex
2// license: AGPLv3 or later
3
4#include <mimimi/assets.h>
5
6static unsigned long int mimimi_xorshift(unsigned long int n)
7{
8	struct { unsigned long int n:32; } s = {n};
9	s.n ^= s.n << 13;
10	s.n ^= s.n >> 17;
11	s.n ^= s.n << 5;
12	return s.n;
13}
14
15void mimimi_noise(struct mimimi_image *image, unsigned char *colors, int count)
16{
17	unsigned long int n = 1;
18	for (int i = 0 ; i < image->width * image->height ; i++)
19	{
20		n = mimimi_xorshift(n);
21		unsigned char color = colors[n % count];
22		if (color != 0) image->colors[i] = color;
23	}
24}