// Definitions for levels created with PSX level editor // Coded by Scott Evans 3/6/97 // Last modified 3/6/97 #ifndef _MAP_H #define _MAP_H #include #include // Level bank file header structure typedef struct { _word nlevels; // number of levels in bank _long offset; // offset from start of header to 1st parameter block; }LevelHeader; // Level parameter block structure typedef struct { _word nrows; // size of level in rows and columns _word nclms; _long offset; // offset to level data (from start of parameter block) }LevelPblk; // Size of above structures #define LevelHeaderSize sizeof(MapHeader) #define LevelPblkSize sizeof(MapPblk) // Find number of levels in file #define _GetNoLevels(h) (h->nlevels) // Get address of 1st parametr block #define _GetLevelPblks(h) ((LevelPblk *)((_byte *)h+h->offset)) // Find address of nth parameter block #define _GetLevelPblk(h,n) (_GetLevelPblks(h)+n) // Find size of level in bytes #define _GetLevelSize(h,l) ((_GetLevelPblk(h,l))->nrows*(_GetLevelPblk(h,l)->)nclms) // Find address of level data #define _GetLevelData(h,l) (((_byte *)(_GetLevelPblk(h,l))+(_GetLevelPblk(h,l))->offset) // Copy level map data and set level parameters // lh - address of level file // bg - background structure // n - level number to set up // Returns 1 if OK, 0 for error (out of memory) _byte LoadLevel(LevelHeader *lh,SpriteBG *bg,_word n) { // Get parameter block for level n LevelPblk *pblk=_GetLevelPblk(lh,n); // Calculate size of map in bytes _long size=pblk->nrows*pblk->nclms; // Get some memory for level data __byte *map=(__byte *)realloc(bg->data,size); if(map) { memcpy(map,(_byte *)pblk+pblk->offset,size); bg->data=map; // Set level map size and initial offset into map bg->rows=pblk->nrows; bg->columns=pblk->nclms; bg->yoff=pblk->nrows-bg->h; return(1); } return(0); } #endif