Reimplement Invert Encore

Also add removal warnings for sector Sneaker Panels, Trick Panels, and fast-approaching deprecation warnings for sector Offroad.
This commit is contained in:
Sally Coolatta 2022-10-10 06:08:25 -04:00
parent 3fd8c53c4a
commit 21dd68d392
9 changed files with 68 additions and 53 deletions

View file

@ -94,6 +94,9 @@ sectorflags
gravityflip = "Flip Objects in Reverse Gravity"; gravityflip = "Flip Objects in Reverse Gravity";
heatwave = "Heat Wave"; heatwave = "Heat Wave";
noclipcamera = "Intangible to the Camera"; noclipcamera = "Intangible to the Camera";
ripple_floor = "Ripply Floor";
ripple_ceiling = "Ripply Ceiling";
invertencore = "Invert Encore Remap";
outerspace = "Space Countdown"; outerspace = "Space Countdown";
doublestepup = "Ramp Sector (double step-up/down)"; doublestepup = "Ramp Sector (double step-up/down)";
nostepdown = "Non-Ramp Sector (No step-down)"; nostepdown = "Non-Ramp Sector (No step-down)";

View file

@ -2871,7 +2871,7 @@ static void HWR_AddPolyObjectPlanes(void)
} }
else else
{ {
HWR_GetLevelFlat(&levelflats[polyobjsector->floorpic], R_NoEncore(polyobjsector, false)); HWR_GetLevelFlat(&levelflats[polyobjsector->floorpic], R_NoEncore(polyobjsector, &levelflats[polyobjsector->floorpic], false));
HWR_RenderPolyObjectPlane(po_ptrs[i], false, polyobjsector->floorheight, PF_Occlude, HWR_RenderPolyObjectPlane(po_ptrs[i], false, polyobjsector->floorheight, PF_Occlude,
(light == -1 ? gl_frontsector->lightlevel : *gl_frontsector->lightlist[light].lightlevel), &levelflats[polyobjsector->floorpic], (light == -1 ? gl_frontsector->lightlevel : *gl_frontsector->lightlist[light].lightlevel), &levelflats[polyobjsector->floorpic],
polyobjsector, 255, (light == -1 ? gl_frontsector->extra_colormap : *gl_frontsector->lightlist[light].extra_colormap)); polyobjsector, 255, (light == -1 ? gl_frontsector->extra_colormap : *gl_frontsector->lightlist[light].extra_colormap));
@ -2894,7 +2894,7 @@ static void HWR_AddPolyObjectPlanes(void)
} }
else else
{ {
HWR_GetLevelFlat(&levelflats[polyobjsector->ceilingpic], R_NoEncore(polyobjsector, true)); HWR_GetLevelFlat(&levelflats[polyobjsector->ceilingpic], R_NoEncore(polyobjsector, &levelflats[polyobjsector->ceilingpic], true));
HWR_RenderPolyObjectPlane(po_ptrs[i], true, polyobjsector->ceilingheight, PF_Occlude, HWR_RenderPolyObjectPlane(po_ptrs[i], true, polyobjsector->ceilingheight, PF_Occlude,
(light == -1 ? gl_frontsector->lightlevel : *gl_frontsector->lightlist[light].lightlevel), &levelflats[polyobjsector->ceilingpic], (light == -1 ? gl_frontsector->lightlevel : *gl_frontsector->lightlist[light].lightlevel), &levelflats[polyobjsector->ceilingpic],
polyobjsector, 255, (light == -1 ? gl_frontsector->extra_colormap : *gl_frontsector->lightlist[light].extra_colormap)); polyobjsector, 255, (light == -1 ? gl_frontsector->extra_colormap : *gl_frontsector->lightlist[light].extra_colormap));
@ -3031,7 +3031,7 @@ static void HWR_Subsector(size_t num)
{ {
if (sub->validcount != validcount) if (sub->validcount != validcount)
{ {
HWR_GetLevelFlat(&levelflats[gl_frontsector->floorpic], R_NoEncore(gl_frontsector, false)); HWR_GetLevelFlat(&levelflats[gl_frontsector->floorpic], R_NoEncore(gl_frontsector, &levelflats[gl_frontsector->floorpic], false));
HWR_RenderPlane(sub, &extrasubsectors[num], false, HWR_RenderPlane(sub, &extrasubsectors[num], false,
// Hack to make things continue to work around slopes. // Hack to make things continue to work around slopes.
locFloorHeight == cullFloorHeight ? locFloorHeight : gl_frontsector->floorheight, locFloorHeight == cullFloorHeight ? locFloorHeight : gl_frontsector->floorheight,
@ -3054,7 +3054,7 @@ static void HWR_Subsector(size_t num)
{ {
if (sub->validcount != validcount) if (sub->validcount != validcount)
{ {
HWR_GetLevelFlat(&levelflats[gl_frontsector->ceilingpic], R_NoEncore(gl_frontsector, true)); HWR_GetLevelFlat(&levelflats[gl_frontsector->ceilingpic], R_NoEncore(gl_frontsector, &levelflats[gl_frontsector->ceilingpic], true));
HWR_RenderPlane(sub, &extrasubsectors[num], true, HWR_RenderPlane(sub, &extrasubsectors[num], true,
// Hack to make things continue to work around slopes. // Hack to make things continue to work around slopes.
locCeilingHeight == cullCeilingHeight ? locCeilingHeight : gl_frontsector->ceilingheight, locCeilingHeight == cullCeilingHeight ? locCeilingHeight : gl_frontsector->ceilingheight,
@ -3132,7 +3132,7 @@ static void HWR_Subsector(size_t num)
} }
else else
{ {
HWR_GetLevelFlat(&levelflats[*rover->bottompic], R_NoEncore(gl_frontsector, false)); HWR_GetLevelFlat(&levelflats[*rover->bottompic], R_NoEncore(gl_frontsector, &levelflats[*rover->bottompic], false));
light = R_GetPlaneLight(gl_frontsector, centerHeight, dup_viewz < cullHeight ? true : false); light = R_GetPlaneLight(gl_frontsector, centerHeight, dup_viewz < cullHeight ? true : false);
HWR_RenderPlane(sub, &extrasubsectors[num], false, *rover->bottomheight, HWR_RippleBlend(gl_frontsector, rover, false) | PF_Occlude, *gl_frontsector->lightlist[light].lightlevel, &levelflats[*rover->bottompic], HWR_RenderPlane(sub, &extrasubsectors[num], false, *rover->bottomheight, HWR_RippleBlend(gl_frontsector, rover, false) | PF_Occlude, *gl_frontsector->lightlist[light].lightlevel, &levelflats[*rover->bottompic],
rover->master->frontsector, 255, *gl_frontsector->lightlist[light].extra_colormap); rover->master->frontsector, 255, *gl_frontsector->lightlist[light].extra_colormap);
@ -3180,7 +3180,7 @@ static void HWR_Subsector(size_t num)
} }
else else
{ {
HWR_GetLevelFlat(&levelflats[*rover->toppic], R_NoEncore(gl_frontsector, true)); HWR_GetLevelFlat(&levelflats[*rover->toppic], R_NoEncore(gl_frontsector, &levelflats[*rover->toppic], true));
light = R_GetPlaneLight(gl_frontsector, centerHeight, dup_viewz < cullHeight ? true : false); light = R_GetPlaneLight(gl_frontsector, centerHeight, dup_viewz < cullHeight ? true : false);
HWR_RenderPlane(sub, &extrasubsectors[num], true, *rover->topheight, HWR_RippleBlend(gl_frontsector, rover, true) | PF_Occlude, *gl_frontsector->lightlist[light].lightlevel, &levelflats[*rover->toppic], HWR_RenderPlane(sub, &extrasubsectors[num], true, *rover->topheight, HWR_RippleBlend(gl_frontsector, rover, true) | PF_Occlude, *gl_frontsector->lightlist[light].lightlevel, &levelflats[*rover->toppic],
rover->master->frontsector, 255, *gl_frontsector->lightlist[light].extra_colormap); rover->master->frontsector, 255, *gl_frontsector->lightlist[light].extra_colormap);
@ -4886,7 +4886,7 @@ static void HWR_CreateDrawNodes(void)
gl_frontsector = NULL; gl_frontsector = NULL;
if (!(sortnode[sortindex[i]].plane->blend & PF_NoTexture)) if (!(sortnode[sortindex[i]].plane->blend & PF_NoTexture))
HWR_GetLevelFlat(sortnode[sortindex[i]].plane->levelflat, R_NoEncore(sortnode[sortindex[i]].plane->FOFSector, sortnode[sortindex[i]].plane->isceiling)); HWR_GetLevelFlat(sortnode[sortindex[i]].plane->levelflat, R_NoEncore(sortnode[sortindex[i]].plane->FOFSector, sortnode[sortindex[i]].plane->levelflat, sortnode[sortindex[i]].plane->isceiling));
HWR_RenderPlane(NULL, sortnode[sortindex[i]].plane->xsub, sortnode[sortindex[i]].plane->isceiling, sortnode[sortindex[i]].plane->fixedheight, sortnode[sortindex[i]].plane->blend, sortnode[sortindex[i]].plane->lightlevel, HWR_RenderPlane(NULL, sortnode[sortindex[i]].plane->xsub, sortnode[sortindex[i]].plane->isceiling, sortnode[sortindex[i]].plane->fixedheight, sortnode[sortindex[i]].plane->blend, sortnode[sortindex[i]].plane->lightlevel,
sortnode[sortindex[i]].plane->levelflat, sortnode[sortindex[i]].plane->FOFSector, sortnode[sortindex[i]].plane->alpha, sortnode[sortindex[i]].plane->planecolormap); sortnode[sortindex[i]].plane->levelflat, sortnode[sortindex[i]].plane->FOFSector, sortnode[sortindex[i]].plane->alpha, sortnode[sortindex[i]].plane->planecolormap);
} }
@ -4896,7 +4896,7 @@ static void HWR_CreateDrawNodes(void)
gl_frontsector = NULL; gl_frontsector = NULL;
if (!(sortnode[sortindex[i]].polyplane->blend & PF_NoTexture)) if (!(sortnode[sortindex[i]].polyplane->blend & PF_NoTexture))
HWR_GetLevelFlat(sortnode[sortindex[i]].polyplane->levelflat, R_NoEncore(sortnode[sortindex[i]].polyplane->FOFSector, sortnode[sortindex[i]].polyplane->isceiling)); HWR_GetLevelFlat(sortnode[sortindex[i]].polyplane->levelflat, R_NoEncore(sortnode[sortindex[i]].polyplane->FOFSector, sortnode[sortindex[i]].polyplane->levelflat, sortnode[sortindex[i]].polyplane->isceiling));
HWR_RenderPolyObjectPlane(sortnode[sortindex[i]].polyplane->polysector, sortnode[sortindex[i]].polyplane->isceiling, sortnode[sortindex[i]].polyplane->fixedheight, sortnode[sortindex[i]].polyplane->blend, sortnode[sortindex[i]].polyplane->lightlevel, HWR_RenderPolyObjectPlane(sortnode[sortindex[i]].polyplane->polysector, sortnode[sortindex[i]].polyplane->isceiling, sortnode[sortindex[i]].polyplane->fixedheight, sortnode[sortindex[i]].polyplane->blend, sortnode[sortindex[i]].polyplane->lightlevel,
sortnode[sortindex[i]].polyplane->levelflat, sortnode[sortindex[i]].polyplane->FOFSector, sortnode[sortindex[i]].polyplane->alpha, sortnode[sortindex[i]].polyplane->planecolormap); sortnode[sortindex[i]].polyplane->levelflat, sortnode[sortindex[i]].polyplane->FOFSector, sortnode[sortindex[i]].polyplane->alpha, sortnode[sortindex[i]].polyplane->planecolormap);
} }

View file

@ -1486,7 +1486,7 @@ static void K_ParseTerrainParameter(size_t i, const char *param, const char *val
} }
else if (stricmp(param, "offroad") == 0) else if (stricmp(param, "offroad") == 0)
{ {
terrain->offroad = (UINT8)get_number(val); // offroad strength enum? terrain->offroad = FLOAT_TO_FIXED(atof(val));
} }
else if (stricmp(param, "damageType") == 0) else if (stricmp(param, "damageType") == 0)
{ {

View file

@ -111,7 +111,7 @@ typedef struct terrain_s
size_t overlayID; // Overlay defintion ID. size_t overlayID; // Overlay defintion ID.
fixed_t friction; // The default friction of this texture. fixed_t friction; // The default friction of this texture.
UINT8 offroad; // The default offroad level of this texture. fixed_t offroad; // The default offroad level of this texture.
INT16 damageType; // The default damage type of this texture. (Negative means no damage). INT16 damageType; // The default damage type of this texture. (Negative means no damage).
UINT8 trickPanel; // Trick panel strength UINT8 trickPanel; // Trick panel strength
fixed_t floorClip; // Offset for sprites on this ground fixed_t floorClip; // Offset for sprites on this ground

View file

@ -1494,6 +1494,8 @@ static void ParseTextmapSectorParameter(UINT32 i, const char *param, const char
sectors[i].flags |= MSF_RIPPLE_FLOOR; sectors[i].flags |= MSF_RIPPLE_FLOOR;
else if (fastcmp(param, "ripple_ceiling") && fastcmp("true", val)) else if (fastcmp(param, "ripple_ceiling") && fastcmp("true", val))
sectors[i].flags |= MSF_RIPPLE_CEILING; sectors[i].flags |= MSF_RIPPLE_CEILING;
else if (fastcmp(param, "invertencore") && fastcmp("true", val))
sectors[i].flags |= MSF_INVERTENCORE;
else if (fastcmp(param, "nostepup") && fastcmp("true", val)) else if (fastcmp(param, "nostepup") && fastcmp("true", val))
sectors[i].specialflags |= SSF_NOSTEPUP; sectors[i].specialflags |= SSF_NOSTEPUP;
else if (fastcmp(param, "doublestepup") && fastcmp("true", val)) else if (fastcmp(param, "doublestepup") && fastcmp("true", val))
@ -2325,6 +2327,8 @@ static void P_WriteTextmap(void)
fprintf(f, "ripple_floor = true;\n"); fprintf(f, "ripple_floor = true;\n");
if (wsectors[i].flags & MSF_RIPPLE_CEILING) if (wsectors[i].flags & MSF_RIPPLE_CEILING)
fprintf(f, "ripple_ceiling = true;\n"); fprintf(f, "ripple_ceiling = true;\n");
if (wsectors[i].flags & MSF_INVERTENCORE)
fprintf(f, "invertencore = true;\n");
if (wsectors[i].specialflags & SSF_NOSTEPUP) if (wsectors[i].specialflags & SSF_NOSTEPUP)
fprintf(f, "nostepup = true;\n"); fprintf(f, "nostepup = true;\n");
if (wsectors[i].specialflags & SSF_DOUBLESTEPUP) if (wsectors[i].specialflags & SSF_DOUBLESTEPUP)
@ -4026,7 +4030,6 @@ static void P_ConvertBinaryLinedefTypes(void)
if (lines[i].flags & ML_DONTPEGTOP) if (lines[i].flags & ML_DONTPEGTOP)
sectors[s].flags |= MSF_RIPPLE_FLOOR; sectors[s].flags |= MSF_RIPPLE_FLOOR;
if (lines[i].flags & ML_DONTPEGBOTTOM) if (lines[i].flags & ML_DONTPEGBOTTOM)
sectors[s].flags |= MSF_RIPPLE_CEILING; sectors[s].flags |= MSF_RIPPLE_CEILING;
} }
@ -5788,18 +5791,23 @@ static void P_ConvertBinarySectorTypes(void)
switch(GETSECSPECIAL(sectors[i].special, 1)) switch(GETSECSPECIAL(sectors[i].special, 1))
{ {
case 1: //Damage case 1: //Damage
case 5: //Spikes
sectors[i].damagetype = SD_GENERIC; sectors[i].damagetype = SD_GENERIC;
break; break;
case 2: //Offroad (Weak) case 2: //Offroad (Weak)
CONS_Alert(CONS_WARNING, "Offroad specials will be deprecated soon. Use the TERRAIN effect!\n");
sectors[i].offroad = FRACUNIT; sectors[i].offroad = FRACUNIT;
break; break;
case 3: //Offroad case 3: //Offroad
CONS_Alert(CONS_WARNING, "Offroad specials will be deprecated soon. Use the TERRAIN effect!\n");
sectors[i].offroad = 2*FRACUNIT; sectors[i].offroad = 2*FRACUNIT;
break; break;
case 4: //Offroad (Strong) case 4: //Offroad (Strong)
CONS_Alert(CONS_WARNING, "Offroad specials will be deprecated soon. Use the TERRAIN effect!\n");
sectors[i].offroad = 3*FRACUNIT; sectors[i].offroad = 3*FRACUNIT;
break; break;
case 5: //Spikes
sectors[i].damagetype = SD_GENERIC;
break;
case 6: //Death pit (camera tilt) case 6: //Death pit (camera tilt)
case 7: //Death pit (no camera tilt) case 7: //Death pit (no camera tilt)
sectors[i].damagetype = SD_DEATHPIT; sectors[i].damagetype = SD_DEATHPIT;
@ -5807,11 +5815,8 @@ static void P_ConvertBinarySectorTypes(void)
case 8: //Instakill case 8: //Instakill
sectors[i].damagetype = SD_INSTAKILL; sectors[i].damagetype = SD_INSTAKILL;
break; break;
case 11: //Special stage damage case 12: //Wall sector
//sectors[i].damagetype = SD_SPECIALSTAGE; sectors[i].specialflags |= SSF_NOSTEPUP;
break;
case 12: //Space countdown
//sectors[i].specialflags |= SSF_OUTERSPACE;
break; break;
case 13: //Ramp sector case 13: //Ramp sector
sectors[i].specialflags |= SSF_DOUBLESTEPUP; sectors[i].specialflags |= SSF_DOUBLESTEPUP;
@ -5853,12 +5858,19 @@ static void P_ConvertBinarySectorTypes(void)
case 8: //Check for linedef executor on FOFs case 8: //Check for linedef executor on FOFs
sectors[i].flags |= MSF_TRIGGERLINE_MOBJ; sectors[i].flags |= MSF_TRIGGERLINE_MOBJ;
break; break;
case 15: //Invert Encore
sectors[i].flags |= MSF_INVERTENCORE;
break;
default: default:
break; break;
} }
switch(GETSECSPECIAL(sectors[i].special, 3)) switch(GETSECSPECIAL(sectors[i].special, 3))
{ {
case 1: //Trick panel
case 3:
CONS_Alert(CONS_WARNING, "Trick Panel special is deprecated. Use the TERRAIN effect!\n");
break;
case 5: //Speed pad case 5: //Speed pad
sectors[i].specialflags |= SSF_SPEEDPAD; sectors[i].specialflags |= SSF_SPEEDPAD;
break; break;
@ -5871,12 +5883,18 @@ static void P_ConvertBinarySectorTypes(void)
case 1: //Star post activator case 1: //Star post activator
sectors[i].specialflags |= SSF_STARPOSTACTIVATOR; sectors[i].specialflags |= SSF_STARPOSTACTIVATOR;
break; break;
case 2: //Exit/Special Stage pit/Return flag case 2: //Exit
sectors[i].specialflags |= SSF_EXIT; sectors[i].specialflags |= SSF_EXIT;
break; break;
case 5: //Fan sector case 5: //Fan sector
sectors[i].specialflags |= SSF_FAN; sectors[i].specialflags |= SSF_FAN;
break; break;
case 6: //Sneaker panel
CONS_Alert(CONS_WARNING, "Sneaker Panel special is deprecated. Use the TERRAIN effect!\n");
break;
case 7: //Destroy items
sectors[i].specialflags |= SSF_DESTROYITEMS;
break;
case 8: //Zoom tube start case 8: //Zoom tube start
sectors[i].specialflags |= SSF_ZOOMTUBESTART; sectors[i].specialflags |= SSF_ZOOMTUBESTART;
break; break;

View file

@ -4453,22 +4453,22 @@ static void P_ProcessSpeedPad(player_t *player, sector_t *sector, sector_t *rove
static void P_ProcessExitSector(player_t *player, mtag_t sectag) static void P_ProcessExitSector(player_t *player, mtag_t sectag)
{ {
#if 1
(void)player;
(void)sectag;
#else
INT32 lineindex; INT32 lineindex;
#if 0
if (!(gametyperules & GTR_ALLOWEXIT)) if (!(gametyperules & GTR_ALLOWEXIT))
return; return;
#endif
// Exit (for FOF exits; others are handled in P_PlayerThink in p_user.c) // Exit (for FOF exits; others are handled in P_PlayerThink in p_user.c)
P_DoPlayerFinish(player); P_DoPlayerFinish(player);
P_SetupSignExit(player); P_SetupSignExit(player);
#if 0
if (!G_CoopGametype()) if (!G_CoopGametype())
return; return;
#endif
// Custom exit! // Custom exit!
// important: use sectag on next line instead of player->mo->subsector->tag // important: use sectag on next line instead of player->mo->subsector->tag
@ -4482,15 +4482,10 @@ static void P_ProcessExitSector(player_t *player, mtag_t sectag)
return; return;
} }
// Special goodies depending on emeralds collected nextmapoverride = (INT16)(udmf ? lines[lineindex].args[0] : lines[lineindex].frontsector->floorheight>>FRACBITS);
if ((lines[lineindex].args[1] & TMEF_EMERALDCHECK) && ALLCHAOSEMERALDS(emeralds))
nextmapoverride = (INT16)(udmf ? lines[lineindex].args[2] : lines[lineindex].frontsector->ceilingheight>>FRACBITS);
else
nextmapoverride = (INT16)(udmf ? lines[lineindex].args[0] : lines[lineindex].frontsector->floorheight>>FRACBITS);
if (lines[lineindex].args[1] & TMEF_SKIPTALLY) if (lines[lineindex].args[1] & TMEF_SKIPTALLY)
skipstats = 1; skipstats = 1;
#endif
} }
static void P_ProcessZoomTube(player_t *player, mtag_t sectag, boolean end) static void P_ProcessZoomTube(player_t *player, mtag_t sectag, boolean end)

View file

@ -41,31 +41,28 @@ drawseg_t *ds_p = NULL;
// indicates doors closed wrt automap bugfix: // indicates doors closed wrt automap bugfix:
INT32 doorclosed; INT32 doorclosed;
boolean R_NoEncore(sector_t *sector, boolean ceiling) boolean R_NoEncore(sector_t *sector, levelflat_t *flat, boolean ceiling)
{ {
// FIXME: UDMFify const boolean invertEncore = (sector->flags & MSF_INVERTENCORE);
/* const terrain_t *terrain = (flat != NULL ? flat->terrain : NULL);
boolean invertencore = (GETSECSPECIAL(sector->special, 2) == 15);
#if 0 // perfect implementation
INT32 val = GETSECSPECIAL(sector->special, 3);
//if (val != 1 && val != 3 // spring panel
#else // optimised, see #define GETSECSPECIAL(i,j) ((i >> ((j-1)*4))&15)
if ((!(sector->special & (1<<8)) || (sector->special & ((4|8)<<8))) // spring panel
#endif
&& GETSECSPECIAL(sector->special, 4) != 6) // sneaker panel
return invertencore;
if (invertencore) if ((terrain == NULL)
|| (terrain->trickPanel <= 0 && !(terrain->flags & TRF_SNEAKERPANEL)))
{
return invertEncore;
}
if (invertEncore)
{
return false; return false;
}
if (ceiling) if (ceiling)
{
return ((boolean)(sector->flags & MSF_FLIPSPECIAL_CEILING)); return ((boolean)(sector->flags & MSF_FLIPSPECIAL_CEILING));
return ((boolean)(sector->flags & MSF_FLIPSPECIAL_FLOOR)); }
*/
(void)sector; return ((boolean)(sector->flags & MSF_FLIPSPECIAL_FLOOR));
(void)ceiling;
return false;
} }
boolean R_IsRipplePlane(sector_t *sector, ffloor_t *rover, int ceiling) boolean R_IsRipplePlane(sector_t *sector, ffloor_t *rover, int ceiling)
@ -953,7 +950,7 @@ static void R_Subsector(size_t num)
frontsector->floorheight, frontsector->floorpic, floorlightlevel, frontsector->floorheight, frontsector->floorpic, floorlightlevel,
frontsector->floor_xoffs, frontsector->floor_yoffs, frontsector->floorpic_angle, frontsector->floor_xoffs, frontsector->floor_yoffs, frontsector->floorpic_angle,
floorcolormap, NULL, NULL, frontsector->f_slope, floorcolormap, NULL, NULL, frontsector->f_slope,
R_NoEncore(frontsector, false), R_NoEncore(frontsector, &levelflats[frontsector->floorpic], false),
R_IsRipplePlane(frontsector, NULL, false), R_IsRipplePlane(frontsector, NULL, false),
false false
); );
@ -969,7 +966,7 @@ static void R_Subsector(size_t num)
frontsector->ceilingheight, frontsector->ceilingpic, ceilinglightlevel, frontsector->ceilingheight, frontsector->ceilingpic, ceilinglightlevel,
frontsector->ceiling_xoffs, frontsector->ceiling_yoffs, frontsector->ceilingpic_angle, frontsector->ceiling_xoffs, frontsector->ceiling_yoffs, frontsector->ceilingpic_angle,
ceilingcolormap, NULL, NULL, frontsector->c_slope, ceilingcolormap, NULL, NULL, frontsector->c_slope,
R_NoEncore(frontsector, true), R_NoEncore(frontsector, &levelflats[frontsector->ceilingpic], true),
R_IsRipplePlane(frontsector, NULL, true), R_IsRipplePlane(frontsector, NULL, true),
true true
); );
@ -1017,7 +1014,7 @@ static void R_Subsector(size_t num)
*rover->bottomheight, *rover->bottompic, *rover->bottomheight, *rover->bottompic,
*frontsector->lightlist[light].lightlevel, *rover->bottomxoffs, *frontsector->lightlist[light].lightlevel, *rover->bottomxoffs,
*rover->bottomyoffs, *rover->bottomangle, *frontsector->lightlist[light].extra_colormap, rover, NULL, *rover->b_slope, *rover->bottomyoffs, *rover->bottomangle, *frontsector->lightlist[light].extra_colormap, rover, NULL, *rover->b_slope,
R_NoEncore(rover->master->frontsector, true), R_NoEncore(rover->master->frontsector, &levelflats[*rover->bottompic], true),
R_IsRipplePlane(rover->master->frontsector, rover, true), R_IsRipplePlane(rover->master->frontsector, rover, true),
true true
); );
@ -1051,7 +1048,7 @@ static void R_Subsector(size_t num)
*rover->topheight, *rover->toppic, *rover->topheight, *rover->toppic,
*frontsector->lightlist[light].lightlevel, *rover->topxoffs, *rover->topyoffs, *rover->topangle, *frontsector->lightlist[light].lightlevel, *rover->topxoffs, *rover->topyoffs, *rover->topangle,
*frontsector->lightlist[light].extra_colormap, rover, NULL, *rover->t_slope, *frontsector->lightlist[light].extra_colormap, rover, NULL, *rover->t_slope,
R_NoEncore(rover->master->frontsector, false), R_NoEncore(rover->master->frontsector, &levelflats[*rover->toppic], false),
R_IsRipplePlane(rover->master->frontsector, rover, false), R_IsRipplePlane(rover->master->frontsector, rover, false),
false false
); );
@ -1101,7 +1098,7 @@ static void R_Subsector(size_t num)
polysec->floorpic_angle-po->angle, polysec->floorpic_angle-po->angle,
(light == -1 ? frontsector->extra_colormap : *frontsector->lightlist[light].extra_colormap), NULL, po, (light == -1 ? frontsector->extra_colormap : *frontsector->lightlist[light].extra_colormap), NULL, po,
NULL, // will ffloors be slopable eventually? NULL, // will ffloors be slopable eventually?
R_NoEncore(polysec, false), R_NoEncore(polysec, &levelflats[polysec->floorpic], false),
false, /* TODO: wet polyobjects? */ false, /* TODO: wet polyobjects? */
true true
); );
@ -1130,7 +1127,7 @@ static void R_Subsector(size_t num)
(light == -1 ? frontsector->lightlevel : *frontsector->lightlist[light].lightlevel), polysec->ceiling_xoffs, polysec->ceiling_yoffs, polysec->ceilingpic_angle-po->angle, (light == -1 ? frontsector->lightlevel : *frontsector->lightlist[light].lightlevel), polysec->ceiling_xoffs, polysec->ceiling_yoffs, polysec->ceilingpic_angle-po->angle,
(light == -1 ? frontsector->extra_colormap : *frontsector->lightlist[light].extra_colormap), NULL, po, (light == -1 ? frontsector->extra_colormap : *frontsector->lightlist[light].extra_colormap), NULL, po,
NULL, // will ffloors be slopable eventually? NULL, // will ffloors be slopable eventually?
R_NoEncore(polysec, true), R_NoEncore(polysec, &levelflats[polysec->ceilingpic], true),
false, /* TODO: wet polyobjects? */ false, /* TODO: wet polyobjects? */
false false
); );

View file

@ -42,7 +42,7 @@ void R_RenderBSPNode(INT32 bspnum);
// determines when a given sector shouldn't abide by the encoremap's palette. // determines when a given sector shouldn't abide by the encoremap's palette.
// no longer a static since this is used for encore in hw_main.c as well now: // no longer a static since this is used for encore in hw_main.c as well now:
boolean R_NoEncore(sector_t *sector, boolean ceiling); boolean R_NoEncore(sector_t *sector, levelflat_t *flat, boolean ceiling);
boolean R_IsRipplePlane(sector_t *sector, ffloor_t *rover, int ceiling); boolean R_IsRipplePlane(sector_t *sector, ffloor_t *rover, int ceiling);

View file

@ -345,6 +345,8 @@ typedef enum
// water ripple // water ripple
MSF_RIPPLE_FLOOR = 1<<10, MSF_RIPPLE_FLOOR = 1<<10,
MSF_RIPPLE_CEILING = 1<<11, MSF_RIPPLE_CEILING = 1<<11,
// invert encore color remap status
MSF_INVERTENCORE = 1<<12,
} sectorflags_t; } sectorflags_t;
typedef enum typedef enum