home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FMI Superhry 1
/
Superhry-I.bin
/
bonus
/
doom
/
programs
/
ibsp101s
/
idbsp.h
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-04
|
7KB
|
302 lines
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cmdlib.h"
#ifndef __IDBSP__
#define __IDBSP__
#define MAX(a,b) ( (a) > (b) ) ? (a) : (b)
#define MIN(a,b) ( (a) < (b) ) ? (a) : (b)
typedef struct
{
int count;
int size;
void *data;
}
STORAGE;
#include <math.h>
#include <limits.h>
#include <float.h>
/*#include "cmdlib.h" */
#include "doomdata.h"
#include "wadfile.h"
/* #include "doomdata.h" */
/*
#define SHORT(x) NXSwapLittleShortToHost((short)x)
#define LONG(x) NXSwapLittleLongToHost((long)x)
*/
/*
#define SHORT(x) LittleShort((short)x)
#define LONG(x) LittleLong((long)x)
*/
/*
#define SHORT(x) BigShort((short)x)
#define LONG(x) BigLong((long)x)
*/
/*
#define SHORT(x) (short)(x)
#define LONG(x) (long)(x)
*/
#ifndef PI
#define PI 3.14159265359
#endif
#define MAXVERTEX 8192
#define MAXTOUCHSECS 16
#define MAXSECTORS 2048
#define MAXSUBSECTORS 2048
typedef struct
{
float x;
float y;
}
NXPoint;
typedef struct
{
float width;
float height;
}
NXSize;
typedef struct
{
NXPoint origin;
NXSize size;
}
NXRect;
/*
===============================================================================
map file types
===============================================================================
*/
typedef struct
{
int floorheight,
ceilingheight;
char floorflat[9],
ceilingflat[9];
int lightlevel;
int special,
tag;
}
sectordef_t;
typedef struct
{
int firstrow;
int firstcollumn;
char toptexture[9];
char bottomtexture[9];
char midtexture[9];
sectordef_t sectordef; /* on the viewers side */
int sector; /* only used when saving doom map */
}
worldside_t;
typedef struct
{
NXPoint p1,
p2;
int special,
tag;
int flags;
worldside_t side[2];
}
worldline_t;
#define ML_BLOCKMOVE 1
#define ML_TWOSIDED 4 /* backside will not be present at all if not two sided */
typedef struct
{
NXPoint origin;
int angle;
int type;
int options;
int area;
}
worldthing_t;
/*
===============================================================================
internal types
===============================================================================
*/
typedef struct
{
NXPoint pt;
float dx,
dy;
}
divline_t;
typedef struct bspstruct_s
{
/* id lines_i; // if non NULL, the node is */
STORAGE *lines_i;
divline_t divline; /* terminal and has no children */
float bbox[4];
struct bspstruct_s *side[2];
}
bspnode_t;
typedef struct
{
NXPoint p1,
p2;
int linedef,
side,
offset;
boolean grouped; /* internal error check */
}
line_t;
/*
===============================================================================
idbsp
===============================================================================
*/
extern WADFILE wad_i;
/*extern boolean draw; */
void progress(void);
short LittleShort(short l);
short BigShort(short l);
long LittleLong(long l);
long BigLong(long l);
void AddFromFile(char *resname, int size, char *fname);
void FreeGlobalStorage(void);
/*
===============================================================================
doomload
===============================================================================
*/
extern STORAGE *linestore_i,
*thingstore_i;
/* void LoadDoomMap (char *mapname); */
void LoadDoomMap(FILE * file);
/*
===============================================================================
drawing
===============================================================================
*/
extern STORAGE *window_i,
*view_i;
extern float scale;
extern NXRect worldbounds;
void EraseWindow(void);
void DrawMap(void);
/*void DrawLineStore (id lines_i); */
void DrawLineStore(STORAGE * lines_i);
void DrawDivLine(divline_t * div);
void DrawLineDef(maplinedef_t * ld);
/*
===============================================================================
buildbsp
===============================================================================
*/
extern int cuts; /* number of new lines generated by BSP process */
extern bspnode_t *startnode;
void BuildBSP(void);
void DivlineFromWorldline(divline_t * d, line_t * w);
int PointOnSide(NXPoint * p, divline_t * l);
void ExecuteSplit(STORAGE * lines_i, line_t * spliton, STORAGE * frontlist_i,
STORAGE * backlist_i);
/*
===============================================================================
savebsp
===============================================================================
*/
extern STORAGE *secstore_i;
extern STORAGE *mapvertexstore_i;
extern STORAGE *subsecstore_i;
extern STORAGE *maplinestore_i;
extern STORAGE *nodestore_i;
extern STORAGE *mapthingstore_i;
extern STORAGE *ldefstore_i;
extern STORAGE *sdefstore_i;
void SaveDoomMap(void);
/*
===============================================================================
saveblocks
===============================================================================
*/
void SaveBlocks(void);
/* extern short *datalist; */
/*
===============================================================================
savesectors
===============================================================================
*/
void ProcessSectors(void);
void BuildSectordefs(void);
/* extern short **vertexsublist; */
/*
===============================================================================
saveconnect
===============================================================================
*/
void ProcessConnections(void);
void OutputConnections(void);
#endif