From 453e273d0cf6b6a5e247a0b54d74cdb0c3bf33d1 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 29 Oct 2020 17:24:29 +0100 Subject: [PATCH] - implemented the WH2 menu. This is a rather liberal reinterpretation because the original assets are unusable (text as graphics with baked-in highlights) and the highlight graphics used by GDX are too ugly for serious consideration. As a result this highlights the font like the first Witchaven, i.e. coloring it green. --- .../fonts/bigfont/font.inf | 1 + .../witchaven.witchaven2/graphics/bg1.png | Bin 2435 -> 0 bytes .../witchaven.witchaven2/graphics/bg2.png | Bin 3841 -> 0 bytes .../witchaven.witchaven2/graphics/bg3.png | Bin 3954 -> 0 bytes .../witchaven.witchaven2/graphics/logo.png | Bin 20862 -> 0 bytes wadsrc/static/menudef.txt | 38 +++--- wadsrc/static/zscript.txt | 1 + wadsrc/static/zscript/games/wh/ui/menu_wh2.zs | 116 ++++++++++++++++++ 8 files changed, 142 insertions(+), 14 deletions(-) create mode 100644 wadsrc/static/filter/witchaven.witchaven2/fonts/bigfont/font.inf delete mode 100644 wadsrc/static/filter/witchaven.witchaven2/graphics/bg1.png delete mode 100644 wadsrc/static/filter/witchaven.witchaven2/graphics/bg2.png delete mode 100644 wadsrc/static/filter/witchaven.witchaven2/graphics/bg3.png delete mode 100644 wadsrc/static/filter/witchaven.witchaven2/graphics/logo.png create mode 100644 wadsrc/static/zscript/games/wh/ui/menu_wh2.zs diff --git a/wadsrc/static/filter/witchaven.witchaven2/fonts/bigfont/font.inf b/wadsrc/static/filter/witchaven.witchaven2/fonts/bigfont/font.inf new file mode 100644 index 000000000..108a9c7f1 --- /dev/null +++ b/wadsrc/static/filter/witchaven.witchaven2/fonts/bigfont/font.inf @@ -0,0 +1 @@ +Kerning 1 diff --git a/wadsrc/static/filter/witchaven.witchaven2/graphics/bg1.png b/wadsrc/static/filter/witchaven.witchaven2/graphics/bg1.png deleted file mode 100644 index 983c8aadeef5dbb0267fc6399352f5b7bd7d3e4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2435 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 D7iB8) diff --git a/wadsrc/static/filter/witchaven.witchaven2/graphics/bg3.png b/wadsrc/static/filter/witchaven.witchaven2/graphics/bg3.png deleted file mode 100644 index 7c3b762bab132e5536d85a5b89a8bad0993b268a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3954 zcmV-&4~_7NP)IC8{KTl}kZ2q{02~wyBn%8xEF?f299RqlTmTR-6cj)J z6ig%}NGKpg7zivF6m%E}I3OHYEG#e#0E8e6cr+Ls5D<(+AY?QsPzVHIC=@6R03-+i zY!n2LR5)M+1W*J77zhY(3=E7U5PTd6fJiWS01RLZ1Y{5dv`jES6ab`DD6BvvmZIm+?5B#Gl|64rcgfwMe`r8}UwQpLuTHouTB=(il8l z`?s_(c=nG3t#d7qH2Y6!Vw{Ts{7fI?yw5V(%8X}1Vgr=_P!8?e78!}*R6-JDIFb>L z5t)-N6KF#4Tw;4%y;i!a2(kJ5cN)7J9Ezg&A*2PJZVDZ7cr^Yk3P;eK8+s&j$TA}9 zMn=NINfMyw^+Zo5UZ*|Z z%1N0~WeG9IbDOLcR2-zocJLEf&uEJ;KS9y(%pT3Yy-pb&A3laBOGdCbGqbOv6qmcCpY=&g84y7#0~% z=ijSA^OTQFU85apX1Ci>nAX?qx4>E?^FyM1qSwA~^r>yL+5ES9c=*GT>XiIKK;l@C zC2C}&0X1kkKz1DigYF^HMGhlN^xX{(hmXzic-&I8sIpWatS{o{y_!MsnWS_Qo$79F z7sx%yhMAtob192Yt&WGJTr)_0n00)UHfpiT> z5F6tdY+BciCrz5{r0u@VRA5Z(*wlqOMMKhI6R;=D{{Nr*oO9nW+u6rN7#uM_&XKO} z72zTzL0B3_lt3j{+1s1w=e;}+@CaaBz=&$DZ>K<>pI;aH!>cidMi?IhuV@6k0FaMe zoSJLfs2oM$2R=III3l)q&Au=Ur4S+!qzocXnBa%4d6e7047<+LAb(gq-P>F2@2_bP zo6oQ5I#y8Q&WDXlu)em9$cOJkz#Q#DB2*_|g29rfdINV(I2|EE|E2Ib>GbaWyx%9_Rl&_OnMhs6$cF;Ho3iizJ~}&#g0sj4tqZaJ z-$V?1hK=WWZ#)l1o0m-74(d&*NJU4_xm90(O=Z09LxgeJ%qtwQe|i4fxdPrZ35`2G ze)1&T2*1UDWAqss8F1;mQpr>K9vgon-)$2^Nj@QESRtjU@5v$ukuF$+!gb+yo`~9` zklTE53I7dz>&01;MA*62YDxKoBIS!0^2PD7+#Vb~%BOziuqh%mE;je)kPrqTjo z6B6-T*jJJ>RLcA$&#BYX5fzaJMoXm0J5Cc^(=)2zGD@U>N*${;{Ay2Dt03xBDfW#j z>5QmogDP?y62?TRQ^#-h{AbVpZU4$&nCU@<1|~9QAdcT(q0vUjO(x-hfcKFAPq(aR zNC$OB#K08mWpOG5x)IKOEW` z^30sNd_%`zLO>UQl##aVAy=cy+Zy#(gX)|#Et(vrhlkH~*SkcN%qzMOutg=7zVzvE z2yut(?O~!RY0qtiXjYflXc*5yW0syQAQmf&$DOR~&kK>)4IIbH& zngUE-5)u(W=W|3L1rDlH(SkAIPB-uRv<&*k@K+_|;Shs$M#6g`aBvmNDoiZF!@QD( zmsAXGgW2QZO-}tk=!v=*#fv0)6HZLRh$1&F3WS zaFZe2-QC#%(Rj#bFowuB8vvECUba984}mBljT(d{9sc`sM{IbUXDyLbk^sbJ*8DO! zT75OX0+HtYKVJ+llrV26FCi@N{%sdV)|8EhNPxs_G+bhA3$>5AuHZOq-&kNh-obvF zSn^DIbk;8?i<@RP8V*(m!-5iCfk;A}$&Azn3bJV|I#S9tbwLqR z!$pjogu70N5QE}`J9YOdvHCt6!Wk`hRSDTR9v@wfFjU^RLG-v*8mWZa*(i$xyO^W! zkr4IA*I{&dhk&X1R=Q{Lp%dO@zs;}vZqz2>>h5m3&q5#jSRrBz&Szq|e<6e?WuFz2 zxo&C(KWH3XL(~*NeX88eG6;w7AvDDPYQ(}Mf$$O0)UX5!d%PN_p^T+%uRfvb4#;sr zM9KJ}#WCsCB;$dFvpH@{kWin^1x&E-vMFZGKj1)Acdgb?p#haP|#p=o6SB$1fi+nuz>m3rzs{kK_Egqcd%zC zU;MjLVkXk{yYO)cY6Gzqa@g0<;W>xnZ3pw9=Ngz0@ZD^7PN%XF^0MW+PpiCjo+m=h zzqSVZ?%!!<3}Q=iUcY`VxspB}zJyTv9NHC}5@Q?HhCT$m{}=28o&t6zx6^mCW^;ah zMB||*qKN(B2*mX|4}wtmVtb;@YXSrW>FX7X6uuPv9&ZG}4U&UH!=&Lj4S<}@1UNjB zWv7E%RI^$0@{)xnkPiE}O?ZQ4N)UyC;98vORop3-Lo&39)HXVfj%9T0yC|tK`Y60Q zP{|CUC6Tb#YdISN93Jg9S_~iw2bW{6p~(;#@f2|ZV-$qa7rZYONU*7bAAaVih@~Qo zM8pw-HykU5$B12&NPTDoT9j~pfbRsrX@=9})0e@DZ-gL@h}*qyX(52*d5A(10LD-! z2G%oYlM}oRlG0py`__?d7uF{^um`O!ldQ01gI22)FO8W67Ki zK-^cx2nnsuhM7zZDkcQxu+14&4MQn5+exS(3YI3gX?D_SPdc5>gn`*-09UK=_{Z^& zjz?=#ELQsS%WO1Vu#pyCxpMM-AZ)PZFow0cHR=eXbg9USl-$;e;z5_^%bYfohY5ff zqdEKgx4)pnpTDfe$hYHf6wWP4VZ3~c+t#$K=U%gur2GT*Np2J9f0k^m+d!1p9uv%4 z!bU_wE$AlS?Zd+@{^3sIj0(6qIQZ|FqHT`IH#m7w`f(6G*rnPM#2*Wz{UJ!`jPy!CdkZaGaSL(8s6t7b$vK?Dk zZi5aRtJeSj?)$E^f;LH0N<;hD9*trQk7s8OnRSo_cJ%iR!`Q6K(saK}Q?aoNJZeUI zwbqY^u(DIU4%K`i0LP9w9ycV<&+t6!ifbDc-yW~*kO68w0#mvlxN~FySdz=C!ZQWS zJZ<5(jiRt=n&$@X5`-Y;2wTuH7i94>`2#p31^WBOav(zkxWuLBe4U@e>;N}RxjB=E z-sL6i+O!p7vuVvP-qkg?uzuRmOLRX*!~r7|6`3pHfGTCF%?Z?^7-|Z^V1F1GEDx~4 z6q8V~o3}qKs~eJ%woNh2c4tOrhZY=Siyb{ z!Z}0%EP=496;!b~k4KJ=j~On|CeDp3o9_GCEmF1FL@hAJ>~=d-a|?UFreqcQKZ`r9 zg`;F85$VnG&H&z50KE!)-;Yokl93ARv(CFGx9_L9fFC~AZm=)z+xzVndW7qnyd+rK zm7dL@NNVYkL=waVxrcC_*d8E?7&AA*k`q6-yw5TOKUze2gb)eeH{5ueTXT!5DYZ2w zJe_K|)ih-Py-bNRuCS4Gk0e?r6qR-}5#|7vULEqdTc{pU6haia!$)m%;X4YTy7XiS zKH3RhjK=HfbmsjAB^@a^NX{hhh?L&d6%&VRSruB8qfoTL%kOT9O>N@C3~nSe;Nqeg z>GgCnS(g*<56~cyUNW8Wgq3Avu&R;=*01!VsmEvpDC&;>XCjD1 zHUKS)vgstzlFjYx*4``f@kv!F8GddPMwc`F$IvhF{$t9r{M!QG0SlE-dw*=l8~^|S M07*qoM6N<$f+;peHUIzs diff --git a/wadsrc/static/filter/witchaven.witchaven2/graphics/logo.png b/wadsrc/static/filter/witchaven.witchaven2/graphics/logo.png deleted file mode 100644 index 823086c0205e04e83bcdcf99d42c4daf1a5d92d9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20862 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 diff --git a/wadsrc/static/menudef.txt b/wadsrc/static/menudef.txt index 097fa0f2e..10fddcb61 100644 --- a/wadsrc/static/menudef.txt +++ b/wadsrc/static/menudef.txt @@ -78,11 +78,10 @@ LISTMENU "MainMenu" WH1TextItem "$MNU_Help", "l", "HelpMenu" WH1TextItem "$MNU_QUITGAME", "q", "QuitMenu" } - /* ifgame(Witchaven2) { - position 160, 50 - Linespacing 14 + position 160, 35 + Linespacing 22 WH2TextItem "$MNU_NEWGAME", "n", "SkillMenu" //WH2TextItem "$MNU_MULTIPLAYER", "m", "MultiMenu" WH2TextItem "$MNU_OPTIONS", "o", "OptionsMenu" @@ -90,7 +89,6 @@ LISTMENU "MainMenu" WH2TextItem "$MNU_Help", "l", "HelpMenu" WH2TextItem "$MNU_QUITGAME", "q", "QuitMenu" } - */ } //------------------------------------------------------------------------------------------- @@ -172,19 +170,17 @@ LISTMENU "IngameMenu" WH1TextItem "$MNU_ENDGAME", "e", "EndgameMenu" WH1TextItem "$MNU_QUITGAME", "q", "QuitMenu" } - /* ifgame(Witchaven2) { - position 160, 50 - Linespacing 15 + position 160, 40 + Linespacing 22 WH2TextItem "$MNU_NEWGAME", "n", "SkillMenu" WH2TextItem "$MNU_OPTIONS", "o", "OptionsMenu" WH2TextItem "$MNU_LOADGAME", "l", "LoadGameMenu" WH2TextItem "$MNU_SAVEGAME", "s", "SaveGameMenu" - WH2TextItem "$MNU_ENDGAME", "e", ""EndgameMenu" + WH2TextItem "$MNU_ENDGAME", "e", "EndgameMenu" WH2TextItem "$MNU_QUITGAME", "q", "QuitMenu" } - */ } //------------------------------------------------------------------------------------------- @@ -250,14 +246,16 @@ LISTMENU "SkillMenu" WH1SkillItem "#00512", "$SKILL_HARD", "h", "StartGame 2" WH1SkillItem "#00513", "$SKILL_VERY_HARD", "v", "StartGame 3" } - /* ifgame(Witchaven2) { CaptionItem "$MNU_DIFFICULTY" - Position 35, 32 - Linespacing 17 + Position 120, 40 + Linespacing 22 + WH2SkillItem "#00510", "$SKILL_EASY", "e", "StartGame 0" + WH2SkillItem "#00511", "$SKILL_NORMAL", "m", "StartGame 1" + WH2SkillItem "#00512", "$SKILL_HARD", "h", "StartGame 2" + WH2SkillItem "#00513", "$SKILL_VERY_HARD", "v", "StartGame 3" } - */ } //------------------------------------------------------------------------------------------- @@ -317,9 +315,21 @@ ImageScroller "HelpMenu" ImageItem "#01787" // CREDIT4" ImageItem "#02691" // BETAPAGE" } + ifgame(Witchaven2) + { + ImageItem "#01064" //WEAPONS" + ImageItem "#01063" // SPELLS" + ImageItem "#01060" // POTIONS" + ImageItem "#01059" // WALKING" + ImageItem "#01061" // FLYING" + ImageItem "#01055" // CREDIT1" + ImageItem "#01057" // CREDIT2" + ImageItem "#01062" // CREDIT3" + ImageItem "#01056" // CREDIT4" + ImageItem "#01058" // BETAPAGE" + } } - //------------------------------------------------------------------------------------------- // // Credits menu. This is logically highly game specific. diff --git a/wadsrc/static/zscript.txt b/wadsrc/static/zscript.txt index 66a392323..d4098c964 100644 --- a/wadsrc/static/zscript.txt +++ b/wadsrc/static/zscript.txt @@ -33,3 +33,4 @@ version "4.3" #include "zscript/games/sw/ui/menu.zs" #include "zscript/games/exhumed/ui/menu.zs" #include "zscript/games/wh/ui/menu_wh1.zs" +#include "zscript/games/wh/ui/menu_wh2.zs" diff --git a/wadsrc/static/zscript/games/wh/ui/menu_wh2.zs b/wadsrc/static/zscript/games/wh/ui/menu_wh2.zs new file mode 100644 index 000000000..5f39d5175 --- /dev/null +++ b/wadsrc/static/zscript/games/wh/ui/menu_wh2.zs @@ -0,0 +1,116 @@ + +class WH2MenuDelegate : RazeMenuDelegate +{ + override int DrawCaption(String title, Font fnt, int y, bool drawit) + { + let font = generic_ui? NewConsoleFont : BigFont; // this ignores the passed font intentionally. + let fonth = font.GetGlyphHeight("A"); + let fontscale = 1.0; + double squash = 1.0; + if (drawit) + { + int width = font.StringWidth(title) * fontscale; + if (width > 315) + { + squash = 315. / width; + width = 315; + } + screen.DrawText(font, Font.CR_UNTRANSLATED, 160 - width / 2, 17 - fonth / 2, title, DTA_FullscreenScale, FSMode_Fit320x200Top, DTA_ScaleX, fontscale * squash, DTA_ScaleY, fontscale); + } + double fx, fy, fw, fh; + [fx, fy, fw, fh] = Screen.GetFullscreenRect(320, 200, FSMode_ScaleToFit43Top); + int h = fonth * 0.8; + return int((y+h) * fh / 200); // This must be the covered height of the header in true pixels. + return y; + } + + override bool DrawSelector(ListMenuDescriptor desc) + { + return true; + } +} + + +//============================================================================= +// +// text item +// +//============================================================================= + +class ListMenuItemWH2TextItem : ListMenuItemTextItem +{ + void Init(ListMenuDescriptor desc, String text, String hotkey, Name child, int param = 0) + { + Super.Init(desc, text, hotkey, child, param); + if (child == 'none') mEnabled = -1; + } + + void InitDirect(double x, double y, int height, String hotkey, String text, Font font, int color, int color2, Name child, int param = 0) + { + Super.InitDirect(x, y, height, hotkey, text, font, color, color2, child, param); + } + + override void Draw(bool selected, ListMenuDescriptor desc) + { + let gamefont = generic_ui ? NewSmallFont : BigFont; + int cr = generic_ui? Font.CR_Fire : Font.CR_UNDEFINED; + double scalex = 1.; + int trans = 0; + Color colr = Color(255, 255, 255, 255); + let fontscale = 1.0; + + double length = gamefont.StringWidth(mText) * fontscale; + double xpos = mXpos - length / 2; + if (xpos + length > 315) + { + xpos = 315 - length; + } + if (!selectable()) cr = Font.CR_BLACK; + else if (selected) + { + int mclock = MSTime() * 120 / 1000; + int light = 223 + (Build.calcSinTableValue(mclock<<4) / 512.); + colr = Color(255, light, light, light); + cr = Font.CR_GREEN; + } + Screen.DrawText(BigFont, cr, xpos, mYpos, mText, DTA_FullscreenScale, FSMode_Fit320x200, DTA_Color, colr, DTA_ScaleX, scalex * fontscale, DTA_ScaleY, fontscale); + } +} + +//============================================================================= +// +// text item +// +//============================================================================= + +class ListMenuItemWH2SkillItem : ListMenuItemTextItem +{ + TextureID skull; + void Init(ListMenuDescriptor desc, String icon, String text, String hotkey, Name child, int param = 0) + { + Super.Init(desc, text, hotkey, child, param); + skull = TexMan.CheckForTexture(icon); + } + + override void Draw(bool selected, ListMenuDescriptor desc) + { + let gamefont = generic_ui ? NewSmallFont : BigFont; + int cr = generic_ui? Font.CR_Fire : Font.CR_UNDEFINED; + double scalex = 1.; + int trans = 0; + Color colr = Color(255, 255, 255, 255); + let fontscale = 1; + + if (!selectable()) cr = Font.CR_BLACK; + else if (selected) + { + int mclock = MSTime() * 120 / 1000; + int light = 223 + (Build.calcSinTableValue(mclock<<4) / 512.); + colr = Color(255, light, light, light); + cr = Font.CR_GREEN; + } + screen.DrawTexture(skull, false, mXpos - 15, mYpos + 10, DTA_FullscreenScale, FSMode_Fit320x200Top, DTA_CenterOffsetRel, true, DTA_ScaleX, 0.6, DTA_ScaleY, 0.6, DTA_Alpha, selected? 1.0 : 0.5); + Screen.DrawText(BigFont, cr, mXpos, mYpos, mText, DTA_FullscreenScale, FSMode_Fit320x200, DTA_Color, colr, DTA_TranslationIndex, trans, DTA_ScaleX, scalex * fontscale, DTA_ScaleY, fontscale); + } +} +