2000-03-16 11:25:00 +01:00
# ifndef PROTOTYP_INCLUDED
2001-07-05 18:05:07 +00:00
# define PROTOTYP_INCLUDED
2000-03-16 11:25:00 +01:00
/*
Global Functions , Structures and Variables are prototyped here
*/
# include "shpanim.h"
# ifdef __cplusplus
extern " C " {
# endif
# include "mem3dc.h"
/*
Structures , Unions & Enums
*/
2008-04-27 01:45:21 -07:00
extern const int sine [ 4096 ] ;
extern const int cosine [ 4096 ] ;
2000-03-16 11:25:00 +01:00
typedef struct vectorch {
int vx ;
int vy ;
int vz ;
} VECTORCH ;
typedef struct quat {
int quatw ;
int quatx ;
int quaty ;
int quatz ;
} QUAT ;
# if SupportFPMathsFunctions
typedef struct vectorchf {
float vx ;
float vy ;
float vz ;
} VECTORCHF ;
void FNormalise ( VECTORCHF * n ) ;
# endif
typedef struct vector2d {
int vx ;
int vy ;
} VECTOR2D ;
# if SupportFPMathsFunctions
typedef struct vector2df {
float vx ;
float vy ;
} VECTOR2DF ;
void FNormalise2d ( VECTOR2DF * n ) ;
# endif
typedef struct line {
VECTORCH v0 ;
VECTORCH v1 ;
} LINE ;
typedef struct euler {
int EulerX ;
int EulerY ;
int EulerZ ;
} EULER ;
typedef struct angularvelocity {
EULER AngV ;
int PitchCount ;
int YawCount ;
int RollCount ;
} ANGULARVELOCITY ;
typedef struct matrixch {
int mat11 ;
int mat12 ;
int mat13 ;
int mat21 ;
int mat22 ;
int mat23 ;
int mat31 ;
int mat32 ;
int mat33 ;
} MATRIXCH ;
# if SupportFPMathsFunctions
typedef struct matrixchf {
float mat11 ;
float mat12 ;
float mat13 ;
float mat21 ;
float mat22 ;
float mat23 ;
float mat31 ;
float mat32 ;
float mat33 ;
} MATRIXCHF ;
# endif
/* Sorry about this... */
//#include "hmodel.h"
struct hmodelcontroller ;
/*
This structure is used by map function " MapSetVDB() " to pass parameters
to the " SetVDB() " function .
*/
typedef struct mapsetvdb {
int SVDB_Flags ;
int SVDB_ViewType ;
int SVDB_Depth ;
int SVDB_CentreX ;
int SVDB_CentreY ;
int SVDB_ProjX ;
int SVDB_ProjY ;
int SVDB_MaxProj ;
int SVDB_ClipLeft ;
int SVDB_ClipRight ;
int SVDB_ClipUp ;
int SVDB_ClipDown ;
int SVDB_H1 ;
int SVDB_H2 ;
int SVDB_HInterval ;
int SVDB_HColour ;
int SVDB_Ambience ;
int SVDB_ObViewState ;
int SVDB_ObViewDistance ;
int SVDB_ObPanX ;
int SVDB_ObPanY ;
} MAPSETVDB ;
/*
Simplified Shapes
The array of shapes MUST be terminated by " -1 "
*/
typedef struct simshapelist {
int SSL_Threshold ; /* 1st trans. for proj. r */
int * SSL_Shapes ; /* ptr to array of shapes */
} SIMSHAPELIST ;
/*
Map Structures
Each map is made up of a collection of arrays of these different block
types . Access to them is provided by the header block ( see below ) .
Map TYPES are defined in the project specific file " equates.h "
*/
typedef struct mapblock1 {
int MapType ;
# if LoadingMapsShapesAndTexturesEtc
int MapFNameIndex ;
char * * MapFNameArray ;
SHAPEHEADER * * MapShapeDataArray ;
# endif
} MAPBLOCK1 ;
typedef struct mapblock2 {
int MapType ;
int MapShape ;
# if LoadingMapsShapesAndTexturesEtc
int MapFNameIndex ;
char * * MapFNameArray ;
SHAPEHEADER * * MapShapeDataArray ;
# endif
} MAPBLOCK2 ;
typedef struct mapblock3 {
int MapType ;
int MapShape ;
# if LoadingMapsShapesAndTexturesEtc
int MapFNameIndex ;
char * * MapFNameArray ;
SHAPEHEADER * * MapShapeDataArray ;
# endif
VECTORCH MapWorld ;
} MAPBLOCK3 ;
typedef struct mapblock4 {
int MapType ;
int MapShape ;
# if LoadingMapsShapesAndTexturesEtc
int MapFNameIndex ;
char * * MapFNameArray ;
SHAPEHEADER * * MapShapeDataArray ;
# endif
VECTORCH MapWorld ;
EULER MapEuler ;
} MAPBLOCK4 ;
typedef struct mapblock5 {
int MapType ;
int MapShape ;
# if LoadingMapsShapesAndTexturesEtc
int MapFNameIndex ;
char * * MapFNameArray ;
SHAPEHEADER * * MapShapeDataArray ;
# endif
VECTORCH MapWorld ;
EULER MapEuler ;
int MapFlags ;
} MAPBLOCK5 ;
typedef struct mapblock6 {
int MapType ;
int MapShape ;
# if LoadingMapsShapesAndTexturesEtc
int MapFNameIndex ;
char * * MapFNameArray ;
SHAPEHEADER * * MapShapeDataArray ;
# endif
VECTORCH MapWorld ;
EULER MapEuler ;
int MapFlags ;
MAPSETVDB * MapVDBData ;
int MapInteriorType ;
# if InterfaceEngine
/* This will point to the Object_Chunk, it will have to be */
/* cast within C++ though */
void * o_chunk ;
# endif
} MAPBLOCK6 ;
typedef struct mapblock7 {
int MapType ;
int MapShape ;
# if LoadingMapsShapesAndTexturesEtc
int MapFNameIndex ;
char * * MapFNameArray ;
SHAPEHEADER * * MapShapeDataArray ;
# endif
VECTORCH MapWorld ;
EULER MapEuler ;
int MapFlags ;
int MapFlags2 ;
int MapFlags3 ;
MAPSETVDB * MapVDBData ;
int MapInteriorType ;
# if InterfaceEngine
/* This will point to the Object_Chunk, it will have to be */
/* cast within C++ though */
void * o_chunk ;
# endif
int MapLightType ; /* See LIGHTTYPES */
VECTORCH MapOrigin ; /* Origin of Rotation */
SIMSHAPELIST * MapSimShapes ;
int MapViewType ; /* See "VDB_ViewType" */
} MAPBLOCK7 ;
typedef struct mapblock8 {
int MapType ;
int MapShape ;
VECTORCH MapWorld ;
EULER MapEuler ;
int MapFlags ;
int MapFlags2 ;
int MapFlags3 ;
MAPSETVDB * MapVDBData ;
int MapInteriorType ;
int MapLightType ; /* See LIGHTTYPES */
VECTORCH MapOrigin ; /* Origin of Rotation */
SIMSHAPELIST * MapSimShapes ;
int MapViewType ; /* See "VDB_ViewType" */
struct displayblock * * MapMPtr ; /* Write our dptr here as mother */
struct displayblock * * MapDPtr ; /* Read our dptr here as daughter */
VECTORCH MapMOffset ; /* Offset from mother */
} MAPBLOCK8 ;
/*
Map Header Block
*/
typedef struct mapheader {
MAPBLOCK1 * MapType1Objects ;
MAPBLOCK2 * MapType2Objects ;
MAPBLOCK3 * MapType3Objects ;
MAPBLOCK4 * MapType4Objects ;
MAPBLOCK5 * MapType5Objects ;
MAPBLOCK6 * MapType6Objects ;
MAPBLOCK7 * MapType7Objects ;
MAPBLOCK8 * MapType8Objects ;
} MAPHEADER ;
/*
Physical Screen Descriptor Block
Only one of these exists and it is filled out by the Video Mode Set
function .
Functions use these parameters in conjunction with those in the
View Descriptor Block to calculate Screen and View scaling factors .
*/
typedef struct screendescriptorblock {
int SDB_Width ;
int SDB_Height ;
int SDB_Depth ;
# if SupportWindows95
int SDB_ScreenDepth ;
# endif
int SDB_Size ;
int SDB_DiagonalWidth ;
int SDB_CentreX ;
int SDB_CentreY ;
int SDB_ProjX ;
int SDB_ProjY ;
int SDB_MaxProj ;
int SDB_ClipLeft ;
int SDB_ClipRight ;
int SDB_ClipUp ;
int SDB_ClipDown ;
int SDB_Flags ;
int SDB_ViewAngle ;
int SDB_ViewAngleCos ;
unsigned int TLTSize ;
unsigned int TLTShift ;
} SCREENDESCRIPTORBLOCK ;
/*
Screen Descriptor Block Flags
Set these BEFORE setting the video mode
*/
# define SDB_Flag_222 0x00000001 /* 8-bit mode 222 texture palette */
# define SDB_Flag_Raw256 0x00000002 /* 8-bit mode, no texture remap */
# define SDB_Flag_MIP 0x00000004 /* Create MIP maps for images */
# define SDB_Flag_SuperSample2x2 0x00000008 /* 8T and 24 only */
# define SDB_Flag_DrawFrontToBack 0x00000010 /* Useful if Z-Buffering */
# define SDB_Flag_TLTPalette 0x00000020 /* 8Raw only, Images may have ih_flag_tlt and the tlt maps colours from an abstract palette to the screen palette */
# define SDB_Flag_TLTSize 0x00000040 /* The TLTSize member is valid, o/w TLTSize is 256 */
# define SDB_Flag_TLTShift 0x00000080 /* The TLTShift member is valid because the TLTSize is a power of two */
/*
Clip Plane Block
*/
typedef struct clipplaneblock {
VECTORCH CPB_Normal ;
VECTORCH CPB_POP ;
} CLIPPLANEBLOCK ;
/*
Clip Plane Points
*/
typedef struct clipplanepoints {
VECTORCH cpp1 ;
VECTORCH cpp2 ;
VECTORCH cpp3 ;
} CLIPPLANEPOINTS ;
/*
View Descriptor Block
View location and orientation will come from the currently designated view
object . A pointer to an object block will not be essential , which is why I
have added a location to the viewport block . The matrix exists in the
viewport block because it is not the same matrix that appears in the object
block . The object block has a matrix that takes it from local space to world
space . I need the transpose of this matrix to create a world space to view
space transformation .
See " 3dc \ docs \ c*.doc " for more information .
*/
typedef struct viewdescriptorblock {
struct viewdescriptorblock * VDB_HigherP ;
struct viewdescriptorblock * VDB_LowerP ;
int VDB_ViewType ; /* To match ObViewType, used by image backdrops */
int VDB_Priority ; /* Determines draw order */
int VDB_Flags ;
int VDB_ViewAngle ;
int VDB_ViewAngleCos ;
int VDB_Width ;
int VDB_Height ;
int VDB_Depth ;
# if SupportWindows95
int VDB_ScreenDepth ;
# endif
int VDB_CentreX ;
int VDB_CentreY ;
int VDB_ProjX ;
int VDB_ProjY ;
int VDB_MaxProj ;
int VDB_ClipZ ;
int VDB_ClipLeft ;
int VDB_ClipRight ;
int VDB_ClipUp ;
int VDB_ClipDown ;
CLIPPLANEBLOCK VDB_ClipZPlane ;
CLIPPLANEBLOCK VDB_ClipLeftPlane ;
CLIPPLANEBLOCK VDB_ClipRightPlane ;
CLIPPLANEBLOCK VDB_ClipUpPlane ;
CLIPPLANEBLOCK VDB_ClipDownPlane ;
struct displayblock * VDB_ViewObject ;
VECTORCH VDB_World ;
MATRIXCH VDB_Mat ;
MATRIXCH VDB_HorizonMat ;
MATRIXCH VDB_SpriteMat ;
EULER VDB_MatrixEuler ;
int VDB_H1 ;
int VDB_H2 ;
int VDB_HInterval ;
int VDB_HColour ; /* "Sky" */
int VDB_HColour8 ; /* For 8-bit colour indirected modes */
int VDB_HGColour ; /* "Ground" */
int VDB_HGColour8 ; /* For 8-bit colour indirected modes */
int VDB_Ambience ;
# if pc_backdrops
BACKDROPTYPE VDB_BackdropType ;
unsigned short VDB_ProjectorXOffsets [ MaxScreenWidth ] ;
# endif
# if ProjectSpecificVDBs
void * VDB_ProjectSpecificHook ;
# endif
} VIEWDESCRIPTORBLOCK ;
/* Flags */
# define ViewDB_Flag_SingleBuffer 0x00000001
# define ViewDB_Flag_DoubleBuffer 0x00000002
# define ViewDB_Flag_FullSize 0x00000004 /* Use fast screen clear */
# define ViewDB_Flag_NoBackdrop 0x00000008
# define ViewDB_Flag_LTrunc 0x00000010 /* Informs the VDB creator */
# define ViewDB_Flag_RTrunc 0x00000020 /* that a physical screen */
# define ViewDB_Flag_UTrunc 0x00000040 /* violation has forced a */
# define ViewDB_Flag_DTrunc 0x00000080 /* truncation of the viewport */
# define ViewDB_Flag_Hazing 0x00000100
# define ViewDB_Flag_DontDraw 0x00000200
# define ViewDB_Flag_AdjustScale 0x00000400 /* Scale 320x200 definition up to equivalent size for the mode */
# define ViewDB_Flag_AddSubject 0x00000800 /* For MapSetVDB, telling it to add dptr_last to the dptr */
# define ViewDB_Flag_NeedToFlushZ 0x00001000 /* Cleared by flush function */
# define ViewDB_Flag_ImageBackdrop 0x00004000 / * This requires a backdrop
image array , accessed through
" Global_SceneBackdropPtr " */
# define ViewDB_Flag_Horizon 0x00008000 / * Draw a "traditional"
Sky / Ground horizon - before
the backdrop is drawn */
# define ViewDB_Flag_UseBackdropImageColoursForHorizon 0x00010000
# define ViewDB_Flag_NoScreenClear 0x00020000
# define ViewDB_Flag_NoModules 0x00040000
/*
A VDB global " iflag_drawtx3das2d " that forces all 3 d textures to be drawn as 2 d
according to the " iflag_drawtx3das2d " pipeline .
WARNING !
Only use this when drawing per object or per vdb as it uses the global vdb pointer
*/
# define ViewDB_Flag_drawtx3das2d 0x00080000
/* test the flags with "& VDB_Trunc" to see if any truncation occurred */
# define VDB_Trunc (ViewDB_Flag_LTrunc | ViewDB_Flag_RTrunc | ViewDB_Flag_UTrunc | ViewDB_Flag_DTrunc)
/*
Light Source Data Structures
*/
/*
Light Types
*/
typedef enum {
LightType_Infinite , /* Default */
LightType_PerObject ,
LightType_PerVertex
} LIGHTTYPES ;
typedef struct lightblock {
int LightFlags ;
int LightType ;
VECTORCH LightWorld ; /* World space light position */
VECTORCH LocalLP ; /* Light position in object local space */
int LightBright ; /* 0->1 Fixed Point */
int LightRange ;
int BrightnessOverRange ;
/* these RGB components take values 0-65536 */
int RedScale ;
int GreenScale ;
int BlueScale ;
int LightBrightStore ;
} LIGHTBLOCK ;
/*
Light Flags
*/
# define LFlag_CosAtten 0x00000001 /* Cosine attenuation */
# define LFlag_CosSpreadAtten 0x00000002 /* Cosine spread attenuation */
# define LFlag_Omni 0x00000004 /* Omnidirectional */
# define LFlag_Deallocate 0x00000008 /* Deallocate at frame end */
# define LFlag_NoShadows 0x00000010 /* Prelighting - No Shadows */
# define LFlag_Off 0x00000020 /* Prelighting - Light OFF */
# define LFlag_PreLitSource 0x00000040 /* WARNING: Not obj. specific */
# define LFlag_WasNotAllocated 0x00000080 /* Supplied by another */
# define LFlag_AbsPos 0x00000100 /* Pos. not rel. to parent */
# define LFlag_AbsOff 0x00000200 /* Offset not rel. to parent */
# define LFlag_AbsLightDir 0x00000400 /* Light dir. not rel. to p. */
# define LFlag_NoSpecular 0x00000800
# define LFlag_Electrical 0x00001000
# define LFlag_Thermal 0x00002000
/* KJL 16:17:42 01/10/98 - used to specify no specular component to the light;
avoids unnecessary texture wash - out . */
# if SupportMorphing
/*
Morph Frame
*/
typedef struct morphframe {
int mf_shape1 ;
int mf_shape2 ;
} MORPHFRAME ;
/*
Morph Header
*/
typedef struct morphheader {
int mph_numframes ;
int mph_maxframes ;
MORPHFRAME * mph_frames ;
} MORPHHEADER ;
/*
Display Pipeline Structure
*/
typedef struct morphdisplay {
int md_lerp ;
int md_one_minus_lerp ;
int md_shape1 ;
int md_shape2 ;
SHAPEHEADER * md_sptr1 ;
SHAPEHEADER * md_sptr2 ;
} MORPHDISPLAY ;
/*
Morph Control Structure
*/
typedef struct morphctrl {
int ObMorphCurrFrame ;
int ObMorphFlags ;
int ObMorphSpeed ;
MORPHHEADER * ObMorphHeader ;
} MORPHCTRL ;
# endif /* SupportMorphing */
/*
Object Display Block
*/
typedef struct displayblock
{
int ObShape ;
struct sfxblock * SfxPtr ;
SHAPEHEADER * ObShapeData ;
# if SupportWindows95
char * name ;
# endif
# if (SupportMorphing && LazyEvaluationForMorphing)
VECTORCH * ObMorphedPts ;
# endif
VECTORCH ObWorld ; /* World Space Location */
EULER ObEuler ; /* Euler Orientation */
MATRIXCH ObMat ; /* Local -> World Orientation Matrix */
int ObFlags ;
int ObFlags2 ;
int ObFlags3 ;
/* Lights */
int ObNumLights ;
LIGHTBLOCK * ObLights [ MaxObjectLights ] ;
# if SupportModules
struct module * ObMyModule ; /* This is our module */
struct module * ObModule ; /* We are in this module */
# endif
VECTORCH ObView ; /* View Space Location */
struct viewdescriptorblock * ObVDBPtr ;
/* Lights */
int ObLightType ; /* See LIGHTTYPES above */
/* Extent */
int ObRadius ; /* max(sqr(x^2+y^2+z^2)) */
int ObMaxX ;
int ObMinX ;
int ObMaxY ;
int ObMinY ;
int ObMaxZ ;
int ObMinZ ;
struct txactrlblk * ObTxAnimCtrlBlks ;
EXTRAITEMDATA * ObEIDPtr ; /* Overrides shape EID pointer */
# if SupportMorphing
MORPHCTRL * ObMorphCtrl ; /* Structure provided by project */
# endif
/* The Strategy Block Pointer */
struct strategyblock * ObStrategyBlock ; /* Defined in stratdef.h */
SHAPEANIMATIONCONTROLLER * ShapeAnimControlBlock ;
struct hmodelcontroller * HModelControlBlock ;
unsigned int SpecialFXFlags ;
} DISPLAYBLOCK ;
/*
Flags
*/
# define ObFlag_InRange 0x00000001
# define ObFlag_OnScreen 0x00000002
# define ObFlag_NotVis 0x00000004
# define ObFlag_VertexHazing 0x00000020 / * For I_Gouraud, interpolate hue
across the polygon */
# define ObFlag_TypeZ 0x00000080 /* Shape uses Z Sort */
# define ObFlag_SortFarZ 0x00008000 /* Z + Radius */
# define ObFlag_ArbRot 0x00010000 /* Internal use ONLY */
# define ObFlag_MultLSrc 0x00020000 /* Use Multiple Light Sources */
# define ObFlag_NoInfLSrc 0x00040000 /* Ignore Infinite Light Sources */
# define ObFlag_OnlyInfLSrc 0x00080000 /* Only Infinite Light Sources */
# define ObFlag_ZBuffer 0x08000000 /* Request item z-buffering */
# define ObFlag_BFCRO 0x10000000 /* Back Face Cull Rot. Optimise */
# define ObFlag_RSP 0x20000000 / * Radius Space Partitioning -
requires RFC data in shape */
# define ObFlag_ParrallelBFC 0x80000000 /* Roxby's scu dsp flag */
/*
Flags 2
*/
# define ObFlag2_Deallocate 0x00000001 /* Deallocate block at frame end */
# define ObFlag2_ObjLevelHaze 0x00000002 /* Hazing at object level */
# define ObFlag2_AugZ 0x00000008 /* Augmented Z-Sort */
# define ObFlag2_NoBFC 0x00000400 /* Disables Back Face Cull */
# define ObFlag2_NotYetPos 0x00080000 /* Internal, for sub-objects */
# define ObFlag2_NoSubObjectUpdate 0x00200000 / * If you are using your own
functions to position and
orient sub - objects , set this
flag and the sub - object in
question will be ignored by
the update function */
# define ObFlag2_SortNearZ 0x20000000 /* Z - Radius */
# define ObFlag2_SortD 0x80000000 /* Use distance rather than Z */
/*
Flags 3
*/
# define ObFlag3_DynamicModuleObject 0x00000001 / * Allocate module objects
around this object as if
it were a camera */
# define ObFlag3_ObjectSortedItems 0x00000002 /* Used by the Global Sort */
# define ObFlag3_NoLightDot 0x00000004 / * Surface / Point is lit the
same from all angles */
# define ObFlag3_Teleport 0x00000040 /* No motion vector! */
# define ObFlag3_SurfaceAlignDeluxe 0x00000080 /* Better but slower */
# define ObFlag3_PreLit 0x00000100 /* Not source specific */
# define ObFlag3_JustCreated 0x00000200 / * Teleport status for just
one frame */
# define ObFlag3_DontDrawIfOurModuleIsNotVis 0x00000400 / * If the module we
visible , don ' t
draw us */
# define ObFlag3_AlwaysDynamic 0x00000800 /* Overrides auto-detect */
# if SupportMorphing
/*
Morphing Flags
*/
# define mph_flag_play 0x00000001
# define mph_flag_reverse 0x00000002
# define mph_flag_noloop 0x00000004
/*
These four are set so that functions can be informed as to the state of
a sequence . They must be acknowledged and cleared for them to be of any
lasting use . The " start " and " end " flags are always set when the sequence
wraps . Depending on whether the sequence is looping or not , the " looped " or
" finished " flags will be set respectively .
*/
# define mph_flag_start 0x00000008
# define mph_flag_end 0x00000010
# define mph_flag_finished 0x00000020
# define mph_flag_looped 0x00000040
# endif
/*
Standard Points
*/
typedef struct p2d {
VECTOR2D point2d ;
} P2D ;
typedef struct p3d {
VECTORCH point3d ;
} P3D ;
/*
Gouraud Points
*/
typedef struct p2d_gouraud {
VECTOR2D point2d ;
int i2d ;
} P2D_GOURAUD ;
typedef struct p3d_gouraud {
VECTORCH point3d ;
int i3d ;
} P3D_GOURAUD ;
/*
Phong Points
*/
typedef struct p2d_phong {
VECTOR2D point2d ;
VECTORCH phong_normal2d ;
} P2D_PHONG ;
typedef struct p3d_phong {
VECTORCH point3d ;
VECTORCH phong_normal3d ;
} P3D_PHONG ;
/*
Texture 2 d Points
*/
typedef struct p2d_texture2d {
VECTOR2D point2d ;
int u2d_2d ;
int v2d_2d ;
} P2D_TEXTURE2D ;
typedef struct p3d_texture2d {
VECTORCH point3d ;
int u3d_2d ;
int v3d_2d ;
} P3D_TEXTURE2D ;
/*
Texture 2 d Points - Z - Buffered
*/
# if SupportZBuffering
typedef struct p2d_texture2d_zb {
VECTOR2D point2d ;
int u2d_2d ;
int v2d_2d ;
float z2d_2d ;
} P2D_TEXTURE2D_ZB ;
typedef struct p3d_texture2d_zb {
VECTORCH point3d ;
int u3d_2d ;
int v3d_2d ;
float z3d_2d ;
} P3D_TEXTURE2D_ZB ;
# endif
/*
Texture 3 d Points
*/
# if support3dtextures
# if int3dtextures
typedef struct p2d_texture3d {
VECTOR2D point2d ;
int u2d_tx3d ;
int v2d_tx3d ;
int z2d_tx3d ;
} P2D_TEXTURE3D ;
typedef struct p3d_texture3d {
VECTORCH point3d ;
int u3d_tx3d ;
int v3d_tx3d ;
} P3D_TEXTURE3D ;
# else
typedef struct p2d_texture3d {
VECTOR2D point2d ;
float u2d_tx3d ;
float v2d_tx3d ;
float z2d_tx3d ;
} P2D_TEXTURE3D ;
typedef struct p3d_texture3d {
VECTORCH point3d ;
int u3d_tx3d ;
int v3d_tx3d ;
} P3D_TEXTURE3D ;
# endif
# endif
/*
Gouraud Texture 2 d Points
*/
typedef struct p2d_gouraudtexture2d {
VECTOR2D point2d ;
int u2d_2d ;
int v2d_2d ;
int i2d_2d ;
} P2D_GOURAUDTEXTURE2D ;
typedef struct p3d_gouraudtexture2d {
VECTORCH point3d ;
int u3d_2d ;
int v3d_2d ;
int i3d_2d ;
} P3D_GOURAUDTEXTURE2D ;
/*
Gouraud Texture 2 d Points - Z - Buffered
*/
# if SupportZBuffering
typedef struct p2d_gouraudtexture2d_zb {
VECTOR2D point2d ;
int u2d_gtx2d ;
int v2d_gtx2d ;
int i2d_gtx2d ;
float z2d_gtx2d ;
} P2D_GOURAUDTEXTURE2D_ZB ;
typedef struct p3d_gouraudtexture2d_zb {
VECTORCH point3d ;
int u3d_gtx2d ;
int v3d_gtx2d ;
int i3d_gtx2d ;
float z3d_gtx2d ;
} P3D_GOURAUDTEXTURE2D_ZB ;
# endif
# if SupportGouraud3dTextures
/*
Gouraud Texture 3 d Points
*/
typedef struct p2d_gouraudtexture3d {
VECTOR2D point2d ;
float u2d_gtx3d ;
float v2d_gtx3d ;
float z2d_gtx3d ;
int i2d_gtx3d ;
} P2D_GOURAUDTEXTURE3D ;
typedef struct p3d_gouraudtexture3d {
VECTORCH point3d ;
int u3d_gtx3d ;
int v3d_gtx3d ;
int i3d_gtx3d ;
} P3D_GOURAUDTEXTURE3D ;
# endif /* SupportGouraud3dTextures */
/*
Polygon Points .
These are the points as they appear to a Scan Convertor . Item pointers are
cast as these structs by the SC to make their life easier .
*/
/*
I_Polygon
*/
typedef struct i_polygon_pt {
int i_x ;
int i_y ;
} I_POLYGON_PT ;
/*
I_Polygon_ZBuffer
*/
# if ZBufferTest
typedef struct i_polygon_zbuffer_pt {
int i_x ;
int i_y ;
int i_z ;
} I_POLYGON_ZBUFFER_PT ;
# endif
# if SupportZBuffering
typedef struct i_polygon_zbuffer_pt {
int i_x ;
int i_y ;
float i_z ;
} I_POLYGON_ZBUFFER_PT ;
# endif
/*
I_GouraudPolygon
*/
typedef struct i_gouraudpolygon_pt {
int i_x ;
int i_y ;
int i_int ;
} I_GOURAUDPOLYGON_PT ;
/*
I_GouraudPolygon_ZBuffer
*/
# if ZBufferTest
typedef struct i_gouraudpolygon_zbuffer_pt {
int i_x ;
int i_y ;
int i_int ;
int i_gz ;
} I_GOURAUDPOLYGON_ZBUFFER_PT ;
# endif
# if SupportZBuffering
typedef struct i_gouraudpolygon_zbuffer_pt {
int i_x ;
int i_y ;
int i_int ;
float i_gz ;
} I_GOURAUDPOLYGON_ZBUFFER_PT ;
# endif
/*
I_PhongPolygon
*/
typedef struct i_phongpolygon_pt {
int i_x ;
int i_y ;
VECTORCH i_n ;
} I_PHONGPOLYGON_PT ;
# if SupportZBuffering
typedef struct i_phongpolygon_zbuffer_pt {
int i_x ;
int i_y ;
VECTORCH i_n ;
float i_pz ;
} I_PHONGPOLYGON_ZBUFFER_PT ;
# endif
/*
I_2dTexturePolygon
*/
typedef struct i_2dtexturepolygon_pt {
int i_x ;
int i_y ;
int i_u ;
int i_v ;
} I_2DTEXTUREPOLYGON_PT ;
# if SupportZBuffering
typedef struct i_2dtexturepolygon_zbuffer_pt {
int i_x ;
int i_y ;
int i_u ;
int i_v ;
float i_tx2dz ;
} I_2DTEXTUREPOLYGON_ZBUFFER_PT ;
# endif
/*
I_3dTexturePolygon
*/
# if support3dtextures
# if int3dtextures
typedef struct i_3dtexturepolygon_pt {
int i_x ;
int i_y ;
int i_tx3d_u ;
int i_tx3d_v ;
int i_tx3d_z ;
} I_3DTEXTUREPOLYGON_PT ;
# else
typedef struct i_3dtexturepolygon_pt {
int i_x ;
int i_y ;
float i_tx3d_u ;
float i_tx3d_v ;
float i_tx3d_z ;
} I_3DTEXTUREPOLYGON_PT ;
# endif
# if SupportZBuffering
typedef struct i_3dtexturepolygon_zbuffer_pt {
int i_x ;
int i_y ;
float i_tx3d_u ;
float i_tx3d_v ;
float i_tx3d_z ;
} I_3DTEXTUREPOLYGON_ZBUFFER_PT ;
# endif
# endif
/*
I_Gouraud2dTexturePolygon
*/
typedef struct i_gouraud2dtexturepolygon_pt {
int i_x ;
int i_y ;
int i_u ;
int i_v ;
int i_i ;
} I_GOURAUD2DTEXTUREPOLYGON_PT ;
# if SupportZBuffering
typedef struct i_gouraud2dtexturepolygon_zbuffer_pt {
int i_x ;
int i_y ;
int i_u ;
int i_v ;
int i_i ;
float i_gtx2dz ;
} I_GOURAUD2DTEXTUREPOLYGON_ZBUFFER_PT ;
# endif
# if SupportGouraud3dTextures
/*
I_Gouraud3dTexturePolygon
*/
typedef struct i_gouraud3dtexturepolygon_pt {
int i_x ;
int i_y ;
float i_gtx3d_u ;
float i_gtx3d_v ;
float i_gtx3d_z ;
int i_gtx3d_i ;
} I_GOURAUD3DTEXTUREPOLYGON_PT ;
# endif /* SupportGouraud3dTextures */
/*
Clip Point Structure .
Points P , S , F and I use this structure .
*/
typedef struct clip_point {
VECTORCH ClipPoint ;
VECTORCH ClipNormal ;
TEXEL ClipTexel ;
int ClipInt ;
int ClipZBuffer ;
} CLIP_POINT ;
# if support3dtextures
# if int3dtextures
typedef struct clip_point_f {
VECTORCH ClipPointF ;
VECTORCH ClipNormalF ;
TEXELF ClipTexelF ;
int ClipIntF ;
int ClipZBufferF ;
} CLIP_POINT_F ;
# else
typedef struct clip_point_f {
VECTORCH ClipPointF ;
VECTORCH ClipNormalF ;
TEXELF ClipTexelF ;
int ClipIntF ;
float ClipZBufferF ;
} CLIP_POINT_F ;
# endif
# endif
# if SupportGouraud3dTextures
typedef struct clip_point_gtx3d {
VECTORCH ClipPointF ;
VECTORCH ClipNormalF ;
TEXELGTX3D ClipTexelF ;
int ClipIntF ;
float ClipZBufferF ;
} CLIP_POINT_GTX3D ;
# endif
/*
Scan Data Blocks .
These are the structures in ScanData [ ] that the SC outputs . Memory is
allocated from ScanData [ ] as int * but is cast to the following structures
by the SC for ease of use .
*/
typedef struct i_polygon_scan {
int ips_colour ;
int ips_x1 ;
int ips_x2 ;
int ips_y ;
} I_POLYGON_SCAN ;
# if ZBufferTest
typedef struct i_polygon_zbuffer_scan {
int ips_colour ;
int ips_x1 ;
int ips_x2 ;
int ips_y ;
int ips_z1 ;
int ips_z2 ;
} I_POLYGON_ZBUFFER_SCAN ;
# endif
# if SupportZBuffering
typedef struct i_polygon_zbuffer_scan {
int ips_colour ;
int ips_x1 ;
int ips_x2 ;
int ips_y ;
float ips_z1 ;
float ips_z2 ;
} I_POLYGON_ZBUFFER_SCAN ;
# endif
typedef struct i_gouraudpolygon_scan {
int igs_c1 ;
int igs_c2 ;
int igs_x1 ;
int igs_x2 ;
int igs_y ;
} I_GOURAUDPOLYGON_SCAN ;
# if ZBufferTest
typedef struct i_gouraudpolygon_zbuffer_scan {
int igs_c1 ;
int igs_c2 ;
int igs_x1 ;
int igs_x2 ;
int igs_y ;
int igs_z1 ;
int igs_z2 ;
} I_GOURAUDPOLYGON_ZBUFFER_SCAN ;
# endif
# if SupportZBuffering
typedef struct i_gouraudpolygon_zbuffer_scan {
int igs_c1 ;
int igs_c2 ;
int igs_x1 ;
int igs_x2 ;
int igs_y ;
float igs_z1 ;
float igs_z2 ;
} I_GOURAUDPOLYGON_ZBUFFER_SCAN ;
# endif
typedef struct i_phongpolygon_scan {
VECTORCH ips_n1 ;
VECTORCH ips_n2 ;
int ips_x1 ;
int ips_x2 ;
int ips_y ;
} I_PHONGPOLYGON_SCAN ;
# if SupportZBuffering
typedef struct i_phongpolygon_zbuffer_scan {
VECTORCH ips_n1 ;
VECTORCH ips_n2 ;
int ips_x1 ;
int ips_x2 ;
int ips_y ;
float ips_z1 ;
float ips_z2 ;
} I_PHONGPOLYGON_ZBUFFER_SCAN ;
# endif
typedef struct i_2dtexturepolygon_scan {
int i2s_u1 ;
int i2s_v1 ;
int i2s_u2 ;
int i2s_v2 ;
int i2s_x1 ;
int i2s_x2 ;
int i2s_y ;
} I_2DTEXTUREPOLYGON_SCAN ;
# if SupportZBuffering
typedef struct i_2dtexturepolygon_zbuffer_scan {
int i2s_u1 ;
int i2s_v1 ;
int i2s_u2 ;
int i2s_v2 ;
int i2s_x1 ;
int i2s_x2 ;
int i2s_y ;
float i2s_z1 ;
float i2s_z2 ;
} I_2DTEXTUREPOLYGON_ZBUFFER_SCAN ;
# endif
# if support3dtextures
# if int3dtextures
typedef struct i_3dtexturepolygon_scan {
int i3s_u1 ;
int i3s_v1 ;
int i3s_z1 ;
int i3s_u2 ;
int i3s_v2 ;
int i3s_z2 ;
int i3s_x1 ;
int i3s_x2 ;
int i3s_y ;
} I_3DTEXTUREPOLYGON_SCAN ;
# else
typedef struct i_3dtexturepolygon_scan {
float i3s_u1 ;
float i3s_v1 ;
float i3s_z1 ;
float i3s_u2 ;
float i3s_v2 ;
float i3s_z2 ;
int i3s_x1 ;
int i3s_x2 ;
int i3s_y ;
} I_3DTEXTUREPOLYGON_SCAN ;
# endif
# if SupportZBuffering
typedef struct i_3dtexturepolygon_zbuffer_scan {
float i3s_u1 ;
float i3s_v1 ;
float i3s_z1 ;
float i3s_u2 ;
float i3s_v2 ;
float i3s_z2 ;
int i3s_x1 ;
int i3s_x2 ;
int i3s_y ;
} I_3DTEXTUREPOLYGON_ZBUFFER_SCAN ;
# endif
# endif
typedef struct i_gouraud2dtexturepolygon_scan {
int ig2s_u1 ;
int ig2s_v1 ;
int ig2s_c1 ;
int ig2s_u2 ;
int ig2s_v2 ;
int ig2s_c2 ;
int ig2s_x1 ;
int ig2s_x2 ;
int ig2s_y ;
} I_GOURAUD2DTEXTUREPOLYGON_SCAN ;
# if SupportZBuffering
typedef struct i_gouraud2dtexturepolygon_zbuffer_scan {
int ig2s_u1 ;
int ig2s_v1 ;
int ig2s_c1 ;
int ig2s_u2 ;
int ig2s_v2 ;
int ig2s_c2 ;
int ig2s_x1 ;
int ig2s_x2 ;
int ig2s_y ;
float ig2s_z1 ;
float ig2s_z2 ;
} I_GOURAUD2DTEXTUREPOLYGON_ZBUFFER_SCAN ;
# endif
# if SupportGouraud3dTextures
typedef struct i_gouraud3dtexturepolygon_scan {
float ig3s_u1 ;
float ig3s_v1 ;
float ig3s_z1 ;
int ig3s_c1 ;
float ig3s_u2 ;
float ig3s_v2 ;
float ig3s_z2 ;
int ig3s_c2 ;
int ig3s_x1 ;
int ig3s_x2 ;
int ig3s_y ;
} I_GOURAUD3DTEXTUREPOLYGON_SCAN ;
# endif /* SupportGouraud3dTextures */
/*
Functions
*/
# if SupportWindows95
void ClearScreen ( SCREENDESCRIPTORBLOCK * sdb , int Colour ) ;
# endif
void PlatformSpecificShowViewEntry ( VIEWDESCRIPTORBLOCK * vdb , SCREENDESCRIPTORBLOCK * sdb ) ;
void PlatformSpecificShowViewExit ( VIEWDESCRIPTORBLOCK * vdb , SCREENDESCRIPTORBLOCK * sdb ) ;
void AddShape ( DISPLAYBLOCK * dblockptr , VIEWDESCRIPTORBLOCK * VDB_Ptr ) ;
void PrepareVDBForShowView ( VIEWDESCRIPTORBLOCK * VDB_Ptr ) ;
void SetupLight (
LIGHTBLOCK * lptr ,
int sl_flags ,
int sl_type ,
VECTORCH * sl_world ,
VECTORCH * sl_dir ,
int sl_panx ,
int sl_pany ,
int sl_bright ,
int sl_spread ,
int sl_range
) ;
void UpdateObjectLights ( DISPLAYBLOCK * dptr ) ;
DISPLAYBLOCK * ReadMap ( MAPHEADER * mapptr ) ;
void MapPostProcessing ( DISPLAYBLOCK * dptr ) ;
void ObjectQuatAndMat ( DISPLAYBLOCK * dblockptr ) ;
void MapBlockInit ( DISPLAYBLOCK * dblockptr ) ;
void MapSetVDB ( DISPLAYBLOCK * dptr , MAPSETVDB * mapvdbdata ) ;
# if ProjectSpecificVDBs
void ProjectSpecificVDBDestroy ( VIEWDESCRIPTORBLOCK * vdb ) ;
void ProjectSpecificVDBInit ( VIEWDESCRIPTORBLOCK * vdb ) ;
# endif
void UpdateGame ( void ) ;
SHAPEHEADER * GetShapeData ( int shapenum ) ;
void InitialiseObjectBlocks ( void ) ;
DISPLAYBLOCK * AllocateObjectBlock ( void ) ;
void DeallocateObjectBlock ( DISPLAYBLOCK * dblockptr ) ;
DISPLAYBLOCK * CreateActiveObject ( void ) ;
int DestroyActiveObject ( DISPLAYBLOCK * dblockptr ) ;
void InitialiseStrategyBlocks ( void ) ;
struct strategyblock * AllocateStrategyBlock ( void ) ;
void DeallocateStrategyBlock ( struct strategyblock * sptr ) ;
struct strategyblock * CreateActiveStrategyBlock ( void ) ;
int DestroyActiveStrategyBlock ( struct strategyblock * dblockptr ) ;
void InitialiseTxAnimBlocks ( void ) ;
TXACTRLBLK * AllocateTxAnimBlock ( void ) ;
void DeallocateTxAnimBlock ( TXACTRLBLK * TxAnimblockptr ) ;
void AddTxAnimBlock ( DISPLAYBLOCK * dptr , TXACTRLBLK * taptr ) ;
TXANIMHEADER * GetTxAnimHeaderFromShape ( TXACTRLBLK * taptr , int shape ) ;
void UpdateTxAnim ( TXANIMHEADER * txah ) ;
void ChangeSequence ( TXANIMHEADER * txah_old , TXANIMHEADER * txah_new ) ;
void ControlTextureAnimation ( DISPLAYBLOCK * dptr ) ;
int DisplayAndLightBlockDeallocation ( void ) ;
void InitialiseLightBlocks ( void ) ;
LIGHTBLOCK * AllocateLightBlock ( void ) ;
void DeallocateLightBlock ( LIGHTBLOCK * lptr ) ;
LIGHTBLOCK * AddLightBlock ( DISPLAYBLOCK * dptr , LIGHTBLOCK * lptr_to_add ) ;
void DeleteLightBlock ( LIGHTBLOCK * lptr , DISPLAYBLOCK * dptr ) ;
void VDBClipPlanes ( VIEWDESCRIPTORBLOCK * vdb ) ;
void MakeClipPlane (
VIEWDESCRIPTORBLOCK * vdb ,
CLIPPLANEBLOCK * cpb ,
CLIPPLANEPOINTS * cpp ) ;
void SetVDB ( VIEWDESCRIPTORBLOCK * vdb ,
int fl ,
int ty ,
int d ,
int cx ,
int cy ,
int prx ,
int pry ,
int mxp ,
int cl ,
int cr ,
int cu ,
int cd ,
int h1 ,
int h2 ,
int hcolour ,
int ambience
) ;
void InitialiseVDBs ( void ) ;
VIEWDESCRIPTORBLOCK * AllocateVDB ( void ) ;
void DeallocateVDB ( VIEWDESCRIPTORBLOCK * dblockptr ) ;
VIEWDESCRIPTORBLOCK * CreateActiveVDB ( void ) ;
int DestroyActiveVDB ( VIEWDESCRIPTORBLOCK * dblockptr ) ;
void PlatformSpecificVDBInit ( VIEWDESCRIPTORBLOCK * vdb ) ;
/* CDF 4/2/98 */
int GetOneOverSin ( int a ) ;
/* CDF 4/2/98 */
int _DotProduct ( VECTORCH * v1 , VECTORCH * v2 ) ;
int DotProduct2d ( VECTOR2D * v1 , VECTOR2D * v2 ) ;
void MakeNormal (
VECTORCH * v1 ,
VECTORCH * v2 ,
VECTORCH * v3 ,
VECTORCH * v4 ) ;
void GetNormalVector ( VECTORCH * v1 , VECTORCH * v2 , VECTORCH * v3 ) ;
void Normalise ( VECTORCH * nvector ) ;
void MNormalise ( MATRIXCH * m ) ;
void Normalise2d ( VECTOR2D * nvector ) ;
int LineColinearity ( LINE * l0 , LINE * l1 ) ;
void Renormalise ( VECTORCH * nvector ) ;
int Magnitude ( VECTORCH * v ) ;
int VectorDistance ( VECTORCH * v1 , VECTORCH * v2 ) ;
int OutcodeVectorDistance ( VECTORCH * v1 , VECTORCH * v2 , int d ) ;
void MatrixFromZVector ( VECTORCH * v , MATRIXCH * m ) ;
int PointInPolygon ( int * point , int * polygon , int c , int ppsize ) ;
void PolyAveragePoint ( POLYHEADER * pheader , int * spts , VECTORCH * apt ) ;
int FindShift32 ( int value , int limit ) ;
int FindShift64 ( LONGLONGCH * value , LONGLONGCH * limit ) ;
void MaxLONGLONGCH ( LONGLONGCH * llarrayptr , int llarraysize , LONGLONGCH * llmax ) ;
int MaxInt ( int * iarray , int iarraysize ) ;
int MinInt ( int * iarray , int iarraysize ) ;
/*
Some Maths Functions
*/
void CreateEulerMatrix ( EULER * e , MATRIXCH * m1 ) ;
void CreateEulerVector ( EULER * e , VECTORCH * v ) ;
void MatrixMultiply (
MATRIXCH * m1 ,
MATRIXCH * m2 ,
MATRIXCH * m3 ) ;
void TransposeMatrixCH ( MATRIXCH * m1 ) ;
void CopyVector ( VECTORCH * v1 , VECTORCH * v2 ) ;
void CopyLocation ( VECTORCH * v1 , VECTORCH * v2 ) ;
void CopyEuler ( EULER * e1 , EULER * e2 ) ;
void CopyMatrix ( MATRIXCH * m1 , MATRIXCH * m2 ) ;
void MakeVector ( VECTORCH * v1 , VECTORCH * v2 , VECTORCH * v3 ) ;
void AddVector ( VECTORCH * v1 , VECTORCH * v2 ) ;
void SubVector ( VECTORCH * v1 , VECTORCH * v2 ) ;
void QuatToMat ( QUAT * q , MATRIXCH * m ) ;
void _RotateVector (
VECTORCH * v ,
MATRIXCH * m ) ;
void _RotateAndCopyVector (
VECTORCH * v1 ,
VECTORCH * v2 ,
MATRIXCH * m ) ;
void MakeVectorLocal ( VECTORCH * v1 , VECTORCH * v2 , VECTORCH * v3 , MATRIXCH * m ) ;
void MatrixToEuler ( MATRIXCH * m , EULER * e ) ;
void MatrixToEuler2 ( MATRIXCH * m , EULER * e ) ;
int ArcCos ( int ) ;
int ArcSin ( int ) ;
int ArcTan ( int , int ) ;
int FandVD_Distance_2d ( VECTOR2D * v0 , VECTOR2D * v1 ) ;
int FandVD_Distance_3d ( VECTORCH * v0 , VECTORCH * v1 ) ;
int Distance_2d ( VECTOR2D * v0 , VECTOR2D * v1 ) ;
int Distance_3d ( VECTORCH * v0 , VECTORCH * v1 ) ;
/*
Shape Language Functions
Each function requires a pointer to SHAPEINSTR
*/
void SetupShapeLanguage ( SHAPEHEADER * shapeheaderptr ) ;
void ShapePointsInstr ( SHAPEINSTR * shapeinstrptr ) ;
void ShapeSpritePointsInstr ( SHAPEINSTR * shapeinstrptr ) ;
void ShapeSpriteRPointsInstr ( SHAPEINSTR * shapeinstrptr ) ;
void BackFaceCullPointOutcodeFlagging ( void ) ;
/*
Platform Specific Functions
*/
void InitialiseSystem ( void ) ;
void InitialiseRenderer ( void ) ;
void ExitSystem ( void ) ;
void InitialVideoMode ( void ) ;
2001-12-18 02:23:39 +00:00
void RestartLevel ( ) ;
2000-03-16 11:25:00 +01:00
void ResetFrameCounter ( void ) ;
void FrameCounterHandler ( void ) ;
void DirectWriteD3DLine ( VECTOR2D * LineStart , VECTOR2D * LineEnd , int LineColour ) ;
void * LoadImageIntoDirectDrawSurface ( char * fname , IMAGEHEADER * iheader ,
int ImageLoadMode , BOOL Sysmem ) ;
void * LoadImageIntoD3DImmediateSurface ( char * fname , IMAGEHEADER * iheader ,
int TextureFileType ) ;
void * LoadImageIntoD3DTexture ( char * fname , IMAGEHEADER * iheader ,
int TextureFileType ) ;
void ReloadImageIntoD3DImmediateSurface ( IMAGEHEADER * iheader ) ;
void * ReloadImageIntoD3DTexture ( IMAGEHEADER * iheader ) ;
int GetTextureHandle ( IMAGEHEADER * imageHeaderPtr ) ;
void * LoadFontIntoDirectDrawSurface ( char * fname , IMAGEHEADER * iheader ) ;
void ClearScreen ( SCREENDESCRIPTORBLOCK * sdb , int Colour ) ;
void InitGame ( void ) ;
void StartGame ( void ) ;
void ExitGame ( void ) ;
void InitialiseParallelStrategy ( void ) ;
void UpdateParallelStrategy ( void ) ;
unsigned char * AllocateScreenBuffer ( int sbuffersize ) ;
#if 0
#if 0
void * AllocateMem ( size_t __size ) ;
void DeallocateMem ( void * __ptr ) ;
# endif
# if PSX
# ifdef DBGMALLOC
extern void * record_malloc ( long size , char string [ ] , unsigned long lineno ) ;
extern void record_free ( void * ptr , char string [ ] , unsigned long lineno ) ;
# define AllocateMem(x) record_malloc(x,__FILE__, __LINE__)
# define DeallocateMem(x) record_free(x,__FILE__, __LINE__)
# else
void * AllocateMem ( size_t __size ) ;
void DeallocateMem ( void * __ptr ) ;
# endif
# else
void * AllocateMem ( size_t __size ) ;
void DeallocateMem ( void * __ptr ) ;
# endif
# endif
void ScanDraw_Item_Polygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_Polygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_Polygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_Polygon_VideoModeType_8T ( int * itemptr ) ;
# if (ZBufferTest || SupportZBuffering)
void ScanDraw_Item_Polygon_ZBuffer_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_Polygon_ZBuffer_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_Polygon_ZBuffer_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_Polygon_ZBuffer_VideoModeType_8T ( int * itemptr ) ;
# endif
void ScanDraw_Item_GouraudPolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_VideoModeType_8T ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_HPV_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_HPV_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_HPV_VideoModeType_8T ( int * itemptr ) ;
# if ZBufferTest
void ScanDraw_Item_GouraudPolygon_ZBuffer_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_ZBuffer_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_ZBuffer_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_GouraudPolygon_ZBuffer_VideoModeType_8T ( int * itemptr ) ;
# endif
# if SupportZBuffering
void ScanDraw_ZB_Item_GouraudPolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_ZB_Item_GouraudPolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_ZB_Item_GouraudPolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_ZB_Item_GouraudPolygon_VideoModeType_8T ( int * itemptr ) ;
# endif
void ScanDraw_Item_2dTexturePolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_2dTexturePolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_2dTexturePolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_2dTexturePolygon_VideoModeType_8T ( int * itemptr ) ;
# if SupportZBuffering
void ScanDraw_ZB_Item_2dTexturePolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_ZB_Item_2dTexturePolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_ZB_Item_2dTexturePolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_ZB_Item_2dTexturePolygon_VideoModeType_8T ( int * itemptr ) ;
# endif
void ScanDraw_Item_Gouraud2dTexturePolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud2dTexturePolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud2dTexturePolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud2dTexturePolygon_VideoModeType_8T ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud2dTexturePolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud2dTexturePolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud2dTexturePolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud2dTexturePolygon_VideoModeType_8T ( int * itemptr ) ;
# if support3dtextures
void ScanDraw_Item_3dTexturePolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_VideoModeType_8T ( int * itemptr ) ;
# endif
# if SupportGouraud3dTextures
void ScanDraw_Item_Gouraud3dTexturePolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_VideoModeType_8T ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_Linear_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_Linear_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_Linear_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_Linear_VideoModeType_8T ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_Linear_S_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_Linear_S_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_Linear_S_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_Gouraud3dTexturePolygon_Linear_S_VideoModeType_8T ( int * itemptr ) ;
# if SupportZBuffering
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_VideoModeType_8T ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_Linear_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_Linear_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_Linear_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_Linear_VideoModeType_8T ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_Linear_S_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_Linear_S_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_Linear_S_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_ZB_Gouraud3dTexturePolygon_Linear_S_VideoModeType_8T ( int * itemptr ) ;
# endif /* SupportZBuffering */
# endif /* SupportGouraud3dTextures */
# if support3dtextures
# if SupportZBuffering
void ScanDraw_Item_ZB_3dTexturePolygon_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_VideoModeType_8T ( int * itemptr ) ;
# endif
void ScanDraw_Item_3dTexturePolygon_QuadI_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_QuadI_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_QuadI_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_QuadI_VideoModeType_8T ( int * itemptr ) ;
# if SupportZBuffering
void ScanDraw_ZB_Item_3dTexturePolygon_QuadI_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_ZB_Item_3dTexturePolygon_QuadI_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_ZB_Item_3dTexturePolygon_QuadI_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_ZB_Item_3dTexturePolygon_QuadI_VideoModeType_8T ( int * itemptr ) ;
# endif
void ScanDraw_Item_3dTexturePolygon_Linear_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_Linear_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_Linear_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_Linear_VideoModeType_8T ( int * itemptr ) ;
# if SupportZBuffering
void ScanDraw_Item_ZB_3dTexturePolygon_Linear_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_Linear_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_Linear_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_Linear_VideoModeType_8T ( int * itemptr ) ;
# endif
void ScanDraw_Item_3dTexturePolygon_Linear_S_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_Linear_S_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_Linear_S_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_3dTexturePolygon_Linear_S_VideoModeType_8T ( int * itemptr ) ;
# if SupportZBuffering
void ScanDraw_Item_ZB_3dTexturePolygon_Linear_S_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_Linear_S_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_Linear_S_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_ZB_3dTexturePolygon_Linear_S_VideoModeType_8T ( int * itemptr ) ;
# endif
# endif /* support3dtextures */
void ScanDraw_Item_Polyline_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_Polyline_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_Polyline_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_Polyline_VideoModeType_8T ( int * itemptr ) ;
void ScanDraw_Item_FilledPolyline_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_FilledPolyline_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_FilledPolyline_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_FilledPolyline_VideoModeType_8T ( int * itemptr ) ;
void ScanDraw_Item_Wireframe_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_Wireframe_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_Wireframe_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_Wireframe_VideoModeType_8T ( int * itemptr ) ;
#if 0
void ScanDraw_Item_HUDPolyline_VideoModeType_8 ( int * itemptr ) ;
void ScanDraw_Item_HUDPolyline_VideoModeType_15 ( int * itemptr ) ;
void ScanDraw_Item_HUDPolyline_VideoModeType_24 ( int * itemptr ) ;
void ScanDraw_Item_HUDPolyline_VideoModeType_8T ( int * itemptr ) ;
# endif
void SetPalette ( unsigned char * palette ) ;
void MakeTextureLightingTable6 ( void ) ;
void MakeTextureLightingTable6G ( void ) ;
void MakeTextureLightingTable15 ( void ) ;
void MakeTextureLightingTable24 ( void ) ;
void MakeTextureLightingTable8T ( void ) ;
void CreatePaletteRemapTable ( unsigned char * palette ) ;
unsigned char GetRemappedPaletteColour ( int r , int g , int b , int bitsize ) ;
int NearestColour ( int rs , int gs , int bs , unsigned char * palette ) ;
# if LoadingMapsShapesAndTexturesEtc
void InitialiseImageHeaders ( void ) ;
int LoadImagesForShapes ( SHAPEHEADER * * shapelist ) ;
# else
int InitialiseTextures ( void ) ;
# endif
void MakeShapeTexturesGlobal ( SHAPEHEADER * shptr , int TxIndex , int LTxIndex ) ;
void MakeTxAnimFrameTexturesGlobal ( SHAPEHEADER * sptr ,
POLYHEADER * pheader ,
int LTxIndex , int TxIndex ) ;
void SpriteResizing ( SHAPEHEADER * sptr ) ;
void FindImageExtents ( IMAGEHEADER * ihdr , int numuvs , int * uvdata , IMAGEEXTENTS * e , IMAGEEXTENTS * e_curr ) ;
int GetMVSIndex ( TXANIMHEADER * txah , EULER * e ) ;
IMAGEHEADER * GetImageHeader ( void ) ;
void * GetTexture ( int texindex ) ;
TEXTURE * GetTextureMemory ( int txsize ) ;
void ReturnTextureMemory ( TEXTURE * txptr ) ;
/* Backdrops */
# if pc_backdrops
int UpdateBackdrops ( SCENE Scene ) ;
int DeallocateBackdrops ( SCENE Scene ) ;
int LoadBackdrop ( char * image , IMAGEHEADER * ihdr ) ;
# endif
void GetProjectFilename ( char * fname , char * image ) ;
void GetDOSFilename ( char * fnameptr ) ;
int CompareFilenameCH ( char * string1 , char * string2 ) ;
TEXTURE * LoadImageCH ( char * fname , IMAGEHEADER * iheader ) ;
TEXTURE * LoadBMP ( char * fname , IMAGEHEADER * iheader ) ;
TEXTURE * LoadPGM ( char * fname , IMAGEHEADER * iheader ) ;
int LoadPGMPalette ( char * fname , unsigned char * palette ) ;
int LoadPGMPaletteLightingTable ( char * filename , unsigned char * palette ) ;
void MakeTextureLightingTableRaw256 ( unsigned char * palette ) ;
void Create_MIP_Map ( IMAGEHEADER * iheader ) ;
int NextLowPower2 ( int i ) ;
/* User Input */
void ReadUserInput ( void ) ;
void InitMouse ( void ) ;
void ReadMouse ( void ) ;
typedef struct mousedata {
short MouseDataX ;
short MouseDataY ;
unsigned short MouseDataButton ;
short MouseDataVelX ;
short MouseDataVelY ;
} MOUSEDATA ;
void ReadKeyboard ( void ) ;
#if 0
void ReadEmulatedSaturnControlPad ( void ) ;
unsigned int CheckPad ( void ) ;
void ExaminePad ( void ) ;
/*
Saturn Control Pad
See pad . h
Model S Pad , direct mode
*/
# define PAD_DOWN 0x0001
# define PAD_UP 0x0002
# define PAD_LEFT 0x0004
# define PAD_RIGHT 0x0008
# define PAD_BUTC 0x0010
# define PAD_BUTB 0x0020
# define PAD_BUTA 0x0040
# define PAD_START 0x0080
# define PAD_BUTZ 0x0100
# define PAD_BUTY 0x0200
# define PAD_BUTX 0x0400
# define PAD_MODE 0x0800
# define PAD_R 0x0800
# define PAD_L 0x1000
# endif
void WaitForReturn ( void ) ;
void CursorHome ( void ) ;
void InitialiseItemLists ( void ) ;
void InitialiseItemPointers ( void ) ;
void InitialiseItemData ( void ) ;
void * AllocateItemData ( int itemsize ) ;
int GetZForZBuffer ( int z ) ;
void FlushZBuffer ( VIEWDESCRIPTORBLOCK * vdb ) ;
/* Draw Item */
void Draw_Item_GouraudPolygon ( int * itemptr ) ;
void Draw_Item_2dTexturePolygon ( int * itemptr ) ;
void Draw_Item_Gouraud2dTexturePolygon ( int * itemptr ) ;
void Draw_Item_Gouraud3dTexturePolygon ( int * itemptr ) ;
void Draw_Item_ZB_GouraudPolygon ( int * itemptr ) ;
void Draw_Item_ZB_2dTexturePolygon ( int * itemptr ) ;
void Draw_Item_ZB_Gouraud2dTexturePolygon ( int * itemptr ) ;
void Draw_Item_ZB_Gouraud3dTexturePolygon ( int * itemptr ) ;
/*
Texture Animation
*/
int * GetTxAnimArrayZ ( int shape , int item ) ;
TXANIMHEADER * GetTxAnimDataZ ( int shape , int item , int sequence ) ;
# if SupportBSP
TXANIMHEADER * GetTxAnimDataBSP ( int shape , int node , int item , int sequence ) ;
# endif
int GT_LL ( LONGLONGCH * a , LONGLONGCH * b ) ;
int LT_LL ( LONGLONGCH * a , LONGLONGCH * b ) ;
void SetFastRandom ( void ) ;
int FastRandom ( void ) ;
void DrawPalette ( int x0 , int y0 , int x1 , int y1 ) ;
/*
Equates and Enums
*/
typedef enum {
Boundary_Left ,
Boundary_Right ,
Boundary_Up ,
Boundary_Down ,
Boundary_Z
} CLIP2DBOUNDARIES ;
# if SupportMorphing
void UpdateMorphing ( MORPHCTRL * mcptr ) ;
void UpdateMorphingDptr ( DISPLAYBLOCK * dptr ) ;
void GetMorphDisplay ( MORPHDISPLAY * md , DISPLAYBLOCK * dptr ) ;
void CopyMorphCtrl ( MORPHCTRL * src , MORPHCTRL * dst ) ;
VECTORCH * GetMorphedPts ( DISPLAYBLOCK * dptr , MORPHDISPLAY * md ) ;
# if LazyEvaluationForMorphing
void FreeMorphArrays ( void ) ;
# endif
# endif
/* KJL 15:07:39 01/08/97 - Returns the magnitude of the
cross product of two vectors a and b . */
int MagnitudeOfCrossProduct ( VECTORCH * a , VECTORCH * b ) ;
/* KJL 15:08:01 01/08/97 - sets the vector c to be the
cross product of the vectors a and b . */
void CrossProduct ( VECTORCH * a , VECTORCH * b , VECTORCH * c ) ;
/* KJL 12:01:08 7/16/97 - returns the magnitude of a vector - max error about 13%, though average error
less than half this . Very fast compared to other approaches . */
int Approximate3dMagnitude ( VECTORCH * v ) ;
# ifdef __cplusplus
} ;
# endif
2001-07-05 18:05:07 +00:00
2000-03-16 11:25:00 +01:00
# endif