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