📄 r_defs.h
字号:
// Emacs style mode select -*- C++ -*- //-----------------------------------------------------------------------------//// $Id: r_defs.h,v 1.2 2003/09/08 22:34:31 jasonk Exp $//// 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 pixelstypedef 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 terminatedtypedef 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: r_defs.h,v $// Revision 1.2 2003/09/08 22:34:31 jasonk// Updated files because this fucker won't build for no fucking good reason.//// Revision 1.1.1.1 2003/09/04 21:08:13 jasonk// Initial import//// Revision 1.1 2000/12/08 21:07:54 jeffw// nxdoom initial entry -- No nxdoom/Makefile so it won't build automatically//////-----------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -