diff --git a/extras/conf/udb/Includes/SRB222_linedefs.cfg b/extras/conf/udb/Includes/SRB222_linedefs.cfg index 934e60962ee6f9dac7fc2952a0814d3fc8159210..44da4134b646aea7c1b7ef278b835ffd7f27737f 100644 --- a/extras/conf/udb/Includes/SRB222_linedefs.cfg +++ b/extras/conf/udb/Includes/SRB222_linedefs.cfg @@ -1757,31 +1757,29 @@ udmf } arg1 { - title = "Visibility"; + title = "Alpha"; + default = 255; + } + arg2 + { + title = "Appearance"; type = 12; enum { 1 = "Don't render planes"; 2 = "Don't render sides"; 4 = "Render insides"; + 8 = "Render only insides"; + 16 = "No shadow"; + 32 = "Cut cyan flat pixels"; } } - arg2 + arg3 { title = "Tangibility"; type = 12; enum = "tangibility"; } - arg3 - { - title = "Appearance"; - type = 12; - enum - { - 1 = "Translucent"; - 2 = "No shadow"; - } - } } 120 @@ -1931,31 +1929,29 @@ udmf } arg1 { - title = "Visibility"; + title = "Alpha"; + default = 255; + } + arg2 + { + title = "Appearance"; type = 12; enum { 1 = "Don't render planes"; 2 = "Don't render sides"; 4 = "Render insides"; + 8 = "Render only insides"; + 16 = "No shadow"; + 32 = "Cut cyan flat pixels"; } } - arg2 + arg3 { title = "Tangibility"; type = 12; enum = "tangibility"; } - arg3 - { - title = "Appearance"; - type = 12; - enum - { - 1 = "Translucent"; - 2 = "No shadow"; - } - } arg4 { title = "Speed"; @@ -2011,14 +2007,8 @@ udmf } arg1 { - title = "Visibility"; - type = 12; - enum - { - 1 = "Don't render planes"; - 2 = "Don't render sides"; - 4 = "Don't render insides"; - } + title = "Alpha"; + default = 255; } arg2 { @@ -2026,8 +2016,12 @@ udmf type = 12; enum { - 1 = "Translucent"; - 2 = "No shadow"; + 1 = "Don't render planes"; + 2 = "Don't render sides"; + 4 = "Don't render insides"; + 8 = "Render only insides"; + 16 = "No shadow"; + 32 = "Cut cyan flat pixels"; } } } diff --git a/src/p_setup.c b/src/p_setup.c index 2eec9820ac12f1798b752f909290c9e47e518ce1..c2df65397c0164d77541e3ffaf3a6409e2c210c8 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -3016,35 +3016,36 @@ static void P_ConvertBinaryMap(void) case 105: //FOF: solid, invisible lines[i].args[0] = lines[i].tag; - //Visibility - if (lines[i].special == 105) - lines[i].args[1] = TMFV_NOPLANES|TMFV_NOSIDES; - else if (lines[i].special == 104) - lines[i].args[1] = TMFV_NOSIDES; - else if (lines[i].special == 103) - lines[i].args[1] = TMFV_NOPLANES; - - //Tangibility - if (lines[i].flags & ML_EFFECT1) - lines[i].args[2] |= TMFT_DONTBLOCKOTHERS; - if (lines[i].flags & ML_EFFECT2) - lines[i].args[2] |= TMFT_DONTBLOCKPLAYER; - - //Translucency + //Alpha if (lines[i].special == 102) { - lines[i].args[3] |= TMFA_TRANSLUCENT; if (lines[i].flags & ML_NOCLIMB) - lines[i].args[1] |= TMFV_TOGGLEINSIDES; + lines[i].args[2] |= TMFA_INSIDES; if (sides[lines[i].sidenum[0]].toptexture > 0) - lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255; + lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture; else - lines[i].alpha = FRACUNIT/2; + lines[i].args[1] = 128; } + else + lines[i].args[1] = 255; - //Shadow? + //Appearance + if (lines[i].special == 105) + lines[i].args[2] = TMFA_NOPLANES|TMFA_NOSIDES; + else if (lines[i].special == 104) + lines[i].args[2] = TMFA_NOSIDES; + else if (lines[i].special == 103) + lines[i].args[2] = TMFA_NOPLANES; if (lines[i].special != 100 && (lines[i].special != 104 || !(lines[i].flags & ML_NOCLIMB))) - lines[i].args[3] |= TMFA_NOSHADE; + lines[i].args[2] |= TMFA_NOSHADE; + if (lines[i].flags & ML_EFFECT6) + lines[i].args[2] |= TMFA_SPLAT; + + //Tangibility + if (lines[i].flags & ML_EFFECT1) + lines[i].args[3] |= TMFT_DONTBLOCKOTHERS; + if (lines[i].flags & ML_EFFECT2) + lines[i].args[3] |= TMFT_DONTBLOCKPLAYER; lines[i].special = 100; break; @@ -3098,40 +3099,41 @@ static void P_ConvertBinaryMap(void) case 146: //FOF: only tangible from sides lines[i].args[0] = lines[i].tag; - //Visibility + //Alpha + if (lines[i].special == 141 || lines[i].special == 142 || lines[i].special == 144 || lines[i].special == 145) + { + if (lines[i].flags & ML_NOCLIMB) + lines[i].args[2] |= TMFA_INSIDES; + if (sides[lines[i].sidenum[0]].toptexture > 0) + lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture; + else + lines[i].args[1] = 128; + } + else + lines[i].args[1] = 255; + + //Appearance if (lines[i].special == 142 || lines[i].special == 145) - lines[i].args[1] = TMFV_NOSIDES; + lines[i].args[2] = TMFA_NOSIDES; else if (lines[i].special == 146) - lines[i].args[1] = TMFV_NOPLANES; + lines[i].args[2] = TMFA_NOPLANES; + if (lines[i].special != 146 && (lines[i].flags & ML_NOCLIMB)) + lines[i].args[2] |= TMFA_NOSHADE; + if (lines[i].flags & ML_EFFECT6) + lines[i].args[2] |= TMFA_SPLAT; //Tangibility if (lines[i].special <= 142) - lines[i].args[2] |= TMFT_INTANGIBLEBOTTOM; + lines[i].args[3] |= TMFT_INTANGIBLEBOTTOM; else if (lines[i].special <= 145) - lines[i].args[2] |= TMFT_INTANGIBLETOP; + lines[i].args[3] |= TMFT_INTANGIBLETOP; else - lines[i].args[2] |= TMFT_INTANGIBLEBOTTOM|TMFT_INTANGIBLETOP; + lines[i].args[3] |= TMFT_INTANGIBLEBOTTOM|TMFT_INTANGIBLETOP; if (lines[i].flags & ML_EFFECT1) - lines[i].args[2] |= TMFT_DONTBLOCKOTHERS; + lines[i].args[3] |= TMFT_DONTBLOCKOTHERS; if (lines[i].flags & ML_EFFECT2) - lines[i].args[2] |= TMFT_DONTBLOCKPLAYER; - - //Translucency - if (lines[i].special == 141 || lines[i].special == 142 || lines[i].special == 144 || lines[i].special == 145) - { - lines[i].args[3] |= TMFA_TRANSLUCENT; - if (lines[i].flags & ML_NOCLIMB) - lines[i].args[1] |= TMFV_TOGGLEINSIDES; - if (sides[lines[i].sidenum[0]].toptexture > 0) - lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255; - else - lines[i].alpha = FRACUNIT/2; - } - - //Shadow? - if (lines[i].special != 146 && (lines[i].flags & ML_NOCLIMB)) - lines[i].args[3] |= TMFA_NOSHADE; + lines[i].args[3] |= TMFT_DONTBLOCKPLAYER; lines[i].special = 100; break; @@ -3227,33 +3229,34 @@ static void P_ConvertBinaryMap(void) case 195: // FOF: Rising, intangible from bottom, translucent lines[i].args[0] = lines[i].tag; - //Visibility - if (lines[i].special == 193) - lines[i].args[1] = TMFV_NOPLANES|TMFV_NOSIDES; - if (lines[i].special >= 194) - lines[i].args[1] = TMFV_TOGGLEINSIDES; - - //Tangibility - if (lines[i].flags & ML_EFFECT1) - lines[i].args[2] |= TMFT_DONTBLOCKOTHERS; - if (lines[i].flags & ML_EFFECT2) - lines[i].args[2] |= TMFT_DONTBLOCKPLAYER; - if (lines[i].special >= 194) - lines[i].args[2] |= TMFT_INTANGIBLEBOTTOM; - //Translucency if (lines[i].special == 192 || lines[i].special == 195) { - lines[i].args[3] |= TMFA_TRANSLUCENT; if (sides[lines[i].sidenum[0]].toptexture > 0) - lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255; + lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture; else - lines[i].alpha = FRACUNIT/2; + lines[i].args[1] = 128; } + else + lines[i].args[1] = 255; - //Shadow? + //Appearance + if (lines[i].special == 193) + lines[i].args[2] = TMFA_NOPLANES|TMFA_NOSIDES; + if (lines[i].special >= 194) + lines[i].args[2] = TMFA_INSIDES; if (lines[i].special != 190 && (lines[i].special <= 193 || lines[i].flags & ML_NOCLIMB)) - lines[i].args[3] |= TMFA_NOSHADE; + lines[i].args[2] |= TMFA_NOSHADE; + if (lines[i].flags & ML_EFFECT6) + lines[i].args[2] |= TMFA_SPLAT; + + //Tangibility + if (lines[i].flags & ML_EFFECT1) + lines[i].args[3] |= TMFT_DONTBLOCKOTHERS; + if (lines[i].flags & ML_EFFECT2) + lines[i].args[3] |= TMFT_DONTBLOCKPLAYER; + if (lines[i].special >= 194) + lines[i].args[3] |= TMFT_INTANGIBLEBOTTOM; //Speed lines[i].args[4] = P_AproxDistance(lines[i].dx, lines[i].dy) >> FRACBITS; @@ -3282,23 +3285,26 @@ static void P_ConvertBinaryMap(void) case 222: //FOF: Intangible, sides only lines[i].args[0] = lines[i].tag; - //Visibility - if (lines[i].special == 222) - lines[i].args[1] |= TMFV_NOPLANES; - if (lines[i].special == 221) - lines[i].args[1] |= TMFV_TOGGLEINSIDES; - - //Appearance + //Alpha if (lines[i].special == 221) { - lines[i].args[2] |= TMFA_TRANSLUCENT; if (sides[lines[i].sidenum[0]].toptexture > 0) - lines[i].alpha = (sides[lines[i].sidenum[0]].toptexture << FRACBITS)/255; + lines[i].args[1] = sides[lines[i].sidenum[0]].toptexture; else - lines[i].alpha = FRACUNIT/2; + lines[i].args[1] = 128; } + else + lines[i].args[1] = 255; + + //Appearance + if (lines[i].special == 222) + lines[i].args[2] |= TMFA_NOPLANES; + if (lines[i].special != 221) + lines[i].args[2] |= TMFA_INSIDES; if (lines[i].special != 220 && !(lines[i].flags & ML_NOCLIMB)) lines[i].args[2] |= TMFA_NOSHADE; + if (lines[i].flags & ML_EFFECT6) + lines[i].args[2] |= TMFA_SPLAT; lines[i].special = 220; break; diff --git a/src/p_spec.c b/src/p_spec.c index 6373478b8f2baa23049fac2953b9294a9efbeebc..1c0a4ce9d8d9777d2c0d42a9ebce6b55a1378c21 100644 --- a/src/p_spec.c +++ b/src/p_spec.c @@ -6602,46 +6602,51 @@ void P_SpawnSpecials(boolean fromnetsave) case 100: // FOF (solid) ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL; - //Visibility settings - if (lines[i].args[1] & TMFV_NOPLANES) + //Appearance settings + if (lines[i].args[2] & TMFA_NOPLANES) ffloorflags &= ~FF_RENDERPLANES; - if (lines[i].args[1] & TMFV_NOSIDES) + if (lines[i].args[2] & TMFA_NOSIDES) ffloorflags &= ~FF_RENDERSIDES; - if (lines[i].args[1] & TMFV_TOGGLEINSIDES) + if (lines[i].args[2] & TMFA_INSIDES) { if (ffloorflags & FF_RENDERPLANES) ffloorflags |= FF_BOTHPLANES; if (ffloorflags & FF_RENDERSIDES) ffloorflags |= FF_ALLSIDES; } + if (lines[i].args[2] & TMFA_ONLYINSIDES) + { + if (ffloorflags & FF_RENDERPLANES) + ffloorflags |= FF_INVERTPLANES; + if (ffloorflags & FF_RENDERSIDES) + ffloorflags |= FF_INVERTSIDES; + } + if (lines[i].args[2] & TMFA_NOSHADE) + ffloorflags |= FF_NOSHADE; + if (lines[i].args[2] & TMFA_SPLAT) + ffloorflags |= FF_SPLAT; //Tangibility settings - if (lines[i].args[2] & TMFT_INTANGIBLETOP) + if (lines[i].args[3] & TMFT_INTANGIBLETOP) ffloorflags |= FF_REVERSEPLATFORM; - if (lines[i].args[2] & TMFT_INTANGIBLEBOTTOM) + if (lines[i].args[3] & TMFT_INTANGIBLEBOTTOM) ffloorflags |= FF_PLATFORM; - if (lines[i].args[2] & TMFT_DONTBLOCKPLAYER) + if (lines[i].args[3] & TMFT_DONTBLOCKPLAYER) ffloorflags &= ~FF_BLOCKPLAYER; - if (lines[i].args[2] & TMFT_DONTBLOCKOTHERS) + if (lines[i].args[3] & TMFT_DONTBLOCKOTHERS) ffloorflags &= ~FF_BLOCKOTHERS; - //Appearance settings - if ((lines[i].args[3] & TMFA_TRANSLUCENT) && (ffloorflags & FF_RENDERALL)) //Translucent - ffloorflags |= FF_TRANSLUCENT; - if (lines[i].args[3] & TMFA_NOSHADE) - ffloorflags |= FF_NOSHADE; - //Cutting options if (ffloorflags & FF_RENDERALL) { //If translucent or player can enter it, cut inner walls - if ((ffloorflags & FF_TRANSLUCENT) || (lines[i].args[2] & TMFT_VISIBLEFROMINSIDE)) + if ((lines[i].args[1] < 255) || (lines[i].args[3] & TMFT_VISIBLEFROMINSIDE)) ffloorflags |= FF_CUTEXTRA|FF_EXTRA; else ffloorflags |= FF_CUTLEVEL; } - P_AddFakeFloorsByLine(i, (ffloorflags & FF_TRANSLUCENT) ? (lines[i].alpha * 0xff) >> FRACBITS : 0xff, ffloorflags, secthinkers); + P_AddFakeFloorsByLine(i, lines[i].args[1], ffloorflags, secthinkers); break; case 120: // FOF (water) @@ -6765,40 +6770,45 @@ void P_SpawnSpecials(boolean fromnetsave) ffloorflags = FF_EXISTS|FF_SOLID|FF_RENDERALL; - //Visibility settings - if (lines[i].args[1] & TMFV_NOPLANES) + //Appearance settings + if (lines[i].args[2] & TMFA_NOPLANES) ffloorflags &= ~FF_RENDERPLANES; - if (lines[i].args[1] & TMFV_NOSIDES) + if (lines[i].args[2] & TMFA_NOSIDES) ffloorflags &= ~FF_RENDERSIDES; - if (lines[i].args[1] & TMFV_TOGGLEINSIDES) + if (lines[i].args[2] & TMFA_INSIDES) { if (ffloorflags & FF_RENDERPLANES) ffloorflags |= FF_BOTHPLANES; if (ffloorflags & FF_RENDERSIDES) ffloorflags |= FF_ALLSIDES; } + if (lines[i].args[2] & TMFA_ONLYINSIDES) + { + if (ffloorflags & FF_RENDERPLANES) + ffloorflags |= FF_INVERTPLANES; + if (ffloorflags & FF_RENDERSIDES) + ffloorflags |= FF_INVERTSIDES; + } + if (lines[i].args[2] & TMFA_NOSHADE) + ffloorflags |= FF_NOSHADE; + if (lines[i].args[2] & TMFA_SPLAT) + ffloorflags |= FF_SPLAT; //Tangibility settings - if (lines[i].args[2] & TMFT_INTANGIBLETOP) + if (lines[i].args[3] & TMFT_INTANGIBLETOP) ffloorflags |= FF_REVERSEPLATFORM; - if (lines[i].args[2] & TMFT_INTANGIBLEBOTTOM) + if (lines[i].args[3] & TMFT_INTANGIBLEBOTTOM) ffloorflags |= FF_PLATFORM; - if (lines[i].args[2] & TMFT_DONTBLOCKPLAYER) + if (lines[i].args[3] & TMFT_DONTBLOCKPLAYER) ffloorflags &= ~FF_BLOCKPLAYER; - if (lines[i].args[2] & TMFT_DONTBLOCKOTHERS) + if (lines[i].args[3] & TMFT_DONTBLOCKOTHERS) ffloorflags &= ~FF_BLOCKOTHERS; - //Appearance settings - if ((lines[i].args[3] & TMFA_TRANSLUCENT) && (ffloorflags & FF_RENDERALL)) //Translucent - ffloorflags |= FF_TRANSLUCENT; - if (lines[i].args[3] & TMFA_NOSHADE) - ffloorflags |= FF_NOSHADE; - //Cutting options if (ffloorflags & FF_RENDERALL) { //If translucent or player can enter it, cut inner walls - if ((ffloorflags & FF_TRANSLUCENT) || (lines[i].args[2] & TMFT_VISIBLEFROMINSIDE)) + if ((lines[i].args[1] < 255) || (lines[i].args[3] & TMFT_VISIBLEFROMINSIDE)) ffloorflags |= FF_CUTEXTRA|FF_EXTRA; else ffloorflags |= FF_CUTLEVEL; @@ -6827,24 +6837,29 @@ void P_SpawnSpecials(boolean fromnetsave) case 220: //Intangible ffloorflags = FF_EXISTS|FF_RENDERALL|FF_CUTEXTRA|FF_EXTRA|FF_CUTSPRITES; - //Visibility settings - if (lines[i].args[1] & TMFV_NOPLANES) + //Appearance settings + if (lines[i].args[2] & TMFA_NOPLANES) ffloorflags &= ~FF_RENDERPLANES; - if (lines[i].args[1] & TMFV_NOSIDES) + if (lines[i].args[2] & TMFA_NOSIDES) ffloorflags &= ~FF_RENDERSIDES; - if (!(lines[i].args[1] & TMFV_TOGGLEINSIDES)) + if (!(lines[i].args[2] & TMFA_INSIDES)) { if (ffloorflags & FF_RENDERPLANES) ffloorflags |= FF_BOTHPLANES; if (ffloorflags & FF_RENDERSIDES) ffloorflags |= FF_ALLSIDES; } - - //Appearance settings - if ((lines[i].args[2] & TMFA_TRANSLUCENT) && (ffloorflags & FF_RENDERALL)) - ffloorflags |= FF_TRANSLUCENT; + if (lines[i].args[2] & TMFA_ONLYINSIDES) + { + if (ffloorflags & FF_RENDERPLANES) + ffloorflags |= FF_INVERTPLANES; + if (ffloorflags & FF_RENDERSIDES) + ffloorflags |= FF_INVERTSIDES; + } if (lines[i].args[2] & TMFA_NOSHADE) ffloorflags |= FF_NOSHADE; + if (lines[i].args[2] & TMFA_SPLAT) + ffloorflags |= FF_SPLAT; P_AddFakeFloorsByLine(i, (ffloorflags & FF_TRANSLUCENT) ? (lines[i].alpha * 0xff) >> FRACBITS : 0xff, ffloorflags, secthinkers); break; diff --git a/src/p_spec.h b/src/p_spec.h index a5717e1d1e5a427d26fb8b5e71dfa25110535af7..52dcf6786b0c77e8b6b448ce64e8c5f8517476a0 100644 --- a/src/p_spec.h +++ b/src/p_spec.h @@ -24,10 +24,13 @@ extern mobj_t *skyboxcenterpnts[16]; // array of MT_SKYBOX centerpoint mobjs //FOF flags typedef enum { - TMFV_NOPLANES = 1, - TMFV_NOSIDES = 1<<1, - TMFV_TOGGLEINSIDES = 1<<2, -} textmapfofvisibility_t; + TMFA_NOPLANES = 1, + TMFA_NOSIDES = 1<<1, + TMFA_INSIDES = 1<<2, + TMFA_ONLYINSIDES = 1<<3, + TMFA_NOSHADE = 1<<4, + TMFA_SPLAT = 1<<5, +} textmapfofappearance_t; typedef enum { @@ -36,14 +39,9 @@ typedef enum TMFT_DONTBLOCKPLAYER = 1<<2, TMFT_VISIBLEFROMINSIDE = (TMFT_INTANGIBLETOP|TMFT_INTANGIBLEBOTTOM|TMFT_DONTBLOCKPLAYER), TMFT_DONTBLOCKOTHERS = 1<<3, + TMFT_INTANGIBLE = (TMFT_DONTBLOCKPLAYER|TMFT_DONTBLOCKOTHERS), } textmapfoftangibility_t; -typedef enum -{ - TMFA_TRANSLUCENT = 1, - TMFA_NOSHADE = 1<<1, -} textmapfofappearance_t; - typedef enum { TMFW_NOSIDES = 1,