#include #define TX_NS_FP_TRI (0x25) //------------------------------------ // Structures //------------------------------------ typedef struct { u_long id; u_long flag; u_long nobj; } HEADER; typedef struct { u_long *vert_top; u_long n_vert; u_long *normal_top; u_long n_normal; u_long *primitive_top; u_long n_primitive; long scale; } OBJECT; typedef struct { short vx, vy, vz; short padding; } VERTEX; typedef struct { short nx, ny, nz; short padding; } NORMAL; typedef struct { u_char r, g, b; } COLOUR; typedef struct { u_short x[4], y[4]; int pmode; u_short cx, cy; } TEXTURE; typedef struct { u_char olen, ilen, flag, mode; u_char u0, v0; u_short cba; u_char u1, v1; u_short tsb; u_char u2, v2; u_short padding1; u_char r0, g0, b0, padding2; u_short vert0, vert1, vert2, padding3; } TX_NS_FP_TRI_FACE; //------------------------------------ // Macro's //------------------------------------ #define SetTmdHeader(h) \ (h)->id = 0x41, \ (h)->flag = 1, \ (h)->nobj = 1 #define SetObjectData(o) \ (o)->vert_top = VERTEX_START, \ (o)->n_vert = VERTEX_QUANTITY, \ (o)->normal_top = NORMAL_START, \ (o)->n_normal = NORMAL_QUANTITY, \ (o)->primitive_top = PRIMITIVE_START, \ (o)->n_primitive = PRIMITIVE_QUANTITY, \ (o)->scale = 0 #define SetPrimitiveHeader(h, _m, _f, _i, _o) \ (h)->mode = (_m), \ (h)->flag = (_f), \ (h)->ilen = (_i), \ (h)->olen = (_o) #define SetColour0() \ newPoly->r0 = (COLOUR_LUT+c0)->r, \ newPoly->g0 = (COLOUR_LUT+c0)->g, \ newPoly->b0 = (COLOUR_LUT+c0)->b #define SetColour1() \ newPoly->r1 = (COLOUR_LUT+c1)->r, \ newPoly->g1 = (COLOUR_LUT+c1)->g, \ newPoly->b1 = (COLOUR_LUT+c1)->b #define SetColour2() \ newPoly->r2 = (COLOUR_LUT+c2)->r, \ newPoly->g2 = (COLOUR_LUT+c2)->g, \ newPoly->b2 = (COLOUR_LUT+c2)->b #define SetColour3() \ newPoly->r3 = (COLOUR_LUT+c3)->r, \ newPoly->g3 = (COLOUR_LUT+c3)->g, \ newPoly->b3 = (COLOUR_LUT+c3)->b #define SetVertex(v, _x, _y, _z) \ (v)->vx = (_x), \ (v)->vy = (_y), \ (v)->vz = (_z) #define SetNormal(n, _x, _y, _z) \ (n)->nx = (_x), \ (n)->ny = (_y), \ (n)->nz = (_z) #define SetColour(c, _r, _g, _b) \ (c)->r = (_r), \ (c)->g = (_g), \ (c)->b = (_b) #define SetTexture(t, _x0, _y0, _x1, _y1, _x2, _y2, _x3, _y3, _pmode, _cx, _cy) \ (t)->x[0] = (_x0), \ (t)->y[0] = (_y0), \ (t)->x[1] = (_x1), \ (t)->y[1] = (_y1), \ (t)->x[2] = (_x2), \ (t)->y[2] = (_y2), \ (t)->x[3] = (_x3), \ (t)->y[3] = (_y3), \ (t)->pmode = (_pmode), \ (t)->cx = (_cx), \ (t)->cy = (_cy) //------------------------------------ // Function types //------------------------------------ void PrepareTMD(u_long address, VERTEX *vertex, COLOUR *colour, TEXTURE *texture); void SetTX_NS_FP_TRI(TX_NS_FP_TRI_FACE *newPoly, u_short v0, u_short v1, u_short v2, u_long c0, u_long t0, u_short uv0, u_short uv1, u_short uv2); void SetTextureTri(TX_NS_FP_TRI_FACE *newPoly, u_long textureNum, u_short uv0, u_short uv1, u_short uv2);