summaryrefslogtreecommitdiff
path: root/src/randtiles.h
blob: 14355da87b11571e8233a1f86791ff2d27da337b (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
57
58
59
60
61
62
63
#ifndef __NEWER_RANDTILES_H
#define __NEWER_RANDTILES_H

#include <common.h>
#include "fileload.h"

#define RAND_CHECK_HORZ
#define RAND_CHECK_VERT
#define RAND_CHECK_BOTH

struct RandTiles_Header {
	u32 magic;
	u32 sectionCount;
};

struct RandTiles_Section {
	u32 nameHash;
	u32 entryCount;
};

struct RandTiles_Entry {
	u16 startTile;
	u16 endTile;
	u8 count;
	u8 type;
	u16 reserved;
	u32 dataOffset;
};

inline u32 RandTiles_GetSectionCount(void *file) {
	return ((RandTiles_Header*)file)->sectionCount;
}

inline u32 *RandTiles_GetOffsets(void *file) {
	return (u32*)(((RandTiles_Header*)file)+1);
}

inline RandTiles_Section *RandTiles_GetSection(void *file, int id) {
	u32 offs = RandTiles_GetOffsets(file)[id];
	return (RandTiles_Section*)(((char*)file)+offs);
};

inline RandTiles_Entry *RandTiles_GetTiles(void *file, RandTiles_Section *section) {
	return (RandTiles_Entry*)(section+1);
}

inline RandTiles_Entry *RandTiles_GetTiles(void *file, int sectionID) {
	return (RandTiles_Entry*)(RandTiles_GetSection(file, sectionID)+1);
}

inline char *RandTiles_GetName(void *file, RandTiles_Section *section) {
	return ((char*)file)+section->nameOffset;
}

inline u16 *RandTiles_GetData(void *file, RandTiles_Entry *entry) {
	return (u16*)(((char*)file)+entry->dataOffset);
}

u32 djb2(u8 *str);
RandTiles_Section *RandTiles_Search(void *file, u32 nameHash);


#endif