diff --git a/src/p_setup.c b/src/p_setup.c index ec6cb64d7..02c66e9bd 100644 --- a/src/p_setup.c +++ b/src/p_setup.c @@ -722,7 +722,7 @@ static void GeneralDefaults(void) side_t *sd; sector_t *sc; mapthing_t *mt; -// vertex_t* vt; + vertex_t* vt; for (i = 0, ld = lines; i < numlines; i++, ld++) { @@ -848,7 +848,7 @@ static void GeneralDefaults(void) mt->xdeathtrigger = 0; mt->raisetrigger = 0;*/ } -/* + for (i = 0, vt = vertexes; i < numvertexes; i++, vt++) { // Initialization. @@ -857,7 +857,7 @@ static void GeneralDefaults(void) vt->floorzset = false; vt->ceilingzset = false; } -*/ + } /** Set map defaults in UDMF format. @@ -1002,7 +1002,6 @@ static void TextmapVertex(UINT32 i, char *param) vertexes[i].x = FLOAT_TO_FIXED(atof(M_GetToken(NULL))); else if (fastcmp(param, "y")) vertexes[i].y = FLOAT_TO_FIXED(atof(M_GetToken(NULL))); -#ifdef ADVUDMF else if (fastcmp(param, "zfloor")) { vertexes[i].floorz = FLOAT_TO_FIXED(atof(M_GetToken(NULL))); @@ -1013,7 +1012,6 @@ static void TextmapVertex(UINT32 i, char *param) vertexes[i].ceilingz = FLOAT_TO_FIXED(atof(M_GetToken(NULL))); vertexes[i].ceilingzset = true; } -#endif } /** Auxiliary function for TextmapParse. diff --git a/src/p_slopes.c b/src/p_slopes.c index 89d265fa4..64f11eb72 100644 --- a/src/p_slopes.c +++ b/src/p_slopes.c @@ -508,6 +508,56 @@ static void line_SpawnViaVertexes(const int linenum, const boolean spawnthinker) side->sector->hasslope = true; } +/// Spawn textmap vertex slopes. +void SpawnVertexSlopes (void) +{ + line_t *l1, *l2; + sector_t* sc; + vertex_t *v1, *v2, *v3; + size_t i; + for (i = 0, sc = sectors; i < numsectors; i++, sc++) + { + // The vertex slopes only work for 3-vertex sectors (and thus 3-sided sectors). + if (sc->linecount != 3) + continue; + + l1 = sc->lines[0]; + l2 = sc->lines[1]; + + // Determine the vertexes. + v1 = l1->v1; + v2 = l1->v2; + if ((l2->v1 != v1) && (l2->v1 != v2)) + v3 = l2->v1; + else + v3 = l2->v2; + + if (v1->floorzset || v2->floorzset || v3->floorzset) + { + vector3_t vtx[3] = { + {v1->x, v1->y, v1->floorzset == true ? v1->floorz : sc->floorheight}, + {v2->x, v2->y, v2->floorzset == true ? v2->floorz : sc->floorheight}, + {v3->x, v3->y, v3->floorzset == true ? v3->floorz : sc->floorheight}}; + pslope_t* slop = Slope_Add(0); + sc->f_slope = slop; + sc->hasslope = true; + ReconfigureViaVertexes(slop, vtx[0], vtx[1], vtx[2]); + } + + if (v1->ceilingzset || v2->ceilingzset || v3->ceilingzset) + { + vector3_t vtx[3] = { + {v1->x, v1->y, v1->ceilingzset == true ? v1->ceilingz : sc->ceilingheight}, + {v2->x, v2->y, v2->ceilingzset == true ? v2->ceilingz : sc->ceilingheight}, + {v3->x, v3->y, v3->ceilingzset == true ? v3->ceilingz : sc->ceilingheight}}; + pslope_t* slop = Slope_Add(0); + sc->c_slope = slop; + sc->hasslope = true; + ReconfigureViaVertexes(slop, vtx[0], vtx[1], vtx[2]); + } + + } +} // // P_CopySectorSlope @@ -561,6 +611,9 @@ void P_ResetDynamicSlopes(const UINT32 fromsave) { slopelist = NULL; slopecount = 0; + /// Generates vertex-based Textmap UDMF slopes. + SpawnVertexSlopes(); + /// Generates line special-defined slopes. for (i = 0; i < numlines; i++) { diff --git a/src/r_defs.h b/src/r_defs.h index c3443724f..ad638410a 100644 --- a/src/r_defs.h +++ b/src/r_defs.h @@ -84,6 +84,8 @@ typedef struct extracolormap_s typedef struct { fixed_t x, y, z; + fixed_t floorz, ceilingz; + boolean floorzset, ceilingzset; } vertex_t; // Forward of linedefs, for sectors.