- moved all font setup out of the C++ code.

All internal fonts now get defined through FONTDEFS.
Also fixing a few offsets.
This commit is contained in:
Christoph Oelckers 2021-05-30 23:00:06 +02:00
parent 42b70a7d93
commit af781e0422
40 changed files with 2070 additions and 563 deletions

View file

@ -759,8 +759,6 @@ set( NOT_COMPILED_SOURCE_FILES
games/blood/src/weapon.cpp
# Duke
games/duke/src/2d_d.cpp
games/duke/src/2d_r.cpp
games/duke/src/actors.cpp
games/duke/src/actors_d.cpp
games/duke/src/actors_lava.cpp
@ -1025,6 +1023,7 @@ set (PCH_SOURCES
core/quotes.cpp
core/screenshot.cpp
core/sectorgeometry.cpp
core/razefont.cpp
core/raze_music.cpp
core/raze_sound.cpp
core/palette.cpp

View file

@ -31,7 +31,7 @@ struct SystemCallbacks
bool (*CheckMenudefOption)(const char* opt);
void (*ConsoleToggled)(int state);
bool (*PreBindTexture)(FRenderState* state, FGameTexture*& tex, EUpscaleFlags& flags, int& scaleflags, int& clampmode, int& translation, int& overrideshader);
void (*FontCharCreated)(FGameTexture* base, FGameTexture* untranslated, FGameTexture* translated);
void (*FontCharCreated)(FGameTexture* base, FGameTexture* untranslated);
void (*ToggleFullConsole)();
void (*StartCutscene)(bool blockui);
};

View file

@ -339,7 +339,7 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla
TexMan.AddGameTexture(tex);
Chars[i].OriginalPic = tex;
if (sysCallbacks.FontCharCreated) sysCallbacks.FontCharCreated(pic, Chars[i].OriginalPic, Chars[i].OriginalPic);
if (sysCallbacks.FontCharCreated) sysCallbacks.FontCharCreated(pic, Chars[i].OriginalPic);
Chars[i].XMove = (int)Chars[i].OriginalPic->GetDisplayWidth();
}
@ -987,6 +987,8 @@ void FFont::LoadTranslations()
int minlum = 0, maxlum = 0;
GetLuminosity (usedcolors, Luminosity, &minlum, &maxlum);
if (MinLum >= 0 && MinLum < minlum) minlum = MinLum;
if (MaxLum > maxlum) maxlum = MaxLum;
// Here we can set everything to a luminosity translation.
@ -1074,3 +1076,7 @@ void FFont::FixXMoves()
}
void FFont::ClearOffsets()
{
for (auto& c : Chars) if (c.OriginalPic) c.OriginalPic->SetOffsets(0, 0);
}

View file

@ -109,7 +109,7 @@ FSpecialFont::FSpecialFont (const char *name, int first, int count, FGameTexture
Chars[i].OriginalPic->CopySize(pic, true);
TexMan.AddGameTexture(Chars[i].OriginalPic);
Chars[i].XMove = (int)Chars[i].OriginalPic->GetDisplayWidth();
if (sysCallbacks.FontCharCreated) sysCallbacks.FontCharCreated(pic, Chars[i].OriginalPic, Chars[i].OriginalPic);
if (sysCallbacks.FontCharCreated) sysCallbacks.FontCharCreated(pic, Chars[i].OriginalPic);
}
else
{

View file

@ -106,7 +106,7 @@ FFont *V_GetFont(const char *name, const char *fontlumpname)
// This is only temporary until virtual fonts get implemented
if (!stricmp(name, "BIGFONT"))
{
font = FFont::FindFont("BIGFONT15");
font = V_GetFont("BIGFONT15");
if (font) return font;
}
@ -184,9 +184,11 @@ void V_InitCustomFonts()
int start;
int first;
int count;
int spacewidth;
int spacewidth = -1;
int kerning;
char cursor = '_';
bool ignoreoffsets = false;
int MinLum = -1, MaxLum = -1;
while ((llump = fileSystem.FindLump ("FONTDEFS", &lastlump)) != -1)
{
@ -243,10 +245,8 @@ void V_InitCustomFonts()
}
else if (sc.Compare ("SPACEWIDTH"))
{
if (format == 2) goto wrong;
sc.MustGetNumber();
spacewidth = sc.Number;
format = 1;
}
else if (sc.Compare("DONTTRANSLATE"))
{
@ -267,9 +267,26 @@ void V_InitCustomFonts()
sc.MustGetNumber();
kerning = sc.Number;
}
else if (sc.Compare("ignoreoffsets"))
{
ignoreoffsets = true;
}
else if (sc.Compare("minluminosity"))
{
sc.MustGetValue(false);
MinLum = (int16_t)clamp(sc.Number, 0, 255);
}
else if (sc.Compare("maxluminosity"))
{
sc.MustGetValue(false);
MaxLum = (int16_t)clamp(sc.Number, 0, 255);
}
else
{
if (format == 1) goto wrong;
// The braces must be filtered so because they'd be treated as block terminators otherwise.
if (!strcmp(sc.String, "-{")) strcpy(sc.String, "{");
if (!strcmp(sc.String, "-}")) strcpy(sc.String, "}");
FGameTexture **p = &lumplist[*(unsigned char*)sc.String];
sc.MustGetString();
FTextureID texid = TexMan.CheckForTexture(sc.String, ETextureType::MiscPatch);
@ -290,6 +307,7 @@ void V_InitCustomFonts()
FFont *fnt = new FFont (namebuffer, templatebuf, nullptr, first, count, start, llump, spacewidth, donttranslate);
fnt->SetCursor(cursor);
fnt->SetKerning(kerning);
if (ignoreoffsets) fnt->ClearOffsets();
}
else if (format == 2)
{
@ -315,6 +333,10 @@ void V_InitCustomFonts()
FFont *fnt = CreateSpecialFont (namebuffer, first, count, &lumplist[first], notranslate, llump, donttranslate);
fnt->SetCursor(cursor);
fnt->SetKerning(kerning);
if (spacewidth >= 0) fnt->SpaceWidth = spacewidth;
fnt->MinLum = MinLum;
fnt->MaxLum = MaxLum;
if (ignoreoffsets) fnt->ClearOffsets();
}
}
else goto wrong;
@ -324,7 +346,7 @@ void V_InitCustomFonts()
return;
wrong:
sc.ScriptError ("Invalid combination of properties in font '%s'", namebuffer.GetChars());
sc.ScriptError ("Invalid combination of properties in font '%s', %s not allowed", namebuffer.GetChars(), sc.String);
}
//==========================================================================
@ -943,3 +965,28 @@ char* CleanseString(char* str)
return str;
}
#include "c_dispatch.h"
FGameTexture* GetBaseForChar(FGameTexture* t);
CCMD(dumpfonts)
{
for (auto c : { "tilesmallfont", "tilebigfont", "smallfont2", "digifont", "indexfont" })
{
auto f = V_GetFont(c);
if (f)
{
Printf("%s\n{\n", c);
for (int i = 33; i < 127; i++)
{
auto ch = f->GetChar(i, CR_UNDEFINED, nullptr);
if (ch)
{
ch = GetBaseForChar(ch);
if (i == 34) Printf("\t\"\\\""); else Printf("\t%c", i);
Printf(" %s\n", ch->GetName().GetChars());
}
}
Printf("}\n\n");
}
}
}

View file

