- made 3D floor damage transfers optional by adding a new flag bit (2048) and made that mode automatic for the old ZDoom-based light only transfer special.

This commit is contained in:
Christoph Oelckers 2020-04-19 13:40:21 +02:00
parent 5228a67ff5
commit e63871d6f5
4 changed files with 9 additions and 6 deletions

View file

@ -943,7 +943,8 @@ int MapLoader::Set3DFloor(line_t * line, int param, int param2, int alpha)
// if flooding is used the floor must be non-solid and is automatically made shootthrough and seethrough // if flooding is used the floor must be non-solid and is automatically made shootthrough and seethrough
if ((param2 & 128) && !(flags & FF_SOLID)) flags |= FF_FLOOD | FF_SEETHROUGH | FF_SHOOTTHROUGH; if ((param2 & 128) && !(flags & FF_SOLID)) flags |= FF_FLOOD | FF_SEETHROUGH | FF_SHOOTTHROUGH;
if (param2 & 512) flags |= FF_FADEWALLS; if (param2 & 512) flags |= FF_FADEWALLS;
if (param2&1024) flags |= FF_RESET; if (param2 & 1024) flags |= FF_RESET;
if (param2 & 2048) flags |= FF_NODAMAGE;
FTextureID tex = line->sidedef[0]->GetTexture(side_t::top); FTextureID tex = line->sidedef[0]->GetTexture(side_t::top);
if (!tex.Exists() && alpha < 255) if (!tex.Exists() && alpha < 255)
{ {
@ -970,7 +971,7 @@ int MapLoader::Set3DFloor(line_t * line, int param, int param2, int alpha)
void MapLoader::Spawn3DFloors () void MapLoader::Spawn3DFloors ()
{ {
static int flagvals[] = {512, 2+512, 512+1024}; static int flagvals[] = {512+2048, 2+512+2048, 512+1024+2048};
for (auto &line : Level->lines) for (auto &line : Level->lines)
{ {

View file

@ -217,10 +217,11 @@ void P_PlayerOnSpecial3DFloor(player_t* player)
// Player must be on top of the floor to be affected... // Player must be on top of the floor to be affected...
if(player->mo->Z() != rover->top.plane->ZatPoint(player->mo)) continue; if(player->mo->Z() != rover->top.plane->ZatPoint(player->mo)) continue;
} }
else else
{ {
//Water and DEATH FOG!!! heh //Water and DEATH FOG!!! heh
if (player->mo->Z() > rover->top.plane->ZatPoint(player->mo) || if ((rover->flags & FF_NODAMAGE) ||
player->mo->Z() > rover->top.plane->ZatPoint(player->mo) ||
player->mo->Top() < rover->bottom.plane->ZatPoint(player->mo)) player->mo->Top() < rover->bottom.plane->ZatPoint(player->mo))
continue; continue;
} }

View file

@ -23,7 +23,7 @@ typedef enum
FF_UPPERTEXTURE = 0x20000, FF_UPPERTEXTURE = 0x20000,
FF_LOWERTEXTURE = 0x40000, FF_LOWERTEXTURE = 0x40000,
FF_THINFLOOR = 0x80000, // EDGE FF_THINFLOOR = 0x80000, // EDGE
FF_SCROLLY = 0x100000, // EDGE - not yet implemented!!! FF_NODAMAGE = 0x100000, // no damage transfers
FF_FIX = 0x200000, // use floor of model sector as floor and floor of real sector as ceiling FF_FIX = 0x200000, // use floor of model sector as floor and floor of real sector as ceiling
FF_INVERTSECTOR = 0x400000, // swap meaning of sector planes FF_INVERTSECTOR = 0x400000, // swap meaning of sector planes
FF_DYNAMIC = 0x800000, // created by partitioning another 3D-floor due to overlap FF_DYNAMIC = 0x800000, // created by partitioning another 3D-floor due to overlap

View file

@ -234,7 +234,8 @@ struct F3DFloor native play
FF_UPPERTEXTURE = 0x20000, FF_UPPERTEXTURE = 0x20000,
FF_LOWERTEXTURE = 0x40000, FF_LOWERTEXTURE = 0x40000,
FF_THINFLOOR = 0x80000, // EDGE FF_THINFLOOR = 0x80000, // EDGE
FF_SCROLLY = 0x100000, // EDGE - not yet implemented!!! FF_SCROLLY = 0x100000, // old leftover definition
FF_NODAMAGE = 0x100000, // no damage transfers
FF_FIX = 0x200000, // use floor of model sector as floor and floor of real sector as ceiling FF_FIX = 0x200000, // use floor of model sector as floor and floor of real sector as ceiling
FF_INVERTSECTOR = 0x400000, // swap meaning of sector planes FF_INVERTSECTOR = 0x400000, // swap meaning of sector planes
FF_DYNAMIC = 0x800000, // created by partitioning another 3D-floor due to overlap FF_DYNAMIC = 0x800000, // created by partitioning another 3D-floor due to overlap