mirror of
				https://github.com/KartKrewDev/RingRacers.git
				synced 2025-10-30 08:01:28 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			141 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
	
		
			3.8 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
// SONIC ROBO BLAST 2
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
// Copyright (C) 1993-1996 by id Software, Inc.
 | 
						|
// Copyright (C) 1998-2000 by DooM Legacy Team.
 | 
						|
// Copyright (C) 1999-2016 by Sonic Team Junior.
 | 
						|
//
 | 
						|
// This program is free software distributed under the
 | 
						|
// terms of the GNU General Public License, version 2.
 | 
						|
// See the 'LICENSE' file for more details.
 | 
						|
//-----------------------------------------------------------------------------
 | 
						|
/// \file  r_plane.h
 | 
						|
/// \brief Refresh, visplane stuff (floor, ceilings)
 | 
						|
 | 
						|
#ifndef __R_PLANE__
 | 
						|
#define __R_PLANE__
 | 
						|
 | 
						|
#include "screen.h" // needs MAXVIDWIDTH/MAXVIDHEIGHT
 | 
						|
#include "r_data.h"
 | 
						|
#include "p_polyobj.h"
 | 
						|
 | 
						|
//
 | 
						|
// Now what is a visplane, anyway?
 | 
						|
// Simple: kinda floor/ceiling polygon optimised for SRB2 rendering.
 | 
						|
// 7764 bytes! (for win32, anyway)
 | 
						|
//
 | 
						|
typedef struct visplane_s
 | 
						|
{
 | 
						|
	struct visplane_s *next;
 | 
						|
 | 
						|
	fixed_t height;
 | 
						|
	fixed_t viewx, viewy, viewz;
 | 
						|
	angle_t viewangle;
 | 
						|
	angle_t plangle;
 | 
						|
	INT32 picnum;
 | 
						|
	INT32 lightlevel;
 | 
						|
	INT32 minx, maxx;
 | 
						|
 | 
						|
	// colormaps per sector
 | 
						|
	extracolormap_t *extra_colormap;
 | 
						|
 | 
						|
	// leave pads for [minx-1]/[maxx+1]
 | 
						|
 | 
						|
	// words sucks .. should get rid of that.. but eats memory
 | 
						|
	// THIS IS UNSIGNED! VERY IMPORTANT!!
 | 
						|
	UINT16 pad1;
 | 
						|
	UINT16 top[MAXVIDWIDTH];
 | 
						|
	UINT16 pad2;
 | 
						|
	UINT16 pad3;
 | 
						|
	UINT16 bottom[MAXVIDWIDTH];
 | 
						|
	UINT16 pad4;
 | 
						|
 | 
						|
	INT32 high, low; // R_PlaneBounds should set these.
 | 
						|
 | 
						|
	fixed_t xoffs, yoffs; // Scrolling flats.
 | 
						|
 | 
						|
	// SoM: frontscale should be stored in the first seg of the subsector
 | 
						|
	// where the planes themselves are stored. I'm doing this now because
 | 
						|
	// the old way caused trouble with the drawseg array was re-sized.
 | 
						|
	INT32 scaleseg;
 | 
						|
 | 
						|
	struct ffloor_s *ffloor;
 | 
						|
#ifdef POLYOBJECTS_PLANES
 | 
						|
	polyobj_t *polyobj;
 | 
						|
#endif
 | 
						|
#ifdef ESLOPE
 | 
						|
	pslope_t *slope;
 | 
						|
#endif
 | 
						|
} visplane_t;
 | 
						|
 | 
						|
extern visplane_t *floorplane;
 | 
						|
extern visplane_t *ceilingplane;
 | 
						|
 | 
						|
// Visplane related.
 | 
						|
extern INT16 *lastopening, *openings;
 | 
						|
extern size_t maxopenings;
 | 
						|
 | 
						|
