- always construct the original IWAD SmallFont.

This is for printing localized messages without having to fall back on the VGA font.
This commit is contained in:
Christoph Oelckers 2019-04-21 08:42:27 +02:00
parent fcbde757c9
commit c1b0122558
3 changed files with 29 additions and 10 deletions

View file

@ -221,7 +221,8 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla
} }
else else
{ {
FTexture *texs[256 - '!'] = {}; FTexture *texs[256] = {};
if (lcount > 256 - start) lcount = 256 - start;
for (i = 0; i < lcount; i++) for (i = 0; i < lcount; i++)
{ {
TArray<FTextureID> array; TArray<FTextureID> array;
@ -240,10 +241,10 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla
if (doomtemplate) if (doomtemplate)
{ {
// Handle the misplaced '|'. // Handle the misplaced '|'.
if (texs[121 - start] && !texs[120 - start] && !texs[122 - start] && !texs[124 - start]) if (texs[121 - '!'] && !texs[120 - '!'] && !texs[122 - '!'] && !texs[124 - '!'])
{ {
texs[124 - start] = texs[121 - start]; texs[124 - '!'] = texs[121 - '!'];
texs[121 - start] = nullptr; texs[121 - '!'] = nullptr;
} }
} }
@ -255,7 +256,7 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla
Type = Multilump; Type = Multilump;
if (position < minchar) minchar = position; if (position < minchar) minchar = position;
if (position > maxchar) maxchar = position; if (position > maxchar) maxchar = position;
charMap.Insert(position, TexMan.GetTexture(lump)); charMap.Insert(position, texs[i]);
} }
} }
} }

View file

@ -1524,7 +1524,7 @@ void V_InitFonts()
{ {
// The font has been replaced, so we need to create a copy of the original as well. // The font has been replaced, so we need to create a copy of the original as well.
SmallFont = new FFont("SmallFont", "STCFN%.3d", nullptr, HU_FONTSTART, HU_FONTSIZE, HU_FONTSTART, -1); SmallFont = new FFont("SmallFont", "STCFN%.3d", nullptr, HU_FONTSTART, HU_FONTSIZE, HU_FONTSTART, -1);
OriginalSmallFont = new FFont("SmallFont", "FONTA%02u", "defsmallfont", HU_FONTSTART, HU_FONTSIZE, 1, -1, -1, false, true); OriginalSmallFont = new FFont("SmallFont", "STCFN%.3d", "defsmallfont", HU_FONTSTART, HU_FONTSIZE, HU_FONTSTART, -1, -1, false, true);
} }
else else
{ {

View file

@ -928,6 +928,7 @@ void FTextureManager::AddTexturesForWad(int wadnum, FMultipatchTextureBuilder &b
{ {
int firsttexture = Textures.Size(); int firsttexture = Textures.Size();
int lumpcount = Wads.GetNumLumps(); int lumpcount = Wads.GetNumLumps();
bool iwad = wadnum == Wads.GetIwadNum();
FirstTextureForFile.Push(firsttexture); FirstTextureForFile.Push(firsttexture);
@ -980,16 +981,33 @@ void FTextureManager::AddTexturesForWad(int wadnum, FMultipatchTextureBuilder &b
if (Wads.CheckLumpName(i, "BLOCKMAP")) continue; if (Wads.CheckLumpName(i, "BLOCKMAP")) continue;
if (Wads.CheckLumpName(i, "BEHAVIOR")) continue; if (Wads.CheckLumpName(i, "BEHAVIOR")) continue;
bool force = false;
// 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)
{
if (iwad)
{
// We need to make an exception for font characters of the SmallFont coming from the IWAD to be able to construct the original font.
if (Name.IndexOf("STCFN") != 0 && Name.IndexOf("FONTA") != 0) continue;
force = true;
}
else 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, ETextureType::WallPatch, 0).Exists()) continue; if (!force && CheckForTexture(Name, ETextureType::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. if (Wads.CheckNumForName(Name, ns_graphics) != i)
if (Wads.CheckNumForName(Name, ns_graphics) != i) continue; {
if (iwad)
{
// We need to make an exception for font characters of the SmallFont coming from the IWAD to be able to construct the original font.
if (Name.IndexOf("STCFN") != 0 && Name.IndexOf("FONTA") != 0) continue;
}
else continue;
}
} }
else if (ns >= ns_firstskin) else if (ns >= ns_firstskin)
{ {