📄 r_defs.h
字号:
// Emacs style mode select -*- C++ -*-//-----------------------------------------------------------------------------//// $Id: r_defs.h,v 1.23 2001/04/30 17:19:24 stroggonmeth Exp $//// Copyright (C) 1993-1996 by id Software, Inc.// Portions Copyright (C) 1998-2000 by DooM Legacy Team.//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation; either version 2// of the License, or (at your option) any later version.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.////// $Log: r_defs.h,v $// Revision 1.23 2001/04/30 17:19:24 stroggonmeth// HW fix and misc. changes//// Revision 1.22 2001/03/30 17:12:51 bpereira// no message//// Revision 1.21 2001/03/21 18:24:39 stroggonmeth// Misc changes and fixes. Code cleanup//// Revision 1.20 2001/03/19 21:18:48 metzgermeister// * missing textures in HW mode are replaced by default texture// * fixed crash bug with P_SpawnMissile(.) returning NULL// * deep water trick and other nasty thing work now in HW mode (tested with tnt/map02 eternal/map02)// * added cvar gr_correcttricks//// Revision 1.19 2001/03/13 22:14:20 stroggonmeth// Long time no commit. 3D floors, FraggleScript, portals, ect.//// Revision 1.18 2001/02/28 17:50:55 bpereira// no message//// Revision 1.17 2001/01/25 22:15:44 bpereira// added heretic support//// Revision 1.16 2000/11/21 21:13:17 stroggonmeth// Optimised 3D floors and fixed crashing bug in high resolutions.//// Revision 1.15 2000/11/09 17:56:20 stroggonmeth// Hopefully fixed a few bugs and did a few optimizations.//// Revision 1.14 2000/11/02 17:50:09 stroggonmeth// Big 3Dfloors & FraggleScript commit!!//// Revision 1.13 2000/10/07 20:36:13 crashrl// Added deathmatch team-start-sectors via sector/line-tag and linedef-type 1000-1031//// Revision 1.12 2000/10/04 16:19:24 hurdler// Change all those "3dfx names" to more appropriate names//// Revision 1.11 2000/07/01 09:23:49 bpereira// no message//// Revision 1.10 2000/04/18 17:39:39 stroggonmeth// Bug fixes and performance tuning.//// Revision 1.9 2000/04/18 12:55:39 hurdler// join with Boris' code//// Revision 1.7 2000/04/15 22:12:58 stroggonmeth// Minor bug fixes//// Revision 1.6 2000/04/12 16:01:59 hurdler// ready for T&L code and true static lighting//// Revision 1.5 2000/04/11 19:07:25 stroggonmeth// Finished my logs, fixed a crashing bug.//// Revision 1.4 2000/04/06 20:47:08 hurdler// add Boris' changes for coronas in doom3.wad//// Revision 1.3 2000/04/04 00:32:47 stroggonmeth// Initial Boom compatability plus few misc changes all around.//// Revision 1.2 2000/02/27 00:42:10 hurdler// fix CR+LF problem//// Revision 1.1.1.1 2000/02/22 20:32:32 hurdler// Initial import into CVS (v1.29 pr3)////// DESCRIPTION:// Refresh/rendering module, shared data struct definitions.////-----------------------------------------------------------------------------#ifndef __R_DEFS__#define __R_DEFS__// 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"#include "screen.h" //added:26-01-98:MAXVIDWIDTH, MAXVIDHEIGHT// 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//faB: was upped to 512, but still people come with levels that break the// limits, so had to do an ugly re-alloc to get rid of the overflow.//#define MAXDRAWSEGS 256 // see r_segs.c for more// SoM: Moved this here...// 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;// SoM: ExtraColormap type. Use for extra_colormaps from now on.typedef struct{ unsigned short maskcolor; unsigned short fadecolor; double maskamt; unsigned short fadestart, fadeend; int fog; lighttable_t* colormap;} extracolormap_t;//// 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;//SoM: 3/23/2000: Store fake planes in a resizalbe array insted of just by//heightsec. Allows for multiple fake planes.typedef enum{ FF_EXISTS = 0x1, //MAKE SURE IT'S VALID FF_SOLID = 0x2, //Does it clip things? FF_RENDERSIDES = 0x4, //Render the sides? FF_RENDERPLANES = 0x8, //Render the floor/ceiling? FF_RENDERALL = 0xC, //Render everything? FF_SWIMMABLE = 0x10, //Can we swim? FF_NOSHADE = 0x20, //Does it mess with the lighting? FF_CUTSOLIDS = 0x40, //Does it cut out hidden solid pixles? FF_CUTEXTRA = 0x80, //Does it cut out hidden translucent pixles? FF_CUTLEVEL = 0xC0, //Does it cut out all hidden pixles? FF_CUTSPRITES = 0x100, //Final Step in 3D water FF_BOTHPLANES = 0x200, //Render both planes all the time? FF_EXTRA = 0x400, //Does it get cut by FF_CUTEXTRAS? FF_TRANSLUCENT = 0x800, //See through! FF_FOG = 0x1000, //Fog "brush"? FF_INVERTPLANES = 0x2000, //Reverse the plane visibility rules? FF_ALLSIDES = 0x4000, //Render inside and outside sides? FF_INVERTSIDES = 0x8000, //Only render inside sides? FF_DOUBLESHADOW = 0x10000,//Make two lightlist entries to reset light?} ffloortype_e;typedef struct ffloor_s{ fixed_t *topheight; short *toppic; short *toplightlevel; fixed_t *topxoffs; fixed_t *topyoffs; fixed_t *bottomheight; short *bottompic; short *bottomlightlevel; fixed_t *bottomxoffs; fixed_t *bottomyoffs; fixed_t delta; int secnum; ffloortype_e flags; struct line_s* master; struct sector_s* target; struct ffloor_s* next; struct ffloor_s* prev; int lastlight;} ffloor_t;// SoM: This struct holds information for shadows casted by 3D floors.// This information is contained inside the sector_t and is used as the base// information for casted shadows.typedef struct lightlist_s { fixed_t height; short lightlevel; extracolormap_t* extra_colormap; ffloor_t* caster; } lightlist_t;// SoM: This struct is used for rendering walls with shadows casted on them...typedef struct r_lightlist_s { fixed_t height; fixed_t heightstep; fixed_t botheight; fixed_t botheightstep; short lightlevel; extracolormap_t* extra_colormap; lighttable_t* rcolormap; int flags; } r_lightlist_t;////////////////////////////////////// PORTALS. Portals are controled// holes in a level that other parts// of levels are rendered into.// They can be used for sky boxes,// mirrors, teleporter "previews",// or even Quake 1 Style skies. :)////////////////////////////////////typedef struct{ fixed_t viewx; fixed_t viewy; fixed_t viewz; angle_t angle; fixed_t newx, newy; short topclip[MAXVIDWIDTH]; short botclip[MAXVIDWIDTH];} lvlportal_t;typedef enum{ PRTL_QUAKESKY, PRTL_SKYBOX, PRTL_MIRROR, PRTL_PORTAL,} portaltype_e;typedef struct portal_s{ portaltype_e type; union { struct visplane_s* plane; lvlportal_t* lvl; } target; fixed_t alphaheight; boolean render; // The "Masters" of this portal. struct sector_s* msector; struct line_s* mline; struct portal_s* parent; struct portal_s* child; struct portal_s* next; struct portal_s* prev; // Linked list for portals linked to a line. struct portal_s* line_next;} portal_t;// SoM: I must insist that this is the best way to accomplish cutting into// walls. The portal_t structure is made for storing clipping ranges and is// a generic portal structure. This is a special case struct for wall portals.typedef struct wallportal_s{ fixed_t *topheight; fixed_t *bottomheight; short *texnum; //Used as the texture below the portal; fixed_t top, bottom, topstep, bottomstep; // Used for rendering. portal_t* portal; int side; struct line_s* mline; struct wallportal_s* next; struct wallportal_s* prev;} wallportal_t;typedef enum { FLOOR_SOLID, FLOOR_WATER, FLOOR_LAVA, FLOOR_SLUDGE, FLOOR_ICE,} floortype_t;// ----- for special tricks with HW renderer -----//// For creating a chain with the lines around a sector//typedef struct linechain_s{ struct line_s *line; struct linechain_s *next;} linechain_t;// ----- end special tricks -----//// The SECTORS record, at runtime.// Stores things/mobjs.//typedef struct sector_s{ fixed_t floorheight; fixed_t ceilingheight; short floorpic; short ceilingpic; short lightlevel; short special; short oldspecial; //SoM: 3/6/2000: Remember if a sector was secret (for automap) short tag; int nexttag,firsttag; //SoM: 3/6/2000: by killough: improves searches for tags. // 0 = untraversed, 1,2 = sndlines -1 short soundtraversed; short floortype; // see floortype_t beffor // 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; //SoM: 3/6/2000: Start boom extra stuff // thinker_t for reversable actions void *floordata; // make thinkers on void *ceilingdata; // floors, ceilings, lighting, void *lightingdata; // independent of one another // lockout machinery for stairbuilding int stairlock; // -2 on first locked -1 after thinker done 0 normally int prevsec; // -1 or number of sector for previous step int nextsec; // -1 or number of next step sector // floor and ceiling texture offsets fixed_t floor_xoffs, floor_yoffs; fixed_t ceiling_xoffs, ceiling_yoffs; int heightsec; // other sector, or -1 if no other sector int altheightsec; // Use old boom model? 1 for no 0 for yes. int floorlightsec, ceilinglightsec; int teamstartsec; int bottommap, midmap, topmap; // dynamic colormaps // list of mobjs that are at least partially in the sector // thinglist is a subset of touching_thinglist struct msecnode_s *touching_thinglist; // phares 3/14/98 //SoM: 3/6/2000: end stuff... int linecount; struct line_s** lines; // [linecount] size //SoM: 2/23/2000: Improved fake floor hack ffloor_t* ffloors; int *attached; int numattached; lightlist_t* lightlist; int numlights; boolean moved; int validsort; //if == validsort allready been sorted boolean added; // SoM: 4/3/2000: per-sector colormaps! extracolormap_t* extra_colormap; // SoM: Skyboxes portal_t* ceilingportal; portal_t* floorportal; // ----- for special tricks with HW renderer -----
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -