123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491 |
- // Emacs style mode select -*- C++ -*-
- //-----------------------------------------------------------------------------
- //
- // $Id:$
- //
- // Copyright (C) 1993-1996 by id Software, Inc.
- //
- // This source is available for distribution and/or modification
- // only under the terms of the DOOM Source Code License as
- // published by id Software. All rights reserved.
- //
- // The source is distributed in the hope that it will be useful,
- // but WITHOUT ANY WARRANTY; without even the implied warranty of
- // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
- // for more details.
- //
- // DESCRIPTION:
- // Refresh/rendering module, shared data struct definitions.
- //
- //-----------------------------------------------------------------------------
- #ifndef __R_DEFS__
- #define __R_DEFS__
- // Screenwidth.
- #include "doomdef.h"
- // Some more or less basic data types
- // we depend on.
- #include "m_fixed.h"
- // We rely on the thinker data struct
- // to handle sound origins in sectors.
- #include "d_think.h"
- // SECTORS do store MObjs anyway.
- #include "p_mobj.h"
- #ifdef __GNUG__
- #pragma interface
- #endif
- // Silhouette, needed for clipping Segs (mainly)
- // and sprites representing things.
- #define SIL_NONE 0
- #define SIL_BOTTOM 1
- #define SIL_TOP 2
- #define SIL_BOTH 3
- #define MAXDRAWSEGS 256
- //
- // INTERNAL MAP TYPES
- // used by play and refresh
- //
- //
- // Your plain vanilla vertex.
- // Note: transformed values not buffered locally,
- // like some DOOM-alikes ("wt", "WebView") did.
- //
- typedef struct
- {
- fixed_t x;
- fixed_t y;
-
- } vertex_t;
- // Forward of LineDefs, for Sectors.
- struct line_s;
- // Each sector has a degenmobj_t in its center
- // for sound origin purposes.
- // I suppose this does not handle sound from
- // moving objects (doppler), because
- // position is prolly just buffered, not
- // updated.
- typedef struct
- {
- thinker_t thinker; // not used for anything
- fixed_t x;
- fixed_t y;
- fixed_t z;
- } degenmobj_t;
- //
- // The SECTORS record, at runtime.
- // Stores things/mobjs.
- //
- typedef struct
- {
- fixed_t floorheight;
- fixed_t ceilingheight;
- short floorpic;
- short ceilingpic;
- short lightlevel;
- short special;
- short tag;
- // 0 = untraversed, 1,2 = sndlines -1
- int soundtraversed;
- // thing that made a sound (or null)
- mobj_t* soundtarget;
- // mapblock bounding box for height changes
- int blockbox[4];
- // origin for any sounds played by the sector
- degenmobj_t soundorg;
- // if == validcount, already checked
- int validcount;
- // list of mobjs in sector
- mobj_t* thinglist;
- // thinker_t for reversable actions
- void* specialdata;
- int linecount;
- struct line_s** lines; // [linecount] size
-
- } sector_t;
- //
- // The SideDef.
- //
- typedef struct
- {
- // add this to the calculated texture column
- fixed_t textureoffset;
-
- // add this to the calculated texture top
- fixed_t rowoffset;
- // Texture indices.
- // We do not maintain names here.
- short toptexture;
- short bottomtexture;
- short midtexture;
- // Sector the SideDef is facing.
- sector_t* sector;
-
- } side_t;
- //
- // Move clipping aid for LineDefs.
- //
- typedef enum
- {
- ST_HORIZONTAL,
- ST_VERTICAL,
- ST_POSITIVE,
- ST_NEGATIVE
- } slopetype_t;
- typedef struct line_s
- {
- // Vertices, from v1 to v2.
- vertex_t* v1;
- vertex_t* v2;
- // Precalculated v2 - v1 for side checking.
- fixed_t dx;
- fixed_t dy;
- // Animation related.
- short flags;
- short special;
- short tag;
- // Visual appearance: SideDefs.
- // sidenum[1] will be -1 if one sided
- short sidenum[2];
- // Neat. Another bounding box, for the extent
- // of the LineDef.
- fixed_t bbox[4];
- // To aid move clipping.
- slopetype_t slopetype;
- // Front and back sector.
- // Note: redundant? Can be retrieved from SideDefs.
- sector_t* frontsector;
- sector_t* backsector;
- // if == validcount, already checked
- int validcount;
- // thinker_t for reversable actions
- void* specialdata;
- } line_t;
- //
- // A SubSector.
- // References a Sector.
- // Basically, this is a list of LineSegs,
- // indicating the visible walls that define
- // (all or some) sides of a convex BSP leaf.
- //
- typedef struct subsector_s
- {
- sector_t* sector;
- short numlines;
- short firstline;
-
- } subsector_t;
- //
- // The LineSeg.
- //
- typedef struct
- {
- vertex_t* v1;
- vertex_t* v2;
-
- fixed_t offset;
- angle_t angle;
- side_t* sidedef;
- line_t* linedef;
- // Sector references.
- // Could be retrieved from linedef, too.
- // backsector is NULL for one sided lines
- sector_t* frontsector;
- sector_t* backsector;
-
- } seg_t;
- //
- // BSP node.
- //
- typedef struct
- {
- // Partition line.
- fixed_t x;
- fixed_t y;
- fixed_t dx;
- fixed_t dy;
- // Bounding box for each child.
- fixed_t bbox[2][4];
- // If NF_SUBSECTOR its a subsector.
- unsigned short children[2];
-
- } node_t;
- // posts are runs of non masked source pixels
- typedef struct
- {
- byte topdelta; // -1 is the last post in a column
- byte length; // length data bytes follows
- } post_t;
- // column_t is a list of 0 or more post_t, (byte)-1 terminated
- typedef post_t column_t;
- // PC direct to screen pointers
- //B UNUSED - keep till detailshift in r_draw.c resolved
- //extern byte* destview;
- //extern byte* destscreen;
- //
- // OTHER TYPES
- //
- // This could be wider for >8 bit display.
- // Indeed, true color support is posibble
- // precalculating 24bpp lightmap/colormap LUT.
- // from darkening PLAYPAL to all black.
- // Could even us emore than 32 levels.
- typedef byte lighttable_t;
- //
- // ?
- //
- typedef struct drawseg_s
- {
- seg_t* curline;
- int x1;
- int x2;
- fixed_t scale1;
- fixed_t scale2;
- fixed_t scalestep;
- // 0=none, 1=bottom, 2=top, 3=both
- int silhouette;
- // do not clip sprites above this
- fixed_t bsilheight;
- // do not clip sprites below this
- fixed_t tsilheight;
-
- // Pointers to lists for sprite clipping,
- // all three adjusted so [x1] is first value.
- short* sprtopclip;
- short* sprbottomclip;
- short* maskedtexturecol;
-
- } drawseg_t;
- // Patches.
- // A patch holds one or more columns.
- // Patches are used for sprites and all masked pictures,
- // and we compose textures from the TEXTURE1/2 lists
- // of patches.
- typedef struct
- {
- short width; // bounding box size
- short height;
- short leftoffset; // pixels to the left of origin
- short topoffset; // pixels below the origin
- int columnofs[8]; // only [width] used
- // the [0] is &columnofs[width]
- } patch_t;
- // A vissprite_t is a thing
- // that will be drawn during a refresh.
- // I.e. a sprite object that is partly visible.
- typedef struct vissprite_s
- {
- // Doubly linked list.
- struct vissprite_s* prev;
- struct vissprite_s* next;
-
- int x1;
- int x2;
- // for line side calculation
- fixed_t gx;
- fixed_t gy;
- // global bottom / top for silhouette clipping
- fixed_t gz;
- fixed_t gzt;
- // horizontal position of x1
- fixed_t startfrac;
-
- fixed_t scale;
-
- // negative if flipped
- fixed_t xiscale;
- fixed_t texturemid;
- int patch;
- // for color translation and shadow draw,
- // maxbright frames as well
- lighttable_t* colormap;
-
- int mobjflags;
-
- } vissprite_t;
- //
- // Sprites are patches with a special naming convention
- // so they can be recognized by R_InitSprites.
- // The base name is NNNNFx or NNNNFxFx, with
- // x indicating the rotation, x = 0, 1-7.
- // 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,
- // thus NNNNF2F5 defines a mirrored patch.
- // Some sprites will only have one picture used
- // for all views: NNNNF0
- //
- typedef struct
- {
- // If false use 0 for any position.
- // Note: as eight entries are available,
- // we might as well insert the same name eight times.
- boolean rotate;
- // Lump to use for view angles 0-7.
- short lump[8];
- // Flip bit (1 = flip) to use for view angles 0-7.
- byte flip[8];
-
- } spriteframe_t;
- //
- // A sprite definition:
- // a number of animation frames.
- //
- typedef struct
- {
- int numframes;
- spriteframe_t* spriteframes;
- } spritedef_t;
- //
- // Now what is a visplane, anyway?
- //
- typedef struct
- {
- fixed_t height;
- int picnum;
- int lightlevel;
- int minx;
- int maxx;
-
- // leave pads for [minx-1]/[maxx+1]
-
- byte pad1;
- // Here lies the rub for all
- // dynamic resize/change of resolution.
- byte top[SCREENWIDTH];
- byte pad2;
- byte pad3;
- // See above.
- byte bottom[SCREENWIDTH];
- byte pad4;
- } visplane_t;
- #endif
- //-----------------------------------------------------------------------------
- //
- // $Log:$
- //
- //-----------------------------------------------------------------------------
|