@ -40,6 +40,9 @@
class FGameTexture;
struct FRemapTable;
class FFont;
FFont* V_GetFont(const char* fontname, const char* fontlumpname = nullptr);
enum EColorRange : int
{
@ -123,11 +126,18 @@ public:
inline bool CanPrint(const char *str) const { return CanPrint((const uint8_t *)str); }
inline bool CanPrint(const FString &str) const { return CanPrint((const uint8_t *)str.GetChars()); }
inline FFont* AltFont()
{
if (AltFontName != NAME_None) return V_GetFont(AltFontName.GetChars());
return nullptr;
}
int GetCharCode(int code, bool needpic) const;
char GetCursor() const { return Cursor; }
void SetCursor(char c) { Cursor = c; }
void SetKerning(int c) { GlobalKerning = c; }
void SetHeight(int c) { FontHeight = c; }
void ClearOffsets();
bool NoTranslate() const { return noTranslate; }
virtual void RecordAllTextureColors(uint32_t *usedcolors);
void CheckCase();
@ -137,6 +147,7 @@ public:
static int GetLuminosity(uint32_t* colorsused, TArray<double>& Luminosity, int* minlum = nullptr, int* maxlum = nullptr);
EFontType GetType() const { return Type; }
friend void V_InitCustomFonts();
protected:
FFont (int lump);
@ -185,7 +196,6 @@ void V_ClearFonts();
EColorRange V_FindFontColor (FName name);
PalEntry V_LogColorFromColorRange (EColorRange range);
EColorRange V_ParseFontColor (const uint8_t *&color_value, int normalcolor, int boldcolor);
FFont *V_GetFont(const char *fontname, const char *fontlumpname = nullptr);
void V_InitFontColors();
char* CleanseString(char* str);
void V_ApplyLuminosityTranslation(int translation, uint8_t* pixel, int size);

View file

@ -77,6 +77,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "gamefuncs.h"
#include "hw_voxels.h"
#include "hw_palmanager.h"
#include "razefont.h"
CVAR(Bool, autoloadlights, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG)
CVAR(Bool, autoloadbrightmaps, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG)
@ -140,7 +141,7 @@ void MainLoop();
void SetConsoleNotifyBuffer();
bool PreBindTexture(FRenderState* state, FGameTexture*& tex, EUpscaleFlags& flags, int& scaleflags, int& clampmode, int& translation, int& overrideshader);
void PostLoadSetup();
void FontCharCreated(FGameTexture* base, FGameTexture* untranslated, FGameTexture* translated);
void FontCharCreated(FGameTexture* base, FGameTexture* untranslated);
void LoadVoxelModels();
DStatusBarCore* StatusBar;
@ -984,9 +985,10 @@ int RunGame()
GPalette.Init(MAXPALOOKUPS + 2); // one slot for each translation, plus a separate one for the base palettes and the internal one
StartScreen->Progress();
TexMan.Init([]() {}, [](BuildInfo &) {});
V_InitFonts();
StartScreen->Progress();
TileFiles.Init();
TileFiles.LoadArtSet("tiles%03d.art"); // it's the same for all games.
InitFont();
StartScreen->Progress();
I_InitSound();
StartScreen->Progress();
@ -1009,7 +1011,6 @@ int RunGame()
GPalette.Init(MAXPALOOKUPS + 1); // one slot for each translation, plus a separate one for the base palettes.
gi->loadPalette();
voxInit();
TileFiles.LoadArtSet("tiles%03d.art"); // it's the same for all games.
engineInit();
gi->app_init();
StartScreen->Progress();

83
source/core/razefont.cpp Normal file
View file

@ -0,0 +1,83 @@
/*
** razefont.cpp
**
**---------------------------------------------------------------------------
** Copyright 2021 Christoph Oelckers
** All rights reserved.
**
** Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions
** are met:
**
** 1. Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** 2. Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in the
** documentation and/or other materials provided with the distribution.
** 3. The name of the author may not be used to endorse or promote products
** derived from this software without specific prior written permission.
**
** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
**---------------------------------------------------------------------------
**
**
*/
#include "razefont.h"
#include "i_interface.h"
FGameTexture* GetBaseForChar(FGameTexture* t);
void FontCharCreated(FGameTexture* base, FGameTexture* glyph);
FFont* IndexFont;
FFont* DigiFont;
static void SetupHires(FFont *font)
{
if (!font) return;
auto altfont = font->AltFont();
if (!altfont) return;
// Set up hightile links for the font.
for (int i = 33; i < 127; i++)
{
auto mycode = font->GetCharCode(i, true);
if (mycode != i) continue;
auto mychar = font->GetChar(i, CR_UNDEFINED, nullptr);
if (mychar == nullptr) continue;
auto altcode = altfont->GetCharCode(i, true);
if (altcode != i) continue;
auto altchar = altfont->GetChar(i, CR_UNDEFINED, nullptr);
if (altchar == nullptr) continue;
auto base = GetBaseForChar(altchar);
if (base == nullptr) continue;
FontCharCreated(base, mychar);
}
}
void InitFont()
{
V_InitFonts();
BigFont = V_GetFont("BigFont");
SmallFont = V_GetFont("SmallFont");
SmallFont2 = V_GetFont("SmallFont2");
IndexFont = V_GetFont("IndexFont");
DigiFont = V_GetFont("DigiFont");
SetupHires(BigFont);
SetupHires(SmallFont);
// todo: Compare small and big fonts with the base font and decide which one to use.
// todo: Allow Duke to select between both variants.
}

7
source/core/razefont.h Normal file
View file

@ -0,0 +1,7 @@
#pragma once
#include "v_font.h"
extern FFont* IndexFont;
extern FFont* DigiFont;
void InitFont();

View file

@ -64,21 +64,18 @@ struct HightileReplacement
static TMap<int, TArray<HightileReplacement>> tileReplacements;
static TMap<int, TArray<HightileReplacement>> textureReplacements;
struct FontCharInf
{
FGameTexture* base;
FGameTexture* untranslated;
FGameTexture* translated;
};
static TMap<FGameTexture*, FGameTexture*> deferredChars;
static TArray<FontCharInf> deferredChars;
void FontCharCreated(FGameTexture* base, FGameTexture* untranslated, FGameTexture* translated)
FGameTexture* GetBaseForChar(FGameTexture* t)
{
// Store these in a list for now - they can only be processed in the finalization step.
if (translated == untranslated) translated = nullptr;
FontCharInf fci = { base, untranslated, translated };
deferredChars.Push(fci);
auto c = deferredChars.CheckKey(t);
if (c) return *c;
return t;
}
void FontCharCreated(FGameTexture* base, FGameTexture* glyph)
{
deferredChars.Insert(glyph, base);
}
@ -215,28 +212,16 @@ void PostLoadSetup()
tileReplacements.Clear();
int i = 0;
for (auto& ci : deferredChars)
decltype(deferredChars)::Iterator it(deferredChars);
decltype(deferredChars)::Pair* pair;
while (it.NextPair(pair))
{
i++;
auto rep = textureReplacements.CheckKey(ci.base->GetID().GetIndex());
auto rep = textureReplacements.CheckKey(pair->Value->GetID().GetIndex());
if (rep)
{
if (ci.untranslated)
{
auto rrep = *rep;
textureReplacements.Insert(ci.untranslated->GetID().GetIndex(), std::move(rrep));
}
if (ci.translated)
{
//auto reptex = FindReplacement(ci.base->GetID(), 0, false);
//if (reptex)
{
// Todo: apply the translation.
//auto rrep = *rep;
//textureReplacements.Insert(ci.translated->GetID().GetIndex(), std::move(rrep));
}
}
auto chk = textureReplacements.CheckKey(pair->Key->GetID().GetIndex());
if (!chk) textureReplacements.Insert(pair->Key->GetID().GetIndex(), *rep);
}
}
}

View file

