- allow switching between the two Duke BigFonts and fix Y in Duke's BigFont13.

This commit is contained in:
Christoph Oelckers 2021-05-31 00:52:40 +02:00
parent 90bcba302e
commit d174b61c3c
8 changed files with 51 additions and 12 deletions

View file

@ -1007,10 +1007,10 @@ void FFont::LoadTranslations()
// //
//========================================================================== //==========================================================================
FFont::FFont (int lump) FFont::FFont (int lump, FName nm)
{ {
Lump = lump; Lump = lump;
FontName = NAME_None; FontName = nm;
Cursor = '_'; Cursor = '_';
noTranslate = false; noTranslate = false;
} }

View file

@ -103,13 +103,6 @@ FFont *V_GetFont(const char *name, const char *fontlumpname)
if (font) return font; if (font) return font;
} }
// This is only temporary until virtual fonts get implemented
if (!stricmp(name, "BIGFONT"))
{
font = V_GetFont("BIGFONT15");
if (font) return font;
}
int lump = -1; int lump = -1;
int folderfile = -1; int folderfile = -1;

View file

@ -99,6 +99,7 @@ public:
}; };
FFont (const char *fontname, const char *nametemplate, const char *filetemplate, int first, int count, int base, int fdlump, int spacewidth=-1, bool notranslate = false, bool iwadonly = false, bool doomtemplate = false, GlyphSet *baseGlpyphs = nullptr); FFont (const char *fontname, const char *nametemplate, const char *filetemplate, int first, int count, int base, int fdlump, int spacewidth=-1, bool notranslate = false, bool iwadonly = false, bool doomtemplate = false, GlyphSet *baseGlpyphs = nullptr);
FFont(int lump, FName nm = NAME_None);
virtual ~FFont (); virtual ~FFont ();
virtual FGameTexture *GetChar (int code, int translation, int *const width) const; virtual FGameTexture *GetChar (int code, int translation, int *const width) const;
@ -141,6 +142,7 @@ public:
bool NoTranslate() const { return noTranslate; } bool NoTranslate() const { return noTranslate; }
virtual void RecordAllTextureColors(uint32_t *usedcolors); virtual void RecordAllTextureColors(uint32_t *usedcolors);
void CheckCase(); void CheckCase();
void SetName(FName nm) { FontName = nm; }
int GetDisplacement() const { return Displacement; } int GetDisplacement() const { return Displacement; }
@ -149,8 +151,26 @@ public:
friend void V_InitCustomFonts(); friend void V_InitCustomFonts();
void CopyFrom(const FFont& other)
{
Type = other.Type;
FirstChar = other.FirstChar;
LastChar = other.LastChar;
SpaceWidth = other.SpaceWidth;
FontHeight = other.FontHeight;
GlobalKerning = other.GlobalKerning;
TranslationType = other.TranslationType;
Displacement = other.Displacement;
Cursor = other.Cursor;
noTranslate = other.noTranslate;
MixedCase = other.MixedCase;
forceremap = other.forceremap;
Chars = other.Chars;
Translations = other.Translations;
Lump = other.Lump;
}
protected: protected:
FFont (int lump);
void FixXMoves(); void FixXMoves();

View file

@ -836,7 +836,7 @@ void DStatusBarCore::DrawString(FFont* font, const FString& cstring, double x, d
void SBar_DrawString(DStatusBarCore* self, DHUDFont* font, const FString& string, double x, double y, int flags, int trans, double alpha, int wrapwidth, int linespacing, double scaleX, double scaleY, int pt, int style) void SBar_DrawString(DStatusBarCore* self, DHUDFont* font, const FString& string, double x, double y, int flags, int trans, double alpha, int wrapwidth, int linespacing, double scaleX, double scaleY, int pt, int style)
{ {
if (font == nullptr) ThrowAbortException(X_READ_NIL, nullptr); if (font == nullptr || font->mFont == nullptr) ThrowAbortException(X_READ_NIL, nullptr);
if (!twod->HasBegun2D()) ThrowAbortException(X_OTHER, "Attempt to draw to screen outside a draw function"); if (!twod->HasBegun2D()) ThrowAbortException(X_OTHER, "Attempt to draw to screen outside a draw function");
// resolve auto-alignment before making any adjustments to the position values. // resolve auto-alignment before making any adjustments to the position values.

View file

@ -1026,6 +1026,7 @@ int RunGame()
lookups.postLoadTables(); lookups.postLoadTables();
PostLoadSetup(); PostLoadSetup();
lookups.postLoadLookups(); lookups.postLoadLookups();
duke_menufont.Callback();
V_LoadTranslations(); // loading the translations must be delayed until the palettes have been fully set up. V_LoadTranslations(); // loading the translations must be delayed until the palettes have been fully set up.
FMaterial::SetLayerCallback(setpalettelayer); FMaterial::SetLayerCallback(setpalettelayer);

View file

@ -33,6 +33,8 @@
*/ */
#include "razefont.h" #include "razefont.h"
#include "gamecontrol.h"
#include "c_cvars.h"
#include "i_interface.h" #include "i_interface.h"
FGameTexture* GetBaseForChar(FGameTexture* t); FGameTexture* GetBaseForChar(FGameTexture* t);
@ -41,6 +43,20 @@ void FontCharCreated(FGameTexture* base, FGameTexture* glyph);
FFont* IndexFont; FFont* IndexFont;
FFont* DigiFont; FFont* DigiFont;
FFont* BigFont13, * BigFont15;
CUSTOM_CVAR(Int, duke_menufont, -1, CVAR_ARCHIVE | CVAR_GLOBALCONFIG | CVAR_NOINITCALL)
{
if (!(g_gameType & GAMEFLAG_DUKE) || !BigFont13 || !BigFont15) return;
if (self < -1 || self > 1) self = -1;
else
{
// Font info must be copied so that BigFont does not change its address.
if (self == 0 || (self == -1 && isPlutoPak())) BigFont->CopyFrom(*BigFont15);
else if (self == 1 || (self == -1 && !isPlutoPak())) BigFont->CopyFrom(*BigFont13);
}
}
static void SetupHires(FFont *font) static void SetupHires(FFont *font)
{ {
@ -78,6 +94,12 @@ void InitFont()
SetupHires(BigFont); SetupHires(BigFont);
SetupHires(SmallFont); SetupHires(SmallFont);
if (g_gameType & GAMEFLAG_DUKE)
{
BigFont13 = V_GetFont("BigFont13");
BigFont15 = V_GetFont("BigFont15");
BigFont = new FFont(0, "BigFont");
}
// todo: Compare small and big fonts with the base font and decide which one to use. // todo: Compare small and big fonts with the base font and decide which one to use.
// todo: Allow Duke to select between both variants.
} }

View file

@ -1,5 +1,8 @@
#pragma once #pragma once
#include "v_font.h" #include "v_font.h"
#include "c_cvars.h"
EXTERN_CVAR(Int, duke_menufont)
extern FFont* IndexFont; extern FFont* IndexFont;
extern FFont* DigiFont; extern FFont* DigiFont;