r_defs.h
上传用户:xuyinpeng
上传日期:2021-05-12
资源大小:455k
文件大小:10k
源码类别:

射击游戏

开发平台:

Visual C++

  1. // Emacs style mode select   -*- C++ -*- 
  2. //-----------------------------------------------------------------------------
  3. //
  4. // $Id:$
  5. //
  6. // Copyright (C) 1993-1996 by id Software, Inc.
  7. //
  8. // This source is available for distribution and/or modification
  9. // only under the terms of the DOOM Source Code License as
  10. // published by id Software. All rights reserved.
  11. //
  12. // The source is distributed in the hope that it will be useful,
  13. // but WITHOUT ANY WARRANTY; without even the implied warranty of
  14. // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
  15. // for more details.
  16. //
  17. // DESCRIPTION:
  18. //      Refresh/rendering module, shared data struct definitions.
  19. //
  20. //-----------------------------------------------------------------------------
  21. #ifndef __R_DEFS__
  22. #define __R_DEFS__
  23. // Screenwidth.
  24. #include "doomdef.h"
  25. // Some more or less basic data types
  26. // we depend on.
  27. #include "m_fixed.h"
  28. // We rely on the thinker data struct
  29. // to handle sound origins in sectors.
  30. #include "d_think.h"
  31. // SECTORS do store MObjs anyway.
  32. #include "p_mobj.h"
  33. #ifdef __GNUG__
  34. #pragma interface
  35. #endif
  36. // Silhouette, needed for clipping Segs (mainly)
  37. // and sprites representing things.
  38. #define SIL_NONE 0
  39. #define SIL_BOTTOM 1
  40. #define SIL_TOP 2
  41. #define SIL_BOTH 3
  42. #define MAXDRAWSEGS 256
  43. //
  44. // INTERNAL MAP TYPES
  45. //  used by play and refresh
  46. //
  47. //
  48. // Your plain vanilla vertex.
  49. // Note: transformed values not buffered locally,
  50. //  like some DOOM-alikes ("wt", "WebView") did.
  51. //
  52. typedef struct
  53. {
  54.     fixed_t x;
  55.     fixed_t y;
  56.     
  57. } vertex_t;
  58. // Forward of LineDefs, for Sectors.
  59. struct line_s;
  60. // Each sector has a degenmobj_t in its center
  61. //  for sound origin purposes.
  62. // I suppose this does not handle sound from
  63. //  moving objects (doppler), because
  64. //  position is prolly just buffered, not
  65. //  updated.
  66. typedef struct
  67. {
  68.     thinker_t thinker; // not used for anything
  69.     fixed_t x;
  70.     fixed_t y;
  71.     fixed_t z;
  72. } degenmobj_t;
  73. //
  74. // The SECTORS record, at runtime.
  75. // Stores things/mobjs.
  76. //
  77. typedef struct
  78. {
  79.     fixed_t floorheight;
  80.     fixed_t ceilingheight;
  81.     short floorpic;
  82.     short ceilingpic;
  83.     short lightlevel;
  84.     short special;
  85.     short tag;
  86.     // 0 = untraversed, 1,2 = sndlines -1
  87.     int soundtraversed;
  88.     // thing that made a sound (or null)
  89.     mobj_t* soundtarget;
  90.     // mapblock bounding box for height changes
  91.     int blockbox[4];
  92.     // origin for any sounds played by the sector
  93.     degenmobj_t soundorg;
  94.     // if == validcount, already checked
  95.     int validcount;
  96.     // list of mobjs in sector
  97.     mobj_t* thinglist;
  98.     // thinker_t for reversable actions
  99.     void* specialdata;
  100.     int linecount;
  101.     struct line_s** lines; // [linecount] size
  102.     
  103. } sector_t;
  104. //
  105. // The SideDef.
  106. //
  107. typedef struct
  108. {
  109.     // add this to the calculated texture column
  110.     fixed_t textureoffset;
  111.     
  112.     // add this to the calculated texture top
  113.     fixed_t rowoffset;
  114.     // Texture indices.
  115.     // We do not maintain names here. 
  116.     short toptexture;
  117.     short bottomtexture;
  118.     short midtexture;
  119.     // Sector the SideDef is facing.
  120.     sector_t* sector;
  121.     
  122. } side_t;
  123. //
  124. // Move clipping aid for LineDefs.
  125. //
  126. typedef enum
  127. {
  128.     ST_HORIZONTAL,
  129.     ST_VERTICAL,
  130.     ST_POSITIVE,
  131.     ST_NEGATIVE
  132. } slopetype_t;
  133. typedef struct line_s
  134. {
  135.     // Vertices, from v1 to v2.
  136.     vertex_t* v1;
  137.     vertex_t* v2;
  138.     // Precalculated v2 - v1 for side checking.
  139.     fixed_t dx;
  140.     fixed_t dy;
  141.     // Animation related.
  142.     short flags;
  143.     short special;
  144.     short tag;
  145.     // Visual appearance: SideDefs.
  146.     //  sidenum[1] will be -1 if one sided
  147.     short sidenum[2];
  148.     // Neat. Another bounding box, for the extent
  149.     //  of the LineDef.
  150.     fixed_t bbox[4];
  151.     // To aid move clipping.
  152.     slopetype_t slopetype;
  153.     // Front and back sector.
  154.     // Note: redundant? Can be retrieved from SideDefs.
  155.     sector_t* frontsector;
  156.     sector_t* backsector;
  157.     // if == validcount, already checked
  158.     int validcount;
  159.     // thinker_t for reversable actions
  160.     void* specialdata;
  161. } line_t;
  162. //
  163. // A SubSector.
  164. // References a Sector.
  165. // Basically, this is a list of LineSegs,
  166. //  indicating the visible walls that define
  167. //  (all or some) sides of a convex BSP leaf.
  168. //
  169. typedef struct subsector_s
  170. {
  171.     sector_t* sector;
  172.     short numlines;
  173.     short firstline;
  174.     
  175. } subsector_t;
  176. //
  177. // The LineSeg.
  178. //
  179. typedef struct
  180. {
  181.     vertex_t* v1;
  182.     vertex_t* v2;
  183.     
  184.     fixed_t offset;
  185.     angle_t angle;
  186.     side_t* sidedef;
  187.     line_t* linedef;
  188.     // Sector references.
  189.     // Could be retrieved from linedef, too.
  190.     // backsector is NULL for one sided lines
  191.     sector_t* frontsector;
  192.     sector_t* backsector;
  193.     
  194. } seg_t;
  195. //
  196. // BSP node.
  197. //
  198. typedef struct
  199. {
  200.     // Partition line.
  201.     fixed_t x;
  202.     fixed_t y;
  203.     fixed_t dx;
  204.     fixed_t dy;
  205.     // Bounding box for each child.
  206.     fixed_t bbox[2][4];
  207.     // If NF_SUBSECTOR its a subsector.
  208.     unsigned short children[2];
  209.     
  210. } node_t;
  211. // posts are runs of non masked source pixels
  212. typedef struct
  213. {
  214.     byte topdelta; // -1 is the last post in a column
  215.     byte length;  // length data bytes follows
  216. } post_t;
  217. // column_t is a list of 0 or more post_t, (byte)-1 terminated
  218. typedef post_t column_t;
  219. // PC direct to screen pointers
  220. //B UNUSED - keep till detailshift in r_draw.c resolved
  221. //extern byte* destview;
  222. //extern byte* destscreen;
  223. //
  224. // OTHER TYPES
  225. //
  226. // This could be wider for >8 bit display.
  227. // Indeed, true color support is posibble
  228. //  precalculating 24bpp lightmap/colormap LUT.
  229. //  from darkening PLAYPAL to all black.
  230. // Could even us emore than 32 levels.
  231. typedef byte lighttable_t;
  232. //
  233. // ?
  234. //
  235. typedef struct drawseg_s
  236. {
  237.     seg_t* curline;
  238.     int x1;
  239.     int x2;
  240.     fixed_t scale1;
  241.     fixed_t scale2;
  242.     fixed_t scalestep;
  243.     // 0=none, 1=bottom, 2=top, 3=both
  244.     int silhouette;
  245.     // do not clip sprites above this
  246.     fixed_t bsilheight;
  247.     // do not clip sprites below this
  248.     fixed_t tsilheight;
  249.     
  250.     // Pointers to lists for sprite clipping,
  251.     //  all three adjusted so [x1] is first value.
  252.     short* sprtopclip;
  253.     short* sprbottomclip;
  254.     short* maskedtexturecol;
  255.     
  256. } drawseg_t;
  257. // Patches.
  258. // A patch holds one or more columns.
  259. // Patches are used for sprites and all masked pictures,
  260. // and we compose textures from the TEXTURE1/2 lists
  261. // of patches.
  262. typedef struct 
  263.     short width; // bounding box size 
  264.     short height; 
  265.     short leftoffset; // pixels to the left of origin 
  266.     short topoffset; // pixels below the origin 
  267.     int columnofs[8]; // only [width] used
  268.     // the [0] is &columnofs[width] 
  269. } patch_t;
  270. // A vissprite_t is a thing
  271. //  that will be drawn during a refresh.
  272. // I.e. a sprite object that is partly visible.
  273. typedef struct vissprite_s
  274. {
  275.     // Doubly linked list.
  276.     struct vissprite_s* prev;
  277.     struct vissprite_s* next;
  278.     
  279.     int x1;
  280.     int x2;
  281.     // for line side calculation
  282.     fixed_t gx;
  283.     fixed_t gy;
  284.     // global bottom / top for silhouette clipping
  285.     fixed_t gz;
  286.     fixed_t gzt;
  287.     // horizontal position of x1
  288.     fixed_t startfrac;
  289.     
  290.     fixed_t scale;
  291.     
  292.     // negative if flipped
  293.     fixed_t xiscale;
  294.     fixed_t texturemid;
  295.     int patch;
  296.     // for color translation and shadow draw,
  297.     //  maxbright frames as well
  298.     lighttable_t* colormap;
  299.    
  300.     int mobjflags;
  301.     
  302. } vissprite_t;
  303. //
  304. // Sprites are patches with a special naming convention
  305. //  so they can be recognized by R_InitSprites.
  306. // The base name is NNNNFx or NNNNFxFx, with
  307. //  x indicating the rotation, x = 0, 1-7.
  308. // The sprite and frame specified by a thing_t
  309. //  is range checked at run time.
  310. // A sprite is a patch_t that is assumed to represent
  311. //  a three dimensional object and may have multiple
  312. //  rotations pre drawn.
  313. // Horizontal flipping is used to save space,
  314. //  thus NNNNF2F5 defines a mirrored patch.
  315. // Some sprites will only have one picture used
  316. // for all views: NNNNF0
  317. //
  318. typedef struct
  319. {
  320.     // If false use 0 for any position.
  321.     // Note: as eight entries are available,
  322.     //  we might as well insert the same name eight times.
  323.     boolean rotate;
  324.     // Lump to use for view angles 0-7.
  325.     short lump[8];
  326.     // Flip bit (1 = flip) to use for view angles 0-7.
  327.     byte flip[8];
  328.     
  329. } spriteframe_t;
  330. //
  331. // A sprite definition:
  332. //  a number of animation frames.
  333. //
  334. typedef struct
  335. {
  336.     int numframes;
  337.     spriteframe_t* spriteframes;
  338. } spritedef_t;
  339. //
  340. // Now what is a visplane, anyway?
  341. // 
  342. typedef struct
  343. {
  344.   fixed_t height;
  345.   int picnum;
  346.   int lightlevel;
  347.   int minx;
  348.   int maxx;
  349.   unsigned short        *topbase;
  350.   unsigned short        *top;
  351.   unsigned short        *bottombase;
  352.   unsigned short        *bottom;
  353. /*
  354.   unsigned short         pad1;
  355.   unsigned short         top[SCREENWIDTH];
  356.   unsigned short         pad2;
  357.   unsigned short         pad3;
  358.   unsigned short         bottom[SCREENWIDTH];
  359.   unsigned short         pad4;
  360. */
  361.   // leave pads for [minx-1]/[maxx+1]
  362. /*  
  363.   byte pad1;
  364.   // Here lies the rub for all
  365.   //  dynamic resize/change of resolution.
  366.   byte top[SCREENWIDTH];
  367.   byte pad2;
  368.   byte pad3;
  369.   // See above.
  370.   byte bottom[SCREENWIDTH];
  371.   byte pad4;
  372. */
  373. } visplane_t;
  374. #endif
  375. //-----------------------------------------------------------------------------
  376. //
  377. // $Log:$
  378. //
  379. //-----------------------------------------------------------------------------