|
|
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: //-----------------------------------------------------------------------------
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.