mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-15 01:01:33 +00:00
Merge branch 'next' (early part) into toast_slopes
This commit is contained in:
commit
8e98c78456
4 changed files with 70 additions and 15 deletions
|
@ -2028,12 +2028,14 @@ static void P_AdjustMobjFloorZ_FFloors(mobj_t *mo, sector_t *sector, UINT8 motyp
|
|||
delta1 = mo->z - (bottomheight + ((topheight - bottomheight)/2));
|
||||
delta2 = thingtop - (bottomheight + ((topheight - bottomheight)/2));
|
||||
if (topheight > mo->floorz && abs(delta1) < abs(delta2)
|
||||
&& !(rover->flags & FF_REVERSEPLATFORM))
|
||||
&& !(rover->flags & FF_REVERSEPLATFORM)
|
||||
&& ((P_MobjFlip(mo)*mo->momz > 0) || (!(rover->flags & FF_PLATFORM)))) // In reverse gravity, only clip for FOFs that are intangible from their bottom (the "top" you're falling through) if you're coming from above ("below" in your frame of reference)
|
||||
{
|
||||
mo->floorz = topheight;
|
||||
}
|
||||
if (bottomheight < mo->ceilingz && abs(delta1) >= abs(delta2)
|
||||
&& !(rover->flags & FF_PLATFORM))
|
||||
&& !(rover->flags & FF_PLATFORM)
|
||||
&& ((P_MobjFlip(mo)*mo->momz > 0) || (!(rover->flags & FF_REVERSEPLATFORM)))) // In normal gravity, only clip for FOFs that are intangible from the top if you're coming from below
|
||||
{
|
||||
mo->ceilingz = bottomheight;
|
||||
}
|
||||
|
|
|
@ -1931,10 +1931,18 @@ static void P_GroupLines(void)
|
|||
// allocate linebuffers for each sector
|
||||
for (i = 0, sector = sectors; i < numsectors; i++, sector++)
|
||||
{
|
||||
sector->lines = Z_Calloc(sector->linecount * sizeof(line_t*), PU_LEVEL, NULL);
|
||||
if (sector->linecount == 0) // no lines found?
|
||||
{
|
||||
sector->lines = NULL;
|
||||
CONS_Debug(DBG_SETUP, "P_GroupLines: sector %d has no lines\n", i);
|
||||
}
|
||||
else
|
||||
{
|
||||
sector->lines = Z_Calloc(sector->linecount * sizeof(line_t*), PU_LEVEL, NULL);
|
||||
|
||||
// zero the count, since we'll later use this to track how many we've recorded
|
||||
sector->linecount = 0;
|
||||
// zero the count, since we'll later use this to track how many we've recorded
|
||||
sector->linecount = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// iterate through lines, assigning them to sectors' linebuffers,
|
||||
|
@ -1952,11 +1960,14 @@ static void P_GroupLines(void)
|
|||
{
|
||||
M_ClearBox(bbox);
|
||||
|
||||
for (j = 0; j < sector->linecount; j++)
|
||||
if (sector->linecount != 0)
|
||||
{
|
||||
li = sector->lines[j];
|
||||
M_AddToBox(bbox, li->v1->x, li->v1->y);
|
||||
M_AddToBox(bbox, li->v2->x, li->v2->y);
|
||||
for (j = 0; j < sector->linecount; j++)
|
||||
{
|
||||
li = sector->lines[j];
|
||||
M_AddToBox(bbox, li->v1->x, li->v1->y);
|
||||
M_AddToBox(bbox, li->v2->x, li->v2->y);
|
||||
}
|
||||
}
|
||||
|
||||
// set the degenmobj_t to the middle of the bounding box
|
||||
|
@ -1966,6 +1977,35 @@ static void P_GroupLines(void)
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
// P_LoadReject
|
||||
//
|
||||
// Detect if the REJECT lump is valid,
|
||||
// if not, rejectmatrix will be NULL
|
||||
static void P_LoadReject(lumpnum_t lumpnum)
|
||||
{
|
||||
size_t count;
|
||||
const char *lumpname = W_CheckNameForNum(lumpnum);
|
||||
|
||||
// Check if the lump exists, and if it's named "REJECT"
|
||||
if (!lumpname || memcmp(lumpname, "REJECT\0\0", 8) != 0)
|
||||
{
|
||||
rejectmatrix = NULL;
|
||||
CONS_Debug(DBG_SETUP, "P_LoadReject: No valid REJECT lump found\n");
|
||||
return;
|
||||
}
|
||||
|
||||
count = W_LumpLength(lumpnum);
|
||||
|
||||
if (!count) // zero length, someone probably used ZDBSP
|
||||
{
|
||||
rejectmatrix = NULL;
|
||||
CONS_Debug(DBG_SETUP, "P_LoadReject: REJECT lump has size 0, will not be loaded\n");
|
||||
}
|
||||
else
|
||||
rejectmatrix = W_CacheLumpNum(lumpnum, PU_LEVEL);
|
||||
}
|
||||
|
||||
#if 0
|
||||
static char *levellumps[] =
|
||||
{
|
||||
|
@ -2574,7 +2614,7 @@ boolean P_SetupLevel(boolean skipprecip)
|
|||
P_LoadSubsectors(lastloadedmaplumpnum + ML_SSECTORS);
|
||||
P_LoadNodes(lastloadedmaplumpnum + ML_NODES);
|
||||
P_LoadSegs(lastloadedmaplumpnum + ML_SEGS);
|
||||
rejectmatrix = W_CacheLumpNum(lastloadedmaplumpnum + ML_REJECT, PU_LEVEL);
|
||||
P_LoadReject(lastloadedmaplumpnum + ML_REJECT);
|
||||
P_GroupLines();
|
||||
|
||||
numdmstarts = numredctfstarts = numbluectfstarts = 0;
|
||||
|
|
|
@ -325,9 +325,12 @@ boolean P_CheckSight(mobj_t *t1, mobj_t *t2)
|
|||
s2 = t2->subsector->sector;
|
||||
pnum = (s1-sectors)*numsectors + (s2-sectors);
|
||||
|
||||
// Check in REJECT table.
|
||||
if (rejectmatrix[pnum>>3] & (1 << (pnum&7))) // can't possibly be connected
|
||||
return false;
|
||||
if (rejectmatrix != NULL)
|
||||
{
|
||||
// Check in REJECT table.
|
||||
if (rejectmatrix[pnum>>3] & (1 << (pnum&7))) // can't possibly be connected
|
||||
return false;
|
||||
}
|
||||
|
||||
// killough 11/98: shortcut for melee situations
|
||||
// same subsector? obviously visible
|
||||
|
|
14
src/r_segs.c
14
src/r_segs.c
|
@ -1883,12 +1883,13 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
|||
// a single sided line is terminal, so it must mark ends
|
||||
markfloor = markceiling = true;
|
||||
#ifdef ESLOPE
|
||||
if (!(linedef->flags & ML_EFFECT1)) {
|
||||
if (linedef->flags & ML_EFFECT2) {
|
||||
if (linedef->flags & ML_DONTPEGBOTTOM)
|
||||
rw_midtexturemid = frontsector->floorheight + textureheight[sidedef->midtexture] - viewz;
|
||||
else
|
||||
rw_midtexturemid = frontsector->ceilingheight;
|
||||
rw_midtexturemid = frontsector->ceilingheight - viewz;
|
||||
}
|
||||
else
|
||||
#endif
|
||||
if (linedef->flags & ML_DONTPEGBOTTOM)
|
||||
{
|
||||
|
@ -2507,6 +2508,15 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
|||
#ifdef ESLOPE
|
||||
maskedtextureheight = ds_p->maskedtextureheight; // note to red, this == &(ds_p->maskedtextureheight[0])
|
||||
|
||||
#ifdef POLYOBJECTS
|
||||
if (curline->polyseg) { // use REAL front and back floors please, so midtexture rendering isn't mucked up
|
||||
rw_midtextureslide = rw_midtexturebackslide = 0;
|
||||
if (!!(linedef->flags & ML_DONTPEGBOTTOM) ^ !!(linedef->flags & ML_EFFECT3))
|
||||
rw_midtexturemid = rw_midtextureback = max(curline->frontsector->floorheight, curline->backsector->floorheight) - viewz;
|
||||
else
|
||||
rw_midtexturemid = rw_midtextureback = min(curline->frontsector->ceilingheight, curline->backsector->ceilingheight) - viewz;
|
||||
} else
|
||||
#endif
|
||||
// Set midtexture starting height
|
||||
if (linedef->flags & ML_EFFECT2) { // Ignore slopes when texturing
|
||||
rw_midtextureslide = rw_midtexturebackslide = 0;
|
||||
|
|
Loading…
Reference in a new issue