Mirai's Miscellaneous Misadventures

M25 / core / noise.c

// copyright 2022 zamfofex
// license: AGPLv3 or later

#include <mimimi/assets.h>

static unsigned long int mimimi_xorshift(unsigned long int n)
{
	struct { unsigned long int n:32; } s = {n};
	s.n ^= s.n << 13;
	s.n ^= s.n >> 17;
	s.n ^= s.n << 5;
	return s.n;
}

void mimimi_noise(struct mimimi_image *image, unsigned char *colors, int count)
{
	unsigned long int n = 1;
	for (int i = 0 ; i < image->width * image->height ; i++)
	{
		n = mimimi_xorshift(n);
		unsigned char color = colors[n % count];
		if (color != 0) image->colors[i] = color;
	}
}