From e760b9f98809dc960308c35b8a0851d676e41e37 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=ABl=20Troch?= Date: Fri, 4 Oct 2024 18:46:55 +0200 Subject: [PATCH] [HL25] Backport changes from October 2nd 2024 --- CHANGELOG.md | 4 ++ cl_dll/cl_util.h | 2 + cl_dll/death.cpp | 5 +++ cl_dll/hud_spectator.cpp | 8 ++-- cl_dll/vgui_SpectatorPanel.cpp | 72 +++++++++++++++++----------------- cl_dll/view.cpp | 8 ++-- dlls/player.cpp | 2 +- 7 files changed, 56 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f184cf..14e7c2e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,10 @@ * Added missing client side event for `func_vehicle` sounds * Link Linux binaries with `-Wl` and `--no-undefined` flags to avoid situations where something was referenced but wasn't added in the build (Thanks a1batross) +### Features + +* [HL25] Backported changes from October 2nd 2024 update + ## Changes in V1.1.0 ### Bug Fixes diff --git a/cl_dll/cl_util.h b/cl_dll/cl_util.h index 2e4bf83..824c2d5 100644 --- a/cl_dll/cl_util.h +++ b/cl_dll/cl_util.h @@ -76,6 +76,8 @@ inline struct cvar_s* CVAR_CREATE(const char* cv, const char* val, const int fla #define XRES(x) ((x) * ((float)ScreenWidth / 640)) #define YRES(y) ((y) * ((float)ScreenHeight / 480)) +#define XRES_HD(x) ((x) * V_max(1, (float)ScreenWidth / 1280)) +#define YRES_HD(y) ((y) * V_max(1, (float)ScreenHeight / 720)) #define GetScreenInfo (*gEngfuncs.pfnGetScreenInfo) #define ServerCmd (*gEngfuncs.pfnServerCmd) diff --git a/cl_dll/death.cpp b/cl_dll/death.cpp index 7329992..3c95237 100644 --- a/cl_dll/death.cpp +++ b/cl_dll/death.cpp @@ -108,6 +108,11 @@ bool CHudDeathNotice::Draw(float flTime) Rect sprite = gHUD.GetSpriteRect(m_HUD_d_skull); gap = sprite.bottom - sprite.top; + SCREENINFO screenInfo; + screenInfo.iSize = sizeof(SCREENINFO); + gEngfuncs.pfnGetScreenInfo(&screenInfo); + gap = V_max(gap, screenInfo.iCharHeight); + for (int i = 0; i < MAX_DEATHNOTICES; i++) { if (rgDeathNoticeList[i].iId == 0) diff --git a/cl_dll/hud_spectator.cpp b/cl_dll/hud_spectator.cpp index 7e2ca6d..15dd2f9 100644 --- a/cl_dll/hud_spectator.cpp +++ b/cl_dll/hud_spectator.cpp @@ -652,10 +652,10 @@ bool CHudSpectator::Draw(float flTime) // check if name would be in inset window if (m_pip->value != INSET_OFF) { - if (m_vPlayerPos[i][0] > XRES(m_OverviewData.insetWindowX) && - m_vPlayerPos[i][1] > YRES(m_OverviewData.insetWindowY) && - m_vPlayerPos[i][0] < XRES(m_OverviewData.insetWindowX + m_OverviewData.insetWindowWidth) && - m_vPlayerPos[i][1] < YRES(m_OverviewData.insetWindowY + m_OverviewData.insetWindowHeight)) + if (m_vPlayerPos[i][0] > XRES_HD(m_OverviewData.insetWindowX) && + m_vPlayerPos[i][1] > YRES_HD(m_OverviewData.insetWindowY) && + m_vPlayerPos[i][0] < XRES_HD(m_OverviewData.insetWindowX + m_OverviewData.insetWindowWidth) && + m_vPlayerPos[i][1] < YRES_HD(m_OverviewData.insetWindowY + m_OverviewData.insetWindowHeight)) continue; } diff --git a/cl_dll/vgui_SpectatorPanel.cpp b/cl_dll/vgui_SpectatorPanel.cpp index 71498b5..d880de9 100644 --- a/cl_dll/vgui_SpectatorPanel.cpp +++ b/cl_dll/vgui_SpectatorPanel.cpp @@ -30,11 +30,11 @@ void DLLEXPORT HUD_ChatInputPosition(int* x, int* y) { if (gHUD.m_Spectator.m_pip->value == INSET_OFF) { - *y = YRES(PANEL_HEIGHT); + *y = YRES_HD(PANEL_HEIGHT); } else { - *y = YRES(gHUD.m_Spectator.m_OverviewData.insetWindowHeight + 5); + *y = YRES_HD(gHUD.m_Spectator.m_OverviewData.insetWindowHeight + 5); } } } @@ -105,15 +105,15 @@ void SpectatorPanel::Initialize() SchemeHandle_t hSmallScheme = pSchemes->getSchemeHandle("Team Info Text"); - m_TopBorder = new CTransparentPanel(64, 0, 0, ScreenWidth, PANEL_HEIGHT); + m_TopBorder = new CTransparentPanel(64, 0, 0, ScreenWidth, YRES_HD(PANEL_HEIGHT)); m_TopBorder->setParent(this); - m_BottomBorder = new CTransparentPanel(64, 0, ScreenHeight - PANEL_HEIGHT, ScreenWidth, PANEL_HEIGHT); + m_BottomBorder = new CTransparentPanel(64, 0, ScreenHeight - YRES_HD(PANEL_HEIGHT), ScreenWidth, YRES_HD(PANEL_HEIGHT)); m_BottomBorder->setParent(this); setPaintBackgroundEnabled(false); - m_ExtraInfo = new Label("Extra Info", 0, 0, wide, PANEL_HEIGHT); + m_ExtraInfo = new Label("Extra Info", 0, 0, wide, YRES_HD(PANEL_HEIGHT)); m_ExtraInfo->setParent(m_TopBorder); m_ExtraInfo->setFont(pSchemes->getFont(hSmallScheme)); @@ -126,24 +126,24 @@ void SpectatorPanel::Initialize() m_TimerImage = new CImageLabel("timer", 0, 0, 14, 14); m_TimerImage->setParent(m_TopBorder); - m_TopBanner = new CImageLabel("banner", 0, 0, XRES(BANNER_WIDTH), YRES(BANNER_HEIGHT)); + m_TopBanner = new CImageLabel("banner", 0, 0, XRES_HD(BANNER_WIDTH), YRES_HD(BANNER_HEIGHT)); m_TopBanner->setParent(this); - m_CurrentTime = new Label("00:00", 0, 0, wide, PANEL_HEIGHT); + m_CurrentTime = new Label("00:00", 0, 0, wide, YRES_HD(PANEL_HEIGHT)); m_CurrentTime->setParent(m_TopBorder); m_CurrentTime->setFont(pSchemes->getFont(hSmallScheme)); m_CurrentTime->setPaintBackgroundEnabled(false); m_CurrentTime->setFgColor(143, 143, 54, 0); m_CurrentTime->setContentAlignment(vgui::Label::a_west); - m_Separator = new Panel(0, 0, XRES(64), YRES(96)); + m_Separator = new Panel(0, 0, XRES_HD(64), YRES_HD(96)); m_Separator->setParent(m_TopBorder); m_Separator->setFgColor(59, 58, 34, 48); m_Separator->setBgColor(59, 58, 34, 48); for (int j = 0; j < TEAM_NUMBER; j++) { - m_TeamScores[j] = new Label(" ", 0, 0, wide, PANEL_HEIGHT); + m_TeamScores[j] = new Label(" ", 0, 0, wide, YRES_HD(PANEL_HEIGHT)); m_TeamScores[j]->setParent(m_TopBorder); m_TeamScores[j]->setFont(pSchemes->getFont(hSmallScheme)); m_TeamScores[j]->setPaintBackgroundEnabled(false); @@ -154,8 +154,8 @@ void SpectatorPanel::Initialize() // Initialize command buttons. - // m_OptionButton = new ColorButton( CHudTextMessage::BufferedLocaliseTextString( "#SPECT_OPTIONS" ), XRES(15), YRES(6), XRES(OPTIONS_BUTTON_X), YRES(20), false, false ); - m_OptionButton = new DropDownButton(CHudTextMessage::BufferedLocaliseTextString("#SPECT_OPTIONS"), XRES(15), YRES(6), XRES(OPTIONS_BUTTON_X), YRES(20), false, false); + // m_OptionButton = new ColorButton( CHudTextMessage::BufferedLocaliseTextString( "#SPECT_OPTIONS" ), XRES_HD(15), YRES_HD(6), XRES_HD(OPTIONS_BUTTON_X), YRES_HD(20), false, false ); + m_OptionButton = new DropDownButton(CHudTextMessage::BufferedLocaliseTextString("#SPECT_OPTIONS"), XRES_HD(15), YRES_HD(6), XRES_HD(OPTIONS_BUTTON_X), YRES_HD(20), false, false); m_OptionButton->setParent(m_BottomBorder); m_OptionButton->setContentAlignment(vgui::Label::a_center); m_OptionButton->setBoundKey((char)255); // special no bound to avoid leading spaces in name @@ -165,7 +165,7 @@ void SpectatorPanel::Initialize() m_OptionButton->setUnArmedColor(143, 143, 54, 0); m_OptionButton->setArmedColor(194, 202, 54, 0); - m_CamButton = new DropDownButton(CHudTextMessage::BufferedLocaliseTextString("#CAM_OPTIONS"), ScreenWidth - (XRES(CAMOPTIONS_BUTTON_X) + 15), YRES(6), XRES(CAMOPTIONS_BUTTON_X), YRES(20), false, false); + m_CamButton = new DropDownButton(CHudTextMessage::BufferedLocaliseTextString("#CAM_OPTIONS"), ScreenWidth - XRES_HD(CAMOPTIONS_BUTTON_X + 15), YRES_HD(6), XRES_HD(CAMOPTIONS_BUTTON_X), YRES_HD(20), false, false); m_CamButton->setParent(m_BottomBorder); m_CamButton->setContentAlignment(vgui::Label::a_center); m_CamButton->setBoundKey((char)255); // special no bound to avoid leading spaces in name @@ -175,8 +175,8 @@ void SpectatorPanel::Initialize() m_CamButton->setUnArmedColor(143, 143, 54, 0); m_CamButton->setArmedColor(194, 202, 54, 0); - // m_PrevPlayerButton= new ColorButton("<", XRES( 15 + OPTIONS_BUTTON_X + 15 ), YRES(6), XRES(24), YRES(20), false, false ); - m_PrevPlayerButton = new CImageButton("arrowleft", XRES(15 + OPTIONS_BUTTON_X + 15), YRES(6), XRES(24), YRES(20), false, false); + // m_PrevPlayerButton= new ColorButton("<", XRES_HD( 15 + OPTIONS_BUTTON_X + 15 ), YRES_HD(6), XRES_HD(24), YRES_HD(20), false, false ); + m_PrevPlayerButton = new CImageButton("arrowleft", XRES_HD(15 + OPTIONS_BUTTON_X + 15), YRES_HD(6), XRES_HD(24), YRES_HD(20), false, false); m_PrevPlayerButton->setParent(m_BottomBorder); m_PrevPlayerButton->setContentAlignment(vgui::Label::a_center); m_PrevPlayerButton->setBoundKey((char)255); // special no bound to avoid leading spaces in name @@ -186,8 +186,8 @@ void SpectatorPanel::Initialize() m_PrevPlayerButton->setUnArmedColor(143, 143, 54, 0); m_PrevPlayerButton->setArmedColor(194, 202, 54, 0); - // m_NextPlayerButton= new ColorButton(">", (ScreenWidth - (XRES ( CAMOPTIONS_BUTTON_X ) + 15)) - XRES ( 24 + 15 ), YRES(6), XRES(24), YRES(20),false, false ); - m_NextPlayerButton = new CImageButton("arrowright", (ScreenWidth - (XRES(CAMOPTIONS_BUTTON_X) + 15)) - XRES(24 + 15), YRES(6), XRES(24), YRES(20), false, false); + // m_NextPlayerButton= new ColorButton(">", (ScreenWidth - (XRES_HD ( CAMOPTIONS_BUTTON_X ) + 15)) - XRES_HD ( 24 + 15 ), YRES_HD(6), XRES_HD(24), YRES_HD(20),false, false ); + m_NextPlayerButton = new CImageButton("arrowright", ScreenWidth - XRES_HD(CAMOPTIONS_BUTTON_X + 15) - XRES_HD(24 + 15), YRES_HD(6), XRES_HD(24), YRES_HD(20), false, false); m_NextPlayerButton->setParent(m_BottomBorder); m_NextPlayerButton->setContentAlignment(vgui::Label::a_center); m_NextPlayerButton->setBoundKey((char)255); // special no bound to avoid leading spaces in name @@ -199,10 +199,10 @@ void SpectatorPanel::Initialize() // Initialize the bottom title. - float flLabelSize = ((ScreenWidth - (XRES(CAMOPTIONS_BUTTON_X) + 15)) - XRES(24 + 15)) - XRES((15 + OPTIONS_BUTTON_X + 15) + 38); + float flLabelSize = ScreenWidth - XRES_HD(CAMOPTIONS_BUTTON_X + 15) - XRES_HD(24 + 15) - XRES_HD((15 + OPTIONS_BUTTON_X + 15) + 38); m_BottomMainButton = new DropDownButton("Spectator Bottom", - XRES((15 + OPTIONS_BUTTON_X + 15) + 31), YRES(6), flLabelSize, YRES(20), + XRES_HD((15 + OPTIONS_BUTTON_X + 15) + 31), YRES_HD(6), flLabelSize, YRES_HD(20), false, false); m_BottomMainButton->setParent(m_BottomBorder); @@ -219,7 +219,7 @@ void SpectatorPanel::Initialize() m_BottomMainLabel = new Label("Spectator Bottom", - XRES((15 + OPTIONS_BUTTON_X + 15) + 31), YRES(6), flLabelSize, YRES(20)); + XRES_HD((15 + OPTIONS_BUTTON_X + 15) + 31), YRES_HD(6), flLabelSize, YRES_HD(20)); m_BottomMainLabel->setParent(m_BottomBorder); m_BottomMainLabel->setPaintBackgroundEnabled(false); @@ -228,7 +228,7 @@ void SpectatorPanel::Initialize() m_BottomMainLabel->setBorder(NULL); m_BottomMainLabel->setVisible(false); - m_InsetViewButton = new ColorButton("", XRES(2), YRES(2), XRES(240), YRES(180), false, false); + m_InsetViewButton = new ColorButton("", XRES_HD(2), YRES_HD(2), XRES_HD(240), YRES_HD(180), false, false); m_InsetViewButton->setParent(this); m_InsetViewButton->setBoundKey((char)255); m_InsetViewButton->addActionSignal(new CSpectatorHandler_Command(this, SPECTATOR_PANEL_CMD_TOGGLE_INSET)); @@ -270,11 +270,11 @@ void SpectatorPanel::ShowMenu(bool isVisible) m_BottomMainButton->setVisible(false); m_BottomMainLabel->getSize(iLabelSizeX, iLabelSizeY); - m_BottomMainLabel->setPos((ScreenWidth / 2) - (iLabelSizeX / 2), YRES(6)); + m_BottomMainLabel->setPos((ScreenWidth / 2) - (iLabelSizeX / 2), YRES_HD(6)); } else { - m_BottomMainButton->setPos(XRES((15 + OPTIONS_BUTTON_X + 15) + 31), YRES(6)); + m_BottomMainButton->setPos(XRES_HD((15 + OPTIONS_BUTTON_X + 15) + 31), YRES_HD(6)); m_BottomMainLabel->setVisible(false); m_BottomMainButton->setVisible(true); } @@ -342,18 +342,18 @@ void SpectatorPanel::EnableInsetView(bool isEnabled) if (isEnabled) { // short black bar to see full inset - m_TopBorder->setBounds(XRES(offset), 0, XRES(640 - offset), PANEL_HEIGHT); + m_TopBorder->setBounds(XRES_HD(offset), 0, ScreenWidth - XRES_HD(offset), YRES_HD(PANEL_HEIGHT)); if (0 != gEngfuncs.IsSpectateOnly()) { m_TopBanner->setVisible(true); - m_TopBanner->setPos(XRES(offset), 0); + m_TopBanner->setPos(XRES_HD(offset), 0); } else m_TopBanner->setVisible(false); - m_InsetViewButton->setBounds(XRES(x - 1), YRES(y), - XRES(wide + 2), YRES(tall)); + m_InsetViewButton->setBounds(XRES_HD(x - 1), YRES_HD(y), + XRES_HD(wide + 2), YRES_HD(tall)); m_InsetViewButton->setVisible(true); } else @@ -368,7 +368,7 @@ void SpectatorPanel::EnableInsetView(bool isEnabled) else m_TopBanner->setVisible(false); - m_TopBorder->setBounds(0, 0, ScreenWidth, PANEL_HEIGHT); + m_TopBorder->setBounds(0, 0, ScreenWidth, YRES_HD(PANEL_HEIGHT)); m_InsetViewButton->setVisible(false); } @@ -410,28 +410,28 @@ void SpectatorPanel::Update() m_ExtraInfo->getTextSize(iTextWidth, iTextHeight); m_CurrentTime->getTextSize(iTimeWidth, iTimeHeight); - iTimeWidth += XRES(SEPERATOR_WIDTH * 2 + 1); // +timer icon - iTimeWidth += (SEPERATOR_WIDTH - (iTimeWidth % SEPERATOR_WIDTH)); + iTimeWidth += XRES_HD(SEPERATOR_WIDTH * 2 + 1); // +timer icon + iTimeWidth += (XRES_HD(SEPERATOR_WIDTH) - (iTimeWidth % (int)XRES_HD(SEPERATOR_WIDTH))); if (iTimeWidth > iTextWidth) iTextWidth = iTimeWidth; - int xPos = ScreenWidth - (iTextWidth + XRES(SEPERATOR_WIDTH + offset)); + int xPos = ScreenWidth - (iTextWidth + XRES_HD(SEPERATOR_WIDTH + offset)); - m_ExtraInfo->setBounds(xPos, YRES(SEPERATOR_HEIGHT), iTextWidth, iTextHeight); + m_ExtraInfo->setBounds(xPos, SEPERATOR_HEIGHT, iTextWidth, iTextHeight); - m_TimerImage->setBounds(xPos, YRES(SEPERATOR_HEIGHT) + iTextHeight, XRES(SEPERATOR_WIDTH * 2 + 1), YRES(SEPERATOR_HEIGHT + 1)); + m_TimerImage->setBounds(xPos, SEPERATOR_HEIGHT + iTextHeight, XRES_HD(SEPERATOR_WIDTH * 2 + 1), SEPERATOR_HEIGHT + 1); - m_CurrentTime->setBounds(xPos + XRES(SEPERATOR_WIDTH * 2 + 1), YRES(SEPERATOR_HEIGHT) + iTextHeight, iTimeWidth, iTimeHeight); + m_CurrentTime->setBounds(xPos + XRES_HD(SEPERATOR_WIDTH * 2 + 1), SEPERATOR_HEIGHT + iTextHeight, iTimeWidth, iTimeHeight); - m_Separator->setPos(ScreenWidth - (iTextWidth + XRES(2 * SEPERATOR_WIDTH + SEPERATOR_WIDTH / 2 + offset)), YRES(5)); - m_Separator->setSize(XRES(1), PANEL_HEIGHT - 10); + m_Separator->setPos(ScreenWidth - (iTextWidth + XRES_HD(2 * SEPERATOR_WIDTH + SEPERATOR_WIDTH / 2 + offset)), YRES_HD(5)); + m_Separator->setSize(XRES_HD(1), YRES_HD(PANEL_HEIGHT - 10)); for (j = 0; j < TEAM_NUMBER; j++) { int iwidth, iheight; m_TeamScores[j]->getTextSize(iwidth, iheight); - m_TeamScores[j]->setBounds(ScreenWidth - (iTextWidth + XRES(2 * SEPERATOR_WIDTH + 2 * SEPERATOR_WIDTH / 2 + offset) + iwidth), YRES(SEPERATOR_HEIGHT) + (iheight * j), iwidth, iheight); + m_TeamScores[j]->setBounds(ScreenWidth - (iTextWidth + XRES_HD(2 * SEPERATOR_WIDTH + 2 * SEPERATOR_WIDTH / 2 + offset) + iwidth), SEPERATOR_HEIGHT + (iheight * j), iwidth, iheight); } } diff --git a/cl_dll/view.cpp b/cl_dll/view.cpp index 246b2af..2dd7c4f 100644 --- a/cl_dll/view.cpp +++ b/cl_dll/view.cpp @@ -1583,10 +1583,10 @@ void V_CalcSpectatorRefdef(struct ref_params_s* pparams) // second renderer cycle, inset window // set inset parameters - pparams->viewport[0] = XRES(gHUD.m_Spectator.m_OverviewData.insetWindowX); // change viewport to inset window - pparams->viewport[1] = YRES(gHUD.m_Spectator.m_OverviewData.insetWindowY); - pparams->viewport[2] = XRES(gHUD.m_Spectator.m_OverviewData.insetWindowWidth); - pparams->viewport[3] = YRES(gHUD.m_Spectator.m_OverviewData.insetWindowHeight); + pparams->viewport[0] = XRES_HD(gHUD.m_Spectator.m_OverviewData.insetWindowX); // change viewport to inset window + pparams->viewport[1] = YRES_HD(gHUD.m_Spectator.m_OverviewData.insetWindowY); + pparams->viewport[2] = XRES_HD(gHUD.m_Spectator.m_OverviewData.insetWindowWidth); + pparams->viewport[3] = YRES_HD(gHUD.m_Spectator.m_OverviewData.insetWindowHeight); pparams->nextView = 0; // on further view // override some settings in certain modes diff --git a/dlls/player.cpp b/dlls/player.cpp index e806fc3..9efa12d 100644 --- a/dlls/player.cpp +++ b/dlls/player.cpp @@ -735,7 +735,7 @@ void CBasePlayer::PackDeadPlayerItems() if (iAmmoRules == GR_PLR_DROP_AMMO_ACTIVE && iWeaponRules == GR_PLR_DROP_GUN_ACTIVE) { - if (FClassnameIs(rgpPackWeapons[0]->pev, "weapon_satchel") && (iPackAmmo[0] == -1 || (m_rgAmmo[iPackAmmo[0]] == 0))) + if (rgpPackWeapons[0] && FClassnameIs(rgpPackWeapons[0]->pev, "weapon_satchel") && (iPackAmmo[0] == -1 || (m_rgAmmo[iPackAmmo[0]] == 0))) { bPackItems = false; }