- Fixed: The tagged version of TranslucentLine took the information for additive

translucency from the tagged linedef, not the control linedef.
- Added check for additive translucency to TRANMAP checking.


SVN r1202 (trunk)
This commit is contained in:
Christoph Oelckers 2008-09-06 18:09:41 +00:00
parent 87f0ba0bd2
commit 9e7bd3f8fa
2 changed files with 35 additions and 4 deletions

View file

@ -1,4 +1,7 @@
September 6, 2008 (Changes by Graf Zahl) September 6, 2008 (Changes by Graf Zahl)
- Fixed: The tagged version of TranslucentLine took the information for additive
translucency from the tagged linedef, not the control linedef.
- Added check for additive translucency to TRANMAP checking.
- Changed listener structure to directly contain the sound environment instead - Changed listener structure to directly contain the sound environment instead
of getting it from the zone in the low level code. of getting it from the zone in the low level code.
- Changed sound interface so that all references to game data like actors - Changed sound interface so that all references to game data like actors

View file

@ -1616,6 +1616,8 @@ void P_SaveLineSpecial (line_t *ld)
void P_FinishLoadingLineDef(line_t *ld, int alpha) void P_FinishLoadingLineDef(line_t *ld, int alpha)
{ {
bool additive = false;
ld->frontsector = ld->sidenum[0]!=NO_SIDE ? sides[ld->sidenum[0]].sector : 0; ld->frontsector = ld->sidenum[0]!=NO_SIDE ? sides[ld->sidenum[0]].sector : 0;
ld->backsector = ld->sidenum[1]!=NO_SIDE ? sides[ld->sidenum[1]].sector : 0; ld->backsector = ld->sidenum[1]!=NO_SIDE ? sides[ld->sidenum[1]].sector : 0;
float dx = FIXED2FLOAT(ld->v2->x - ld->v1->x); float dx = FIXED2FLOAT(ld->v2->x - ld->v1->x);
@ -1634,6 +1636,7 @@ void P_FinishLoadingLineDef(line_t *ld, int alpha)
{ {
sides[ld->sidenum[0]].linenum = linenum; sides[ld->sidenum[0]].linenum = linenum;
sides[ld->sidenum[0]].TexelLength = len; sides[ld->sidenum[0]].TexelLength = len;
} }
if (ld->sidenum[1] != NO_SIDE) if (ld->sidenum[1] != NO_SIDE)
{ {
@ -1647,15 +1650,22 @@ void P_FinishLoadingLineDef(line_t *ld, int alpha)
case TranslucentLine: // killough 4/11/98: translucent 2s textures case TranslucentLine: // killough 4/11/98: translucent 2s textures
// [RH] Second arg controls how opaque it is. // [RH] Second arg controls how opaque it is.
if (alpha < 0) if (alpha == -32767)
{ {
alpha = ld->args[1]; alpha = ld->args[1];
additive = !!ld->args[2];
} }
else if (alpha < 0)
{
alpha = -alpha;
additive = true;
}
alpha = Scale(alpha, FRACUNIT, 255); alpha = Scale(alpha, FRACUNIT, 255);
if (!ld->args[0]) if (!ld->args[0])
{ {
ld->Alpha = alpha; ld->Alpha = alpha;
if (ld->args[2] == 1) if (additive)
{ {
ld->flags |= ML_ADDTRANS; ld->flags |= ML_ADDTRANS;
} }
@ -1667,7 +1677,7 @@ void P_FinishLoadingLineDef(line_t *ld, int alpha)
if (lines[j].id == ld->args[0]) if (lines[j].id == ld->args[0])
{ {
lines[j].Alpha = alpha; lines[j].Alpha = alpha;
if (lines[j].args[2] == 1) if (additive)
{ {
lines[j].flags |= ML_ADDTRANS; lines[j].flags |= ML_ADDTRANS;
} }
@ -1871,7 +1881,7 @@ static void P_AllocateSideDefs (int count)
for (i = 0; i < count; i++) for (i = 0; i < count; i++)
{ {
sidetemp[i].a.special = sidetemp[i].a.tag = 0; sidetemp[i].a.special = sidetemp[i].a.tag = 0;
sidetemp[i].a.alpha = -1; sidetemp[i].a.alpha = -32767;
sidetemp[i].a.map = NO_SIDE; sidetemp[i].a.map = NO_SIDE;
} }
if (count < numsides) if (count < numsides)
@ -2027,12 +2037,30 @@ int P_DetermineTranslucency (int lumpnum)
FWadLump tranmap = Wads.OpenLumpNum (lumpnum); FWadLump tranmap = Wads.OpenLumpNum (lumpnum);
BYTE index; BYTE index;
PalEntry newcolor; PalEntry newcolor;
PalEntry newcolor2;
tranmap.Seek (GPalette.BlackIndex * 256 + GPalette.WhiteIndex, SEEK_SET); tranmap.Seek (GPalette.BlackIndex * 256 + GPalette.WhiteIndex, SEEK_SET);
tranmap.Read (&index, 1); tranmap.Read (&index, 1);
newcolor = GPalette.BaseColors[GPalette.Remap[index]]; newcolor = GPalette.BaseColors[GPalette.Remap[index]];
tranmap.Seek (GPalette.WhiteIndex * 256 + GPalette.BlackIndex, SEEK_SET);
tranmap.Read (&index, 1);
newcolor2 = GPalette.BaseColors[GPalette.Remap[index]];
if (newcolor2.r == 255) // if black on white results in white it's either
// fully transparent or additive
{
if (developer)
{
char lumpname[9];
lumpname[8] = 0;
Wads.GetLumpName (lumpname, lumpnum);
Printf ("%s appears to be additive translucency %d (%d%%)\n", lumpname, newcolor.r,
newcolor.r*100/255);
}
return -newcolor.r;
}
if (developer) if (developer)
{ {
char lumpname[9]; char lumpname[9];