diff --git a/src/d_main.cpp b/src/d_main.cpp index d26ae1d0c..f73049397 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -2581,7 +2581,8 @@ void D_DoomMain (void) }; for (p = 0; p < 5; ++p) { - const char *str = GStrings[startupString[p]]; + // At this point we cannot use the player's gender info yet so force 'male' here. + const char *str = GStrings.GetString(startupString[p], nullptr, 0); if (str != NULL && str[0] != '\0') { Printf("%s\n", str); diff --git a/src/events.cpp b/src/events.cpp index 293ca48d0..5b39d7f54 100755 --- a/src/events.cpp +++ b/src/events.cpp @@ -278,7 +278,7 @@ void EventManager::WorldLoaded() { for (DStaticEventHandler* handler = FirstEventHandler; handler; handler = handler->next) { - if (savegamerestore) continue; // don't execute WorldLoaded for handlers loaded from the savegame. + if (!handler->IsStatic() && savegamerestore) continue; // don't execute WorldLoaded for handlers loaded from the savegame. handler->WorldLoaded(); } } diff --git a/src/g_cvars.cpp b/src/g_cvars.cpp index a9e2ec311..7aac035d0 100644 --- a/src/g_cvars.cpp +++ b/src/g_cvars.cpp @@ -94,6 +94,7 @@ CUSTOM_CVAR (Int, cl_maxdecals, 1024, CVAR_ARCHIVE|CVAR_NOINITCALL) if (thinker != NULL) { thinker->Destroy(); + Level->ImpactDecalCount--; } } } diff --git a/src/g_level.cpp b/src/g_level.cpp index 1181d4559..02eaa56e9 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1530,7 +1530,7 @@ FLevelLocals::FLevelLocals() : Behaviors(this), tagManager(this) { Players[i] = &players[i]; } - localEventManager = new EventManager; + localEventManager = new EventManager(this); } FLevelLocals::~FLevelLocals() diff --git a/src/g_shared/a_dynlight.cpp b/src/g_shared/a_dynlight.cpp index d1b91af9d..edc2e4dfd 100644 --- a/src/g_shared/a_dynlight.cpp +++ b/src/g_shared/a_dynlight.cpp @@ -539,7 +539,7 @@ void FDynamicLight::CollectWithinRadius(const DVector3 &opos, FSection *section, bool hitonesidedback = false; for (unsigned i = 0; i < collected_ss.Size(); i++) { - auto &pos = collected_ss[i].pos; + auto pos = collected_ss[i].pos; section = collected_ss[i].sect; touching_sector = AddLightNode(§ion->lighthead, section, this, touching_sector); diff --git a/src/gamedata/d_dehacked.cpp b/src/gamedata/d_dehacked.cpp index 4643cd492..c7105117d 100644 --- a/src/gamedata/d_dehacked.cpp +++ b/src/gamedata/d_dehacked.cpp @@ -2164,13 +2164,14 @@ static int PatchMusic (int dummy) while ((result = GetLine()) == 1) { - const char *newname = skipwhite (Line2); + FString newname = skipwhite (Line2); FString keystring; keystring << "MUSIC_" << Line1; - DehStrings.Insert(keystring, newname); - DPrintf (DMSG_SPAMMY, "Music %s set to:\n%s\n", keystring.GetChars(), newname); + TableElement te = { newname, newname, newname, newname }; + DehStrings.Insert(keystring, te); + DPrintf (DMSG_SPAMMY, "Music %s set to:\n%s\n", keystring.GetChars(), newname.GetChars()); } return result; @@ -2283,7 +2284,9 @@ static int PatchText (int oldSize) str = EnglishStrings.MatchString(oldStr); if (str != NULL) { - DehStrings.Insert(str, newStr); + FString newname = newStr; + TableElement te = { newname, newname, newname, newname }; + DehStrings.Insert(str, te); EnglishStrings.Remove(str); // remove entry so that it won't get found again by the next iteration or by another replacement later good = true; } @@ -2337,7 +2340,8 @@ static int PatchStrings (int dummy) // Account for a discrepancy between Boom's and ZDoom's name for the red skull key pickup message const char *ll = Line1; if (!stricmp(ll, "GOTREDSKULL")) ll = "GOTREDSKUL"; - DehStrings.Insert(ll, holdstring); + TableElement te = { holdstring, holdstring, holdstring, holdstring }; + DehStrings.Insert(ll, te); DPrintf (DMSG_SPAMMY, "%s set to:\n%s\n", Line1, holdstring.GetChars()); } diff --git a/src/gamedata/fonts/font.cpp b/src/gamedata/fonts/font.cpp index 5d67b3bce..92ebb03ed 100644 --- a/src/gamedata/fonts/font.cpp +++ b/src/gamedata/fonts/font.cpp @@ -185,6 +185,7 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla if (FixedWidth > 0) { ReadSheetFont(folderdata, FixedWidth, FontHeight, Scale); + Type = Folder; } else { @@ -211,6 +212,7 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla } if (lump.isValid()) { + Type = Multilump; if (position < minchar) minchar = position; if (position > maxchar) maxchar = position; charMap.Insert(position, TexMan.GetTexture(lump)); @@ -235,6 +237,7 @@ FFont::FFont (const char *name, const char *nametemplate, const char *filetempla auto tex = TexMan.GetTexture(lump); tex->SetScale(Scale); charMap.Insert((int)position, tex); + Type = Folder; } } } diff --git a/src/gamedata/fonts/singlelumpfont.cpp b/src/gamedata/fonts/singlelumpfont.cpp index 63cd6ea5a..02e8564b1 100644 --- a/src/gamedata/fonts/singlelumpfont.cpp +++ b/src/gamedata/fonts/singlelumpfont.cpp @@ -131,6 +131,7 @@ FSingleLumpFont::FSingleLumpFont (const char *name, int lump) : FFont(lump) if (data[0] == 0xE1 && data[1] == 0xE6 && data[2] == 0xD5 && data[3] == 0x1A) { LoadBMF(lump, data); + Type = BMF; } else if (data[0] != 'F' || data[1] != 'O' || data[2] != 'N' || (data[3] != '1' && data[3] != '2')) @@ -143,10 +144,12 @@ FSingleLumpFont::FSingleLumpFont (const char *name, int lump) : FFont(lump) { case '1': LoadFON1 (lump, data); + Type = Fon1; break; case '2': LoadFON2 (lump, data); + Type = Fon2; break; } } diff --git a/src/gamedata/fonts/v_font.cpp b/src/gamedata/fonts/v_font.cpp index d7ec9c0ac..9218c5d19 100644 --- a/src/gamedata/fonts/v_font.cpp +++ b/src/gamedata/fonts/v_font.cpp @@ -859,6 +859,12 @@ FFont *V_GetFont(const char *name, const char *fontlumpname) FFont *font = FFont::FindFont (name); if (font == nullptr) { + if (!stricmp(name, "BIGUPPER")) + { + font = FFont::FindFont("BIGFONT"); + if (font) return font; + } + int lump = -1; int folderfile = -1; @@ -1446,6 +1452,10 @@ void V_InitFonts() 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 (gameinfo.gametype & GAME_Raven) @@ -1453,7 +1463,15 @@ void V_InitFonts() 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; } diff --git a/src/gamedata/fonts/v_font.h b/src/gamedata/fonts/v_font.h index 94028589e..7b84e3f06 100644 --- a/src/gamedata/fonts/v_font.h +++ b/src/gamedata/fonts/v_font.h @@ -81,6 +81,18 @@ extern int NumTextColors; class FFont { 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); virtual ~FFont (); @@ -119,6 +131,7 @@ protected: void ReadSheetFont(TArray &folderdata, int width, int height, const DVector2 &Scale); + EFontType Type = EFontType::Unknown; int FirstChar, LastChar; int SpaceWidth; int FontHeight; @@ -147,6 +160,7 @@ protected: friend struct FontsDeleter; friend void V_ClearFonts(); + friend void V_InitFonts(); }; diff --git a/src/gamedata/stringtable.cpp b/src/gamedata/stringtable.cpp index 89695429b..a892992e1 100644 --- a/src/gamedata/stringtable.cpp +++ b/src/gamedata/stringtable.cpp @@ -42,9 +42,16 @@ #include "c_dispatch.h" #include "v_text.h" #include "gi.h" +#include "d_player.h" #include "xlsxread/xlsxio_read.h" +//========================================================================== +// +// +// +//========================================================================== + void FStringTable::LoadStrings () { int lastlump, lump; @@ -58,8 +65,14 @@ void FStringTable::LoadStrings () } SetLanguageIDs(); UpdateLanguage(); + allMacros.Clear(); } +//========================================================================== +// +// +// +//========================================================================== bool FStringTable::LoadLanguageFromSpreadsheet(int lumpnum) { @@ -69,14 +82,60 @@ bool FStringTable::LoadLanguageFromSpreadsheet(int lumpnum) { return false; } - - if (!readSheetIntoTable(xlsxio, "Sheet1")) return false; - // readMacros(xlsxio, "macros"); + readMacros(xlsxio, "macros"); + readSheetIntoTable(xlsxio, "strings"); xlsxioread_close(xlsxio); return true; } +//========================================================================== +// +// +// +//========================================================================== + +bool FStringTable::readMacros(xlsxioreader reader, const char *sheetname) +{ + xlsxioreadersheet sheet = xlsxioread_sheet_open(reader, sheetname, XLSXIOREAD_SKIP_NONE); + if (sheet == nullptr) return false; + + while (xlsxioread_sheet_next_row(sheet)) + { + auto macroname = xlsxioread_sheet_next_cell(sheet); + auto language = xlsxioread_sheet_next_cell(sheet); + if (!macroname || !language) continue; + FStringf combined_name("%s/%s", language, macroname); + free(language); + free(macroname); + FName name = combined_name; + + StringMacro macro; + + char *value; + for (int i = 0; i < 4; i++) + { + value = xlsxioread_sheet_next_cell(sheet); + macro.Replacements[i] = value; + free(value); + } + // This is needed because the reader code would choke on incompletely read rows. + while ((value = xlsxioread_sheet_next_cell(sheet)) != nullptr) + { + free(value); + } + allMacros.Insert(name, macro); + } + xlsxioread_sheet_close(sheet); + return true; +} + +//========================================================================== +// +// +// +//========================================================================== + bool FStringTable::readSheetIntoTable(xlsxioreader reader, const char *sheetname) { @@ -94,7 +153,7 @@ bool FStringTable::readSheetIntoTable(xlsxioreader reader, const char *sheetname while ((value = xlsxioread_sheet_next_cell(sheet)) != nullptr) { auto vcopy = value; - if (table.Size() <= row) table.Reserve(1); + if (table.Size() <= (unsigned)row) table.Reserve(1); while (*vcopy && iswspace((unsigned char)*vcopy)) vcopy++; // skip over leaading whitespace; auto vend = vcopy + strlen(vcopy); while (vend > vcopy && iswspace((unsigned char)vend[-1])) *--vend = 0; // skip over trailing whitespace @@ -105,67 +164,74 @@ bool FStringTable::readSheetIntoTable(xlsxioreader reader, const char *sheetname } row++; } - xlsxioread_sheet_close(sheet); int labelcol = -1; int filtercol = -1; TArray> langrows; - for (unsigned column = 0; column < table[0].Size(); column++) + if (table.Size() > 0) { - auto &entry = table[0][column]; - if (entry.CompareNoCase("filter") == 0) + for (unsigned column = 0; column < table[0].Size(); column++) { - filtercol = column; - } - else if (entry.CompareNoCase("identifier") == 0) - { - labelcol = column;; - } - else - { - auto languages = entry.Split(" ", FString::TOK_SKIPEMPTY); - for (auto &lang : languages) + auto &entry = table[0][column]; + if (entry.CompareNoCase("filter") == 0) { - if (lang.CompareNoCase("default") == 0) + filtercol = column; + } + else if (entry.CompareNoCase("identifier") == 0) + { + labelcol = column;; + } + else + { + auto languages = entry.Split(" ", FString::TOK_SKIPEMPTY); + for (auto &lang : languages) { - langrows.Push(std::make_pair(column, default_table)); + if (lang.CompareNoCase("default") == 0) + { + langrows.Push(std::make_pair(column, default_table)); + } + else if (lang.Len() < 4) + { + lang.ToLower(); + langrows.Push(std::make_pair(column, MAKE_ID(lang[0], lang[1], lang[2], 0))); + } } - else if (lang.Len() < 4) + } + } + + for (unsigned i = 1; i < table.Size(); i++) + { + auto &row = table[i]; + if (filtercol > -1) + { + auto filterstr = row[filtercol]; + auto filter = filterstr.Split(" ", FString::TOK_SKIPEMPTY); + if (filter.Size() > 0 && filter.FindEx([](const auto &str) { return str.CompareNoCase(GameNames[gameinfo.gametype]) == 0; }) == filter.Size()) + continue; + } + + FName strName = row[labelcol]; + for (auto &langentry : langrows) + { + auto str = row[langentry.first]; + if (str.Len() > 0) { - lang.ToLower(); - langrows.Push(std::make_pair(column, MAKE_ID(lang[0], lang[1], lang[2], 0))); + InsertString(langentry.second, strName, str); } } } } - - for (unsigned i = 1; i < table.Size(); i++) - { - auto &row = table[i]; - if (filtercol > -1) - { - auto filterstr = row[filtercol]; - auto filter = filterstr.Split(" ", FString::TOK_SKIPEMPTY); - if (filter.Size() > 0 && filter.FindEx([](const auto &str) { return str.CompareNoCase(GameNames[gameinfo.gametype]) == 0; }) == filter.Size()) - continue; - } - - FName strName = row[labelcol]; - for (auto &langentry : langrows) - { - auto str = row[langentry.first]; - if (str.Len() > 0) - { - allStrings[langentry.second].Insert(strName, str); - str.Substitute("\n", "|"); - Printf(PRINT_LOG, "Setting %s for %s to %.40s\n\n", strName.GetChars(), &langentry.second, str.GetChars()); - } - } - } + xlsxioread_sheet_close(sheet); return true; } +//========================================================================== +// +// +// +//========================================================================== + void FStringTable::LoadLanguage (int lumpnum) { bool errordone = false; @@ -262,13 +328,52 @@ void FStringTable::LoadLanguage (int lumpnum) // Insert the string into all relevant tables. for (auto map : activeMaps) { - allStrings[map].Insert(strName, strText); + InsertString(map, strName, strText); } } } } } +//========================================================================== +// +// +// +//========================================================================== + +void FStringTable::InsertString(int langid, FName label, const FString &string) +{ + const char *strlangid = (const char *)&langid; + TableElement te = { string, string, string, string }; + long index; + while ((index = te.strings[0].IndexOf("@[")) >= 0) + { + auto endindex = te.strings[0].IndexOf(']', index); + if (endindex == -1) + { + Printf("Bad macro in %s : %s\n", strlangid, label.GetChars()); + break; + } + FString macroname(string.GetChars() + index + 2, endindex - index - 2); + FStringf lookupstr("%s/%s", strlangid, macroname.GetChars()); + FStringf replacee("@[%s]", macroname.GetChars()); + FName lookupname(lookupstr, true); + auto replace = allMacros.CheckKey(lookupname); + for (int i = 0; i < 4; i++) + { + const char *replacement = replace && replace->Replacements[i] ? replace->Replacements[i] : ""; + te.strings[i].Substitute(replacee, replacement); + } + } + allStrings[langid].Insert(label, te); +} + +//========================================================================== +// +// +// +//========================================================================== + void FStringTable::UpdateLanguage() { currentLanguageSet.Clear(); @@ -290,7 +395,12 @@ void FStringTable::UpdateLanguage() checkone(default_table); } +//========================================================================== +// // Replace \ escape sequences in a string with the escaped characters. +// +//========================================================================== + size_t FStringTable::ProcessEscapes (char *iptr) { char *sptr = iptr, *optr = iptr, c; @@ -317,10 +427,15 @@ size_t FStringTable::ProcessEscapes (char *iptr) return optr - sptr; } +//========================================================================== +// +// Checks if the given key exists in any one of the default string tables that are valid for all languages. +// To replace IWAD content this condition must be true. +// +//========================================================================== + bool FStringTable::exists(const char *name) { - // Checks if the given key exists in any one of the default string tables that are valid for all languages. - // To replace IWAD content this condition must be true. if (name == nullptr || *name == 0) { return false; @@ -343,13 +458,20 @@ bool FStringTable::exists(const char *name) return false; } +//========================================================================== +// // Finds a string by name and returns its value -const char *FStringTable::GetString(const char *name, uint32_t *langtable) const +// +//========================================================================== + +const char *FStringTable::GetString(const char *name, uint32_t *langtable, int gender) const { if (name == nullptr || *name == 0) { return nullptr; } + if (gender == -1) gender = players[consoleplayer].userinfo.GetGender(); + if (gender < 0 || gender > 3) gender = 0; FName nm(name, true); if (nm != NAME_None) { @@ -359,20 +481,27 @@ const char *FStringTable::GetString(const char *name, uint32_t *langtable) const if (item) { if (langtable) *langtable = map.first; - return item->GetChars(); + return item->strings[gender].GetChars(); } } } return nullptr; } +//========================================================================== +// // Finds a string by name in a given language -const char *FStringTable::GetLanguageString(const char *name, uint32_t langtable) const +// +//========================================================================== + +const char *FStringTable::GetLanguageString(const char *name, uint32_t langtable, int gender) const { if (name == nullptr || *name == 0) { return nullptr; } + if (gender == -1) gender = players[consoleplayer].userinfo.GetGender(); + if (gender < 0 || gender > 3) gender = 0; FName nm(name, true); if (nm != NAME_None) { @@ -381,14 +510,19 @@ const char *FStringTable::GetLanguageString(const char *name, uint32_t langtable auto item = map->CheckKey(nm); if (item) { - return item->GetChars(); + return item->strings[gender].GetChars(); } } return nullptr; } +//========================================================================== +// // Finds a string by name and returns its value. If the string does // not exist, returns the passed name instead. +// +//========================================================================== + const char *FStringTable::operator() (const char *name) const { const char *str = operator[] (name); @@ -396,7 +530,14 @@ const char *FStringTable::operator() (const char *name) const } +//========================================================================== +// // Find a string with the same exact text. Returns its name. +// This does not need to check genders, it is only used by +// Dehacked on the English table for finding stock strings. +// +//========================================================================== + const char *StringMap::MatchString (const char *string) const { StringMap::ConstIterator it(*this); @@ -404,7 +545,7 @@ const char *StringMap::MatchString (const char *string) const while (it.NextPair(pair)) { - if (pair->Value.CompareNoCase(string) == 0) + if (pair->Value.strings[0].CompareNoCase(string) == 0) { return pair->Key.GetChars(); } diff --git a/src/gamedata/stringtable.h b/src/gamedata/stringtable.h index d0d7b0347..c341d97b8 100644 --- a/src/gamedata/stringtable.h +++ b/src/gamedata/stringtable.h @@ -47,14 +47,25 @@ #include "doomdef.h" #include "doomtype.h" +struct TableElement +{ + FString strings[4]; +}; + // This public interface is for Dehacked -class StringMap : public TMap +class StringMap : public TMap { public: const char *MatchString(const char *string) const; }; +struct StringMacro +{ + FString Replacements[4]; +}; + + class FStringTable { public: @@ -66,6 +77,7 @@ public: }; using LangMap = TMap; + using StringMacroMap = TMap; void LoadStrings (); void UpdateLanguage(); @@ -76,8 +88,8 @@ public: UpdateLanguage(); } - const char *GetLanguageString(const char *name, uint32_t langtable) const; - const char *GetString(const char *name, uint32_t *langtable) const; + const char *GetLanguageString(const char *name, uint32_t langtable, int gender = -1) const; + const char *GetString(const char *name, uint32_t *langtable, int gender = -1) const; const char *operator() (const char *name) const; // Never returns NULL const char *operator[] (const char *name) const { @@ -87,12 +99,15 @@ public: private: + StringMacroMap allMacros; LangMap allStrings; TArray> currentLanguageSet; void LoadLanguage (int lumpnum); bool LoadLanguageFromSpreadsheet(int lumpnum); + bool readMacros(struct xlsxio_read_struct *reader, const char *sheet); bool readSheetIntoTable(struct xlsxio_read_struct *reader, const char *sheet); + void InsertString(int langid, FName label, const FString &string); static size_t ProcessEscapes (char *str); }; diff --git a/src/menu/menu.h b/src/menu/menu.h index 758ca253e..43a96f812 100644 --- a/src/menu/menu.h +++ b/src/menu/menu.h @@ -9,6 +9,7 @@ #include "r_data/r_translate.h" #include "c_cvars.h" #include "v_font.h" +#include "gi.h" #include "textures/textures.h" EXTERN_CVAR(Float, snd_menuvolume) @@ -207,6 +208,8 @@ public: mScrollTop = 0; mIndent = 0; mDontDim = 0; + mFont = gameinfo.gametype == GAME_Doom ? BigUpper : BigFont; + } size_t PropagateMark() override; ~DOptionMenuDescriptor() diff --git a/src/menu/menudef.cpp b/src/menu/menudef.cpp index e096b4718..e3df4fbf0 100644 --- a/src/menu/menudef.cpp +++ b/src/menu/menudef.cpp @@ -948,6 +948,7 @@ static void ParseOptionMenu(FScanner &sc) sc.MustGetString(); DOptionMenuDescriptor *desc = Create(); + desc->mFont = gameinfo.gametype == GAME_Doom ? BigUpper : BigFont; desc->mMenuName = sc.String; desc->mSelectedItem = -1; desc->mScrollPos = 0; @@ -1303,6 +1304,7 @@ static void BuildPlayerclassMenu() DOptionMenuDescriptor *od = Create(); MenuDescriptors[NAME_Playerclassmenu] = od; od->mMenuName = NAME_Playerclassmenu; + od->mFont = gameinfo.gametype == GAME_Doom ? BigUpper : BigFont; od->mTitle = "$MNU_CHOOSECLASS"; od->mSelectedItem = 0; od->mScrollPos = 0; @@ -1683,6 +1685,7 @@ fail: od = Create(); MenuDescriptors[NAME_Skillmenu] = od; od->mMenuName = NAME_Skillmenu; + od->mFont = gameinfo.gametype == GAME_Doom ? BigUpper : BigFont; od->mTitle = "$MNU_CHOOSESKILL"; od->mSelectedItem = defindex; od->mScrollPos = 0; diff --git a/src/p_acs.cpp b/src/p_acs.cpp index 0734eb243..dff6e4cb3 100644 --- a/src/p_acs.cpp +++ b/src/p_acs.cpp @@ -8869,7 +8869,7 @@ scriptwait: case PCD_LOCALAMBIENTSOUND: lookup = Level->Behaviors.LookupString (STACK(2)); - if (lookup != NULL && activator->CheckLocalView()) + if (lookup != NULL && activator && activator->CheckLocalView()) { S_Sound (CHAN_AUTO, lookup, diff --git a/src/p_interaction.cpp b/src/p_interaction.cpp index 6cd290c1b..121fb1cad 100644 --- a/src/p_interaction.cpp +++ b/src/p_interaction.cpp @@ -261,12 +261,12 @@ void ClientObituary (AActor *self, AActor *inflictor, AActor *attacker, int dmgf if (message != NULL && message[0] == '$') { - message = GStrings[message+1]; + message = GStrings.GetString(message+1, nullptr, self->player->userinfo.GetGender()); } if (message == NULL) { - message = GStrings("OB_DEFAULT"); + message = GStrings.GetString("OB_DEFAULT", nullptr, self->player->userinfo.GetGender()); } // [CK] Don't display empty strings diff --git a/src/p_map.cpp b/src/p_map.cpp index 06bd5dce1..c8ba45470 100644 --- a/src/p_map.cpp +++ b/src/p_map.cpp @@ -557,6 +557,9 @@ void P_PlayerStartStomp(AActor *actor, bool mononly) if (th->player == NULL && !(th->flags3 & MF3_ISMONSTER)) continue; + if ((th->flags6 & MF6_NOTELEFRAG) && !(th->flags7 & MF7_ALWAYSTELEFRAG)) + continue; + if (th->player != NULL && mononly) continue; diff --git a/src/p_mobj.cpp b/src/p_mobj.cpp index 44e8a97e9..d2c00d2a5 100644 --- a/src/p_mobj.cpp +++ b/src/p_mobj.cpp @@ -7396,5 +7396,7 @@ void PrintMiscActorInfo(AActor *query) Printf("FriendlySeeBlocks: %d\n", query->friendlyseeblocks); Printf("Target: %s\n", query->target ? query->target->GetClass()->TypeName.GetChars() : "-"); Printf("Last enemy: %s\n", query->lastenemy ? query->lastenemy->GetClass()->TypeName.GetChars() : "-"); + auto sn = FState::StaticGetStateName(query->state); + Printf("State:%s, Tics: %d", sn.GetChars(), query->tics); } } diff --git a/src/s_sound.cpp b/src/s_sound.cpp index abc11b255..b6aefd868 100644 --- a/src/s_sound.cpp +++ b/src/s_sound.cpp @@ -1490,7 +1490,7 @@ sfxinfo_t *S_LoadSound(sfxinfo_t *sfx, FSoundLoadBuffer *pBuffer) DPrintf(DMSG_NOTIFY, "Loading sound \"%s\" (%td)\n", sfx->name.GetChars(), sfx - &S_sfx[0]); int size = Wads.LumpLength(sfx->lumpnum); - if (size > 0) + if (size > 8) { auto wlump = Wads.OpenLumpReader(sfx->lumpnum); auto sfxdata = wlump.Read(size); @@ -1556,7 +1556,7 @@ static void S_LoadSound3D(sfxinfo_t *sfx, FSoundLoadBuffer *pBuffer) else { int size = Wads.LumpLength(sfx->lumpnum); - if (size <= 0) return; + if (size <= 8) return; auto wlump = Wads.OpenLumpReader(sfx->lumpnum); auto sfxdata = wlump.Read(size); diff --git a/src/utility/xlsxread/xlsxio_read.cpp b/src/utility/xlsxread/xlsxio_read.cpp index 738268707..48f6de5d8 100644 --- a/src/utility/xlsxread/xlsxio_read.cpp +++ b/src/utility/xlsxread/xlsxio_read.cpp @@ -63,7 +63,7 @@ void zip_close(zip_t *zipfile) zip_file_t *zip_fopen(zip_t *zipfile, const char *filename) { - if (!zipfile) return NULL; + if (!zipfile || !filename) return NULL; auto lump = zipfile->FindLump(filename); if (!lump) return NULL; return new FileReader(std::move(lump->NewReader())); diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index a4690fbef..192727398 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -378,8 +378,6 @@ OptionMenu "OptionsMenu" protected Submenu "$OPTMNU_DISPLAY", "VideoOptions" Submenu "$OPTMNU_VIDEO", "VideoModeMenu" StaticText " " - Option "$OPTMNU_LANGUAGE", "language", "LanguageOptions" - StaticText " " SafeCommand "$OPTMNU_DEFAULTS", "reset2defaults" SafeCommand "$OPTMNU_RESETTOSAVED", "reset2saved" Command "$OPTMNU_CONSOLE", "menuconsole" @@ -419,12 +417,12 @@ ListMenu "PlayerMenu" IfGame(Doom, Heretic, Strife, Chex) { MouseWindow 0, 220 - PlayerDisplay 220, 80, "20 00 00", "80 00 40", 1, "PlayerDisplay" + PlayerDisplay 220, 48, "20 00 00", "80 00 40", 1, "PlayerDisplay" } IfGame(Hexen) { MouseWindow 0, 220 - PlayerDisplay 220, 80, "00 07 00", "40 53 40", 1, "PlayerDisplay" + PlayerDisplay 220, 48, "00 07 00", "40 53 40", 1, "PlayerDisplay" } ValueText "$PLYRMNU_TEAM", "Team" @@ -453,25 +451,12 @@ OptionMenu "CustomizeControls" protected { Title "$CNTRLMNU_TITLE" - StaticText "" Submenu "$CNTRLMNU_ACTION" , "ActionControlsMenu" - - StaticText "" Submenu "$CNTRLMNU_CHAT" , "ChatControlsMenu" - - StaticText "" Submenu "$CNTRLMNU_WEAPONS" , "WeaponsControlMenu" - - StaticText "" Submenu "$CNTRLMNU_INVENTORY" , "InventoryControlsMenu" - - StaticText "" Submenu "$CNTRLMNU_OTHER" , "OtherControlsMenu" - - StaticText "" Submenu "$CNTRLMNU_POPUPS" , "StrifeControlsMenu" - - StaticText "" Submenu "$MAPCNTRLMNU_CONTROLS" , "MapControlsMenu" } @@ -912,9 +897,6 @@ OptionMenu "VideoOptions" protected Option "$DSPLYMNU_NOMONSTERINTERPOLATION", "nomonsterinterpolation", "NoYes" Slider "$DSPLYMNU_MENUDIM", "dimamount", 0, 1.0, 0.05, 2 ColorPicker "$DSPLYMNU_DIMCOLOR", "dimcolor" - Slider "$DSPLYMNU_MOVEBOB", "movebob", 0, 1.0, 0.05, 2 - Slider "$DSPLYMNU_STILLBOB", "stillbob", 0, 1.0, 0.05, 2 - Slider "$DSPLYMNU_BOBSPEED", "wbobspeed", 0, 2.0, 0.1 IfOption(Windows) { StaticText " " @@ -1005,6 +987,11 @@ OptionMenu "HUDOptions" protected Option "$HUDMNU_POISONFLASHES", "pf_poison", "ZDoomHexen" Option "$HUDMNU_ICEFLASHES", "pf_ice", "ZDoomHexen" Option "$HUDMNU_HAZARDFLASHES", "pf_hazard", "ZDoomStrife" + StaticText " " + Slider "$DSPLYMNU_MOVEBOB", "movebob", 0, 1.0, 0.05, 2 + Slider "$DSPLYMNU_STILLBOB", "stillbob", 0, 1.0, 0.05, 2 + Slider "$DSPLYMNU_BOBSPEED", "wbobspeed", 0, 2.0, 0.1 + } OptionMenu "ScalingOptions" protected @@ -1149,6 +1136,8 @@ OptionMenu "MiscOptions" protected Option "$MISCMNU_CACHENODES", "gl_cachenodes", "OnOff" Slider "$MISCMNU_CACHETIME", "gl_cachetime", 0.0, 2.0, 0.1 SafeCommand "$MISCMNU_CLEARNODECACHE", "clearnodecache" + StaticText " " + Option "$OPTMNU_LANGUAGE", "language", "LanguageOptions" } //------------------------------------------------------------------------------------------- diff --git a/wadsrc/static/zscript/actors/player/player_morph.zs b/wadsrc/static/zscript/actors/player/player_morph.zs index 7921d1dce..87ee90ac9 100644 --- a/wadsrc/static/zscript/actors/player/player_morph.zs +++ b/wadsrc/static/zscript/actors/player/player_morph.zs @@ -562,6 +562,7 @@ class MorphedMonster : Actor unmorphed.args[3] = args[3]; unmorphed.args[4] = args[4]; unmorphed.CopyFriendliness (self, true); + unmorphed.bUnmorphed = false; UnmorphedMe = NULL; Substitute(unmorphed); Destroy (); diff --git a/wadsrc/static/zscript/ui/menu/loadsavemenu.zs b/wadsrc/static/zscript/ui/menu/loadsavemenu.zs index c0f125b46..6843a6b8b 100644 --- a/wadsrc/static/zscript/ui/menu/loadsavemenu.zs +++ b/wadsrc/static/zscript/ui/menu/loadsavemenu.zs @@ -228,6 +228,7 @@ class LoadSaveMenu : ListMenu } screen.SetClipRect(listboxLeft, listboxTop+rowHeight*i, listboxRight, listboxTop+rowHeight*(i+1)); + int fontoffset = -CleanYFac; if (j == Selected) { @@ -235,19 +236,19 @@ class LoadSaveMenu : ListMenu didSeeSelected = true; if (!mEntering) { - screen.DrawText (ConFont, colr, listboxLeft+1, listboxTop+rowHeight*i+CleanYfac, node.SaveTitle, DTA_CleanNoMove, true); + screen.DrawText (ConFont, colr, listboxLeft+1, listboxTop+rowHeight*i+CleanYfac + fontoffset, node.SaveTitle, DTA_CleanNoMove, true); } else { String s = mInput.GetText() .. ConFont.GetCursor(); int length = ConFont.StringWidth(s) * CleanXFac; int displacement = min(0, listboxWidth - 2 - length); - screen.DrawText (ConFont, Font.CR_WHITE, listboxLeft + 1 + displacement, listboxTop+rowHeight*i+CleanYfac, s, DTA_CleanNoMove, true); + screen.DrawText (ConFont, Font.CR_WHITE, listboxLeft + 1 + displacement, listboxTop+rowHeight*i+CleanYfac + fontoffset, s, DTA_CleanNoMove, true); } } else { - screen.DrawText (ConFont, colr, listboxLeft+1, listboxTop+rowHeight*i+CleanYfac, node.SaveTitle, DTA_CleanNoMove, true); + screen.DrawText (ConFont, colr, listboxLeft+1, listboxTop+rowHeight*i+CleanYfac + fontoffset, node.SaveTitle, DTA_CleanNoMove, true); } screen.ClearClipRect(); j++; diff --git a/wadsrc/static/zscript/ui/menu/playermenu.zs b/wadsrc/static/zscript/ui/menu/playermenu.zs index 09d05b0c2..38c70353b 100644 --- a/wadsrc/static/zscript/ui/menu/playermenu.zs +++ b/wadsrc/static/zscript/ui/menu/playermenu.zs @@ -586,9 +586,9 @@ class PlayerMenu : ListMenu { Super.Drawer(); String str = Stringtable.Localize("$PLYRMNU_PRESSSPACE"); - screen.DrawText (SmallFont, Font.CR_GOLD, 320 - 32 - 32 - SmallFont.StringWidth (str)/2, 50 + 48 + 70, str, DTA_Clean, true); + screen.DrawText (SmallFont, Font.CR_GOLD, 320 - 32 - 32 - SmallFont.StringWidth (str)/2, 130, str, DTA_Clean, true); str = Stringtable.Localize(mRotation ? "$PLYRMNU_SEEFRONT" : "$PLYRMNU_SEEBACK"); - screen.DrawText (SmallFont, Font.CR_GOLD, 320 - 32 - 32 - SmallFont.StringWidth (str)/2, 50 + 48 + 70 + SmallFont.GetHeight (), str, DTA_Clean, true); + screen.DrawText (SmallFont, Font.CR_GOLD, 320 - 32 - 32 - SmallFont.StringWidth (str)/2, 130 + SmallFont.GetHeight (), str, DTA_Clean, true); } diff --git a/wadsrc_extra/static/filter/game-doom/fonts/defsmallfont/00D1.lmp b/wadsrc_extra/static/filter/game-doom/fonts/defsmallfont/00D1.lmp index c3f9c4cc2..98796cc27 100644 Binary files a/wadsrc_extra/static/filter/game-doom/fonts/defsmallfont/00D1.lmp and b/wadsrc_extra/static/filter/game-doom/fonts/defsmallfont/00D1.lmp differ diff --git a/wadsrc_extra/static/filter/game-doom/fonts/defsmallfont/0152.lmp b/wadsrc_extra/static/filter/game-doom/fonts/defsmallfont/0152.lmp new file mode 100644 index 000000000..19854b454 Binary files /dev/null and b/wadsrc_extra/static/filter/game-doom/fonts/defsmallfont/0152.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/00A1.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/00A1.lmp index 916ceb9c0..da7389a7b 100644 Binary files a/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/00A1.lmp and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/00A1.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/00BF.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/00BF.lmp index 036a4819c..b4a5cc7b6 100644 Binary files a/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/00BF.lmp and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/00BF.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/0152.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/0152.lmp new file mode 100644 index 000000000..c6bbd12a7 Binary files /dev/null and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/0152.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/0178.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/0178.lmp new file mode 100644 index 000000000..d91230a9a Binary files /dev/null and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigfont/0178.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/00A1.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/00A1.lmp index b0121f777..1bed4cbff 100644 Binary files a/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/00A1.lmp and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/00A1.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/00BF.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/00BF.lmp index c403f2146..2a66f8f40 100644 Binary files a/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/00BF.lmp and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/00BF.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0152.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0152.lmp new file mode 100644 index 000000000..1fa0d811e Binary files /dev/null and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0152.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0153.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0153.lmp new file mode 100644 index 000000000..2189fba12 Binary files /dev/null and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0153.lmp differ diff --git a/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0178.lmp b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0178.lmp new file mode 100644 index 000000000..8d997a384 Binary files /dev/null and b/wadsrc_extra/static/filter/game-doomchex/fonts/bigupper/0178.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00BF.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00BF.lmp index d76fc168d..f898ecde0 100644 Binary files a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00BF.lmp and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00BF.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C0.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C0.lmp new file mode 100644 index 000000000..75d0dba6e Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C0.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C2.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C2.lmp new file mode 100644 index 000000000..18986ca2f Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C2.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C7.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C7.lmp new file mode 100644 index 000000000..22e02fccc Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C7.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C8.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C8.lmp new file mode 100644 index 000000000..21ddc5483 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C8.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C9.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C9.lmp new file mode 100644 index 000000000..1701606e2 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00C9.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CA.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CA.lmp new file mode 100644 index 000000000..5862b6600 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CA.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CB.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CB.lmp new file mode 100644 index 000000000..d6f35ff0d Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CB.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CE.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CE.lmp new file mode 100644 index 000000000..b5732651e Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CE.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CF.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CF.lmp new file mode 100644 index 000000000..83a34a75f Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00CF.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D1.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D1.lmp new file mode 100644 index 000000000..868a0142a Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D1.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D4.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D4.lmp new file mode 100644 index 000000000..b0aeff63c Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D4.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D9.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D9.lmp new file mode 100644 index 000000000..dd696d0fd Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00D9.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00DB.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00DB.lmp new file mode 100644 index 000000000..13975fcee Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/00DB.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0152.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0152.lmp new file mode 100644 index 000000000..df11fb956 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0152.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0178.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0178.lmp new file mode 100644 index 000000000..390f7dde5 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0178.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0401.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0401.lmp new file mode 100644 index 000000000..d6f35ff0d Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0401.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0407.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0407.lmp new file mode 100644 index 000000000..83a34a75f Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defbigfont/0407.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00A1.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00A1.lmp index cbfb264c0..1cee5470e 100644 Binary files a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00A1.lmp and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00A1.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00BF.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00BF.lmp index d05449d66..5bf08de63 100644 Binary files a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00BF.lmp and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00BF.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C0.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C0.lmp new file mode 100644 index 000000000..63f0991cc Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C0.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C2.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C2.lmp new file mode 100644 index 000000000..8d6e4b4b1 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C2.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C4.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C4.lmp index 00318427c..d4950c50a 100644 Binary files a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C4.lmp and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C4.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C7.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C7.lmp new file mode 100644 index 000000000..e4ad4b442 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C7.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C8.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C8.lmp new file mode 100644 index 000000000..1e3cc3fd4 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C8.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C9.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C9.lmp new file mode 100644 index 000000000..6a634f9ec Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00C9.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CA.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CA.lmp new file mode 100644 index 000000000..5948bca24 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CA.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CB.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CB.lmp new file mode 100644 index 000000000..c674b40e7 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CB.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CE.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CE.lmp new file mode 100644 index 000000000..8427095c8 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CE.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CF.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CF.lmp new file mode 100644 index 000000000..7fddb83d5 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00CF.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D1.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D1.lmp new file mode 100644 index 000000000..f28db98a8 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D1.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D4.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D4.lmp new file mode 100644 index 000000000..8b0c16fba Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D4.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D9.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D9.lmp new file mode 100644 index 000000000..58d8d0053 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00D9.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00DB.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00DB.lmp new file mode 100644 index 000000000..96feb547e Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/00DB.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0152.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0152.lmp new file mode 100644 index 000000000..b3464d2b9 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0152.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0178.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0178.lmp new file mode 100644 index 000000000..550e14a5c Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0178.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0401.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0401.lmp index df10c490c..c674b40e7 100644 Binary files a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0401.lmp and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0401.lmp differ diff --git a/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0407.lmp b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0407.lmp new file mode 100644 index 000000000..7fddb83d5 Binary files /dev/null and b/wadsrc_extra/static/filter/game-heretic/fonts/defsmallfont/0407.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00BF.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00BF.lmp index eeb3eb288..ffb8a25cc 100644 Binary files a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00BF.lmp and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00BF.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C0.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C0.lmp new file mode 100644 index 000000000..b25280cc4 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C0.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C2.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C2.lmp new file mode 100644 index 000000000..81ad7e054 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C2.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C7.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C7.lmp new file mode 100644 index 000000000..06a3969ff Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C7.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C8.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C8.lmp new file mode 100644 index 000000000..7470e6eb9 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C8.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C9.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C9.lmp new file mode 100644 index 000000000..331f0c163 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00C9.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CA.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CA.lmp new file mode 100644 index 000000000..6f9b3a88b Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CA.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CB.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CB.lmp new file mode 100644 index 000000000..ef953a45c Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CB.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CE.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CE.lmp new file mode 100644 index 000000000..2927fa756 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CE.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CF.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CF.lmp new file mode 100644 index 000000000..bcd452caf Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00CF.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D1.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D1.lmp new file mode 100644 index 000000000..825186712 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D1.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D4.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D4.lmp new file mode 100644 index 000000000..11e6022f7 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D4.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D9.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D9.lmp new file mode 100644 index 000000000..f067f1e97 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00D9.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00DB.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00DB.lmp new file mode 100644 index 000000000..d02e18ab9 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/00DB.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0152.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0152.lmp new file mode 100644 index 000000000..cdefd35ef Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0152.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0178.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0178.lmp new file mode 100644 index 000000000..483c3f795 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0178.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0401.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0401.lmp new file mode 100644 index 000000000..aa274ae8b Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0401.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0407.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0407.lmp new file mode 100644 index 000000000..bcd452caf Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defbigfont/0407.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00A1.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00A1.lmp index 2eaf0487a..ece681c9e 100644 Binary files a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00A1.lmp and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00A1.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00BF.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00BF.lmp index 640a0949e..700e06e87 100644 Binary files a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00BF.lmp and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00BF.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C0.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C0.lmp new file mode 100644 index 000000000..8b1dfbfc9 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C0.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C2.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C2.lmp new file mode 100644 index 000000000..277015f20 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C2.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C4.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C4.lmp index b5b1cedab..c0b9abc94 100644 Binary files a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C4.lmp and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C4.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C7.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C7.lmp new file mode 100644 index 000000000..3afaf4b15 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C7.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C8.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C8.lmp new file mode 100644 index 000000000..ddf044f1b Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C8.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C9.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C9.lmp new file mode 100644 index 000000000..0cf153d63 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00C9.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CA.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CA.lmp new file mode 100644 index 000000000..03c46ce29 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CA.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CB.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CB.lmp new file mode 100644 index 000000000..04f10ef00 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CB.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CE.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CE.lmp new file mode 100644 index 000000000..8a695afbe Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CE.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CF.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CF.lmp new file mode 100644 index 000000000..d1296467d Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00CF.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D1.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D1.lmp new file mode 100644 index 000000000..2513dad76 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D1.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D4.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D4.lmp new file mode 100644 index 000000000..590ec505a Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D4.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D6.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D6.lmp index e9cda191b..1278c23b7 100644 Binary files a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D6.lmp and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D6.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D9.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D9.lmp new file mode 100644 index 000000000..21d2f8204 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00D9.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00DB.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00DB.lmp new file mode 100644 index 000000000..12c51335a Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/00DB.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0152.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0152.lmp new file mode 100644 index 000000000..0cf50cb1b Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0152.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0178.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0178.lmp new file mode 100644 index 000000000..758318114 Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0178.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0401.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0401.lmp index fb128a8f5..04f10ef00 100644 Binary files a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0401.lmp and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0401.lmp differ diff --git a/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0407.lmp b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0407.lmp new file mode 100644 index 000000000..d1296467d Binary files /dev/null and b/wadsrc_extra/static/filter/game-hexen/fonts/defsmallfont/0407.lmp differ