extern INT16 floorclip[MAXVIDWIDTH], ceilingclip[MAXVIDWIDTH];
 | 
						|
extern fixed_t frontscale[MAXVIDWIDTH], yslopetab[MAXVIDHEIGHT*4];
 | 
						|
extern fixed_t cachedheight[MAXVIDHEIGHT];
 | 
						|
extern fixed_t cacheddistance[MAXVIDHEIGHT];
 | 
						|
extern fixed_t cachedxstep[MAXVIDHEIGHT];
 | 
						|
extern fixed_t cachedystep[MAXVIDHEIGHT];
 | 
						|
extern fixed_t basexscale, baseyscale;
 | 
						|
 | 
						|
extern lighttable_t **planezlight;
 | 
						|
 | 
						|
extern fixed_t *yslope;
 | 
						|
extern fixed_t distscale[MAXVIDWIDTH];
 | 
						|
 | 
						|
FUNCMATH void R_InitPlanes(void);
 | 
						|
void R_PortalStoreClipValues(INT32 start, INT32 end, INT16 *ceil, INT16 *floor, fixed_t *scale);
 | 
						|
void R_PortalRestoreClipValues(INT32 start, INT32 end, INT16 *ceil, INT16 *floor, fixed_t *scale);
 | 
						|
void R_ClearPlanes(void);
 | 
						|
 | 
						|
void R_MapPlane(INT32 y, INT32 x1, INT32 x2);
 | 
						|
void R_MakeSpans(INT32 x, INT32 t1, INT32 b1, INT32 t2, INT32 b2);
 | 
						|
void R_DrawPlanes(void);
 | 
						|
visplane_t *R_FindPlane(fixed_t height, INT32 picnum, INT32 lightlevel, fixed_t xoff, fixed_t yoff, angle_t plangle,
 | 
						|
	extracolormap_t *planecolormap, ffloor_t *ffloor
 | 
						|
#ifdef POLYOBJECTS_PLANES
 | 
						|
	, polyobj_t *polyobj
 | 
						|
#endif
 | 
						|
#ifdef ESLOPE
 | 
						|
	, pslope_t *slope
 | 
						|
#endif
 | 
						|
	);
 | 
						|
visplane_t *R_CheckPlane(visplane_t *pl, INT32 start, INT32 stop);
 | 
						|
void R_ExpandPlane(visplane_t *pl, INT32 start, INT32 stop);
 | 
						|
void R_PlaneBounds(visplane_t *plane);
 | 
						|
 | 
						|
// Draws a single visplane.
 | 
						|
void R_DrawSinglePlane(visplane_t *pl);
 | 
						|
 | 
						|
typedef struct planemgr_s
 | 
						|
{
 | 
						|
	visplane_t *plane;
 | 
						|
	fixed_t height;
 | 
						|
	fixed_t f_pos; // F for Front sector
 | 
						|
	fixed_t b_pos; // B for Back sector
 | 
						|
	fixed_t f_frac, f_step;
 | 
						|
	fixed_t b_frac, b_step;
 | 
						|
	INT16 f_clip[MAXVIDWIDTH];
 | 
						|
	INT16 c_clip[MAXVIDWIDTH];
 | 
						|
 | 
						|
#ifdef ESLOPE
 | 
						|
	// For slope rendering; the height at the other end
 | 
						|
	fixed_t f_pos_slope;
 | 
						|
	fixed_t b_pos_slope;
 | 
						|
 | 
						|
	struct pslope_s *slope;
 | 
						|
#endif
 | 
						|
 | 
						|
	struct ffloor_s *ffloor;
 | 
						|
#ifdef POLYOBJECTS_PLANES
 | 
						|
	polyobj_t *polyobj;
 | 
						|
#endif
 | 
						|
} planemgr_t;
 | 
						|
 | 
						|
extern planemgr_t ffloor[MAXFFLOORS];
 | 
						|
extern INT32 numffloors;
 | 
						|
#endif
 |