summaryrefslogtreecommitdiff
path: root/trunk/libsprite.h
blob: 6c5b055eafb8d0b7530a6f1e517c555123948355 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#ifndef ROSPRITE_H
#define ROSPRITE_H

#include <stdint.h>
#include <stdbool.h>

typedef enum { rosprite_rgb, rosprite_cmyk } rosprite_color_model;

struct rosprite_area {
	uint32_t extension_size; /* size of extension_words in bytes */
	uint8_t* extension_words;
	uint32_t sprite_count;
	struct rosprite** sprites; /* array of length sprite_count */
};

struct rosprite_mode {
	uint32_t colorbpp;
	/* maskbpp denotes the amount of alpha bpp used
	 * while mask_width is the bits used to store the mask.
	 * Old modes have the same mask_width as their colorbpp, but the value
	 * is always all-zeroes or all-ones.
	 * New modes can have 1bpp or 8bpp masks
	 */
	uint32_t maskbpp;
	uint32_t mask_width; /* in pixels */
	uint32_t xdpi;
	uint32_t ydpi;
	rosprite_color_model color_model;
};

struct rosprite_palette {
	uint32_t size; /* in number of entries (each entry is a word) */
	uint32_t* palette;
};

struct rosprite {
	unsigned char name[13]; /* last byte for 0 terminator */
	struct rosprite_mode mode;
	bool has_mask;
	bool has_palette;
	uint32_t palettesize; /* in number of entries (each entry is a word) */
	uint32_t* palette;
	uint32_t width; /* width in pixels */
	uint32_t height; /* height in pixels */
	uint32_t* image; /* image data in 0xRRGGBBAA words */
};

void rosprite_init(void);
struct rosprite_area* rosprite_load_file(FILE* f);
void rosprite_destroy_sprite_area(struct rosprite_area *);

struct rosprite_palette* rosprite_load_palette(FILE* f);
void rosprite_destroy_palette(struct rosprite_palette *);


#endif