@ -43,6 +43,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#include "v_draw.h"
#include "precache.h"
#include "render.h"
#include "razefont.h"
EXTERN_CVAR(Bool, testnewrenderer)
@ -57,31 +58,6 @@ double gInterpolate;
int gScreenTilt;
FFont* DigiFont;
FFont* FontSet(const char* name, int tile, int space)
{
GlyphSet glyphs;
for (int i = 1; i < 96; i++)
{
auto tex = tileGetTexture(tile + i);
if (tex && tex->isValid() && tex->GetTexelWidth() > 0 && tex->GetTexelHeight() > 0)
{
glyphs.Insert(i + 32, tex);
tex->SetOffsetsNotForFont();
}
}
auto fnt = V_GetFont(name);
if (!fnt)
{
fnt = new ::FFont(name, nullptr, nullptr, 0, 0, 0, 0, tileWidth(tile), false, false, false, &glyphs);
fnt->SetKerning(space);
}
return fnt;
}
void viewBackupView(int nPlayer)
{
PLAYER *pPlayer = &gPlayer[nPlayer];
@ -165,16 +141,6 @@ void viewInit(void)
{
Printf("Initializing status bar\n");
FontSet("tilesmallfont", 4096, 0);
FontSet("tilebigfont", 4192, 1);
FontSet("gothfont", 4288, 1);
SmallFont2 = FontSet("smallfont2", 4384, 1);
DigiFont = FontSet("digifont", 4480, 0);
BigFont = V_GetFont("BIGFONT");
SmallFont = V_GetFont("SMALLFONT");
lensdata = fileSystem.LoadFile("lens.dat");
assert(lensdata.Size() == kLensSize * kLensSize * sizeof(int));

View file

@ -1,4 +1,3 @@
#include "src/2d_d.cpp"
#include "src/actors_d.cpp"
#include "src/animatesprites_d.cpp"
#include "src/flags_d.cpp"

View file

@ -1,4 +1,3 @@
#include "src/2d_r.cpp"
#include "src/actors_r.cpp"
#include "src/actors_lava.cpp"
#include "src/animatesprites_r.cpp"

View file

@ -1,158 +0,0 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 1996, 2003 - 3D Realms Entertainment
This file is part of Duke Nukem 3D version 1.5 - Atomic Edition
Duke Nukem 3D is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
aint with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Original Source: 1996 - Todd Replogle
Prepared for public release: 03/21/2003 - Charlie Wiederhold, 3D Realms
Modifications for JonoF's port by Jonathon Fowler (jf@jonof.id.au)
*/
//-------------------------------------------------------------------------
// this file collects all 2D content of the game that was scattered across multiple sources originally.
// All this should transition to a more modern, preferably localization friendly, approach later.
#include "ns.h"
#include "duke3d.h"
#include "names_d.h"
#include "animtexture.h"
#include "animlib.h"
#include "raze_music.h"
#include "mapinfo.h"
#include "screenjob.h"
#include "texturemanager.h"
#include "buildtiles.h"
#include "mapinfo.h"
#include "c_dispatch.h"
#include "gamestate.h"
#include "gamefuncs.h"
BEGIN_DUKE_NS
//==========================================================================
//
// Sets up the game fonts.
//
//==========================================================================
void InitFonts_d()
{
GlyphSet fontdata;
if (!V_GetFont("TileSmallFont"))
{
// Small font
for (int i = 0; i < 95; i++)
{
auto tile = tileGetTexture(STARTALPHANUM + i);
if (tile && tile->isValid() && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
{
if (i >= 'a' && i <= 'z' && tileEqualTo(i, i - 32)) continue;
fontdata.Insert('!' + i, tile);
tile->SetOffsetsNotForFont();
}
}
new ::FFont("TileSmallFont", nullptr, nullptr, 0, 0, 0, -1, 5, false, false, false, &fontdata);
fontdata.Clear();
}
// Big font
if (!V_GetFont("TileBigFont"))
{
// This font is VERY messy...
fontdata.Insert('_', tileGetTexture(BIGALPHANUM - 11));
fontdata.Insert('-', tileGetTexture(BIGALPHANUM - 11));
for (int i = 0; i < 10; i++) fontdata.Insert('0' + i, tileGetTexture(BIGALPHANUM - 10 + i));
for (int i = 0; i < 26; i++) fontdata.Insert('A' + i, tileGetTexture(BIGALPHANUM + i));
fontdata.Insert('.', tileGetTexture(BIGPERIOD));
fontdata.Insert(',', tileGetTexture(BIGCOMMA));
fontdata.Insert('!', tileGetTexture(BIGX));
fontdata.Insert('?', tileGetTexture(BIGQ));
fontdata.Insert(';', tileGetTexture(BIGSEMI));
fontdata.Insert(':', tileGetTexture(BIGCOLIN));
fontdata.Insert('\\', tileGetTexture(BIGALPHANUM + 68));
fontdata.Insert('/', tileGetTexture(BIGALPHANUM + 68));
fontdata.Insert('%', tileGetTexture(BIGALPHANUM + 69));
fontdata.Insert('`', tileGetTexture(BIGAPPOS));
fontdata.Insert('"', tileGetTexture(BIGAPPOS));
fontdata.Insert('\'', tileGetTexture(BIGAPPOS));
// The texture offsets in this font are useless for font printing. This should only apply to these glyphs, not for international extensions, though.
GlyphSet::Iterator it(fontdata);
GlyphSet::Pair* pair;
while (it.NextPair(pair)) pair->Value->SetOffsetsNotForFont();
new ::FFont("TileBigFont", nullptr, nullptr, 0, 0, 0, -1, 5, false, false, false, &fontdata);
fontdata.Clear();
}
SmallFont2 = V_GetFont("SmallFont2");
if (!SmallFont2)
{
// Tiny font
for (int i = 0; i < 95; i++)
{
auto tile = tileGetTexture(MINIFONT + i);
if (tile && tile->isValid() && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
{
if (i >= 'a' && i <= 'z' && tileEqualTo(i, i - 32)) continue;
fontdata.Insert('!' + i, tile);
tile->SetOffsetsNotForFont();
}
}
fontdata.Insert(1, TexMan.FindGameTexture("TINYBLAK")); // this is only here to widen the color range of the font to produce a better translation.
SmallFont2 = new ::FFont("SmallFont2", nullptr, nullptr, 0, 0, 0, -1, 3, false, false, false, &fontdata);
SmallFont2->SetKerning(1);
fontdata.Clear();
}
IndexFont = V_GetFont("IndexFont");
if (!IndexFont)
{
// SBAR index font
for (int i = 0; i < 10; i++) fontdata.Insert('0' + i, tileGetTexture(THREEBYFIVE0 + i));
fontdata.Insert(':', tileGetTexture(THREEBYFIVE0 + 10));
fontdata.Insert('/', tileGetTexture(THREEBYFIVE0 + 11));
fontdata.Insert('%', tileGetTexture(MINIFONT + '%' - '!'));
fontdata.Insert(1, TexMan.FindGameTexture("TINYBLAK")); // this is only here to widen the color range of the font to produce a better translation.
GlyphSet::Iterator iti(fontdata);
GlyphSet::Pair* pair;
while (iti.NextPair(pair)) pair->Value->SetOffsetsNotForFont();
IndexFont = new ::FFont("IndexFont", nullptr, nullptr, 0, 0, 0, -1, -1, false, false, false, &fontdata);
fontdata.Clear();
}
DigiFont = V_GetFont("DigiFont");
if (!DigiFont)
{
// digital font
for (int i = 0; i < 10; i++) fontdata.Insert('0' + i, tileGetTexture(DIGITALNUM + i));
fontdata.Insert(1, TexMan.FindGameTexture("TINYBLAK")); // this is only here to widen the color range of the font to produce a better translation.
GlyphSet::Iterator itd(fontdata);
GlyphSet::Pair* pair;
while (itd.NextPair(pair)) pair->Value->SetOffsetsNotForFont();
DigiFont = new ::FFont("DigiFont", nullptr, nullptr, 0, 0, 0, -1, -1, false, false, false, &fontdata);
}
// Todo: virtualize this;
BigFont = V_GetFont("BIGFONT");
SmallFont = V_GetFont("SMALLFONT");
}
END_DUKE_NS

View file

@ -1,149 +0,0 @@
//-------------------------------------------------------------------------
/*
Copyright (C) 1996, 2003 - 3D Realms Entertainment
Copyright (C) 2017-2019 Nuke.YKT
This file is part of Duke Nukem 3D version 1.5 - Atomic Edition
Duke Nukem 3D is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
Original Source: 1996 - Todd Replogle
Prepared for public release: 03/21/2003 - Charlie Wiederhold, 3D Realms
*/
//-------------------------------------------------------------------------
// this file collects all 2D content of the game that was scattered across multiple sources originally.
// All this should transition to a more modern, preferably localization friendly, approach later.
#include "ns.h"
#include "duke3d.h"
#include "names_r.h"
#include "animtexture.h"
#include "animlib.h"
#include "raze_music.h"
#include "mapinfo.h"
#include "screenjob.h"
#include "texturemanager.h"
#include "c_dispatch.h"
#include "gamestate.h"
#include "gamefuncs.h"
BEGIN_DUKE_NS
//==========================================================================
//
// Sets up the game fonts.
// This is a duplicate of the _d function but needed since the tile numbers differ.
//
//==========================================================================
void InitFonts_r()
{
GlyphSet fontdata;
if (!V_GetFont("TileSmallFont"))
{
// Small font
for (int i = 0; i < 95; i++)
{
auto tile = tileGetTexture(STARTALPHANUM + i);
if (tile && tile->isValid() && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
{
fontdata.Insert('!' + i, tile);
tile->SetOffsetsNotForFont();
}
}
auto SmallFont = new ::FFont("TileSmallFont", nullptr, nullptr, 0, 0, 0, -1, 10, false, false, false, &fontdata);
SmallFont->SetKerning(2);
fontdata.Clear();
}
// Big font
if (!V_GetFont("TileBigFont"))
{
// This font is VERY messy...
fontdata.Insert('_', tileGetTexture(BIGALPHANUM - 11));
fontdata.Insert('-', tileGetTexture(BIGALPHANUM - 11));
for (int i = 0; i < 10; i++) fontdata.Insert('0' + i, tileGetTexture(BIGALPHANUM - 10 + i));
for (int i = 0; i < 26; i++) fontdata.Insert('A' + i, tileGetTexture(BIGALPHANUM + i));
fontdata.Insert('.', tileGetTexture(BIGPERIOD));
fontdata.Insert(',', tileGetTexture(BIGCOMMA));
fontdata.Insert('!', tileGetTexture(BIGX));
fontdata.Insert('?', tileGetTexture(BIGQ));
fontdata.Insert(';', tileGetTexture(BIGSEMI));
fontdata.Insert(':', tileGetTexture(BIGCOLIN));
fontdata.Insert('\\', tileGetTexture(BIGALPHANUM + 68));
fontdata.Insert('/', tileGetTexture(BIGALPHANUM + 68));
fontdata.Insert('%', tileGetTexture(BIGALPHANUM + 69));
fontdata.Insert('`', tileGetTexture(BIGAPPOS));
fontdata.Insert('"', tileGetTexture(BIGAPPOS));
fontdata.Insert('\'', tileGetTexture(BIGAPPOS));
GlyphSet::Iterator it(fontdata);
GlyphSet::Pair* pair;
while (it.NextPair(pair)) pair->Value->SetOffsetsNotForFont();
auto BigFont = new ::FFont("TileBigFont", nullptr, nullptr, 0, 0, 0, -1, 10, false, false, false, &fontdata);
BigFont->SetKerning(6);
fontdata.Clear();
}
SmallFont2 = V_GetFont("SmallFont2");
if (!SmallFont2)
{
// Tiny font
for (int i = 0; i < 95; i++)
{
auto tile = tileGetTexture(MINIFONT + i);
if (tile && tile->isValid() && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
fontdata.Insert('!' + i, tile);
}
fontdata.Insert(1, TexMan.FindGameTexture("TINYBLAK")); // this is only here to widen the color range of the font to produce a better translation.
SmallFont2 = new ::FFont("SmallFont2", nullptr, nullptr, 0, 0, 0, -1, 6, false, false, false, &fontdata);
SmallFont2->SetKerning(2);
fontdata.Clear();
}
IndexFont = V_GetFont("IndexFont");
if (!IndexFont)
{
// SBAR index font
for (int i = 0; i < 10; i++) fontdata.Insert('0' + i, tileGetTexture(THREEBYFIVE + i));
fontdata.Insert(':', tileGetTexture(THREEBYFIVE + 10));
fontdata.Insert('/', tileGetTexture(THREEBYFIVE + 11));
fontdata.Insert('%', tileGetTexture(MINIFONT + '%' - '!'));
fontdata.Insert(1, TexMan.FindGameTexture("TINYBLAK")); // this is only here to widen the color range of the font to produce a better translation.
IndexFont = new ::FFont("IndexFont", nullptr, nullptr, 0, 0, 0, -1, -1, false, false, false, &fontdata);
fontdata.Clear();
}
DigiFont = V_GetFont("DigiFont");
if (!DigiFont)
{
// digital font
for (int i = 0; i < 10; i++) fontdata.Insert('0' + i, tileGetTexture(DIGITALNUM + i));
fontdata.Insert(1, TexMan.FindGameTexture("TINYBLAK")); // this is only here to widen the color range of the font to produce a better translation.
DigiFont = new ::FFont("DigiFont", nullptr, nullptr, 0, 0, 0, -1, -1, false, false, false, &fontdata);
}
BigFont = V_GetFont("BIGFONT");
SmallFont = V_GetFont("SMALLFONT");
}
END_DUKE_NS

View file

@ -38,6 +38,7 @@ source as it is released.
#include "prediction.h"
#include "names_d.h"
#include "dukeactor.h"
#include "gamefuncs.h"
EXTERN_CVAR(Bool, wt_commentary)

View file

@ -32,6 +32,7 @@ Prepared for public release: 03/21/2003 - Charlie Wiederhold, 3D Realms
#include "names_r.h"
#include "prediction.h"
#include "dukeactor.h"
#include "gamefuncs.h"
BEGIN_DUKE_NS

View file

@ -105,10 +105,6 @@ void think_r();
void animatesprites_d(spritetype* tsprite, int& spritesortcnt, int x, int y, int a, int smoothratio);
void animatesprites_r(spritetype* tsprite, int& spritesortcnt, int x, int y, int a, int smoothratio);
void InitFonts_d();
void InitFonts_r();
Dispatcher fi;
void SetDispatcher()
@ -116,8 +112,6 @@ void SetDispatcher()
if (!isRR())
{
fi = {
InitFonts_d,
think_d,
initactorflags_d,
isadoorwall_d,
@ -161,8 +155,6 @@ void SetDispatcher()
else
{
fi = {
InitFonts_r,
think_r,
initactorflags_r,
isadoorwall_r,

View file

@ -22,9 +22,6 @@
BEGIN_DUKE_NS
extern FFont* IndexFont;
extern FFont* DigiFont;
struct GameInterface : public ::GameInterface
{
const char* Name() override { return "Duke"; }
@ -74,9 +71,6 @@ struct GameInterface : public ::GameInterface
struct Dispatcher
{
// global stuff
void (*InitFonts)();
// sectors_?.cpp
void (*think)();
void (*initactorflags)();

View file

@ -325,7 +325,6 @@ void GameInterface::app_init()
screenpeek = myconnectindex;
LoadDefinitions();
fi.InitFonts();
SetTileNames();
TileFiles.SetBackup();
C_InitConback(TexMan.CheckForTexture("MENUSCREEN", ETextureType::Any), false, 0.75);

View file

@ -47,9 +47,6 @@ Modifications for JonoF's port by Jonathon Fowler (jf@jonof.id.au)
BEGIN_DUKE_NS
FFont* IndexFont;
FFont* DigiFont;
//---------------------------------------------------------------------------
//
// debug output

View file

@ -48,77 +48,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
BEGIN_PS_NS
//---------------------------------------------------------------------------
//
//
//
//---------------------------------------------------------------------------
void InitFonts()
{
GlyphSet fontdata;
if (!V_GetFont("TileSmallFont"))
{
for (int i = 0; i < 26; i++)
{
fontdata.Insert('A' + i, tileGetTexture(3522 + i));
}
for (int i = 0; i < 10; i++)
{
fontdata.Insert('0' + i, tileGetTexture(3555 + i));
}
fontdata.Insert('.', tileGetTexture(3548));
fontdata.Insert('!', tileGetTexture(3549));
fontdata.Insert('?', tileGetTexture(3550));
fontdata.Insert(',', tileGetTexture(3551));
fontdata.Insert('`', tileGetTexture(3552));
fontdata.Insert('"', tileGetTexture(3553));
fontdata.Insert('-', tileGetTexture(3554));
fontdata.Insert('_', tileGetTexture(3554));
fontdata.Insert(127, TexMan.FindGameTexture("TINYBLAK")); // this is only here to widen the color range of the font to produce a better translation.
GlyphSet::Iterator it(fontdata);
GlyphSet::Pair* pair;
while (it.NextPair(pair)) pair->Value->SetOffsetsNotForFont();
auto SmallFont = new ::FFont("TileSmallFont", nullptr, nullptr, 0, 0, 0, -1, 4, false, false, false, &fontdata);
SmallFont->SetKerning(1);
SmallFont->SetHeight(11); // FFont calculates a bad value for this.
fontdata.Clear();
}
SmallFont2 = V_GetFont("SmallFont2");
if (!SmallFont2)
{
for (int i = 0; i < 26; i++)
{
fontdata.Insert('A' + i, tileGetTexture(3624 + i));
}
for (int i = 0; i < 10; i++)
{
fontdata.Insert('0' + i, tileGetTexture(3657 + i));
}
fontdata.Insert('!', tileGetTexture(3651));
fontdata.Insert('"', tileGetTexture(3655));
fontdata.Insert('\'', tileGetTexture(3654));
fontdata.Insert('`', tileGetTexture(3654));
fontdata.Insert('.', tileGetTexture(3650));
fontdata.Insert(',', tileGetTexture(3653));
fontdata.Insert('-', tileGetTexture(3656));
fontdata.Insert('?', tileGetTexture(3652));
fontdata.Insert(127, TexMan.FindGameTexture("TINYBLAK")); // this is only here to widen the color range of the font to produce a better translation.
GlyphSet::Iterator it2(fontdata);
GlyphSet::Pair* pair;
while (it2.NextPair(pair)) pair->Value->SetOffsetsNotForFont();
SmallFont2 = new ::FFont("SmallFont2", nullptr, nullptr, 0, 0, 0, -1, 4, false, false, false, &fontdata);
SmallFont2->SetKerning(1);
}
BigFont = V_GetFont("BIGFONT");
SmallFont = V_GetFont("SMALLFONT");
}
//---------------------------------------------------------------------------
//
//

View file

@ -57,7 +57,6 @@ static MapRecord* NextMap;
void uploadCinemaPalettes();
int32_t registerosdcommands(void);
void InitFonts();
void InitCheats();
int EndLevel = 0;
@ -497,7 +496,6 @@ void GameInterface::app_init()
// temp - moving InstallEngine(); before FadeOut as we use nextpage() in FadeOut
InstallEngine();
LoadDefinitions();
InitFonts();
SetTileNames();
TileFiles.SetBackup();

View file

@ -229,7 +229,6 @@ void GameInterface::app_init()
LoadCustomInfoFromScript("swcustom.txt"); // Load user customisation information
LoadDefinitions();
InitFonts();
SetTileNames();
TileFiles.SetBackup();
userConfig.AddDefs.reset();

View file

@ -2207,7 +2207,6 @@ extern short LastSaveNum;
void LoadSaveMsg(const char *msg);
void UpdateStatusBar();
void InitFonts();
int32_t registerosdcommands(void);
void SW_InitMultiPsky(void);

View file

@ -39,89 +39,9 @@ Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms
BEGIN_SW_NS
//==========================================================================
//
// Sets up the game fonts.
//
//==========================================================================
void InitFonts()
{
GlyphSet fontdata;
if (!V_GetFont("TileSmallFont"))
{
// Small font
for (int i = 0; i < 95; i++)
{
auto tile = tileGetTexture(STARTALPHANUM + i);
if (tile && tile->isValid() && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
{
fontdata.Insert('!' + i, tile);
tile->SetOffsetsNotForFont();
}
}
new ::FFont("TileSmallFont", nullptr, nullptr, 0, 0, 0, -1, 4, false, false, false, &fontdata);
fontdata.Clear();
}
SmallFont2 = V_GetFont("SmallFont2");
if (!SmallFont2)
{
// Tiny font
for (int i = 0; i < 95; i++)
{
auto tile = tileGetTexture(2930 + i);
if (tile && tile->isValid() && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
{
fontdata.Insert('!' + i, tile);
tile->SetOffsetsNotForFont();
}
}
SmallFont2 = new ::FFont("SmallFont2", nullptr, nullptr, 0, 0, 0, -1, 4, false, false, false, &fontdata);
fontdata.Clear();
}
if (!V_GetFont("TileBigFont"))
{
const int FONT_LARGE_ALPHA = 3706;
const int FONT_LARGE_DIGIT = 3732;
// Big
for (int i = 0; i < 10; i++)
{
auto tile = tileGetTexture(FONT_LARGE_DIGIT + i);
if (tile && tile->isValid() && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
{
fontdata.Insert('0' + i, tile);
tile->SetOffsetsNotForFont();
}
}
for (int i = 0; i < 26; i++)
{
auto tile = tileGetTexture(FONT_LARGE_ALPHA + i);
if (tile && tile->isValid() && tile->GetTexelWidth() > 0 && tile->GetTexelHeight() > 0)
{
fontdata.Insert('A' + i, tile);
tile->SetOffsetsNotForFont();
}
}
auto BigFont = new ::FFont("TileBigFont", nullptr, nullptr, 0, 0, 0, -1, 10, false, false, false, &fontdata);
BigFont->SetKerning(1);
}
BigFont = V_GetFont("BIGFONT");
SmallFont = V_GetFont("SMALLFONT");
}
//---------------------------------------------------------------------------
//
// Notification messages. Native SW-style display should later be
// provided by the backend.
// Notification messages.
//
//---------------------------------------------------------------------------

View file

@ -0,0 +1,384 @@
tilesmallfont
{
ignoreoffsets
spacewidth 4
! #04097
"\"" #04098
# #04099
$ #04100
% #04101
& #04102
' #04103
( #04104
) #04105
* #04106
+ #04107
, #04108
- #04109
. #04110
/ #04111
0 #04112
1 #04113
2 #04114
3 #04115
4 #04116
5 #04117
6 #04118
7 #04119
8 #04120
9 #04121
: #04122
; #04123
< #04124
= #04125
> #04126
? #04127
@ #04128
A #04129
B #04130
C #04131
D #04132
E #04133
F #04134
G #04135
H #04136
I #04137
J #04138
K #04139
L #04140
M #04141
N #04142
O #04143
P #04144
Q #04145
R #04146
S #04147
T #04148
U #04149
V #04150
W #04151
X #04152
Y #04153
Z #04154
[ #04155
\\ #04156
] #04157
^ #04158
_ #04159
a #04161
b #04162
c #04163
d #04164
e #04165
f #04166
g #04167
h #04168
i #04169
j #04170
k #04171
l #04172
m #04173
n #04174
o #04175
p #04176
q #04177
r #04178
s #04179
t #04180
u #04181
v #04182
w #04183
x #04184
y #04185
z #04186
"-{" #04187
| #04188
"-}" #04189
~ #04190
}
tilebigfont
{
ignoreoffsets
kerning 1
spacewidth 5
! #04193
"\"" #04194
# #04195
$ #04196
% #04197
& #04198
' #04199
( #04200
) #04201
* #04202
+ #04203
, #04204
- #04205
. #04206
/ #04207
0 #04208
1 #04209
2 #04210
3 #04211
4 #04212
5 #04213
6 #04214
7 #04215
8 #04216
9 #04217
: #04218
; #04219
< #04220
= #04221
> #04222
? #04223
A #04225
B #04226
C #04227
D #04228
E #04229
F #04230
G #04231
H #04232
I #04233
J #04234
K #04235
L #04236
M #04237
N #04238
O #04239
P #04240
Q #04241
R #04242
S #04243
T #04244
U #04245
V #04246
W #04247
X #04248
Y #04249
Z #04250
[ #04251
\\ #04252
] #04253
^ #04254
_ #04255
a #04257
b #04258
c #04259
d #04260
e #04261
f #04262
g #04263
h #04264
i #04265
j #04266
k #04267
l #04268
m #04269
n #04270
o #04271
p #04272
q #04273
r #04274
s #04275
t #04276
u #04277
v #04278
w #04279
x #04280
y #04281
z #04282
}
smallfont2
{
ignoreoffsets
kerning 1
minluminosity 0
spacewidth 4
! #04385
"\"" #04386
# #04387
$ #04388
% #04389
& #04390
' #04391
( #04392
) #04393
* #04394
+ #04395
, #04396
- #04397
. #04398
/ #04399
0 #04400
1 #04401
2 #04402
3 #04403
4 #04404
5 #04405
6 #04406
7 #04407
8 #04408
9 #04409
: #04410
; #04411
< #04412
= #04413
> #04414
? #04415
A #04417
B #04418
C #04419
D #04420
E #04421
F #04422
G #04423
H #04424
I #04425
J #04426
K #04427
L #04428
M #04429
N #04430
O #04431
P #04432
Q #04433
R #04434
S #04435
T #04436
U #04437
V #04438
W #04439
X #04440
Y #04441
Z #04442
[ #04443
\\ #04444
] #04445
_ #04447
a #04449
b #04450
c #04451
d #04452
e #04453
f #04454
g #04455
h #04456
i #04457
j #04458
k #04459
l #04460
m #04461
n #04462
o #04463
p #04464
q #04465
r #04466
s #04467
t #04468
u #04469
v #04470
w #04471
x #04472
y #04473
z #04474
}
digifont
{
ignoreoffsets
spacewidth 4
! #04481
"\"" #04482
$ #04484
% #04485
' #04487
( #04488
) #04489
+ #04491
, #04492
- #04493
. #04494
/ #04495
0 #04496
1 #04497
2 #04498
3 #04499
4 #04500
5 #04501
6 #04502
7 #04503
8 #04504
9 #04505
: #04506
; #04507
< #04508
= #04509
> #04510
A #04513
B #04514
C #04515
D #04516
E #04517
F #04518
G #04519
H #04520
I #04521
J #04522
K #04523
L #04524
M #04525
N #04526
O #04527
P #04528
Q #04529
R #04530
S #04531
T #04532
U #04533
V #04534
W #04535
X #04536
Y #04537
Z #04538
[ #04539
\\ #04540
] #04541
a #04545
b #04546
c #04547
d #04548
e #04549
f #04550
g #04551
h #04552
i #04553
j #04554
k #04555
l #04556
m #04557
n #04558
o #04559
p #04560
q #04561
r #04562
s #04563
t #04564
u #04565
v #04566
w #04567
x #04568
y #04569
z #04570
"-{" #04571
| #04572
"-}" #04573
}

View file

@ -0,0 +1,295 @@
tilesmallfont
{
ignoreoffsets
spacewidth 5
! #02822
"\"" #02823
# #02824
$ #02825
% #02826
& #02827
' #02828
( #02829
) #02830
* #02831
+ #02832
, #02833
- #02834
. #02835
/ #02836
0 #02837
1 #02838
2 #02839
3 #02840
4 #02841
5 #02842
6 #02843
7 #02844
8 #02845
9 #02846
: #02847
; #02848
< #02849
= #02850
> #02851
? #02852
@ #02853
A #02854
B #02855
C #02856
D #02857
E #02858
F #02859
G #02860
H #02861
I #02862
J #02863
K #02864
L #02865
M #02866
N #02867
O #02868
P #02869
Q #02870
R #02871
S #02872
T #02873
U #02874
V #02875
W #02876
X #02877
Y #02878
Z #02879
[ #02880
\\ #02881
] #02882
^ #02883
_ #02884
` #02885
a #02886
b #02887
c #02888
d #02889
e #02890
f #02891
g #02892
h #02893
i #02894
j #02895
k #02896
l #02897
m #02898
n #02899
o #02900
p #02901
q #02902
r #02903
s #02904
t #02905
u #02906
v #02907
w #02908
x #02909
y #02910
z #02911
"-{" #02912
| #02913
"-}" #02914
~ #02915
}
tilebigfont
{
ignoreoffsets
spacewidth 5
! #03004
"\"" #03022
% #03009
' #03022
, #03003
- #02929
. #03002
/ #03008
0 #02930
1 #02931
2 #02932
3 #02933
4 #02934
5 #02935
6 #02936
7 #02937
8 #02938
9 #02939
: #03007
; #03006
? #03005
A #02940
B #02941
C #02942
D #02943
E #02944
F #02945
G #02946
H #02947
I #02948
J #02949
K #02950
L #02951
M #02952
N #02953
O #02954
P #02955
Q #02956
R #02957
S #02958
T #02959
U #02960
V #02961
W #02962
X #02963
Y #02964
Z #02965
\\ #03008
_ #02929
` #03022
}
smallfont2
{
ignoreoffsets
kerning 1
minluminosity 0
spacewidth 3
! #03072
"\"" #03073
# #03074
$ #03075
% #03076
& #03077
' #03078
( #03079
) #03080
* #03081
+ #03082
, #03083
- #03084
. #03085
/ #03086
0 #03087
1 #03088
2 #03089
3 #03090
4 #03091
5 #03092
6 #03093
7 #03094
8 #03095
9 #03096
: #03097
; #03098
< #03099
= #03100
> #03101
? #03102
@ #03103
A #03104
B #03105
C #03106
D #03107
E #03108
F #03109
G #03110
H #03111
I #03112
J #03113
K #03114
L #03115
M #03116
N #03117
O #03118
P #03119
Q #03120
R #03121
S #03122
T #03123
U #03124
V #03125
W #03126
X #03127
Y #03128
Z #03129
[ #03130
\\ #03131
] #03132
^ #03133
_ #03134
` #03135
a #03104
b #03105
c #03106
d #03107
e #03108
f #03109
g #03110
h #03111
i #03112
j #03113
k #03114
l #03115
m #03116
n #03117
o #03118
p #03119
q #03120
r #03121
s #03122
t #03123
u #03124
v #03125
w #03126
x #03127
y #03128
z #03129
"-{" #03162
| #03163
"-}" #03164
~ #03165
}
digifont
{
ignoreoffsets
minluminosity 0
0 #02472
1 #02473
2 #02474
3 #02475
4 #02476
5 #02477
6 #02478
7 #02479
8 #02480
9 #02481
}
indexfont
{
ignoreoffsets
minluminosity 0
% #03076
/ #03021
0 #03010
1 #03011
2 #03012
3 #03013
4 #03014
5 #03015
6 #03016
7 #03017
8 #03018
9 #03019
: #03020
}

View file

@ -0,0 +1,101 @@
tilesmallfont
{
ignoreoffsets
kerning 1
minluminosity 0
spacewidth 4
! #03549
"\"" #03553
, #03551
- #03554
. #03548
0 #03555
1 #03556
2 #03557
3 #03558
4 #03559
5 #03560
6 #03561
7 #03562
8 #03563
9 #03564
? #03550
A #03522
B #03523
C #03524
D #03525
E #03526
F #03527
G #03528
H #03529
I #03530
J #03531
K #03532
L #03533
M #03534
N #03535
O #03536
P #03537
Q #03538
R #03539
S #03540
T #03541
U #03542
V #03543
W #03544
X #03545
Y #03546
Z #03547
_ #03554
` #03552
}
smallfont2
{
ignoreoffsets
kerning 1
minluminosity 0
spacewidth 4
! #03651
, #03653
. #03650
0 #03657
1 #03658
2 #03659
3 #03660
4 #03661
5 #03662
6 #03663
7 #03664
8 #03665
9 #03666
? #03652
A #03624
B #03625
C #03626
D #03627
E #03628
F #03629
G #03630
H #03631
I #03632
J #03633
K #03634
L #03635
M #03636
N #03637
O #03638
P #03639
Q #03640
R #03641
S #03642
T #03643
U #03644
V #03645
W #03646
X #03647
Y #03648
Z #03649
}

View file

@ -0,0 +1,293 @@
tilesmallfont
{
ignoreoffsets
spacewidth 5
! #02822
"\"" #02823
# #02824
$ #02825
% #02826
& #02827
' #02828
( #02829
) #02830
* #02831
+ #02832
, #02833
- #02834
. #02835
/ #02836
0 #02837
1 #02838
2 #02839
3 #02840
4 #02841
5 #02842
6 #02843
7 #02844
8 #02845
9 #02846
: #02847
; #02848
< #02849
= #02850
> #02851
? #02852
@ #02853
A #02854
B #02855
C #02856
D #02857
E #02858
F #02859
G #02860
H #02861
I #02862
J #02863
K #02864
L #02865
M #02866
N #02867
O #02868
P #02869
Q #02870
R #02871
S #02872
T #02873
U #02874
V #02875
W #02876
X #02877
Y #02878
Z #02879
[ #02880
\\ #02881
] #02882
^ #02883
_ #02884
` #02885
a #02886
b #02887
c #02888
d #02889
e #02890
f #02891
g #02892
h #02893
i #02894
j #02895
k #02896
l #02897
m #02898
n #02899
o #02900
p #02901
q #02902
r #02903
s #02904
t #02905
u #02906
v #02907
w #02908
x #02909
y #02910
z #02911
"-{" #02912
| #02913
"-}" #02914
~ #02915
}
tilebigfont
{
ignoreoffsets
spacewidth 5
! #03004
"\"" #03022
% #03009
' #03022
, #03003
. #03002
/ #03008
0 #02930
1 #02931
2 #02932
3 #02933
4 #02934
5 #02935
6 #02936
7 #02937
8 #02938
9 #02939
: #03007
; #03006
? #03005
A #02940
B #02941
C #02942
D #02943
E #02944
F #02945
G #02946
H #02947
I #02948
J #02949
K #02950
L #02951
M #02952
N #02953
O #02954
P #02955
Q #02956
R #02957
S #02958
T #02959
U #02960
V #02961
W #02962
X #02963
Y #02964
Z #02965
\\ #03008
` #03022
}
smallfont2
{
ignoreoffsets
kerning 1
minluminosity 0
spacewidth 3
! #03072
"\"" #03073
# #03074
$ #03075
% #03076
& #03077
' #03078
( #03079
) #03080
* #03081
+ #03082
, #03083
- #03084
. #03085
/ #03086
0 #03087
1 #03088
2 #03089
3 #03090
4 #03091
5 #03092
6 #03093
7 #03094
8 #03095
9 #03096
: #03097
; #03098
< #03099
= #03100
> #03101
? #03102
@ #03103
A #03104
B #03105
C #03106
D #03107
E #03108
F #03109
G #03110
H #03111
I #03112
J #03113
K #03114
L #03115
M #03116
N #03117
O #03118
P #03119
Q #03120
R #03121
S #03122
T #03123
U #03124
V #03125
W #03126
X #03127
Y #03128
Z #03129
[ #03130
\\ #03131
] #03132
^ #03133
_ #03134
` #03135
a #03104
b #03105
c #03106
d #03107
e #03108
f #03109
g #03110
h #03111
i #03112
j #03113
k #03114
l #03115
m #03116
n #03117
o #03118
p #03119
q #03120
r #03121
s #03122
t #03123
u #03124
v #03125
w #03126
x #03127
y #03128
z #03129
"-{" #03162
| #03163
"-}" #03164
~ #03165
}
digifont
{
ignoreoffsets
minluminosity 0
0 #02472
1 #02473
2 #02474
3 #02475
4 #02476
5 #02477
6 #02478
7 #02479
8 #02480
9 #02481
}
indexfont
{
ignoreoffsets
minluminosity 0
% #03076
/ #03021
0 #03010
1 #03011
2 #03012
3 #03013
4 #03014
5 #03015
6 #03016
7 #03017
8 #03018
9 #03019
: #03020
}

View file

@ -0,0 +1,271 @@
tilesmallfont
{
ignoreoffsets
kerning 2
spacewidth 10
! #00514
"\"" #00515
# #00516
$ #00517
% #00518
& #00519
' #00520
( #00521
) #00522
* #00523
+ #00524
, #00525
- #00526
. #00527
/ #00528
0 #00529
1 #00530
2 #00531
3 #00532
4 #00533
5 #00534
6 #00535
7 #00536
8 #00537
9 #00538
: #00539
; #00540
< #00541
= #00542
> #00543
? #00544
@ #00545
A #00546
B #00547
C #00548
D #00549
E #00550
F #00551
G #00552
H #00553
I #00554
J #00555
K #00556
L #00557
M #00558
N #00559
O #00560
P #00561
Q #00562
R #00563
S #00564
T #00565
U #00566
V #00567
W #00568
X #00569
Y #00570
Z #00571
[ #00572
\\ #00573
] #00574
^ #00575
_ #00576
` #00577
a #00578
b #00579
c #00580
d #00581
e #00582
f #00583
g #00584
h #00585
i #00586
j #00587
k #00588
l #00589
m #00590
n #00591
o #00592
p #00593
q #00594
r #00595
s #00596
t #00597
u #00598
v #00599
w #00600
x #00601
y #00602
z #00603
"-{" #00604
| #00605
"-}" #00606
~ #00607
}
tilebigfont
{
ignoreoffsets
kerning 6
spacewidth 10
! #00696
"\"" #00714
% #00701
' #00714
, #00695
- #00621
. #00694
/ #00700
0 #00622
1 #00623
2 #00624
3 #00625
4 #00626
5 #00627
6 #00628
7 #00629
8 #00630
9 #00631
: #00699
; #00698
? #00697
A #00632
B #00633
C #00634
D #00635
E #00636
F #00637
G #00638
H #00639
I #00640
J #00641
K #00642
L #00643
M #00644
N #00645
O #00646
P #00647
Q #00648
R #00649
S #00650
T #00651
U #00652
V #00653
W #00654
X #00655
Y #00656
Z #00657
\\ #00700
_ #00621
` #00714
}
smallfont2
{
ignoreoffsets
kerning 1
minluminosity 0
spacewidth 6
! #00718
"\"" #00719
# #00720
$ #00721
% #00722
& #00723
' #00724
( #00725
) #00726
* #00727
+ #00728
, #00729
- #00730
. #00731
/ #00732
0 #00733
1 #00734
2 #00735
3 #00736
4 #00737
5 #00738
6 #00739
7 #00740
8 #00741
9 #00742
: #00743
; #00744
< #00745
= #00746
> #00747
? #00748
@ #00749
A #00750
B #00751
C #00752
D #00753
E #00754
F #00755
G #00756
H #00757
I #00758
J #00759
K #00760
L #00761
M #00762
N #00763
O #00764
P #00765
Q #00766
R #00767
S #00768
T #00769
U #00770
V #00771
W #00772
X #00773
Y #00774
Z #00775
[ #00776
\\ #00777
] #00778
^ #00779
_ #00780
` #00781
"-{" #00808
| #00809
}
digifont
{
ignoreoffsets
minluminosity 0
0 #01657
1 #01658
2 #01659
3 #01660
4 #01661
5 #01662
6 #01663
7 #01664
8 #01665
9 #01666
}
indexfont
{
ignoreoffsets
minluminosity 0
% #00722
/ #00713
0 #00702
1 #00703
2 #00704
3 #00705
4 #00706
5 #00707
6 #00708
7 #00709
8 #00710
9 #00711
: #00712
}

View file

@ -0,0 +1,246 @@
tilesmallfont
{
ignoreoffsets
spacewidth 4
! #04608
"\"" #04609
# #04610
$ #04611
% #04612
& #04613
' #04614
( #04615
) #04616
* #04617
+ #04618
, #04619
- #04620
. #04621
/ #04622
0 #04623
1 #04624
2 #04625
3 #04626
4 #04627
5 #04628
6 #04629
7 #04630
8 #04631
9 #04632
: #04633
; #04634
< #04635
= #04636
> #04637
? #04638
@ #04639
A #04640
B #04641
C #04642
D #04643
E #04644
F #04645
G #04646
H #04647
I #04648
J #04649
K #04650
L #04651
M #04652
N #04653
O #04654
P #04655
Q #04656
R #04657
S #04658
T #04659
U #04660
V #04661
W #04662
X #04663
Y #04664
Z #04665
[ #04666
\\ #04667
] #04668
^ #04669
_ #04670
` #04671
a #04672
b #04673
c #04674
d #04675
e #04676
f #04677
g #04678
h #04679
i #04680
j #04681
k #04682
l #04683
m #04684
n #04685
o #04686
p #04687
q #04688
r #04689
s #04690
t #04691
u #04692
v #04693
w #04694
x #04695
y #04696
z #04697
"-{" #04698
| #04699
"-}" #04700
~ #04701
}
tilebigfont
{
ignoreoffsets
kerning 1
spacewidth 10
0 #03732
1 #03733
2 #03734
3 #03735
4 #03736
5 #03737
6 #03738
7 #03739
8 #03740
9 #03741
A #03706
B #03707
C #03708
D #03709
E #03710
F #03711
G #03712
H #03713
I #03714
J #03715
K #03716
L #03717
M #03718
N #03719
O #03720
P #03721
Q #03722
R #03723
S #03724
T #03725
U #03726
V #03727
W #03728
X #03729
Y #03730
Z #03731
}
smallfont2
{
ignoreoffsets
spacewidth 4
minluminosity 0
! #02930
"\"" #02931
# #02932
$ #02933
% #02934
& #02935
' #02936
( #02937
) #02938
* #02939
+ #02940
, #02941
- #02942
. #02943
/ #02944
0 #02945
1 #02946
2 #02947
3 #02948
4 #02949
5 #02950
6 #02951
7 #02952
8 #02953
9 #02954
: #02955
; #02956
< #02957
= #02958
> #02959
? #02960
@ #02961
A #02962
B #02963
C #02964
D #02965
E #02966
F #02967
G #02968
H #02969
I #02970
J #02971
K #02972
L #02973
M #02974
N #02975
O #02976
P #02977
Q #02978
R #02979
S #02980
T #02981
U #02982
V #02983
W #02984
X #02985
Y #02986
Z #02987
[ #02988
\\ #02989
] #02990
^ #02991
_ #02992
` #02993
a #02994
b #02995
c #02996
d #02997
e #02998
f #02999
g #03000
h #03001
i #03002
j #03003
k #03004
l #03005
m #03006
n #03007
o #03008
p #03009
q #03010
r #03011
s #03012
t #03013
u #03014
v #03015
w #03016
x #03017
y #03018
z #03019
"-{" #03020
| #03021
"-}" #03022
~ #03023
}

View file

@ -0,0 +1,293 @@
tilesmallfont
{
ignoreoffsets
spacewidth 5
! #02822
"\"" #02823
# #02824
$ #02825
% #02826
& #02827
' #02828
( #02829
) #02830
* #02831
+ #02832
, #02833
- #02834
. #02835
/ #02836
0 #02837
1 #02838
2 #02839
3 #02840
4 #02841
5 #02842
6 #02843
7 #02844
8 #02845
9 #02846
: #02847
; #02848
< #02849
= #02850
> #02851
? #02852
@ #02853
A #02854
B #02855
C #02856
D #02857
E #02858
F #02859
G #02860
H #02861
I #02862
J #02863
K #02864
L #02865
M #02866
N #02867
O #02868
P #02869
Q #02870
R #02871
S #02872
T #02873
U #02874
V #02875
W #02876
X #02877
Y #02878
Z #02879
[ #02880
\\ #02881
] #02882
^ #02883
_ #02884
` #02885
a #02886
b #02887
c #02888
d #02889
e #02890
f #02891
g #02892
h #02893
i #02894
j #02895
k #02896
l #02897
m #02898
n #02899
o #02900
p #02901
q #02902
r #02903
s #02904
t #02905
u #02906
v #02907
w #02908
x #02909
y #02910
z #02911
"-{" #02912
| #02913
"-}" #02914
~ #02915
}
tilebigfont
{
ignoreoffsets
spacewidth 5
! #03004
"\"" #03022
% #03009
' #03022
, #03003
. #03002
/ #03008
0 #02930
1 #02931
2 #02932
3 #02933
4 #02934
5 #02935
6 #02936
7 #02937
8 #02938
9 #02939
: #03007
; #03006
? #03005
A #02940
B #02941
C #02942
D #02943
E #02944
F #02945
G #02946
H #02947
I #02948
J #02949
K #02950
L #02951
M #02952
N #02953
O #02954
P #02955
Q #02956
R #02957
S #02958
T #02959
U #02960
V #02961
W #02962
X #02963
Y #02964
Z #02965
\\ #03008
` #03022
}
smallfont2
{
ignoreoffsets
kerning 1
minluminosity 0
spacewidth 3
! #03072
"\"" #03073
# #03074
$ #03075
% #03076
& #03077
' #03078
( #03079
) #03080
* #03081
+ #03082
, #03083
- #03084
. #03085
/ #03086
0 #03087
1 #03088
2 #03089
3 #03090
4 #03091
5 #03092
6 #03093
7 #03094
8 #03095
9 #03096
: #03097
; #03098
< #03099
= #03100
> #03101
? #03102
@ #03103
A #03104
B #03105
C #03106
D #03107
E #03108
F #03109
G #03110
H #03111
I #03112
J #03113
K #03114
L #03115
M #03116
N #03117
O #03118
P #03119
Q #03120
R #03121
S #03122
T #03123
U #03124
V #03125
W #03126
X #03127
Y #03128
Z #03129
[ #03130
\\ #03131
] #03132
^ #03133
_ #03134
` #03135
a #03104
b #03105
c #03106
d #03107
e #03108
f #03109
g #03110
h #03111
i #03112
j #03113
k #03114
l #03115
m #03116
n #03117
o #03118
p #03119
q #03120
r #03121
s #03122
t #03123
u #03124
v #03125
w #03126
x #03127
y #03128
z #03129
"-{" #03162
| #03163
"-}" #03164
~ #03165
}
digifont
{
ignoreoffsets
minluminosity 0
0 #02472
1 #02473
2 #02474
3 #02475
4 #02476
5 #02477
6 #02478
7 #02479
8 #02480
9 #02481
}
indexfont
{
ignoreoffsets
minluminosity 0
% #03076
/ #03021
0 #03010
1 #03011
2 #03012
3 #03013
4 #03014
5 #03015
6 #03016
7 #03017
8 #03018
9 #03019
: #03020
}