2014-03-15 16:59:03 +00:00
|
|
|
// SONIC ROBO BLAST 2
|
|
|
|
//-----------------------------------------------------------------------------
|
|
|
|
// Copyright (C) 1993-1996 by id Software, Inc.
|
|
|
|
// Copyright (C) 1998-2000 by DooM Legacy Team.
|
2021-04-27 22:01:09 +00:00
|
|
|
// Copyright (C) 1999-2021 by Sonic Team Junior.
|
2014-03-15 16:59:03 +00:00
|
|
|
//
|
|
|
|
// 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"
|
2020-01-07 15:35:10 +00:00
|
|
|
#include "r_textures.h"
|
2014-03-15 16:59:03 +00:00
|
|
|
#include "p_polyobj.h"
|
|
|
|
|
2020-10-17 11:35:28 +00:00
|
|
|
#define VISPLANEHASHBITS 9
|
|
|
|
#define VISPLANEHASHMASK ((1<<VISPLANEHASHBITS)-1)
|
|
|
|
// the last visplane list is outside of the hash table and is used for fof planes
|
|
|
|
#define MAXVISPLANES ((1<<VISPLANEHASHBITS)+1)
|
2019-06-07 11:10:12 +00:00
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
//
|
|
|
|
// Now what is a visplane, anyway?
|
|
|
|
// Simple: kinda floor/ceiling polygon optimised for SRB2 rendering.
|
|
|
|
//
|
|
|
|
typedef struct visplane_s
|
|
|
|
{
|
|
|
|
struct visplane_s *next;
|
|
|
|
|
2016-04-04 19:49:01 +00:00
|
|
|
fixed_t height;
|
|
|
|
fixed_t viewx, viewy, viewz;
|
2014-03-15 16:59:03 +00:00
|
|
|
angle_t viewangle;
|
|
|
|
angle_t plangle;
|
|
|
|
INT32 picnum;
|
|
|
|
INT32 lightlevel;
|
|
|
|
INT32 minx, maxx;
|
|
|
|
|
|
|
|
// colormaps per sector
|
|
|
|
extracolormap_t *extra_colormap;
|
|
|
|
|
2018-12-14 18:49:32 +00:00
|
|
|
// leave pads for [minx-1]/[maxx+1]
|
|
|
|
UINT16 padtopstart, top[MAXVIDWIDTH], padtopend;
|
|
|
|
UINT16 padbottomstart, bottom[MAXVIDWIDTH], padbottomend;
|
2014-03-15 16:59:03 +00:00
|
|
|
INT32 high, low; // R_PlaneBounds should set these.
|
|
|
|
|
|
|
|
fixed_t xoffs, yoffs; // Scrolling flats.
|
|
|
|
|
|
|
|
struct ffloor_s *ffloor;
|
2014-11-12 00:55:07 +00:00
|
|
|
polyobj_t *polyobj;
|
2015-04-20 07:10:14 +00:00
|
|
|
pslope_t *slope;
|
2014-03-15 16:59:03 +00:00
|
|
|
} visplane_t;
|
|
|
|
|
2019-06-07 11:10:12 +00:00
|
|
|
extern visplane_t *visplanes[MAXVISPLANES];
|
2014-03-15 16:59:03 +00:00
|
|
|
extern visplane_t *floorplane;
|
|
|
|
extern visplane_t *ceilingplane;
|
|
|
|
|
|
|
|
// Visplane related.
|
|
|
|
extern INT16 *lastopening, *openings;
|
|
|
|
extern size_t maxopenings;
|
|
|
|
|
|
|
|
extern INT16 floorclip[MAXVIDWIDTH], ceilingclip[MAXVIDWIDTH];
|
2018-12-14 17:08:25 +00:00
|
|
|
extern fixed_t frontscale[MAXVIDWIDTH], yslopetab[MAXVIDHEIGHT*16];
|
2014-03-15 16:59:03 +00:00
|
|
|
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 fixed_t *yslope;
|
2018-12-14 17:08:25 +00:00
|
|
|
extern lighttable_t **planezlight;
|
2014-03-15 16:59:03 +00:00
|
|
|
|
2018-11-08 16:26:55 +00:00
|
|
|
void R_InitPlanes(void);
|
2014-03-15 16:59:03 +00:00
|
|
|
void R_ClearPlanes(void);
|
2019-06-09 20:48:54 +00:00
|
|
|
void R_ClearFFloorClips (void);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
|
|
|
void R_DrawPlanes(void);
|
|
|
|
visplane_t *R_FindPlane(fixed_t height, INT32 picnum, INT32 lightlevel, fixed_t xoff, fixed_t yoff, angle_t plangle,
|
2020-05-02 10:08:31 +00:00
|
|
|
extracolormap_t *planecolormap, ffloor_t *ffloor, polyobj_t *polyobj, pslope_t *slope);
|
2014-03-15 16:59:03 +00:00
|
|
|
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);
|
|
|
|
|
2019-05-21 18:24:26 +00:00
|
|
|
void R_CheckFlatLength(size_t size);
|
|
|
|
boolean R_CheckPowersOfTwo(void);
|
2014-03-15 16:59:03 +00:00
|
|
|
|
2020-10-14 01:42:07 +00:00
|
|
|
// Draws a single visplane.
|
|
|
|
void R_DrawSinglePlane(visplane_t *pl);
|
|
|
|
|
|
|
|
// Calculates the slope vectors needed for tilted span drawing.
|
2021-04-14 13:55:52 +00:00
|
|
|
void R_SetSlopePlane(pslope_t *slope, fixed_t xpos, fixed_t ypos, fixed_t zpos, fixed_t xoff, fixed_t yoff, angle_t angle, angle_t plangle);
|
2021-04-14 14:34:36 +00:00
|
|
|
void R_SetScaledSlopePlane(pslope_t *slope, fixed_t xpos, fixed_t ypos, fixed_t zpos, fixed_t xs, fixed_t ys, fixed_t xoff, fixed_t yoff, angle_t angle, angle_t plangle);
|
2021-04-14 13:55:52 +00:00
|
|
|
void R_CalculateSlopeVectors(void);
|
2020-10-14 01:42:07 +00:00
|
|
|
|
2020-11-23 15:53:59 +00:00
|
|
|
// Sets the slope vector pointers for the current tilted span.
|
|
|
|
void R_SetTiltedSpan(INT32 span);
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
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];
|
|
|
|
|
2015-05-17 03:32:12 +00:00
|
|
|
// For slope rendering; the height at the other end
|
|
|
|
fixed_t f_pos_slope;
|
|
|
|
fixed_t b_pos_slope;
|
|
|
|
|
|
|
|
struct pslope_s *slope;
|
|
|
|
|
2014-03-15 16:59:03 +00:00
|
|
|
struct ffloor_s *ffloor;
|
|
|
|
polyobj_t *polyobj;
|
2018-12-14 17:08:25 +00:00
|
|
|
} visffloor_t;
|
2014-03-15 16:59:03 +00:00
|
|
|
|
2018-12-14 17:08:25 +00:00
|
|
|
extern visffloor_t ffloor[MAXFFLOORS];
|
2014-03-15 16:59:03 +00:00
|
|
|
extern INT32 numffloors;
|
2019-06-01 19:26:25 +00:00
|
|
|
|
|
|
|
void Portal_AddSkyboxPortals (void);
|
2014-03-15 16:59:03 +00:00
|
|
|
#endif
|