diff --git a/src/g_game.cpp b/src/g_game.cpp index 92ccc6555..17cd67a7a 100644 --- a/src/g_game.cpp +++ b/src/g_game.cpp @@ -234,8 +234,6 @@ FString shotfile; AActor* bodyque[BODYQUESIZE]; int bodyqueslot; -void R_ExecuteSetViewSize (FViewWindow &viewwindow); - FString savename; FString BackupSaveName; diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index d8c46a1dd..7e8683eb1 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -327,6 +327,9 @@ void DBaseStatusBar::SetSize(int reltop, int hres, int vres) RelTop = reltop; HorizontalResolution = hres; VerticalResolution = vres; + int x, y; + V_CalcCleanFacs(hres, vres, SCREENWIDTH, SCREENHEIGHT, &x, &y); + defaultScale = { (double)x, (double)y }; CallSetScaled(st_scale); } @@ -1397,11 +1400,8 @@ void DBaseStatusBar::SerializeMessages(FSerializer &arc) void DBaseStatusBar::ScreenSizeChanged () { - st_scale.Callback (); - - int x, y; - V_CalcCleanFacs(HorizontalResolution, VerticalResolution, SCREENWIDTH, SCREENHEIGHT, &x, &y); - defaultScale = { (double)x, (double)y }; + // We need to recalculate the sizing info + SetSize(RelTop, HorizontalResolution, VerticalResolution); for (size_t i = 0; i < countof(Messages); ++i) { diff --git a/src/polyrenderer/poly_renderer.cpp b/src/polyrenderer/poly_renderer.cpp index 2e400975f..a8e6f34c2 100644 --- a/src/polyrenderer/poly_renderer.cpp +++ b/src/polyrenderer/poly_renderer.cpp @@ -63,7 +63,6 @@ void PolyRenderer::RenderView(player_t *player) int width = SCREENWIDTH; int height = SCREENHEIGHT; - int stHeight = gST_Y; float trueratio; ActiveRatio(width, height, &trueratio); //viewport->SetViewport(&Thread, width, height, trueratio); diff --git a/wadsrc/static/mapinfo/doomcommon.txt b/wadsrc/static/mapinfo/doomcommon.txt index c80a8a030..c033ce09c 100644 --- a/wadsrc/static/mapinfo/doomcommon.txt +++ b/wadsrc/static/mapinfo/doomcommon.txt @@ -26,8 +26,8 @@ gameinfo defaultbloodparticlecolor = "ff 00 00" backpacktype = "Backpack" armoricons = "ARM1A0", 0.5, "ARM2A0" - statusbar = "sbarinfo/doom.txt" - //statusbarclass = "DoomStatusBar" + //statusbar = "sbarinfo/doom.txt" + statusbarclass = "DoomStatusBar" intermissionmusic = "$MUSIC_DM2INT" intermissioncounter = true weaponslot = 1, "Fist", "Chainsaw" diff --git a/wadsrc/static/zscript.txt b/wadsrc/static/zscript.txt index 82987b55f..a8a1d2586 100644 --- a/wadsrc/static/zscript.txt +++ b/wadsrc/static/zscript.txt @@ -33,6 +33,7 @@ version "2.5" #include "zscript/statscreen/statscreen_coop.txt" #include "zscript/statusbar/statusbar.txt" +#include "zscript/statusbar/doom_sbar.txt" #include "zscript/statusbar/strife_sbar.txt" #include "zscript/statusbar/sbarinfowrapper.txt" diff --git a/wadsrc/static/zscript/shared/player.txt b/wadsrc/static/zscript/shared/player.txt index 8851242b0..a37617289 100644 --- a/wadsrc/static/zscript/shared/player.txt +++ b/wadsrc/static/zscript/shared/player.txt @@ -373,6 +373,27 @@ usercmd_t original_cmd; native float GetAutoaim() const; native bool GetNoAutostartMap() const; native void SetFOV(float fov); + + clearscope int fragSum () const + { + int i; + int allfrags = 0; + int playernum = mo.PlayerNumber(); + + for (i = 0; i < MAXPLAYERS; i++) + { + if (playeringame[i] + && i!=playernum) + { + allfrags += frags[i]; + } + } + + // JDC hack - negative frags. + allfrags -= frags[playernum]; + return allfrags; + } + } struct PlayerClass native diff --git a/wadsrc/static/zscript/statusbar/doom_sbar.txt b/wadsrc/static/zscript/statusbar/doom_sbar.txt new file mode 100644 index 000000000..79bc6e23c --- /dev/null +++ b/wadsrc/static/zscript/statusbar/doom_sbar.txt @@ -0,0 +1,203 @@ +class DoomStatusBar : BaseStatusBar +{ + // it is not really needed to precache all textures but should be good practice to reduce execution time. + enum eImg + { + imgMEDIA0, + imgPSTRA0, + imgSTBAR, + imgSTTPRCNT, + imgSTKEYS0, + imgSTKEYS1, + imgSTKEYS2, + imgSTKEYS3, + imgSTKEYS4, + imgSTKEYS5, + imgSTKEYS6, + imgSTKEYS7, + imgSTKEYS8, + imgSTARMS, + imgSTGNUM2, + imgSTGNUM3, + imgSTGNUM4, + imgSTGNUM5, + imgSTGNUM6, + imgSTGNUM7, + imgSTYSNUM2, + imgSTYSNUM3, + imgSTYSNUM4, + imgSTYSNUM5, + imgSTYSNUM6, + imgSTYSNUM7, + imgSTFBANY, + + NUMIMG + } + + TextureID Images[NUMIMG]; + int HUDFontSpacing; + + + override void Init() + { + Super.Init(); + SetSize(32, 320, 200); + DoCommonInit(); + } + + override void NewGame () + { + DoCommonInit (); + if (CPlayer != NULL) + { + AttachToPlayer (CPlayer); + } + } + + override void Draw (int state, double TicFrac) + { + Super.Draw (state, TicFrac); + + if (state == HUD_StatusBar) + { + BeginStatusBar(320, 200, 32); + DrawMainBar (TicFrac); + } + else if (state == HUD_Fullscreen) + { + BeginHUD(320, 200, 1., false); + DrawFullScreenStuff (); + } + } + + void DoCommonInit () + { + static const String LumpNames[] = + { + "MEDIA0", "PSTRA0", "STBAR", "STTPRCNT", "STKEYS0", + "STKEYS1", "STKEYS2", "STKEYS3", "STKEYS4", "STKEYS5", "STKEYS6", "STKEYS7", "STKEYS8", + "STARMS", + "STGNUM2", "STGNUM3", "STGNUM4", "STGNUM5", "STGNUM6", "STGNUM7", + "STYSNUM2", "STYSNUM3", "STYSNUM4", "STYSNUM5", "STYSNUM6", "STYSNUM7", + "STFBANY" + }; + + for(int i = 0; i < NUMIMG; i++) + { + Images[i] = TexMan.CheckForTexture(LumpNames[i], TexMan.TYPE_MiscPatch); + } + + Font fnt = "HUDFONT_DOOM"; + if (fnt != null) HudFontSpacing = fnt.GetCharWidth("0"); + } + + protected void DrawMainBar (double TicFrac) + { + //DrawTexture(Images[imgINVBACK], (0, 0), true, 1.0, itemAlign:ALIGN_OFFSETS); + //DrawTexture(Images[imgINVTOP], (0, -8), true, 1.0, itemAlign:ALIGN_OFFSETS); + + // Health + //DrawString("Indexfont_Strife_Green", FormatNumber(CPlayer.health, 3, 5, 0), (86, -6), 1.0, Font.CR_UNTRANSLATED, TEXT_RIGHT, 0, 7, true, 1, 1); + } + + protected void DrawFullScreenStuff () + { + Vector2 iconbox = (40, 20); + // Draw health + let berserk = CPlayer.mo.FindInventory("PowerStrength"); + DrawTexture(Images[berserk? imgPSTRA0 : imgMEDIA0], (20, -2), false, 1.0, ALIGN_BOTTOM|ALIGN_LEFT, iconbox, ALIGN_BOTTOM|ALIGN_HCENTER); + DrawString("HUDFONT_DOOM", FormatNumber(CPlayer.health, 3, 0, 0), (44, -20), 1., Font.CR_UNTRANSLATED, TEXT_LEFT, ALIGN_LEFT|ALIGN_BOTTOM, HUdFontSpacing, true, 2, 2); + + let armor = CPlayer.mo.FindInventory("BasicArmor"); + if (armor != null) + { + DrawTexture(armor.Icon, (20, -22), false, 1.0, ALIGN_BOTTOM|ALIGN_LEFT, iconbox, ALIGN_BOTTOM|ALIGN_HCENTER); + DrawString("HUDFONT_DOOM", FormatNumber(armor.Amount, 3, 0, 0), (44, -40), 1., Font.CR_UNTRANSLATED, TEXT_LEFT, ALIGN_LEFT|ALIGN_BOTTOM, HUdFontSpacing, true, 2, 2); + } + Inventory ammotype1, ammotype2; + int ammoamount1, ammoamount2; + [ammotype1, ammotype2, ammoamount1, ammoamount2] = GetCurrentAmmo(); + int invY = -20; + if (ammotype1 != null) + { + DrawTexture(ammotype1.Icon, (-14, -4), false, 1.0, ALIGN_BOTTOM|ALIGN_RIGHT, iconbox, ALIGN_BOTTOM|ALIGN_HCENTER); + DrawString("HUDFONT_DOOM", FormatNumber(ammoamount1, 3, 0, 0), (-25, -20), 1., Font.CR_UNTRANSLATED, TEXT_RIGHT, ALIGN_RIGHT|ALIGN_BOTTOM, HUdFontSpacing, true, 2, 2); + invY -= 20; + } + if (ammotype2 != null && ammotype2 != ammotype1) + { + DrawTexture(ammotype2.Icon, (-14, invY + 17), false, 1.0, ALIGN_BOTTOM|ALIGN_RIGHT, iconbox, ALIGN_BOTTOM|ALIGN_HCENTER); + DrawString("HUDFONT_DOOM", FormatNumber(ammoamount2, 3, 0, 0), (-25, invY), 1., Font.CR_UNTRANSLATED, TEXT_RIGHT, ALIGN_RIGHT|ALIGN_BOTTOM, HUdFontSpacing, true, 2, 2); + invY -= 20; + } + if (CPlayer.inventorytics == 0 && CPlayer.mo.InvSel != null) + { + DrawTexture(CPlayer.mo.InvSel.Icon, (-14, invY + 17), false, 1.0, ALIGN_BOTTOM|ALIGN_RIGHT, iconbox, ALIGN_BOTTOM|ALIGN_HCENTER); + DrawString("HUDFONT_DOOM", FormatNumber(CPlayer.mo.InvSel.Amount, 3, 0, 0), (-25, invY), 1., Font.CR_UNTRANSLATED, TEXT_RIGHT, ALIGN_RIGHT|ALIGN_BOTTOM, HUdFontSpacing, true, 2, 2); + } + if (deathmatch) + { + DrawString("HUDFONT_DOOM", FormatNumber(CPlayer.fragSum(), 3, 0, 0), (-3, -1), 1., Font.CR_UNTRANSLATED, TEXT_RIGHT, ALIGN_RIGHT|ALIGN_TOP, HUdFontSpacing, true, 2, 2); + } + //drawkeybar 100, vertical, reverserows, auto, -10, 2, 0, 3, auto; + } +} + +/* +statusbar normal // Standard Doom Status bar +{ + drawimage "STBAR", 0, 168; + drawimage "STTPRCNT", 90, 171; + drawimage "STTPRCNT", 221, 171; + drawnumber 3, HUDFONT_DOOM, untranslated, ammo1, 44, 171; + drawnumber 3, HUDFONT_DOOM, untranslated, health, 90, 171; + drawnumber 3, HUDFONT_DOOM, untranslated, armor, 221, 171; + + //keys + drawswitchableimage keyslot 2 && 5, "nullimage", "STKEYS0", "STKEYS3", "STKEYS6", 239, 171; + drawswitchableimage keyslot 3 && 6, "nullimage", "STKEYS1", "STKEYS4", "STKEYS7", 239, 181; + drawswitchableimage keyslot 1 && 4, "nullimage", "STKEYS2", "STKEYS5", "STKEYS8", 239, 191; + + drawnumber 3, INDEXFONT_DOOM, untranslated, ammo(Clip), 288, 173; + drawnumber 3, INDEXFONT_DOOM, untranslated, ammo(Shell), 288, 179; + drawnumber 3, INDEXFONT_DOOM, untranslated, ammo(RocketAmmo), 288, 185; + drawnumber 3, INDEXFONT_DOOM, untranslated, ammo(Cell), 288, 191; + + drawnumber 3, INDEXFONT_DOOM, untranslated, ammocapacity(Clip), 314, 173; + drawnumber 3, INDEXFONT_DOOM, untranslated, ammocapacity(Shell), 314, 179; + drawnumber 3, INDEXFONT_DOOM, untranslated, ammocapacity(RocketAmmo), 314, 185; + drawnumber 3, INDEXFONT_DOOM, untranslated, ammocapacity(Cell), 314, 191; + gamemode deathmatch, teamgame + { + drawnumber 2, HUDFONT_DOOM, untranslated, frags, 138, 171; + } + gamemode cooperative, singleplayer + { + drawimage "STARMS", 104, 168; + drawswitchableimage weaponslot 2, "STGNUM2", "STYSNUM2", 111, 172; + drawswitchableimage weaponslot 3, "STGNUM3", "STYSNUM3", 123, 172; + drawswitchableimage weaponslot 4, "STGNUM4", "STYSNUM4", 135, 172; + drawswitchableimage weaponslot 5, "STGNUM5", "STYSNUM5", 111, 182; + drawswitchableimage weaponslot 6, "STGNUM6", "STYSNUM6", 123, 182; + drawswitchableimage weaponslot 7, "STGNUM7", "STYSNUM7", 135, 182; + } + gamemode cooperative, deathmatch, teamgame + { + drawimage translatable "STFBANY", 143, 169; + } + drawselectedinventory alternateonempty, INDEXFONT, 143, 168 + { + drawmugshot "STF", 5, 143, 168; + } +} + +statusbar inventory // Standard bar overlay (ZDoom Addition) +{ + drawinventorybar Doom, 7, INDEXFONT, 50, 170; +} + +statusbar inventoryfullscreen, fullscreenoffsets // ZDoom HUD overlay. +{ + drawinventorybar Doom, translucent, 7, INDEXFONT, -106+center, -31; +} +*/ \ No newline at end of file diff --git a/wadsrc/static/zscript/statusbar/strife_sbar.txt b/wadsrc/static/zscript/statusbar/strife_sbar.txt index cb2ef8a5c..03f12ca54 100644 --- a/wadsrc/static/zscript/statusbar/strife_sbar.txt +++ b/wadsrc/static/zscript/statusbar/strife_sbar.txt @@ -78,21 +78,22 @@ class StrifeStatusBar : BaseStatusBar if (state == HUD_StatusBar) { - fullscreenoffsets = false; + BeginStatusBar(320, 200, 32); DrawMainBar (TicFrac); } else { if (state == HUD_Fullscreen) { - fullscreenoffsets = true; + BeginHUD(320, 200, 1., false); DrawFullScreenStuff (); } // Draw pop screen (log, keys, and status) if (CurrentPop != POP_None && PopHeight < 0) { - fullscreenoffsets = false; + // This uses direct low level draw commands and would otherwise require calling + // BeginStatusBar(320, 200, false, true); DrawPopScreen (screen.GetHeight(), TicFrac); } } @@ -440,7 +441,6 @@ class StrifeStatusBar : BaseStatusBar } } } - fullscreenoffsets = false; } protected void DrawPopScreen (int bottom, double TicFrac)