diff --git a/source/core/gamecontrol.cpp b/source/core/gamecontrol.cpp index c391693f7..28c061c35 100644 --- a/source/core/gamecontrol.cpp +++ b/source/core/gamecontrol.cpp @@ -72,6 +72,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "d_net.h" #include "automap.h" #include "v_draw.h" +#include "gi.h" CVAR(Bool, autoloadlights, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) CVAR(Bool, autoloadbrightmaps, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) @@ -744,6 +745,7 @@ static TArray SetupGame() currentGame = LumpFilter; currentGame.Truncate(currentGame.IndexOf(".")); CheckFrontend(g_gameType); + gameinfo.gametype = g_gameType; return usedgroups; } diff --git a/source/core/menu/razemenu.cpp b/source/core/menu/razemenu.cpp index 7788566ee..9695a45ff 100644 --- a/source/core/menu/razemenu.cpp +++ b/source/core/menu/razemenu.cpp @@ -1111,6 +1111,7 @@ bool CheckSkipGameOptionBlock(FScanner &sc) #endif void SetDefaultMenuColors() { + PClass* cls = nullptr; //OptionSettings.mTitleColor = CR_RED;// V_FindFontColor(gameinfo.mTitleColor); OptionSettings.mFontColor = CR_RED; OptionSettings.mFontColorValue = CR_GRAY; @@ -1119,31 +1120,43 @@ void SetDefaultMenuColors() OptionSettings.mFontColorHighlight = CR_YELLOW; OptionSettings.mFontColorSelection = CR_BRICK; - if (g_gameType & (GAMEFLAG_NAM | GAMEFLAG_NAPALM | GAMEFLAG_WW2GI)) - { - OptionSettings.mFontColor = CR_DARKGREEN; - OptionSettings.mFontColorHeader = CR_DARKGRAY; - OptionSettings.mFontColorHighlight = CR_WHITE; - OptionSettings.mFontColorSelection = CR_DARKGREEN; - } - else if (g_gameType & GAMEFLAG_BLOOD) + if (g_gameType & GAMEFLAG_BLOOD) { OptionSettings.mFontColorHeader = CR_DARKGRAY; OptionSettings.mFontColorHighlight = CR_WHITE; OptionSettings.mFontColorSelection = CR_DARKRED; - auto cls = PClass::FindClass("MenuCustomizerBlood"); - if (cls) menuCustomizer = cls->CreateNew(); - } - else if (g_gameType & GAMEFLAG_RRALL) - { - OptionSettings.mFontColor = CR_BROWN; - OptionSettings.mFontColorHeader = CR_DARKBROWN; - OptionSettings.mFontColorHighlight = CR_ORANGE; - OptionSettings.mFontColorSelection = CR_TAN; + cls = PClass::FindClass("MenuCustomizerBlood"); } else if (g_gameType & GAMEFLAG_SW) { OptionSettings.mFontColorHeader = CR_DARKRED; OptionSettings.mFontColorHighlight = CR_WHITE; } + else if (g_gameType & GAMEFLAG_PSEXHUMED) + { + OptionSettings.mFontColorHeader = CR_LIGHTBLUE; + OptionSettings.mFontColorHighlight = CR_SAPPHIRE; + OptionSettings.mFontColor = CR_GOLD; + } + else + { + if (g_gameType & (GAMEFLAG_NAM | GAMEFLAG_NAPALM | GAMEFLAG_WW2GI)) + { + OptionSettings.mFontColor = CR_DARKGREEN; + OptionSettings.mFontColorHeader = CR_DARKGRAY; + OptionSettings.mFontColorHighlight = CR_WHITE; + OptionSettings.mFontColorSelection = CR_DARKGREEN; + } + else if (g_gameType & GAMEFLAG_RRALL) + { + OptionSettings.mFontColor = CR_BROWN; + OptionSettings.mFontColorHeader = CR_DARKBROWN; + OptionSettings.mFontColorHighlight = CR_ORANGE; + OptionSettings.mFontColorSelection = CR_TAN; + } + cls = PClass::FindClass("MenuCustomizerDuke"); + } + if (!cls) cls = PClass::FindClass("MenuCustomize"); + if (cls) menuCustomizer = cls->CreateNew(); + } diff --git a/source/games/duke/src/gamedef.cpp b/source/games/duke/src/gamedef.cpp index d4b9aeb4e..80e1aa490 100644 --- a/source/games/duke/src/gamedef.cpp +++ b/source/games/duke/src/gamedef.cpp @@ -46,6 +46,7 @@ Modifications for JonoF's port by Jonathon Fowler (jf@jonof.id.au) #include "sounds.h" #include "conlabel.h" #include "conlabeldef.h" +#include "gi.h" BEGIN_DUKE_NS @@ -1880,6 +1881,7 @@ int ConCompiler::parsecommand() else if (pcount == 31) g_gameType |= GAMEFLAG_PLUTOPAK | GAMEFLAG_WORLDTOUR; else if (pcount != 26) I_FatalError("Invalid CONs. Cannot detect version. gamestartup has %d entries", pcount); } + gameinfo.gametype = g_gameType; popscriptvalue(); auto parseone = [&]() { return params[pget++]; }; diff --git a/wadsrc/static/zscript.txt b/wadsrc/static/zscript.txt index 91bf8fe19..a5558607e 100644 --- a/wadsrc/static/zscript.txt +++ b/wadsrc/static/zscript.txt @@ -21,5 +21,6 @@ version "4.3" #include "zscript/ui/menu/textentermenu.zs" #include "zscript/ui/menu/menucustomize.zs" +#include "zscript/games/duke/ui/menu.zs" #include "zscript/games/blood/ui/menu.zs" diff --git a/wadsrc/static/zscript/games/duke/ui/menu.zs b/wadsrc/static/zscript/games/duke/ui/menu.zs new file mode 100644 index 000000000..0e5325897 --- /dev/null +++ b/wadsrc/static/zscript/games/duke/ui/menu.zs @@ -0,0 +1,27 @@ + +class MenuCustomizerDuke : MenuCustomize +{ + override int DrawCaption(String title, Font fnt, int y, bool drawit) + { + let font = generic_ui? NewConsoleFont : BigFont; // this ignores the passed font intentionally. + let texid = TexMan.CheckForTexture("MENUBAR"); + let texsize = TexMan.GetScaledSize(texid); + let fonth = font.GetGlyphHeight("A"); + if (drawit) + { + int width = font.StringWidth(title); + double scalex = (gameinfo.gameType & GAMEFLAG_RRALL)? 0.4 : 1.; + double scaley = scalex; + if (texid.isValid()) + { + screen.DrawTexture(texid, false, 160, 19, DTA_FullscreenScale, FSMode_Fit320x200Top, DTA_CenterOffsetRel, true, DTA_Color, 0xff808080); + if (texsize.X - 30 < width) scalex = (texsize.X - 30) / width; // Squash the text if it doesn't fit. + } + screen.DrawText(font, Font.CR_UNTRANSLATED, 160 - width / 2 * scalex, 18 - fonth / 2 * scaley, title, DTA_ScaleX, scalex, DTA_ScaleY, scaley, DTA_FullscreenScale, FSMode_Fit320x200Top); + } + double fx, fy, fw, fh; + [fx, fy, fw, fh] = Screen.GetFullscreenRect(320, 200, FSMode_ScaleToFit43Top); + int h = texid.isValid()? texsize.Y : fonth; + return int((y+h) * fh / 200); // This must be the covered height of the header in true pixels. + } +} diff --git a/wadsrc/static/zscript/razebase.zs b/wadsrc/static/zscript/razebase.zs index f06008f19..47dc20f56 100644 --- a/wadsrc/static/zscript/razebase.zs +++ b/wadsrc/static/zscript/razebase.zs @@ -1,3 +1,33 @@ + +enum EGameType +{ + GAMEFLAG_DUKE = 0x00000001, + GAMEFLAG_NAM = 0x00000002, + GAMEFLAG_NAPALM = 0x00000004, + GAMEFLAG_WW2GI = 0x00000008, + GAMEFLAG_ADDON = 0x00000010, + GAMEFLAG_SHAREWARE = 0x00000020, + GAMEFLAG_DUKEBETA = 0x00000060, // includes 0x20 since it's a shareware beta + GAMEFLAG_PLUTOPAK = 0x00000080, + GAMEFLAG_RR = 0x00000100, + GAMEFLAG_RRRA = 0x00000200, + GAMEFLAG_RRALL = GAMEFLAG_RR | GAMEFLAG_RRRA, + GAMEFLAG_BLOOD = 0x00000800, + GAMEFLAG_SW = 0x00001000, + GAMEFLAG_POWERSLAVE = 0x00002000, + GAMEFLAG_EXHUMED = 0x00004000, + GAMEFLAG_PSEXHUMED = GAMEFLAG_POWERSLAVE | GAMEFLAG_EXHUMED, // the two games really are the same, except for the name and the publisher. + GAMEFLAG_WORLDTOUR = 0x00008000, + GAMEFLAG_DUKEDC = 0x00010000, + GAMEFLAGMASK = 0x0000FFFF, // flags allowed from grpinfo + + // We still need these for the parsers. + GAMEFLAG_FURY = 0, + GAMEFLAG_DEER = 0, + +}; + + /* struct TileFiles {