mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-29 05:41:02 +00:00
Merge branch '2.2backport-ceilslope-light' into 'next'
2.2 Backports - add ceil slope double step-up/down and fix sprite/models all black in sector with light level of 256 See merge request KartKrew/Kart-Public!274
This commit is contained in:
commit
f46568868a
3 changed files with 36 additions and 52 deletions
|
@ -3193,7 +3193,7 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
||||||
if (h <= temp)
|
if (h <= temp)
|
||||||
{
|
{
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = *list[i-1].lightlevel;
|
lightlevel = *list[i-1].lightlevel > 255 ? 255 : *list[i-1].lightlevel;
|
||||||
colormap = list[i-1].extra_colormap;
|
colormap = list[i-1].extra_colormap;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -3201,7 +3201,7 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
||||||
#else
|
#else
|
||||||
i = R_GetPlaneLight(sector, temp, false);
|
i = R_GetPlaneLight(sector, temp, false);
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = *list[i].lightlevel;
|
lightlevel = *list[i].lightlevel > 255 ? 255 : *list[i].lightlevel;
|
||||||
colormap = list[i].extra_colormap;
|
colormap = list[i].extra_colormap;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -3217,7 +3217,7 @@ static void HWR_SplitSprite(gr_vissprite_t *spr)
|
||||||
if (!(list[i].flags & FF_NOSHADE) && (list[i].flags & FF_CUTSPRITES))
|
if (!(list[i].flags & FF_NOSHADE) && (list[i].flags & FF_CUTSPRITES))
|
||||||
{
|
{
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = *list[i].lightlevel;
|
lightlevel = *list[i].lightlevel > 255 ? 255 : *list[i].lightlevel;
|
||||||
colormap = list[i].extra_colormap;
|
colormap = list[i].extra_colormap;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3497,7 +3497,7 @@ static void HWR_DrawSprite(gr_vissprite_t *spr)
|
||||||
extracolormap_t *colormap = sector->extra_colormap;
|
extracolormap_t *colormap = sector->extra_colormap;
|
||||||
|
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = sector->lightlevel;
|
lightlevel = sector->lightlevel > 255 ? 255 : sector->lightlevel;
|
||||||
|
|
||||||
HWR_Lighting(&Surf, lightlevel, colormap);
|
HWR_Lighting(&Surf, lightlevel, colormap);
|
||||||
}
|
}
|
||||||
|
@ -3591,7 +3591,7 @@ static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr)
|
||||||
light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before
|
light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before
|
||||||
|
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = *sector->lightlist[light].lightlevel;
|
lightlevel = *sector->lightlist[light].lightlevel > 255 ? 255 : *sector->lightlist[light].lightlevel;
|
||||||
|
|
||||||
if (sector->lightlist[light].extra_colormap)
|
if (sector->lightlist[light].extra_colormap)
|
||||||
colormap = sector->lightlist[light].extra_colormap;
|
colormap = sector->lightlist[light].extra_colormap;
|
||||||
|
@ -3599,7 +3599,7 @@ static inline void HWR_DrawPrecipitationSprite(gr_vissprite_t *spr)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = sector->lightlevel;
|
lightlevel = sector->lightlevel > 255 ? 255 : sector->lightlevel;
|
||||||
|
|
||||||
if (sector->extra_colormap)
|
if (sector->extra_colormap)
|
||||||
colormap = sector->extra_colormap;
|
colormap = sector->extra_colormap;
|
||||||
|
|
|
@ -1098,7 +1098,7 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
||||||
light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before
|
light = R_GetPlaneLight(sector, spr->mobj->z + spr->mobj->height, false); // Always use the light at the top instead of whatever I was doing before
|
||||||
|
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = *sector->lightlist[light].lightlevel;
|
lightlevel = *sector->lightlist[light].lightlevel > 255 ? 255 : *sector->lightlist[light].lightlevel;
|
||||||
|
|
||||||
if (sector->lightlist[light].extra_colormap)
|
if (sector->lightlist[light].extra_colormap)
|
||||||
colormap = sector->lightlist[light].extra_colormap;
|
colormap = sector->lightlist[light].extra_colormap;
|
||||||
|
@ -1106,7 +1106,7 @@ void HWR_DrawMD2(gr_vissprite_t *spr)
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
if (!(spr->mobj->frame & FF_FULLBRIGHT))
|
||||||
lightlevel = sector->lightlevel;
|
lightlevel = sector->lightlevel > 255 ? 255 : sector->lightlevel;
|
||||||
|
|
||||||
if (sector->extra_colormap)
|
if (sector->extra_colormap)
|
||||||
colormap = sector->extra_colormap;
|
colormap = sector->extra_colormap;
|
||||||
|
|
72
src/p_map.c
72
src/p_map.c
|
@ -2673,7 +2673,7 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff)
|
||||||
fixed_t tryx = thing->x;
|
fixed_t tryx = thing->x;
|
||||||
fixed_t tryy = thing->y;
|
fixed_t tryy = thing->y;
|
||||||
fixed_t radius = thing->radius;
|
fixed_t radius = thing->radius;
|
||||||
fixed_t thingtop = thing->z + thing->height;
|
fixed_t thingtop ;//= thing->z + thing->height;
|
||||||
fixed_t startingonground = P_IsObjectOnGround(thing);
|
fixed_t startingonground = P_IsObjectOnGround(thing);
|
||||||
floatok = false;
|
floatok = false;
|
||||||
|
|
||||||
|
@ -2739,64 +2739,48 @@ boolean P_TryMove(mobj_t *thing, fixed_t x, fixed_t y, boolean allowdropoff)
|
||||||
|
|
||||||
floatok = true;
|
floatok = true;
|
||||||
|
|
||||||
if (thing->eflags & MFE_VERTICALFLIP)
|
thingtop = thing->z + thing->height;
|
||||||
|
|
||||||
|
// Step up
|
||||||
|
if (thing->z < tmfloorz)
|
||||||
{
|
{
|
||||||
if (thing->z < tmfloorz)
|
if (tmfloorz - thing->z <= maxstep)
|
||||||
|
{
|
||||||
|
thing->z = thing->floorz = tmfloorz;
|
||||||
|
thing->eflags |= MFE_JUSTSTEPPEDDOWN;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return false; // mobj must raise itself to fit
|
return false; // mobj must raise itself to fit
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (tmceilingz < thingtop)
|
else if (tmceilingz < thingtop)
|
||||||
return false; // mobj must lower itself to fit
|
{
|
||||||
|
if (thingtop - tmceilingz <= maxstep)
|
||||||
// Ramp test
|
{
|
||||||
if (maxstep > 0 && !(
|
thing->z = ( thing->ceilingz = tmceilingz ) - thing->height;
|
||||||
thing->player && (
|
thing->eflags |= MFE_JUSTSTEPPEDDOWN;
|
||||||
P_PlayerTouchingSectorSpecial(thing->player, 1, 14)
|
}
|
||||||
|| GETSECSPECIAL(R_PointInSubsector(x, y)->sector->special, 1) == 14)
|
else
|
||||||
)
|
{
|
||||||
)
|
return false; // mobj must lower itself to fit
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (maxstep > 0) // Step down
|
||||||
{
|
{
|
||||||
// If the floor difference is MAXSTEPMOVE or less, and the sector isn't Section1:14, ALWAYS
|
// If the floor difference is MAXSTEPMOVE or less, and the sector isn't Section1:14, ALWAYS
|
||||||
// step down! Formerly required a Section1:13 sector for the full MAXSTEPMOVE, but no more.
|
// step down! Formerly required a Section1:13 sector for the full MAXSTEPMOVE, but no more.
|
||||||
|
|
||||||
if (thing->eflags & MFE_VERTICALFLIP)
|
if (thingtop == thing->ceilingz && tmceilingz > thingtop && tmceilingz - thingtop <= maxstep)
|
||||||
{
|
{
|
||||||
if (thingtop == thing->ceilingz && tmceilingz > thingtop && tmceilingz - thingtop <= maxstep)
|
thing->z = (thing->ceilingz = tmceilingz) - thing->height;
|
||||||
{
|
thing->eflags |= MFE_JUSTSTEPPEDDOWN;
|
||||||
thing->z = (thing->ceilingz = thingtop = tmceilingz) - thing->height;
|
|
||||||
thing->eflags |= MFE_JUSTSTEPPEDDOWN;
|
|
||||||
}
|
|
||||||
else if (tmceilingz < thingtop && thingtop - tmceilingz <= maxstep)
|
|
||||||
{
|
|
||||||
thing->z = (thing->ceilingz = thingtop = tmceilingz) - thing->height;
|
|
||||||
thing->eflags |= MFE_JUSTSTEPPEDDOWN;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (thing->z == thing->floorz && tmfloorz < thing->z && thing->z - tmfloorz <= maxstep)
|
else if (thing->z == thing->floorz && tmfloorz < thing->z && thing->z - tmfloorz <= maxstep)
|
||||||
{
|
{
|
||||||
thing->z = thing->floorz = tmfloorz;
|
thing->z = thing->floorz = tmfloorz;
|
||||||
thing->eflags |= MFE_JUSTSTEPPEDDOWN;
|
thing->eflags |= MFE_JUSTSTEPPEDDOWN;
|
||||||
}
|
}
|
||||||
else if (tmfloorz > thing->z && tmfloorz - thing->z <= maxstep)
|
|
||||||
{
|
|
||||||
thing->z = thing->floorz = tmfloorz;
|
|
||||||
thing->eflags |= MFE_JUSTSTEPPEDDOWN;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (thing->eflags & MFE_VERTICALFLIP)
|
|
||||||
{
|
|
||||||
if (thingtop - tmceilingz > maxstep)
|
|
||||||
{
|
|
||||||
if (tmfloorthing)
|
|
||||||
tmhitthing = tmfloorthing;
|
|
||||||
return false; // too big a step up
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (tmfloorz - thing->z > maxstep)
|
|
||||||
{
|
|
||||||
if (tmfloorthing)
|
|
||||||
tmhitthing = tmfloorthing;
|
|
||||||
return false; // too big a step up
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!allowdropoff && !(thing->flags & MF_FLOAT) && thing->type != MT_SKIM && !tmfloorthing)
|
if (!allowdropoff && !(thing->flags & MF_FLOAT) && thing->type != MT_SKIM && !tmfloorthing)
|
||||||
|
|
Loading…
Reference in a new issue