From c788da46fb63ef95331fc57e1f9f41973a72d26d Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 8 Apr 2019 22:07:09 +0200 Subject: [PATCH] - Localization helper code for level names that haven't been exported to the string table. --- src/gamedata/g_mapinfo.cpp | 34 +++++++++++++++++++++++----------- 1 file changed, 23 insertions(+), 11 deletions(-) diff --git a/src/gamedata/g_mapinfo.cpp b/src/gamedata/g_mapinfo.cpp index 6f7d88694..5757703d2 100644 --- a/src/gamedata/g_mapinfo.cpp +++ b/src/gamedata/g_mapinfo.cpp @@ -1930,20 +1930,32 @@ level_info_t *FMapInfoParser::ParseMapHeader(level_info_t &defaultinfo) } else { - levelinfo->LevelName = sc.String; - - if (HexenHack) + // Workaround to allow localizazion of IWADs which do not have a string label here (e.g. HACX.WAD) + // This checks for a string labelled with the MapName and if that is identical to what got parsed here + // the string table entry will be used. + auto c = GStrings.GetLanguageString(levelinfo->MapName, FStringTable::default_table); + if (c && !strcmp(c, sc.String)) { - // Try to localize Hexen's map names. - int fileno = Wads.GetLumpFile(sc.LumpNum); - auto fn = Wads.GetWadName(fileno); - if (fn && (!stricmp(fn, "HEXEN.WAD") || !stricmp(fn, "HEXDD.WAD"))) + levelinfo->flags |= LEVEL_LOOKUPLEVELNAME; + levelinfo->LevelName = levelinfo->MapName; + } + else + { + levelinfo->LevelName = sc.String; + + if (HexenHack) { - FStringf key("TXT_%.5s_%s", fn, levelinfo->MapName.GetChars()); - if (GStrings.exists(key)) + // Try to localize Hexen's map names. This does not use the above feature to allow these names to be unique. + int fileno = Wads.GetLumpFile(sc.LumpNum); + auto fn = Wads.GetWadName(fileno); + if (fn && (!stricmp(fn, "HEXEN.WAD") || !stricmp(fn, "HEXDD.WAD"))) { - levelinfo->flags |= LEVEL_LOOKUPLEVELNAME; - levelinfo->LevelName = key; + FStringf key("TXT_%.5s_%s", fn, levelinfo->MapName.GetChars()); + if (GStrings.exists(key)) + { + levelinfo->flags |= LEVEL_LOOKUPLEVELNAME; + levelinfo->LevelName = key; + } } } }