summaryrefslogtreecommitdiff
path: root/src/heretic/r_local.h
diff options
context:
space:
mode:
authorSimon Howard2008-09-04 23:15:36 +0000
committerSimon Howard2008-09-04 23:15:36 +0000
commit0df2cb80cf03d7259746834220d209b306a8c503 (patch)
treefdc5037429c91dcbc8207c3e75fc787ef96e207a /src/heretic/r_local.h
parent6a294daa7859eaf0250aa4a77484dd11550e5c5e (diff)
downloadchocolate-doom-0df2cb80cf03d7259746834220d209b306a8c503.tar.gz
chocolate-doom-0df2cb80cf03d7259746834220d209b306a8c503.tar.bz2
chocolate-doom-0df2cb80cf03d7259746834220d209b306a8c503.zip
Add GPLed Heretic/Hexen source.
Subversion-branch: /branches/raven-branch Subversion-revision: 1195
Diffstat (limited to 'src/heretic/r_local.h')
-rw-r--r--src/heretic/r_local.h468
1 files changed, 468 insertions, 0 deletions
diff --git a/src/heretic/r_local.h b/src/heretic/r_local.h
new file mode 100644
index 00000000..33833cc0
--- /dev/null
+++ b/src/heretic/r_local.h
@@ -0,0 +1,468 @@
+// R_local.h
+
+#ifndef __R_LOCAL__
+#define __R_LOCAL__
+
+#define ANGLETOSKYSHIFT 22 // sky map is 256*128*4 maps
+
+#define BASEYCENTER 100
+
+#define MAXWIDTH 1120
+#define MAXHEIGHT 832
+
+#define PI 3.141592657
+
+#define CENTERY (SCREENHEIGHT/2)
+
+#define MINZ (FRACUNIT*4)
+
+#define FIELDOFVIEW 2048 // fineangles in the SCREENWIDTH wide window
+
+//
+// lighting constants
+//
+#define LIGHTLEVELS 16
+#define LIGHTSEGSHIFT 4
+#define MAXLIGHTSCALE 48
+#define LIGHTSCALESHIFT 12
+#define MAXLIGHTZ 128
+#define LIGHTZSHIFT 20
+#define NUMCOLORMAPS 32 // number of diminishing
+#define INVERSECOLORMAP 32
+
+/*
+==============================================================================
+
+ INTERNAL MAP TYPES
+
+==============================================================================
+*/
+
+//================ used by play and refresh
+
+typedef struct
+{
+ fixed_t x,y;
+} vertex_t;
+
+struct line_s;
+
+typedef struct
+{
+ fixed_t floorheight, ceilingheight;
+ short floorpic, ceilingpic;
+ short lightlevel;
+ short special, tag;
+
+ int soundtraversed; // 0 = untraversed, 1,2 = sndlines -1
+ mobj_t *soundtarget; // thing that made a sound (or null)
+
+ int blockbox[4]; // mapblock bounding box for height changes
+ degenmobj_t soundorg; // for any sounds played by the sector
+
+ int validcount; // if == validcount, already checked
+ mobj_t *thinglist; // list of mobjs in sector
+ void *specialdata; // thinker_t for reversable actions
+ int linecount;
+ struct line_s **lines; // [linecount] size
+} sector_t;
+
+typedef struct
+{
+ fixed_t textureoffset; // add this to the calculated texture col
+ fixed_t rowoffset; // add this to the calculated texture top
+ short toptexture, bottomtexture, midtexture;
+ sector_t *sector;
+} side_t;
+
+typedef enum {ST_HORIZONTAL, ST_VERTICAL, ST_POSITIVE, ST_NEGATIVE} slopetype_t;
+
+typedef struct line_s
+{
+ vertex_t *v1, *v2;
+ fixed_t dx,dy; // v2 - v1 for side checking
+ short flags;
+ short special, tag;
+ short sidenum[2]; // sidenum[1] will be -1 if one sided
+ fixed_t bbox[4];
+ slopetype_t slopetype; // to aid move clipping
+ sector_t *frontsector, *backsector;
+ int validcount; // if == validcount, already checked
+ void *specialdata; // thinker_t for reversable actions
+} line_t;
+
+
+typedef struct subsector_s
+{
+ sector_t *sector;
+ short numlines;
+ short firstline;
+} subsector_t;
+
+typedef struct
+{
+ vertex_t *v1, *v2;
+ fixed_t offset;
+ angle_t angle;
+ side_t *sidedef;
+ line_t *linedef;
+ sector_t *frontsector;
+ sector_t *backsector; // NULL for one sided lines
+} seg_t;
+
+typedef struct
+{
+ fixed_t x,y,dx,dy; // partition line
+ fixed_t bbox[2][4]; // bounding box for each child
+ unsigned short children[2]; // if NF_SUBSECTOR its a subsector
+} node_t;
+
+
+/*
+==============================================================================
+
+ OTHER TYPES
+
+==============================================================================
+*/
+
+typedef byte lighttable_t; // this could be wider for >8 bit display
+
+#define MAXVISPLANES 128
+#define MAXOPENINGS SCREENWIDTH*64
+
+typedef struct
+{
+ fixed_t height;
+ int picnum;
+ int lightlevel;
+ int special;
+ int minx, maxx;
+ byte pad1; // leave pads for [minx-1]/[maxx+1]
+ byte top[SCREENWIDTH];
+ byte pad2;
+ byte pad3;
+ byte bottom[SCREENWIDTH];
+ byte pad4;
+} visplane_t;
+
+typedef struct drawseg_s
+{
+ seg_t *curline;
+ int x1, x2;
+ fixed_t scale1, scale2, scalestep;
+ int silhouette; // 0=none, 1=bottom, 2=top, 3=both
+ fixed_t bsilheight; // don't clip sprites above this
+ fixed_t tsilheight; // don't clip sprites below this
+// pointers to lists for sprite clipping
+ short *sprtopclip; // adjusted so [x1] is first value
+ short *sprbottomclip; // adjusted so [x1] is first value
+ short *maskedtexturecol; // adjusted so [x1] is first value
+} drawseg_t;
+
+#define SIL_NONE 0
+#define SIL_BOTTOM 1
+#define SIL_TOP 2
+#define SIL_BOTH 3
+
+#define MAXDRAWSEGS 256
+
+// A vissprite_t is a thing that will be drawn during a refresh
+typedef struct vissprite_s
+{
+ struct vissprite_s *prev, *next;
+ int x1, x2;
+ fixed_t gx, gy; // for line side calculation
+ fixed_t gz, gzt; // global bottom / top for silhouette clipping
+ fixed_t startfrac; // horizontal position of x1
+ fixed_t scale;
+ fixed_t xiscale; // negative if flipped
+ fixed_t texturemid;
+ int patch;
+ lighttable_t *colormap;
+ int mobjflags; // for color translation and shadow draw
+ boolean psprite; // true if psprite
+ fixed_t footclip; // foot clipping
+} vissprite_t;
+
+
+extern visplane_t *floorplane, *ceilingplane;
+
+// Sprites are patches with a special naming convention so they can be
+// recognized by R_InitSprites. The sprite and frame specified by a
+// thing_t is range checked at run time.
+// a sprite is a patch_t that is assumed to represent a three dimensional
+// object and may have multiple rotations pre drawn. Horizontal flipping
+// is used to save space. Some sprites will only have one picture used
+// for all views.
+
+typedef struct
+{
+ boolean rotate; // if false use 0 for any position
+ short lump[8]; // lump to use for view angles 0-7
+ byte flip[8]; // flip (1 = flip) to use for view angles 0-7
+} spriteframe_t;
+
+typedef struct
+{
+ int numframes;
+ spriteframe_t *spriteframes;
+} spritedef_t;
+
+extern spritedef_t *sprites;
+extern int numsprites;
+
+//=============================================================================
+
+extern int numvertexes;
+extern vertex_t *vertexes;
+
+extern int numsegs;
+extern seg_t *segs;
+
+extern int numsectors;
+extern sector_t *sectors;
+
+extern int numsubsectors;
+extern subsector_t *subsectors;
+
+extern int numnodes;
+extern node_t *nodes;
+
+extern int numlines;
+extern line_t *lines;
+
+extern int numsides;
+extern side_t *sides;
+
+
+
+extern fixed_t viewx, viewy, viewz;
+extern angle_t viewangle;
+extern player_t *viewplayer;
+
+
+extern angle_t clipangle;
+
+extern int viewangletox[FINEANGLES/2];
+extern angle_t xtoviewangle[SCREENWIDTH+1];
+extern fixed_t finetangent[FINEANGLES/2];
+
+extern fixed_t rw_distance;
+extern angle_t rw_normalangle;
+
+//
+// R_main.c
+//
+extern int viewwidth, viewheight, viewwindowx, viewwindowy;
+extern int centerx, centery;
+extern int flyheight;
+extern fixed_t centerxfrac;
+extern fixed_t centeryfrac;
+extern fixed_t projection;
+
+extern int validcount;
+
+extern int sscount, linecount, loopcount;
+extern lighttable_t *scalelight[LIGHTLEVELS][MAXLIGHTSCALE];
+extern lighttable_t *scalelightfixed[MAXLIGHTSCALE];
+extern lighttable_t *zlight[LIGHTLEVELS][MAXLIGHTZ];
+
+extern int extralight;
+extern lighttable_t *fixedcolormap;
+
+extern fixed_t viewcos, viewsin;
+
+extern int detailshift; // 0 = high, 1 = low
+
+extern void (*colfunc) (void);
+extern void (*basecolfunc) (void);
+extern void (*fuzzcolfunc) (void);
+extern void (*spanfunc) (void);
+
+int R_PointOnSide (fixed_t x, fixed_t y, node_t *node);
+int R_PointOnSegSide (fixed_t x, fixed_t y, seg_t *line);
+angle_t R_PointToAngle (fixed_t x, fixed_t y);
+angle_t R_PointToAngle2 (fixed_t x1, fixed_t y1, fixed_t x2, fixed_t y2);
+fixed_t R_PointToDist (fixed_t x, fixed_t y);
+fixed_t R_ScaleFromGlobalAngle (angle_t visangle);
+subsector_t *R_PointInSubsector (fixed_t x, fixed_t y);
+void R_AddPointToBox (int x, int y, fixed_t *box);
+
+
+//
+// R_bsp.c
+//
+extern seg_t *curline;
+extern side_t *sidedef;
+extern line_t *linedef;
+extern sector_t *frontsector, *backsector;
+
+extern int rw_x;
+extern int rw_stopx;
+
+extern boolean segtextured;
+extern boolean markfloor; // false if the back side is the same plane
+extern boolean markceiling;
+extern boolean skymap;
+
+extern drawseg_t drawsegs[MAXDRAWSEGS], *ds_p;
+
+extern lighttable_t **hscalelight, **vscalelight, **dscalelight;
+
+typedef void (*drawfunc_t) (int start, int stop);
+void R_ClearClipSegs (void);
+
+void R_ClearDrawSegs (void);
+void R_InitSkyMap (void);
+void R_RenderBSPNode (int bspnum);
+
+//
+// R_segs.c
+//
+extern int rw_angle1; // angle to line origin
+
+void R_RenderMaskedSegRange (drawseg_t *ds, int x1, int x2);
+
+
+//
+// R_plane.c
+//
+typedef void (*planefunction_t) (int top, int bottom);
+extern planefunction_t floorfunc, ceilingfunc;
+
+extern int skyflatnum;
+
+extern short openings[MAXOPENINGS], *lastopening;
+
+extern short floorclip[SCREENWIDTH];
+extern short ceilingclip[SCREENWIDTH];
+
+extern fixed_t yslope[SCREENHEIGHT];
+extern fixed_t distscale[SCREENWIDTH];
+
+void R_InitPlanes (void);
+void R_ClearPlanes (void);
+void R_MapPlane (int y, int x1, int x2);
+void R_MakeSpans (int x, int t1, int b1, int t2, int b2);
+void R_DrawPlanes (void);
+
+visplane_t *R_FindPlane (fixed_t height, int picnum, int lightlevel,
+ int special);
+visplane_t *R_CheckPlane (visplane_t *pl, int start, int stop);
+
+
+//
+// R_debug.m
+//
+extern int drawbsp;
+
+void RD_OpenMapWindow (void);
+void RD_ClearMapWindow (void);
+void RD_DisplayLine (int x1, int y1, int x2, int y2, float gray);
+void RD_DrawNodeLine (node_t *node);
+void RD_DrawLineCheck (seg_t *line);
+void RD_DrawLine (seg_t *line);
+void RD_DrawBBox (fixed_t *bbox);
+
+
+//
+// R_data.c
+//
+extern fixed_t *textureheight; // needed for texture pegging
+extern fixed_t *spritewidth; // needed for pre rendering (fracs)
+extern fixed_t *spriteoffset;
+extern fixed_t *spritetopoffset;
+extern lighttable_t *colormaps;
+extern int viewwidth, scaledviewwidth, viewheight;
+extern int firstflat;
+extern int numflats;
+
+extern int *flattranslation; // for global animation
+extern int *texturetranslation; // for global animation
+
+extern int firstspritelump, lastspritelump, numspritelumps;
+
+byte *R_GetColumn (int tex, int col);
+void R_InitData (void);
+void R_PrecacheLevel (void);
+
+
+//
+// R_things.c
+//
+#define MAXVISSPRITES 128
+
+extern vissprite_t vissprites[MAXVISSPRITES], *vissprite_p;
+extern vissprite_t vsprsortedhead;
+
+// constant arrays used for psprite clipping and initializing clipping
+extern short negonearray[SCREENWIDTH];
+extern short screenheightarray[SCREENWIDTH];
+
+// vars for R_DrawMaskedColumn
+extern short *mfloorclip;
+extern short *mceilingclip;
+extern fixed_t spryscale;
+extern fixed_t sprtopscreen;
+extern fixed_t sprbotscreen;
+
+extern fixed_t pspritescale, pspriteiscale;
+
+
+void R_DrawMaskedColumn (column_t *column, signed int baseclip);
+
+
+void R_SortVisSprites (void);
+
+void R_AddSprites (sector_t *sec);
+void R_AddPSprites (void);
+void R_DrawSprites (void);
+void R_InitSprites (char **namelist);
+void R_ClearSprites (void);
+void R_DrawMasked (void);
+void R_ClipVisSprite (vissprite_t *vis, int xl, int xh);
+
+//=============================================================================
+//
+// R_draw.c
+//
+//=============================================================================
+
+extern lighttable_t *dc_colormap;
+extern int dc_x;
+extern int dc_yl;
+extern int dc_yh;
+extern fixed_t dc_iscale;
+extern fixed_t dc_texturemid;
+extern byte *dc_source; // first pixel in a column
+
+void R_DrawColumn (void);
+void R_DrawColumnLow (void);
+void R_DrawFuzzColumn (void);
+void R_DrawFuzzColumnLow (void);
+void R_DrawTranslatedColumn (void);
+void R_DrawTranslatedFuzzColumn (void);
+void R_DrawTranslatedColumnLow (void);
+
+extern int ds_y;
+extern int ds_x1;
+extern int ds_x2;
+extern lighttable_t *ds_colormap;
+extern fixed_t ds_xfrac;
+extern fixed_t ds_yfrac;
+extern fixed_t ds_xstep;
+extern fixed_t ds_ystep;
+extern byte *ds_source; // start of a 64*64 tile image
+
+extern byte *translationtables;
+extern byte *dc_translation;
+
+void R_DrawSpan (void);
+void R_DrawSpanLow (void);
+
+void R_InitBuffer (int width, int height);
+void R_InitTranslationTables (void);
+
+#endif // __R_LOCAL__
+