2007-06-28 10:47:08 -07:00
/***************************************************************************/
/*
* ivisdef . h
*
* type defines for all ivis library functions .
*
*/
/***************************************************************************/
# ifndef _ivisdef_h
# define _ivisdef_h
2006-05-27 09:37:17 -07:00
# include "lib/framework/frame.h"
2007-06-28 10:47:08 -07:00
# include "pietypes.h"
/***************************************************************************/
/***************************************************************************/
/*
* Global Definitions
*/
/***************************************************************************/
# define BSPIMD // now defined for all versions (optional BSP handled on all formats)
2006-05-27 09:37:17 -07:00
# ifdef WIN321 //Not really needed I guess, however, see debug.c comments. -Qamly
2007-06-28 10:47:08 -07:00
# define iV_DDX
# endif
# define iV_SCANTABLE_MAX 1024
// texture animation defines
# define iV_IMD_ANIM_LOOP 0
# define iV_IMD_ANIM_RUN 1
# define iV_IMD_ANIM_FRAMES 8
/***************************************************************************/
/*
* Global Macros
*/
/***************************************************************************/
/***************************************************************************/
/*
* Global Type Definitions
*/
/***************************************************************************/
//*************************************************************************
//
// Basic types (now defined in pieTypes.h)
//
//*************************************************************************
//*************************************************************************
//
// Simple derived types (now defined in pieTypes.h)
//
//*************************************************************************
//*************************************************************************
//
// screen surface structure
//
//*************************************************************************
typedef struct iSurface {
int usr ;
uint32 flags ;
int xcentre ;
int ycentre ;
int xpshift ;
int ypshift ;
iClip clip ;
2007-01-07 15:50:30 -08:00
UBYTE * buffer ;
2007-06-28 10:47:08 -07:00
int32 scantable [ iV_SCANTABLE_MAX ] ; // currently uses 4k per structure (!)
int width ;
int height ;
int32 size ;
} iSurface ;
//*************************************************************************
//
// texture animation structures
//
//*************************************************************************
typedef struct {
int npoints ;
iPoint frame [ iV_IMD_ANIM_FRAMES ] ;
} iTexAnimFrame ;
typedef struct {
int nFrames ;
int playbackRate ;
int textureWidth ;
int textureHeight ;
} iTexAnim ;
//*************************************************************************
//
// imd structures
//
//*************************************************************************
# ifdef BSPIMD
typedef uint16 BSPPOLYID ; // lets hope this can work as a byte ... that will limit it to 255 polygons in 1 imd
# endif
# include "bspimd.h" //structure defintions only
2006-11-26 03:20:44 -08:00
typedef int VERTEXID ; // Size of the entry for vertex id in the imd polygon structure
2007-06-28 10:47:08 -07:00
typedef struct {
uint32 flags ;
int32 zcentre ;
int npnts ;
iVector normal ;
VERTEXID * pindex ;
iVertex * vrt ;
iTexAnim * pTexAnim ; // warning.... this is not used on the playstation version !
# ifdef BSPIMD
BSPPOLYID BSP_NextPoly ; // the polygon number for the next in the BSP list ... or BSPPOLYID_TERMINATE for no more
# endif
} iIMDPoly ;
typedef struct iIMDShape {
uint32 flags ;
2006-05-27 09:37:17 -07:00
int32 texpage ;
2007-06-28 10:47:08 -07:00
int32 oradius , sradius , radius , visRadius , xmin , xmax , ymin , ymax , zmin , zmax ;
iVector ocen ;
UWORD numFrames ;
UWORD animInterval ;
int npoints ;
int npolys ; // After BSP this number is not updated - it stays the number of pre-bsp polys
int nconnectors ; // After BSP this number is not updated - it stays the number of pre-bsp polys
iVector * points ;
iIMDPoly * polys ; // After BSP this is not changed - it stays the original chunk of polys - not all are now used,and others not in this array are, see BSPNode for a tree of all the post BSP polys
iVector * connectors ; // After BSP this is not changed - it stays the original chunk of polys - not all are now used,and others not in this array are, see BSPNode for a tree of all the post BSP polys
int ntexanims ;
iTexAnim * * texanims ;
struct iIMDShape * next ; // next pie in multilevel pies (NULL for non multilevel !)
# ifdef BSPIMD
PSBSPTREENODE BSPNode ; // Start of the BSP tree;
# endif
} iIMDShape ;
//*************************************************************************
//
// immitmap image structures
//
//*************************************************************************
typedef struct {
UBYTE Type [ 4 ] ;
UWORD Version ;
UWORD ClutSize ;
UWORD NumCluts ;
UWORD Pad ;
} CLUTHEADER ;
typedef struct {
UBYTE Type [ 4 ] ;
UWORD Version ;
UWORD NumImages ;
UWORD BitDepth ;
UWORD NumTPages ;
UBYTE TPageFiles [ 16 ] [ 16 ] ;
UBYTE PalFile [ 16 ] ;
} IMAGEHEADER ;
typedef struct {
// UDWORD HashValue
UWORD TPageID ;
UWORD PalID ;
UWORD Tu , Tv ;
UWORD Width ;
UWORD Height ;
SWORD XOffset ;
SWORD YOffset ;
} IMAGEDEF ;
typedef struct {
IMAGEHEADER Header ;
iSprite * TexturePages ;
UWORD NumCluts ;
UWORD TPageIDs [ 16 ] ;
UWORD ClutIDs [ 48 ] ;
IMAGEDEF * ImageDefs ;
} IMAGEFILE ;
/***************************************************************************/
/*
* Global Variables
*/
/***************************************************************************/
# endif // _ivisdef_h