home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FMI Superhry 1
/
Superhry-I.bin
/
bonus
/
doom
/
programs
/
dmwbsp
/
source
/
idbsp.h
< prev
next >
Wrap
Text File
|
1994-06-02
|
7KB
|
274 lines
#include <stdio.h>
#include <stdarg.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)
*/
#define PI 3.141592657
#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