mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
- fixed: Sector_SetLink did incorrect checks for the returned control sector
- added Sector_SetTranslucent special so set translucency of portal planes at run time. - added 'additive' information for portal planes. This is no-op at the moment because the flat drawers can't handle additive translucency yet though. SVN r3149 (trunk)
This commit is contained in:
parent
16878f6bb4
commit
1806e47e43
9 changed files with 84 additions and 23 deletions
|
@ -162,6 +162,10 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
// relative to the owning sector's light level.
|
// relative to the owning sector's light level.
|
||||||
alphafloor = <float>; // translucency of floor plane (only has meaning with Sector_SetPortal) Default is 1.0.
|
alphafloor = <float>; // translucency of floor plane (only has meaning with Sector_SetPortal) Default is 1.0.
|
||||||
alphaceiling = <float>; // translucency of ceiling plane (only has meaning with Sector_SetPortal) Default is 1.0.
|
alphaceiling = <float>; // translucency of ceiling plane (only has meaning with Sector_SetPortal) Default is 1.0.
|
||||||
|
renderstylefloor = <string>; // floor plane renderstyle (only has meaning with Sector_SetPortal); not implemented yet in software renderer
|
||||||
|
// can be "translucent" or "add", default is "translucent".
|
||||||
|
renderstyleceiling = <string>; // ceiling plane renderstyle (only has meaning with Sector_SetPortal); not implemented yet in software renderer
|
||||||
|
// can be "translucent" or "add", default is "translucent".
|
||||||
gravity = <float>; // Sector's gravity. Default is 1.0.
|
gravity = <float>; // Sector's gravity. Default is 1.0.
|
||||||
lightcolor = <integer>; // Sector's light color as RRGGBB value, default = 0xffffff.
|
lightcolor = <integer>; // Sector's light color as RRGGBB value, default = 0xffffff.
|
||||||
fadecolor = <integer>; // Sector's fog color as RRGGBB value, default = 0x000000.
|
fadecolor = <integer>; // Sector's fog color as RRGGBB value, default = 0x000000.
|
||||||
|
@ -176,7 +180,7 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
|
|
||||||
* Note about dropactors
|
* Note about dropactors
|
||||||
|
|
||||||
The spec requires this to be false by default. Currently, however ZDoom assumes this to be true
|
The spec requires this to be false by default. Currently, however, ZDoom assumes this to be true
|
||||||
for Doom format maps so any map converter converting to the ZDoomTranslated namespace should
|
for Doom format maps so any map converter converting to the ZDoomTranslated namespace should
|
||||||
set this flag for each tagged sector.
|
set this flag for each tagged sector.
|
||||||
|
|
||||||
|
@ -208,6 +212,7 @@ Note: All <bool> fields default to false unless mentioned otherwise.
|
||||||
181: Plane_Align, arg2
|
181: Plane_Align, arg2
|
||||||
215: Teleport_Line, arg0
|
215: Teleport_Line, arg0
|
||||||
222: Scroll_Texture_Model, arg0 (arg0 must be preserved)
|
222: Scroll_Texture_Model, arg0 (arg0 must be preserved)
|
||||||
|
160: Sector_3DFloor, arg4 (both uses as high-byte of tag and line ID are not supported in UDMF and must be remapped)
|
||||||
|
|
||||||
Some specials also allow setting the extended flags. These must also be
|
Some specials also allow setting the extended flags. These must also be
|
||||||
converted to explicitly setting the flags through the defined map fields.
|
converted to explicitly setting the flags through the defined map fields.
|
||||||
|
@ -290,9 +295,14 @@ Added 'countsecret' actor property.
|
||||||
Added vertex floor and ceiling height properties
|
Added vertex floor and ceiling height properties
|
||||||
|
|
||||||
1.16 23.01.2011
|
1.16 23.01.2011
|
||||||
|
Added alphaceiling and alphafloor sector properties
|
||||||
Added blocksight linedef flag
|
Added blocksight linedef flag
|
||||||
Removed remarks of 8 being the maximum number of player classes/skill levels the menu can handle so the spec now properly lists 16 as limit.
|
Removed remarks of 8 being the maximum number of player classes/skill levels the menu can handle so the spec now properly lists 16 as limit.
|
||||||
|
|
||||||
|
1.17 12.02.2011
|
||||||
|
Added renderstyleceiling and renderstylefloor sector properties
|
||||||
|
Added Sector_Set3DFloor to list of specials that need to be handled for line ID remapping
|
||||||
|
|
||||||
===============================================================================
|
===============================================================================
|
||||||
EOF
|
EOF
|
||||||
===============================================================================
|
===============================================================================
|
||||||
|
|
|
@ -96,6 +96,7 @@ DEFINE_SPECIAL(Pillar_BuildAndCrush, 94, 4, 5, 5)
|
||||||
DEFINE_SPECIAL(FloorAndCeiling_LowerByValue, 95, 3, 3, 3)
|
DEFINE_SPECIAL(FloorAndCeiling_LowerByValue, 95, 3, 3, 3)
|
||||||
DEFINE_SPECIAL(FloorAndCeiling_RaiseByValue, 96, 3, 3, 3)
|
DEFINE_SPECIAL(FloorAndCeiling_RaiseByValue, 96, 3, 3, 3)
|
||||||
DEFINE_SPECIAL(Ceiling_LowerAndCrushDist, 97, 3, 5, 5)
|
DEFINE_SPECIAL(Ceiling_LowerAndCrushDist, 97, 3, 5, 5)
|
||||||
|
DEFINE_SPECIAL(Sector_SetTranslucent, 98, 3, 4, 4)
|
||||||
|
|
||||||
DEFINE_SPECIAL(Scroll_Texture_Left, 100, -1, -1, 2)
|
DEFINE_SPECIAL(Scroll_Texture_Left, 100, -1, -1, 2)
|
||||||
DEFINE_SPECIAL(Scroll_Texture_Right, 101, -1, -1, 2)
|
DEFINE_SPECIAL(Scroll_Texture_Right, 101, -1, -1, 2)
|
||||||
|
|
|
@ -423,6 +423,8 @@ xx(Dropactors)
|
||||||
xx(NoRespawn)
|
xx(NoRespawn)
|
||||||
xx(Alphafloor)
|
xx(Alphafloor)
|
||||||
xx(Alphaceiling)
|
xx(Alphaceiling)
|
||||||
|
xx(Renderstylefloor)
|
||||||
|
xx(Renderstyleceiling)
|
||||||
|
|
||||||
xx(offsetx_top)
|
xx(offsetx_top)
|
||||||
xx(offsety_top)
|
xx(offsety_top)
|
||||||
|
|
|
@ -1943,13 +1943,30 @@ FUNC(LS_Sector_SetFriction)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FUNC(LS_Sector_SetTranslucent)
|
||||||
|
// Sector_SetTranslucent (tag, plane, amount, type)
|
||||||
|
{
|
||||||
|
if (arg0 != 0)
|
||||||
|
{
|
||||||
|
int secnum = -1;
|
||||||
|
|
||||||
|
while ((secnum = P_FindSectorFromTag (arg0, secnum)) >= 0)
|
||||||
|
{
|
||||||
|
sectors[secnum].SetAlpha(arg1, Scale(arg2, OPAQUE, 255));
|
||||||
|
sectors[secnum].ChangeFlags(arg1, ~PLANEF_ADDITIVE, arg3? PLANEF_ADDITIVE:0);
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
FUNC(LS_Sector_SetLink)
|
FUNC(LS_Sector_SetLink)
|
||||||
// Sector_SetLink (controltag, linktag, floor/ceiling, movetype)
|
// Sector_SetLink (controltag, linktag, floor/ceiling, movetype)
|
||||||
{
|
{
|
||||||
if (arg0 != 0) // control tag == 0 is for static initialization and must not be handled here
|
if (arg0 != 0) // control tag == 0 is for static initialization and must not be handled here
|
||||||
{
|
{
|
||||||
int control = P_FindSectorFromTag(arg0, -1);
|
int control = P_FindSectorFromTag(arg0, -1);
|
||||||
if (control != 0)
|
if (control >= 0)
|
||||||
{
|
{
|
||||||
return P_AddSectorLinks(§ors[control], arg1, arg2, arg3);
|
return P_AddSectorLinks(§ors[control], arg1, arg2, arg3);
|
||||||
}
|
}
|
||||||
|
@ -3166,7 +3183,7 @@ lnSpecFunc LineSpecials[256] =
|
||||||
/* 95 */ LS_FloorAndCeiling_LowerByValue,
|
/* 95 */ LS_FloorAndCeiling_LowerByValue,
|
||||||
/* 96 */ LS_FloorAndCeiling_RaiseByValue,
|
/* 96 */ LS_FloorAndCeiling_RaiseByValue,
|
||||||
/* 97 */ LS_Ceiling_LowerAndCrushDist,
|
/* 97 */ LS_Ceiling_LowerAndCrushDist,
|
||||||
/* 98 */ LS_NOP,
|
/* 98 */ LS_Sector_SetTranslucent,
|
||||||
/* 99 */ LS_NOP,
|
/* 99 */ LS_NOP,
|
||||||
/* 100 */ LS_NOP, // Scroll_Texture_Left
|
/* 100 */ LS_NOP, // Scroll_Texture_Left
|
||||||
/* 101 */ LS_NOP, // Scroll_Texture_Right
|
/* 101 */ LS_NOP, // Scroll_Texture_Right
|
||||||
|
|
|
@ -1200,6 +1200,24 @@ public:
|
||||||
sec->SetAlpha(sector_t::ceiling, CheckFixed(key));
|
sec->SetAlpha(sector_t::ceiling, CheckFixed(key));
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
case NAME_Renderstylefloor:
|
||||||
|
{
|
||||||
|
const char *str = CheckString(key);
|
||||||
|
if (!stricmp(str, "translucent")) sec->ChangeFlags(sector_t::floor, PLANEF_ADDITIVE, 0);
|
||||||
|
else if (!stricmp(str, "add")) sec->ChangeFlags(sector_t::floor, 0, PLANEF_ADDITIVE);
|
||||||
|
else sc.ScriptMessage("Unknown value \"%s\" for 'renderstylefloor'\n", str);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
case NAME_Renderstyleceiling:
|
||||||
|
{
|
||||||
|
const char *str = CheckString(key);
|
||||||
|
if (!stricmp(str, "translucent")) sec->ChangeFlags(sector_t::ceiling, PLANEF_ADDITIVE, 0);
|
||||||
|
else if (!stricmp(str, "add")) sec->ChangeFlags(sector_t::ceiling, 0, PLANEF_ADDITIVE);
|
||||||
|
else sc.ScriptMessage("Unknown value \"%s\" for 'renderstyleceiling'\n", str);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
case NAME_Lightfloorabsolute:
|
case NAME_Lightfloorabsolute:
|
||||||
if (CheckBool(key)) sec->ChangeFlags(sector_t::floor, 0, PLANEF_ABSLIGHTING);
|
if (CheckBool(key)) sec->ChangeFlags(sector_t::floor, 0, PLANEF_ABSLIGHTING);
|
||||||
else sec->ChangeFlags(sector_t::floor, PLANEF_ABSLIGHTING, 0);
|
else sec->ChangeFlags(sector_t::floor, PLANEF_ABSLIGHTING, 0);
|
||||||
|
|
|
@ -1193,6 +1193,7 @@ void R_Subsector (subsector_t *sub)
|
||||||
frontsector->GetTexture(sector_t::ceiling),
|
frontsector->GetTexture(sector_t::ceiling),
|
||||||
ceilinglightlevel + r_actualextralight, // killough 4/11/98
|
ceilinglightlevel + r_actualextralight, // killough 4/11/98
|
||||||
frontsector->GetAlpha(sector_t::ceiling),
|
frontsector->GetAlpha(sector_t::ceiling),
|
||||||
|
!!(frontsector->GetFlags(sector_t::ceiling) & PLANEF_ADDITIVE),
|
||||||
frontsector->GetXOffset(sector_t::ceiling), // killough 3/7/98
|
frontsector->GetXOffset(sector_t::ceiling), // killough 3/7/98
|
||||||
frontsector->GetYOffset(sector_t::ceiling), // killough 3/7/98
|
frontsector->GetYOffset(sector_t::ceiling), // killough 3/7/98
|
||||||
frontsector->GetXScale(sector_t::ceiling),
|
frontsector->GetXScale(sector_t::ceiling),
|
||||||
|
@ -1226,6 +1227,7 @@ void R_Subsector (subsector_t *sub)
|
||||||
frontsector->GetTexture(sector_t::floor),
|
frontsector->GetTexture(sector_t::floor),
|
||||||
floorlightlevel + r_actualextralight, // killough 3/16/98
|
floorlightlevel + r_actualextralight, // killough 3/16/98
|
||||||
frontsector->GetAlpha(sector_t::floor),
|
frontsector->GetAlpha(sector_t::floor),
|
||||||
|
!!(frontsector->GetFlags(sector_t::floor) & PLANEF_ADDITIVE),
|
||||||
frontsector->GetXOffset(sector_t::floor), // killough 3/7/98
|
frontsector->GetXOffset(sector_t::floor), // killough 3/7/98
|
||||||
frontsector->GetYOffset(sector_t::floor), // killough 3/7/98
|
frontsector->GetYOffset(sector_t::floor), // killough 3/7/98
|
||||||
frontsector->GetXScale(sector_t::floor),
|
frontsector->GetXScale(sector_t::floor),
|
||||||
|
@ -1285,6 +1287,7 @@ void R_Subsector (subsector_t *sub)
|
||||||
frontsector->GetTexture(sector_t::floor),
|
frontsector->GetTexture(sector_t::floor),
|
||||||
floorlightlevel + r_actualextralight, // killough 3/16/98
|
floorlightlevel + r_actualextralight, // killough 3/16/98
|
||||||
frontsector->GetAlpha(sector_t::floor),
|
frontsector->GetAlpha(sector_t::floor),
|
||||||
|
!!(frontsector->GetFlags(sector_t::floor) & PLANEF_ADDITIVE),
|
||||||
frontsector->GetXOffset(sector_t::floor), // killough 3/7/98
|
frontsector->GetXOffset(sector_t::floor), // killough 3/7/98
|
||||||
frontsector->GetYOffset(sector_t::floor), // killough 3/7/98
|
frontsector->GetYOffset(sector_t::floor), // killough 3/7/98
|
||||||
frontsector->GetXScale(sector_t::floor),
|
frontsector->GetXScale(sector_t::floor),
|
||||||
|
@ -1349,6 +1352,7 @@ void R_Subsector (subsector_t *sub)
|
||||||
frontsector->GetTexture(sector_t::ceiling),
|
frontsector->GetTexture(sector_t::ceiling),
|
||||||
ceilinglightlevel + r_actualextralight, // killough 4/11/98
|
ceilinglightlevel + r_actualextralight, // killough 4/11/98
|
||||||
frontsector->GetAlpha(sector_t::ceiling),
|
frontsector->GetAlpha(sector_t::ceiling),
|
||||||
|
!!(frontsector->GetFlags(sector_t::ceiling) & PLANEF_ADDITIVE),
|
||||||
frontsector->GetXOffset(sector_t::ceiling), // killough 3/7/98
|
frontsector->GetXOffset(sector_t::ceiling), // killough 3/7/98
|
||||||
frontsector->GetYOffset(sector_t::ceiling), // killough 3/7/98
|
frontsector->GetYOffset(sector_t::ceiling), // killough 3/7/98
|
||||||
frontsector->GetXScale(sector_t::ceiling),
|
frontsector->GetXScale(sector_t::ceiling),
|
||||||
|
|
|
@ -322,7 +322,8 @@ inline FArchive &operator<< (FArchive &arc, secplane_t &plane)
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
PLANEF_ABSLIGHTING = 1, // floor/ceiling light is absolute, not relative
|
PLANEF_ABSLIGHTING = 1, // floor/ceiling light is absolute, not relative
|
||||||
PLANEF_BLOCKED = 2 // can not be moved anymore.
|
PLANEF_BLOCKED = 2, // can not be moved anymore.
|
||||||
|
PLANEF_ADDITIVE = 4, // rendered additive
|
||||||
};
|
};
|
||||||
|
|
||||||
// Internal sector flags
|
// Internal sector flags
|
||||||
|
|
|
@ -152,7 +152,7 @@ extern "C" void R_SetSpanColormap_ASM (BYTE *colormap);
|
||||||
extern "C" void R_SetTiltedSpanSource_ASM (const BYTE *flat);
|
extern "C" void R_SetTiltedSpanSource_ASM (const BYTE *flat);
|
||||||
extern "C" BYTE *ds_curcolormap, *ds_cursource, *ds_curtiltedsource;
|
extern "C" BYTE *ds_curcolormap, *ds_cursource, *ds_curtiltedsource;
|
||||||
#endif
|
#endif
|
||||||
void R_DrawSinglePlane (visplane_t *, fixed_t alpha, bool masked);
|
void R_DrawSinglePlane (visplane_t *, fixed_t alpha, bool additive, bool masked);
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
|
@ -527,7 +527,7 @@ static visplane_t *new_visplane (unsigned hash)
|
||||||
// killough 2/28/98: Add offsets
|
// killough 2/28/98: Add offsets
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
visplane_t *R_FindPlane (const secplane_t &height, FTextureID picnum, int lightlevel, fixed_t alpha,
|
visplane_t *R_FindPlane (const secplane_t &height, FTextureID picnum, int lightlevel, fixed_t alpha, bool additive,
|
||||||
fixed_t xoffs, fixed_t yoffs,
|
fixed_t xoffs, fixed_t yoffs,
|
||||||
fixed_t xscale, fixed_t yscale, angle_t angle,
|
fixed_t xscale, fixed_t yscale, angle_t angle,
|
||||||
int sky, ASkyViewpoint *skybox)
|
int sky, ASkyViewpoint *skybox)
|
||||||
|
@ -546,6 +546,7 @@ visplane_t *R_FindPlane (const secplane_t &height, FTextureID picnum, int lightl
|
||||||
yscale = 0;
|
yscale = 0;
|
||||||
angle = 0;
|
angle = 0;
|
||||||
alpha = 0;
|
alpha = 0;
|
||||||
|
additive = false;
|
||||||
plane.a = plane.b = plane.d = 0;
|
plane.a = plane.b = plane.d = 0;
|
||||||
// [RH] Map floor skies and ceiling skies to separate visplanes. This isn't
|
// [RH] Map floor skies and ceiling skies to separate visplanes. This isn't
|
||||||
// always necessary, but it is needed if a floor and ceiling sky are in the
|
// always necessary, but it is needed if a floor and ceiling sky are in the
|
||||||
|
@ -572,6 +573,7 @@ visplane_t *R_FindPlane (const secplane_t &height, FTextureID picnum, int lightl
|
||||||
else sky = 0; // not skyflatnum so it can't be a sky
|
else sky = 0; // not skyflatnum so it can't be a sky
|
||||||
skybox = NULL;
|
skybox = NULL;
|
||||||
alpha = FRACUNIT;
|
alpha = FRACUNIT;
|
||||||
|
additive = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// New visplane algorithm uses hash table -- killough
|
// New visplane algorithm uses hash table -- killough
|
||||||
|
@ -595,7 +597,8 @@ visplane_t *R_FindPlane (const secplane_t &height, FTextureID picnum, int lightl
|
||||||
// headache inducing logic... :(
|
// headache inducing logic... :(
|
||||||
(!(skybox->flags & MF_JUSTATTACKED)) ||
|
(!(skybox->flags & MF_JUSTATTACKED)) ||
|
||||||
(
|
(
|
||||||
check->alpha == alpha &&
|
check->Alpha == alpha &&
|
||||||
|
check->Additive == additive &&
|
||||||
(alpha == 0 || // if alpha is > 0 everything needs to be checked
|
(alpha == 0 || // if alpha is > 0 everything needs to be checked
|
||||||
(plane == check->height &&
|
(plane == check->height &&
|
||||||
picnum == check->picnum &&
|
picnum == check->picnum &&
|
||||||
|
@ -663,7 +666,8 @@ visplane_t *R_FindPlane (const secplane_t &height, FTextureID picnum, int lightl
|
||||||
check->viewy = stacked_viewy;
|
check->viewy = stacked_viewy;
|
||||||
check->viewz = stacked_viewz;
|
check->viewz = stacked_viewz;
|
||||||
check->viewangle = stacked_angle;
|
check->viewangle = stacked_angle;
|
||||||
check->alpha = alpha;
|
check->Alpha = alpha;
|
||||||
|
check->Additive = additive;
|
||||||
check->CurrentMirror = CurrentMirror;
|
check->CurrentMirror = CurrentMirror;
|
||||||
check->MirrorFlags = MirrorFlags;
|
check->MirrorFlags = MirrorFlags;
|
||||||
check->CurrentSkybox = CurrentSkybox;
|
check->CurrentSkybox = CurrentSkybox;
|
||||||
|
@ -751,7 +755,8 @@ visplane_t *R_CheckPlane (visplane_t *pl, int start, int stop)
|
||||||
new_pl->viewz = pl->viewz;
|
new_pl->viewz = pl->viewz;
|
||||||
new_pl->viewangle = pl->viewangle;
|
new_pl->viewangle = pl->viewangle;
|
||||||
new_pl->sky = pl->sky;
|
new_pl->sky = pl->sky;
|
||||||
new_pl->alpha = pl->alpha;
|
new_pl->Alpha = pl->Alpha;
|
||||||
|
new_pl->Additive = pl->Additive;
|
||||||
new_pl->CurrentMirror = pl->CurrentMirror;
|
new_pl->CurrentMirror = pl->CurrentMirror;
|
||||||
new_pl->MirrorFlags = pl->MirrorFlags;
|
new_pl->MirrorFlags = pl->MirrorFlags;
|
||||||
new_pl->CurrentSkybox = pl->CurrentSkybox;
|
new_pl->CurrentSkybox = pl->CurrentSkybox;
|
||||||
|
@ -993,7 +998,7 @@ void R_DrawPlanes ()
|
||||||
// kg3D - draw only real planes now
|
// kg3D - draw only real planes now
|
||||||
if(pl->sky >= 0) {
|
if(pl->sky >= 0) {
|
||||||
vpcount++;
|
vpcount++;
|
||||||
R_DrawSinglePlane (pl, OPAQUE, false);
|
R_DrawSinglePlane (pl, OPAQUE, false, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1019,7 +1024,7 @@ void R_DrawHeightPlanes(fixed_t height)
|
||||||
viewy = pl->viewy;
|
viewy = pl->viewy;
|
||||||
viewangle = pl->viewangle;
|
viewangle = pl->viewangle;
|
||||||
MirrorFlags = pl->MirrorFlags;
|
MirrorFlags = pl->MirrorFlags;
|
||||||
R_DrawSinglePlane (pl, pl->sky & 0x7FFFFFFF, true);
|
R_DrawSinglePlane (pl, pl->sky & 0x7FFFFFFF, false, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1034,7 +1039,7 @@ void R_DrawHeightPlanes(fixed_t height)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void R_DrawSinglePlane (visplane_t *pl, fixed_t alpha, bool masked)
|
void R_DrawSinglePlane (visplane_t *pl, fixed_t alpha, bool additive, bool masked)
|
||||||
{
|
{
|
||||||
// pl->angle = pa<<ANGLETOFINESHIFT;
|
// pl->angle = pa<<ANGLETOFINESHIFT;
|
||||||
|
|
||||||
|
@ -1059,7 +1064,7 @@ void R_DrawSinglePlane (visplane_t *pl, fixed_t alpha, bool masked)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!masked)
|
if (!masked && !additive)
|
||||||
{ // If we're not supposed to see through this plane, draw it opaque.
|
{ // If we're not supposed to see through this plane, draw it opaque.
|
||||||
alpha = OPAQUE;
|
alpha = OPAQUE;
|
||||||
}
|
}
|
||||||
|
@ -1077,11 +1082,11 @@ void R_DrawSinglePlane (visplane_t *pl, fixed_t alpha, bool masked)
|
||||||
|
|
||||||
if (r_drawflat || ((pl->height.a == 0 && pl->height.b == 0) && !tilt))
|
if (r_drawflat || ((pl->height.a == 0 && pl->height.b == 0) && !tilt))
|
||||||
{
|
{
|
||||||
R_DrawNormalPlane (pl, alpha, masked);
|
R_DrawNormalPlane (pl, alpha, additive, masked);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
R_DrawTiltedPlane (pl, alpha, masked);
|
R_DrawTiltedPlane (pl, alpha, additive, masked);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
NetUpdate ();
|
NetUpdate ();
|
||||||
|
@ -1151,7 +1156,7 @@ void R_DrawSkyBoxes ()
|
||||||
|
|
||||||
if (pl->maxx < pl->minx || !r_skyboxes || numskyboxes == MAX_SKYBOX_PLANES)
|
if (pl->maxx < pl->minx || !r_skyboxes || numskyboxes == MAX_SKYBOX_PLANES)
|
||||||
{
|
{
|
||||||
R_DrawSinglePlane (pl, OPAQUE, false);
|
R_DrawSinglePlane (pl, OPAQUE, false, false);
|
||||||
*freehead = pl;
|
*freehead = pl;
|
||||||
freehead = &pl->next;
|
freehead = &pl->next;
|
||||||
continue;
|
continue;
|
||||||
|
@ -1270,9 +1275,9 @@ void R_DrawSkyBoxes ()
|
||||||
vissprite_p = firstvissprite;
|
vissprite_p = firstvissprite;
|
||||||
|
|
||||||
visplaneStack.Pop (pl);
|
visplaneStack.Pop (pl);
|
||||||
if (pl->alpha > 0)
|
if (pl->Alpha > 0)
|
||||||
{
|
{
|
||||||
R_DrawSinglePlane (pl, pl->alpha, true);
|
R_DrawSinglePlane (pl, pl->Alpha, pl->Additive, true);
|
||||||
}
|
}
|
||||||
*freehead = pl;
|
*freehead = pl;
|
||||||
freehead = &pl->next;
|
freehead = &pl->next;
|
||||||
|
@ -1438,7 +1443,7 @@ void R_DrawSkyPlane (visplane_t *pl)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool masked)
|
void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool additive, bool masked)
|
||||||
{
|
{
|
||||||
#ifdef X86_ASM
|
#ifdef X86_ASM
|
||||||
if (ds_source != ds_cursource)
|
if (ds_source != ds_cursource)
|
||||||
|
@ -1500,6 +1505,7 @@ void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool masked)
|
||||||
else
|
else
|
||||||
plane_shade = true;
|
plane_shade = true;
|
||||||
|
|
||||||
|
// Additive not supported yet because the drawer function doesn't look like it can handle it.
|
||||||
if (spanfunc != R_FillSpan)
|
if (spanfunc != R_FillSpan)
|
||||||
{
|
{
|
||||||
if (masked)
|
if (masked)
|
||||||
|
@ -1538,7 +1544,7 @@ void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool masked)
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void R_DrawTiltedPlane (visplane_t *pl, fixed_t alpha, bool masked)
|
void R_DrawTiltedPlane (visplane_t *pl, fixed_t alpha, bool additive, bool masked)
|
||||||
{
|
{
|
||||||
static const float ifloatpow2[16] =
|
static const float ifloatpow2[16] =
|
||||||
{
|
{
|
||||||
|
|
|
@ -54,7 +54,8 @@ struct visplane_s
|
||||||
float visibility;
|
float visibility;
|
||||||
fixed_t viewx, viewy, viewz;
|
fixed_t viewx, viewy, viewz;
|
||||||
angle_t viewangle;
|
angle_t viewangle;
|
||||||
fixed_t alpha;
|
fixed_t Alpha;
|
||||||
|
bool Additive;
|
||||||
|
|
||||||
// kg3D - keep track of mirror and skybox owner
|
// kg3D - keep track of mirror and skybox owner
|
||||||
int CurrentSkybox;
|
int CurrentSkybox;
|
||||||
|
@ -90,8 +91,8 @@ void R_ClearPlanes (bool fullclear);
|
||||||
void R_DrawPlanes ();
|
void R_DrawPlanes ();
|
||||||
void R_DrawSkyBoxes ();
|
void R_DrawSkyBoxes ();
|
||||||
void R_DrawSkyPlane (visplane_t *pl);
|
void R_DrawSkyPlane (visplane_t *pl);
|
||||||
void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool masked);
|
void R_DrawNormalPlane (visplane_t *pl, fixed_t alpha, bool additive, bool masked);
|
||||||
void R_DrawTiltedPlane (visplane_t *pl, fixed_t alpha, bool masked);
|
void R_DrawTiltedPlane (visplane_t *pl, fixed_t alpha, bool additive, bool masked);
|
||||||
void R_MapVisPlane (visplane_t *pl, void (*mapfunc)(int y, int x1));
|
void R_MapVisPlane (visplane_t *pl, void (*mapfunc)(int y, int x1));
|
||||||
|
|
||||||
visplane_t *R_FindPlane
|
visplane_t *R_FindPlane
|
||||||
|
@ -99,6 +100,7 @@ visplane_t *R_FindPlane
|
||||||
FTextureID picnum,
|
FTextureID picnum,
|
||||||
int lightlevel,
|
int lightlevel,
|
||||||
fixed_t alpha,
|
fixed_t alpha,
|
||||||
|
bool additive,
|
||||||
fixed_t xoffs, // killough 2/28/98: add x-y offsets
|
fixed_t xoffs, // killough 2/28/98: add x-y offsets
|
||||||
fixed_t yoffs,
|
fixed_t yoffs,
|
||||||
fixed_t xscale,
|
fixed_t xscale,
|
||||||
|
|
Loading…
Reference in a new issue