mirror of
https://github.com/id-Software/DOOM-iOS.git
synced 2026-03-20 17:10:11 +01:00
Source release for DOOM Classic for iOS version 2.1
This commit is contained in:
441
code/prboom/.svn/text-base/r_defs.h.svn-base
Normal file
441
code/prboom/.svn/text-base/r_defs.h.svn-base
Normal file
@@ -0,0 +1,441 @@
|
||||
/* Emacs style mode select -*- C++ -*-
|
||||
*-----------------------------------------------------------------------------
|
||||
*
|
||||
*
|
||||
* PrBoom: a Doom port merged with LxDoom and LSDLDoom
|
||||
* based on BOOM, a modified and improved DOOM engine
|
||||
* Copyright (C) 1999 by
|
||||
* id Software, Chi Hoang, Lee Killough, Jim Flynn, Rand Phares, Ty Halderman
|
||||
* Copyright (C) 1999-2000 by
|
||||
* Jess Haas, Nicolas Kalkhof, Colin Phipps, Florian Schulze
|
||||
* Copyright 2005, 2006 by
|
||||
* Florian Schulze, Colin Phipps, Neil Stevens, Andrey Budko
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
* 02111-1307, USA.
|
||||
*
|
||||
* 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") do.
|
||||
//
|
||||
typedef struct
|
||||
{
|
||||
fixed_t x, y;
|
||||
} vertex_t;
|
||||
|
||||
// Each sector has a degenmobj_t in its center for sound origin purposes.
|
||||
typedef struct
|
||||
{
|
||||
thinker_t thinker; // not used for anything
|
||||
fixed_t x, y, z;
|
||||
} degenmobj_t;
|
||||
|
||||
//
|
||||
// The SECTORS record, at runtime.
|
||||
// Stores things/mobjs.
|
||||
//
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int iSectorID; // proff 04/05/2000: needed for OpenGL and used in debugmode by the HUD to draw sectornum
|
||||
boolean no_toptextures;
|
||||
boolean no_bottomtextures;
|
||||
fixed_t floorheight;
|
||||
fixed_t ceilingheight;
|
||||
int nexttag,firsttag; // killough 1/30/98: improves searches for tags.
|
||||
int soundtraversed; // 0 = untraversed, 1,2 = sndlines-1
|
||||
mobj_t *soundtarget; // thing that made a sound (or null)
|
||||
int blockbox[4]; // mapblock bounding box for height changes
|
||||
degenmobj_t soundorg; // origin for any sounds played by the sector
|
||||
int validcount; // if == validcount, already checked
|
||||
mobj_t *thinglist; // list of mobjs in sector
|
||||
|
||||
/* killough 8/28/98: friction is a sector property, not an mobj property.
|
||||
* these fields used to be in mobj_t, but presented performance problems
|
||||
* when processed as mobj properties. Fix is to make them sector properties.
|
||||
*/
|
||||
int friction,movefactor;
|
||||
|
||||
// thinker_t for reversable actions
|
||||
void *floordata; // jff 2/22/98 make thinkers on
|
||||
void *ceilingdata; // floors, ceilings, lighting,
|
||||
void *lightingdata; // independent of one another
|
||||
|
||||
// jff 2/26/98 lockout machinery for stairbuilding
|
||||
int stairlock; // -2 on first locked -1 after thinker done 0 normally
|
||||
int prevsec; // -1 or number of sector for previous step
|
||||
int nextsec; // -1 or number of next step sector
|
||||
|
||||
// killough 3/7/98: support flat heights drawn at another sector's heights
|
||||
int heightsec; // other sector, or -1 if no other sector
|
||||
|
||||
int bottommap, midmap, topmap; // killough 4/4/98: dynamic colormaps
|
||||
|
||||
// list of mobjs that are at least partially in the sector
|
||||
// thinglist is a subset of touching_thinglist
|
||||
struct msecnode_s *touching_thinglist; // phares 3/14/98
|
||||
|
||||
int linecount;
|
||||
struct line_s **lines;
|
||||
|
||||
// killough 10/98: support skies coming from sidedefs. Allows scrolling
|
||||
// skies and other effects. No "level info" kind of lump is needed,
|
||||
// because you can use an arbitrary number of skies per level with this
|
||||
// method. This field only applies when skyflatnum is used for floorpic
|
||||
// or ceilingpic, because the rest of Doom needs to know which is sky
|
||||
// and which isn't, etc.
|
||||
|
||||
int sky;
|
||||
|
||||
// killough 3/7/98: floor and ceiling texture offsets
|
||||
fixed_t floor_xoffs, floor_yoffs;
|
||||
fixed_t ceiling_xoffs, ceiling_yoffs;
|
||||
|
||||
// killough 4/11/98: support for lightlevels coming from another sector
|
||||
int floorlightsec, ceilinglightsec;
|
||||
|
||||
short floorpic;
|
||||
short ceilingpic;
|
||||
short lightlevel;
|
||||
short special;
|
||||
short oldspecial; //jff 2/16/98 remembers if sector WAS secret (automap)
|
||||
short tag;
|
||||
#ifdef IPHONE // JDC: high performance renderer
|
||||
// floors and ceiling have identical index count, but reference different verts
|
||||
int numIndexes;
|
||||
int numVerts;
|
||||
unsigned short *indexes[2]; // floor = 0, ceiling = 1
|
||||
struct drawVert_s *verts[2];
|
||||
#endif
|
||||
} sector_t;
|
||||
|
||||
//
|
||||
// The LineSeg. (JDC: moved above sidedef_t)
|
||||
//
|
||||
typedef struct side_s side_t; // JDC: forward definiteion
|
||||
typedef struct line_s line_t; // JDC: forward definiteion
|
||||
typedef struct
|
||||
{
|
||||
vertex_t *v1, *v2;
|
||||
fixed_t offset;
|
||||
angle_t angle;
|
||||
side_t* sidedef;
|
||||
line_t* linedef;
|
||||
|
||||
int iSegID; // proff 11/05/2000: needed for OpenGL
|
||||
// figgi -- needed for glnodes
|
||||
float length;
|
||||
boolean miniseg;
|
||||
|
||||
|
||||
// Sector references.
|
||||
// Could be retrieved from linedef, too
|
||||
// (but that would be slower -- killough)
|
||||
// backsector is NULL for one sided lines
|
||||
|
||||
sector_t *frontsector, *backsector;
|
||||
} seg_t;
|
||||
|
||||
|
||||
//
|
||||
// The SideDef.
|
||||
//
|
||||
|
||||
struct side_s // JDC: moved typedef for forward reference
|
||||
{
|
||||
fixed_t textureoffset; // add this to the calculated texture column
|
||||
fixed_t rowoffset; // add this to the calculated texture top
|
||||
short toptexture; // Texture indices. We do not maintain names here.
|
||||
short bottomtexture;
|
||||
short midtexture;
|
||||
sector_t* sector; // Sector the SideDef is facing.
|
||||
|
||||
// killough 4/4/98, 4/11/98: highest referencing special linedef's type,
|
||||
// or lump number of special effect. Allows texture names to be overloaded
|
||||
// for other functions.
|
||||
|
||||
int special;
|
||||
#ifdef IPHONE
|
||||
seg_t sideSeg; // This segment stretches the entire length of the line,
|
||||
// even if the line was broken into multiple seg_t by
|
||||
// the bsp.
|
||||
#endif
|
||||
};
|
||||
|
||||
//
|
||||
// Move clipping aid for LineDefs.
|
||||
//
|
||||
typedef enum
|
||||
{
|
||||
ST_HORIZONTAL,
|
||||
ST_VERTICAL,
|
||||
ST_POSITIVE,
|
||||
ST_NEGATIVE
|
||||
} slopetype_t;
|
||||
|
||||
struct line_s // JDC: moved typedef for forward reference
|
||||
{
|
||||
int iLineID; // proff 04/05/2000: needed for OpenGL
|
||||
vertex_t *v1, *v2; // Vertices, from v1 to v2.
|
||||
fixed_t dx, dy; // Precalculated v2 - v1 for side checking.
|
||||
unsigned short flags; // Animation related.
|
||||
short special;
|
||||
short tag;
|
||||
unsigned short sidenum[2]; // Visual appearance: SideDefs.
|
||||
fixed_t bbox[4]; // A bounding box, for the linedef's extent
|
||||
slopetype_t slopetype; // To aid move clipping.
|
||||
sector_t *frontsector; // Front and back sector.
|
||||
sector_t *backsector;
|
||||
int validcount; // if == validcount, already checked
|
||||
void *specialdata; // thinker_t for reversable actions
|
||||
int tranlump; // killough 4/11/98: translucency filter, -1 == none
|
||||
int firsttag,nexttag; // killough 4/17/98: improves searches for tags.
|
||||
int r_validcount; // cph: if == gametic, r_flags already done
|
||||
enum { // cph:
|
||||
RF_TOP_TILE = 1, // Upper texture needs tiling
|
||||
RF_MID_TILE = 2, // Mid texture needs tiling
|
||||
RF_BOT_TILE = 4, // Lower texture needs tiling
|
||||
RF_IGNORE = 8, // Renderer can skip this line
|
||||
RF_CLOSED =16, // Line blocks view
|
||||
} r_flags;
|
||||
degenmobj_t soundorg; // sound origin for switches/buttons
|
||||
};
|
||||
|
||||
|
||||
// phares 3/14/98
|
||||
//
|
||||
// Sector list node showing all sectors an object appears in.
|
||||
//
|
||||
// There are two threads that flow through these nodes. The first thread
|
||||
// starts at touching_thinglist in a sector_t and flows through the m_snext
|
||||
// links to find all mobjs that are entirely or partially in the sector.
|
||||
// The second thread starts at touching_sectorlist in an mobj_t and flows
|
||||
// through the m_tnext links to find all sectors a thing touches. This is
|
||||
// useful when applying friction or push effects to sectors. These effects
|
||||
// can be done as thinkers that act upon all objects touching their sectors.
|
||||
// As an mobj moves through the world, these nodes are created and
|
||||
// destroyed, with the links changed appropriately.
|
||||
//
|
||||
// For the links, NULL means top or end of list.
|
||||
|
||||
typedef struct msecnode_s
|
||||
{
|
||||
sector_t *m_sector; // a sector containing this object
|
||||
struct mobj_s *m_thing; // this object
|
||||
struct msecnode_s *m_tprev; // prev msecnode_t for this thing
|
||||
struct msecnode_s *m_tnext; // next msecnode_t for this thing
|
||||
struct msecnode_s *m_sprev; // prev msecnode_t for this sector
|
||||
struct msecnode_s *m_snext; // next msecnode_t for this sector
|
||||
boolean visited; // killough 4/4/98, 4/7/98: used in search algorithms
|
||||
} msecnode_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;
|
||||
unsigned short numlines, firstline;
|
||||
} subsector_t;
|
||||
|
||||
|
||||
//
|
||||
// BSP node.
|
||||
//
|
||||
typedef struct
|
||||
{
|
||||
fixed_t x, y, dx, dy; // Partition line.
|
||||
fixed_t bbox[2][4]; // Bounding box for each child.
|
||||
unsigned short children[2]; // If NF_SUBSECTOR its a subsector.
|
||||
} node_t;
|
||||
|
||||
//
|
||||
// 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 use even more than 32 levels.
|
||||
|
||||
typedef byte lighttable_t;
|
||||
|
||||
//
|
||||
// Masked 2s linedefs
|
||||
//
|
||||
|
||||
typedef struct drawseg_s
|
||||
{
|
||||
seg_t *curline;
|
||||
int x1, x2;
|
||||
fixed_t scale1, scale2, scalestep;
|
||||
int silhouette; // 0=none, 1=bottom, 2=top, 3=both
|
||||
fixed_t bsilheight; // do not clip sprites above this
|
||||
fixed_t tsilheight; // do not clip sprites below this
|
||||
|
||||
// Added for filtering (fractional texture u coord) support - POPE
|
||||
fixed_t rw_offset, rw_distance, rw_centerangle;
|
||||
|
||||
// Pointers to lists for sprite clipping,
|
||||
// all three adjusted so [x1] is first value.
|
||||
|
||||
int *sprtopclip, *sprbottomclip, *maskedtexturecol; // dropoff overflow
|
||||
} drawseg_t;
|
||||
|
||||
// proff: Added for OpenGL
|
||||
typedef struct
|
||||
{
|
||||
int width,height;
|
||||
int leftoffset,topoffset;
|
||||
int lumpnum;
|
||||
} patchnum_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
|
||||
{
|
||||
mobj_t *thing;
|
||||
boolean flip;
|
||||
int x1, x2;
|
||||
fixed_t gx, gy; // for line side calculation
|
||||
fixed_t gz, gzt; // global bottom / top for silhouette clipping
|
||||
fixed_t startfrac; // horizontal position of x1
|
||||
fixed_t scale;
|
||||
fixed_t xiscale; // negative if flipped
|
||||
fixed_t texturemid;
|
||||
int patch;
|
||||
uint_64_t mobjflags;
|
||||
|
||||
// for color translation and shadow draw, maxbright frames as well
|
||||
const lighttable_t *colormap;
|
||||
|
||||
// killough 3/27/98: height sector for underwater/fake ceiling support
|
||||
int heightsec;
|
||||
|
||||
boolean isplayersprite;
|
||||
} 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?
|
||||
//
|
||||
// Go to http://classicgaming.com/doom/editing/ to find out -- killough
|
||||
//
|
||||
|
||||
typedef struct visplane
|
||||
{
|
||||
struct visplane *next; // Next visplane in hash chain -- killough
|
||||
int picnum, lightlevel, minx, maxx;
|
||||
fixed_t height;
|
||||
fixed_t xoffs, yoffs; // killough 2/28/98: Support scrolling flats
|
||||
unsigned int pad1; // leave pads for [minx-1]/[maxx+1]
|
||||
unsigned int top[MAX_SCREENWIDTH];
|
||||
unsigned int pad2, pad3; // killough 2/8/98, 4/25/98
|
||||
unsigned int bottom[MAX_SCREENWIDTH];
|
||||
unsigned int pad4; // dropoff overflow
|
||||
} visplane_t;
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user