/* Example code segment for reading objects (add to playback lib)
* (C)2004 R Burrows
*
* You should be able to call these funcs from the MapLoad
* part of a playback lib
* MapGetchksz and MapGetlong should be in the playback lib
*/
#define MAXOBJSTR 4096
#define MAXIMGSTR 4096
typedef struct { /* Object structure */
int xpos, ypos; /* pixel position in map to handle */
int gfxid, tileid;
int gxoff, gyoff; /* offset into graphic */
int gwidth, gheight;
int ghandlexoff, ghandleyoff; /* handle pos, from gxoff, gyoff */
int show; /* display mode */
int user1, user2, user3, user4, user5, user6, user7;
int flags;
} OBJSTR;
typedef struct { /* External image structure */
char * fname;
unsigned char * imgpt;
int w, h, pitch;
} OBJIMGSTR;
int curobj, numobjstr;
OBJSTR * objstrpt = NULL;
OBJIMGSTR * objimgpt = NULL;
int DecodeOBFNChunk (unsigned char * mdatpt)
{
int i, obfnsz;
OBJIMGSTR * myobjimgpt;
if (objimgpt
!= NULL
) free (objimgpt
);
objimgpt
= malloc (sizeof(OBJIMGSTR
)*MAXIMGSTR
);
memset (objimgpt
, 0, sizeof(OBJIMGSTR
)*MAXIMGSTR
);
myobjimgpt = (OBJIMGSTR *) objimgpt;
obfnsz = MapGetchksz (mdatpt+4);
mdatpt += 8;
i = 0; while (obfnsz > 2) {
strcpy (myobjimgpt
[i
].
fname, mdatpt
);
myobjimgpt[i].imgpt = NULL;
i++;
}
return 0;
}
int DecodeOBDTChunk (unsigned char * mdatpt)
{
int i, obstrsz;
if (objstrpt
!= NULL
) free (objstrpt
);
objstrpt
= malloc (sizeof(OBJSTR
)*MAXOBJSTR
);
memset (objstrpt
, 0, sizeof(OBJSTR
)*MAXOBJSTR
);
numobjstr = 1; curobj = 0;
mdatpt += 8;
i = MapGetlong (mdatpt); /* Offset to OBJSTR */
if (i < 16) return -1;
numobjstr = MapGetlong (mdatpt+4);
curobj = MapGetlong (mdatpt+8);
obstrsz = MapGetlong (mdatpt+12);
mdatpt += i;
for (i=0;i<numobjstr;i++) {
((OBJSTR *) objstrpt)[i].xpos = MapGetlong (mdatpt);
((OBJSTR *) objstrpt)[i].ypos = MapGetlong (mdatpt+4);
((OBJSTR *) objstrpt)[i].gfxid = MapGetlong (mdatpt+8);
((OBJSTR *) objstrpt)[i].tileid = MapGetlong (mdatpt+12);
((OBJSTR *) objstrpt)[i].gxoff = MapGetlong (mdatpt+16);
((OBJSTR *) objstrpt)[i].gyoff = MapGetlong (mdatpt+20);
((OBJSTR *) objstrpt)[i].gwidth = MapGetlong (mdatpt+24);
((OBJSTR *) objstrpt)[i].gheight = MapGetlong (mdatpt+28);
((OBJSTR *) objstrpt)[i].ghandlexoff = MapGetlong (mdatpt+32);
((OBJSTR *) objstrpt)[i].ghandleyoff = MapGetlong (mdatpt+36);
((OBJSTR *) objstrpt)[i].show = MapGetlong (mdatpt+40);
((OBJSTR *) objstrpt)[i].user1 = MapGetlong (mdatpt+44);
((OBJSTR *) objstrpt)[i].user2 = MapGetlong (mdatpt+48);
((OBJSTR *) objstrpt)[i].user3 = MapGetlong (mdatpt+52);
((OBJSTR *) objstrpt)[i].user4 = MapGetlong (mdatpt+56);
((OBJSTR *) objstrpt)[i].user5 = MapGetlong (mdatpt+60);
((OBJSTR *) objstrpt)[i].user6 = MapGetlong (mdatpt+64);
((OBJSTR *) objstrpt)[i].user7 = MapGetlong (mdatpt+68);
((OBJSTR *) objstrpt)[i].flags = MapGetlong (mdatpt+72);
mdatpt += obstrsz;
}
return 0;
}