mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-12-05 07:33:00 +00:00
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:
parent
3fd8c53c4a
commit
21dd68d392
9 changed files with 68 additions and 53 deletions
|
|
@ -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)";
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
|
||||||
15
src/p_spec.c
15
src/p_spec.c
|
|
@ -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)
|
||||||
|
|
|
||||||
45
src/r_bsp.c
45
src/r_bsp.c
|
|
@ -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
|
||||||
);
|
);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue