aboutsummaryrefslogtreecommitdiff
path: root/examples/demos/n00bdemo/smd.h
blob: 4306534fffb858f919a5a128f3ca5b471487a146 (plain) (blame)
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
64
65
66
67
68
#ifndef _SMD_H
#define _SMD_H

typedef struct {
	u_long			*ot;
	short			otlen;
	unsigned char	zdiv,zoff;
} SC_OT;

typedef struct {
	char			id[3];
	unsigned char	version;
	unsigned short	flags;
	unsigned short	n_verts;
	unsigned short	n_norms;
	unsigned short	n_prims;
	SVECTOR			*p_verts;
	SVECTOR			*p_norms;
	void			*p_prims;
} SMD;

typedef struct {
	unsigned char type:2;
	unsigned char l_type:2;
	unsigned char c_type:1;
    unsigned char texture:1;
	unsigned char blend:2;
	unsigned char zoff:4;
	unsigned char nocull:1;
	unsigned char mask:1;
	unsigned char texwin:2;
	unsigned char texoff:2;
	unsigned char reserved:6;
	unsigned char len;
} SMD_PRI_TYPE;

typedef struct {
	SMD_PRI_TYPE	prim_id;
	unsigned short	v0,v1,v2,v3;		// Vertex indices
	unsigned short	n0,n1,n2,n3;		// Normal indices
	unsigned char	r0,g0,b0,code;		// RGB0
	unsigned char	r1,g1,b1,p0;		// RGB1
	unsigned char	r2,g2,b2,p1;		// RGB2
	unsigned char	r3,g3,b3,p2;		// RGB3
	unsigned char	tu0,tv0;
	unsigned char	tu1,tv1;
	unsigned char	tu2,tv2;
	unsigned char	tu3,tv3;
	unsigned short	tpage,clut;
} SMD_PRIM;


int OpenSMD(void *smd);
SMD_PRIM *ReadSMD(SMD_PRIM *pri);

void scSetClipRect(int x0, int y0, int x1, int y1);

SMD *smdInitData(void *data);
void smdSetBaseTPage(unsigned short tpage);

char *smdSortModel(SC_OT *ot, char* pribuff, SMD *smd);
char *smdSortModelFlat(u_long *ot, char* pribuff, SMD *smd);

void smdSetCelTex(unsigned short tpage, unsigned short clut);
void smdSetCelParam(int udiv, int vdiv, unsigned int col);
char *smdSortModelCel(SC_OT *ot, char* pribuff, SMD *smd);

#endif