Mirai's Miscellaneous Misadventures

M49 / core / logos.c

/* license: AGPLv3 or later */
/* copyright 2024 zamfofex */

#include <mimimi.h>

void mimimi_logo(struct mimimi_engine *engine, struct mimimi_logo *logo, struct mimimi_logo_line *lines, int count)
{
	int i;
	struct mimimi_image *image;
	struct mimimi_logo_line *line;
	
	logo->lines = lines;
	logo->count = count;
	
	for (i = 0 ; i < count ; i++)
	{
		line = logo->lines + i;
		image = logo->images + i;
		
		logo->y_offsets[i] = 8192;
		
		image->colors = logo->colors[i];
		image->width = line->size.width;
		image->height = line->size.height;
		
		mimimi_unpack_bits(image->width * image->height, image->colors, line->packed);
		
		logo->textures[i] = (*engine->texture)(engine->data, image);
	}
}

unsigned char mimimi_logo_tick(struct mimimi_engine *engine, struct mimimi_logo *logo, int x, int y)
{
	int i;
	struct mimimi_logo_line *line;
	
	for (i = 0 ; i < logo->count ; i++)
	{
		line = logo->lines + i;
		(*engine->stamp)(engine->data, x + line->position.x, y + line->position.y + logo->y_offsets[i] / 256, logo->textures[i]);
		if (logo->y_offsets[i] <= 0) continue;
		logo->y_offsets[i] = mimimi_div_down(logo->y_offsets[i] * 15, 16);
		return 0;
	}
	return 1;
}