From 4ad26d52f37c8350c0a4c3e9559d0b78608f8a2c Mon Sep 17 00:00:00 2001 From: danij Date: Wed, 3 Dec 2008 23:44:02 +0000 Subject: [PATCH] Added: New sidedef flag "sdf_middle_stretch". Normally, height of the middle surface on twosided linedefs is clipped to that of the material used on it. If this flag is set, this behaviour is disabled (instead, the surface will stretch from floor to ceiling). This flag can be set via DMU and subsequently XG, using the ltc_wall_texture/ltc_wall_material class. Implemented for jDoom64. When loading a DOOM64 format map, this flag will be set for all sidedefs automatically in line with the original game behavior. --- doomsday/engine/api/dd_share.h | 1 + doomsday/engine/defs/flags.ded | 1 + doomsday/engine/portable/src/rend_main.c | 8 ++++++-- doomsday/plugins/wadmapconverter/src/load.c | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/doomsday/engine/api/dd_share.h b/doomsday/engine/api/dd_share.h index f6c3835faf..dafdd8001e 100644 --- a/doomsday/engine/api/dd_share.h +++ b/doomsday/engine/api/dd_share.h @@ -613,6 +613,7 @@ enum /* Do not change the numerical values of the constants! */ #define SDF_BLENDMIDTOTOP 0x0002 #define SDF_BLENDMIDTOBOTTOM 0x0004 #define SDF_BLENDBOTTOMTOMID 0x0008 +#define SDF_MIDDLE_STRETCH 0x0010 // Stretch the middle surface to reach from floor to ceiling. // Surface flags: // For use with P_Set/Get(DMU_SURFACE, n, DMU_FLAGS). diff --git a/doomsday/engine/defs/flags.ded b/doomsday/engine/defs/flags.ded index c2e5603a31..bdda70fd1e 100644 --- a/doomsday/engine/defs/flags.ded +++ b/doomsday/engine/defs/flags.ded @@ -85,6 +85,7 @@ Flag { ID = "sdf_fade_top_mid"; Value = 0x1; } Flag { ID = "sdf_fade_mid_top"; Value = 0x2; } Flag { ID = "sdf_fade_mid_bottom"; Value = 0x4; } Flag { ID = "sdf_fade_bottom_mid"; Value = 0x8; } +Flag { ID = "sdf_middle_stretch"; Value = 0x10; } # Models Flag { ID = "df_fullbright"; Value = 0x1; } diff --git a/doomsday/engine/portable/src/rend_main.c b/doomsday/engine/portable/src/rend_main.c index 42dcf69e6b..39a496157a 100644 --- a/doomsday/engine/portable/src/rend_main.c +++ b/doomsday/engine/portable/src/rend_main.c @@ -417,6 +417,9 @@ boolean Rend_DoesMidTextureFillGap(linedef_t *line, int backside) float openTop[2], matTop[2]; float openBottom[2], matBottom[2]; + if(side->flags & SDF_MIDDLE_STRETCH) + return true; + openTop[0] = openTop[1] = matTop[0] = matTop[1] = MIN_OF(back->SP_ceilvisheight, front->SP_ceilvisheight); openBottom[0] = openBottom[1] = matBottom[0] = matBottom[1] = @@ -1651,7 +1654,7 @@ static boolean renderWorldPoly(rvertex_t* rvertices, uint numVertices, rvertex_t origVerts[4]; rcolor_t origColors[4]; rtexcoord_t origTexCoords[4]; - + /** * Need to swap indices around into fans set the position * of the division vertices, interpolate texcoords and @@ -2479,7 +2482,8 @@ static boolean Rend_RenderWallSeg(subsector_t* ssec, seg_t* seg) } mat = surface->material->current; - if(Rend_MidMaterialPos + if((side->flags & SDF_MIDDLE_STRETCH) || + Rend_MidMaterialPos (&vL_ZBottom, &vR_ZBottom, &vL_ZTop, &vR_ZTop, &texOffset[VY], surface->visOffset[VY], mat->height, (ldef->flags & DDLF_DONTPEGBOTTOM)? true : false)) diff --git a/doomsday/plugins/wadmapconverter/src/load.c b/doomsday/plugins/wadmapconverter/src/load.c index aa722cecf1..100ac35794 100644 --- a/doomsday/plugins/wadmapconverter/src/load.c +++ b/doomsday/plugins/wadmapconverter/src/load.c @@ -1426,7 +1426,7 @@ boolean TransferMap(void) { frontIdx = MPE_SidedefCreate(front->sector, - (map->format == MF_DOOM64? SDF_MIDDLE_MATERIAL_TILED : 0), + (map->format == MF_DOOM64? SDF_MIDDLE_STRETCH : 0), front->topMaterial->num, front->offset[VX], front->offset[VY], 1, 1, 1, front->middleMaterial->num, @@ -1440,7 +1440,7 @@ boolean TransferMap(void) { backIdx = MPE_SidedefCreate(back->sector, - (map->format == MF_DOOM64? SDF_MIDDLE_MATERIAL_TILED : 0), + (map->format == MF_DOOM64? SDF_MIDDLE_STRETCH : 0), back->topMaterial->num, back->offset[VX], back->offset[VY], 1, 1, 1, back->middleMaterial->num,