diff --git a/src/p_setup.c b/src/p_setup.c index 05356ac02a19e19e29937fda5ed2a9667c4eada1..c3b50b95d8460423559a65513f81a35c3f2df6e5 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -2678,6 +2678,48 @@ static void P_ConvertBinaryMap(void) lines[i].special = 700; break; } + case 704: //Slope front sector floor by 3 tagged vertices + case 705: //Slope front sector ceiling by 3 tagged vertices + case 714: //Slope back sector floor by 3 tagged vertices + case 715: //Slope back sector ceiling by 3 tagged vertices + { + if (lines[i].special == 704) + lines[i].args[0] = 0; + else if (lines[i].special == 705) + lines[i].args[0] = 1; + else if (lines[i].special == 714) + lines[i].args[0] = 2; + else if (lines[i].special == 715) + lines[i].args[0] = 3; + + lines[i].args[1] = lines[i].tag; + + if (lines[i].flags & ML_EFFECT6) + { + UINT8 side = lines[i].special >= 714; + + if (side == 1 && lines[i].sidenum[1] == 0xffff) + CONS_Debug(DBG_GAMELOGIC, "P_ConvertBinaryMap: Line special %d (line #%s) missing 2nd side!\n", lines[i].special, sizeu1(i)); + else + { + lines[i].args[2] = sides[lines[i].sidenum[side]].textureoffset >> FRACBITS; + lines[i].args[3] = sides[lines[i].sidenum[side]].rowoffset >> FRACBITS; + } + } + else + { + lines[i].args[2] = lines[i].args[1]; + lines[i].args[3] = lines[i].args[1]; + } + + if (lines[i].flags & ML_NETONLY) + lines[i].args[4] |= SL_NOPHYSICS; + if (lines[i].flags & ML_NONET) + lines[i].args[4] |= SL_DYNAMIC; + + lines[i].special = 704; + break; + } default: break; } diff --git a/src/p_slopes.c b/src/p_slopes.c index 6c87d4aefc9c455333f2306e03bb97131ecf92bc..28ff96c50d49f04701a2dc0bbedd7134e5420c4e 100644 --- a/src/p_slopes.c +++ b/src/p_slopes.c @@ -458,44 +458,32 @@ static void line_SpawnViaVertexes(const int linenum, const boolean spawnthinker) line_t *line = lines + linenum; side_t *side; pslope_t **slopetoset; - UINT16 tag1, tag2, tag3; + UINT16 tag1 = line->args[1]; + UINT16 tag2 = line->args[2]; + UINT16 tag3 = line->args[3]; + UINT8 flags = line->args[4]; - UINT8 flags = 0; - if (line->flags & ML_NETONLY) - flags |= SL_NOPHYSICS; - if (line->flags & ML_NONET) - flags |= SL_DYNAMIC; - - switch(line->special) + switch(line->args[0]) { - case 704: + case 0: slopetoset = &line->frontsector->f_slope; side = &sides[line->sidenum[0]]; break; - case 705: + case 1: slopetoset = &line->frontsector->c_slope; side = &sides[line->sidenum[0]]; break; - case 714: + case 2: slopetoset = &line->backsector->f_slope; side = &sides[line->sidenum[1]]; break; - case 715: + case 3: slopetoset = &line->backsector->c_slope; side = &sides[line->sidenum[1]]; default: return; } - if (line->flags & ML_EFFECT6) - { - tag1 = line->tag; - tag2 = side->textureoffset >> FRACBITS; - tag3 = side->rowoffset >> FRACBITS; - } - else - tag1 = tag2 = tag3 = line->tag; - *slopetoset = MakeViaMapthings(tag1, tag2, tag3, flags, spawnthinker); side->sector->hasslope = true; @@ -561,9 +549,6 @@ void P_ResetDynamicSlopes(const boolean fromsave) { break; case 704: - case 705: - case 714: - case 715: line_SpawnViaVertexes(i, !fromsave); break;