mirror of
https://github.com/ZDoom/gzdoom.git
synced 2025-01-31 13:50:48 +00:00
- moved Extradata parser into MapLoader class.
This commit is contained in:
parent
733cd5260a
commit
f351df5c22
6 changed files with 132 additions and 154 deletions
185
src/edata.cpp
185
src/edata.cpp
|
@ -85,72 +85,7 @@ DEFINE_MAP_OPTION(loadacs, false)
|
||||||
opt->acsName = parse.sc.String;
|
opt->acsName = parse.sc.String;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct EDMapthing
|
static void parseLinedef(FScanner &sc, TMap<int, EDLinedef> &EDLines)
|
||||||
{
|
|
||||||
int recordnum;
|
|
||||||
int tid;
|
|
||||||
int type;
|
|
||||||
double height;
|
|
||||||
int args[5];
|
|
||||||
uint16_t skillfilter;
|
|
||||||
uint32_t flags;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct EDLinedef
|
|
||||||
{
|
|
||||||
int recordnum;
|
|
||||||
int special;
|
|
||||||
int tag;
|
|
||||||
int id;
|
|
||||||
int args[5];
|
|
||||||
double alpha;
|
|
||||||
uint32_t flags;
|
|
||||||
uint32_t activation;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
struct EDSector
|
|
||||||
{
|
|
||||||
int recordnum;
|
|
||||||
|
|
||||||
uint32_t flags;
|
|
||||||
uint32_t flagsRemove;
|
|
||||||
uint32_t flagsAdd;
|
|
||||||
|
|
||||||
int damageamount;
|
|
||||||
int damageinterval;
|
|
||||||
FName damagetype;
|
|
||||||
uint8_t leaky;
|
|
||||||
uint8_t leakyadd;
|
|
||||||
uint8_t leakyremove;
|
|
||||||
int floorterrain;
|
|
||||||
int ceilingterrain;
|
|
||||||
|
|
||||||
uint32_t color;
|
|
||||||
|
|
||||||
uint32_t damageflags;
|
|
||||||
uint32_t damageflagsAdd;
|
|
||||||
uint32_t damageflagsRemove;
|
|
||||||
|
|
||||||
bool flagsSet;
|
|
||||||
bool damageflagsSet;
|
|
||||||
bool colorSet;
|
|
||||||
|
|
||||||
// colormaptop//bottom cannot be used because ZDoom has no corresponding properties.
|
|
||||||
double xoffs[2], yoffs[2];
|
|
||||||
DAngle angle[2];
|
|
||||||
uint32_t portalflags[2];
|
|
||||||
double Overlayalpha[2];
|
|
||||||
};
|
|
||||||
|
|
||||||
static FString EDMap;
|
|
||||||
static TMap<int, EDLinedef> EDLines;
|
|
||||||
static TMap<int, EDSector> EDSectors;
|
|
||||||
static TMap<int, EDMapthing> EDThings;
|
|
||||||
|
|
||||||
|
|
||||||
static void parseLinedef(FScanner &sc)
|
|
||||||
{
|
{
|
||||||
EDLinedef ld;
|
EDLinedef ld;
|
||||||
bool argsset = false;
|
bool argsset = false;
|
||||||
|
@ -225,7 +160,7 @@ static void parseLinedef(FScanner &sc)
|
||||||
{
|
{
|
||||||
sc.CheckString("=");
|
sc.CheckString("=");
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
for (const char *tok = strtok(sc.String, ",+ \t"); tok != NULL; tok = strtok(NULL, ",+ \t"))
|
for (const char *tok = strtok(sc.String, ",+ \t"); tok != nullptr; tok = strtok(nullptr, ",+ \t"))
|
||||||
{
|
{
|
||||||
if (!stricmp(tok, "USE")) actmethod |= SPAC_Use | SPAC_MUse;
|
if (!stricmp(tok, "USE")) actmethod |= SPAC_Use | SPAC_MUse;
|
||||||
else if (!stricmp(tok, "CROSS")) actmethod |= SPAC_Cross | SPAC_MCross | SPAC_PCross;
|
else if (!stricmp(tok, "CROSS")) actmethod |= SPAC_Cross | SPAC_MCross | SPAC_PCross;
|
||||||
|
@ -268,7 +203,7 @@ static void parseLinedef(FScanner &sc)
|
||||||
EDLines[ld.recordnum] = ld;
|
EDLines[ld.recordnum] = ld;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parseSector(FScanner &sc)
|
static void parseSector(FScanner &sc, TMap<int, EDSector> &EDSectors)
|
||||||
{
|
{
|
||||||
EDSector sec;
|
EDSector sec;
|
||||||
|
|
||||||
|
@ -288,7 +223,7 @@ static void parseSector(FScanner &sc)
|
||||||
}
|
}
|
||||||
else if (sc.Compare("flags"))
|
else if (sc.Compare("flags"))
|
||||||
{
|
{
|
||||||
uint32_t *flagvar = NULL;
|
uint32_t *flagvar = nullptr;
|
||||||
if (sc.CheckString("."))
|
if (sc.CheckString("."))
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
|
@ -314,7 +249,7 @@ static void parseSector(FScanner &sc)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
for (const char *tok = strtok(sc.String, ",+ \t"); tok != NULL; tok = strtok(NULL, ",+ \t"))
|
for (const char *tok = strtok(sc.String, ",+ \t"); tok != nullptr; tok = strtok(nullptr, ",+ \t"))
|
||||||
{
|
{
|
||||||
if (!stricmp(tok, "SECRET")) *flagvar |= SECF_SECRET | SECF_WASSECRET;
|
if (!stricmp(tok, "SECRET")) *flagvar |= SECF_SECRET | SECF_WASSECRET;
|
||||||
else if (!stricmp(tok, "FRICTION")) *flagvar |= SECF_FRICTION;
|
else if (!stricmp(tok, "FRICTION")) *flagvar |= SECF_FRICTION;
|
||||||
|
@ -345,8 +280,8 @@ static void parseSector(FScanner &sc)
|
||||||
}
|
}
|
||||||
else if (sc.Compare("damageflags"))
|
else if (sc.Compare("damageflags"))
|
||||||
{
|
{
|
||||||
uint32_t *flagvar = NULL;
|
uint32_t *flagvar = nullptr;
|
||||||
uint8_t *leakvar = NULL;
|
uint8_t *leakvar = nullptr;
|
||||||
if (sc.CheckString("."))
|
if (sc.CheckString("."))
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
|
@ -375,7 +310,7 @@ static void parseSector(FScanner &sc)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
for (const char *tok = strtok(sc.String, ",+ \t"); tok != NULL; tok = strtok(NULL, ",+ \t"))
|
for (const char *tok = strtok(sc.String, ",+ \t"); tok != nullptr; tok = strtok(nullptr, ",+ \t"))
|
||||||
{
|
{
|
||||||
if (!stricmp(tok, "LEAKYSUIT")) *leakvar |= 1;
|
if (!stricmp(tok, "LEAKYSUIT")) *leakvar |= 1;
|
||||||
else if (!stricmp(tok, "IGNORESUIT")) *leakvar |= 2; // these 2 bits will be used to set 'leakychance', but this can only be done when the sector gets initialized
|
else if (!stricmp(tok, "IGNORESUIT")) *leakvar |= 2; // these 2 bits will be used to set 'leakychance', but this can only be done when the sector gets initialized
|
||||||
|
@ -485,7 +420,7 @@ static void parseSector(FScanner &sc)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
for (const char *tok = strtok(sc.String, ",+ \t"); tok != NULL; tok = strtok(NULL, ",+ \t"))
|
for (const char *tok = strtok(sc.String, ",+ \t"); tok != nullptr; tok = strtok(nullptr, ",+ \t"))
|
||||||
{
|
{
|
||||||
if (!stricmp(tok, "DISABLED")) sec.portalflags[dest] |= PLANEF_DISABLED;
|
if (!stricmp(tok, "DISABLED")) sec.portalflags[dest] |= PLANEF_DISABLED;
|
||||||
else if (!stricmp(tok, "NORENDER")) sec.portalflags[dest] |= PLANEF_NORENDER;
|
else if (!stricmp(tok, "NORENDER")) sec.portalflags[dest] |= PLANEF_NORENDER;
|
||||||
|
@ -506,7 +441,7 @@ static void parseSector(FScanner &sc)
|
||||||
EDSectors[sec.recordnum] = sec;
|
EDSectors[sec.recordnum] = sec;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void parseMapthing(FScanner &sc)
|
static void parseMapthing(FScanner &sc, TMap<int, EDMapthing> &EDThings)
|
||||||
{
|
{
|
||||||
EDMapthing mt;
|
EDMapthing mt;
|
||||||
|
|
||||||
|
@ -545,7 +480,7 @@ static void parseMapthing(FScanner &sc)
|
||||||
if (pos) pos++;
|
if (pos) pos++;
|
||||||
else pos = sc.String;
|
else pos = sc.String;
|
||||||
const PClass *cls = PClass::FindClass(pos);
|
const PClass *cls = PClass::FindClass(pos);
|
||||||
if (cls != NULL)
|
if (cls != nullptr)
|
||||||
{
|
{
|
||||||
FDoomEdMap::Iterator it(DoomEdMap);
|
FDoomEdMap::Iterator it(DoomEdMap);
|
||||||
FDoomEdMap::Pair *pair;
|
FDoomEdMap::Pair *pair;
|
||||||
|
@ -591,7 +526,7 @@ static void parseMapthing(FScanner &sc)
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetString();
|
||||||
for (const char *tok = strtok(sc.String, ",+ \t"); tok != NULL; tok = strtok(NULL, ",+ \t"))
|
for (const char *tok = strtok(sc.String, ",+ \t"); tok != nullptr; tok = strtok(nullptr, ",+ \t"))
|
||||||
{
|
{
|
||||||
if (!stricmp(tok, "EASY")) mt.skillfilter |= 3;
|
if (!stricmp(tok, "EASY")) mt.skillfilter |= 3;
|
||||||
else if (!stricmp(tok, "NORMAL")) mt.skillfilter |= 4;
|
else if (!stricmp(tok, "NORMAL")) mt.skillfilter |= 4;
|
||||||
|
@ -614,64 +549,56 @@ static void parseMapthing(FScanner &sc)
|
||||||
EDThings[mt.recordnum] = mt;
|
EDThings[mt.recordnum] = mt;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InitED()
|
void MapLoader::InitED()
|
||||||
{
|
{
|
||||||
FString filename;
|
FString filename;
|
||||||
FScanner sc;
|
FScanner sc;
|
||||||
|
|
||||||
if (EDMap.CompareNoCase(level.MapName) != 0)
|
const char *arg = Args->CheckValue("-edf");
|
||||||
|
|
||||||
|
if (arg != nullptr) filename = arg;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
EDLines.Clear();
|
FEDOptions *opt = Level->info->GetOptData<FEDOptions>("EData", false);
|
||||||
EDSectors.Clear();
|
if (opt != nullptr)
|
||||||
EDThings.Clear();
|
{
|
||||||
EDMap = level.MapName;
|
filename = opt->EDName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const char *arg = Args->CheckValue("-edf");
|
if (filename.IsEmpty()) return;
|
||||||
|
int lump = Wads.CheckNumForFullName(filename, true, ns_global);
|
||||||
|
if (lump == -1) return;
|
||||||
|
sc.OpenLumpNum(lump);
|
||||||
|
|
||||||
if (arg != NULL) filename = arg;
|
sc.SetCMode(true);
|
||||||
|
while (sc.GetString())
|
||||||
|
{
|
||||||
|
if (sc.Compare("linedef"))
|
||||||
|
{
|
||||||
|
parseLinedef(sc, EDLines);
|
||||||
|
}
|
||||||
|
else if (sc.Compare("mapthing"))
|
||||||
|
{
|
||||||
|
parseMapthing(sc, EDThings);
|
||||||
|
}
|
||||||
|
else if (sc.Compare("sector"))
|
||||||
|
{
|
||||||
|
parseSector(sc, EDSectors);
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
FEDOptions *opt = level.info->GetOptData<FEDOptions>("EData", false);
|
sc.ScriptError("Unknown keyword '%s'", sc.String);
|
||||||
if (opt != NULL)
|
|
||||||
{
|
|
||||||
filename = opt->EDName;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (filename.IsEmpty()) return;
|
|
||||||
int lump = Wads.CheckNumForFullName(filename, true, ns_global);
|
|
||||||
if (lump == -1) return;
|
|
||||||
sc.OpenLumpNum(lump);
|
|
||||||
|
|
||||||
sc.SetCMode(true);
|
|
||||||
while (sc.GetString())
|
|
||||||
{
|
|
||||||
if (sc.Compare("linedef"))
|
|
||||||
{
|
|
||||||
parseLinedef(sc);
|
|
||||||
}
|
|
||||||
else if (sc.Compare("mapthing"))
|
|
||||||
{
|
|
||||||
parseMapthing(sc);
|
|
||||||
}
|
|
||||||
else if (sc.Compare("sector"))
|
|
||||||
{
|
|
||||||
parseSector(sc);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
sc.ScriptError("Unknown keyword '%s'", sc.String);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessEDMapthing(FMapThing *mt, int recordnum)
|
void MapLoader::ProcessEDMapthing(FMapThing *mt, int recordnum)
|
||||||
{
|
{
|
||||||
InitED();
|
InitED();
|
||||||
|
|
||||||
EDMapthing *emt = EDThings.CheckKey(recordnum);
|
EDMapthing *emt = EDThings.CheckKey(recordnum);
|
||||||
if (emt == NULL)
|
if (emt == nullptr)
|
||||||
{
|
{
|
||||||
Printf("EDF Mapthing record %d not found\n", recordnum);
|
Printf("EDF Mapthing record %d not found\n", recordnum);
|
||||||
mt->EdNum = 0;
|
mt->EdNum = 0;
|
||||||
|
@ -686,12 +613,12 @@ void ProcessEDMapthing(FMapThing *mt, int recordnum)
|
||||||
mt->flags = emt->flags;
|
mt->flags = emt->flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessEDLinedef(line_t *ld, int recordnum)
|
void MapLoader::ProcessEDLinedef(line_t *ld, int recordnum)
|
||||||
{
|
{
|
||||||
InitED();
|
InitED();
|
||||||
|
|
||||||
EDLinedef *eld = EDLines.CheckKey(recordnum);
|
EDLinedef *eld = EDLines.CheckKey(recordnum);
|
||||||
if (eld == NULL)
|
if (eld == nullptr)
|
||||||
{
|
{
|
||||||
Printf("EDF Linedef record %d not found\n", recordnum);
|
Printf("EDF Linedef record %d not found\n", recordnum);
|
||||||
ld->special = 0;
|
ld->special = 0;
|
||||||
|
@ -706,10 +633,10 @@ void ProcessEDLinedef(line_t *ld, int recordnum)
|
||||||
tagManager.AddLineID(ld->Index(), eld->tag);
|
tagManager.AddLineID(ld->Index(), eld->tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ProcessEDSector(sector_t *sec, int recordnum)
|
void MapLoader::ProcessEDSector(sector_t *sec, int recordnum)
|
||||||
{
|
{
|
||||||
EDSector *esec = EDSectors.CheckKey(recordnum);
|
EDSector *esec = EDSectors.CheckKey(recordnum);
|
||||||
if (esec == NULL)
|
if (esec == nullptr)
|
||||||
{
|
{
|
||||||
Printf("EDF Sector record %d not found\n", recordnum);
|
Printf("EDF Sector record %d not found\n", recordnum);
|
||||||
return;
|
return;
|
||||||
|
@ -749,16 +676,16 @@ void ProcessEDSector(sector_t *sec, int recordnum)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ProcessEDSectors()
|
void MapLoader::ProcessEDSectors()
|
||||||
{
|
{
|
||||||
InitED();
|
InitED();
|
||||||
if (EDSectors.CountUsed() == 0) return; // don't waste time if there's no records.
|
if (EDSectors.CountUsed() == 0) return; // don't waste time if there's no records.
|
||||||
|
|
||||||
// collect all Extradata sector records up front so we do not need to search the complete line array for each sector separately.
|
// collect all Extradata sector records up front so we do not need to search the complete line array for each sector separately.
|
||||||
auto numsectors = level.sectors.Size();
|
auto numsectors = Level->sectors.Size();
|
||||||
TArray<int> sectorrecord(numsectors, true);
|
TArray<int> sectorrecord(numsectors, true);
|
||||||
memset(sectorrecord.Data(), -1, numsectors * sizeof(int));
|
memset(sectorrecord.Data(), -1, numsectors * sizeof(int));
|
||||||
for (auto &line : level.lines)
|
for (auto &line : Level->lines)
|
||||||
{
|
{
|
||||||
if (line.special == Static_Init && line.args[1] == Init_EDSector)
|
if (line.special == Static_Init && line.args[1] == Init_EDSector)
|
||||||
{
|
{
|
||||||
|
@ -770,15 +697,15 @@ void ProcessEDSectors()
|
||||||
{
|
{
|
||||||
if (sectorrecord[i] >= 0)
|
if (sectorrecord[i] >= 0)
|
||||||
{
|
{
|
||||||
ProcessEDSector(&level.sectors[i], sectorrecord[i]);
|
ProcessEDSector(&Level->sectors[i], sectorrecord[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadMapinfoACSLump()
|
void MapLoader::LoadMapinfoACSLump()
|
||||||
{
|
{
|
||||||
FEDOptions *opt = level.info->GetOptData<FEDOptions>("EData", false);
|
FEDOptions *opt = Level->info->GetOptData<FEDOptions>("EData", false);
|
||||||
if (opt != NULL)
|
if (opt != nullptr)
|
||||||
{
|
{
|
||||||
int lump = Wads.CheckNumForName(opt->acsName);
|
int lump = Wads.CheckNumForName(opt->acsName);
|
||||||
if (lump >= 0) FBehavior::StaticLoadModule(lump);
|
if (lump >= 0) FBehavior::StaticLoadModule(lump);
|
||||||
|
|
12
src/edata.h
12
src/edata.h
|
@ -1,12 +0,0 @@
|
||||||
#ifndef EDATA_H
|
|
||||||
#define EDATA_H
|
|
||||||
|
|
||||||
struct FMapThing;
|
|
||||||
struct line_t;
|
|
||||||
|
|
||||||
void ProcessEDMapthing(FMapThing *mt, int recordnum);
|
|
||||||
void ProcessEDLinedef(line_t *line, int recordnum);
|
|
||||||
void ProcessEDSectors();
|
|
||||||
void LoadMapinfoACSLump();
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -97,9 +97,6 @@
|
||||||
#include "g_levellocals.h"
|
#include "g_levellocals.h"
|
||||||
#include "c_dispatch.h"
|
#include "c_dispatch.h"
|
||||||
#include "a_dynlight.h"
|
#include "a_dynlight.h"
|
||||||
#ifndef NO_EDATA
|
|
||||||
#include "edata.h"
|
|
||||||
#endif
|
|
||||||
#include "events.h"
|
#include "events.h"
|
||||||
#include "p_destructible.h"
|
#include "p_destructible.h"
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
|
@ -3386,9 +3383,7 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame)
|
||||||
}
|
}
|
||||||
|
|
||||||
FBehavior::StaticLoadDefaultModules();
|
FBehavior::StaticLoadDefaultModules();
|
||||||
#ifndef NO_EDATA
|
loader.LoadMapinfoACSLump();
|
||||||
LoadMapinfoACSLump();
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
P_LoadStrifeConversations(map, lumpname);
|
P_LoadStrifeConversations(map, lumpname);
|
||||||
|
@ -3680,7 +3675,7 @@ void P_SetupLevel(const char *lumpname, int position, bool newGame)
|
||||||
}
|
}
|
||||||
|
|
||||||
// set up world state
|
// set up world state
|
||||||
P_SpawnSpecials();
|
P_SpawnSpecials(&loader);
|
||||||
|
|
||||||
// disable reflective planes on sloped sectors.
|
// disable reflective planes on sloped sectors.
|
||||||
for (auto &sec : level.sectors)
|
for (auto &sec : level.sectors)
|
||||||
|
|
|
@ -169,6 +169,64 @@ void FixMinisegReferences();
|
||||||
void FixHoles();
|
void FixHoles();
|
||||||
void ReportUnpairedMinisegs();
|
void ReportUnpairedMinisegs();
|
||||||
|
|
||||||
|
struct EDMapthing
|
||||||
|
{
|
||||||
|
int recordnum;
|
||||||
|
int tid;
|
||||||
|
int type;
|
||||||
|
double height;
|
||||||
|
int args[5];
|
||||||
|
uint16_t skillfilter;
|
||||||
|
uint32_t flags;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct EDLinedef
|
||||||
|
{
|
||||||
|
int recordnum;
|
||||||
|
int special;
|
||||||
|
int tag;
|
||||||
|
int id;
|
||||||
|
int args[5];
|
||||||
|
double alpha;
|
||||||
|
uint32_t flags;
|
||||||
|
uint32_t activation;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct EDSector
|
||||||
|
{
|
||||||
|
int recordnum;
|
||||||
|
|
||||||
|
uint32_t flags;
|
||||||
|
uint32_t flagsRemove;
|
||||||
|
uint32_t flagsAdd;
|
||||||
|
|
||||||
|
int damageamount;
|
||||||
|
int damageinterval;
|
||||||
|
FName damagetype;
|
||||||
|
uint8_t leaky;
|
||||||
|
uint8_t leakyadd;
|
||||||
|
uint8_t leakyremove;
|
||||||
|
int floorterrain;
|
||||||
|
int ceilingterrain;
|
||||||
|
|
||||||
|
uint32_t color;
|
||||||
|
|
||||||
|
uint32_t damageflags;
|
||||||
|
uint32_t damageflagsAdd;
|
||||||
|
uint32_t damageflagsRemove;
|
||||||
|
|
||||||
|
bool flagsSet;
|
||||||
|
bool damageflagsSet;
|
||||||
|
bool colorSet;
|
||||||
|
|
||||||
|
// colormaptop//bottom cannot be used because ZDoom has no corresponding properties.
|
||||||
|
double xoffs[2], yoffs[2];
|
||||||
|
DAngle angle[2];
|
||||||
|
uint32_t portalflags[2];
|
||||||
|
double Overlayalpha[2];
|
||||||
|
};
|
||||||
|
|
||||||
struct sidei_t // [RH] Only keep BOOM sidedef init stuff around for init
|
struct sidei_t // [RH] Only keep BOOM sidedef init stuff around for init
|
||||||
{
|
{
|
||||||
|
@ -219,6 +277,10 @@ class MapLoader
|
||||||
int sidecount;
|
int sidecount;
|
||||||
TArray<int> linemap;
|
TArray<int> linemap;
|
||||||
|
|
||||||
|
TMap<int, EDLinedef> EDLines;
|
||||||
|
TMap<int, EDSector> EDSectors;
|
||||||
|
TMap<int, EDMapthing> EDThings;
|
||||||
|
|
||||||
void SlopeLineToPoint(int lineid, const DVector3 &pos, bool slopeCeil);
|
void SlopeLineToPoint(int lineid, const DVector3 &pos, bool slopeCeil);
|
||||||
void CopyPlane(int tag, sector_t *dest, bool copyCeil);
|
void CopyPlane(int tag, sector_t *dest, bool copyCeil);
|
||||||
void CopyPlane(int tag, const DVector2 &pos, bool copyCeil);
|
void CopyPlane(int tag, const DVector2 &pos, bool copyCeil);
|
||||||
|
@ -227,6 +289,11 @@ class MapLoader
|
||||||
void SetSlopesFromVertexHeights(FMapThing *firstmt, FMapThing *lastmt, const int *oldvertextable);
|
void SetSlopesFromVertexHeights(FMapThing *firstmt, FMapThing *lastmt, const int *oldvertextable);
|
||||||
void AlignPlane(sector_t *sec, line_t *line, int which);
|
void AlignPlane(sector_t *sec, line_t *line, int which);
|
||||||
|
|
||||||
|
void InitED();
|
||||||
|
void ProcessEDMapthing(FMapThing *mt, int recordnum);
|
||||||
|
void ProcessEDLinedef(line_t *line, int recordnum);
|
||||||
|
void ProcessEDSector(sector_t *sec, int recordnum);
|
||||||
|
|
||||||
int checkGLVertex(int num);
|
int checkGLVertex(int num);
|
||||||
int checkGLVertex3(int num);
|
int checkGLVertex3(int num);
|
||||||
int CheckForMissingSegs();
|
int CheckForMissingSegs();
|
||||||
|
@ -260,6 +327,8 @@ class MapLoader
|
||||||
void AddToList(uint8_t *hitlist, FTextureID texid, int bitmask);
|
void AddToList(uint8_t *hitlist, FTextureID texid, int bitmask);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void LoadMapinfoACSLump();
|
||||||
|
void ProcessEDSectors();
|
||||||
|
|
||||||
void FloodZones();
|
void FloodZones();
|
||||||
void LoadVertexes(MapData * map);
|
void LoadVertexes(MapData * map);
|
||||||
|
|
|
@ -94,10 +94,8 @@
|
||||||
#include "d_player.h"
|
#include "d_player.h"
|
||||||
#include "g_levellocals.h"
|
#include "g_levellocals.h"
|
||||||
#include "actorinlines.h"
|
#include "actorinlines.h"
|
||||||
#ifndef NO_EDATA
|
|
||||||
#include "edata.h"
|
|
||||||
#endif
|
|
||||||
#include "vm.h"
|
#include "vm.h"
|
||||||
|
#include "p_setup.h"
|
||||||
|
|
||||||
#include "c_console.h"
|
#include "c_console.h"
|
||||||
|
|
||||||
|
@ -1299,7 +1297,7 @@ void P_InitSectorSpecial(sector_t *sector, int special)
|
||||||
// After the map has been loaded, scan for specials that spawn thinkers
|
// After the map has been loaded, scan for specials that spawn thinkers
|
||||||
//
|
//
|
||||||
|
|
||||||
void P_SpawnSpecials (void)
|
void P_SpawnSpecials (MapLoader *ml)
|
||||||
{
|
{
|
||||||
P_SetupPortals();
|
P_SetupPortals();
|
||||||
|
|
||||||
|
@ -1312,7 +1310,7 @@ void P_SpawnSpecials (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef NO_EDATA
|
#ifndef NO_EDATA
|
||||||
ProcessEDSectors();
|
ml->ProcessEDSectors();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -92,8 +92,9 @@ const double CARRYFACTOR = 3 / 32.;
|
||||||
// it returns true, and the player is allowed to live.
|
// it returns true, and the player is allowed to live.
|
||||||
bool CheckIfExitIsGood (AActor *self, level_info_t *info);
|
bool CheckIfExitIsGood (AActor *self, level_info_t *info);
|
||||||
|
|
||||||
|
class MapLoader;
|
||||||
// at map load
|
// at map load
|
||||||
void P_SpawnSpecials (void);
|
void P_SpawnSpecials (MapLoader *ml);
|
||||||
|
|
||||||
// every tic
|
// every tic
|
||||||
void P_UpdateSpecials (void);
|
void P_UpdateSpecials (void);
|
||||||
|
|
Loading…
Reference in a new issue