- remove texture name length limits for udmf maps

This commit is contained in:
Shawn Walker 2014-05-18 15:38:46 -07:00
parent ae8995e65b
commit 59885b856d
12 changed files with 1383 additions and 1377 deletions

View file

@ -297,7 +297,7 @@ void DDoor::DoorSound(bool raise, DSeqNode *curseq) const
continue; continue;
FTexture *tex = TexMan[line->sidedef[0]->GetTexture(side_t::top)]; FTexture *tex = TexMan[line->sidedef[0]->GetTexture(side_t::top)];
texname = tex? tex->Name : NULL; texname = tex ? tex->Name.GetChars() : NULL;
if (texname != NULL && texname[0] == 'D' && texname[1] == 'O' && texname[2] == 'R') if (texname != NULL && texname[0] == 'D' && texname[1] == 'O' && texname[2] == 'R')
{ {
switch (texname[3]) switch (texname[3])

View file

@ -249,6 +249,8 @@ static void R_InstallSprite (int num)
// letter/number appended. // letter/number appended.
// The rotation character can be 0 to signify no rotations. // The rotation character can be 0 to signify no rotations.
// //
#define TEX_DWNAME(tex) MAKE_ID(tex->Name[0], tex->Name[1], tex->Name[2], tex->Name[3])
void R_InitSpriteDefs () void R_InitSpriteDefs ()
{ {
struct Hasher struct Hasher
@ -272,7 +274,7 @@ void R_InitSpriteDefs ()
FTexture *tex = TexMan.ByIndex(i); FTexture *tex = TexMan.ByIndex(i);
if (tex->UseType == FTexture::TEX_Sprite && strlen(tex->Name) >= 6) if (tex->UseType == FTexture::TEX_Sprite && strlen(tex->Name) >= 6)
{ {
size_t bucket = tex->dwName % smax; size_t bucket = TEX_DWNAME(tex) % smax;
hashes[i].Next = hashes[bucket].Head; hashes[i].Next = hashes[bucket].Head;
hashes[bucket].Head = i; hashes[bucket].Head = i;
} }
@ -352,7 +354,7 @@ void R_InitSpriteDefs ()
while (hash != -1) while (hash != -1)
{ {
FTexture *tex = TexMan[hash]; FTexture *tex = TexMan[hash];
if (tex->dwName == intname) if (TEX_DWNAME(tex) == intname)
{ {
bool res = R_InstallSpriteLump (FTextureID(hash), tex->Name[4] - 'A', tex->Name[5], false); bool res = R_InstallSpriteLump (FTextureID(hash), tex->Name[4] - 'A', tex->Name[5], false);

View file

@ -78,7 +78,7 @@ FBuildTexture::FBuildTexture (int tilenum, const BYTE *pixels, int width, int he
LeftOffset = left; LeftOffset = left;
TopOffset = top; TopOffset = top;
CalcBitSize (); CalcBitSize ();
mysnprintf (Name, countof(Name), "BTIL%04d", tilenum); Name.Format("BTIL%04d", tilenum);
UseType = TEX_Build; UseType = TEX_Build;
} }

View file

@ -41,8 +41,7 @@
FCanvasTexture::FCanvasTexture (const char *name, int width, int height) FCanvasTexture::FCanvasTexture (const char *name, int width, int height)
{ {
strncpy (Name, name, 8); Name = name;
Name[8] = 0;
Width = width; Width = width;
Height = height; Height = height;
LeftOffset = TopOffset = 0; LeftOffset = TopOffset = 0;

View file

@ -106,7 +106,6 @@ FIMGZTexture::FIMGZTexture (int lumpnum, WORD w, WORD h, SWORD l, SWORD t)
: FTexture(NULL, lumpnum), Pixels(0), Spans(0) : FTexture(NULL, lumpnum), Pixels(0), Spans(0)
{ {
Wads.GetLumpName (Name, lumpnum); Wads.GetLumpName (Name, lumpnum);
Name[8] = 0;
Width = w; Width = w;
Height = h; Height = h;
LeftOffset = l; LeftOffset = l;

View file

@ -137,7 +137,7 @@ struct strifemaptexture_t
struct FPatchLookup struct FPatchLookup
{ {
char Name[9]; FString Name;
FTexture *Texture; FTexture *Texture;
}; };
@ -243,8 +243,7 @@ FMultiPatchTexture::FMultiPatchTexture (const void *texdef, FPatchLookup *patchl
Parts = NumParts > 0 ? new TexPart[NumParts] : NULL; Parts = NumParts > 0 ? new TexPart[NumParts] : NULL;
Width = SAFESHORT(mtexture.d->width); Width = SAFESHORT(mtexture.d->width);
Height = SAFESHORT(mtexture.d->height); Height = SAFESHORT(mtexture.d->height);
strncpy (Name, (const char *)mtexture.d->name, 8); Name = (char *)mtexture.d->name;
Name[8] = 0;
CalcBitSize (); CalcBitSize ();
xScale = mtexture.d->ScaleX ? mtexture.d->ScaleX*(FRACUNIT/8) : FRACUNIT; xScale = mtexture.d->ScaleX ? mtexture.d->ScaleX*(FRACUNIT/8) : FRACUNIT;
@ -824,7 +823,7 @@ FMultiPatchTexture::TexPart::TexPart()
void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int deflumpnum, int patcheslump, int firstdup, bool texture1) void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int deflumpnum, int patcheslump, int firstdup, bool texture1)
{ {
FPatchLookup *patchlookup; FPatchLookup *patchlookup = NULL;
int i; int i;
DWORD numpatches; DWORD numpatches;
@ -857,12 +856,13 @@ void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int d
// Catalog the patches these textures use so we know which // Catalog the patches these textures use so we know which
// textures they represent. // textures they represent.
patchlookup = (FPatchLookup *)alloca (numpatches * sizeof(*patchlookup)); patchlookup = new FPatchLookup[numpatches];
for (DWORD i = 0; i < numpatches; ++i) for (DWORD i = 0; i < numpatches; ++i)
{ {
pnames.Read (patchlookup[i].Name, 8); char pname[9];
patchlookup[i].Name[8] = 0; pnames.Read (pname, 8);
pname[8] = '\0';
patchlookup[i].Name = pname;
FTextureID j = CheckForTexture (patchlookup[i].Name, FTexture::TEX_WallPatch); FTextureID j = CheckForTexture (patchlookup[i].Name, FTexture::TEX_WallPatch);
if (j.isValid()) if (j.isValid())
{ {
@ -892,6 +892,7 @@ void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int d
if (maxoff < DWORD(numtextures+1)*4) if (maxoff < DWORD(numtextures+1)*4)
{ {
Printf ("Texture directory is too short"); Printf ("Texture directory is too short");
delete[] patchlookup;
return; return;
} }
@ -902,6 +903,7 @@ void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int d
if (offset > maxoff) if (offset > maxoff)
{ {
Printf ("Bad texture directory"); Printf ("Bad texture directory");
delete[] patchlookup;
return; return;
} }
@ -937,6 +939,7 @@ void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int d
if (offset > maxoff) if (offset > maxoff)
{ {
Printf ("Bad texture directory"); Printf ("Bad texture directory");
delete[] patchlookup;
return; return;
} }
@ -960,6 +963,7 @@ void FTextureManager::AddTexturesLump (const void *lumpdata, int lumpsize, int d
StartScreen->Progress(); StartScreen->Progress();
} }
} }
delete[] patchlookup;
} }
@ -1221,8 +1225,8 @@ FMultiPatchTexture::FMultiPatchTexture (FScanner &sc, int usetype)
bSilent = false; bSilent = false;
} }
} }
uppercopy(Name, !textureName ? sc.String : textureName); Name = !textureName ? sc.String : textureName;
Name[8] = 0; Name.ToUpper();
sc.MustGetStringName(","); sc.MustGetStringName(",");
sc.MustGetNumber(); sc.MustGetNumber();
Width = sc.Number; Width = sc.Number;

View file

@ -137,7 +137,10 @@ FTexture * FTexture::CreateTexture (int lumpnum, int usetype)
FTexture * FTexture::CreateTexture (const char *name, int lumpnum, int usetype) FTexture * FTexture::CreateTexture (const char *name, int lumpnum, int usetype)
{ {
FTexture *tex = CreateTexture(lumpnum, usetype); FTexture *tex = CreateTexture(lumpnum, usetype);
if (tex != NULL && name != NULL) uppercopy(tex->Name, name); if (tex != NULL && name != NULL) {
tex->Name = name;
tex->Name.ToUpper();
}
return tex; return tex;
} }
@ -152,16 +155,16 @@ FTexture::FTexture (const char *name, int lumpnum)
id.SetInvalid(); id.SetInvalid();
if (name != NULL) if (name != NULL)
{ {
uppercopy(Name, name); Name = name;
Name.ToUpper();
} }
else if (lumpnum < 0) else if (lumpnum < 0)
{ {
*Name = 0; Name = FString();
} }
else else
{ {
Wads.GetLumpName (Name, lumpnum); Wads.GetLumpName (Name, lumpnum);
Name[8] = 0;
} }
} }
@ -574,7 +577,6 @@ FDummyTexture::FDummyTexture ()
HeightBits = 6; HeightBits = 6;
WidthBits = 6; WidthBits = 6;
WidthMask = 63; WidthMask = 63;
Name[0] = 0;
UseType = TEX_Null; UseType = TEX_Null;
} }

View file

@ -373,7 +373,7 @@ FTextureID FTextureManager::AddTexture (FTexture *texture)
// Later textures take precedence over earlier ones // Later textures take precedence over earlier ones
// Textures without name can't be looked for // Textures without name can't be looked for
if (texture->Name[0] != 0) if (texture->Name[0] != '\0')
{ {
bucket = int(MakeKey (texture->Name) % HASH_SIZE); bucket = int(MakeKey (texture->Name) % HASH_SIZE);
hash = HashFirst[bucket]; hash = HashFirst[bucket];
@ -429,7 +429,7 @@ void FTextureManager::ReplaceTexture (FTextureID picnum, FTexture *newtexture, b
FTexture *oldtexture = Textures[index].Texture; FTexture *oldtexture = Textures[index].Texture;
strcpy (newtexture->Name, oldtexture->Name); newtexture->Name = oldtexture->Name;
newtexture->UseType = oldtexture->UseType; newtexture->UseType = oldtexture->UseType;
Textures[index].Texture = newtexture; Textures[index].Texture = newtexture;
@ -488,9 +488,7 @@ void FTextureManager::AddGroup(int wadnum, int ns, int usetype)
{ {
int firsttx = Wads.GetFirstLump(wadnum); int firsttx = Wads.GetFirstLump(wadnum);
int lasttx = Wads.GetLastLump(wadnum); int lasttx = Wads.GetLastLump(wadnum);
char name[9]; FString Name;
name[8] = 0;
// Go from first to last so that ANIMDEFS work as expected. However, // Go from first to last so that ANIMDEFS work as expected. However,
// to avoid duplicates (and to keep earlier entries from overriding // to avoid duplicates (and to keep earlier entries from overriding
@ -501,9 +499,9 @@ void FTextureManager::AddGroup(int wadnum, int ns, int usetype)
{ {
if (Wads.GetLumpNamespace(firsttx) == ns) if (Wads.GetLumpNamespace(firsttx) == ns)
{ {
Wads.GetLumpName (name, firsttx); Wads.GetLumpName (Name, firsttx);
if (Wads.CheckNumForName (name, ns) == firsttx) if (Wads.CheckNumForName (Name, ns) == firsttx)
{ {
CreateTexture (firsttx, usetype); CreateTexture (firsttx, usetype);
} }
@ -511,7 +509,7 @@ void FTextureManager::AddGroup(int wadnum, int ns, int usetype)
} }
else if (ns == ns_flats && Wads.GetLumpFlags(firsttx) & LUMPF_MAYBEFLAT) else if (ns == ns_flats && Wads.GetLumpFlags(firsttx) & LUMPF_MAYBEFLAT)
{ {
if (Wads.CheckNumForName (name, ns) < firsttx) if (Wads.CheckNumForName (Name, ns) < firsttx)
{ {
CreateTexture (firsttx, usetype); CreateTexture (firsttx, usetype);
} }
@ -531,7 +529,7 @@ void FTextureManager::AddHiresTextures (int wadnum)
int firsttx = Wads.GetFirstLump(wadnum); int firsttx = Wads.GetFirstLump(wadnum);
int lasttx = Wads.GetLastLump(wadnum); int lasttx = Wads.GetLastLump(wadnum);
char name[9]; FString Name;
TArray<FTextureID> tlist; TArray<FTextureID> tlist;
if (firsttx == -1 || lasttx == -1) if (firsttx == -1 || lasttx == -1)
@ -539,18 +537,16 @@ void FTextureManager::AddHiresTextures (int wadnum)
return; return;
} }
name[8] = 0;
for (;firsttx <= lasttx; ++firsttx) for (;firsttx <= lasttx; ++firsttx)
{ {
if (Wads.GetLumpNamespace(firsttx) == ns_hires) if (Wads.GetLumpNamespace(firsttx) == ns_hires)
{ {
Wads.GetLumpName (name, firsttx); Wads.GetLumpName (Name, firsttx);
if (Wads.CheckNumForName (name, ns_hires) == firsttx) if (Wads.CheckNumForName (Name, ns_hires) == firsttx)
{ {
tlist.Clear(); tlist.Clear();
int amount = ListTextures(name, tlist); int amount = ListTextures(Name, tlist);
if (amount == 0) if (amount == 0)
{ {
// A texture with this name does not yet exist // A texture with this name does not yet exist
@ -594,14 +590,13 @@ void FTextureManager::AddHiresTextures (int wadnum)
void FTextureManager::LoadTextureDefs(int wadnum, const char *lumpname) void FTextureManager::LoadTextureDefs(int wadnum, const char *lumpname)
{ {
int remapLump, lastLump; int remapLump, lastLump;
char src[9]; FString src;
bool is32bit; bool is32bit;
int width, height; int width, height;
int type, mode; int type, mode;
TArray<FTextureID> tlist; TArray<FTextureID> tlist;
lastLump = 0; lastLump = 0;
src[8] = '\0';
while ((remapLump = Wads.FindLump(lumpname, &lastLump)) != -1) while ((remapLump = Wads.FindLump(lumpname, &lastLump)) != -1)
{ {
@ -678,7 +673,7 @@ void FTextureManager::LoadTextureDefs(int wadnum, const char *lumpname)
FString base = ExtractFileBase(sc.String, false); FString base = ExtractFileBase(sc.String, false);
if (!base.IsEmpty()) if (!base.IsEmpty())
{ {
strncpy(src, base, 8); src = base.Left(8);
int lumpnum = Wads.CheckNumForFullName(sc.String, true, ns_patches); int lumpnum = Wads.CheckNumForFullName(sc.String, true, ns_patches);
if (lumpnum == -1) lumpnum = Wads.CheckNumForFullName(sc.String, true, ns_graphics); if (lumpnum == -1) lumpnum = Wads.CheckNumForFullName(sc.String, true, ns_graphics);
@ -701,7 +696,7 @@ void FTextureManager::LoadTextureDefs(int wadnum, const char *lumpname)
// Replace the entire texture and adjust the scaling and offset factors. // Replace the entire texture and adjust the scaling and offset factors.
newtex->bWorldPanning = true; newtex->bWorldPanning = true;
newtex->SetScaledSize(width, height); newtex->SetScaledSize(width, height);
memcpy(newtex->Name, src, sizeof(newtex->Name)); newtex->Name = src;
FTextureID oldtex = TexMan.CheckForTexture(src, FTexture::TEX_MiscPatch); FTextureID oldtex = TexMan.CheckForTexture(src, FTexture::TEX_MiscPatch);
if (oldtex.isValid()) if (oldtex.isValid())
@ -757,7 +752,7 @@ void FTextureManager::AddPatches (int lumpnum)
char name[9]; char name[9];
*file >> numpatches; *file >> numpatches;
name[8] = 0; name[8] = '\0';
for (i = 0; i < numpatches; ++i) for (i = 0; i < numpatches; ++i)
{ {
@ -839,9 +834,8 @@ void FTextureManager::AddTexturesForWad(int wadnum)
for (int i= firsttx; i <= lasttx; i++) for (int i= firsttx; i <= lasttx; i++)
{ {
bool skin = false; bool skin = false;
char name[9]; FString Name;
Wads.GetLumpName(name, i); Wads.GetLumpName(Name, i);
name[8]=0;
// Ignore anything not in the global namespace // Ignore anything not in the global namespace
int ns = Wads.GetLumpNamespace(i); int ns = Wads.GetLumpNamespace(i);
@ -867,20 +861,20 @@ void FTextureManager::AddTexturesForWad(int wadnum)
if (Wads.CheckLumpName(i, "BEHAVIOR")) continue; if (Wads.CheckLumpName(i, "BEHAVIOR")) continue;
// Don't bother looking at this lump if something later overrides it. // Don't bother looking at this lump if something later overrides it.
if (Wads.CheckNumForName(name, ns_graphics) != i) continue; if (Wads.CheckNumForName(Name, ns_graphics) != i) continue;
// skip this if it has already been added as a wall patch. // skip this if it has already been added as a wall patch.
if (CheckForTexture(name, FTexture::TEX_WallPatch, 0).Exists()) continue; if (CheckForTexture(Name, FTexture::TEX_WallPatch, 0).Exists()) continue;
} }
else if (ns == ns_graphics) else if (ns == ns_graphics)
{ {
// Don't bother looking this lump if something later overrides it. // Don't bother looking this lump if something later overrides it.
if (Wads.CheckNumForName(name, ns_graphics) != i) continue; if (Wads.CheckNumForName(Name, ns_graphics) != i) continue;
} }
else if (ns >= ns_firstskin) else if (ns >= ns_firstskin)
{ {
// Don't bother looking this lump if something later overrides it. // Don't bother looking this lump if something later overrides it.
if (Wads.CheckNumForName(name, ns) != i) continue; if (Wads.CheckNumForName(Name, ns) != i) continue;
skin = true; skin = true;
} }
else continue; else continue;

View file

@ -157,11 +157,7 @@ public:
int SourceLump; int SourceLump;
FTextureID id; FTextureID id;
union FString Name;
{
char Name[9];
DWORD dwName; // Used with sprites
};
BYTE UseType; // This texture's primary purpose BYTE UseType; // This texture's primary purpose
BYTE bNoDecals:1; // Decals should not stick to texture BYTE bNoDecals:1; // Decals should not stick to texture

View file

@ -145,7 +145,6 @@ FTGATexture::FTGATexture (int lumpnum, TGAHeader * hdr)
: FTexture(NULL, lumpnum), Pixels(0), Spans(0) : FTexture(NULL, lumpnum), Pixels(0), Spans(0)
{ {
Wads.GetLumpName (Name, lumpnum); Wads.GetLumpName (Name, lumpnum);
Name[8] = 0;
Width = hdr->width; Width = hdr->width;
Height = hdr->height; Height = hdr->height;
// Alpha channel is used only for 32 bit RGBA and paletted images with RGBA palettes. // Alpha channel is used only for 32 bit RGBA and paletted images with RGBA palettes.

View file

@ -492,7 +492,7 @@ int FWadCollection::CheckNumForFullName (const char *name, bool trynormal, int n
return -1; return -1;
} }
i = FirstLumpIndex_FullName[MakeKey (name) % NumLumps]; i = FirstLumpIndex_FullName[MakeKey(name) % NumLumps];
while (i != NULL_INDEX && stricmp(name, LumpInfo[i].lump->FullName)) while (i != NULL_INDEX && stricmp(name, LumpInfo[i].lump->FullName))
{ {
@ -1015,6 +1015,16 @@ void FWadCollection::GetLumpName (char *to, int lump) const
uppercopy (to, LumpInfo[lump].lump->Name); uppercopy (to, LumpInfo[lump].lump->Name);
} }
void FWadCollection::GetLumpName(FString &to, int lump) const
{
if ((size_t)lump >= NumLumps)
to = FString();
else {
to = LumpInfo[lump].lump->Name;
to.ToUpper();
}
}
//========================================================================== //==========================================================================
// //
// FWadCollection :: GetLumpFullName // FWadCollection :: GetLumpFullName

View file

@ -196,7 +196,8 @@ public:
int GetLumpOffset (int lump); // [RH] Returns offset of lump in the wadfile int GetLumpOffset (int lump); // [RH] Returns offset of lump in the wadfile
int GetLumpFlags (int lump); // Return the flags for this lump int GetLumpFlags (int lump); // Return the flags for this lump
void GetLumpName (char *to, int lump) const; // [RH] Copies the lump name to to using uppercopy void GetLumpName (char *to, int lump) const; // [RH] Copies the lump name to to using uppercopy
const char *GetLumpFullName (int lump) const; // [RH] Returns the lump's full name void FWadCollection::GetLumpName(FString &to, int lump) const;
const char *GetLumpFullName(int lump) const; // [RH] Returns the lump's full name
FString GetLumpFullPath (int lump) const; // [RH] Returns wad's name + lump's full name FString GetLumpFullPath (int lump) const; // [RH] Returns wad's name + lump's full name
int GetLumpFile (int lump) const; // [RH] Returns wadnum for a specified lump int GetLumpFile (int lump) const; // [RH] Returns wadnum for a specified lump
int GetLumpNamespace (int lump) const; // [RH] Returns the namespace a lump belongs to int GetLumpNamespace (int lump) const; // [RH] Returns the namespace a lump belongs to