Merge commit '6e45c565a0bc8d05279b0b2458a3fb718ae0924c' into scripting

Conflicts:
	src/p_mobj.cpp

(This stops right before moving the conversation IDs into MAPINFO because that feature is quite conflict-heavy and will have to merged by itself.)
This commit is contained in:
Christoph Oelckers 2015-04-28 12:59:20 +02:00
commit ddced06be2
28 changed files with 1672 additions and 1457 deletions

View file

@ -253,7 +253,7 @@ void FIWadManager::ParseIWadInfo(const char *fn, const char *data, int datasize)
//==========================================================================
//
// Lool for IWAD definition lump
// Look for IWAD definition lump
//
//==========================================================================
@ -302,11 +302,11 @@ int FIWadManager::ScanIWAD (const char *iwad)
FResourceLump *lump = iwadfile->GetLump(ii);
CheckLumpName(lump->Name);
if (lump->FullName != NULL)
if (lump->FullName.IsNotEmpty())
{
if (strnicmp(lump->FullName, "maps/", 5) == 0)
{
FString mapname(lump->FullName+5, strcspn(lump->FullName+5, "."));
FString mapname(&lump->FullName[5], strcspn(&lump->FullName[5], "."));
CheckLumpName(mapname);
}
}

View file

@ -2012,6 +2012,9 @@ static void D_DoomInit()
static void AddAutoloadFiles(const char *group, const char *autoname)
{
LumpFilterGroup = group;
LumpFilterIWAD = autoname;
if (!(gameinfo.flags & GI_SHAREWARE) && !Args->CheckParm("-noautoload"))
{
FString file;

View file

@ -337,6 +337,7 @@ struct mapthinghexen_t
};
class FArchive;
struct FDoomEdEntry;
// Internal representation of a mapthing
struct FMapThing
@ -346,7 +347,8 @@ struct FMapThing
fixed_t y;
fixed_t z;
short angle;
short type;
FDoomEdEntry *info;
short EdNum;
WORD SkillFilter;
WORD ClassFilter;
DWORD flags;
@ -363,8 +365,6 @@ struct FMapThing
short pitch;
short roll;
DWORD RenderStyle;
void Serialize (FArchive &);
};

View file

@ -69,3 +69,4 @@ int SinglePlayerClass[MAXPLAYERS];
bool ToggleFullscreen;
int BorderTopRefresh;
FString LumpFilterGroup, LumpFilterIWAD;

View file

@ -250,4 +250,7 @@ EXTERN_CVAR (Int, compatflags);
EXTERN_CVAR (Int, compatflags2);
extern int i_compatflags, i_compatflags2, ii_compatflags, ii_compatflags2, ib_compatflags;
// Filters from AddAutoloadFiles(). Used to filter files from archives.
extern FString LumpFilterGroup, LumpFilterIWAD;
#endif

View file

@ -45,20 +45,31 @@
const char *SpecialMapthingNames[] = {
"$PLAYER1START",
"$PLAYER2START",
"$PLAYER3START",
"$PLAYER4START",
"$PLAYER5START",
"$PLAYER6START",
"$PLAYER7START",
"$PLAYER8START",
"$DEATHMATCHSTART",
"$SSEQOVERRIDE",
"$POLYANCHOR",
"$POLYSPAWN",
"$POLYSPAWNCRUSH",
"$POLYSPAWNHURT"
"$Player1Start",
"$Player2Start",
"$Player3Start",
"$Player4Start",
"$Player5Start",
"$Player6Start",
"$Player7Start",
"$Player8Start",
"$DeathmatchStart",
"$SSeqOverride",
"$PolyAnchor",
"$PolySpawn",
"$PolySpawnCrush",
"$PolySpawnHurt",
"$SlopeFloorPointLine",
"$SlopeCeilingPointLine",
"$SetFloorSlope",
"$SetCeilingSlope",
"$VavoomFloor",
"$VavoomCeiling",
"$CopyFloorPlane",
"$CopyCeilingPlane",
"$VertexFloorZ",
"$VertexCeilingZ",
};
//==========================================================================
//

View file

@ -284,20 +284,31 @@ struct FDoomEdEntry
enum ESpecialMapthings
{
SMT_PLAYER1START = 1,
SMT_PLAYER2START,
SMT_PLAYER3START,
SMT_PLAYER4START,
SMT_PLAYER5START,
SMT_PLAYER6START,
SMT_PLAYER7START,
SMT_PLAYER8START,
SMT_DEATHMATCHSTART,
SMT_SSEQOVERRIDE,
SMT_POLYANCHOR,
SMT_POLYSPAWN,
SMT_POLYSPAWNCRUSH,
SMT_POLYSPAWNHURT,
SMT_Player1Start = 1,
SMT_Player2Start,
SMT_Player3Start,
SMT_Player4Start,
SMT_Player5Start,
SMT_Player6Start,
SMT_Player7Start,
SMT_Player8Start,
SMT_DeathmatchStart,
SMT_SSeqOverride,
SMT_PolyAnchor,
SMT_PolySpawn,
SMT_PolySpawnCrush,
SMT_PolySpawnHurt,
SMT_SlopeFloorPointLine,
SMT_SlopeCeilingPointLine,
SMT_SetFloorSlope,
SMT_SetCeilingSlope,
SMT_VavoomFloor,
SMT_VavoomCeiling,
SMT_CopyFloorPlane,
SMT_CopyCeilingPlane,
SMT_VertexFloorZ,
SMT_VertexCeilingZ,
};

View file

