mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-10 14:51:51 +00:00
- Removed the one embedded DeHackEd lump restriction.
SVN r1972 (trunk)
This commit is contained in:
parent
4fed0f8057
commit
30b21b2eea
5 changed files with 83 additions and 113 deletions
|
@ -1,4 +1,5 @@
|
|||
November 11, 2009
|
||||
- Removed the one embedded DeHackEd lump restriction.
|
||||
- Fixed: nofreeaim in P_SpawnPlayerMissile() was broken.
|
||||
- Fixed: MBF sky Y offsets were ignored. X offsets should also be applied to
|
||||
the sky cylinder, not the screen like Hexen scrolling skies.
|
||||
|
|
|
@ -285,6 +285,7 @@ static int PatchPars (int);
|
|||
static int PatchCodePtrs (int);
|
||||
static int PatchMusic (int);
|
||||
static int DoInclude (int);
|
||||
static bool DoDehPatch();
|
||||
|
||||
static const struct {
|
||||
const char *name;
|
||||
|
@ -2260,7 +2261,7 @@ static int DoInclude (int dummy)
|
|||
}
|
||||
}
|
||||
|
||||
DoDehPatch (path, false);
|
||||
D_LoadDehFile(path);
|
||||
|
||||
if (data != path)
|
||||
{
|
||||
|
@ -2280,105 +2281,70 @@ static int DoInclude (int dummy)
|
|||
return GetLine();
|
||||
}
|
||||
|
||||
void DoDehPatch (const char *patchfile, bool autoloading, int lump)
|
||||
int D_LoadDehLumps()
|
||||
{
|
||||
char file[256];
|
||||
int cont;
|
||||
int filelen = 0; // Be quiet, gcc
|
||||
int lastlump = 0, lumpnum, count = 0;
|
||||
|
||||
PatchFile = NULL;
|
||||
PatchName = NULL;
|
||||
|
||||
if (lump < 0)
|
||||
while ((lumpnum = Wads.FindLump("DEHACKED", &lastlump)) >= 0)
|
||||
{
|
||||
lump = Wads.CheckNumForName ("DEHACKED");
|
||||
count += D_LoadDehLump(lumpnum);
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
if (lump >= 0 && autoloading)
|
||||
bool D_LoadDehLump(int lumpnum)
|
||||
{
|
||||
int filelen = Wads.LumpLength(lumpnum);
|
||||
|
||||
PatchName = copystring(Wads.GetLumpFullPath(lumpnum));
|
||||
PatchFile = new char[filelen + 1];
|
||||
Wads.ReadLump(lumpnum, PatchFile);
|
||||
PatchFile[filelen] = '\0'; // terminate with a '\0' character
|
||||
return DoDehPatch();
|
||||
}
|
||||
|
||||
bool D_LoadDehFile(const char *patchfile)
|
||||
{
|
||||
FILE *deh;
|
||||
|
||||
deh = fopen(patchfile, "rb");
|
||||
if (deh != NULL)
|
||||
{
|
||||
// Execute the DEHACKED lump as a patch.
|
||||
strcpy (file, "DEHACKED lump");
|
||||
filelen = Wads.LumpLength (lump);
|
||||
if ( (PatchFile = new char[filelen + 1]) )
|
||||
{
|
||||
Wads.ReadLump (lump, PatchFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
Printf ("Not enough memory to apply patch\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
else if (patchfile)
|
||||
{
|
||||
// Try to use patchfile as a patch.
|
||||
FILE *deh;
|
||||
int filelen = Q_filelength(deh);
|
||||
|
||||
strcpy (file, patchfile);
|
||||
FixPathSeperator (file);
|
||||
DefaultExtension (file, ".deh");
|
||||
|
||||
if ( !(deh = fopen (file, "rb")) )
|
||||
{
|
||||
strcpy (file, patchfile);
|
||||
FixPathSeperator (file);
|
||||
DefaultExtension (file, ".bex");
|
||||
deh = fopen (file, "rb");
|
||||
}
|
||||
|
||||
if (deh)
|
||||
{
|
||||
filelen = Q_filelength (deh);
|
||||
if ( (PatchFile = new char[filelen + 1]) )
|
||||
{
|
||||
fread (PatchFile, 1, filelen, deh);
|
||||
fclose (deh);
|
||||
PatchName = copystring (patchfile);
|
||||
FixPathSeperator (PatchName);
|
||||
}
|
||||
}
|
||||
|
||||
if (!PatchFile)
|
||||
{
|
||||
// Couldn't find it on disk, try reading it from a lump
|
||||
lump = Wads.CheckNumForFullName(patchfile, true);
|
||||
if (lump == -1)
|
||||
{
|
||||
// Compatibility fallback. It's just here because
|
||||
// some WAD may need it. Should be deleted it it can
|
||||
// be confirmed that nothing uses this case.
|
||||
FString filebase(ExtractFileBase (patchfile));
|
||||
lump = Wads.CheckNumForName (filebase);
|
||||
}
|
||||
if (lump >= 0)
|
||||
{
|
||||
filelen = Wads.LumpLength (lump);
|
||||
if ( (PatchFile = new char[filelen + 1]) )
|
||||
{
|
||||
Wads.ReadLump (lump, PatchFile);
|
||||
}
|
||||
else
|
||||
{
|
||||
Printf ("Not enough memory to apply patch\n");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!PatchFile)
|
||||
{
|
||||
Printf ("Could not open DeHackEd patch \"%s\"\n", file);
|
||||
return;
|
||||
}
|
||||
PatchName = copystring(patchfile);
|
||||
PatchFile = new char[filelen + 1];
|
||||
fread(PatchFile, 1, filelen, deh);
|
||||
fclose(deh);
|
||||
PatchFile[filelen] = '\0'; // terminate with a '\0' character
|
||||
return DoDehPatch();
|
||||
}
|
||||
else
|
||||
{
|
||||
// Nothing to do.
|
||||
return;
|
||||
// Couldn't find it in the filesystem; try from a lump instead.
|
||||
int lumpnum = Wads.CheckNumForFullName(patchfile, true);
|
||||
if (lumpnum < 0)
|
||||
{
|
||||
// Compatibility fallback. It's just here because
|
||||
// some WAD may need it. Should be deleted if it can
|
||||
// be confirmed that nothing uses this case.
|
||||
FString filebase(ExtractFileBase(patchfile));
|
||||
lumpnum = Wads.CheckNumForName(filebase);
|
||||
}
|
||||
if (lumpnum >= 0)
|
||||
{
|
||||
return D_LoadDehLump(lumpnum);
|
||||
}
|
||||
}
|
||||
Printf ("Could not open DeHackEd patch \"%s\"\n", patchfile);
|
||||
return false;
|
||||
}
|
||||
|
||||
// End file with a NULL for our parser
|
||||
PatchFile[filelen] = 0;
|
||||
static bool DoDehPatch()
|
||||
{
|
||||
Printf("Adding dehacked patch %s\n", PatchName);
|
||||
|
||||
int cont;
|
||||
|
||||
dversion = pversion = -1;
|
||||
cont = 0;
|
||||
|
@ -2386,10 +2352,10 @@ void DoDehPatch (const char *patchfile, bool autoloading, int lump)
|
|||
{
|
||||
if (PatchFile[25] < '3')
|
||||
{
|
||||
if (PatchName != NULL) delete[] PatchName;
|
||||
delete[] PatchName;
|
||||
delete[] PatchFile;
|
||||
Printf (PRINT_BOLD, "\"%s\" is an old and unsupported DeHackEd patch\n", file);
|
||||
return;
|
||||
Printf (PRINT_BOLD, "\"%s\" is an old and unsupported DeHackEd patch\n", PatchFile);
|
||||
return false;
|
||||
}
|
||||
PatchPt = strchr (PatchFile, '\n');
|
||||
while ((cont = GetLine()) == 1)
|
||||
|
@ -2399,10 +2365,10 @@ void DoDehPatch (const char *patchfile, bool autoloading, int lump)
|
|||
}
|
||||
if (!cont || dversion == -1 || pversion == -1)
|
||||
{
|
||||
if (PatchName != NULL) delete[] PatchName;
|
||||
delete[] PatchName;
|
||||
delete[] PatchFile;
|
||||
Printf (PRINT_BOLD, "\"%s\" is not a DeHackEd patch file\n", file);
|
||||
return;
|
||||
Printf (PRINT_BOLD, "\"%s\" is not a DeHackEd patch file\n", PatchFile);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -2412,7 +2378,7 @@ void DoDehPatch (const char *patchfile, bool autoloading, int lump)
|
|||
pversion = 6;
|
||||
PatchPt = PatchFile;
|
||||
while ((cont = GetLine()) == 1)
|
||||
;
|
||||
{}
|
||||
}
|
||||
|
||||
if (pversion != 6)
|
||||
|
@ -2439,10 +2405,10 @@ void DoDehPatch (const char *patchfile, bool autoloading, int lump)
|
|||
if (!LoadDehSupp ())
|
||||
{
|
||||
Printf ("Could not load DEH support data\n");
|
||||
if (PatchName != NULL) delete[] PatchName;
|
||||
delete[] PatchFile;
|
||||
UnloadDehSupp ();
|
||||
return;
|
||||
delete[] PatchName;
|
||||
delete[] PatchFile;
|
||||
return false;
|
||||
}
|
||||
|
||||
do
|
||||
|
@ -2459,10 +2425,10 @@ void DoDehPatch (const char *patchfile, bool autoloading, int lump)
|
|||
} while (cont);
|
||||
|
||||
UnloadDehSupp ();
|
||||
if (PatchName != NULL) delete[] PatchName;
|
||||
delete[] PatchName;
|
||||
delete[] PatchFile;
|
||||
Printf ("Patch installed\n");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static inline bool CompareLabel (const char *want, const BYTE *have)
|
||||
|
|
|
@ -56,8 +56,9 @@ public:
|
|||
bool droppedbymonster;
|
||||
};
|
||||
|
||||
|
||||
void DoDehPatch (const char *patchfile, bool autoloading, int lumpnum=-1);
|
||||
int D_LoadDehLumps();
|
||||
bool D_LoadDehLump(int lumpnum);
|
||||
bool D_LoadDehFile(const char *filename);
|
||||
void FinishDehPatch ();
|
||||
|
||||
#endif //__D_DEHACK_H__
|
||||
|
|
|
@ -1483,9 +1483,9 @@ bool ConsiderPatches (const char *arg, const char *ext)
|
|||
for (i = 0; i < files->NumArgs(); ++i)
|
||||
{
|
||||
if ( (f = BaseFileSearch (files->GetArg (i), ".deh")) )
|
||||
DoDehPatch (f, false);
|
||||
D_LoadDehFile(f);
|
||||
else if ( (f = BaseFileSearch (files->GetArg (i), ".bex")) )
|
||||
DoDehPatch (f, false);
|
||||
D_LoadDehFile(f);
|
||||
}
|
||||
noDef = true;
|
||||
}
|
||||
|
@ -1947,13 +1947,12 @@ void D_DoomMain (void)
|
|||
DecalLibrary.Clear ();
|
||||
DecalLibrary.ReadAllDecals ();
|
||||
|
||||
// [RH] Try adding .deh and .bex files on the command line.
|
||||
// [RH] Add any .deh and .bex files on the command line.
|
||||
// If there are none, try adding any in the config file.
|
||||
// Note that the command line overrides defaults from the config.
|
||||
|
||||
if (!ConsiderPatches ("-deh", ".deh") &&
|
||||
!ConsiderPatches ("-bex", ".bex") &&
|
||||
(gameinfo.gametype == GAME_Doom) &&
|
||||
GameConfig->SetSection ("Doom.DefaultDehacked"))
|
||||
if ((ConsiderPatches("-deh", ".deh") | ConsiderPatches("-bex", ".bex")) == 0 &&
|
||||
gameinfo.gametype == GAME_Doom && GameConfig->SetSection ("Doom.DefaultDehacked"))
|
||||
{
|
||||
const char *key;
|
||||
const char *value;
|
||||
|
@ -1963,17 +1962,19 @@ void D_DoomMain (void)
|
|||
if (stricmp (key, "Path") == 0 && FileExists (value))
|
||||
{
|
||||
Printf ("Applying patch %s\n", value);
|
||||
DoDehPatch (value, true);
|
||||
D_LoadDehFile(value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
DoDehPatch (NULL, true); // See if there's a patch in a PWAD
|
||||
FinishDehPatch (); // Create replacements for dehacked pickups
|
||||
// Load embedded Dehacked patches
|
||||
D_LoadDehLumps();
|
||||
|
||||
// Create replacements for dehacked pickups
|
||||
FinishDehPatch();
|
||||
|
||||
FActorInfo::StaticSetActorNums ();
|
||||
|
||||
|
||||
// [RH] User-configurable startup strings. Because BOOM does.
|
||||
static const char *startupString[5] = {
|
||||
"STARTUP1", "STARTUP2", "STARTUP3", "STARTUP4", "STARTUP5"
|
||||
|
|
|
@ -832,6 +832,7 @@ int FWadCollection::FindLump (const char *name, int *lastlump, bool anyns)
|
|||
|
||||
uppercopy (name8, name);
|
||||
|
||||
assert(lastlump != NULL && *lastlump >= 0);
|
||||
lump_p = &LumpInfo[*lastlump];
|
||||
while (lump_p < &LumpInfo[NumLumps])
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue