mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2025-02-26 05:42:09 +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));
|
delta1 = mo->z - (bottomheight + ((topheight - bottomheight)/2));
|
||||||
delta2 = thingtop - (bottomheight + ((topheight - bottomheight)/2));
|
delta2 = thingtop - (bottomheight + ((topheight - bottomheight)/2));
|
||||||
if (topheight > mo->floorz && abs(delta1) < abs(delta2)
|
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;
|
mo->floorz = topheight;
|
||||||
}
|
}
|
||||||
if (bottomheight < mo->ceilingz && abs(delta1) >= abs(delta2)
|
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;
|
mo->ceilingz = bottomheight;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1930,12 +1930,20 @@ static void P_GroupLines(void)
|
||||||
|
|
||||||
// allocate linebuffers for each sector
|
// allocate linebuffers for each sector
|
||||||
for (i = 0, sector = sectors; i < numsectors; i++, sector++)
|
for (i = 0, sector = sectors; i < numsectors; i++, sector++)
|
||||||
|
{
|
||||||
|
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);
|
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
|
// zero the count, since we'll later use this to track how many we've recorded
|
||||||
sector->linecount = 0;
|
sector->linecount = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// iterate through lines, assigning them to sectors' linebuffers,
|
// iterate through lines, assigning them to sectors' linebuffers,
|
||||||
// and recalculate the counts in the process
|
// and recalculate the counts in the process
|
||||||
|
@ -1952,12 +1960,15 @@ static void P_GroupLines(void)
|
||||||
{
|
{
|
||||||
M_ClearBox(bbox);
|
M_ClearBox(bbox);
|
||||||
|
|
||||||
|
if (sector->linecount != 0)
|
||||||
|
{
|
||||||
for (j = 0; j < sector->linecount; j++)
|
for (j = 0; j < sector->linecount; j++)
|
||||||
{
|
{
|
||||||
li = sector->lines[j];
|
li = sector->lines[j];
|
||||||
M_AddToBox(bbox, li->v1->x, li->v1->y);
|
M_AddToBox(bbox, li->v1->x, li->v1->y);
|
||||||
M_AddToBox(bbox, li->v2->x, li->v2->y);
|
M_AddToBox(bbox, li->v2->x, li->v2->y);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// set the degenmobj_t to the middle of the bounding box
|
// set the degenmobj_t to the middle of the bounding box
|
||||||
sector->soundorg.x = (((bbox[BOXRIGHT]>>FRACBITS) + (bbox[BOXLEFT]>>FRACBITS))/2)<<FRACBITS;
|
sector->soundorg.x = (((bbox[BOXRIGHT]>>FRACBITS) + (bbox[BOXLEFT]>>FRACBITS))/2)<<FRACBITS;
|
||||||
|
@ -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
|
#if 0
|
||||||
static char *levellumps[] =
|
static char *levellumps[] =
|
||||||
{
|
{
|
||||||
|
@ -2574,7 +2614,7 @@ boolean P_SetupLevel(boolean skipprecip)
|
||||||
P_LoadSubsectors(lastloadedmaplumpnum + ML_SSECTORS);
|
P_LoadSubsectors(lastloadedmaplumpnum + ML_SSECTORS);
|
||||||
P_LoadNodes(lastloadedmaplumpnum + ML_NODES);
|
P_LoadNodes(lastloadedmaplumpnum + ML_NODES);
|
||||||
P_LoadSegs(lastloadedmaplumpnum + ML_SEGS);
|
P_LoadSegs(lastloadedmaplumpnum + ML_SEGS);
|
||||||
rejectmatrix = W_CacheLumpNum(lastloadedmaplumpnum + ML_REJECT, PU_LEVEL);
|
P_LoadReject(lastloadedmaplumpnum + ML_REJECT);
|
||||||
P_GroupLines();
|
P_GroupLines();
|
||||||
|
|
||||||
numdmstarts = numredctfstarts = numbluectfstarts = 0;
|
numdmstarts = numredctfstarts = numbluectfstarts = 0;
|
||||||
|
|
|
@ -325,9 +325,12 @@ boolean P_CheckSight(mobj_t *t1, mobj_t *t2)
|
||||||
s2 = t2->subsector->sector;
|
s2 = t2->subsector->sector;
|
||||||
pnum = (s1-sectors)*numsectors + (s2-sectors);
|
pnum = (s1-sectors)*numsectors + (s2-sectors);
|
||||||
|
|
||||||
|
if (rejectmatrix != NULL)
|
||||||
|
{
|
||||||
// Check in REJECT table.
|
// Check in REJECT table.
|
||||||
if (rejectmatrix[pnum>>3] & (1 << (pnum&7))) // can't possibly be connected
|
if (rejectmatrix[pnum>>3] & (1 << (pnum&7))) // can't possibly be connected
|
||||||
return false;
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// killough 11/98: shortcut for melee situations
|
// killough 11/98: shortcut for melee situations
|
||||||
// same subsector? obviously visible
|
// 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
|
// a single sided line is terminal, so it must mark ends
|
||||||
markfloor = markceiling = true;
|
markfloor = markceiling = true;
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
if (!(linedef->flags & ML_EFFECT1)) {
|
if (linedef->flags & ML_EFFECT2) {
|
||||||
if (linedef->flags & ML_DONTPEGBOTTOM)
|
if (linedef->flags & ML_DONTPEGBOTTOM)
|
||||||
rw_midtexturemid = frontsector->floorheight + textureheight[sidedef->midtexture] - viewz;
|
rw_midtexturemid = frontsector->floorheight + textureheight[sidedef->midtexture] - viewz;
|
||||||
else
|
else
|
||||||
rw_midtexturemid = frontsector->ceilingheight;
|
rw_midtexturemid = frontsector->ceilingheight - viewz;
|
||||||
}
|
}
|
||||||
|
else
|
||||||
#endif
|
#endif
|
||||||
if (linedef->flags & ML_DONTPEGBOTTOM)
|
if (linedef->flags & ML_DONTPEGBOTTOM)
|
||||||
{
|
{
|
||||||
|
@ -2507,6 +2508,15 @@ void R_StoreWallRange(INT32 start, INT32 stop)
|
||||||
#ifdef ESLOPE
|
#ifdef ESLOPE
|
||||||
maskedtextureheight = ds_p->maskedtextureheight; // note to red, this == &(ds_p->maskedtextureheight[0])
|
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
|
// Set midtexture starting height
|
||||||
if (linedef->flags & ML_EFFECT2) { // Ignore slopes when texturing
|
if (linedef->flags & ML_EFFECT2) { // Ignore slopes when texturing
|
||||||
rw_midtextureslide = rw_midtexturebackslide = 0;
|
rw_midtextureslide = rw_midtexturebackslide = 0;
|
||||||
|
|
Loading…
Reference in a new issue