@ -716,30 +716,31 @@ static int LoadSprites (spritetype *sprites, Xsprite *xsprites, int numsprites,
mapthings[count].args[1] = xsprites[i].Data4;
mapthings[count].args[2] = xsprites[i].Data1;
mapthings[count].args[3] = xsprites[i].Data2;
mapthings[count].type = 14065;
mapthings[count].EdNum = 14065;
}
else if (xsprites != NULL && sprites[i].lotag == 1)
{ // Blood player start
if (xsprites[i].Data1 < 4)
mapthings[count].type = 1 + xsprites[i].Data1;
mapthings[count].EdNum= 1 + xsprites[i].Data1;
else
mapthings[count].type = 4001 + xsprites[i].Data1 - 4;
mapthings[count].EdNum = 4001 + xsprites[i].Data1 - 4;
}
else if (xsprites != NULL && sprites[i].lotag == 2)
{ // Bloodbath start
mapthings[count].type = 11;
mapthings[count].EdNum = 11;
}
else
{
if (sprites[i].cstat & 32768) continue;
if (sprites[i].xrepeat == 0 || sprites[i].yrepeat == 0) continue;
mapthings[count].type = 9988;
mapthings[count].EdNum = 9988;
mapthings[count].args[0] = sprites[i].picnum;
mapthings[count].args[2] = sprites[i].xrepeat;
mapthings[count].args[3] = sprites[i].yrepeat;
mapthings[count].args[4] = sprites[i].cstat;
}
mapthings[count].info = DoomEdMap.CheckKey(mapthings[count].EdNum);
count++;
}
return count;
@ -783,7 +784,7 @@ static void CreateStartSpot (fixed_t *pos, FMapThing *start)
FMapThing mt =
{
0, (LittleLong(pos[0])<<12), ((-LittleLong(pos[1]))<<12), 0,// tid, x, y, z
short(Scale ((2048-angle)&2047, 360, 2048)), 1, // angle, type
short(Scale ((2048-angle)&2047, 360, 2048)), DoomEdMap.CheckKey(1), 1, // angle, type
0, 0, // Skillfilter, Classfilter
7|MTF_SINGLE|224, // flags
0, {0}, 0 // special is 0, args and Conversation are 0

View file

@ -469,11 +469,6 @@ void AActor::Serialize (FArchive &arc)
}
}
void FMapThing::Serialize (FArchive &arc)
{
arc << thingid << x << y << z << angle << type << flags << special
<< args[0] << args[1] << args[2] << args[3] << args[4];
}
AActor::AActor () throw()
{
@ -4705,17 +4700,17 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
AActor *mobj;
fixed_t x, y, z;
if (mthing->type == 0 || mthing->type == -1)
if (mthing->EdNum == 0 || mthing->EdNum == -1)
return NULL;
// find which type to spawn
FDoomEdEntry *mentry = DoomEdMap.CheckKey(mthing->type);
FDoomEdEntry *mentry = mthing->info;
if (mentry == NULL)
{
// [RH] Don't die if the map tries to spawn an unknown thing
Printf ("Unknown type %i at (%i, %i)\n",
mthing->type,
mthing->EdNum,
mthing->x>>FRACBITS, mthing->y>>FRACBITS);
mentry = DoomEdMap.CheckKey(0);
if (mentry == NULL) // we need a valid entry for the rest of this function so if we can't find a default, let's exit right away.
@ -4742,7 +4737,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
switch (mentry->Special)
{
case SMT_DEATHMATCHSTART:
case SMT_DeathmatchStart:
{
// count deathmatch start positions
FPlayerStart start(mthing, 0);
@ -4750,10 +4745,10 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
return NULL;
}
case SMT_POLYANCHOR:
case SMT_POLYSPAWN:
case SMT_POLYSPAWNCRUSH:
case SMT_POLYSPAWNHURT:
case SMT_PolyAnchor:
case SMT_PolySpawn:
case SMT_PolySpawnCrush:
case SMT_PolySpawnHurt:
{
polyspawns_t *polyspawn = new polyspawns_t;
polyspawn->next = polyspawns;
@ -4762,20 +4757,20 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
polyspawn->angle = mthing->angle;
polyspawn->type = mentry->Special;
polyspawns = polyspawn;
if (mentry->Special != SMT_POLYANCHOR)
if (mentry->Special != SMT_PolyAnchor)
po_NumPolyobjs++;
return NULL;
}
case SMT_PLAYER1START:
case SMT_PLAYER2START:
case SMT_PLAYER3START:
case SMT_PLAYER4START:
case SMT_PLAYER5START:
case SMT_PLAYER6START:
case SMT_PLAYER7START:
case SMT_PLAYER8START:
pnum = mentry->Special - SMT_PLAYER1START;
case SMT_Player1Start:
case SMT_Player2Start:
case SMT_Player3Start:
case SMT_Player4Start:
case SMT_Player5Start:
case SMT_Player6Start:
case SMT_Player7Start:
case SMT_Player8Start:
pnum = mentry->Special - SMT_Player1Start;
break;
// Sound sequence override will be handled later
@ -4860,7 +4855,7 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
}
// [RH] sound sequence overriders
if (mentry->Type == NULL && mentry->Special == SMT_SSEQOVERRIDE)
if (mentry->Type == NULL && mentry->Special == SMT_SSeqOverride)
{
int type = mentry->Args[0];
if (type == 255) type = -1;

View file

@ -1665,7 +1665,7 @@ AActor *SpawnMapThing(int index, FMapThing *mt, int position)
if (dumpspawnedthings)
{
Printf("%5d: (%5d, %5d, %5d), doomednum = %5d, flags = %04x, type = %s\n",
index, mt->x>>FRACBITS, mt->y>>FRACBITS, mt->z>>FRACBITS, mt->type, mt->flags,
index, mt->x>>FRACBITS, mt->y>>FRACBITS, mt->z>>FRACBITS, mt->EdNum, mt->flags,
spawned? spawned->GetClass()->TypeName.GetChars() : "(none)");
}
T_AddSpawnedThing(spawned);
@ -1782,7 +1782,8 @@ void P_LoadThings (MapData * map)
mti[i].x = LittleShort(mt->x) << FRACBITS;
mti[i].y = LittleShort(mt->y) << FRACBITS;
mti[i].angle = LittleShort(mt->angle);
mti[i].type = LittleShort(mt->type);
mti[i].EdNum = LittleShort(mt->type);
mti[i].info = DoomEdMap.CheckKey(mti[i].EdNum);
}
delete [] mtp;
}
@ -1822,7 +1823,8 @@ void P_LoadThings2 (MapData * map)
mti[i].y = LittleShort(mth[i].y)<<FRACBITS;
mti[i].z = LittleShort(mth[i].z)<<FRACBITS;
mti[i].angle = LittleShort(mth[i].angle);
mti[i].type = LittleShort(mth[i].type);
mti[i].EdNum = LittleShort(mth[i].type);
mti[i].info = DoomEdMap.CheckKey(mti[i].EdNum);
mti[i].flags = LittleShort(mth[i].flags);
mti[i].special = mth[i].special;
for(int j=0;j<5;j++) mti[i].args[j] = mth[i].args[j];
@ -3333,14 +3335,14 @@ void P_GetPolySpots (MapData * map, TArray<FNodeBuilder::FPolyStart> &spots, TAr
{
for (unsigned int i = 0; i < MapThingsConverted.Size(); ++i)
{
FDoomEdEntry *mentry = DoomEdMap.CheckKey(MapThingsConverted[i].type);
if (mentry != NULL && mentry->Type == NULL && mentry->Special >= SMT_POLYANCHOR && mentry->Special <= SMT_POLYSPAWNHURT)
FDoomEdEntry *mentry = MapThingsConverted[i].info;
if (mentry != NULL && mentry->Type == NULL && mentry->Special >= SMT_PolyAnchor && mentry->Special <= SMT_PolySpawnHurt)
{
FNodeBuilder::FPolyStart newvert;
newvert.x = MapThingsConverted[i].x;
newvert.y = MapThingsConverted[i].y;
newvert.polynum = MapThingsConverted[i].angle;
if (mentry->Special == SMT_POLYANCHOR)
if (mentry->Special == SMT_PolyAnchor)
{
anchors.Push (newvert);
}

View file

@ -266,20 +266,6 @@ void P_VavoomSlope(sector_t * sec, int id, fixed_t x, fixed_t y, fixed_t z, int
}
}
enum
{
THING_SlopeFloorPointLine = 9500,
THING_SlopeCeilingPointLine = 9501,
THING_SetFloorSlope = 9502,
THING_SetCeilingSlope = 9503,
THING_CopyFloorPlane = 9510,
THING_CopyCeilingPlane = 9511,
THING_VavoomFloor=1500,
THING_VavoomCeiling=1501,
THING_VertexFloorZ=1504,
THING_VertexCeilingZ=1505,
};
//==========================================================================
//
// P_SetSlopesFromVertexHeights
@ -294,24 +280,27 @@ static void P_SetSlopesFromVertexHeights(FMapThing *firstmt, FMapThing *lastmt,
for (mt = firstmt; mt < lastmt; ++mt)
{
if (mt->type == THING_VertexFloorZ || mt->type == THING_VertexCeilingZ)
if (mt->info != NULL && mt->info->Type == NULL)
{
for(int i=0; i<numvertexes; i++)
if (mt->info->Special == SMT_VertexFloorZ || mt->info->Special == SMT_VertexCeilingZ)
{
if (vertexes[i].x == mt->x && vertexes[i].y == mt->y)
for (int i = 0; i < numvertexes; i++)
{
if (mt->type == THING_VertexFloorZ)
if (vertexes[i].x == mt->x && vertexes[i].y == mt->y)
{
vt_heights[0][i] = mt->z;
if (mt->info->Special == SMT_VertexFloorZ)
{
vt_heights[0][i] = mt->z;
}
else
{
vt_heights[1][i] = mt->z;
}
vt_found = true;
}
else
{
vt_heights[1][i] = mt->z;
}
vt_found = true;
}
mt->EdNum = 0;
}
mt->type = 0;
}
}
@ -427,49 +416,51 @@ void P_SpawnSlopeMakers (FMapThing *firstmt, FMapThing *lastmt, const int *oldve
for (mt = firstmt; mt < lastmt; ++mt)
{
if ((mt->type >= THING_SlopeFloorPointLine &&
mt->type <= THING_SetCeilingSlope) ||
mt->type == THING_VavoomFloor || mt->type == THING_VavoomCeiling)
if (mt->info != NULL && mt->info->Type == NULL &&
(mt->info->Special >= SMT_SlopeFloorPointLine && mt->info->Special <= SMT_VavoomCeiling))
{
fixed_t x, y, z;
secplane_t *refplane;
sector_t *sec;
bool ceiling;
x = mt->x;
y = mt->y;
sec = P_PointInSector (x, y);
if (mt->type & 1)
if (mt->info->Special == SMT_SlopeCeilingPointLine || mt->info->Special == SMT_VavoomCeiling || mt->info->Special == SMT_SetCeilingSlope)
{
refplane = &sec->ceilingplane;
ceiling = true;
}
else
{
refplane = &sec->floorplane;
ceiling = false;
}
z = refplane->ZatPoint (x, y) + (mt->z);
if (mt->type == THING_VavoomFloor || mt->type == THING_VavoomCeiling)
{
P_VavoomSlope(sec, mt->thingid, x, y, mt->z, mt->type & 1);
if (mt->info->Special <= SMT_SlopeCeilingPointLine)
{ // SlopeFloorPointLine and SlopCeilingPointLine
P_SlopeLineToPoint (mt->args[0], x, y, z, ceiling);
}
else if (mt->type <= THING_SlopeCeilingPointLine)
{ // THING_SlopeFloorPointLine and THING_SlopCeilingPointLine
P_SlopeLineToPoint (mt->args[0], x, y, z, mt->type & 1);
else if (mt->info->Special <= SMT_SetCeilingSlope)
{ // SetFloorSlope and SetCeilingSlope
P_SetSlope (refplane, ceiling, mt->angle, mt->args[0], x, y, z);
}
else
{ // THING_SetFloorSlope and THING_SetCeilingSlope
P_SetSlope (refplane, mt->type & 1, mt->angle, mt->args[0], x, y, z);
{ // VavoomFloor and VavoomCeiling
P_VavoomSlope(sec, mt->thingid, x, y, mt->z, ceiling);
}
mt->type = 0;
mt->EdNum = 0;
}
}
for (mt = firstmt; mt < lastmt; ++mt)
{
if (mt->type == THING_CopyFloorPlane ||
mt->type == THING_CopyCeilingPlane)
if (mt->info != NULL && mt->info->Type == NULL &&
(mt->info->Special == SMT_CopyFloorPlane || mt->info->Special == SMT_CopyCeilingPlane))
{
P_CopyPlane (mt->args[0], mt->x, mt->y, mt->type & 1);
mt->type = 0;
P_CopyPlane (mt->args[0], mt->x, mt->y, mt->info->Special == SMT_CopyCeilingPlane);
mt->EdNum = 0;
}
}

View file

@ -500,7 +500,8 @@ public:
break;
case NAME_Type:
th->type = (short)CheckInt(key);
th->EdNum = (short)CheckInt(key);
th->info = DoomEdMap.CheckKey(th->EdNum);
break;
case NAME_Conversation:

View file

@ -1561,8 +1561,8 @@ static void SpawnPolyobj (int index, int tag, int type)
sd->linedef->args[0] = 0;
IterFindPolySides(&polyobjs[index], sd);
po->MirrorNum = sd->linedef->args[1];
po->crush = (type != SMT_POLYSPAWN) ? 3 : 0;
po->bHurtOnTouch = (type == SMT_POLYSPAWNHURT);
po->crush = (type != SMT_PolySpawn) ? 3 : 0;
po->bHurtOnTouch = (type == SMT_PolySpawnHurt);
po->tag = tag;
po->seqType = sd->linedef->args[2];
if (po->seqType < 0 || po->seqType > 63)
@ -1632,8 +1632,8 @@ static void SpawnPolyobj (int index, int tag, int type)
}
if (po->Sidedefs.Size() > 0)
{
po->crush = (type != SMT_POLYSPAWN) ? 3 : 0;
po->bHurtOnTouch = (type == SMT_POLYSPAWNHURT);
po->crush = (type != SMT_PolySpawn) ? 3 : 0;
po->bHurtOnTouch = (type == SMT_PolySpawnHurt);
po->tag = tag;
po->seqType = po->Sidedefs[0]->linedef->args[3];
po->MirrorNum = po->Sidedefs[0]->linedef->args[2];
@ -1756,7 +1756,7 @@ void PO_Init (void)
for (polyspawn = polyspawns, prev = &polyspawns; polyspawn;)
{
// 9301 (3001) = no crush, 9302 (3002) = crushing, 9303 = hurting touch
if (polyspawn->type >= SMT_POLYSPAWN && polyspawn->type <= SMT_POLYSPAWNHURT)
if (polyspawn->type >= SMT_PolySpawn && polyspawn->type <= SMT_PolySpawnHurt)
{
// Polyobj StartSpot Pt.
polyobjs[polyIndex].StartSpot.x = polyspawn->x;
@ -1776,7 +1776,7 @@ void PO_Init (void)
for (polyspawn = polyspawns; polyspawn;)
{
polyspawns_t *next = polyspawn->next;
if (polyspawn->type == SMT_POLYANCHOR)
if (polyspawn->type == SMT_PolyAnchor)
{
// Polyobj Anchor Pt.
TranslateToStartSpot (polyspawn->angle, polyspawn->x, polyspawn->y);

View file

@ -179,7 +179,7 @@ struct F7ZLump : public FResourceLump
//==========================================================================
//
// Zip file
// 7-zip file
//
//==========================================================================
@ -190,8 +190,6 @@ class F7ZFile : public FResourceFile
F7ZLump *Lumps;
C7zArchive *Archive;
static int STACK_ARGS lumpcmp(const void * a, const void * b);
public:
F7ZFile(const char * filename, FileReader *filer);
bool Open(bool quiet);
@ -201,15 +199,6 @@ public:
int STACK_ARGS F7ZFile::lumpcmp(const void * a, const void * b)
{
F7ZLump * rec1 = (F7ZLump *)a;
F7ZLump * rec2 = (F7ZLump *)b;
return stricmp(rec1->FullName, rec2->FullName);
}
//==========================================================================
//
// 7Z file
@ -328,8 +317,7 @@ bool F7ZFile::Open(bool quiet)
if (!quiet) Printf(", %d lumps\n", NumLumps);
// Entries in archives are sorted alphabetically
qsort(&Lumps[0], NumLumps, sizeof(F7ZLump), lumpcmp);
PostProcessArchive(&Lumps[0], sizeof(F7ZLump));
return true;
}

View file

@ -86,8 +86,6 @@ class FDirectory : public FResourceFile
{
TArray<FDirectoryLump> Lumps;
static int STACK_ARGS lumpcmp(const void * a, const void * b);
int AddDirectory(const char *dirpath);
void AddEntry(const char *fullpath, int size);
@ -113,29 +111,18 @@ FDirectory::FDirectory(const char * directory)
#ifdef _WIN32
directory = _fullpath(NULL, directory, _MAX_PATH);
#else
// Todo for Linux: Resolve the path befire using it
// Todo for Linux: Resolve the path before using it
#endif
dirname = directory;
#ifdef _WIN32
free((void *)directory);
#endif
dirname.ReplaceChars('\\', '/');
if (dirname[dirname.Len()-1] != '/') dirname += '/';
Filename = copystring(dirname);
}
//==========================================================================
//
//
//
//==========================================================================
int STACK_ARGS FDirectory::lumpcmp(const void * a, const void * b)
{
FDirectoryLump * rec1 = (FDirectoryLump *)a;
FDirectoryLump * rec2 = (FDirectoryLump *)b;
return stricmp(rec1->FullName, rec2->FullName);
}
#ifdef _WIN32
//==========================================================================
//
@ -299,8 +286,7 @@ bool FDirectory::Open(bool quiet)
{
NumLumps = AddDirectory(Filename);
if (!quiet) Printf(", %d lumps\n", NumLumps);
// Entries in Zips are sorted alphabetically.
qsort(&Lumps[0], NumLumps, sizeof(FDirectoryLump), lumpcmp);
PostProcessArchive(&Lumps[0], sizeof(FDirectoryLump));
return true;
}

View file

@ -138,8 +138,6 @@ class FZipFile : public FResourceFile
{
FZipLump *Lumps;
static int STACK_ARGS lumpcmp(const void * a, const void * b);
public:
FZipFile(const char * filename, FileReader *file);
virtual ~FZipFile();
@ -148,16 +146,6 @@ public:
};
int STACK_ARGS FZipFile::lumpcmp(const void * a, const void * b)
{
FZipLump * rec1 = (FZipLump *)a;
FZipLump * rec2 = (FZipLump *)b;
return stricmp(rec1->FullName, rec2->FullName);
}
//==========================================================================
//
// Zip file
@ -274,8 +262,7 @@ bool FZipFile::Open(bool quiet)
if (!quiet) Printf(", %d lumps\n", NumLumps);
// Entries in Zips are sorted alphabetically.
qsort(Lumps, NumLumps, sizeof(FZipLump), lumpcmp);
PostProcessArchive(&Lumps[0], sizeof(FZipLump));
return true;
}

View file

@ -38,7 +38,8 @@
#include "cmdlib.h"
#include "w_wad.h"
#include "doomerrors.h"
#include "gi.h"
#include "doomstat.h"
//==========================================================================
@ -74,11 +75,6 @@ public:
FResourceLump::~FResourceLump()
{
if (FullName != NULL)
{
delete [] FullName;
FullName = NULL;
}
if (Cache != NULL && RefCount >= 0)
{
delete [] Cache;
@ -102,7 +98,8 @@ void FResourceLump::LumpNameSetup(const char *iname)
base = base.Left(base.LastIndexOf('.'));
uppercopy(Name, base);
Name[8] = 0;
FullName = copystring(iname);
FString temp = iname; // Note: iname can point to inside FullName's string buffer so we cannot do the assignment directly.
FullName = temp;
// Map some directories to WAD namespaces.
// Note that some of these namespaces don't exist in WADS.
@ -321,6 +318,196 @@ FResourceFile::~FResourceFile()
delete Reader;
}
int STACK_ARGS lumpcmp(const void * a, const void * b)
{
FResourceLump * rec1 = (FResourceLump *)a;
FResourceLump * rec2 = (FResourceLump *)b;
return rec1->FullName.CompareNoCase(rec2->FullName);
}
//==========================================================================
//
// FResourceFile :: PostProcessArchive
//
// Sorts files by name.
// For files named "filter/<game>/*": Using the same filter rules as config
// autoloading, move them to the end and rename them without the "filter/"
// prefix. Filtered files that don't match are deleted.
//
//==========================================================================
void FResourceFile::PostProcessArchive(void *lumps, size_t lumpsize)
{
// Entries in archives are sorted alphabetically
qsort(lumps, NumLumps, lumpsize, lumpcmp);
// Filter out lumps using the same names as the Autoload.* sections
// in the ini file use. We reduce the maximum lump concidered after
// each one so that we don't risk refiltering already filtered lumps.
DWORD max = NumLumps;
max -= FilterLumps(gameinfo.ConfigName, lumps, lumpsize, max);
max -= FilterLumps(LumpFilterGroup, lumps, lumpsize, max);
max -= FilterLumps(LumpFilterIWAD, lumps, lumpsize, max);
JunkLeftoverFilters(lumps, lumpsize, max);
}
//==========================================================================
//
// FResourceFile :: FilterLumps
//
// Finds any lumps between [0,<max>) that match the pattern
// "filter/<filtername>/*" and moves them to the end of the lump list.
// Returns the number of lumps moved.
//
//==========================================================================
int FResourceFile::FilterLumps(FString filtername, void *lumps, size_t lumpsize, DWORD max)
{
FString filter;
DWORD start, end;
if (filtername.IsEmpty())
{
return 0;
}
filter << "filter/" << filtername << '/';
if (FindPrefixRange(filter, lumps, lumpsize, max, start, end))
{
void *from = (BYTE *)lumps + start * lumpsize;
// Remove filter prefix from every name
void *lump_p = from;
for (DWORD i = start; i < end; ++i, lump_p = (BYTE *)lump_p + lumpsize)
{
FResourceLump *lump = (FResourceLump *)lump_p;
assert(lump->FullName.CompareNoCase(filter, (int)filter.Len()) == 0);
lump->LumpNameSetup(&lump->FullName[filter.Len()]);
}
// Move filtered lumps to the end of the lump list.
size_t count = (end - start) * lumpsize;
void *to = (BYTE *)lumps + NumLumps * lumpsize - count;
assert (to >= from);
if (from != to)
{
// Copy filtered lumps to a temporary buffer.
BYTE *filteredlumps = new BYTE[count];
memcpy(filteredlumps, from, count);
// Shift lumps left to make room for the filtered ones at the end.
memmove(from, (BYTE *)from + count, (NumLumps - end) * lumpsize);
// Copy temporary buffer to newly freed space.
memcpy(to, filteredlumps, count);
delete[] filteredlumps;
}
}
return end - start;
}
//==========================================================================
//
// FResourceFile :: JunkLeftoverFilters
//
// Deletes any lumps beginning with "filter/" that were not matched.
//
//==========================================================================
void FResourceFile::JunkLeftoverFilters(void *lumps, size_t lumpsize, DWORD max)
{
DWORD start, end;
if (FindPrefixRange("filter/", lumps, lumpsize, max, start, end))
{
// Since the resource lumps may contain non-POD data besides the
// full name, we "delete" them by erasing their names so they
// can't be found.
void *stop = (BYTE *)lumps + end * lumpsize;
for (void *p = (BYTE *)lumps + start * lumpsize; p < stop; p = (BYTE *)p + lumpsize)
{
FResourceLump *lump = (FResourceLump *)p;
lump->FullName = 0;
lump->Name[0] = '\0';
lump->Namespace = ns_invalid;
}
}
}
//==========================================================================
//
// FResourceFile :: FindPrefixRange
//
// Finds a range of lumps that start with the prefix string. <start> is left
// indicating the first matching one. <end> is left at one plus the last
// matching one.
//
//==========================================================================
bool FResourceFile::FindPrefixRange(FString filter, void *lumps, size_t lumpsize, DWORD maxlump, DWORD &start, DWORD &end)
{
DWORD min, max, mid, inside;
FResourceLump *lump;
int cmp;
end = start = 0;
// Pretend that our range starts at 1 instead of 0 so that we can avoid
// unsigned overflow if the range starts at the first lump.
lumps = (BYTE *)lumps - lumpsize;
// Binary search to find any match at all.
min = 1, max = maxlump;
while (min <= max)
{
mid = min + (max - min) / 2;
lump = (FResourceLump *)((BYTE *)lumps + mid * lumpsize);
cmp = lump->FullName.CompareNoCase(filter, (int)filter.Len());
if (cmp == 0)
break;
else if (cmp < 0)
min = mid + 1;
else
max = mid - 1;
}
if (max < min)
{ // matched nothing
return false;
}
// Binary search to find first match.
inside = mid;
min = 1, max = mid;
while (min <= max)
{
mid = min + (max - min) / 2;
lump = (FResourceLump *)((BYTE *)lumps + mid * lumpsize);
cmp = lump->FullName.CompareNoCase(filter, (int)filter.Len());
// Go left on matches and right on misses.
if (cmp == 0)
max = mid - 1;
else
min = mid + 1;
}
start = mid + (cmp != 0) - 1;
// Binary search to find last match.
min = inside, max = maxlump;
while (min <= max)
{
mid = min + (max - min) / 2;
lump = (FResourceLump *)((BYTE *)lumps + mid * lumpsize);
cmp = lump->FullName.CompareNoCase(filter, (int)filter.Len());
// Go right on matches and left on misses.
if (cmp == 0)
min = mid + 1;
else
max = mid - 1;
}
end = mid - (cmp != 0);
return true;
}
//==========================================================================
//

View file

@ -13,7 +13,7 @@ struct FResourceLump
friend class FResourceFile;
int LumpSize;
char * FullName; // only valid for files loaded from a .zip file
FString FullName; // only valid for files loaded from a non-wad archive
union
{
char Name[9];
@ -30,7 +30,6 @@ struct FResourceLump
FResourceLump()
{
FullName = NULL;
Cache = NULL;
Owner = NULL;
Flags = 0;
@ -66,9 +65,16 @@ protected:
FResourceFile(const char *filename, FileReader *r);
// for archives that can contain directories
void PostProcessArchive(void *lumps, size_t lumpsize);
private:
DWORD FirstLump;
int FilterLumps(FString filtername, void *lumps, size_t lumpsize, DWORD max);
bool FindPrefixRange(FString filter, void *lumps, size_t lumpsize, DWORD max, DWORD &start, DWORD &end);
void JunkLeftoverFilters(void *lumps, size_t lumpsize, DWORD max);
public:
static FResourceFile *OpenResourceFile(const char *filename, FileReader *file, bool quiet = false);
static FResourceFile *OpenDirectory(const char *filename, bool quiet = false);

View file

@ -290,14 +290,9 @@ void FWadCollection::AddFile (const char *filename, FileReader *wadinfo)
FResourceLump *lump = resfile->GetLump(i);
if (lump->Flags & LUMPF_EMBEDDED)
{
char path[256];
mysnprintf(path, countof(path), "%s:", filename);
char *wadstr = path + strlen(path);
FString path;
path.Format("%s:%s", filename, lump->FullName.GetChars());
FileReader *embedded = lump->NewReader();
strcpy(wadstr, lump->FullName);
AddFile(path, embedded);
}
}
@ -345,7 +340,9 @@ void FWadCollection::AddFile (const char *filename, FileReader *wadinfo)
sprintf(cksumout + (j * 2), "%02X", cksum[j]);
}
fprintf(hashfile, "file: %s, lump: %s, hash: %s, size: %d\n", filename, lump->FullName ? lump->FullName : lump->Name, cksumout, lump->LumpSize);
fprintf(hashfile, "file: %s, lump: %s, hash: %s, size: %d\n", filename,
lump->FullName.IsNotEmpty() ? lump->FullName.GetChars() : lump->Name,
cksumout, lump->LumpSize);
delete reader;
}
@ -737,7 +734,7 @@ void FWadCollection::InitHashChains (void)
FirstLumpIndex[j] = i;
// Do the same for the full paths
if (LumpInfo[i].lump->FullName!=NULL)
if (LumpInfo[i].lump->FullName.IsNotEmpty())
{
j = MakeKey(LumpInfo[i].lump->FullName) % NumLumps;
NextLumpIndex_FullName[i] = FirstLumpIndex_FullName[j];
@ -1088,7 +1085,7 @@ const char *FWadCollection::GetLumpFullName (int lump) const
{
if ((size_t)lump >= NumLumps)
return NULL;
else if (LumpInfo[lump].lump->FullName != NULL)
else if (LumpInfo[lump].lump->FullName.IsNotEmpty())
return LumpInfo[lump].lump->FullName;
else
return LumpInfo[lump].lump->Name;
@ -1574,3 +1571,33 @@ static void PrintLastError ()
Printf (TEXTCOLOR_RED " %s\n", strerror(errno));
}
#endif
#ifdef _DEBUG
//==========================================================================
//
// CCMD LumpNum
//
//==========================================================================
CCMD(lumpnum)
{
for (int i = 1; i < argv.argc(); ++i)
{
Printf("%s: %d\n", argv[i], Wads.CheckNumForName(argv[i]));
}
}
//==========================================================================
//
// CCMD LumpNumFull
//
//==========================================================================
CCMD(lumpnumfull)
{
for (int i = 1; i < argv.argc(); ++i)
{
Printf("%s: %d\n", argv[i], Wads.CheckNumForFullName(argv[i]));
}
}
#endif

View file

@ -52,6 +52,8 @@ struct wadlump_t
// [RH] Namespaces from BOOM.
typedef enum {
ns_invalid = -1,
ns_global = 0,
ns_sprites,
ns_flats,

View file

@ -0,0 +1,451 @@
/****************************************************************************/
/* */
/* DOOM SOUNDS */
/* */
/****************************************************************************/
// BOOM has pitch shifting equivalent to a range of 4. I never got to hear
// Doom when it used pitch shifting, so I don't know if this is correct or not.
$pitchshiftrange 4
// This sound is never actually used. It's just defined here for
// compatibility with DeHackEd patches that reference dsskldth.
misc/unused dsskldth // Sounds just like dsoof
//===========================================================================
//
// Doom-specific player sounds
//
//===========================================================================
$playersound player male *death dspldeth
$playersound player male *xdeath dspdiehi
$playersound player male *gibbed dsslop
$playersound player male *pain100 dsplpain
$playersounddup player male *pain75 *pain100
$playersounddup player male *pain50 *pain100
$playersounddup player male *pain25 *pain100
$playersound player male *grunt dsoof
$playersounddup player male *land *grunt
$playersound player male *jump dsjump
$playersound player male *fist dspunch
$playersound player male *usefail dsnoway
$playersound player female *death dsfldeth
$playersound player female *xdeath dsfdiehi
$playersound player female *gibbed dsslop
$playersound player female *pain100 dsflpain
$playersounddup player female *pain75 *pain100
$playersounddup player female *pain50 *pain100
$playersounddup player female *pain25 *pain100
$playersound player female *grunt dsfoof
$playersounddup player female *land *grunt
$playersound player female *jump dsfjump
$playersound player female *fist dspunch
$playersound player female *usefail dsfnoway
$playersound player other *death dscldeth
$playersound player other *xdeath dscdiehi
$playersound player other *gibbed dsslop
$playersound player other *pain100 dsclpain
$playersounddup player other *pain75 *pain100
$playersounddup player other *pain50 *pain100
$playersounddup player other *pain25 *pain100
$playersound player other *grunt dscoof
$playersounddup player other *land *grunt
$playersound player other *jump dscjump
$playersound player other *fist dspunch
$playersound player other *usefail dscnoway
// Alternate names for some player sounds needed for ZDoom <= 1.22 compatibility
//
// If any sounds with these names are defined later, they will redefine
// the corresponding player sounds instead. Likewise, if they are played,
// they will play the corresponding player sound instead.
$playercompat player male *death player/male/death1
$playercompat player male *death player/male/death2
$playercompat player male *death player/male/death3
$playercompat player male *death player/male/death4
$playercompat player male *xdeath player/male/xdeath1
$playercompat player male *pain100 player/male/pain100_1
$playercompat player male *pain100 player/male/pain100_2
$playercompat player male *pain75 player/male/pain75_1
$playercompat player male *pain75 player/male/pain75_2
$playercompat player male *pain50 player/male/pain50_1
$playercompat player male *pain50 player/male/pain50_2
$playercompat player male *pain25 player/male/pain25_1
$playercompat player male *pain25 player/male/pain25_2
$playercompat player male *grunt player/male/grunt1
$playercompat player male *land player/male/land1
$playercompat player male *jump player/male/jump1
$playercompat player male *gibbed player/male/gibbed
$playercompat player male *fist player/male/fist
$playercompat player female *death player/female/death1
$playercompat player female *death player/female/death2
$playercompat player female *death player/female/death3
$playercompat player female *death player/female/death4
$playercompat player female *xdeath player/female/xdeath1
$playercompat player female *pain100 player/female/pain100_1
$playercompat player female *pain100 player/female/pain100_2
$playercompat player female *pain75 player/female/pain75_1
$playercompat player female *pain75 player/female/pain75_2
$playercompat player female *pain50 player/female/pain50_1
$playercompat player female *pain50 player/female/pain50_2
$playercompat player female *pain25 player/female/pain25_1
$playercompat player female *pain25 player/female/pain25_2
$playercompat player female *grunt player/female/grunt1
$playercompat player female *land player/female/land1
$playercompat player female *jump player/female/jump1
$playercompat player female *gibbed player/female/gibbed
$playercompat player female *fist player/female/fist
$playercompat player other *death player/cyborg/death1
$playercompat player other *death player/cyborg/death2
$playercompat player other *death player/cyborg/death3
$playercompat player other *death player/cyborg/death4
$playercompat player other *xdeath player/cyborg/xdeath1
$playercompat player other *pain100 player/cyborg/pain100_1
$playercompat player other *pain100 player/cyborg/pain100_2
$playercompat player other *pain75 player/cyborg/pain75_1
$playercompat player other *pain75 player/cyborg/pain75_2
$playercompat player other *pain50 player/cyborg/pain50_1
$playercompat player other *pain50 player/cyborg/pain50_2
$playercompat player other *pain25 player/cyborg/pain25_1
$playercompat player other *pain25 player/cyborg/pain25_2
$playercompat player other *grunt player/cyborg/grunt1
$playercompat player other *land player/cyborg/land1
$playercompat player other *jump player/cyborg/jump1
$playercompat player other *gibbed player/cyborg/gibbed
$playercompat player other *fist player/cyborg/fist
//
// Weapons
//
$pitchshiftrange 3
weapons/sawup dssawup
weapons/sawidle dssawidl
weapons/sawfull dssawful
weapons/sawhit dssawhit
$pitchshiftrange 4
weapons/pistol dspistol
weapons/shotgf dsshotgn
weapons/shotgr dssgcock
weapons/sshotf dsdshtgn
weapons/sshoto dsdbopn
weapons/sshotc dsdbcls
weapons/sshotl dsdbload
weapons/chngun dspistol
weapons/rocklx dsbarexp
weapons/rocklf dsrlaunc
weapons/plasmaf dsplasma
weapons/plasmax dsfirxpl
weapons/bfgf dsbfg
weapons/bfgx dsrxplod
weapons/railgf railgf1
weapons/grbnce dsbounce
weapons/grenlx dsgrnexp
weapons/grenlf dsglaunc
// Problem: weapons/rocklx needs to be unlimited but
// is also used for the MAP30 brain explosion.
// This alias remaps to the original but has its own limit
// attached so that it doesn't become too loud.
$alias misc/brainexplode weapons/rocklx
$limit misc/brainexplode 4
$limit weapons/plasmaf 0
$limit weapons/chngun 0
$limit weapons/rocklf 0 // because normal running is almost as fast as a rocket
$limit weapons/rocklx 0 // and the cyberdemon shoots 3 at once
//===========================================================================
//
// MONSTER SOUNDS
//
//===========================================================================
misc/gibbed dsslop
// Zombie man
$random grunt/sight { grunt/sight1 grunt/sight2 grunt/sight3 }
$random grunt/death { grunt/death1 grunt/death2 grunt/death3 }
grunt/sight1 dsposit1
grunt/sight2 dsposit2
grunt/sight3 dsposit3
grunt/active dsposact
grunt/pain dspopain
grunt/death1 dspodth1
grunt/death2 dspodth2
grunt/death3 dspodth3
grunt/attack dspistol
// Shotgun guy
$random shotguy/sight { shotguy/sight1 shotguy/sight2 shotguy/sight3 }
$random shotguy/death { shotguy/death1 shotguy/death2 shotguy/death3 }
shotguy/sight1 dsposit1
shotguy/sight2 dsposit2
shotguy/sight3 dsposit3
shotguy/active dsposact
shotguy/pain dspopain
shotguy/death1 dspodth1
shotguy/death2 dspodth2
shotguy/death3 dspodth3
shotguy/attack dsshotgn
// Archvile
vile/sight dsvilsit
vile/active dsvilact
vile/pain dsvipain
vile/death dsvildth
vile/raise dsslop
vile/start dsvilatk
vile/stop dsbarexp
vile/firestrt dsflamst
vile/firecrkl dsflame
// Revenant
skeleton/sight dsskesit
skeleton/active dsskeact
skeleton/pain dspopain
skeleton/melee dsskepch
skeleton/swing dsskeswg
skeleton/death dsskedth
skeleton/attack dsskeatk
skeleton/tracex dsbarexp
// Fatso
fatso/sight dsmansit
fatso/active dsposact
fatso/pain dsmnpain
fatso/raiseguns dsmanatk
fatso/death dsmandth
fatso/attack dsfirsht
fatso/shotx dsfirxpl
// Chainguy
$random chainguy/sight { chainguy/sight1 chainguy/sight2 chainguy/sight3 }
$random chainguy/death { chainguy/death1 chainguy/death2 chainguy/death3 }
chainguy/sight1 dsposit1
chainguy/sight2 dsposit2
chainguy/sight3 dsposit3
chainguy/active dsposact
chainguy/pain dspopain
chainguy/death1 dspodth1
chainguy/death2 dspodth2
chainguy/death3 dspodth3
chainguy/attack dsshotgn
$limit chainguy/attack 0
// Imp
$random imp/sight { imp/sight1 imp/sight2 }
$random imp/death { imp/death1 imp/death2 }
imp/sight1 dsbgsit1
imp/sight2 dsbgsit2
imp/active dsbgact
imp/pain dspopain
imp/melee dsclaw
imp/death1 dsbgdth1
imp/death2 dsbgdth2
imp/attack dsfirsht
imp/shotx dsfirxpl
$limit imp/active 6
// Demon
demon/sight dssgtsit
demon/active dsdmact
demon/pain dsdmpain
demon/melee dssgtatk
demon/death dssgtdth
$limit demon/melee 4
// Spectre
spectre/sight dssgtsit
spectre/active dsdmact
spectre/pain dsdmpain
spectre/melee dssgtatk
spectre/death dssgtdth
// Cacodemon
caco/sight dscacsit
caco/active dsdmact
caco/pain dsdmpain
caco/death dscacdth
caco/attack dsfirsht
caco/shotx dsfirxpl
// Baron of Hell
baron/sight dsbrssit
baron/active dsdmact
baron/pain dsdmpain
baron/melee dsclaw
baron/death dsbrsdth
baron/attack dsfirsht
baron/shotx dsfirxpl
// Hell Knight
knight/sight dskntsit
knight/active dsdmact
knight/pain dsdmpain
knight/death dskntdth
// Lost Soul
skull/active dsdmact
skull/pain dsdmpain
skull/melee dssklatk
skull/death dsfirxpl
// Spider Mastermind
spider/sight dsspisit
spider/active dsdmact
spider/pain dsdmpain
spider/attack dsshotgn
spider/death dsspidth
spider/walk dsmetal
// Arachnotron
baby/sight dsbspsit
baby/active dsbspact
baby/pain dsdmpain
baby/death dsbspdth
baby/walk dsbspwlk
baby/attack dsplasma
baby/shotx dsfirxpl
$limit baby/attack 0
// Cyber Demon
cyber/sight dscybsit
cyber/active dsdmact
cyber/pain dsdmpain
cyber/death dscybdth
cyber/hoof dshoof
// Pain Elemental
pain/sight dspesit
pain/active dsdmact
pain/pain dspepain
pain/death dspedth
// Wolfenstein SS
wolfss/sight dssssit
wolfss/active dsposact
wolfss/pain dspopain
wolfss/death dsssdth
wolfss/attack dsshotgn
// Commander Keen
keen/pain dskeenpn
keen/death dskeendt
// Boss Brain
brain/sight dsbossit
brain/pain dsbospn
brain/death dsbosdth
brain/spit dsbospit
brain/cube dsboscub
brain/cubeboom dsfirxpl
$alias brain/spawn misc/teleport
//============================================================================
//
// WORLD SOUNDS
//
//===========================================================================
world/barrelx dsbarexp
world/drip dsempty
world/watersplash dsempty
world/sludgegloop dsempty
world/lavasizzle dsempty
//
//
// Platform Sounds
//
plats/pt1_strt dspstart
plats/pt1_stop dspstop
plats/pt1_mid dsstnmov
//
// Door Sounds
//
doors/dr1_open dsdoropn
doors/dr1_clos dsdorcls
doors/dr2_open dsbdopn
doors/dr2_clos dsbdcls
//===========================================================================
//
// MISCELLANEOUS SOUNDS
//
//===========================================================================
misc/secret dssecret
misc/w_pkup dswpnup // Pickup weapon
misc/p_pkup dsgetpow // Pickup powerup
misc/i_pkup dsitemup // Pickup item
misc/k_pkup dsitemup // Pickup key
misc/spawn dsitmbk // Item respawn
misc/chat dsradio // Doom 2 chat sound
misc/chat2 dstink // Chat sound for everything else
$limit misc/i_pkup 1
$limit misc/k_pkup 1
$limit misc/w_pkup 1
$limit misc/p_pkup 1
$pitchshift misc/i_pkup 0
$pitchshift misc/k_pkup 0
$pitchshift misc/chat2 0
switches/normbutn dsswtchn
switches/exitbutn dsswtchx
misc/teleport dstelept
menu/activate dsswtchn // Activate a new menu
menu/backup dsswtchn // Backup to previous menu
menu/prompt dsswtchn // Activate a prompt "menu"
menu/cursor dspstop // Move cursor up/down
menu/change dsstnmov // Select new value for option
menu/invalid dsoof // Menu not available
menu/dismiss dsswtchx // Dismiss a prompt message
menu/choose dspistol // Choose a menu item
menu/clear dsswtchx // Close top menu
$random menu/quit1 { player/male/death1 demon/pain grunt/pain misc/gibbed misc/teleport grunt/sight1 grunt/sight3 demon/melee }
$random menu/quit2 { vile/active misc/p_pkup brain/cube misc/gibbed skeleton/swing knight/death baby/active demon/melee }
$alias intermission/tick weapons/pistol
$alias intermission/cooptotal *death
$alias intermission/nextstage weapons/rocklx
$alias intermission/paststats weapons/shotgr
$alias intermission/pastcoopstats weapons/shotgr
$alias intermission/pastdmstats *gibbed

View file

@ -0,0 +1,291 @@
/****************************************************************************/
/* */
/* HERETIC SOUNDS */
/* */
/****************************************************************************/
$rolloff * custom 0 1600
$pitchshiftrange 2
$playersound player male *wimpydeath plrwdth
$playersound player male *death plrdth
$playersound player male *crazydeath plrcdth
$playersound player male *gibbed gibdth
$playersound player male *pain100 plrpai
$playersounddup player male *pain75 *pain100
$playersounddup player male *pain50 *pain100
$playersounddup player male *pain25 *pain100
$playersound player male *weaponlaugh wpnup
$playersounddup player male *evillaugh *weaponlaugh
$playersound player male *grunt plroof
$playersounddup player male *usefail *grunt
$playersounddup player male *land *grunt
$playersound player male *jump plrjmp
$playersound player male *burndeath hedat1
$playeralias chicken male *usefail chicken/peck
$PlayerAlias Chicken Male *Grunt chicken/pain
$PlayerAlias Chicken Male *Land chicken/pain
$PlayerAlias Chicken Male *Jump chicken/active
$PlayerAlias Chicken Male *EvilLaugh chicken/active
chicken/sight chicpai
chicken/pain chicpai
chicken/death chicdth
chicken/attack chicatk
misc/burn hedat1
weapons/staffhit stfhit
weapons/staffpowerhit stfpow
weapons/staffcrackle stfcrk
weapons/wandhit gldhit
weapons/bowshoot bowsht
weapons/bowhit hrnhit
weapons/gauntletsactivate gntact
weapons/gauntletsuse gntuse
weapons/gauntletson gntful
weapons/gauntletshit gnthit
weapons/gauntletspowhit gntpow
weapons/maceshoot lobsht
weapons/macebounce bounce
weapons/macehit lobhit
weapons/macestop pstop
weapons/maceexplode phohit
weapons/blasterhit blshit
weapons/blasterpowhit hrnhit
weapons/blastershoot blssht
weapons/hornrodshoot hrnsht
weapons/hornrodhit hrnhit
weapons/hornrodpowshoot hrnpow
weapons/hornrodpowhit ramphit
weapons/phoenixshoot phosht
weapons/phoenixhit phohit
weapons/phoenixpowshoot phopow
$limit weapons/gauntletson 0
$limit weapons/gauntletshit 0
$limit weapons/gauntletspowhit 0
$limit weapons/gauntletsactivate 0
$limit weapons/gauntletsuse 0
$limit weapons/maceexplode 0
$limit weapons/phoenixhit 0
$limit weapons/phoenixpowshoot 1
// [RH] Heretic didn't have these limitless, but they can sound bad if they're not
$limit weapons/bowhit 0
$limit weapons/hornrodshoot 0
$limit weapons/hornrodhit 0
$limit weapons/maceshoot 0
himp/sight impsit
himp/attack impat1
himp/pain imppai
himp/death impdth
himp/active impsit
himp/leaderattack impat2
misc/invuse artiuse
$limit misc/invuse 1
world/podexplode podexp
world/podgrow newpod
world/wind wind
world/waterfall waterfl
$limit world/podexplode 0
$limit world/podgrow 0
$limit world/wind 1
misc/i_pkup itemup
misc/k_pkup keyup
misc/p_pkup artiup
$alias misc/w_pkup *weaponlaugh
misc/rain ramrain
misc/spawn respawn
$limit misc/spawn 1
//
// Minotaur sounds
//
minotaur/sight minsit
minotaur/melee stfpow
minotaur/attack1 minat1
minotaur/attack2 minat2
minotaur/attack3 minat3
minotaur/pain minpai
minotaur/death mindth
minotaur/active minact
minotaur/fx2hit phohit
minotaur/fx3hit phohit
//
// Wizard sounds
//
wizard/sight wizsit
wizard/attack wizatk
wizard/death wizdth
wizard/pain wizpai
wizard/active1 wizact
$random wizard/active { wizard/sight wizard/active1 }
//
// Switch sounds
//
switches/normbutn switch
$alias switches/exitbutn switches/normbutn // Heretic has no special exit button sound
//
//
// Platform Sounds
//
plats/pt1_strt pstart
plats/pt1_stop pstop
plats/pt1_mid dormov
//
// Door Sounds
//
doors/dr1_open doropn
doors/dr1_clos dorcls
doors/dr2_open doropn
doors/dr2_clos dorcls
//
// Ambient sounds
//
world/amb1 amb1
world/amb2 amb2
world/amb3 amb3
world/amb4 amb4
world/amb5 amb5
world/amb6 amb6
world/amb7 amb7
world/amb8 amb8
world/amb9 amb9
world/amb10 amb10
world/amb11 amb11
world/amb12 bstsit
$limit world/amb1 1
$limit world/amb2 1
$limit world/amb3 1
$limit world/amb4 1
$limit world/amb5 1
$limit world/amb6 1
$limit world/amb7 1
$limit world/amb8 1
$limit world/amb9 1
$limit world/amb10 1
$limit world/amb11 0
misc/chat chat
misc/teleport telept
misc/ripslop ripslop
$limit misc/chat 1
world/drip gloop
world/watersplash gloop
world/lavasizzle burn
world/sludgegloop dsempty
mummy/sight mumsit
mummy/attack1 mumat1
mummy/attack2 mumat2
mummy/pain mumpai
mummy/death mumdth
mummy/active mumsit
mummy/head mumhed
beast/sight bstsit
beast/attack bstatk
beast/pain bstpai
beast/death bstdth
beast/active bstact
snake/attack snkatk
snake/sight snksit
snake/pain snkpai
snake/death snkdth
snake/active snkact
clink/sight clksit
clink/attack clkatk
clink/pain clkpai
clink/death clkdth
clink/active clkact
hknight/sight kgtsit
hknight/attack kgtatk
hknight/melee kgtat2
hknight/pain kgtpai
hknight/death kgtdth
hknight/active kgtsit
hknight/hit hrnhit
hknight/axewhoosh kgtatk
misc/timebomb phohit
world/volcano/blast lobhit
world/volcano/shoot bstatk
ironlich/sight hedsit
ironlich/attack1 hedat1
ironlich/attack2 hedat2
ironlich/attack3 hedat3
ironlich/pain hedpai
ironlich/death heddth
ironlich/active hedact
dsparilserpent/sight bstsit
dsparilserpent/attack bstatk
dsparilserpent/pain sbtpai
dsparilserpent/death sbtdth
dsparilserpent/active sbtact
dsparil/sight sorsit
dsparil/attack soratk
dsparil/pain sorpai
dsparil/active soract
dsparil/rise sorrise
dsparil/zap sorzap
dsparil/scream sordsph
dsparil/explode sordexp
dsparil/bones sordbon
chicken/active chicact
chicken/attack chicatk
chicken/pain chicpai
chicken/death chicdth
chicken/peck1 chicpk1
chicken/peck2 chicpk2
chicken/peck3 chicpk3
$random chicken/peck { chicken/peck1 chicken/peck2 chicken/peck3 }
menu/activate dorcls
menu/backup switch
menu/prompt chat
menu/choose dorcls
menu/cursor switch
menu/change keyup
menu/invalid plroof
menu/dismiss dorcls
menu/clear dorcls
misc/secret dssecret
$alias intermission/cooptotal *death
$alias intermission/nextstage doors/dr1_clos
$alias intermission/paststats plats/pt1_stop
$alias intermission/pastcoopstats plats/pt1_stop
$alias intermission/pastdmstats *gibbed

View file

@ -0,0 +1,190 @@
/****************************************************************************/
/* */
/* HEXEN SOUNDS */
/* */
/****************************************************************************/
$rolloff * custom 0 2025
$pitchshiftrange 3
$random PlayerFighterExtremeDeathPicker { PlayerFighterExtreme1Death
PlayerFighterExtreme2Death
PlayerFighterExtreme3Death }
$playeralias fighter male *death PlayerFighterNormalDeath
$playeralias fighter male *crazydeath PlayerFighterCrazyDeath
$playeralias fighter male *burndeath PlayerFighterBurnDeath
$playeralias fighter male *xdeath PlayerFighterExtremeDeathPicker
$playeralias fighter male *pain100 PlayerFighterPain
$playersounddup fighter male *pain75 *pain100
$playersounddup fighter male *pain50 *pain100
$playersounddup fighter male *pain25 *pain100
$playeralias fighter male *grunt PlayerFighterGrunt
$playeralias fighter male *land PlayerLand
$playeralias fighter male *poison PlayerPoisonCough
$playeralias fighter male *falling PlayerFighterFallingScream
$playeralias fighter male *splat PlayerFallingSplat
$playeralias fighter male *usefail PlayerFighterFailedUse
$playeralias fighter male *puzzfail PuzzleFailFighter
$playersound fighter male *jump fgtjump
$playeralias fighter male *fistgrunt FighterGrunt
$random PlayerClericExtremeDeathPicker { PlayerClericExtreme1Death
PlayerClericExtreme2Death
PlayerClericExtreme3Death }
$playeralias cleric male *death PlayerClericNormalDeath
$playeralias cleric male *crazydeath PlayerClericCrazyDeath
$playeralias cleric male *burndeath PlayerClericBurnDeath
$playeralias cleric male *xdeath PlayerClericExtremeDeathPicker
$playeralias cleric male *pain100 PlayerClericPain
$playersounddup cleric male *pain75 *pain100
$playersounddup cleric male *pain50 *pain100
$playersounddup cleric male *pain25 *pain100
$playeralias cleric male *grunt PlayerClericGrunt
$playeralias cleric male *land PlayerLand
$playeralias cleric male *poison PlayerPoisonCough
$playeralias cleric male *falling PlayerClericFallingScream
$playeralias cleric male *splat PlayerFallingSplat
$playeralias cleric male *usefail PlayerClericFailedUse
$playeralias cleric male *puzzfail PuzzleFailCleric
$playersound cleric male *jump plrjump
$random PlayerMageExtremeDeathPicker { PlayerMageExtreme1Death
PlayerMageExtreme2Death
PlayerMageExtreme3Death }
$playeralias mage male *death PlayerMageNormalDeath
$playeralias mage male *crazydeath PlayerMageCrazyDeath
$playeralias mage male *burndeath PlayerMageBurnDeath
$playeralias mage male *xdeath PlayerMageExtremeDeathPicker
$playeralias mage male *pain100 PlayerMagePain
$playersounddup mage male *pain75 *pain100
$playersounddup mage male *pain50 *pain100
$playersounddup mage male *pain25 *pain100
$playeralias mage male *grunt PlayerMageGrunt
$playeralias mage male *land PlayerLand
$playeralias mage male *poison PlayerPoisonCough
$playeralias mage male *falling PlayerMageFallingScream
$playeralias mage male *splat PlayerFallingSplat
$playeralias mage male *usefail PlayerMageFailedUse
$playeralias mage male *puzzfail PuzzleFailMage
$playersound mage male *jump mgjump
$playeralias pig male *usefail PigActive1
$playeralias pig male *puzzfail PigActive2
$playeralias pig male *grunt PigActive1
$playeralias pig male *land PigActive2
$playeralias pig male *jump PigActive1
$playeralias pig male *poison PigActive2
$playeralias pig male *falling PigPain
$playeralias pig male *splat PigDeath
$alias world/drip Ambient10
$alias world/watersplash WaterSplash
$alias world/lavasizzle LavaSizzle
$alias world/sludgegloop SludgeGloop
$alias world/wind Wind
$alias world/quake Earthquake
$alias world/thunder ThunderCrash
$alias misc/w_pkup PickupWeapon
$alias misc/p_pkup PickupArtifact
$alias misc/k_pkup PickupKey
$alias misc/i_pkup PickupItem
$alias misc/spawn Respawn
$alias misc/teleport Teleport
$alias misc/keytry DoorLocked
$alias misc/invuse UseArtifact
$alias misc/freeze FreezeDeath
$alias misc/icebreak FreezeShatter
$alias misc/chat Chat
$alias misc/chat2 Chat
$alias misc/fallingsplat PlayerFallingSplat
$alias minotaur/sight MaulatorSight
$alias minotaur/pain MaulatorPain
$alias minotaur/death MaulatorDeath
$alias minotaur/active MaulatorActive
$alias minotaur/attack1 MaulatorHamHit
$alias minotaur/attack2 MaulatorHamSwing
$random BishopActiveSounds { BishopActive BishopSight }
$random PigActive { PigActive1 PigActive2 }
$limit PlayerFighterFailedUse 1
$limit PlayerClericFailedUse 1
$limit PlayerMageFailedUse 1
$limit SorcererBallWoosh 4
$limit SorcererBallBounce 3
$limit SorcererBallExplode 3
$limit SorcererBallPop 3
$limit SorcererBigBallExplode 3
$limit Ambient1 1
$limit Ambient2 1
$limit Ambient3 1
$limit Ambient4 1
$limit Ambient5 1
$limit Ambient6 1
$limit Ambient7 1
$limit Ambient8 1
$limit Ambient9 1
$limit Ambient10 1
$limit Ambient11 1
$limit Ambient12 1
$limit Ambient13 1
$limit Ambient14 1
$limit Ambient15 1
$limit MysticIncant 4
$pitchshift PlayerMageNormalDeath 0
$pitchshift PlayerMageCrazyDeath 0
$pitchshift PlayerMageExtreme1Death 0
$pitchshift PlayerMageExtreme2Death 0
$pitchshift PlayerMageExtreme3Death 0
$pitchshift PlayerMageBurnDeath 0
$pitchshift PlayerMagePain 0
$pitchshift PlayerMageGrunt 0
$pitchshift PlayerMageFallingScream 0
$pitchshift PlayerMageFailedUse 0
$pitchshift PickupWeapon 0
$pitchshift PickupPiece 0
$pitchshift WeaponBuild 0
$pitchshift BellRing 0
$alias menu/activate DoorCloseLight
$alias menu/backup PickupKey
$alias menu/prompt Chat
$alias menu/cursor FighterHammerHitWall
$alias menu/change PickupKey
$alias menu/invalid DoorCloseMetal // Hexen does not use this, but I do
$alias menu/dismiss PlatformStop
$alias menu/choose DoorCloseLight
$alias menu/clear PlatformStop
// Hexen does not have ripslop sound like Heretic
misc/ripslop dsempty
misc/netnotch blddrp1
$alias intermission/cooptotal *death
$alias intermission/nextstage DoorCloseLight
$alias intermission/paststats PlatformStop
$alias intermission/pastcoopstats PlatformStop
$alias intermission/pastdmstats *gibbed
$limit DoorCloseLight 4
$limit PuppyBeat 0
$limit CeantaurPain 0
$limit BishopPain 0
$limit SerpentPain 0
$limit DemonPain 0
$limit WraithPain 0
$limit MaulatorPain 0
$limit EttinPain 0
$limit FireDemonPain 0
$limit SorcererPain 0
$limit DragonPain 0

View file

@ -0,0 +1,314 @@
/****************************************************************************/
/* */
/* STRIFE SOUNDS */
/* */
/****************************************************************************/
$rolloff * 200 1200
$playersound player male *death dspldeth
$playersound player male *xdeath dspdiehi
$playersound player male *gibbed dsslop
$playersound player male *pain100 dsplpain
$playersounddup player male *pain75 *pain100
$playersounddup player male *pain50 *pain100
$playersounddup player male *pain25 *pain100
$playersound player male *grunt dsoof
$playersounddup player male *land *grunt
$playersound player male *jump dsjump
$playersound player male *fist dspunch
$playersound player male *usefail dsnoway
$playersound player female *death dsfldeth
$playersound player female *xdeath dsfdiehi
$playersound player female *gibbed dsslop
$playersound player female *pain100 dsflpain
$playersounddup player female *pain75 *pain100
$playersounddup player female *pain50 *pain100
$playersounddup player female *pain25 *pain100
$playersound player female *grunt dsfoof
$playersounddup player female *land *grunt
$playersound player female *jump dsfjump
$playersound player female *fist dspunch
$playersound player female *usefail dsfnoway
$playersound player other *death dscldeth
$playersound player other *xdeath dscdiehi
$playersound player other *gibbed dsslop
$playersound player other *pain100 dsclpain
$playersounddup player other *pain75 *pain100
$playersounddup player other *pain50 *pain100
$playersounddup player other *pain25 *pain100
$playersound player other *grunt dscoof
$playersounddup player other *land *grunt
$playersound player other *jump dscjump
$playersound player other *fist dspunch
$playersound player other *usefail dscnoway
weapons/xbowshoot dsxbow
weapons/xbowhit dsfirxpl
weapons/assaultgun dsrifle
weapons/minimissile dsrlaunc
weapons/minimissilehit dsmislht
weapons/flamethrower dsflburn
weapons/flameidle dsflidl
weapons/mauler1 dspgrdat
weapons/mauler2charge dsproton
weapons/mauler2fire dsprotfl
weapons/mauler2hit dsexplod
weapons/hegrenadeshoot dsphoot
weapons/hegrenadebang dsexplod
weapons/phgrenadeshoot dsphoot
weapons/phgrenadebang dsexplod
weapons/sigil dssigil
weapons/sigilhit dssglhit
weapons/sigilcharge dssiglup
monsters/rifle dsrifle
switches/normbutn dsswtchn
$alias switches/exitbutn switches/normbutn
switches/chain dspulchn
switches/knob dsswknob
switches/keycard dskeycrd
switches/stone dsswston
switches/bolt dsswbolt
switches/boltback dsempty
switches/scanner dsswscan
switches/fool dsdifool
switches/valve dsvalve
switches/sizzle dsfirxpl
world/glassbreak dsbglass
world/barrelx dsbarexp
world/smallfire dssmfire
world/largefire dslgfire
world/river dswriver
world/waterfall dswfall
world/waterdrip dswdrip
world/watersplash dswsplsh
$limit world/river 1
$limit world/waterfall 1
$limit world/waterdrip 1
world/drip dsempty // These four satisfy the Heretic/Hexen terrain definitions
world/sludgegloop dsempty
world/lavasizzle dsempty
world/lavasizzle dsempty
menu/activate dsswtchn // Activate a new menu
menu/backup dsswtchn // Backup to previous menu
menu/prompt dsswtchn // Activate a prompt "menu"
menu/cursor dspstop // Move cursor up/down
menu/change dsstnmov // Select new value for option
menu/invalid dsoof // Menu not available
menu/dismiss dsswish // Dismiss a prompt message
menu/choose dsrifl // Choose a menu item
menu/clear dsmtalht // Close top menu
misc/startupdone dspsdtha
misc/teleport dstelept
misc/swish dsswish
misc/meathit dsmeatht
misc/metalhit dsmtalht
misc/pcrush dspcrush
misc/gibbed dsslop
misc/explosion dsexplod
misc/reactor dsreactr
misc/missileinflight dsrflite
misc/static dsstatic
misc/chant dschant
misc/alarm dsalarm
misc/disruptordeath dsdsrptr
$singular misc/alarm
misc/secret dsyeah
misc/w_pkup dswpnup
misc/p_pkup dsyeah
misc/i_pkup dsitemup
misc/k_pkup dsitemup
misc/spawn dsitmbk
misc/chat dsradio
misc/invuse dsitemup
misc/mask dsmask
plats/pt1_strt dspstart
plats/pt1_stop dspstop
plats/pt1_mid dsstnmov
doors/dr2_open dsbdopn
doors/dr2_clos dsbdcls
doors/stone_open dsdrston
doors/stone_close dsdrston
doors/large_metal_open dsdrlmto
doors/large_metal_close dsdrlmtc
doors/small_metal_open dsdrsmto
doors/small_metal_close dsdrsmtc
doors/large_wood_open dsdrlwud
doors/large_wood_close dsdrlwud
doors/small_wood_open dsdrswud
doors/small_wood_close dsdrswud
doors/airlock_open dsairlck
doors/airlock_close dsairlck
doors/chain_open dsdrchno
doors/chain_close dsdrchnc
woodenbarrel/death dswbrldt
human/imonfire dsburnme
ambient/alien1 dsamaln1
ambient/alien2 dsamaln2
ambient/alien3 dsamaln3
ambient/alien4 dsamaln4
ambient/alien5 dsamaln5
ambient/alien6 dsamaln6
reaver/sight dsrevsee
reaver/pain dsreavpn
reaver/death dsrevdth
reaver/active dsrevact
reaver/attack dsreavat
reaver/blade dsrevbld
crusader/sight dsrb2see
crusader/pain dsrb2pn
crusader/death dsrb2dth
crusader/active dsrb2act
crusader/misl dsrlaunc
crusader/mislx dsmislht
bishop/sight dsrb2see
bishop/pain dsrb2pn
bishop/death dspgrdth
bishop/active dsrb2act
bishop/misl dsrlaunc
bishop/mislx dsmislht
sentinel/sight dssntsee
sentinel/death dssntdth
sentinel/active dssntact
sentinel/plasma dsplasma
$random peasant/pain { peasant/pain1 peasant/pain2 peasant/pain3 peasant/pain4 }
peasant/pain1 dspespna
peasant/pain2 dspespnb
peasant/pain3 dspespnc
peasant/pain4 dspespnd
//$random peasant/death { peasant/death1 peasant/death2 peasant/death3 }
$alias peasant/death peasant/death1
peasant/death1 dspsdtha
peasant/death2 dspsdthb
peasant/death3 dspsdthc
peasant/sight dsrebact
peasant/attack dsmeatht
peasant/active dsrebact
beggar/attack dsmeatht
$alias beggar/pain peasant/pain
$alias beggar/death peasant/death
rebel/sight dswpnup
$alias rebel/pain peasant/pain
rebel/death dsrebdth
rebel/active dsrebact
barkeep/pain dsambbar
barkeep/active dsambppl
$singular barkeep/pain
$singular barkeep/active
$alias smith/pain peasant/pain
$alias armorer/pain peasant/pain
$alias medic/pain peasant/pain
$alias zombie/death peasant/death
$alias becoming/death peasant/death
zombie/spawner dstelept
acolyte/sight dsagrsee
acolyte/pain dsagrdpn
acolyte/death dsagrdth
acolyte/rifle dsrifle
$random acolyte/active { acolyte/active1 acolyte/active2 acolyte/active3 acolyte/active4 }
acolyte/active1 dsagrac1
acolyte/active2 dsagrac2
acolyte/active3 dsagrac3
acolyte/active4 dsagrac4
macil/sight dsagrsee
$alias macil/pain peasant/pain
macil/active dsrebact
macil/slop dsslop
alienspectre/sight dsalnsee
alienspectre/blade dsrevbld
alienspectre/pain dsalnpn
alienspectre/death dsalndth
alienspectre/active dsalnact
turret/death dsmislht
ore/explode dsexplod
rat/sight dsratact
rat/death dsratact
rat/active dsratact
$singular rat/sight
loremaster/chain dschain
loremaster/swish dsswish
loremaster/sight dslorsee
loremaster/attack dsrevbld
loremaster/pain dslorpn
loremaster/death dsslop
loremaster/active dstend
stalker/sight dsspisit
stalker/attack dsspdatk
stalker/pain dsspdatk
stalker/death dsspidth
stalker/active dsspisit
stalker/walk dsspdwlk
templar/sight dspgrsee
templar/pain dspgrdpn
templar/death dspgrdth
templar/active dspgract
templar/shoot dspgrdat
inquisitor/sight dsinqsee
inquisitor/death dsinqdth
inquisitor/active dsinqact
inquisitor/walk dsinqact
inquisitor/jump dsinqjmp
inquisitor/attack dsphoot
inquisitor/atkexplode dsexplod
programmer/clank dsmtalht
programmer/attack dsrevbld // Unused?
programmer/pain dsprgpn
programmer/death dsrb2dth
programmer/active dsprogac
entity/sight dsmnalse
entity/melee dsrevbld
entity/pain dsalnpn
entity/death dsmnaldt
entity/active dsalnact
$alias intermission/tick weapons/assaultgun
$alias intermission/cooptotal *death
$alias intermission/nextstage misc/explosion
$alias intermission/paststats world/barrelx
$alias intermission/pastcoopstats world/barrelx
$alias intermission/pastdmstats *gibbed

View file

@ -33,6 +33,7 @@ IWad
Name = "Hacx 2.0"
Game = "Doom"
Config = "Hacx"
Autoname = "Hacx2"
Mapinfo = "mapinfo/hacxharm.txt"
MustContain = "MAP01", "HACX-E"
BannerColors = "ff ff ff", "00 88 22"
@ -43,6 +44,7 @@ IWad
Name = "Hacx: Twitch'n Kill"
Game = "Doom"
Config = "Hacx"
Autoname = "Hacx12"
Mapinfo = "mapinfo/hacxharm.txt"
MustContain = "MAP01", "HACX-R"
BannerColors = "00 00 a8", "a8 a8 a8"
@ -97,6 +99,7 @@ IWad
Name = "Strife: Teaser (New Version)"
Game = "Strife"
Config = "Strife"
Autoname = "Strifeteaser2"
Mapinfo = "mapinfo/strife.txt"
Compatibility = "Shareware", "Teaser2"
MustContain = "MAP33", "ENDSTRF", "INVCURS"
@ -108,6 +111,7 @@ IWad
Name = "Strife: Teaser (Old Version)"
Game = "Strife"
Config = "Strife"
Autoname = "Strifeteaser1"
Mapinfo = "mapinfo/strife.txt"
Compatibility = "Shareware"
MustContain = "MAP33", "ENDSTRF"
@ -119,6 +123,7 @@ IWad
Name = "Hexen: Beyond Heretic"
Game = "Hexen"
Config = "Hexen"
Autoname = "Hexen1"
Mapinfo = "mapinfo/hexen.txt"
Compatibility = "Poly1"
MustContain = "TITLE", "MAP01", "MAP40", "WINNOWR"
@ -177,6 +182,7 @@ IWad
Name = "Heretic"
Game = "Heretic"
Config = "Heretic"
Autoname = "Heretic1"
Mapinfo = "mapinfo/heretic.txt"
MustContain = "E1M1", "E2M1", "TITLE", "MUS_E1M1"
BannerColors = "fc fc 00", "a8 00 00"

View file

@ -26,6 +26,12 @@ DoomEdNums
1408 = "$SSeqOverride", 8
1409 = "$SSeqOverride", 9
1411 = "$SSeqOverride"
1500 = "$VavoomFloor"
1501 = "$VavoomCeiling"
1502 = none
1503 = none
1504 = "$VertexFloorZ"
1505 = "$VertexCeilingZ"
5001 = PointPusher
5002 = PointPuller
5004 = FS_Mapspot
@ -73,6 +79,28 @@ DoomEdNums
9301 = "$PolySpawn"
9302 = "$PolySpawnCrush"
9303 = "$PolySpawnHurt"
9500 = "$SlopeFloorPointLine"
9501 = "$SlopeCeilingPointLine"
9502 = "$SetFloorSlope"
9503 = "$SetCeilingSlope"
9510 = "$CopyFloorPlane"
9511 = "$CopyCeilingPlane"
9800 = none
9801 = none
9802 = none
9803 = none
9804 = none
9810 = none
9811 = none
9812 = none
9813 = none
9814 = none
9820 = none
9821 = none
9822 = none
9823 = none
9824 = none
9825 = none
9982 = SecActEyesAboveC
9983 = SecActEyesBelowC
9988 = CustomSprite

File diff suppressed because it is too large Load diff

View file

@ -1942,6 +1942,10 @@
RelativePath=".\src\win32\fb_ddraw.cpp"
>
</File>
<File
RelativePath=".\src\g_doomedmap.cpp"
>
</File>
<File
RelativePath=".\src\win32\hardware.cpp"
>