diff --git a/source/blood/src/blood.cpp b/source/blood/src/blood.cpp index acf131796..921f3c348 100644 --- a/source/blood/src/blood.cpp +++ b/source/blood/src/blood.cpp @@ -530,7 +530,6 @@ void StartLevel(GAMEOPTIONS *gameOptions) M_ClearMenus(); // viewSetMessage(""); viewSetErrorMessage(""); - viewResizeView(gViewSize); netWaitForEveryone(0); totalclock = 0; paused = 0; @@ -676,7 +675,6 @@ void ProcessFrame(void) else { gEndGameMgr.Setup(); - viewResizeView(gViewSize); } } } @@ -780,7 +778,6 @@ static void app_init() Printf("Initializing network users\n"); netInitialize(true); videoInit(); - hud_size.Callback(); Printf("Initializing sound system\n"); sndInit(); registerosdcommands(); @@ -1309,9 +1306,14 @@ void GameInterface::FreeGameData() netDeinitialize(); } -void GameInterface::UpdateScreenSize() +ReservedSpace GameInterface::GetReservedScreenSpace(int viewsize) { - viewResizeView(gViewSize); + int top = 0; + if (gGameOptions.nGameType > 0 && gGameOptions.nGameType <= 3) + { + top = (tilesiz[2229].y * ((gNetPlayers + 3) / 4)); + } + return { top, 25 }; } diff --git a/source/blood/src/blood.h b/source/blood/src/blood.h index b71eec3a8..8eadf4ef3 100644 --- a/source/blood/src/blood.h +++ b/source/blood/src/blood.h @@ -108,10 +108,8 @@ struct GameInterface : ::GameInterface { const char* Name() override { return "Blood"; } int app_main() override; - void UpdateScreenSize() override; bool GenerateSavePic() override; void FreeGameData() override; - void set_hud_layout(int size) override; FString statFPS() override; FSavegameInfo GetSaveSig() override; void MenuOpened() override; @@ -126,6 +124,7 @@ struct GameInterface : ::GameInterface void QuitToTitle() override; FString GetCoordString() override; void clearlocalinputstate() override; + ReservedSpace GetReservedScreenSpace(int viewsize) override; GameStats getStats() override; }; diff --git a/source/blood/src/controls.cpp b/source/blood/src/controls.cpp index 42b736255..7931511d7 100644 --- a/source/blood/src/controls.cpp +++ b/source/blood/src/controls.cpp @@ -63,13 +63,6 @@ int32_t GetTime(void) return (int32_t)totalclock; } -void GameInterface::set_hud_layout(int layout) -{ - layout = clamp(7 - layout, 0, 7); // need to reverse the order because menu sliders always have low values to the left. - viewResizeView(layout); -} - - fix16_t gViewLook, gViewAngle; float gViewAngleAdjust; float gViewLookAdjust; @@ -125,8 +118,9 @@ void LocalKeys(void) } else { - gPlayerMsg.Set(*CombatMacros[fk]); - gPlayerMsg.Send(); + // todo: Open chat editor with the specified text + //gPlayerMsg.Set(*CombatMacros[fk]); + //gPlayerMsg.Send(); } buttonMap.ClearButton(gamefunc_Third_Person_View); return; diff --git a/source/blood/src/map2d.cpp b/source/blood/src/map2d.cpp index b7e0010b2..4ed15ebff 100644 --- a/source/blood/src/map2d.cpp +++ b/source/blood/src/map2d.cpp @@ -30,6 +30,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "view.h" #include "v_2ddrawer.h" #include "v_draw.h" +#include "statusbar.h" BEGIN_BLD_NS @@ -191,10 +192,9 @@ void CViewMap::sub_25C74(void) if (!bActive) return; char tm = 0; - int viewSize = gViewSize; - if (gViewSize > 3) + if (windowxy1.x > 0) { - viewResizeView(3); + setViewport(Hud_Stbar); tm = 1; } // only clear the actual window. @@ -207,12 +207,17 @@ void CViewMap::sub_25C74(void) sprintf(pBuffer, "%s: %s", pFilename, pTitle); else sprintf(pBuffer, "%s", pFilename); +#if 0 int nViewY; - if (gViewSize > 3) + if (g ViewSize > 3) nViewY = gViewY1S-16; else nViewY = gViewY0S+1; viewDrawText(3, pBuffer, gViewX1S /2, nViewY, -128, 0, 2, 0, 256); +#else + // This needs fixing across games, so for the time being just print the text into the upper left corner + viewDrawText(3, pBuffer, 3, 3, -128, 0, 0, 0, 256); +#endif #if 0 // needs to be generalized if (gViewMap.bFollowMode) @@ -221,7 +226,7 @@ void CViewMap::sub_25C74(void) Printf(PRINT_NOTIFY, "MAP SCROLL MODE\n"); #endif if (tm) - viewResizeView(viewSize); + setViewport(hud_size); } void CViewMap::sub_25DB0(spritetype *pSprite) diff --git a/source/blood/src/messages.cpp b/source/blood/src/messages.cpp index 46dc81e84..34cb8238e 100644 --- a/source/blood/src/messages.cpp +++ b/source/blood/src/messages.cpp @@ -41,8 +41,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. BEGIN_BLD_NS -CPlayerMsg gPlayerMsg; - void sub_5A928(void) { for (int i = 0; i < buttonMap.NumButtons(); i++) @@ -277,89 +275,6 @@ void LevelWarp(int nEpisode, int nLevel) levelSetupOptions(nEpisode, nLevel); StartLevel(&gGameOptions); levelTryPlayMusicOrNothing(nEpisode, nLevel); - viewResizeView(gViewSize); -} - -void CPlayerMsg::Clear(void) -{ - text[0] = 0; - at0 = 0; -} - -void CPlayerMsg::Term(void) -{ - Clear(); -} - -void CPlayerMsg::Draw(void) -{ - char buffer[44]; - strcpy(buffer, text); - if ((int)totalclock & 16) - strcat(buffer, "_"); - int x = gViewMode == 3 ? gViewX0S : 0; - int y = gViewMode == 3 ? gViewY0S : 0; - if (gViewSize >= 1) - y += tilesiz[2229].y*((gNetPlayers+3)/4); - viewDrawText(0, buffer, x+1,y+1, -128, 0, 0, false, 256); -} - -bool CPlayerMsg::AddChar(char ch) -{ - if (at0 < 40) - { - text[at0++] = ch; - text[at0] = 0; - return true; - } - return false; -} - -void CPlayerMsg::DelChar(void) -{ - if (at0 > 0) - text[--at0] = 0; -} - -void CPlayerMsg::Set(const char * pzString) -{ - strncpy(text, pzString, 40); - at0 = ClipHigh(strlen(pzString), 40); - text[at0] = 0; -} - -void CPlayerMsg::Send(void) -{ - if (VanillaMode() || !IsWhitespaceOnly(text)) - { - //netBroadcastMessage(myconnectindex, text); - if (!VanillaMode()) - { - char *myName = gProfile[myconnectindex].name; - char szTemp[128]; - sprintf(szTemp, "%s: %s", myName, text); - viewSetMessage(szTemp, 10); // 10: dark blue - } - else - viewSetMessage(text); - } - - Term(); - inputState.keyFlushScans(); -} - -void CPlayerMsg::ProcessKeys(void) -{ - if (inputState.GetKeyStatus(sc_Escape)) Term(); -} - -bool CPlayerMsg::IsWhitespaceOnly(const char * const pzString) -{ - const char *p = pzString; - while (*p != 0) - if (*p++ > 32) - return false; - return true; } bool bPlayerCheated = false; diff --git a/source/blood/src/messages.h b/source/blood/src/messages.h index e6f90e828..910fa70fd 100644 --- a/source/blood/src/messages.h +++ b/source/blood/src/messages.h @@ -39,24 +39,6 @@ enum MESSAGE_PRIORITY { MESSAGE_PRIORITY_SYSTEM = 100 }; -class CPlayerMsg -{ -public: - int at0; - char text[41]; - CPlayerMsg() { at0 = 0; text[0] = 0; } - void Clear(void); - void Term(void); - void Draw(void); - bool AddChar(char); - void DelChar(void); - void Set(const char *pzString); - void Send(void); - void ProcessKeys(void); -private: - bool IsWhitespaceOnly(const char* const pzString); -}; - enum CHEATCODE { kCheatNone = 0, @@ -103,8 +85,6 @@ enum CHEATCODE extern bool bPlayerCheated; void cheatReset(void); -extern CPlayerMsg gPlayerMsg; - void SetAmmo(bool stat); void SetWeapons(bool stat); void SetToys(bool stat); diff --git a/source/blood/src/osdcmd.cpp b/source/blood/src/osdcmd.cpp index ee8971246..c720577c4 100644 --- a/source/blood/src/osdcmd.cpp +++ b/source/blood/src/osdcmd.cpp @@ -81,7 +81,6 @@ static int osdcmd_map(CCmdFuncPtr parm) } levelSetupOptions(gGameOptions.nEpisode, gGameOptions.nLevel); StartLevel(&gGameOptions); - viewResizeView(gViewSize); return CCMD_OK; } diff --git a/source/blood/src/sbar.cpp b/source/blood/src/sbar.cpp index 11d4c5507..e5411ae0f 100644 --- a/source/blood/src/sbar.cpp +++ b/source/blood/src/sbar.cpp @@ -489,7 +489,7 @@ private: void viewDrawCtfHud(ClockTicks arg) { - if (0 == gViewSize) + if (hud_size == Hud_Nothing) { flashTeamScore(arg, 0, false); flashTeamScore(arg, 1, false); @@ -748,13 +748,11 @@ private: nPalette = 10; } - if (gViewSize < 0) return; - - if (gViewSize == 1) + if (hud_size == Hud_full) { DrawHUD2(); } - else if (gViewSize <= 2) + else if (hud_size > Hud_Stbar) { BeginStatusBar(320, 200, 28); if (pPlayer->throwPower) @@ -762,11 +760,11 @@ private: else drawInventory(pPlayer, 166, 200 - tilesiz[2201].y / 2); } - if (gViewSize == 2) + if (hud_size == Hud_Mini) { DrawHUD1(nPalette); } - else if (gViewSize > 2) + else if (hud_size <= Hud_StbarOverlay) { DrawStatusBar(nPalette); } @@ -802,22 +800,22 @@ static void UpdateFrame(void) { auto tex = tileGetTexture(kBackTile); - twod->AddFlatFill(0, 0, xdim, gViewY0 - 3, tex); - twod->AddFlatFill(0, gViewY1 + 4, xdim, ydim, tex); - twod->AddFlatFill(0, gViewY0 - 3, gViewX0 - 3, gViewY1 + 4, tex); - twod->AddFlatFill(gViewX1 + 4, gViewY0 - 3, xdim, gViewY1 + 4, tex); + twod->AddFlatFill(0, 0, xdim, windowxy1.y - 3, tex); + twod->AddFlatFill(0, windowxy2.y + 4, xdim, ydim, tex); + twod->AddFlatFill(0, windowxy1.y - 3, windowxy1.x - 3, windowxy2.y + 4, tex); + twod->AddFlatFill(windowxy2.x + 4, windowxy1.y - 3, xdim, windowxy2.y + 4, tex); - twod->AddFlatFill(gViewX0 - 3, gViewY0 - 3, gViewX0, gViewY1 + 1, tex, 0, 1, 0xff545454); - twod->AddFlatFill(gViewX0, gViewY0 - 3, gViewX1 + 4, gViewY0, tex, 0, 1, 0xff545454); - twod->AddFlatFill(gViewX1 + 1, gViewY0, gViewX1 + 4, gViewY1 + 4, tex, 0, 1, 0xff2a2a2a); - twod->AddFlatFill(gViewX0 - 3, gViewY1 + 1, gViewX1 + 1, gViewY1 + 4, tex, 0, 1, 0xff2a2a2a); + twod->AddFlatFill(windowxy1.x - 3, windowxy1.y - 3, windowxy1.x, windowxy2.y + 1, tex, 0, 1, 0xff545454); + twod->AddFlatFill(windowxy1.x, windowxy1.y - 3, windowxy2.x + 4, windowxy1.y, tex, 0, 1, 0xff545454); + twod->AddFlatFill(windowxy2.x + 1, windowxy1.y, windowxy2.x + 4, windowxy2.y + 4, tex, 0, 1, 0xff2a2a2a); + twod->AddFlatFill(windowxy1.x - 3, windowxy2.y + 1, windowxy2.x + 1, windowxy2.y + 4, tex, 0, 1, 0xff2a2a2a); } void UpdateStatusBar(ClockTicks arg) { DBloodStatusBar sbar; - if (gViewMode == 3 && gViewSize > 2) + if (gViewMode == 3 && hud_size <= Hud_Stbar) { UpdateFrame(); } diff --git a/source/blood/src/view.cpp b/source/blood/src/view.cpp index 7bf6c2724..4dea8e1ee 100644 --- a/source/blood/src/view.cpp +++ b/source/blood/src/view.cpp @@ -62,7 +62,6 @@ struct INTERPOLATE { }; int gViewMode = 3; -int gViewSize = 2; double gInterpolate; int nInterpolations; @@ -74,11 +73,6 @@ char gInterpolateSector[(kMaxSectors+7)>>3]; INTERPOLATE gInterpolation[kMaxInterpolations]; -int gViewXCenter, gViewYCenter; -int gViewX0, gViewY0, gViewX1, gViewY1; -int gViewX0S, gViewY0S, gViewX1S, gViewY1S; -int xscale, yscale, xstep, ystep; - int gScreenTilt; @@ -116,7 +110,6 @@ void viewToggle(int viewMode) else { gViewMode = 3; - viewResizeView(gViewSize); } } @@ -365,60 +358,6 @@ void viewInit(void) gViewMap.sub_25C38(0, 0, gZoom, 0, gFollowMap); } -void viewResizeView(int size) -{ - int xdimcorrect = ClipHigh(scale(ydim, 4, 3), xdim); - gViewXCenter = xdim-xdim/2; - gViewYCenter = ydim-ydim/2; - xscale = divscale16(xdim, 320); - int xscalecorrect = divscale16(xdimcorrect, 320); - yscale = divscale16(ydim, 200); - xstep = divscale16(320, xdim); - ystep = divscale16(200, ydim); - gViewSize = ClipRange(size, 0, 7); - if (gViewSize <= 2) - { - gViewX0 = 0; - gViewX1 = xdim-1; - gViewY0 = 0; - gViewY1 = ydim-1; - if (gGameOptions.nGameType > 0 && gGameOptions.nGameType <= 3) - { - gViewY0 = (tilesiz[2229].y*ydim*((gNetPlayers+3)/4))/200; - } - gViewX0S = divscale16(gViewX0, xscalecorrect); - gViewY0S = divscale16(gViewY0, yscale); - gViewX1S = divscale16(gViewX1, xscalecorrect); - gViewY1S = divscale16(gViewY1, yscale); - } - else - { - gViewX0 = 0; - gViewY0 = 0; - gViewX1 = xdim-1; - int gy1 = (25 * ydim) / 200; - if (gViewSize == 3) // full status bar must scale the bottom to the actual display height. - gy1 = Scale(gy1, hud_scale, 100); - gViewY1 = ydim-1- gy1; - if (gGameOptions.nGameType > 0 && gGameOptions.nGameType <= 3) - { - gViewY0 = (tilesiz[2229].y*ydim*((gNetPlayers+3)/4))/200; - } - - int height = gViewY1-gViewY0; - gViewX0 += mulscale16(xdim*(gViewSize-3),4096); - gViewX1 -= mulscale16(xdim*(gViewSize-3),4096); - gViewY0 += mulscale16(height*(gViewSize-3),4096); - gViewY1 -= mulscale16(height*(gViewSize-3),4096); - gViewX0S = divscale16(gViewX0, xscalecorrect); - gViewY0S = divscale16(gViewY0, yscale); - gViewX1S = divscale16(gViewX1, xscalecorrect); - gViewY1S = divscale16(gViewY1, yscale); - } - videoSetViewableArea(gViewX0, gViewY0, gViewX1, gViewY1); -} - - void viewDrawInterface(ClockTicks arg) { UpdateStatusBar(arg); diff --git a/source/blood/src/view.h b/source/blood/src/view.h index a5437aad6..7952bff1f 100644 --- a/source/blood/src/view.h +++ b/source/blood/src/view.h @@ -140,10 +140,7 @@ extern char gInterpolateSprite[]; extern char gInterpolateWall[]; extern char gInterpolateSector[]; extern LOCATION gPrevSpriteLoc[kMaxSprites]; -extern int gViewSize, gViewMode; -extern int gViewXCenter, gViewYCenter; -extern int gViewX0, gViewY0, gViewX1, gViewY1; -extern int gViewX0S, gViewY0S, gViewX1S, gViewY1S; +extern int gViewMode; extern int gLastPal; extern double gInterpolate; @@ -162,7 +159,6 @@ void viewDrawText(int nFont, const char *pString, int x, int y, int nShade, int void InitStatusBar(void); void UpdateStatusBar(ClockTicks arg); void viewInit(void); -void viewResizeView(int size); void viewDrawInterface(ClockTicks arg); void viewProcessSprites(int32_t cX, int32_t cY, int32_t cZ, int32_t cA, int32_t smooth); void CalcOtherPosition(spritetype *pSprite, int *pX, int *pY, int *pZ, int *vsectnum, int nAng, int zm); diff --git a/source/core/gamecontrol.cpp b/source/core/gamecontrol.cpp index 09870cd46..e61c2f551 100644 --- a/source/core/gamecontrol.cpp +++ b/source/core/gamecontrol.cpp @@ -67,6 +67,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. #include "mapinfo.h" #include "menustate.h" #include "screenjob.h" +#include "statusbar.h" CVAR(Bool, autoloadlights, true, CVAR_ARCHIVE|CVAR_GLOBALCONFIG) CVAR(Bool, autoloadbrightmaps, true, CVAR_ARCHIVE | CVAR_GLOBALCONFIG) @@ -770,21 +771,12 @@ int RunGame() if (g_gameType & GAMEFLAG_BLOOD) { mus_redbook.SetGenericRepDefault(false, CVAR_Bool); // Blood should default to CD Audio off - all other games must default to on. - hud_size.SetGenericRepDefault(6, CVAR_Int); - hud_size_max = 7; } if (g_gameType & GAMEFLAG_SW) { - hud_size.SetGenericRepDefault(8, CVAR_Int); - hud_size_max = 9; cl_weaponswitch.SetGenericRepDefault(1, CVAR_Int); if (cl_weaponswitch > 1) cl_weaponswitch = 1; } - if (g_gameType & GAMEFLAG_PSEXHUMED) - { - hud_size.SetGenericRepDefault(7, CVAR_Int); - hud_size_max = 8; - } G_ReadConfig(currentGame); @@ -872,6 +864,7 @@ void videoInit() GLInterface.Init(screen->GetWidth()); GLInterface.InitGLState(4, 4/*glmultisample*/); screen->SetTextureFilterMode(); + setViewport(hud_size); } void G_FatalEngineError(void) diff --git a/source/core/gamecvars.cpp b/source/core/gamecvars.cpp index 6c7e3d9ab..948cf9484 100644 --- a/source/core/gamecvars.cpp +++ b/source/core/gamecvars.cpp @@ -46,6 +46,7 @@ #include "gstrings.h" #include "quotemgr.h" #include "gamestruct.h" +#include "statusbar.h" #define CVAR_FRONTEND_BLOOD 0 #define CVAR_FRONTEND_DUKELIKE 0 @@ -162,16 +163,11 @@ CUSTOM_CVARD(Int, snd_speech, 1, CVAR_ARCHIVE|CVAR_GLOBALCONFIG, "enables/disabl // HUD -int hud_size_max = 11; // The maximum is different for each game - -CUSTOM_CVARD(Int, hud_size, 9, CVAR_ARCHIVE | CVAR_NOINITCALL, "Defines the HUD size and style") +CUSTOM_CVARD(Int, hud_size, Hud_Stbar, CVAR_ARCHIVE | CVAR_NOINITCALL, "Defines the HUD size and style") { if (self < 0) self = 0; - else if (self > hud_size_max) self = hud_size_max; - else - { - gi->set_hud_layout(self); - } + else if (self > Hud_Nothing) self = Hud_Nothing; + else setViewport(self); } // This is for game code to change the size, so that the range checks remain isolated here. @@ -182,7 +178,7 @@ bool G_ChangeHudLayout(int direction) hud_size = hud_size - 1; return true; } - else if (direction > 0 && hud_size < hud_size_max) + else if (direction > 0 && hud_size < Hud_Nothing) { hud_size = hud_size + 1; return true; @@ -204,7 +200,7 @@ CUSTOM_CVARD(Int, hud_scale, 100, CVAR_ARCHIVE | CVAR_NOINITCALL, "changes the h { if (self < 36) self = 36; else if (self > 100) self = 100; - else gi->UpdateScreenSize(); + else setViewport(hud_size); } CCMD(scaleup) diff --git a/source/core/gamecvars.h b/source/core/gamecvars.h index c0c26df00..913fb07b3 100644 --- a/source/core/gamecvars.h +++ b/source/core/gamecvars.h @@ -119,3 +119,19 @@ bool G_ChangeHudLayout(int direction); bool G_CheckAutorun(bool button); inline int G_FPSLimit(void) { return 1; } bool G_AllowAutoload(); + +enum EHudSize +{ + Hud_Current = -1, + Hud_Frame50 = 0, + Hud_Frame60, + Hud_Frame70, + Hud_Frame80, + Hud_Frame90, + Hud_Stbar, + Hud_StbarOverlay, + Hud_Mini, + Hud_full, + Hud_Nothing, + Hud_MAX +}; diff --git a/source/core/gamestruct.h b/source/core/gamestruct.h index 884d7a5b0..5583ff43c 100644 --- a/source/core/gamestruct.h +++ b/source/core/gamestruct.h @@ -45,6 +45,11 @@ struct FSaveGameNode } }; +struct ReservedSpace +{ + int top; + int statusbar; +}; enum EMenuSounds : int; @@ -57,7 +62,6 @@ struct GameInterface virtual void clearlocalinputstate() {} virtual void UpdateScreenSize() {} virtual void FreeGameData() {} - virtual void set_hud_layout(int size) = 0; virtual bool automapActive() { return false; } virtual void PlayHudSound() {} virtual FString statFPS() { return "FPS display not available"; } @@ -85,6 +89,7 @@ struct GameInterface virtual FString GetCoordString() { return "'stat coord' not implemented"; } virtual bool CheatAllowed(bool printmsg) { return true; } virtual void ExitFromMenu() { throw CExitEvent(0); } + virtual ReservedSpace GetReservedScreenSpace(int viewsize) { return { 0, 0 }; } }; diff --git a/source/core/inputstate.cpp b/source/core/inputstate.cpp index 6d00225da..ca6d079b9 100644 --- a/source/core/inputstate.cpp +++ b/source/core/inputstate.cpp @@ -37,6 +37,7 @@ #include "build.h" #include "gamecvars.h" #include "v_video.h" +#include "statusbar.h" //========================================================================== // @@ -161,7 +162,7 @@ int32_t handleevents(void) if (setsizeneeded) { videoSetGameMode(vid_fullscreen, SCREENWIDTH, SCREENHEIGHT, 32, 1); - if (gi) gi->UpdateScreenSize(); + setViewport(hud_size); setsizeneeded = false; } diff --git a/source/core/statusbar.cpp b/source/core/statusbar.cpp index 5c48719a6..e11d7f315 100644 --- a/source/core/statusbar.cpp +++ b/source/core/statusbar.cpp @@ -35,6 +35,7 @@ #include +#include "build.h" #include "templates.h" #include "statusbar.h" #include "c_cvars.h" @@ -55,6 +56,8 @@ #include "v_font.h" #include "v_draw.h" #include "gamecvars.h" +#include "m_fixed.h" +#include "gamestruct.h" #include "../version.h" @@ -662,7 +665,11 @@ static DObject *InitObject(PClass *type, int paramnum, VM_ARGS) return obj; } - +//============================================================================ +// +// +// +//============================================================================ enum ENumFlags { @@ -689,6 +696,12 @@ void FormatNumber(int number, int minsize, int maxsize, int flags, const FString else fmt.Format("%s%*d", prefix.GetChars(), minsize, number); } +//============================================================================ +// +// +// +//============================================================================ + void DBaseStatusBar::PrintLevelStats(FLevelStats &stats) { double y; @@ -730,4 +743,49 @@ void DBaseStatusBar::PrintLevelStats(FLevelStats &stats) text.Format(TEXTCOLOR_ESCAPESTR "%cT: " TEXTCOLOR_ESCAPESTR "%c%d:%02d", stats.letterColor+'A', stats.standardColor + 'A', stats.time / 60000, (stats.time % 60000) / 1000); DrawText(twod, stats.font, CR_UNTRANSLATED, 2 * hud_statscale, y, text, DTA_ScaleX, scale, DTA_ScaleY, scale, TAG_DONE); -} \ No newline at end of file +} + +//============================================================================ +// +// +// +//============================================================================ + +void setViewport(int viewSize) +{ + int x0, y0, x1, y1; + if (screen == nullptr) return; + int xdim = screen->GetWidth(); + int ydim = screen->GetHeight(); + if (xdim == 0 || ydim == 0) return; + auto reserved = gi->GetReservedScreenSpace(viewSize); + reserved.top = (reserved.top * hud_scale * ydim) / 20000; + reserved.statusbar = (reserved.statusbar * hud_scale * ydim) / 20000; + + int xdimcorrect = std::min(Scale(ydim, 4, 3), xdim); + if (viewSize > Hud_Stbar) + { + x0 = 0; + x1 = xdim - 1; + y0 = reserved.top; + y1 = ydim - 1; + } + else + { + x0 = 0; + y0 = reserved.top; + x1 = xdim - 1; + y1 = ydim - 1 - reserved.statusbar; + + int height = y1 - y0; + int frameheight = (height * (5 - viewSize) / 20); + int framewidth = Scale(frameheight, xdim, y1+1); + x0 += framewidth; + x1 -= framewidth; + y0 += frameheight; + y1 -= frameheight; + } + videoSetViewableArea(x0, y0, x1, y1); +} + + diff --git a/source/core/statusbar.h b/source/core/statusbar.h index 01d45b9bb..d8c2c4aae 100644 --- a/source/core/statusbar.h +++ b/source/core/statusbar.h @@ -42,6 +42,7 @@ class player_t; struct FRemapTable; +#if 0 enum EHudState { HUD_StatusBar, @@ -50,6 +51,7 @@ enum EHudState HUD_AltHud // Used for passing through popups to the alt hud }; +#endif enum EMonospacing : int; @@ -339,5 +341,6 @@ enum DI_Flags }; void SBar_DrawString(DBaseStatusBar* self, DHUDFont* font, const FString& string, double x, double y, int flags, int trans, double alpha, int wrapwidth, int linespacing, double scaleX, double scaleY); +void setViewport(int viewSize); #endif /* __SBAR_H__ */ diff --git a/source/exhumed/src/exhumed.cpp b/source/exhumed/src/exhumed.cpp index 49d649c8f..2b16b1689 100644 --- a/source/exhumed/src/exhumed.cpp +++ b/source/exhumed/src/exhumed.cpp @@ -968,25 +968,6 @@ static const char *safeStrtok(char *s, const char *d) } -void GameInterface::set_hud_layout(int layout) -{ - if (layout == 8) - { - if (!bFullScreen) - { - bFullScreen = true; - screensize = 0; - UnMaskStatus(); - } - } - else - { - screensize = (7 - clamp(layout, 0, 7)) * 2; - bFullScreen = false; - UpdateScreenSize(); - } -} - void CheckKeys() { if (buttonMap.ButtonDown(gamefunc_Enlarge_Screen)) @@ -3248,10 +3229,26 @@ bool GameInterface::CanSave() return !bRecord && !bPlayback && !paused && !bInDemo && nTotalPlayers == 1; } +#if 0 void GameInterface::UpdateScreenSize() { - Powerslave::UpdateScreenSize(); + if (hud_size == 8) + { + if (!bFullScreen) + { + bFullScreen = true; + screensize = 0; + UnMaskStatus(); + } + } + else + { + screensize = (7 - clamp(*hud_size, 0, 7)) * 2; + bFullScreen = false; + Powerslave::UpdateScreenSize(); + } } +#endif ::GameInterface* CreateInterface() diff --git a/source/exhumed/src/exhumed.h b/source/exhumed/src/exhumed.h index 872445601..30ae676ea 100644 --- a/source/exhumed/src/exhumed.h +++ b/source/exhumed/src/exhumed.h @@ -336,9 +336,7 @@ struct GameInterface : ::GameInterface { const char* Name() override { return "Exhumed"; } int app_main() override; - void UpdateScreenSize() override; bool GenerateSavePic() override; - void set_hud_layout(int size) override; void DrawNativeMenuText(int fontnum, int state, double xpos, double ypos, float fontscale, const char* text, int flags) override; void MenuOpened() override; void MenuSound(EMenuSounds snd) override; diff --git a/source/games/duke/src/duke3d.h b/source/games/duke/src/duke3d.h index d3826e2c2..c76de2be7 100644 --- a/source/games/duke/src/duke3d.h +++ b/source/games/duke/src/duke3d.h @@ -31,14 +31,12 @@ BEGIN_DUKE_NS extern FFont* IndexFont; extern FFont* DigiFont; -struct GameInterface : ::GameInterface +struct GameInterface : public ::GameInterface { const char* Name() override { return "Duke"; } int app_main() override; void clearlocalinputstate() override; - void UpdateScreenSize() override; bool GenerateSavePic() override; - void set_hud_layout(int size) override; void PlayHudSound() override; bool automapActive() override; FString statFPS() override; @@ -58,6 +56,7 @@ struct GameInterface : ::GameInterface FString GetCoordString() override; bool CheatAllowed(bool printmsg) override; void ExitFromMenu() override; + ReservedSpace GetReservedScreenSpace(int viewsize) override; }; struct Dispatcher diff --git a/source/games/duke/src/funct.h b/source/games/duke/src/funct.h index a613fc52d..cbabb00c8 100644 --- a/source/games/duke/src/funct.h +++ b/source/games/duke/src/funct.h @@ -242,7 +242,6 @@ void setinterpolation(int* posptr); void stopinterpolation(int* posptr); void dointerpolations(int smoothratio); int* animateptr(int i); -void updateviewport(void); void backuppos(player_struct* p, bool noclipping = false); void backuplook(player_struct* p); diff --git a/source/games/duke/src/game.cpp b/source/games/duke/src/game.cpp index e1cd1d9b3..d9fcaebea 100644 --- a/source/games/duke/src/game.cpp +++ b/source/games/duke/src/game.cpp @@ -429,7 +429,6 @@ int GameInterface::app_main() Startup(); enginePostInit(); videoInit(); - updateviewport(); app_loop(); return 0; } diff --git a/source/games/duke/src/game_misc.cpp b/source/games/duke/src/game_misc.cpp index 68c332348..d852e68c2 100644 --- a/source/games/duke/src/game_misc.cpp +++ b/source/games/duke/src/game_misc.cpp @@ -655,7 +655,7 @@ void drawoverheadmap(int cposx, int cposy, int czoom, int cang) if (/*textret == 0 &&*/ ud.overhead_on == 2) { double scale = isRR() ? 0.5 : 1.; - int top = isRR() ? 0 : (hud_size < 11 ? 147 : 179); + int top = isRR() ? 0 : (hud_size != Hud_Nothing ? 147 : 179); if (!(currentLevel->flags & MI_USERMAP)) DrawText(twod, SmallFont2, CR_UNDEFINED, 5, top+6, GStrings.localize(gVolumeNames[volfromlevelnum(currentLevel->levelNumber)]), DTA_FullscreenScale, FSMode_ScaleToFit43, DTA_VirtualWidth, 320, DTA_VirtualHeight, 200, DTA_ScaleX, scale, DTA_ScaleY, scale, DTA_KeepRatio, true, TAG_DONE); @@ -733,6 +733,16 @@ int startrts(int lumpNum, int localPlayer) return 0; } +ReservedSpace GameInterface::GetReservedScreenSpace(int viewsize) +{ + // todo: factor in the frag bar: tilesiz[TILE_FRAGBAR].y + int sbar = tilesiz[TILE_BOTTOMSTATUSBAR].y; + if (isRR()) + { + sbar >>= 1; + } + return { 0, sbar }; +} bool GameInterface::automapActive() { diff --git a/source/games/duke/src/sbar.cpp b/source/games/duke/src/sbar.cpp index 72f955c9e..e6df52f41 100644 --- a/source/games/duke/src/sbar.cpp +++ b/source/games/duke/src/sbar.cpp @@ -268,81 +268,16 @@ void DrawBorder() } } -//--------------------------------------------------------------------------- -// -// calculate size of 3D viewport. -// Fixme: this needs to be adjusted to the new status bar code, -// once the status bar is a persistent queriable object -// (it should also be moved out of the game code then. -// -//--------------------------------------------------------------------------- - -void updateviewport(void) -{ - static const uint8_t size_vals[] = { 60, 54, 48, 40, 32, 24, 16, 8, 8, 4, 4, 0 }; - static const uint8_t size_vals_rr[] = { 56, 48, 40, 32, 24, 16, 12, 8, 8, 4, 4, 0 }; - int ss = isRR() ? size_vals_rr[hud_size] : size_vals[hud_size]; - - ss = std::max(ss - 8, 0); - - int x1 = scale(ss, xdim, 160); - int x2 = xdim - x1; - - int y1 = scale(ss, (200 * 100) - ((tilesiz[TILE_BOTTOMSTATUSBAR].y >> (isRR() ? 1 : 0)) * hud_scale), 200 - tilesiz[TILE_BOTTOMSTATUSBAR].y); - int y2 = 200 * 100 - y1; - - if (isRR() && hud_size > 6) - { - x1 = 0; - x2 = xdim; - y1 = 0; - if (hud_size >= 8) - y2 = 200 * 100; - } - - int fbh = 0; - if (hud_size < 11 && ud.coop != 1 && ud.multimode > 1) - { - int j = 0; - for (int i = connecthead; i >= 0; i = connectpoint2[i]) - if (i > j) j = i; - - if (j >= 1) fbh += 8; - if (j >= 4) fbh += 8; - if (j >= 8) fbh += 8; - if (j >= 12) fbh += 8; - } - - y1 += fbh * 100; - if (hud_size <= 7) - y2 -= (tilesiz[TILE_BOTTOMSTATUSBAR].y >> (isRR() ? 1 : 0)) * hud_scale; - y1 = scale(y1, ydim, 200 * 100); - y2 = scale(y2, ydim, 200 * 100); - - videoSetViewableArea(x1, y1, x2 - 1, y2 - 1); -} - //========================================================================== // // view sizing game interface // //========================================================================== -void GameInterface::set_hud_layout(int layout) -{ - if (xdim > 0 && ydim > 0) updateviewport(); -} - void GameInterface::PlayHudSound() { S_PlaySound(isRR() ? 341 : THUD, CHAN_AUTO, CHANF_UI); } -void GameInterface::UpdateScreenSize() -{ - updateviewport(); -} - - END_DUKE_NS diff --git a/source/games/duke/src/sbar_d.cpp b/source/games/duke/src/sbar_d.cpp index e9f04d330..e6ca1c203 100644 --- a/source/games/duke/src/sbar_d.cpp +++ b/source/games/duke/src/sbar_d.cpp @@ -432,9 +432,9 @@ void PrintLevelName_d(double alpha); void drawstatusbar_d(int snum) { DDukeStatusBar dsb; - if (hud_size >= 9) + if (hud_size >= Hud_Mini) { - dsb.DrawHud(snum, hud_size == 11 ? 0 : hud_size == 10 ? 1 : 2); + dsb.DrawHud(snum, hud_size == Hud_Nothing ? 0 : hud_size == Hud_full ? 1 : 2); } else { diff --git a/source/games/duke/src/sbar_r.cpp b/source/games/duke/src/sbar_r.cpp index a848678b2..c5a17bf86 100644 --- a/source/games/duke/src/sbar_r.cpp +++ b/source/games/duke/src/sbar_r.cpp @@ -321,7 +321,7 @@ public: BeginStatusBar(320, 200, h); DrawInventory(p, 160, 154, 0); - if (hud_size < 7) + if (hud_size < Hud_Stbar) DrawWeaponBar(p, top); DrawGraphic(tileGetTexture(BOTTOMSTATUSBAR), 0, top, DI_ITEM_LEFT_TOP, 1, -1, -1, scale, scale); @@ -422,9 +422,9 @@ void PrintLevelName_r(double alpha); void drawstatusbar_r(int snum) { DRedneckStatusBar dsb; - if (hud_size >= 9) + if (hud_size >= Hud_Mini) { - dsb.DrawHud(snum, hud_size == 11 ? 0 : hud_size == 10 ? 1 : 2); + dsb.DrawHud(snum, hud_size == Hud_Nothing ? 0 : hud_size == Hud_full ? 1 : 2); } else { diff --git a/source/sw/CMakeLists.txt b/source/sw/CMakeLists.txt index ec32b58b0..1a76c9ac5 100644 --- a/source/sw/CMakeLists.txt +++ b/source/sw/CMakeLists.txt @@ -3,7 +3,6 @@ set( PCH_SOURCES src/2d.cpp src/actor.cpp src/ai.cpp - src/border.cpp src/break.cpp src/bunny.cpp src/cache.cpp diff --git a/source/sw/src/border.cpp b/source/sw/src/border.cpp deleted file mode 100644 index 7adb35b04..000000000 --- a/source/sw/src/border.cpp +++ /dev/null @@ -1,126 +0,0 @@ -//------------------------------------------------------------------------- -/* -Copyright (C) 1997, 2005 - 3D Realms Entertainment - -This file is part of Shadow Warrior version 1.2 - -Shadow Warrior is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - -See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - -Original Source: 1997 - Frank Maddin and Jim Norwood -Prepared for public release: 03/28/2005 - Charlie Wiederhold, 3D Realms -*/ -//------------------------------------------------------------------------- -#include "ns.h" - -#include "build.h" - -#include "names2.h" -#include "panel.h" -#include "lists.h" -#include "game.h" -#include "network.h" -#include "misc.h" -#include "menus.h" - -BEGIN_SW_NS - - - -#define BAR_HEIGHT 48 -#define XDIM 320 -#define YDIM 200 - -short DebugBorderShade = 0; - -#define f_320 FIXED(320,0) -#define f_200 FIXED(200,0) - -#define X_TO_FIXED(val) (x_aspect_mul*(val)) -#define Y_TO_FIXED(val) (y_aspect_mul*(val)) - -BORDER_INFO BorderInfoValues[] = -{ - // x,y,screensize - {0, 0, 0}, - {0, 0, 0}, - {0, BAR_HEIGHT, 0}, - - {0, BAR_HEIGHT, (1 * 16)}, - {0, BAR_HEIGHT, (2 * 16)}, - {0, BAR_HEIGHT, (3 * 16)}, - {0, BAR_HEIGHT, (4 * 16)}, - {0, BAR_HEIGHT, (5 * 16)}, - {0, BAR_HEIGHT, (6 * 16)}, - {0, BAR_HEIGHT, (7 * 16)}, - {0, BAR_HEIGHT, (8 * 16)}, - {0, BAR_HEIGHT, (9 * 16)}, - {0, BAR_HEIGHT, (10 * 16)}, - {0, BAR_HEIGHT, (11 * 16)}, - {0, BAR_HEIGHT, (12 * 16)} -}; - -static void BorderSetView(PLAYERp, int *Xdim, int *Ydim, int *ScreenSize) -{ - int x, x2, y, y2; - const BORDER_INFO *b = &BorderInfoValues[gs.BorderNum]; - int f_xdim, f_ydim, x_pix_size, y_pix_size, x_aspect_mul, y_aspect_mul; - - f_xdim = FIXED(xdim, 0); - f_ydim = FIXED(ydim, 0); - - x_pix_size = (f_320 / xdim); - y_pix_size = (f_200 / ydim); - - x_aspect_mul = (f_xdim / 320); - y_aspect_mul = (f_ydim / 200); - - - // figure out the viewing window x and y dimensions - *Xdim = MSW(f_xdim - X_TO_FIXED(b->Xdim)); - *Ydim = MSW(f_ydim - Y_TO_FIXED(b->Ydim)); - *ScreenSize = MSW(f_xdim - X_TO_FIXED(b->ScreenSize)); - - // figure out the viewing window x and y coordinates - x = DIV2(*Xdim) - DIV2(*ScreenSize); - x2 = x + *ScreenSize - 1; - y = DIV2(*Ydim) - DIV2((*ScreenSize **Ydim) / *Xdim); - y2 = y + ((*ScreenSize **Ydim) / *Xdim) - 1; - - // avoid a one-pixel tall HOM - if (gs.BorderNum == BORDER_BAR) - ++y2; - - // global windowxy1, windowxy2 coords set here - videoSetViewableArea(x, y, x2, y2); -} - -// -// Redraw the whole screen -// - -void SetBorder(PLAYERp pp) -{ - int Xdim, Ydim, ScreenSize; - - if (pp != Player + myconnectindex) - return; - - if (xdim == 0) return; // game not set up yet. - - BorderSetView(pp, &Xdim, &Ydim, &ScreenSize); -} - -END_SW_NS diff --git a/source/sw/src/draw.cpp b/source/sw/src/draw.cpp index 415d0f113..c8654713f 100644 --- a/source/sw/src/draw.cpp +++ b/source/sw/src/draw.cpp @@ -1083,13 +1083,27 @@ ResizeView(PLAYERp pp) if (buttonMap.ButtonDown(gamefunc_Shrink_Screen)) // && { buttonMap.ClearButton(gamefunc_Shrink_Screen); - G_ChangeHudLayout(-1); + if (!SHIFTS_IS_PRESSED) + { + G_ChangeHudLayout(-1); + } + else + { + hud_scale = hud_scale - 4; + } } if (buttonMap.ButtonDown(gamefunc_Enlarge_Screen)) // && { buttonMap.ClearButton(gamefunc_Enlarge_Screen); - G_ChangeHudLayout(1); + if (!SHIFTS_IS_PRESSED) + { + G_ChangeHudLayout(1); + } + else + { + hud_scale = hud_scale + 4; + } } } } @@ -1828,11 +1842,6 @@ drawscreen(PLAYERp pp) DrawScreen = TRUE; PreDraw(); - // part of new border refresh method - if (!ScreenSavePic) - { - SetBorder(pp); - } PreUpdatePanel(); diff --git a/source/sw/src/game.cpp b/source/sw/src/game.cpp index cf30ac140..61c3a29d4 100644 --- a/source/sw/src/game.cpp +++ b/source/sw/src/game.cpp @@ -177,8 +177,6 @@ uint8_t AutoColor; const GAME_SET gs_defaults = { - 2, // border - 0, // border tile // Network game settings 0, // GameType 0, // Level @@ -394,6 +392,7 @@ bool InitGame() engineInit(); + InitAutoNet(); @@ -1394,8 +1393,6 @@ int32_t GameInterface::app_main() gs = gs_defaults; - hud_size.Callback(); - if (!DetectShareware()) { if (SW_SHAREWARE) Printf("Detected shareware GRP\n"); @@ -2112,7 +2109,7 @@ void drawoverheadmap(int cposx, int cposy, int czoom, short cang) renderSetAspect(65536, divscale16(tmpydim * 320, xdim * 200)); // draw location text - if (gs.BorderNum <= BORDER_BAR-1) + if (hud_size == Hud_Nothing) { txt_x = 7; txt_y = 168; @@ -2510,12 +2507,12 @@ void Saveable_Init_Dynamic() saveable_build.numdata = NUM_SAVEABLE_ITEMS(saveable_build_data); } -void GameInterface::set_hud_layout(int requested_size) +ReservedSpace GameInterface::GetReservedScreenSpace(int viewsize) { - gs.BorderNum = 9 - requested_size; - SetBorder(Player + myconnectindex); + return { 0, 48 }; } + ::GameInterface* CreateInterface() { return new GameInterface; @@ -2533,10 +2530,4 @@ void GameInterface::FreeGameData() TerminateLevel(); } -void GameInterface::UpdateScreenSize() -{ - // Fixme. The underlying code here is too broken and must be refactored first. -} - - END_SW_NS diff --git a/source/sw/src/game.h b/source/sw/src/game.h index 78324d38a..090a6d350 100644 --- a/source/sw/src/game.h +++ b/source/sw/src/game.h @@ -1614,12 +1614,6 @@ typedef struct extern USERp User[MAXSPRITES]; -typedef struct -{ - short Xdim, Ydim, ScreenSize; -} BORDER_INFO,*BORDER_INFOp; - - typedef struct { short high; @@ -2027,7 +2021,6 @@ extern SECTOR_OBJECT SectorObject[MAX_SECTOR_OBJECTS]; ANIMATOR NullAnimator; -void SetBorder(PLAYERp pp); int Distance(int x1, int y1, int x2, int y2); short GetDeltaAngle(short, short); fix16_t GetDeltaQ16Angle(fix16_t, fix16_t); @@ -2380,10 +2373,8 @@ struct GameInterface : ::GameInterface { const char* Name() override { return "ShadowWarrior"; } int app_main() override; - void UpdateScreenSize() override; void FreeGameData() override; bool GenerateSavePic() override; - void set_hud_layout(int size) override; void DrawNativeMenuText(int fontnum, int state, double xpos, double ypos, float fontscale, const char* text, int flags) override; void MenuOpened() override; void MenuSound(EMenuSounds snd) override; @@ -2397,6 +2388,7 @@ struct GameInterface : ::GameInterface bool SaveGame(FSaveGameNode* sv) override; void SetAmbience(bool on) override { if (on) StartAmbientSound(); else StopAmbientSound(); } FString GetCoordString() override; + ReservedSpace GetReservedScreenSpace(int viewsize) override; FString statFPS() override; GameStats getStats() override; diff --git a/source/sw/src/menus.h b/source/sw/src/menus.h index 1f38674e6..506675c73 100644 --- a/source/sw/src/menus.h +++ b/source/sw/src/menus.h @@ -92,247 +92,6 @@ void MNU_DrawStringLarge(int x, int y, const char* string, int shade = 0, int al extern SWBOOL LoadGameOutsideMoveLoop; -#if 0 - -typedef enum -{ - ct_mainmenu, ct_savemenu, ct_loadmenu, ct_soundmenu, ct_optionmenu, ct_quickloadmenu, - ct_quitmenu, ct_ordermenu, ct_episodemenu, ct_max -} CTLType; - -extern int SENSITIVITY; -extern CTLType ControlPanelType; -extern int16_t MenuTextShade; -extern int16_t MenuTextPalette; - -// Prototypes -//void MNU_DoMenu( CTLType type, PLAYERp pp ); -void MNU_InitMenus(void); -//void (*CustomRefresh)(void); -//void MNU_Refresh( void ); -void MNU_DrawMenu(void); // This is used in drawscreen to refresh menus in -// multiplay situations. -void MNU_CheckForMenus(void); -void MNU_CheckForMenusAnyKey(void); - -// Functions from my other engine -//void Get_Palette (unsigned char *pal); -//void Set_Palette(unsigned char *buff); -//void Fade_Timer(int clicks); -void FadeIn(unsigned char targetcolor, unsigned int clicks); -void FadeOut(unsigned char targetcolor, unsigned int clicks); -void ResetPalette(PLAYERp pp); - -void ExitMenus(void); -void ResetMenuInput(void); - -extern SWBOOL BorderAdjust; - -// Make memcpy an intrinsic function for an easy frame rate boost -//#pragma intrinsic( memcpy ); - -// L O C A L V A R I A B L E S //////////////////////////////////////////////////////////////// - -// Default menu pic brightness - -#define FLASHTIME 60 // One second per icon flash - -// Defines for permanentwritesprite clipping box -#define M_CX1 0 -#define M_CY1 0 -#define M_CX2 319 -#define M_CY2 199 - -#define asc_Esc 27 -#define asc_Enter 13 -#define asc_Space 32 - - - -// This is the current values set with all slider bar functions -#define SENSE_DEFAULT 10 // Default mouse sensitivity ** should be 5!!! -#define FXVOL_DEFAULT 8 // Default sound fx volume -#define MUSIC_DEFAULT 8 // Default music volume -#define SCRSIZE_DEFAULT 9 // Default screen size, max is 10 -#define BRIGHTNESS_DEFAULT 0 // Default is no gamma-correction -#define BORDERTILE_DEFAULT 0 // Default is no gamma-correction -#define GAMETYPE_DEFAULT 0 // Regular DeathMatch -#define NETLEVEL_DEFAULT 0 // Default is level 1 (0) -#define MONSTERS_DEFAULT 0 // No Monsters -#define KILLLIMIT_DEFAULT 0 // No kill limit -#define TIMELIMIT_DEFAULT 0 // None -#define PLAYERCOLOR_DEFAULT 0 - -typedef enum -{ - sldr_none, - sldr_mouse, sldr_sndfxvolume, sldr_musicvolume, sldr_scrsize, sldr_brightness, - sldr_bordertile, sldr_gametype, sldr_netlevel, sldr_monsters, sldr_killlimit, - sldr_timelimit, sldr_playercolor, sldr_videores, sldr_videobpp, - sldr_mousescalex, sldr_mousescaley, - sldr_joyaxisscale, sldr_joyaxisanalog, sldr_joyaxisdead, sldr_joyaxissatur, - sldr_max -} SLDRType; - - -#define MAX_SLDR_WIDTH 16 // maximum size of slider before x is compressed - -#define SLDR_MOUSESENSEMAX 20 -#define SLDR_SNDFXVOLMAX 16 -#define SLDR_MUSICVOLMAX 16 -#define SLDR_SCRSIZEMAX 14 -#define SLDR_BRIGHTNESSMAX 8 -#define SLDR_BORDERTILEMAX (isShareware ? 21 : 38) // counted from border.c -#define SLDR_GAMETYPEMAX 3 - -#define SLDR_NETLEVELMAX_REG 28 -#define SLDR_NETLEVELMAX_SW 4 -#define SLDR_NETLEVELMAX (isShareware ? SLDR_NETLEVELMAX_SW : SLDR_NETLEVELMAX_REG) - -#define SLDR_MONSTERSMAX 5 // Skill Levels -#define SLDR_KILLLIMITMAX 11 // Increments of 10 up to 100, 1 is no limit -#define SLDR_TIMELIMITMAX 9 -#define SLDR_PLAYERCOLORMAX 8 // Up to 8 players different colors - - -#define MOUSE_SENS_MAX_VALUE (1<<16) -#define MUSIC_VOL_MAX_VALUE 255 -#define FX_VOL_MAX_VALUE 255 - -// These are all the toggle button settings -typedef enum -{ - btn_none, btn_auto_run, btn_crosshair, btn_auto_aim, - btn_mouse_aim, btn_messages, btn_mouse_invert, btn_bobbing, btn_shadows, - btn_sound, btn_music, btn_talking, btn_ambience, btn_flipstereo, - btn_res0, btn_res1, btn_res2, btn_res3, btn_res4, btn_res5, btn_res6, - btn_markers, btn_teamplay, btn_friendlyfire,btn_parental,btn_nuke, - btn_voxels, btn_stats, btn_playcd, - btn_videofs, - btn_darts, - btn_autoswitch, - btn_max -} BTNType; - -enum -{ - mf_normal = BIT(0), - mf_pushed = BIT(1), - mf_selected = BIT(2), - mf_disabled = BIT(3), - mf_separated = BIT(4) -}; -typedef int MenuFlags; - -#define MenuSelectFlags (mf_pushed | mf_selected | mf_disabled) - -typedef enum -{ - mt_none, - mt_inert, mt_slider, mt_button, mt_option, mt_layer -} MenuTag; - -typedef enum -{ - uc_setup, uc_draw, uc_touchup, uc_hit -} UserCall; - -struct MenuGroup; - -typedef struct MENU_ITEM -{ - MenuTag type; // What kind of item is this on the - // menu? - MenuFlags flags; // Menu item flags - SLDRType slider; // Slider type, if any - BTNType button; // Button state, if any - unsigned char hotkey; // First letter of item - const char *text; // Text appearing in item, if any. - MenuGroup *child; // Should be menugroup, used to spawn - // sub-groups from items. - int x, y; // x,y position on screen. - short pic; // Startpic to use - char shade; // Shade of pic - int tics; // Ticcount for item - SWBOOL(*custom)(void); // Work function on item select - - SWBOOL (*preprocess)(struct MENU_ITEM *); - SWBOOL (*postprocess)(struct MENU_ITEM *); // Can do things on items select -} MenuItem, *MenuItem_p; - -typedef struct MenuGroup -{ - int x, y; // Menu x,y position on screen. - const char *text; - MenuItem_p items; // Array of menu items for this menu. - short titlepic; // Used to draw title on menu with. - short cursorpic; // Pic used for menu cursor, 1st in - // anim sequence if animated. - char shade; // Title pic shade - - SWBOOL(*draw_custom)(UserCall, MenuItem *); // Custom routine - SWBOOL(*move_custom)(UserCall, MenuItem *); // Custom routine - - short cursor; // This is the current menu item the - // cursor is resting on. -} *MenuGroup_p; - -// Custom Routine Prototypes //////////////////////////////////////////////////////////////////// - -SWBOOL MNU_QuitCustom(UserCall call, MenuItem *item); -SWBOOL MNU_LoadSaveTouchupCustom(UserCall call, MenuItem *item); -SWBOOL MNU_OrderCustom(UserCall call, MenuItem *item); -SWBOOL MNU_DoEpisodeSelect(UserCall call, MenuItem *item); - -SWBOOL MNU_MusicFxCheck(MenuItem_p item); -SWBOOL MNU_MusicCheck(MenuItem_p item); -SWBOOL MNU_FxCheck(MenuItem_p item); -SWBOOL MNU_MouseCheck(MenuItem_p item); -SWBOOL MNU_JoystickCheck(MenuItem_p item); -SWBOOL MNU_BorderCheck(MenuItem_p item); -SWBOOL MNU_ShareWareCheck(MenuItem_p item); -SWBOOL MNU_MenuLevelCheck(MenuItem_p item); -SWBOOL MNU_ShareWareMessage(MenuItem_p item); - -// Custom MenuItem Routines ///////////////////////////////////////////////////////////////////// - -SWBOOL MNU_StartGame(void); -SWBOOL MNU_StartNetGame(void); -SWBOOL MNU_EpisodeCustom(void); -SWBOOL MNU_GetDescripCustom(void); -SWBOOL MNU_LoadGameCustom(void); -SWBOOL MNU_SaveGameCustom(void); -SWBOOL MNU_GetLoadCustom(void); -SWBOOL MNU_GetSaveCustom(void); -SWBOOL MNU_ParentalCustom(void); -SWBOOL MNU_KeySetupCustom(UserCall call, MenuItem *item); -SWBOOL MNU_LoadModernDefaults(void); -SWBOOL MNU_LoadClassicDefaults(void); - -// Menu Definitions ///////////////////////////////////////////////////////////////////////////// - -#define DefInert(key,text) mt_inert,mf_normal,sldr_none,btn_none,key,text,NULL -#define DefSlider(slider,key,text) mt_slider,mf_normal,slider,btn_none,key,text,NULL -#define DefOption(key,text) mt_option,mf_normal,sldr_none,btn_none,key,text,NULL -#define DefButton(button,key,text) mt_button,mf_normal,sldr_none,button,key,text,NULL -#define DefLayer(key,text,child) mt_layer,mf_normal,sldr_none,btn_none,key,text,child - -#define DefDisabled(key,text,child) mt_layer,mf_disabled,sldr_none,btn_none,key,text,child -#define DefNone mt_none,(MenuFlags)0,(SLDRType)0,(BTNType)0,0,NULL,NULL,0,0,0,0,0,NULL,NULL,NULL - -#define OPT_XS 30 -#define OPT_YS 30 -#define OPT_XSIDE (OPT_XS + 120) -#define OPT_YINC 10 -#define OPT_LINE(line) (OPT_YS + (OPT_YINC * (line))) - -typedef struct -{ - int x,y; -} VMODE; - -#endif - END_SW_NS #endif diff --git a/source/sw/src/save.cpp b/source/sw/src/save.cpp index d81d0d158..2820ddf14 100644 --- a/source/sw/src/save.cpp +++ b/source/sw/src/save.cpp @@ -1132,7 +1132,6 @@ bool GameInterface::LoadGame(FSaveGameNode* sv) - hud_size.Callback(); LoadGameOutsideMoveLoop = TRUE; if (!InMenuLevel) { diff --git a/source/sw/src/sbar.cpp b/source/sw/src/sbar.cpp index 47e59ba66..df3dc6553 100644 --- a/source/sw/src/sbar.cpp +++ b/source/sw/src/sbar.cpp @@ -376,9 +376,6 @@ private: WeaponNum = DamageData[WeaponNum].with_weapon; } - if (gs.BorderNum < BORDER_BAR || pp - Player != screenpeek) - return; - static short wsum_xoff[3] = { 0,36,66 }; static const char* wsum_fmt2[3] = { "%3d/%-3d", "%2d/%-2d", "%2d/%-2d" }; @@ -721,7 +718,7 @@ private: INVENTORY_DATAp id; x = MINI_BAR_HEALTH_BOX_X; - y = 200 - 26; + y = -26; DrawGraphic(tileGetTexture(MINI_BAR_HEALTH_BOX_PIC), x, y, DI_ITEM_LEFT_TOP, 1, -1, -1, 1, 1); @@ -843,22 +840,21 @@ public: double inv_x, inv_y; int align; - if (gs.BorderNum <= BORDER_NONE) + if (hud_size == Hud_Nothing) { align = DI_SCREEN_RIGHT_BOTTOM; inv_x = -210 * hud_scale / 100.; inv_y = -28 * hud_scale / 100.; PrintLevelStats(2); } - /*else if (gs.BorderNum == BORDER_HUD) + else if (hud_size == Hud_full) { align = DI_SCREEN_CENTER_TOP; inv_x = -80 * hud_scale / 100.; inv_y = -70 * hud_scale / 100.; - DrawHUD2(); + DrawHUD1(); // todo: Implement a proper view for this } - */ - else if (gs.BorderNum == BORDER_MINI_BAR) + else if (hud_size == Hud_Mini) { align = DI_SCREEN_RIGHT_BOTTOM; inv_x = -210 * hud_scale / 100.; @@ -924,7 +920,7 @@ void UpdateStatusBar(ClockTicks arg) { DSWStatusBar sbar; - if (gs.BorderNum >= BORDER_BAR) + if (hud_size <= Hud_Stbar) { UpdateFrame(); } diff --git a/source/sw/src/settings.h b/source/sw/src/settings.h index 299eb55c8..3dc534401 100644 --- a/source/sw/src/settings.h +++ b/source/sw/src/settings.h @@ -31,8 +31,6 @@ BEGIN_SW_NS typedef struct { - int8_t BorderNum; - int8_t BorderTile; // Network only - disabled // Net Options from Menus uint8_t NetGameType; // 0=DeathMatch [spawn], 1=Cooperative 2=DeathMatch [no spawn] uint8_t NetLevel; // 1-28 diff --git a/wadsrc/static/engine/menudef.txt b/wadsrc/static/engine/menudef.txt index 05308fef9..4f7756976 100644 --- a/wadsrc/static/engine/menudef.txt +++ b/wadsrc/static/engine/menudef.txt @@ -1016,22 +1016,7 @@ OptionMenu "HUDOptions" //protected { Title "$OPTMNU_HUD" - ifgame(duke, nam, ww2gi, redneck, redneckrides) - { - Slider "$DSPLYMNU_SCREENSIZE", "hud_size", 0.0, 11.0, 1.0, -1 - } - ifgame(blood) - { - Slider "$DSPLYMNU_SCREENSIZE", "hud_size", 0.0, 7.0, 1.0, -1 - } - ifgame(shadowwarrior) - { - Slider "$DSPLYMNU_SCREENSIZE", "hud_size", 0.0, 9.0, 1.0, -1 - } - ifgame(exhumed) - { - Slider "$DSPLYMNU_SCREENSIZE", "hud_size", 0.0, 8.0, 1.0, -1 - } + Slider "$DSPLYMNU_SCREENSIZE", "hud_size", 0.0, 9.0, 1.0, -1 Slider "$DSPLYMNU_SBSCALE", "hud_scale", 36, 100, 4, 2 StaticText "" Option "$DSPLYMNU_LEVELSTATS", "hud_stats", "OnOff"