mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-29 23:33:00 +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 "w_wad.h"
|
||||||
#include "textures.h"
|
#include "textures.h"
|
||||||
#include "g_levellocals.h"
|
#include "g_levellocals.h"
|
||||||
|
#include "vm.h"
|
||||||
|
|
||||||
// MACROS ------------------------------------------------------------------
|
// MACROS ------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -103,6 +104,7 @@ enum
|
||||||
|
|
||||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||||
extern TArray<FMapThing> MapThingsConverted;
|
extern TArray<FMapThing> MapThingsConverted;
|
||||||
|
extern bool ForceNodeBuild;
|
||||||
|
|
||||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||||
|
|
||||||
|
@ -177,10 +179,6 @@ static const char *const SectorPlanes[] =
|
||||||
"floor", "ceil", NULL
|
"floor", "ceil", NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
static TArray<int> CompatParams;
|
|
||||||
static int ii_compatparams;
|
|
||||||
static TArray<FString> TexNames;
|
|
||||||
|
|
||||||
// CODE --------------------------------------------------------------------
|
// CODE --------------------------------------------------------------------
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
@ -198,7 +196,6 @@ void ParseCompatibility()
|
||||||
unsigned int j;
|
unsigned int j;
|
||||||
|
|
||||||
BCompatMap.Clear();
|
BCompatMap.Clear();
|
||||||
CompatParams.Clear();
|
|
||||||
|
|
||||||
// The contents of this file are not cumulative, as it should not
|
// The contents of this file are not cumulative, as it should not
|
||||||
// be present in user-distributed maps.
|
// be present in user-distributed maps.
|
||||||
|
@ -251,205 +248,12 @@ void ParseCompatibility()
|
||||||
{
|
{
|
||||||
flags.CompatFlags[Options[i].WhichSlot] |= Options[i].CompatFlags;
|
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
|
else
|
||||||
{
|
{
|
||||||
sc.UnGet();
|
sc.UnGet();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (flags.ExtCommandIndex != ~0u)
|
|
||||||
{
|
|
||||||
CompatParams.Push(CP_END);
|
|
||||||
}
|
|
||||||
sc.MustGetStringName("}");
|
sc.MustGetStringName("}");
|
||||||
for (j = 0; j < md5array.Size(); ++j)
|
for (j = 0; j < md5array.Size(); ++j)
|
||||||
{
|
{
|
||||||
|
@ -465,7 +269,7 @@ void ParseCompatibility()
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void CheckCompatibility(MapData *map)
|
FName CheckCompatibility(MapData *map)
|
||||||
{
|
{
|
||||||
FMD5Holder md5;
|
FMD5Holder md5;
|
||||||
FCompatValues *flags;
|
FCompatValues *flags;
|
||||||
|
@ -473,7 +277,6 @@ void CheckCompatibility(MapData *map)
|
||||||
ii_compatflags = 0;
|
ii_compatflags = 0;
|
||||||
ii_compatflags2 = 0;
|
ii_compatflags2 = 0;
|
||||||
ib_compatflags = 0;
|
ib_compatflags = 0;
|
||||||
ii_compatparams = -1;
|
|
||||||
|
|
||||||
// When playing Doom IWAD levels force COMPAT_SHORTTEX and COMPATF_LIGHT.
|
// 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.
|
// 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);
|
flags = BCompatMap.CheckKey(md5);
|
||||||
|
|
||||||
if (developer >= DMSG_NOTIFY)
|
FString hash;
|
||||||
{
|
|
||||||
Printf("MD5 = ");
|
|
||||||
for (size_t j = 0; j < sizeof(md5.Bytes); ++j)
|
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)
|
if (flags != NULL)
|
||||||
{
|
{
|
||||||
Printf(", cflags = %08x, cflags2 = %08x, bflags = %08x\n",
|
Printf(", cflags = %08x, cflags2 = %08x, bflags = %08x\n",
|
||||||
|
@ -511,7 +317,6 @@ void CheckCompatibility(MapData *map)
|
||||||
ii_compatflags |= flags->CompatFlags[SLOT_COMPAT];
|
ii_compatflags |= flags->CompatFlags[SLOT_COMPAT];
|
||||||
ii_compatflags2 |= flags->CompatFlags[SLOT_COMPAT2];
|
ii_compatflags2 |= flags->CompatFlags[SLOT_COMPAT2];
|
||||||
ib_compatflags |= flags->CompatFlags[SLOT_BCOMPAT];
|
ib_compatflags |= flags->CompatFlags[SLOT_BCOMPAT];
|
||||||
ii_compatparams = flags->ExtCommandIndex;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Reset i_compatflags
|
// Reset i_compatflags
|
||||||
|
@ -522,6 +327,7 @@ void CheckCompatibility(MapData *map)
|
||||||
{
|
{
|
||||||
ib_compatflags |= BCOMPATF_FLOATBOB;
|
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;
|
PClass *const cls = PClass::FindClass("LevelCompatibility");
|
||||||
|
if (cls != nullptr)
|
||||||
while (i < CompatParams.Size() && CompatParams[i] != CP_END)
|
|
||||||
{
|
{
|
||||||
switch (CompatParams[i])
|
PFunction *const func = dyn_cast<PFunction>(cls->FindSymbol("Apply", true));
|
||||||
|
if (func != nullptr)
|
||||||
{
|
{
|
||||||
case CP_CLEARFLAGS:
|
VMValue param = { (int)checksum };
|
||||||
{
|
VMCall(func->Variants[0].Implementation, ¶m, 1, nullptr, 0);
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
// CCMD mapchecksum
|
||||||
|
@ -799,3 +506,4 @@ CCMD (hiddencompatflags)
|
||||||
{
|
{
|
||||||
Printf("%08x %08x %08x\n", ii_compatflags, ii_compatflags2, ib_compatflags);
|
Printf("%08x %08x %08x\n", ii_compatflags, ii_compatflags2, ib_compatflags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ struct FMD5HashTraits
|
||||||
extern TMap<FMD5Holder, FCompatValues, FMD5HashTraits> BCompatMap;
|
extern TMap<FMD5Holder, FCompatValues, FMD5HashTraits> BCompatMap;
|
||||||
|
|
||||||
void ParseCompatibility();
|
void ParseCompatibility();
|
||||||
void CheckCompatibility(MapData *map);
|
FName CheckCompatibility(MapData *map);
|
||||||
void SetCompatibilityParams();
|
void SetCompatibilityParams(FName);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3756,7 +3756,7 @@ void P_SetupLevel (const char *lumpname, int position)
|
||||||
{
|
{
|
||||||
level.maptype = MAPTYPE_UDMF;
|
level.maptype = MAPTYPE_UDMF;
|
||||||
}
|
}
|
||||||
CheckCompatibility(map);
|
FName checksum = CheckCompatibility(map);
|
||||||
if (ib_compatflags & BCOMPATF_REBUILDNODES)
|
if (ib_compatflags & BCOMPATF_REBUILDNODES)
|
||||||
{
|
{
|
||||||
ForceNodeBuild = true;
|
ForceNodeBuild = true;
|
||||||
|
@ -3834,7 +3834,7 @@ void P_SetupLevel (const char *lumpname, int position)
|
||||||
times[0].Unclock();
|
times[0].Unclock();
|
||||||
}
|
}
|
||||||
|
|
||||||
SetCompatibilityParams();
|
SetCompatibilityParams(checksum);
|
||||||
|
|
||||||
times[6].Clock();
|
times[6].Clock();
|
||||||
P_LoopSidedefs (true);
|
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
|
B2D8DA03489D1C67F60DC87FBC4EA338 // map01 - Massmouth 2
|
||||||
801304DA3784308D333951B5E0CF8E9E // map02
|
801304DA3784308D333951B5E0CF8E9E // map02
|
||||||
6EA4D5CAEA16857B2A882467E1633BC2 // map03
|
6EA4D5CAEA16857B2A882467E1633BC2 // map03
|
||||||
|
@ -52,15 +20,6 @@ A80E7EE40E0D0C76A6FBD242BE29FE27 // map15
|
||||||
resetplayerspeed
|
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
|
6DA6FCBA8089161BDEC6A1D3F6C8D60F // Eternal Doom MAP25
|
||||||
{
|
{
|
||||||
stairs
|
stairs
|
||||||
|
@ -77,7 +36,6 @@ A80E7EE40E0D0C76A6FBD242BE29FE27 // map15
|
||||||
useblocking
|
useblocking
|
||||||
}
|
}
|
||||||
|
|
||||||
// mostly cosmetic (except AV MAP07 and MM2 MAP25)
|
|
||||||
0EECBF37B328C9CAAF20DED4949A4157 // Sudtic e2m6
|
0EECBF37B328C9CAAF20DED4949A4157 // Sudtic e2m6
|
||||||
4ACE0644883BDA0CBA254FA02C9ACF83 // Teutic e3m4
|
4ACE0644883BDA0CBA254FA02C9ACF83 // Teutic e3m4
|
||||||
9F2BE080A33F775294BD78822456924E // Nukemine e1m4
|
9F2BE080A33F775294BD78822456924E // Nukemine e1m4
|
||||||
|
@ -87,6 +45,7 @@ CD31793D3A4B00231B124C0C23649644 // Strain map02
|
||||||
F84AB4557464A383E93F37CD3A82AC48 // MM2 map03
|
F84AB4557464A383E93F37CD3A82AC48 // MM2 map03
|
||||||
1497894956B3C8EBE8A240B7FDD99C6A // MM2 map25
|
1497894956B3C8EBE8A240B7FDD99C6A // MM2 map25
|
||||||
941E4CB56EE4184E0B1ED43486AB0BBF // AV map07
|
941E4CB56EE4184E0B1ED43486AB0BBF // AV map07
|
||||||
|
6D4156EE0D12B77AD143A37C4D3DCF98 // dmonfear.wad map22
|
||||||
{
|
{
|
||||||
shorttex
|
shorttex
|
||||||
}
|
}
|
||||||
|
@ -97,11 +56,6 @@ F84AB4557464A383E93F37CD3A82AC48 // MM2 map03
|
||||||
trace
|
trace
|
||||||
}
|
}
|
||||||
|
|
||||||
9D50EBE17CEC78938C7A668DB0768611 // Strain map07: Make the exit accessible
|
|
||||||
{
|
|
||||||
clearlineflags 1021 1
|
|
||||||
}
|
|
||||||
|
|
||||||
71C2E6D9CFA3D8750C6A9599FB2453BD // Hacx map03: There are some switches behind
|
71C2E6D9CFA3D8750C6A9599FB2453BD // Hacx map03: There are some switches behind
|
||||||
96368EB950E33AF62EA6423434E3CEF7 // HacX map17: shootable covers in these levels
|
96368EB950E33AF62EA6423434E3CEF7 // HacX map17: shootable covers in these levels
|
||||||
BA530202AF0BA0C6CBAE6A0C7076FB72 // Requiem map04
|
BA530202AF0BA0C6CBAE6A0C7076FB72 // Requiem map04
|
||||||
|
@ -180,11 +134,6 @@ CA267398C9B3A8F79349D3394F8B2106 // map20
|
||||||
spritesort
|
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
|
1D9E43988940CCD3555724E15DD8B1AB // Happy Time Circus map01 has bad teleporters
|
||||||
040F83028FFA74456E335ED300BE2C33 // MAP17 (TownInfection.wad)
|
040F83028FFA74456E335ED300BE2C33 // MAP17 (TownInfection.wad)
|
||||||
156FA31F5FF72A87BF345B68029D3051 // MAP02 (nprject5.wad)
|
156FA31F5FF72A87BF345B68029D3051 // MAP02 (nprject5.wad)
|
||||||
|
@ -201,19 +150,6 @@ AF40D0E49BD1B76D4B1AADD8212ADC46 // MAP01 (the wad that shall not be named =P)
|
||||||
badangles
|
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
|
8FA29398776146189396AA1AC6BB9E13 // Roger Ritenour's Phobos map03
|
||||||
{
|
{
|
||||||
floormove
|
floormove
|
||||||
|
@ -225,188 +161,20 @@ E2B5D1400279335811C1C1C0B437D9C8 // Deathknights of the Dark Citadel, map54
|
||||||
limitpain
|
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
|
7C1913DEE396BA26CFF22A0E9369B7D2 // Nuke Mine, e1m2
|
||||||
{
|
{
|
||||||
pointonline
|
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
|
8B2AC8D4DB4A49A5DCCBB067E04434D6 // The Hell Factory Hub One, map04
|
||||||
65A1EB4C87386F290816660A52932FF1 // Master Levels, garrison.wad
|
65A1EB4C87386F290816660A52932FF1 // Master Levels, garrison.wad
|
||||||
3DEE4EFEFAF3260C800A30734F54CE75 // Hellbound, map14
|
3DEE4EFEFAF3260C800A30734F54CE75 // Hellbound, map14
|
||||||
5FAA25F5A6AAB3409CAE0AF87F910341 // DOOM.wad e1m6
|
5FAA25F5A6AAB3409CAE0AF87F910341 // DOOM.wad e1m6
|
||||||
|
94893A0DC429A22ADC4B3A73DA537E16 // DOOM2.WAD map25
|
||||||
{
|
{
|
||||||
rebuildnodes
|
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
|
64B6CE3CB7349B6F6B1A885C449ACB96 // Super Sonic Doom, map31
|
||||||
{
|
{
|
||||||
// During the end-of-level tally, both PROP_FROZEN and PROP_TOTALLYFROZEN
|
// During the end-of-level tally, both PROP_FROZEN and PROP_TOTALLYFROZEN
|
||||||
|
@ -415,80 +183,15 @@ F0E6F30F57B0425F17E43600AA813E80 // Ultimate Simplicity, map11
|
||||||
linkfrozenprops
|
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
|
E89CCC7E155F1032F693359CC219BE6C // hexen.wad map30
|
||||||
B9DFF13207EACAC675C71D82624D0007 // XtheaterIII map01
|
B9DFF13207EACAC675C71D82624D0007 // XtheaterIII map01
|
||||||
6941BDC2F80C0FEBE34EFA23D5FB72B7 // sonic.wad map10
|
6941BDC2F80C0FEBE34EFA23D5FB72B7 // sonic.wad map10
|
||||||
|
3ABB618A475BCBC531B457BAA6E4E70A // Daedalus map04
|
||||||
|
795FDE3CC1C97140F326D0152B3FCE2A // Daedalus map24
|
||||||
{
|
{
|
||||||
DisablePushWindowCheck
|
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
|
D0139194F7817BF06F3988DFC47DB38D // Whispers of Satan map29
|
||||||
{
|
{
|
||||||
nopassover
|
nopassover
|
||||||
|
@ -514,254 +217,19 @@ C98F79709BD7E0E4C19026AB9575EC6F // cc-cod.zip:codlev.wad map07
|
||||||
noslopeid
|
noslopeid
|
||||||
}
|
}
|
||||||
|
|
||||||
|
3FFAF2F624C1B4BB6F581DCF7B99CBA7 // hexen.wad MAP36
|
||||||
|
7DC65D5029DD834481CD716B3D71388A // hexdd.wad MAP47
|
||||||
05AA32F1D2220A462DCDA245ED22B94B // sonic.wad map09
|
05AA32F1D2220A462DCDA245ED22B94B // sonic.wad map09
|
||||||
{
|
{
|
||||||
polyobj
|
polyobj
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
D7F6E9F08C39A17026349A04F8C0B0BE // Return to Hadron, e1m9
|
D7F6E9F08C39A17026349A04F8C0B0BE // Return to Hadron, e1m9
|
||||||
19D03FFC875589E21EDBB7AB74EF4AEF // Return to Hadron, e1m9, 2016.01.03 update
|
19D03FFC875589E21EDBB7AB74EF4AEF // Return to Hadron, e1m9, 2016.01.03 update
|
||||||
{
|
{
|
||||||
pointonline
|
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
|
1ED329858AB154C55878DA1C11A4F100 // unloved.pk3:unlovedmaps.wad map01
|
||||||
FA23E72FA955E66EC68609F72C0BA71E // unloved.pk3:unlovedmaps.wad map02
|
FA23E72FA955E66EC68609F72C0BA71E // unloved.pk3:unlovedmaps.wad map02
|
||||||
41BEC1F643CFEEC997AF98276A05EC88 // unloved.pk3:unlovedmaps.wad map03
|
41BEC1F643CFEEC997AF98276A05EC88 // unloved.pk3:unlovedmaps.wad map03
|
||||||
|
@ -776,109 +244,8 @@ DC96228097DD004C40CCB1DB14A91EAA // unloved.pk3:unlovedmaps.wad map05
|
||||||
clipmidtex
|
clipmidtex
|
||||||
}
|
}
|
||||||
|
|
||||||
|
6DC9F6CCEAE7A91AEC48EBE506F22BC4 // void.wad MAP01
|
||||||
// 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
|
|
||||||
{
|
{
|
||||||
|
setslopeoverflow
|
||||||
polyobj
|
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.txt"
|
||||||
#include "zscript/actor_checks.txt"
|
#include "zscript/actor_checks.txt"
|
||||||
#include "zscript/events.txt"
|
#include "zscript/events.txt"
|
||||||
|
#include "zscript/level_compatibility.txt"
|
||||||
|
|
||||||
#include "zscript/menu/menuitembase.txt"
|
#include "zscript/menu/menuitembase.txt"
|
||||||
#include "zscript/menu/menu.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
|
struct Line native play
|
||||||
{
|
{
|
||||||
|
enum ESide
|
||||||
|
{
|
||||||
|
front=0,
|
||||||
|
back=1
|
||||||
|
}
|
||||||
|
|
||||||
enum ELineFlags
|
enum ELineFlags
|
||||||
{
|
{
|
||||||
ML_BLOCKING =0x00000001, // solid, is an obstacle
|
ML_BLOCKING =0x00000001, // solid, is an obstacle
|
||||||
|
|
Loading…
Reference in a new issue