Annotation of doom/r_defs.h, revision 1.1.1.3

1.1       root        1: // Emacs style mode select   -*- C++ -*- 
                      2: //-----------------------------------------------------------------------------
                      3: //
                      4: // $Id:$
                      5: //
                      6: // Copyright (C) 1993-1996 by id Software, Inc.
                      7: //
1.1.1.3 ! root        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.
1.1       root       11: //
1.1.1.3 ! root       12: // The source is distributed in the hope that it will be useful,
1.1       root       13: // but WITHOUT ANY WARRANTY; without even the implied warranty of
1.1.1.3 ! root       14: // FITNESS FOR A PARTICULAR PURPOSE. See the DOOM Source Code License
        !            15: // for more details.
1.1       root       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;
1.1.1.3 ! root      467: 
        !           468:   unsigned short        *topbase;
        !           469:   unsigned short        *top;
        !           470:   unsigned short        *bottombase;
        !           471:   unsigned short        *bottom;
        !           472: /*
        !           473:   unsigned short         pad1;
        !           474:   unsigned short         top[SCREENWIDTH];
        !           475:   unsigned short         pad2;
        !           476:   unsigned short         pad3;
        !           477:   unsigned short         bottom[SCREENWIDTH];
        !           478:   unsigned short         pad4;
        !           479: */
1.1       root      480:   // leave pads for [minx-1]/[maxx+1]
1.1.1.3 ! root      481: /*  
1.1       root      482:   byte         pad1;
                    483:   // Here lies the rub for all
                    484:   //  dynamic resize/change of resolution.
                    485:   byte         top[SCREENWIDTH];
                    486:   byte         pad2;
                    487:   byte         pad3;
                    488:   // See above.
                    489:   byte         bottom[SCREENWIDTH];
                    490:   byte         pad4;
1.1.1.3 ! root      491: */
1.1       root      492: } visplane_t;
                    493: 
                    494: 
                    495: 
                    496: 
                    497: #endif
                    498: //-----------------------------------------------------------------------------
                    499: //
                    500: // $Log:$
                    501: //
                    502: //-----------------------------------------------------------------------------

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.