mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-11 15:21:51 +00:00
Merge branch 'ZCompat2'
This commit is contained in:
commit
81f72ca4dd
7 changed files with 848 additions and 1065 deletions
|
@ -54,6 +54,7 @@
|
|||
#include "w_wad.h"
|
||||
#include "textures.h"
|
||||
#include "g_levellocals.h"
|
||||
#include "vm.h"
|
||||
|
||||
// MACROS ------------------------------------------------------------------
|
||||
|
||||
|
@ -103,6 +104,7 @@ enum
|
|||
|
||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||
extern TArray<FMapThing> MapThingsConverted;
|
||||
extern bool ForceNodeBuild;
|
||||
|
||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||
|
||||
|
@ -177,10 +179,6 @@ static const char *const SectorPlanes[] =
|
|||
"floor", "ceil", NULL
|
||||
};
|
||||
|
||||
static TArray<int> CompatParams;
|
||||
static int ii_compatparams;
|
||||
static TArray<FString> TexNames;
|
||||
|
||||
// CODE --------------------------------------------------------------------
|
||||
|
||||
//==========================================================================
|
||||
|
@ -198,7 +196,6 @@ void ParseCompatibility()
|
|||
unsigned int j;
|
||||
|
||||
BCompatMap.Clear();
|
||||
CompatParams.Clear();
|
||||
|
||||
// The contents of this file are not cumulative, as it should not
|
||||
// be present in user-distributed maps.
|
||||
|
@ -251,205 +248,12 @@ void ParseCompatibility()
|
|||
{
|
||||
flags.CompatFlags[Options[i].WhichSlot] |= Options[i].CompatFlags;
|
||||
}
|
||||
else if (sc.Compare("clearlineflags"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_CLEARFLAGS);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else if (sc.Compare("setlineflags"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETFLAGS);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else if (sc.Compare("setlinespecial"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETSPECIAL);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
|
||||
sc.MustGetString();
|
||||
CompatParams.Push(P_FindLineSpecial(sc.String, NULL, NULL));
|
||||
for (int i = 0; i < 5; i++)
|
||||
{
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
}
|
||||
else if (sc.Compare("setlinesectorref"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETLINESECTORREF);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetString();
|
||||
CompatParams.Push(sc.MustMatchString(LineSides));
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
flags.CompatFlags[SLOT_BCOMPAT] |= BCOMPATF_REBUILDNODES;
|
||||
}
|
||||
else if (sc.Compare("clearlinespecial"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_CLEARSPECIAL);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else if (sc.Compare("setactivation"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETACTIVATION);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else if (sc.Compare("setsectoroffset"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETSECTOROFFSET);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetString();
|
||||
CompatParams.Push(sc.MustMatchString(SectorPlanes));
|
||||
sc.MustGetFloat();
|
||||
CompatParams.Push(int(sc.Float*65536.));
|
||||
}
|
||||
else if (sc.Compare("setsectorspecial"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETSECTORSPECIAL);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else if (sc.Compare("setwallyscale"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETWALLYSCALE);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetString();
|
||||
CompatParams.Push(sc.MustMatchString(LineSides));
|
||||
sc.MustGetString();
|
||||
CompatParams.Push(sc.MustMatchString(WallTiers));
|
||||
sc.MustGetFloat();
|
||||
CompatParams.Push(int(sc.Float*65536.));
|
||||
}
|
||||
else if (sc.Compare("setwalltexture"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETWALLTEXTURE);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetString();
|
||||
CompatParams.Push(sc.MustMatchString(LineSides));
|
||||
sc.MustGetString();
|
||||
CompatParams.Push(sc.MustMatchString(WallTiers));
|
||||
sc.MustGetString();
|
||||
const FString texName = sc.String;
|
||||
const unsigned int texIndex = TexNames.Find(texName);
|
||||
const unsigned int texCount = TexNames.Size();
|
||||
if (texIndex == texCount)
|
||||
{
|
||||
TexNames.Push(texName);
|
||||
}
|
||||
CompatParams.Push(texIndex);
|
||||
}
|
||||
else if (sc.Compare("setthingz"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETTHINGZ);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetFloat();
|
||||
CompatParams.Push(int(sc.Float*256)); // do not use full fixed here so that it can eventually handle larger levels
|
||||
}
|
||||
else if (sc.Compare("setsectortag"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETTAG);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else if (sc.Compare("setthingflags"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETTHINGFLAGS);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else if (sc.Compare("setvertex"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETVERTEX);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetFloat();
|
||||
CompatParams.Push(int(sc.Float * 256)); // do not use full fixed here so that it can eventually handle larger levels
|
||||
sc.MustGetFloat();
|
||||
CompatParams.Push(int(sc.Float * 256)); // do not use full fixed here so that it can eventually handle larger levels
|
||||
flags.CompatFlags[SLOT_BCOMPAT] |= BCOMPATF_REBUILDNODES;
|
||||
}
|
||||
else if (sc.Compare("setthingskills"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETTHINGSKILLS);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else if (sc.Compare("setsectortexture"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETSECTORTEXTURE);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetString();
|
||||
CompatParams.Push(sc.MustMatchString(SectorPlanes));
|
||||
sc.MustGetString();
|
||||
const FString texName = sc.String;
|
||||
const unsigned int texIndex = TexNames.Find(texName);
|
||||
const unsigned int texCount = TexNames.Size();
|
||||
if (texIndex == texCount)
|
||||
{
|
||||
TexNames.Push(texName);
|
||||
}
|
||||
CompatParams.Push(texIndex);
|
||||
}
|
||||
else if (sc.Compare("setsectorlight"))
|
||||
{
|
||||
if (flags.ExtCommandIndex == ~0u) flags.ExtCommandIndex = CompatParams.Size();
|
||||
CompatParams.Push(CP_SETSECTORLIGHT);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
sc.MustGetNumber();
|
||||
CompatParams.Push(sc.Number);
|
||||
}
|
||||
else
|
||||
{
|
||||
sc.UnGet();
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (flags.ExtCommandIndex != ~0u)
|
||||
{
|
||||
CompatParams.Push(CP_END);
|
||||
}
|
||||
sc.MustGetStringName("}");
|
||||
for (j = 0; j < md5array.Size(); ++j)
|
||||
{
|
||||
|
@ -465,7 +269,7 @@ void ParseCompatibility()
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void CheckCompatibility(MapData *map)
|
||||
FName CheckCompatibility(MapData *map)
|
||||
{
|
||||
FMD5Holder md5;
|
||||
FCompatValues *flags;
|
||||
|
@ -473,7 +277,6 @@ void CheckCompatibility(MapData *map)
|
|||
ii_compatflags = 0;
|
||||
ii_compatflags2 = 0;
|
||||
ib_compatflags = 0;
|
||||
ii_compatparams = -1;
|
||||
|
||||
// When playing Doom IWAD levels force COMPAT_SHORTTEX and COMPATF_LIGHT.
|
||||
// I'm not sure if the IWAD maps actually need COMPATF_LIGHT but it certainly does not hurt.
|
||||
|
@ -488,13 +291,16 @@ void CheckCompatibility(MapData *map)
|
|||
|
||||
flags = BCompatMap.CheckKey(md5);
|
||||
|
||||
if (developer >= DMSG_NOTIFY)
|
||||
{
|
||||
Printf("MD5 = ");
|
||||
FString hash;
|
||||
|
||||
for (size_t j = 0; j < sizeof(md5.Bytes); ++j)
|
||||
{
|
||||
Printf("%02X", md5.Bytes[j]);
|
||||
hash.AppendFormat("%02X", md5.Bytes[j]);
|
||||
}
|
||||
|
||||
if (developer >= DMSG_NOTIFY)
|
||||
{
|
||||
Printf("MD5 = %s", hash.GetChars());
|
||||
if (flags != NULL)
|
||||
{
|
||||
Printf(", cflags = %08x, cflags2 = %08x, bflags = %08x\n",
|
||||
|
@ -511,7 +317,6 @@ void CheckCompatibility(MapData *map)
|
|||
ii_compatflags |= flags->CompatFlags[SLOT_COMPAT];
|
||||
ii_compatflags2 |= flags->CompatFlags[SLOT_COMPAT2];
|
||||
ib_compatflags |= flags->CompatFlags[SLOT_BCOMPAT];
|
||||
ii_compatparams = flags->ExtCommandIndex;
|
||||
}
|
||||
|
||||
// Reset i_compatflags
|
||||
|
@ -522,6 +327,7 @@ void CheckCompatibility(MapData *map)
|
|||
{
|
||||
ib_compatflags |= BCOMPATF_FLOATBOB;
|
||||
}
|
||||
return FName(hash, true); // if this returns NAME_None it means there is no scripted compatibility handler.
|
||||
}
|
||||
|
||||
//==========================================================================
|
||||
|
@ -530,229 +336,130 @@ void CheckCompatibility(MapData *map)
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
void SetCompatibilityParams()
|
||||
void SetCompatibilityParams(FName checksum)
|
||||
{
|
||||
if (ii_compatparams != -1)
|
||||
if (checksum != NAME_None)
|
||||
{
|
||||
unsigned i = ii_compatparams;
|
||||
|
||||
while (i < CompatParams.Size() && CompatParams[i] != CP_END)
|
||||
PClass *const cls = PClass::FindClass("LevelCompatibility");
|
||||
if (cls != nullptr)
|
||||
{
|
||||
switch (CompatParams[i])
|
||||
PFunction *const func = dyn_cast<PFunction>(cls->FindSymbol("Apply", true));
|
||||
if (func != nullptr)
|
||||
{
|
||||
case CP_CLEARFLAGS:
|
||||
{
|
||||
if ((unsigned)CompatParams[i+1] < level.lines.Size())
|
||||
{
|
||||
line_t *line = &level.lines[CompatParams[i+1]];
|
||||
line->flags &= ~CompatParams[i+2];
|
||||
}
|
||||
i+=3;
|
||||
break;
|
||||
}
|
||||
case CP_SETFLAGS:
|
||||
{
|
||||
if ((unsigned)CompatParams[i+1] < level.lines.Size())
|
||||
{
|
||||
line_t *line = &level.lines[CompatParams[i+1]];
|
||||
line->flags |= CompatParams[i+2];
|
||||
}
|
||||
i+=3;
|
||||
break;
|
||||
}
|
||||
case CP_SETSPECIAL:
|
||||
{
|
||||
if ((unsigned)CompatParams[i+1] < level.lines.Size())
|
||||
{
|
||||
line_t *line = &level.lines[CompatParams[i+1]];
|
||||
line->special = CompatParams[i+2];
|
||||
for(int ii=0;ii<5;ii++)
|
||||
{
|
||||
line->args[ii] = CompatParams[i+ii+3];
|
||||
}
|
||||
}
|
||||
i+=8;
|
||||
break;
|
||||
}
|
||||
case CP_CLEARSPECIAL:
|
||||
{
|
||||
if ((unsigned)CompatParams[i+1] < level.lines.Size())
|
||||
{
|
||||
line_t *line = &level.lines[CompatParams[i+1]];
|
||||
line->special = 0;
|
||||
memset(line->args, 0, sizeof(line->args));
|
||||
}
|
||||
i += 2;
|
||||
break;
|
||||
}
|
||||
case CP_SETACTIVATION:
|
||||
{
|
||||
if ((unsigned)CompatParams[i+1] < level.lines.Size())
|
||||
{
|
||||
line_t *line = &level.lines[CompatParams[i+1]];
|
||||
line->activation = CompatParams[i+2];
|
||||
}
|
||||
i += 3;
|
||||
break;
|
||||
}
|
||||
case CP_SETSECTOROFFSET:
|
||||
{
|
||||
if ((unsigned)CompatParams[i+1] < level.sectors.Size())
|
||||
{
|
||||
sector_t *sec = &level.sectors[CompatParams[i+1]];
|
||||
const double delta = CompatParams[i + 3] / 65536.0;
|
||||
secplane_t& plane = sector_t::floor == CompatParams[i + 2]
|
||||
? sec->floorplane
|
||||
: sec->ceilingplane;
|
||||
plane.ChangeHeight(delta);
|
||||
sec->ChangePlaneTexZ(CompatParams[i + 2], delta);
|
||||
}
|
||||
i += 4;
|
||||
break;
|
||||
}
|
||||
case CP_SETSECTORSPECIAL:
|
||||
{
|
||||
const unsigned index = CompatParams[i + 1];
|
||||
if (index < level.sectors.Size())
|
||||
{
|
||||
level.sectors[index].special = CompatParams[i + 2];
|
||||
}
|
||||
i += 3;
|
||||
break;
|
||||
}
|
||||
case CP_SETWALLYSCALE:
|
||||
{
|
||||
if ((unsigned)CompatParams[i+1] < level.lines.Size())
|
||||
{
|
||||
side_t *side = level.lines[CompatParams[i+1]].sidedef[CompatParams[i+2]];
|
||||
if (side != NULL)
|
||||
{
|
||||
side->SetTextureYScale(CompatParams[i+3], CompatParams[i+4] / 65536.);
|
||||
}
|
||||
}
|
||||
i += 5;
|
||||
break;
|
||||
}
|
||||
case CP_SETWALLTEXTURE:
|
||||
{
|
||||
if ((unsigned)CompatParams[i + 1] < level.lines.Size())
|
||||
{
|
||||
side_t *side = level.lines[CompatParams[i + 1]].sidedef[CompatParams[i + 2]];
|
||||
if (side != NULL)
|
||||
{
|
||||
assert(TexNames.Size() > (unsigned int)CompatParams[i + 4]);
|
||||
const FTextureID texID = TexMan.GetTexture(TexNames[CompatParams[i + 4]], ETextureType::Any);
|
||||
side->SetTexture(CompatParams[i + 3], texID);
|
||||
}
|
||||
}
|
||||
i += 5;
|
||||
break;
|
||||
}
|
||||
case CP_SETTHINGZ:
|
||||
{
|
||||
// When this is called, the things haven't been spawned yet so we can alter the position inside the MapThings array.
|
||||
if ((unsigned)CompatParams[i+1] < MapThingsConverted.Size())
|
||||
{
|
||||
MapThingsConverted[CompatParams[i+1]].pos.Z = CompatParams[i+2]/256.;
|
||||
}
|
||||
i += 3;
|
||||
break;
|
||||
}
|
||||
case CP_SETTAG:
|
||||
{
|
||||
if ((unsigned)CompatParams[i + 1] < level.sectors.Size())
|
||||
{
|
||||
// this assumes that the sector does not have any tags yet!
|
||||
if (CompatParams[i + 2] == 0)
|
||||
{
|
||||
tagManager.RemoveSectorTags(CompatParams[i + 1]);
|
||||
}
|
||||
else
|
||||
{
|
||||
tagManager.AddSectorTag(CompatParams[i + 1], CompatParams[i + 2]);
|
||||
}
|
||||
}
|
||||
i += 3;
|
||||
break;
|
||||
}
|
||||
case CP_SETTHINGFLAGS:
|
||||
{
|
||||
if ((unsigned)CompatParams[i + 1] < MapThingsConverted.Size())
|
||||
{
|
||||
MapThingsConverted[CompatParams[i + 1]].flags = CompatParams[i + 2];
|
||||
}
|
||||
i += 3;
|
||||
break;
|
||||
}
|
||||
case CP_SETVERTEX:
|
||||
{
|
||||
if ((unsigned)CompatParams[i + 1] < level.vertexes.Size())
|
||||
{
|
||||
level.vertexes[CompatParams[i + 1]].p.X = CompatParams[i + 2] / 256.;
|
||||
level.vertexes[CompatParams[i + 1]].p.Y = CompatParams[i + 3] / 256.;
|
||||
}
|
||||
i += 4;
|
||||
break;
|
||||
}
|
||||
case CP_SETTHINGSKILLS:
|
||||
{
|
||||
if ((unsigned)CompatParams[i + 1] < MapThingsConverted.Size())
|
||||
{
|
||||
MapThingsConverted[CompatParams[i + 1]].SkillFilter = CompatParams[i + 2];
|
||||
}
|
||||
i += 3;
|
||||
break;
|
||||
}
|
||||
case CP_SETSECTORTEXTURE:
|
||||
{
|
||||
if ((unsigned)CompatParams[i + 1] < level.sectors.Size())
|
||||
{
|
||||
sector_t *sec = &level.sectors[CompatParams[i+1]];
|
||||
assert (sec != nullptr);
|
||||
secplane_t& plane = sector_t::floor == CompatParams[i + 2]
|
||||
? sec->floorplane
|
||||
: sec->ceilingplane;
|
||||
assert(TexNames.Size() > (unsigned int)CompatParams[i + 3]);
|
||||
const FTextureID texID = TexMan.GetTexture(TexNames[CompatParams[i + 3]], ETextureType::Any);
|
||||
|
||||
sec->SetTexture(CompatParams[i + 2], texID);
|
||||
}
|
||||
i += 4;
|
||||
break;
|
||||
}
|
||||
case CP_SETSECTORLIGHT:
|
||||
{
|
||||
if ((unsigned)CompatParams[i + 1] < level.sectors.Size())
|
||||
{
|
||||
sector_t *sec = &level.sectors[CompatParams[i+1]];
|
||||
assert (sec != nullptr);
|
||||
|
||||
sec->SetLightLevel((unsigned)CompatParams[i + 2]);
|
||||
}
|
||||
i += 3;
|
||||
break;
|
||||
}
|
||||
case CP_SETLINESECTORREF:
|
||||
{
|
||||
if ((unsigned)CompatParams[i + 1] < level.lines.Size())
|
||||
{
|
||||
line_t *line = &level.lines[CompatParams[i + 1]];
|
||||
assert(line != nullptr);
|
||||
side_t *side = line->sidedef[CompatParams[i + 2]];
|
||||
if (side != nullptr && (unsigned)CompatParams[i + 3] < level.sectors.Size())
|
||||
{
|
||||
side->sector = &level.sectors[CompatParams[i + 3]];
|
||||
}
|
||||
}
|
||||
i += 4;
|
||||
break;
|
||||
}
|
||||
|
||||
VMValue param = { (int)checksum };
|
||||
VMCall(func->Variants[0].Implementation, ¶m, 1, nullptr, 0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DLevelCompatibility, OffsetSectorPlane)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(sector);
|
||||
PARAM_INT(planeval);
|
||||
PARAM_FLOAT(delta);
|
||||
|
||||
sector_t *sec = &level.sectors[sector];
|
||||
secplane_t& plane = sector_t::floor == planeval? sec->floorplane : sec->ceilingplane;
|
||||
plane.ChangeHeight(delta);
|
||||
sec->ChangePlaneTexZ(planeval, delta);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DLevelCompatibility, ClearSectorTags)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(sector);
|
||||
tagManager.RemoveSectorTags(sector);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DLevelCompatibility, AddSectorTag)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(sector);
|
||||
PARAM_INT(tag);
|
||||
tagManager.AddSectorTag(sector, tag);
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DLevelCompatibility, SetThingSkills)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(thing);
|
||||
PARAM_INT(skillmask);
|
||||
|
||||
if ((unsigned)thing < MapThingsConverted.Size())
|
||||
{
|
||||
MapThingsConverted[thing].SkillFilter = skillmask;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DLevelCompatibility, SetThingZ)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(thing);
|
||||
PARAM_FLOAT(z);
|
||||
|
||||
if ((unsigned)thing < MapThingsConverted.Size())
|
||||
{
|
||||
MapThingsConverted[thing].pos.Z = z;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DLevelCompatibility, SetThingFlags)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_INT(thing);
|
||||
PARAM_INT(flags);
|
||||
|
||||
if ((unsigned)thing < MapThingsConverted.Size())
|
||||
{
|
||||
MapThingsConverted[thing].flags = flags;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DLevelCompatibility, SetVertex)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_UINT(vertex);
|
||||
PARAM_FLOAT(x);
|
||||
PARAM_FLOAT(y);
|
||||
|
||||
if (vertex < level.vertexes.Size())
|
||||
{
|
||||
level.vertexes[vertex].p = DVector2(x, y);
|
||||
}
|
||||
ForceNodeBuild = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(DLevelCompatibility, SetLineSectorRef)
|
||||
{
|
||||
PARAM_PROLOGUE;
|
||||
PARAM_UINT(lineidx);
|
||||
PARAM_UINT(sideidx);
|
||||
PARAM_UINT(sectoridx);
|
||||
|
||||
if ( sideidx < 2
|
||||
&& lineidx < level.lines.Size()
|
||||
&& sectoridx < level.sectors.Size())
|
||||
{
|
||||
line_t *line = &level.lines[lineidx];
|
||||
side_t *side = line->sidedef[sideidx];
|
||||
side->sector = &level.sectors[sectoridx];
|
||||
if (sideidx == 0) line->frontsector = side->sector;
|
||||
else line->backsector = side->sector;
|
||||
}
|
||||
ForceNodeBuild = true;
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
// CCMD mapchecksum
|
||||
|
@ -799,3 +506,4 @@ CCMD (hiddencompatflags)
|
|||
{
|
||||
Printf("%08x %08x %08x\n", ii_compatflags, ii_compatflags2, ib_compatflags);
|
||||
}
|
||||
|
||||
|
|
|
@ -36,7 +36,7 @@ struct FMD5HashTraits
|
|||
extern TMap<FMD5Holder, FCompatValues, FMD5HashTraits> BCompatMap;
|
||||
|
||||
void ParseCompatibility();
|
||||
void CheckCompatibility(MapData *map);
|
||||
void SetCompatibilityParams();
|
||||
FName CheckCompatibility(MapData *map);
|
||||
void SetCompatibilityParams(FName);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -3756,7 +3756,7 @@ void P_SetupLevel (const char *lumpname, int position)
|
|||
{
|
||||
level.maptype = MAPTYPE_UDMF;
|
||||
}
|
||||
CheckCompatibility(map);
|
||||
FName checksum = CheckCompatibility(map);
|
||||
if (ib_compatflags & BCOMPATF_REBUILDNODES)
|
||||
{
|
||||
ForceNodeBuild = true;
|
||||
|
@ -3834,7 +3834,7 @@ void P_SetupLevel (const char *lumpname, int position)
|
|||
times[0].Unclock();
|
||||
}
|
||||
|
||||
SetCompatibilityParams();
|
||||
SetCompatibilityParams(checksum);
|
||||
|
||||
times[6].Clock();
|
||||
P_LoopSidedefs (true);
|
||||
|
|
|
@ -1,35 +1,3 @@
|
|||
6DC9F6CCEAE7A91AEC48EBE506F22BC4 // void.wad MAP01
|
||||
{
|
||||
// Slightly squash the pillars in the starting room with "stimpacks"
|
||||
// floating on them so that they can be obtained.
|
||||
setsectoroffset 62 floor -8
|
||||
setwallyscale 286 front bot 1.090909
|
||||
setwallyscale 287 front bot 1.090909
|
||||
setwallyscale 288 front bot 1.090909
|
||||
setwallyscale 289 front bot 1.090909
|
||||
|
||||
setsectoroffset 63 floor -8
|
||||
setwallyscale 290 front bot 1.090909
|
||||
setwallyscale 291 front bot 1.090909
|
||||
setwallyscale 292 front bot 1.090909
|
||||
setwallyscale 293 front bot 1.090909
|
||||
|
||||
setsectoroffset 118 floor -8
|
||||
setwallyscale 710 front bot 1.090909
|
||||
setwallyscale 711 front bot 1.090909
|
||||
setwallyscale 712 front bot 1.090909
|
||||
setwallyscale 713 front bot 1.090909
|
||||
|
||||
setsectoroffset 119 floor -8
|
||||
setwallyscale 714 front bot 1.090909
|
||||
setwallyscale 715 front bot 1.090909
|
||||
setwallyscale 716 front bot 1.090909
|
||||
setwallyscale 717 front bot 1.090909
|
||||
|
||||
setslopeoverflow
|
||||
polyobj
|
||||
}
|
||||
|
||||
B2D8DA03489D1C67F60DC87FBC4EA338 // map01 - Massmouth 2
|
||||
801304DA3784308D333951B5E0CF8E9E // map02
|
||||
6EA4D5CAEA16857B2A882467E1633BC2 // map03
|
||||
|
@ -52,15 +20,6 @@ A80E7EE40E0D0C76A6FBD242BE29FE27 // map15
|
|||
resetplayerspeed
|
||||
}
|
||||
|
||||
5C594C67CF7721005DE71429F9811370 // Eternal Doom map03
|
||||
{
|
||||
// fix broken staircase. The compatibility option is not sufficient
|
||||
// to reliably handle this so clear the tags from the unwanted sectors.
|
||||
setsectortag 212 0
|
||||
setsectortag 213 0
|
||||
setsectortag 214 0
|
||||
}
|
||||
|
||||
6DA6FCBA8089161BDEC6A1D3F6C8D60F // Eternal Doom MAP25
|
||||
{
|
||||
stairs
|
||||
|
@ -77,7 +36,6 @@ A80E7EE40E0D0C76A6FBD242BE29FE27 // map15
|
|||
useblocking
|
||||
}
|
||||
|
||||
// mostly cosmetic (except AV MAP07 and MM2 MAP25)
|
||||
0EECBF37B328C9CAAF20DED4949A4157 // Sudtic e2m6
|
||||
4ACE0644883BDA0CBA254FA02C9ACF83 // Teutic e3m4
|
||||
9F2BE080A33F775294BD78822456924E // Nukemine e1m4
|
||||
|
@ -87,6 +45,7 @@ CD31793D3A4B00231B124C0C23649644 // Strain map02
|
|||
F84AB4557464A383E93F37CD3A82AC48 // MM2 map03
|
||||
1497894956B3C8EBE8A240B7FDD99C6A // MM2 map25
|
||||
941E4CB56EE4184E0B1ED43486AB0BBF // AV map07
|
||||
6D4156EE0D12B77AD143A37C4D3DCF98 // dmonfear.wad map22
|
||||
{
|
||||
shorttex
|
||||
}
|
||||
|
@ -97,11 +56,6 @@ F84AB4557464A383E93F37CD3A82AC48 // MM2 map03
|
|||
trace
|
||||
}
|
||||
|
||||
9D50EBE17CEC78938C7A668DB0768611 // Strain map07: Make the exit accessible
|
||||
{
|
||||
clearlineflags 1021 1
|
||||
}
|
||||
|
||||
71C2E6D9CFA3D8750C6A9599FB2453BD // Hacx map03: There are some switches behind
|
||||
96368EB950E33AF62EA6423434E3CEF7 // HacX map17: shootable covers in these levels
|
||||
BA530202AF0BA0C6CBAE6A0C7076FB72 // Requiem map04
|
||||
|
@ -180,11 +134,6 @@ CA267398C9B3A8F79349D3394F8B2106 // map20
|
|||
spritesort
|
||||
}
|
||||
|
||||
DCE862393CAAA6FF1294FB7056B53057 // UAC Ultra map07: Contains a scroller depending on Boom side effects
|
||||
{
|
||||
setlinespecial 391 Sector_CopyScroller 99 6 0 0 0
|
||||
}
|
||||
|
||||
1D9E43988940CCD3555724E15DD8B1AB // Happy Time Circus map01 has bad teleporters
|
||||
040F83028FFA74456E335ED300BE2C33 // MAP17 (TownInfection.wad)
|
||||
156FA31F5FF72A87BF345B68029D3051 // MAP02 (nprject5.wad)
|
||||
|
@ -201,19 +150,6 @@ AF40D0E49BD1B76D4B1AADD8212ADC46 // MAP01 (the wad that shall not be named =P)
|
|||
badangles
|
||||
}
|
||||
|
||||
E2B5D1400279335811C1C1C0B437D9C8 // Deathknights of the Dark Citadel, map54
|
||||
{
|
||||
// This map has two gear boxes which are flagged for player cross
|
||||
// activation instead of the proper player uses activation.
|
||||
setactivation 963 2
|
||||
setactivation 943 2
|
||||
}
|
||||
|
||||
3F249EDD62A3A08F53A6C53CB4C7ABE5 // Artica 3 map01
|
||||
{
|
||||
clearlinespecial 66
|
||||
}
|
||||
|
||||
8FA29398776146189396AA1AC6BB9E13 // Roger Ritenour's Phobos map03
|
||||
{
|
||||
floormove
|
||||
|
@ -225,188 +161,20 @@ E2B5D1400279335811C1C1C0B437D9C8 // Deathknights of the Dark Citadel, map54
|
|||
limitpain
|
||||
}
|
||||
|
||||
// Daedalus: Fix SPAC_Push lines that aren't on lines you can actually push
|
||||
3ABB618A475BCBC531B457BAA6E4E70A // map04
|
||||
{
|
||||
// forcefields
|
||||
// the lines we're setting are already set for repeatable SPAC_Push
|
||||
clearlinespecial 90
|
||||
setlinespecial 3749 ACS_Execute 23 0 1 0 0
|
||||
clearlinespecial 94
|
||||
setlinespecial 3766 ACS_Execute 23 0 2 0 0
|
||||
clearlinespecial 92
|
||||
setlinespecial 3777 ACS_Execute 23 0 3 0 0
|
||||
clearlinespecial 98
|
||||
setlinespecial 3784 ACS_Execute 23 0 4 0 0
|
||||
}
|
||||
795FDE3CC1C97140F326D0152B3FCE2A // map24
|
||||
{
|
||||
// doors
|
||||
clearlinespecial 1512
|
||||
setlinespecial 1505 Door_Raise 213 50 100 0 0
|
||||
setlineflags 1505 0x200 // repeatable
|
||||
setactivation 1505 16 // SPAC_Push
|
||||
clearlinespecial 1514
|
||||
setlinespecial 1508 Door_Raise 213 50 100 0 0
|
||||
setlineflags 1508 0x200
|
||||
setactivation 1508 16
|
||||
|
||||
clearlinespecial 1525
|
||||
setlinespecial 1522 Door_Raise 214 50 100 0 0
|
||||
setlineflags 1522 0x200
|
||||
setactivation 1522 16
|
||||
clearlinespecial 1530
|
||||
setlinespecial 1527 Door_Raise 214 50 100 0 0
|
||||
setlineflags 1527 0x200
|
||||
setactivation 1527 16
|
||||
|
||||
clearlinespecial 5277
|
||||
setlinespecial 5209 Door_Raise 24 20 255 0 0
|
||||
setlineflags 5209 0x200
|
||||
setactivation 5209 16
|
||||
clearlinespecial 5714
|
||||
setlinespecial 5267 Door_Raise 24 20 255 0 0
|
||||
setlineflags 5267 0x200
|
||||
setactivation 5267 16
|
||||
|
||||
clearlinespecial 5715
|
||||
setlinespecial 5229 Door_Raise 24 20 255 0 0
|
||||
setlineflags 5229 0x200
|
||||
setactivation 5229 16
|
||||
clearlinespecial 5345
|
||||
setlinespecial 5232 Door_Raise 24 20 255 0 0
|
||||
setlineflags 5232 0x200
|
||||
setactivation 5232 16
|
||||
|
||||
// consoles?
|
||||
clearlinespecial 3639
|
||||
setlinespecial 3633 ACS_Execute 14 0 0 0 0
|
||||
setlinespecial 3635 ACS_Execute 14 0 0 0 0
|
||||
setlineflags 3633 0x200
|
||||
setlineflags 3635 0x200
|
||||
setactivation 3633 16
|
||||
setactivation 3635 16
|
||||
|
||||
clearlinespecial 3647
|
||||
setlinespecial 3644 ACS_Execute 14 0 0 0 0
|
||||
setlinespecial 3641 ACS_Execute 14 0 0 0 0
|
||||
setlineflags 3644 0x200
|
||||
setlineflags 3641 0x200
|
||||
setactivation 3644 16
|
||||
setactivation 3641 16
|
||||
|
||||
clearlinespecial 3659
|
||||
clearlinespecial 3657
|
||||
setlinespecial 3653 ACS_Execute 13 0 0 0 0
|
||||
setlinespecial 3655 ACS_Execute 13 0 0 0 0
|
||||
setlinespecial 3651 ACS_Execute 13 0 0 0 0
|
||||
setlinespecial 3654 ACS_Execute 13 0 0 0 0
|
||||
setlineflags 3653 0x200
|
||||
setlineflags 3655 0x200
|
||||
setlineflags 3651 0x200
|
||||
setlineflags 3654 0x200
|
||||
setactivation 3653 16
|
||||
setactivation 3655 16
|
||||
setactivation 3651 16
|
||||
setactivation 3654 16
|
||||
}
|
||||
|
||||
// Community Chest 3
|
||||
F481922F4881F74760F3C0437FD5EDD0 // map03
|
||||
{
|
||||
// I have no idea how this conveyor belt setup manages to work under Boom.
|
||||
// Set the sector the voodoo doll ends up standing on when sectors tagged
|
||||
// 1 are raised so that the voodoo doll will be carried.
|
||||
setlinespecial 3559 Sector_CopyScroller 17 6 0 0 0
|
||||
}
|
||||
|
||||
7C1913DEE396BA26CFF22A0E9369B7D2 // Nuke Mine, e1m2
|
||||
{
|
||||
pointonline
|
||||
}
|
||||
|
||||
5B862477519B21B30059A466F2FF6460 // Khorus, map08
|
||||
{
|
||||
// This map uses a voodoo conveyor with slanted walls to shunt the
|
||||
// voodoo doll into side areas. For some reason, this voodoo doll
|
||||
// is unable to slide on them, because the slide calculation gets
|
||||
// them slightly inside the walls and thinks they are stuck. I could
|
||||
// not reproduce this with the real player, which is what has me
|
||||
// stumped. So, help them out be attaching some ThrustThing specials
|
||||
// to the walls.
|
||||
setlinespecial 443 ThrustThing 96 4 0 0 0
|
||||
setlineflags 443 0x200 // repeatable
|
||||
setactivation 443 16 // SPAC_Push
|
||||
setlinespecial 455 ThrustThing 96 4 0 0 0
|
||||
setlineflags 455 0x200 // repeatable
|
||||
setactivation 455 16 // SPAC_Push
|
||||
}
|
||||
|
||||
8B2AC8D4DB4A49A5DCCBB067E04434D6 // The Hell Factory Hub One, map04
|
||||
65A1EB4C87386F290816660A52932FF1 // Master Levels, garrison.wad
|
||||
3DEE4EFEFAF3260C800A30734F54CE75 // Hellbound, map14
|
||||
5FAA25F5A6AAB3409CAE0AF87F910341 // DOOM.wad e1m6
|
||||
94893A0DC429A22ADC4B3A73DA537E16 // DOOM2.WAD map25
|
||||
{
|
||||
rebuildnodes
|
||||
}
|
||||
|
||||
3D1E36E50F5A8D289E15433941605224 // Master Levels, catwalk.wad
|
||||
{
|
||||
// make it impossible to open door to 1-way bridge before getting red key
|
||||
setsectortag 35 0 // existing tag must be cleared before new one can be set
|
||||
setsectortag 35 15
|
||||
setactivation 605 1 // SPAC_PCross
|
||||
setactivation 606 1
|
||||
setactivation 607 1
|
||||
setactivation 608 1
|
||||
setlinespecial 605 Door_Open 15 64 0 0 0 // fast, stay open
|
||||
setlinespecial 606 Door_Open 15 64 0 0 0
|
||||
setlinespecial 607 Door_Open 15 64 0 0 0
|
||||
setlinespecial 608 Door_Open 15 64 0 0 0
|
||||
}
|
||||
|
||||
3B9CAA02952F405269353FAAD8F8EC33 // Master Levels, nessus.wad
|
||||
{
|
||||
// move secret sector from too-thin doorframe to BFG closet
|
||||
setsectorspecial 211 0
|
||||
setsectorspecial 212 1024
|
||||
// lower floor a bit so secret sector can be entered fully
|
||||
setsectoroffset 212 floor -16
|
||||
// make secret door stay open so you can't get locked in closet
|
||||
setlinespecial 1008 Door_Open 0 64 0 0 0
|
||||
}
|
||||
|
||||
7ED9800213C00D6E7FB98652AB48B3DE // Ultimate Simplicity, map04
|
||||
{
|
||||
// Add missing map spots on easy and medium skills
|
||||
// Demons will teleport into starting room making 100% kills possible
|
||||
setthingskills 31 31
|
||||
setthingskills 32 31
|
||||
}
|
||||
|
||||
1891E029994B023910CFE0B3209C3CDB // Ultimate Simplicity, map07
|
||||
{
|
||||
// It is possible to get stuck on skill 0 or 1 when no shots have been fired
|
||||
// after sector 17 became accessible and before entering famous mancubus room.
|
||||
// Monsters from the mentioned sector won't be alerted and so
|
||||
// they won't teleport into the battle. ACS will wait forever for their deaths.
|
||||
setlinespecial 397 NoiseAlert 0 0 0 0 0
|
||||
setlinespecial 411 NoiseAlert 0 0 0 0 0
|
||||
}
|
||||
|
||||
F0E6F30F57B0425F17E43600AA813E80 // Ultimate Simplicity, map11
|
||||
{
|
||||
// If door (sector #309) is closed it cannot be open again
|
||||
// from one side potentially blocking level progression
|
||||
clearlinespecial 2445
|
||||
}
|
||||
|
||||
952CC8D03572E17BA550B01B366EFBB9 // Cheogsh map01
|
||||
{
|
||||
// make the blue key spawn above the 3D floor
|
||||
setthingz 918 296
|
||||
}
|
||||
|
||||
64B6CE3CB7349B6F6B1A885C449ACB96 // Super Sonic Doom, map31
|
||||
{
|
||||
// During the end-of-level tally, both PROP_FROZEN and PROP_TOTALLYFROZEN
|
||||
|
@ -415,80 +183,15 @@ F0E6F30F57B0425F17E43600AA813E80 // Ultimate Simplicity, map11
|
|||
linkfrozenprops
|
||||
}
|
||||
|
||||
D62DCA9EC226DE49108D5DD9271F7631 // Cheogsh 2 map04
|
||||
{
|
||||
// Stuff in megasphere cage is positioned too low
|
||||
setthingz 1640 528
|
||||
setthingz 1641 528
|
||||
setthingz 1642 528
|
||||
setthingz 1643 528
|
||||
setthingz 1644 528
|
||||
setthingz 1645 528
|
||||
setthingz 1646 528
|
||||
setthingz 1647 528
|
||||
setthingz 1648 528
|
||||
setthingz 1649 528
|
||||
}
|
||||
|
||||
E89CCC7E155F1032F693359CC219BE6C // hexen.wad map30
|
||||
B9DFF13207EACAC675C71D82624D0007 // XtheaterIII map01
|
||||
6941BDC2F80C0FEBE34EFA23D5FB72B7 // sonic.wad map10
|
||||
3ABB618A475BCBC531B457BAA6E4E70A // Daedalus map04
|
||||
795FDE3CC1C97140F326D0152B3FCE2A // Daedalus map24
|
||||
{
|
||||
DisablePushWindowCheck
|
||||
}
|
||||
|
||||
DFC18B92BF3E8142B8684ECD8BD2EF06 // TNT: Evilution map15
|
||||
{
|
||||
// raise up sector with its counterpart so 100% kills becomes possible
|
||||
setsectortag 330 11
|
||||
}
|
||||
|
||||
2C4A3356C5EB3526D2C72A4AA4B18A36 // TNT: Evilution map29
|
||||
{
|
||||
// remove mancubus who always gets stuck in teleport tunnel, preventing
|
||||
// 100% kills on HMP
|
||||
setthingflags 405 0
|
||||
}
|
||||
|
||||
A53AE580A4AF2B5D0B0893F86914781E // TNT: Evilution map31
|
||||
{
|
||||
setthingflags 470 2016
|
||||
}
|
||||
|
||||
D99AD22FF21A41B4EECDB3A7C803D75E // TNT: Evilution map32
|
||||
{
|
||||
// door can close permanently; make switch that opens it repeatable
|
||||
setlineflags 872 0x200
|
||||
// switch should only open way to red key, don't lower bars yet,
|
||||
// instead make line just before red key open bars
|
||||
setsectortag 197 0
|
||||
setsectortag 197 8
|
||||
setlinespecial 1279 Floor_LowerToLowest 8 32 0 0 0
|
||||
setactivation 1240 1 // SPAC_PCross
|
||||
setlinespecial 1240 Floor_LowerToLowest 38 32 0 0 0
|
||||
}
|
||||
|
||||
279BB50468FE9F5B36C6D821E4902369 // Plutonia Experiment map30
|
||||
{
|
||||
// flag items in deathmatch-only area correctly so that 100% items
|
||||
// are possible in solo
|
||||
setthingflags 250 17
|
||||
setthingflags 251 17
|
||||
setthingflags 252 17
|
||||
setthingflags 253 17
|
||||
setthingflags 254 17
|
||||
setthingflags 206 17
|
||||
}
|
||||
|
||||
4CB7AAC5C43CF32BDF05FD36481C1D9F // Plutonia: Revisited map27
|
||||
{
|
||||
setlinespecial 1214 Plat_DownWaitUpStayLip 20 64 150 0 0
|
||||
setlinespecial 1215 Plat_DownWaitUpStayLip 20 64 150 0 0
|
||||
setlinespecial 1216 Plat_DownWaitUpStayLip 20 64 150 0 0
|
||||
setlinespecial 1217 Plat_DownWaitUpStayLip 20 64 150 0 0
|
||||
setlinespecial 1227 Plat_DownWaitUpStayLip 20 64 150 0 0
|
||||
}
|
||||
|
||||
D0139194F7817BF06F3988DFC47DB38D // Whispers of Satan map29
|
||||
{
|
||||
nopassover
|
||||
|
@ -514,254 +217,19 @@ C98F79709BD7E0E4C19026AB9575EC6F // cc-cod.zip:codlev.wad map07
|
|||
noslopeid
|
||||
}
|
||||
|
||||
3FFAF2F624C1B4BB6F581DCF7B99CBA7 // hexen.wad MAP36
|
||||
7DC65D5029DD834481CD716B3D71388A // hexdd.wad MAP47
|
||||
05AA32F1D2220A462DCDA245ED22B94B // sonic.wad map09
|
||||
{
|
||||
polyobj
|
||||
}
|
||||
|
||||
|
||||
D7F6E9F08C39A17026349A04F8C0B0BE // Return to Hadron, e1m9
|
||||
19D03FFC875589E21EDBB7AB74EF4AEF // Return to Hadron, e1m9, 2016.01.03 update
|
||||
{
|
||||
pointonline
|
||||
}
|
||||
|
||||
5B26545FF21B051CA06D389CE535684C // doom.wad e1m4
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 693 back top BROWN1
|
||||
// fix HOM errors with sectors too low
|
||||
setsectoroffset 9 floor 8
|
||||
setsectoroffset 105 floor 8
|
||||
setsectoroffset 132 floor 8
|
||||
setsectoroffset 137 floor 8
|
||||
}
|
||||
A24FE135D5B6FD427FE27BEF89717A65 // doom.wad e2m2
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 947 back top BROWN1
|
||||
setwalltexture 1596 back top WOOD1
|
||||
}
|
||||
1BC04D646B32D3A3E411DAF3C1A38FF8 // doom.wad e2m4
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 551 back top PIPE4
|
||||
setwalltexture 865 back bot STEP5
|
||||
setwalltexture 1062 front top GSTVINE1
|
||||
setwalltexture 1071 front top MARBLE1
|
||||
}
|
||||
99C580AD8FABE923CAB485CB7F3C5E5D // doom.wad e2m5
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 590 back top GRAYBIG
|
||||
setwalltexture 590 front bot BROWN1
|
||||
}
|
||||
3838AB29292587A7EE3CA71E7040868D // doom.wad e2m6
|
||||
{
|
||||
// missing texture
|
||||
setwalltexture 1091 back top compspan
|
||||
}
|
||||
8590F489879870C098CD7029C3187159 // doom.wad e2m7
|
||||
{
|
||||
// missing texture
|
||||
setwalltexture 1286 front bot SHAWN2
|
||||
}
|
||||
8A6399FAAA2E68649D4E4B16642074BE // doom.wad e2m9
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 121 back top SW1LION
|
||||
setwalltexture 123 back top GSTONE1
|
||||
setwalltexture 140 back top GSTONE1
|
||||
}
|
||||
2B65CB046EA40D2E44576949381769CA // Commercial Doom e3m4
|
||||
{
|
||||
// This line is erroneously specified as Door_Raise that monsters
|
||||
// can operate. If they do, they block you off from half the map. Change
|
||||
// this into a one-shot Door_Open so that it won't close.
|
||||
setlinespecial 1069 Door_Open 0 16 0 0 0
|
||||
clearlineflags 1069 0x200
|
||||
}
|
||||
5AC51CA9F1B57D4538049422A5E37291 // doom.wad e3m7
|
||||
{
|
||||
// missing texture
|
||||
setwalltexture 971 back top SP_HOT1
|
||||
}
|
||||
DA0C8281AC70EEC31127C228BCD7FE2C // doom.wad e4m1
|
||||
{
|
||||
// missing texture
|
||||
setwalltexture 470 front top GSTONE1
|
||||
}
|
||||
F6EE16F770AD309D608EA0B1F1E249FC // Ultimate Doom, e4m3
|
||||
{
|
||||
// Remove unreachable secrets
|
||||
setsectorspecial 124 0
|
||||
setsectorspecial 125 0
|
||||
// clear staircase to secret area
|
||||
setsectorspecial 127 0
|
||||
setsectorspecial 128 0
|
||||
setsectorspecial 129 0
|
||||
setsectorspecial 130 0
|
||||
setsectorspecial 131 0
|
||||
setsectorspecial 132 0
|
||||
setsectorspecial 133 0
|
||||
setsectorspecial 134 0
|
||||
setsectorspecial 136 0
|
||||
setsectorspecial 137 0
|
||||
setsectorspecial 138 0
|
||||
setsectorspecial 147 0
|
||||
setsectorspecial 148 0
|
||||
setsectorspecial 149 0
|
||||
setsectorspecial 150 0
|
||||
setsectorspecial 151 0
|
||||
setsectorspecial 152 0
|
||||
setsectorspecial 155 0
|
||||
}
|
||||
AAECADD4D97970AFF702D86FAFAC7D17 // doom.wad e4m4
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 427 back top BROWNHUG
|
||||
setwalltexture 558 back top BROWNHUG
|
||||
setwalltexture 567 front top BROWNHUG
|
||||
setwalltexture 572 front top BROWNHUG
|
||||
}
|
||||
94D4C869A0C02EF4F7375022B36AAE45 // Ultimate Doom, e4m7
|
||||
{
|
||||
// Remove unreachable secrets
|
||||
setsectorspecial 263 0
|
||||
setsectorspecial 264 0
|
||||
}
|
||||
|
||||
|
||||
AB24AE6E2CB13CBDD04600A4D37F9189 // doom2.wad map02
|
||||
1EC0AF1E3985650F0C9000319C599D0C // doom2bfg.wad map02
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 327 front bot STONE4
|
||||
setwalltexture 328 front bot STONE4
|
||||
setwalltexture 338 front bot STONE4
|
||||
setwalltexture 339 front bot STONE4
|
||||
}
|
||||
CEC791136A83EEC4B91D39718BDF9D82 // doom2.wad map04
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 456 back top SUPPORT3
|
||||
setwalltexture 108 front top STONE
|
||||
setwalltexture 109 front top STONE
|
||||
setwalltexture 110 front top STONE
|
||||
setwalltexture 111 front top STONE
|
||||
setwalltexture 127 front top STONE
|
||||
setwalltexture 128 front top STONE
|
||||
// remove erroneous blue keycard pickup ambush sector tags (nearby viewing windows, and the lights)
|
||||
setsectortag 19 0
|
||||
setsectortag 20 0
|
||||
setsectortag 23 0
|
||||
setsectortag 28 0
|
||||
setsectortag 33 0
|
||||
setsectortag 34 0
|
||||
setsectortag 83 0
|
||||
setsectortag 85 0
|
||||
}
|
||||
9E061AD7FBCD7FAD968C976CB4AA3B9D // doom2.wad map05
|
||||
{
|
||||
// fix bug with opening westmost door in door hallway - incorrect sector tagging - see doomwiki.org for more info
|
||||
setsectortag 4 0
|
||||
setsectortag 153 0
|
||||
}
|
||||
66C46385EB1A23D60839D1532522076B // doom2.wad map08
|
||||
{
|
||||
// missing texture
|
||||
setwalltexture 101 back top BRICK7
|
||||
}
|
||||
5BDA34DA60C0530794CC1EA2DA017976 // doom2.wad map14
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 1259 back top BSTONE2
|
||||
setwalltexture 1305 back top BSTONE2
|
||||
}
|
||||
1A540BA717BF9EC85F8522594C352F2A // Doom II, map15
|
||||
{
|
||||
setsectorspecial 147 0
|
||||
}
|
||||
0D491365C1B88B7D1B603890100DD03E // doom2.wad map18
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 451 front mid metal
|
||||
setwalltexture 459 front mid metal
|
||||
}
|
||||
B5506B1E8F2FC272AD0C77B9E0DF5491 // doom2.wad map19
|
||||
{
|
||||
// missing textures
|
||||
setwalltexture 355 back top STONE2
|
||||
setwalltexture 736 front top SLADWALL
|
||||
}
|
||||
EBDAC00E9D25D884B2C8F4B1F0390539 // doom2.wad map21
|
||||
{
|
||||
// push ceiling down in glitchy sectors above the stair switches
|
||||
setsectoroffset 50 ceil -56
|
||||
setsectoroffset 54 ceil -56
|
||||
}
|
||||
94893A0DC429A22ADC4B3A73DA537E16 // DOOM2.WAD map25
|
||||
{
|
||||
rebuildnodes
|
||||
}
|
||||
110F84DE041052B59307FAF0293E6BC0 // Doom II, map27
|
||||
{
|
||||
setsectorspecial 93 0
|
||||
setwalltexture 582 back top ZIMMER3
|
||||
}
|
||||
20251EDA21B2F2ECF6FF5B8BBC00B26C // Doom II, MAP29
|
||||
{
|
||||
// Missing textures on teleporters
|
||||
setwalltexture 405 back bot SUPPORT3
|
||||
setwalltexture 406 back bot SUPPORT3
|
||||
setwalltexture 407 back bot SUPPORT3
|
||||
setwalltexture 408 back bot SUPPORT3
|
||||
setwalltexture 516 back bot SUPPORT3
|
||||
setwalltexture 517 back bot SUPPORT3
|
||||
setwalltexture 518 back bot SUPPORT3
|
||||
setwalltexture 519 back bot SUPPORT3
|
||||
setwalltexture 524 back bot SUPPORT3
|
||||
setwalltexture 525 back bot SUPPORT3
|
||||
setwalltexture 526 back bot SUPPORT3
|
||||
setwalltexture 527 back bot SUPPORT3
|
||||
setwalltexture 1146 back bot SUPPORT3
|
||||
setwalltexture 1147 back bot SUPPORT3
|
||||
setwalltexture 1148 back bot SUPPORT3
|
||||
setwalltexture 1149 back bot SUPPORT3
|
||||
setwalltexture 1138 back bot SUPPORT3
|
||||
setwalltexture 1139 back bot SUPPORT3
|
||||
setwalltexture 1140 back bot SUPPORT3
|
||||
setwalltexture 1141 back bot SUPPORT3
|
||||
}
|
||||
ABC4EB5A1535ECCD0061AD14F3547908 // Plutonia Experiment, map26
|
||||
{
|
||||
setsectorspecial 156 0
|
||||
}
|
||||
|
||||
FF635FB9A2F076566299910F8C78F707 // nerve.wad, level04
|
||||
{
|
||||
setsectorspecial 868 0
|
||||
}
|
||||
|
||||
B68EB7CFB4CC481796E2919B9C16DFBD // Moc11.wad e1m6
|
||||
{
|
||||
setvertex 1650 -3072 2671
|
||||
setvertex 1642 -2944 2671
|
||||
}
|
||||
|
||||
712BB4CFBD0753178CA0C6814BE4C288 // map12 BTSX_E1 - patch some rendering glitches that are problematic to detect
|
||||
{
|
||||
setsectortag 545 32000
|
||||
setsectortag 1618 32000
|
||||
setlinespecial 2853 Sector_Set3DFloor 32000 4 0 0 0
|
||||
setsectortag 439 32001
|
||||
setsectortag 458 32001
|
||||
setlinespecial 2182 Sector_Set3DFloor 32001 4 0 0 0
|
||||
setsectortag 454 32002
|
||||
setsectortag 910 32002
|
||||
setlinespecial 2410 Sector_Set3DFloor 32002 4 1 0 0
|
||||
}
|
||||
|
||||
1ED329858AB154C55878DA1C11A4F100 // unloved.pk3:unlovedmaps.wad map01
|
||||
FA23E72FA955E66EC68609F72C0BA71E // unloved.pk3:unlovedmaps.wad map02
|
||||
41BEC1F643CFEEC997AF98276A05EC88 // unloved.pk3:unlovedmaps.wad map03
|
||||
|
@ -776,109 +244,8 @@ DC96228097DD004C40CCB1DB14A91EAA // unloved.pk3:unlovedmaps.wad map05
|
|||
clipmidtex
|
||||
}
|
||||
|
||||
|
||||
// Cosmetic fixes for Heretic: Shadow of the Serpent Riders
|
||||
D94587625BA779644D58151A87897CF1 // e1m2
|
||||
{
|
||||
// Missing textures
|
||||
setwalltexture 477 back top MOSSRCK1
|
||||
setwalltexture 478 back top MOSSRCK1
|
||||
setwalltexture 479 back top MOSSRCK1
|
||||
setwalltexture 1057 front top MOSSRCK1
|
||||
}
|
||||
ADD0FAC41AFB0B3C9B9F3C0006F93805 // e1m3
|
||||
{
|
||||
// Broken door between the hallway that leads to a Torch
|
||||
// and the passage that has a Bag of Holding at its end
|
||||
setsectoroffset 86 floor -128
|
||||
setsectoroffset 86 ceil -128
|
||||
}
|
||||
916318D8B06DAC2D83424B23E4B66531 // e1m4
|
||||
{
|
||||
// Wrong sector offsets
|
||||
setsectoroffset 0 ceil 8
|
||||
setsectoroffset 1 ceil 8
|
||||
setsectoroffset 2 ceil 8
|
||||
setsectoroffset 3 ceil 8
|
||||
setsectoroffset 4 ceil 8
|
||||
setsectoroffset 6 ceil 8
|
||||
setsectoroffset 6 floor 8
|
||||
setsectoroffset 17 ceil 8
|
||||
// Yellow key door
|
||||
setsectoroffset 284 floor -8
|
||||
setsectoroffset 284 ceil -8
|
||||
// Missing textures
|
||||
setwalltexture 490 back bot GRSTNPB
|
||||
setwalltexture 722 front bot WOODWL
|
||||
setwalltexture 911 front bot WOODWL
|
||||
setwalltexture 1296 front bot WOODWL
|
||||
}
|
||||
397A0E17A39542E4E8294E156FAB0502 // e2m2
|
||||
{
|
||||
// Missing green door statues on easy and hard difficulties
|
||||
setthingskills 17 31
|
||||
setthingskills 18 31
|
||||
}
|
||||
CA3773ED313E8899311F3DD0CA195A68 // e3m6
|
||||
{
|
||||
// Quartz flask outside of map
|
||||
setthingskills 373 0
|
||||
// Missing wall torch on hard difficulty
|
||||
setthingskills 448 31
|
||||
// Missing textures
|
||||
setwalltexture 343 front top MOSSRCK1
|
||||
setwalltexture 370 front top MOSSRCK1
|
||||
}
|
||||
5E3FCFDE78310BB89F92B1626A47D0AD // heretic.wad E4M7
|
||||
{
|
||||
// Missing textures
|
||||
setwalltexture 1274 front top CSTLRCK
|
||||
setwalltexture 1277 back top CSTLRCK
|
||||
setwalltexture 1278 front top CSTLRCK
|
||||
}
|
||||
|
||||
39C594CAC07EE51C80F757DA465FCC94 // strife1.wad map10
|
||||
{
|
||||
// fix the shooting range by matching sector 138 and 145 properties together
|
||||
setsectoroffset 145 floor -32
|
||||
setsectoroffset 145 ceil 40
|
||||
setsectortexture 145 floor F_CONCRP
|
||||
setsectorlight 138 192
|
||||
setwalltexture 3431 back top BRKGRY01
|
||||
}
|
||||
|
||||
3FFAF2F624C1B4BB6F581DCF7B99CBA7 // hexen.wad MAP36
|
||||
7DC65D5029DD834481CD716B3D71388A // hexdd.wad MAP47
|
||||
6DC9F6CCEAE7A91AEC48EBE506F22BC4 // void.wad MAP01
|
||||
{
|
||||
setslopeoverflow
|
||||
polyobj
|
||||
}
|
||||
|
||||
3D8ED20BF5CAAE6D6AE0E10999C75084 // hgarden.pk3 map01
|
||||
{
|
||||
// spawn trees on top of arches
|
||||
setthingz 399 168
|
||||
setthingz 400 168
|
||||
setthingz 401 168
|
||||
setthingz 402 168
|
||||
setthingz 403 168
|
||||
setthingz 404 168
|
||||
}
|
||||
|
||||
6D4156EE0D12B77AD143A37C4D3DCF98 // dmonfear.wad map22
|
||||
{
|
||||
shorttex
|
||||
}
|
||||
|
||||
FCCA97FC851F6473EAA069F74247B317 // pg-raw.wad map31
|
||||
{
|
||||
setlinesectorref 331 front 74
|
||||
setlinesectorref 326 front 74
|
||||
setlinesectorref 497 front 74
|
||||
setlinesectorref 474 front 74
|
||||
setlinesectorref 471 front 74
|
||||
setlinesectorref 327 front 74
|
||||
setlinesectorref 328 front 74
|
||||
setlinesectorref 329 front 74
|
||||
setsectortag 74 4
|
||||
setlinespecial 357 Transfer_Heights 4 2 0 0 0
|
||||
}
|
||||
|
|
|
@ -7,6 +7,7 @@ version "3.3"
|
|||
#include "zscript/actor.txt"
|
||||
#include "zscript/actor_checks.txt"
|
||||
#include "zscript/events.txt"
|
||||
#include "zscript/level_compatibility.txt"
|
||||
|
||||
#include "zscript/menu/menuitembase.txt"
|
||||
#include "zscript/menu/menu.txt"
|
||||
|
|
701
wadsrc/static/zscript/level_compatibility.txt
Normal file
701
wadsrc/static/zscript/level_compatibility.txt
Normal file
|
@ -0,0 +1,701 @@
|
|||
|
||||
class LevelCompatibility play
|
||||
{
|
||||
private static void Apply(Name checksum)
|
||||
{
|
||||
switch (checksum)
|
||||
{
|
||||
case 'AB24AE6E2CB13CBDD04600A4D37F9189': // doom2.wad map02
|
||||
case '1EC0AF1E3985650F0C9000319C599D0C': // doom2bfg.wad map02
|
||||
{
|
||||
// Missing textures
|
||||
TextureID stone4 = TexMan.CheckForTexture("STONE4", TexMan.Type_Wall);
|
||||
SetWallTextureID(327, Line.front, Side.bottom, stone4);
|
||||
SetWallTextureID(328, Line.front, Side.bottom, stone4);
|
||||
SetWallTextureID(338, Line.front, Side.bottom, stone4);
|
||||
SetWallTextureID(339, Line.front, Side.bottom, stone4);
|
||||
break;
|
||||
}
|
||||
|
||||
case '66C46385EB1A23D60839D1532522076B': // doom2.wad map08
|
||||
{
|
||||
// Missing texture
|
||||
SetWallTexture(101, Line.back, Side.top, "BRICK7");
|
||||
break;
|
||||
}
|
||||
|
||||
case 'E2B5D1400279335811C1C1C0B437D9C8': // Deathknights of the Dark Citadel, map54
|
||||
{
|
||||
// This map has two gear boxes which are flagged for player cross
|
||||
// activation instead of the proper player uses activation.
|
||||
SetLineActivation(943, SPAC_Use);
|
||||
SetLineActivation(963, SPAC_Use);
|
||||
break;
|
||||
}
|
||||
|
||||
case '3F249EDD62A3A08F53A6C53CB4C7ABE5': // Artica 3 map01
|
||||
{
|
||||
ClearLineSpecial(66);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'F481922F4881F74760F3C0437FD5EDD0': // Community Chest 3 map03
|
||||
{
|
||||
// I have no idea how this conveyor belt setup manages to work under Boom.
|
||||
// Set the sector the voodoo doll ends up standing on when sectors tagged
|
||||
// 1 are raised so that the voodoo doll will be carried.
|
||||
SetLineSpecial(3559, Sector_CopyScroller, 17, 6);
|
||||
break;
|
||||
}
|
||||
|
||||
case '5B862477519B21B30059A466F2FF6460': // Khorus, map08
|
||||
{
|
||||
// This map uses a voodoo conveyor with slanted walls to shunt the
|
||||
// voodoo doll into side areas. For some reason, this voodoo doll
|
||||
// is unable to slide on them, because the slide calculation gets
|
||||
// them slightly inside the walls and thinks they are stuck. I could
|
||||
// not reproduce this with the real player, which is what has me
|
||||
// stumped. So, help them out be attaching some ThrustThing specials
|
||||
// to the walls.
|
||||
SetLineSpecial(443, ThrustThing, 96, 4);
|
||||
SetLineFlags(443, Line.ML_REPEAT_SPECIAL);
|
||||
SetLineActivation(443, SPAC_Push);
|
||||
SetLineSpecial(455, ThrustThing, 96, 4);
|
||||
SetLineFlags(455, Line.ML_REPEAT_SPECIAL);
|
||||
SetLineActivation(455, SPAC_Push);
|
||||
break;
|
||||
}
|
||||
|
||||
case '3D1E36E50F5A8D289E15433941605224': // Master Levels, catwalk.wad
|
||||
{
|
||||
// make it impossible to open door to 1-way bridge before getting red key
|
||||
ClearSectorTags(35);
|
||||
AddSectorTag(35, 15);
|
||||
for(int i=605; i<609;i++)
|
||||
{
|
||||
SetLineActivation(i, SPAC_PCross);
|
||||
SetLineSpecial(i, Door_Open, 15, 64);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case '3B9CAA02952F405269353FAAD8F8EC33': // Master Levels, nessus.wad
|
||||
{
|
||||
// move secret sector from too-thin doorframe to BFG closet
|
||||
SetSectorSpecial(211, 0);
|
||||
SetSectorSpecial(212, 1024);
|
||||
// lower floor a bit so secret sector can be entered fully
|
||||
OffsetSectorPlane(212, Sector.floor, -16);
|
||||
// make secret door stay open so you can't get locked in closet
|
||||
SetLineSpecial(1008, Door_Open, 0, 64);
|
||||
break;
|
||||
}
|
||||
|
||||
case '7ED9800213C00D6E7FB98652AB48B3DE': // Ultimate Simplicity, map04
|
||||
{
|
||||
// Add missing map spots on easy and medium skills
|
||||
// Demons will teleport into starting room making 100% kills possible
|
||||
SetThingSkills(31, 31);
|
||||
SetThingSkills(32, 31);
|
||||
break;
|
||||
}
|
||||
|
||||
case '1891E029994B023910CFE0B3209C3CDB': // Ultimate Simplicity, map07
|
||||
{
|
||||
// It is possible to get stuck on skill 0 or 1 when no shots have been fired
|
||||
// after sector 17 became accessible and before entering famous mancubus room.
|
||||
// Monsters from the mentioned sector won't be alerted and so
|
||||
// they won't teleport into the battle. ACS will wait forever for their deaths.
|
||||
SetLineSpecial(397, NoiseAlert);
|
||||
SetLineSpecial(411, NoiseAlert);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'F0E6F30F57B0425F17E43600AA813E80': // Ultimate Simplicity, map11
|
||||
{
|
||||
// If door (sector #309) is closed it cannot be open again
|
||||
// from one side potentially blocking level progression
|
||||
ClearLineSpecial(2445);
|
||||
break;
|
||||
}
|
||||
|
||||
case '952CC8D03572E17BA550B01B366EFBB9': // Cheogsh map01
|
||||
{
|
||||
// make the blue key spawn above the 3D floor
|
||||
SetThingZ(918, 296);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'D62DCA9EC226DE49108D5DD9271F7631': // Cheogsh 2 map04
|
||||
{
|
||||
// Stuff in megasphere cage is positioned too low
|
||||
for(int i=1640; i<=1649; i++)
|
||||
{
|
||||
SetThingZ(i, 528);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'DFC18B92BF3E8142B8684ECD8BD2EF06': // TNT: Evilution map15
|
||||
{
|
||||
// raise up sector with its counterpart so 100% kills becomes possible
|
||||
AddSectorTag(330, 11);
|
||||
break;
|
||||
}
|
||||
|
||||
case '2C4A3356C5EB3526D2C72A4AA4B18A36': // TNT: Evilution map29
|
||||
{
|
||||
// remove mancubus who always gets stuck in teleport tunnel, preventing
|
||||
// 100% kills on HMP
|
||||
SetThingFlags(405, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'A53AE580A4AF2B5D0B0893F86914781E': // TNT: Evilution map31
|
||||
{
|
||||
// The famous missing yellow key...
|
||||
SetThingFlags(470, 2016);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'D99AD22FF21A41B4EECDB3A7C803D75E': // TNT: Evilution map32
|
||||
{
|
||||
// door can close permanently; make switch that opens it repeatable
|
||||
SetLineFlags(872, Line.ML_REPEAT_SPECIAL);
|
||||
// switch should only open way to red key, don't lower bars yet,
|
||||
// instead make line just before red key open bars
|
||||
ClearSectorTags(197);
|
||||
AddSectorTag(197, 8);
|
||||
SetLineSpecial(1279, Floor_LowerToLowest, 8, 32);
|
||||
SetLineActivation(1240, SPAC_PCross);
|
||||
SetLineSpecial(1240, Floor_LowerToLowest, 38, 32);
|
||||
break;
|
||||
}
|
||||
|
||||
case '279BB50468FE9F5B36C6D821E4902369': // Plutonia Experiment map30
|
||||
{
|
||||
// flag items in deathmatch-only area correctly so that 100% items
|
||||
// are possible in solo
|
||||
SetThingFlags(250, 17);
|
||||
SetThingFlags(251, 17);
|
||||
SetThingFlags(252, 17);
|
||||
SetThingFlags(253, 17);
|
||||
SetThingFlags(254, 17);
|
||||
SetThingFlags(206, 17);
|
||||
break;
|
||||
}
|
||||
|
||||
case '4CB7AAC5C43CF32BDF05FD36481C1D9F': // Plutonia: Revisited map27
|
||||
{
|
||||
SetLineSpecial(1214, Plat_DownWaitUpStayLip, 20, 64, 150);
|
||||
SetLineSpecial(1215, Plat_DownWaitUpStayLip, 20, 64, 150);
|
||||
SetLineSpecial(1216, Plat_DownWaitUpStayLip, 20, 64, 150);
|
||||
SetLineSpecial(1217, Plat_DownWaitUpStayLip, 20, 64, 150);
|
||||
SetLineSpecial(1227, Plat_DownWaitUpStayLip, 20, 64, 150);
|
||||
break;
|
||||
}
|
||||
|
||||
case '5B26545FF21B051CA06D389CE535684C': // doom.wad e1m4
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(693, Line.back, Side.top, "BROWN1");
|
||||
// fix HOM errors with sectors too low
|
||||
OffsetSectorPlane(9, Sector.floor, 8);
|
||||
OffsetSectorPlane(105, Sector.floor, 8);
|
||||
OffsetSectorPlane(132, Sector.floor, 8);
|
||||
OffsetSectorPlane(137, Sector.floor, 8);
|
||||
break;
|
||||
}
|
||||
case 'A24FE135D5B6FD427FE27BEF89717A65': // doom.wad e2m2
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(947, Line.back, Side.top, "BROWN1");
|
||||
SetWallTexture(1596, Line.back, Side.top, "WOOD1");
|
||||
break;
|
||||
}
|
||||
case '1BC04D646B32D3A3E411DAF3C1A38FF8': // doom.wad e2m4
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(551, Line.back, Side.top, "PIPE4");
|
||||
SetWallTexture(865, Line.back, Side.bottom, "STEP5");
|
||||
SetWallTexture(1062, Line.front, Side.top, "GSTVINE1");
|
||||
SetWallTexture(1071, Line.front, Side.top, "MARBLE1");
|
||||
break;
|
||||
}
|
||||
case '99C580AD8FABE923CAB485CB7F3C5E5D': // doom.wad e2m5
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(590, Line.back, Side.top, "GRAYBIG");
|
||||
SetWallTexture(590, Line.front, Side.bottom, "BROWN1");
|
||||
break;
|
||||
}
|
||||
case '3838AB29292587A7EE3CA71E7040868D': // doom.wad e2m6
|
||||
{
|
||||
// missing texture
|
||||
SetWallTexture(1091, Line.back, Side.top, "compspan");
|
||||
break;
|
||||
}
|
||||
case '8590F489879870C098CD7029C3187159': // doom.wad e2m7
|
||||
{
|
||||
// missing texture
|
||||
SetWallTexture(1286, Line.front, Side.bottom, "SHAWN2");
|
||||
break;
|
||||
}
|
||||
case '8A6399FAAA2E68649D4E4B16642074BE': // doom.wad e2m9
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(121, Line.back, Side.top, "SW1LION");
|
||||
SetWallTexture(123, Line.back, Side.top, "GSTONE1");
|
||||
SetWallTexture(140, Line.back, Side.top, "GSTONE1");
|
||||
break;
|
||||
}
|
||||
case '2B65CB046EA40D2E44576949381769CA': // Commercial Doom e3m4
|
||||
{
|
||||
// This line is erroneously specified as Door_Raise that monsters
|
||||
// can operate. If they do, they block you off from half the map. Change
|
||||
// this into a one-shot Door_Open so that it won't close.
|
||||
SetLineSpecial(1069, Door_Open, 0, 16);
|
||||
SetLineFlags(1069, 0, Line.ML_REPEAT_SPECIAL);
|
||||
break;
|
||||
}
|
||||
case '5AC51CA9F1B57D4538049422A5E37291': // doom.wad e3m7
|
||||
{
|
||||
// missing texture
|
||||
SetWallTexture(971, Line.back, Side.top, "SP_HOT1");
|
||||
break;
|
||||
}
|
||||
case 'DA0C8281AC70EEC31127C228BCD7FE2C': // doom.wad e4m1
|
||||
{
|
||||
// missing texture
|
||||
SetWallTexture(470, Line.front, Side.top, "GSTONE1");
|
||||
break;
|
||||
}
|
||||
case 'F6EE16F770AD309D608EA0B1F1E249FC': // Ultimate Doom, e4m3
|
||||
{
|
||||
// Remove unreachable secrets
|
||||
SetSectorSpecial(124, 0);
|
||||
SetSectorSpecial(125, 0);
|
||||
// clear staircase to secret area
|
||||
SetSectorSpecial(127, 0);
|
||||
SetSectorSpecial(128, 0);
|
||||
SetSectorSpecial(129, 0);
|
||||
SetSectorSpecial(130, 0);
|
||||
SetSectorSpecial(131, 0);
|
||||
SetSectorSpecial(132, 0);
|
||||
SetSectorSpecial(133, 0);
|
||||
SetSectorSpecial(134, 0);
|
||||
SetSectorSpecial(136, 0);
|
||||
SetSectorSpecial(137, 0);
|
||||
SetSectorSpecial(138, 0);
|
||||
SetSectorSpecial(147, 0);
|
||||
SetSectorSpecial(148, 0);
|
||||
SetSectorSpecial(149, 0);
|
||||
SetSectorSpecial(150, 0);
|
||||
SetSectorSpecial(151, 0);
|
||||
SetSectorSpecial(152, 0);
|
||||
SetSectorSpecial(155, 0);
|
||||
break;
|
||||
}
|
||||
case 'AAECADD4D97970AFF702D86FAFAC7D17': // doom.wad e4m4
|
||||
{
|
||||
// missing textures
|
||||
TextureID brownhug = TexMan.CheckForTexture("BROWNHUG", TexMan.Type_Wall);
|
||||
SetWallTextureID(427, Line.back, Side.top, BROWNHUG);
|
||||
SetWallTextureID(558, Line.back, Side.top, BROWNHUG);
|
||||
SetWallTextureID(567, Line.front, Side.top, BROWNHUG);
|
||||
SetWallTextureID(572, Line.front, Side.top, BROWNHUG);
|
||||
break;
|
||||
}
|
||||
case '94D4C869A0C02EF4F7375022B36AAE45': // Ultimate Doom, e4m7
|
||||
{
|
||||
// Remove unreachable secrets
|
||||
SetSectorSpecial(263, 0);
|
||||
SetSectorSpecial(264, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'CEC791136A83EEC4B91D39718BDF9D82': // doom2.wad map04
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(456, Line.back, Side.top, "SUPPORT3");
|
||||
TextureID stone = TexMan.CheckForTexture("STONE", TexMan.Type_Wall);
|
||||
SetWallTextureID(108, Line.front, Side.top, STONE);
|
||||
SetWallTextureID(109, Line.front, Side.top, STONE);
|
||||
SetWallTextureID(110, Line.front, Side.top, STONE);
|
||||
SetWallTextureID(111, Line.front, Side.top, STONE);
|
||||
SetWallTextureID(127, Line.front, Side.top, STONE);
|
||||
SetWallTextureID(128, Line.front, Side.top, STONE);
|
||||
// remove erroneous blue keycard pickup ambush sector tags (nearby viewing windows, and the lights)
|
||||
ClearSectorTags(19);
|
||||
ClearSectorTags(20);
|
||||
ClearSectorTags(23);
|
||||
ClearSectorTags(28);
|
||||
ClearSectorTags(33);
|
||||
ClearSectorTags(34);
|
||||
ClearSectorTags(83);
|
||||
ClearSectorTags(85);
|
||||
break;
|
||||
}
|
||||
case '9E061AD7FBCD7FAD968C976CB4AA3B9D': // doom2.wad map05
|
||||
{
|
||||
// fix bug with opening westmost door in door hallway - incorrect sector tagging - see doomwiki.org for more info
|
||||
ClearSectorTags(4);
|
||||
ClearSectorTags(153);
|
||||
break;
|
||||
}
|
||||
case '5BDA34DA60C0530794CC1EA2DA017976': // doom2.wad map14
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(1259, Line.back, Side.top, "BSTONE2");
|
||||
SetWallTexture(1305, Line.back, Side.top, "BSTONE2");
|
||||
}
|
||||
case '1A540BA717BF9EC85F8522594C352F2A': // Doom II, map15
|
||||
{
|
||||
SetSectorSpecial(147, 0);
|
||||
break;
|
||||
}
|
||||
case '0D491365C1B88B7D1B603890100DD03E': // doom2.wad map18
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(451, Line.front, Side.mid, "metal");
|
||||
SetWallTexture(459, Line.front, Side.mid, "metal");
|
||||
break;
|
||||
}
|
||||
case 'B5506B1E8F2FC272AD0C77B9E0DF5491': // doom2.wad map19
|
||||
{
|
||||
// missing textures
|
||||
SetWallTexture(355, Line.back, Side.top, "STONE2");
|
||||
SetWallTexture(736, Line.front, Side.top, "SLADWALL");
|
||||
break;
|
||||
}
|
||||
case 'EBDAC00E9D25D884B2C8F4B1F0390539': // doom2.wad map21
|
||||
{
|
||||
// push ceiling down in glitchy sectors above the stair switches
|
||||
OffsetSectorPlane(50, Sector.ceiling, -56);
|
||||
OffsetSectorPlane(54, Sector.ceiling, -56);
|
||||
break;
|
||||
}
|
||||
case '110F84DE041052B59307FAF0293E6BC0': // Doom II, map27
|
||||
{
|
||||
SetSectorSpecial(93, 0);
|
||||
SetWallTexture(582, Line.back, Side.top, "ZIMMER3");
|
||||
break;
|
||||
}
|
||||
case '20251EDA21B2F2ECF6FF5B8BBC00B26C': // Doom II, MAP29
|
||||
{
|
||||
// Missing textures on teleporters
|
||||
TextureID support3 = TexMan.CheckForTexture("SUPPORT3", TexMan.Type_Wall);
|
||||
for(int i=0;i<4;i++)
|
||||
{
|
||||
SetWallTextureID(405+i, Line.back, Side.bottom, SUPPORT3);
|
||||
SetWallTextureID(516+i, Line.back, Side.bottom, SUPPORT3);
|
||||
SetWallTextureID(524+1, Line.back, Side.bottom, SUPPORT3);
|
||||
SetWallTextureID(1146+i, Line.back, Side.bottom, SUPPORT3);
|
||||
SetWallTextureID(1138+i, Line.back, Side.bottom, SUPPORT3);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 'ABC4EB5A1535ECCD0061AD14F3547908': // Plutonia Experiment, map26
|
||||
{
|
||||
SetSectorSpecial(156, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'FF635FB9A2F076566299910F8C78F707': // nerve.wad, level04
|
||||
{
|
||||
SetSectorSpecial(868, 0);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'D94587625BA779644D58151A87897CF1': // heretic.wad e1m2
|
||||
{
|
||||
// Missing textures
|
||||
TextureID mossrck1 = TexMan.CheckForTexture("MOSSRCK1", TexMan.Type_Wall);
|
||||
SetWallTextureID( 477, Line.back, Side.top, mossrck1);
|
||||
SetWallTextureID( 478, Line.back, Side.top, mossrck1);
|
||||
SetWallTextureID( 479, Line.back, Side.top, mossrck1);
|
||||
SetWallTextureID(1057, Line.front, Side.top, mossrck1);
|
||||
break;
|
||||
}
|
||||
case 'ADD0FAC41AFB0B3C9B9F3C0006F93805': // heretic.wad e1m3
|
||||
{
|
||||
// Broken door between the hallway that leads to a Torch
|
||||
// and the passage that has a Bag of Holding at its end
|
||||
OffsetSectorPlane(86, Sector.floor, -128);
|
||||
OffsetSectorPlane(86, Sector.ceiling, -128);
|
||||
break;
|
||||
}
|
||||
case '916318D8B06DAC2D83424B23E4B66531': // heretic.wad e1m4
|
||||
{
|
||||
// Wrong sector offsets
|
||||
OffsetSectorPlane( 0, Sector.ceiling, 8);
|
||||
OffsetSectorPlane( 1, Sector.ceiling, 8);
|
||||
OffsetSectorPlane( 2, Sector.ceiling, 8);
|
||||
OffsetSectorPlane( 3, Sector.ceiling, 8);
|
||||
OffsetSectorPlane( 4, Sector.ceiling, 8);
|
||||
OffsetSectorPlane( 6, Sector.ceiling, 8);
|
||||
OffsetSectorPlane( 6, Sector.floor, 8);
|
||||
OffsetSectorPlane(17, Sector.ceiling, 8);
|
||||
// Yellow key door
|
||||
OffsetSectorPlane(284, Sector.floor, -8);
|
||||
OffsetSectorPlane(284, Sector.ceiling, -8);
|
||||
// Missing textures
|
||||
SetWallTexture(490, Line.back, Side.bottom, "GRSTNPB");
|
||||
TextureID woodwl = TexMan.CheckForTexture("WOODWL", TexMan.Type_Wall);
|
||||
SetWallTextureID( 722, Line.front, Side.bottom, woodwl);
|
||||
SetWallTextureID( 911, Line.front, Side.bottom, woodwl);
|
||||
SetWallTextureID(1296, Line.front, Side.bottom, woodwl);
|
||||
break;
|
||||
}
|
||||
case '397A0E17A39542E4E8294E156FAB0502': // heretic.wad e2m2
|
||||
{
|
||||
// Missing green door statues on easy and hard difficulties
|
||||
SetThingSkills(17, 31);
|
||||
SetThingSkills(18, 31);
|
||||
break;
|
||||
}
|
||||
case 'CA3773ED313E8899311F3DD0CA195A68': // heretic.wad e3m6
|
||||
{
|
||||
// Quartz flask outside of map
|
||||
SetThingSkills(373, 0);
|
||||
// Missing wall torch on hard difficulty
|
||||
SetThingSkills(448, 31);
|
||||
// Missing textures
|
||||
TextureID mossrck1 = TexMan.CheckForTexture("MOSSRCK1", TexMan.Type_Wall);
|
||||
SetWallTextureID(343, Line.front, Side.top, mossrck1);
|
||||
SetWallTextureID(370, Line.front, Side.top, mossrck1);
|
||||
break;
|
||||
}
|
||||
case '5E3FCFDE78310BB89F92B1626A47D0AD': // heretic.wad E4M7
|
||||
{
|
||||
// Missing textures
|
||||
TextureID cstlrck = TexMan.CheckForTexture("CSTLRCK", TexMan.Type_Wall);
|
||||
SetWallTextureID(1274, Line.front, Side.top, cstlrck);
|
||||
SetWallTextureID(1277, Line.back, Side.top, cstlrck);
|
||||
SetWallTextureID(1278, Line.front, Side.top, cstlrck);
|
||||
break;
|
||||
}
|
||||
|
||||
case '39C594CAC07EE51C80F757DA465FCC94': // strife1.wad map10
|
||||
{
|
||||
// fix the shooting range by matching sector 138 and 145 properties together
|
||||
OffsetSectorPlane(145, Sector.floor, -32);
|
||||
OffsetSectorPlane(145, Sector.ceiling, 40);
|
||||
SetSectorTexture(145, Sector.floor, "F_CONCRP");
|
||||
SetSectorLight(138, 192);
|
||||
SetWallTexture(3431, Line.back, Side.top, "BRKGRY01");
|
||||
break;
|
||||
}
|
||||
|
||||
case 'DB31D71B11E3E4393B9C0CCB44A8639F': // rop_2015.wad e1m5
|
||||
{
|
||||
// Lower floor a bit so secret switch becomes accessible
|
||||
OffsetSectorPlane(527, Sector.floor, -32);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'CC3911090452D7C39EC8B3D97CEFDD6F': // jenesis.wad map16
|
||||
{
|
||||
// Missing texture with hardware renderer because of wrongly lowered sector
|
||||
ClearSectorTags(483);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'B68EB7CFB4CC481796E2919B9C16DFBD': // Moc11.wad e1m6
|
||||
{
|
||||
SetVertex(1650, -3072, 2671);
|
||||
SetVertex(1642, -2944, 2671);
|
||||
break;
|
||||
}
|
||||
|
||||
case '5C594C67CF7721005DE71429F9811370': // Eternal Doom map03
|
||||
{
|
||||
// fix broken staircase. The compatibility option is not sufficient
|
||||
// to reliably handle this so clear the tags from the unwanted sectors.
|
||||
ClearSectorTags(212);
|
||||
ClearSectorTags(213);
|
||||
ClearSectorTags(214);
|
||||
break;
|
||||
}
|
||||
|
||||
case 'DCE862393CAAA6FF1294FB7056B53057': // UAC Ultra map07
|
||||
{
|
||||
// Contains a scroller depending on Boom side effects
|
||||
SetLineSpecial(391, Sector_CopyScroller, 99, 6);
|
||||
break;
|
||||
}
|
||||
|
||||
case '9D50EBE17CEC78938C7A668DB0768611': // Strain map07
|
||||
{
|
||||
// Make the exit accessible
|
||||
SetLineFlags(1021, 0, Line.ML_BLOCKING);
|
||||
break;
|
||||
}
|
||||
|
||||
case '3D8ED20BF5CAAE6D6AE0E10999C75084': // hgarden.pk3 map01
|
||||
{
|
||||
// spawn trees on top of arches
|
||||
SetThingZ(399, 168);
|
||||
SetThingZ(400, 168);
|
||||
SetThingZ(401, 168);
|
||||
SetThingZ(402, 168);
|
||||
SetThingZ(403, 168);
|
||||
SetThingZ(404, 168);
|
||||
break;
|
||||
}
|
||||
|
||||
case '6DC9F6CCEAE7A91AEC48EBE506F22BC4': // void.wad MAP01
|
||||
{
|
||||
// Slightly squash the pillars in the starting room with "stimpacks"
|
||||
// floating on them so that they can be obtained.
|
||||
OffsetSectorPlane( 62, Sector.floor, -8);
|
||||
OffsetSectorPlane( 63, Sector.floor, -8);
|
||||
OffsetSectorPlane(118, Sector.floor, -8);
|
||||
OffsetSectorPlane(119, Sector.floor, -8);
|
||||
for (int i = 0; i < 8; ++i)
|
||||
{
|
||||
SetWallYScale(286 + i, Line.front, Side.bottom, 1.090909);
|
||||
SetWallYScale(710 + i, Line.front, Side.bottom, 1.090909);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case 'FCCA97FC851F6473EAA069F74247B317': // pg-raw.wad map31
|
||||
{
|
||||
SetLineSectorRef(331, Line.front, 74);
|
||||
SetLineSectorRef(326, Line.front, 74);
|
||||
SetLineSectorRef(497, Line.front, 74);
|
||||
SetLineSectorRef(474, Line.front, 74);
|
||||
SetLineSectorRef(471, Line.front, 74);
|
||||
SetLineSectorRef(327, Line.front, 74);
|
||||
SetLineSectorRef(328, Line.front, 74);
|
||||
SetLineSectorRef(329, Line.front, 74);
|
||||
AddSectorTag(74, 4);
|
||||
SetLineSpecial(357, Transfer_Heights, 6);
|
||||
break;
|
||||
}
|
||||
|
||||
case '712BB4CFBD0753178CA0C6814BE4C288': // beta version of map12 BTSX_E1 - patch some rendering glitches that are problematic to detect
|
||||
{
|
||||
AddSectorTag(545, 32000);
|
||||
AddSectorTag(1618, 32000);
|
||||
SetLineSpecial(2853, Sector_Set3DFloor, 32000, 4);
|
||||
AddSectorTag(439, 32001);
|
||||
AddSectorTag(458, 32001);
|
||||
SetLineSpecial(2182, Sector_Set3DFloor, 32001, 4);
|
||||
AddSectorTag(454, 32002);
|
||||
AddSectorTag(910, 32002);
|
||||
SetLineSpecial(2410, Sector_Set3DFloor, 32002, 4, 1);
|
||||
break;
|
||||
}
|
||||
|
||||
case '5A24FC83A3F9A2D6D54AF04E2E96684F': // AV.WAD MAP01
|
||||
{
|
||||
SetLineSectorRef(225, Line.back, 36);
|
||||
SetLineSectorRef(222, Line.back, 36);
|
||||
SetLineSectorRef(231, Line.back, 36);
|
||||
|
||||
SetLineSectorRef(223, Line.back, 36);
|
||||
SetLineSectorRef(224, Line.back, 36);
|
||||
SetLineSectorRef(227, Line.back, 36);
|
||||
|
||||
SetLineSectorRef(229, Line.back, 39);
|
||||
SetLineSectorRef(233, Line.back, 39);
|
||||
|
||||
TextureID nukage = TexMan.CheckForTexture("NUKAGE1", TexMan.Type_Flat);
|
||||
SetWallTexture(222, Line.front, Side.bottom, nukage);
|
||||
SetWallTexture(223, Line.front, Side.bottom, nukage);
|
||||
SetWallTexture(224, Line.front, Side.bottom, nukage);
|
||||
SetWallTexture(225, Line.front, Side.bottom, nukage);
|
||||
SetWallTexture(227, Line.front, Side.bottom, nukage);
|
||||
SetWallTexture(231, Line.front, Side.bottom, nukage);
|
||||
SetWallTexture(229, Line.front, Side.bottom, nukage);
|
||||
SetWallTexture(233, Line.front, Side.bottom, nukage);
|
||||
|
||||
for(int i = 0; i < 8; i++)
|
||||
{
|
||||
SetLineSectorRef(i+234, Line.back, 37);
|
||||
SetLineSectorRef(i+243, Line.back, 37);
|
||||
SetWallTexture(i+234, Line.back, Side.bottom, nukage);
|
||||
SetWallTexture(i+243, Line.back, Side.bottom, nukage);
|
||||
}
|
||||
|
||||
SetLineSpecial(336, Transfer_Heights, 32000, 6);
|
||||
AddSectorTag(40, 32000);
|
||||
AddSectorTag(38, 32000);
|
||||
AddSectorTag(37, 32000);
|
||||
AddSectorTag(34, 32000);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static native void ClearSectorTags(int sector);
|
||||
private static native void AddSectorTag(int sector, int tag);
|
||||
private static native void OffsetSectorPlane(int sector, int plane, double offset);
|
||||
private static native void SetThingSkills(int thing, int skills);
|
||||
private static native void SetThingZ(int thing, double z);
|
||||
private static native void SetThingFlags(int thing, int flags);
|
||||
private static native void SetVertex(uint vertex, double x, double y);
|
||||
private static native void SetLineSectorRef(uint line, uint side, uint sector);
|
||||
|
||||
private static void SetWallTexture(int line, int side, int texpart, String texture)
|
||||
{
|
||||
SetWallTextureID(line, side, texpart, TexMan.CheckForTexture(texture, TexMan.Type_Wall));
|
||||
}
|
||||
|
||||
private static void SetWallTextureID(int line, int side, int texpart, TextureID texture)
|
||||
{
|
||||
level.Lines[line].sidedef[side].SetTexture(texpart, texture);
|
||||
}
|
||||
|
||||
private static void SetLineFlags(int line, int setflags, int clearflags = 0)
|
||||
{
|
||||
level.Lines[line].flags = (level.Lines[line].flags & ~clearflags) | setflags;
|
||||
}
|
||||
|
||||
private static void SetLineActivation(int line, int acttype)
|
||||
{
|
||||
level.Lines[line].activation = acttype;
|
||||
}
|
||||
|
||||
private static void ClearLineSpecial(int line)
|
||||
{
|
||||
level.Lines[line].special = 0;
|
||||
}
|
||||
|
||||
private static void SetLineSpecial(int line, int special, int arg1 = 0, int arg2 = 0, int arg3 = 0, int arg4 = 0, int arg5 = 0)
|
||||
{
|
||||
level.Lines[line].special = special;
|
||||
level.Lines[line].args[0] = arg1;
|
||||
level.Lines[line].args[1] = arg2;
|
||||
level.Lines[line].args[2] = arg3;
|
||||
level.Lines[line].args[3] = arg4;
|
||||
level.Lines[line].args[4] = arg5;
|
||||
}
|
||||
|
||||
private static void SetSectorSpecial(int sectornum, int special)
|
||||
{
|
||||
level.sectors[sectornum].special = special;
|
||||
}
|
||||
|
||||
private static void SetSectorTextureID(int sectornum, int plane, TextureID texture)
|
||||
{
|
||||
level.sectors[sectornum].SetTexture(plane, texture);
|
||||
}
|
||||
|
||||
private static void SetSectorTexture(int sectornum, int plane, String texture)
|
||||
{
|
||||
SetSectorTextureID(sectornum, plane, TexMan.CheckForTexture(texture, TexMan.Type_Flat));
|
||||
}
|
||||
|
||||
private static void SetSectorLight(int sectornum, int newval)
|
||||
{
|
||||
level.sectors[sectornum].SetLightLevel(newval);
|
||||
}
|
||||
|
||||
private static void SetWallYScale(int line, int side, int texpart, double scale)
|
||||
{
|
||||
level.lines[line].sidedef[side].SetTextureYScale(texpart, scale);
|
||||
}
|
||||
}
|
|
@ -102,6 +102,12 @@ struct Side native play
|
|||
|
||||
struct Line native play
|
||||
{
|
||||
enum ESide
|
||||
{
|
||||
front=0,
|
||||
back=1
|
||||
}
|
||||
|
||||
enum ELineFlags
|
||||
{
|
||||
ML_BLOCKING =0x00000001, // solid, is an obstacle
|
||||
|
|
Loading…
Reference in a new issue