- let IWAD and PWAD BigFonts override BigUpper for consistency.

# Conflicts:
#	src/gamedata/fonts/font.cpp
#	src/gamedata/fonts/singlelumpfont.cpp
#	src/gamedata/fonts/v_font.cpp
This commit is contained in:
Christoph Oelckers 2019-03-02 12:54:46 +01:00 committed by drfrag
parent 8ff421104d
commit da5c1c90dc
4 changed files with 43 additions and 2 deletions

View file

@ -9,6 +9,7 @@
#include "r_data/r_translate.h" #include "r_data/r_translate.h"
#include "c_cvars.h" #include "c_cvars.h"
#include "v_font.h" #include "v_font.h"
#include "gi.h"
#include "textures/textures.h" #include "textures/textures.h"
EXTERN_CVAR(Float, snd_menuvolume) EXTERN_CVAR(Float, snd_menuvolume)
@ -205,6 +206,8 @@ public:
mScrollTop = 0; mScrollTop = 0;
mIndent = 0; mIndent = 0;
mDontDim = 0; mDontDim = 0;
mFont = gameinfo.gametype == GAME_Doom ? BigUpper : BigFont;
} }
size_t PropagateMark() override; size_t PropagateMark() override;
~DOptionMenuDescriptor() ~DOptionMenuDescriptor()

View file

@ -958,6 +958,7 @@ static void ParseOptionMenu(FScanner &sc)
sc.MustGetString(); sc.MustGetString();
DOptionMenuDescriptor *desc = Create<DOptionMenuDescriptor>(); DOptionMenuDescriptor *desc = Create<DOptionMenuDescriptor>();
desc->mFont = gameinfo.gametype == GAME_Doom ? BigUpper : BigFont;
desc->mMenuName = sc.String; desc->mMenuName = sc.String;
desc->mSelectedItem = -1; desc->mSelectedItem = -1;
desc->mScrollPos = 0; desc->mScrollPos = 0;
@ -1295,6 +1296,7 @@ static void BuildPlayerclassMenu()
DOptionMenuDescriptor *od = Create<DOptionMenuDescriptor>(); DOptionMenuDescriptor *od = Create<DOptionMenuDescriptor>();
MenuDescriptors[NAME_Playerclassmenu] = od; MenuDescriptors[NAME_Playerclassmenu] = od;
od->mMenuName = NAME_Playerclassmenu; od->mMenuName = NAME_Playerclassmenu;
od->mFont = gameinfo.gametype == GAME_Doom ? BigUpper : BigFont;
od->mTitle = "$MNU_CHOOSECLASS"; od->mTitle = "$MNU_CHOOSECLASS";
od->mSelectedItem = 0; od->mSelectedItem = 0;
od->mScrollPos = 0; od->mScrollPos = 0;
@ -1675,6 +1677,7 @@ fail:
od = Create<DOptionMenuDescriptor>(); od = Create<DOptionMenuDescriptor>();
MenuDescriptors[NAME_Skillmenu] = od; MenuDescriptors[NAME_Skillmenu] = od;
od->mMenuName = NAME_Skillmenu; od->mMenuName = NAME_Skillmenu;
od->mFont = gameinfo.gametype == GAME_Doom ? BigUpper : BigFont;
od->mTitle = "$MNU_CHOOSESKILL"; od->mTitle = "$MNU_CHOOSESKILL";
od->mSelectedItem = defindex; od->mSelectedItem = defindex;
od->mScrollPos = 0; od->mScrollPos = 0;

View file

@ -1056,8 +1056,14 @@ int stripaccent(int code)
FFont *V_GetFont(const char *name, const char *fontlumpname) FFont *V_GetFont(const char *name, const char *fontlumpname)
{ {
FFont *font = FFont::FindFont (name); FFont *font = FFont::FindFont (name);
if (font == NULL) if (font == nullptr)
{ {
if (!stricmp(name, "BIGUPPER"))
{
font = FFont::FindFont("BIGFONT");
if (font) return font;
}
int lump = -1; int lump = -1;
int folderfile = -1; int folderfile = -1;
@ -1222,6 +1228,7 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla
} }
if (lump.isValid()) if (lump.isValid())
{ {
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[lump]); charMap.Insert(position, TexMan[lump]);
@ -1246,6 +1253,7 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla
auto tex = TexMan[lump]; auto tex = TexMan[lump];
tex->SetScale(Scale); tex->SetScale(Scale);
charMap.Insert((int)position, tex); charMap.Insert((int)position, tex);
Type = Folder;
} }
} }
} }
@ -3596,6 +3604,10 @@ void V_InitFonts()
SmallFont2 = new FFont("SmallFont2", "STBFN%.3d", "defsmallfont2", HU_FONTSTART, HU_FONTSIZE, HU_FONTSTART, -1); SmallFont2 = new FFont("SmallFont2", "STBFN%.3d", "defsmallfont2", HU_FONTSTART, HU_FONTSIZE, HU_FONTSTART, -1);
} }
} }
//This must be read before BigFont so that it can be properly substituted.
BigUpper = V_GetFont("BigUpper");
if (!(BigFont = V_GetFont("BigFont"))) if (!(BigFont = V_GetFont("BigFont")))
{ {
if (gameinfo.gametype & GAME_Raven) if (gameinfo.gametype & GAME_Raven)
@ -3603,10 +3615,19 @@ void V_InitFonts()
BigFont = new FFont("BigFont", "FONTB%02u", "defbigfont", HU_FONTSTART, HU_FONTSIZE, 1, -1); BigFont = new FFont("BigFont", "FONTB%02u", "defbigfont", HU_FONTSTART, HU_FONTSIZE, 1, -1);
} }
} }
if (!(BigUpper = V_GetFont("BigUpper")))
// let PWAD BIGFONTs override the stock BIGUPPER font. (This check needs to be made smarter.)
if (BigUpper && BigFont->Type != FFont::Folder && BigUpper->Type == FFont::Folder)
{
delete BigUpper;
BigUpper = BigFont;
}
if (BigUpper == nullptr)
{ {
BigUpper = BigFont; BigUpper = BigFont;
} }
if (!(ConFont = V_GetFont("ConsoleFont", "CONFONT"))) if (!(ConFont = V_GetFont("ConsoleFont", "CONFONT")))
{ {
ConFont = SmallFont; ConFont = SmallFont;

View file

@ -79,6 +79,18 @@ extern int NumTextColors;
class FFont class FFont
{ {
public: public:
enum EFontType
{
Unknown,
Folder,
Multilump,
Fon1,
Fon2,
BMF,
Custom
};
FFont (const char *fontname, const char *nametemplate, const char *filetemplate, int first, int count, int base, int fdlump, int spacewidth=-1, bool notranslate = false); FFont (const char *fontname, const char *nametemplate, const char *filetemplate, int first, int count, int base, int fdlump, int spacewidth=-1, bool notranslate = false);
virtual ~FFont (); virtual ~FFont ();
@ -117,6 +129,7 @@ protected:
static int SimpleTranslation (uint32_t *colorsused, uint8_t *translation, static int SimpleTranslation (uint32_t *colorsused, uint8_t *translation,
uint8_t *identity, double **luminosity); uint8_t *identity, double **luminosity);
EFontType Type = EFontType::Unknown;
int FirstChar, LastChar; int FirstChar, LastChar;
int SpaceWidth; int SpaceWidth;
int FontHeight; int FontHeight;
@ -141,6 +154,7 @@ protected:
friend struct FontsDeleter; friend struct FontsDeleter;
friend void V_ClearFonts(); friend void V_ClearFonts();
friend void V_InitFonts();
}; };