From b60826eb32ef33c58d5737ef8c2c3d631abfb755 Mon Sep 17 00:00:00 2001 From: str1k3r <115313679+S1l3ntStr1ke87@users.noreply.github.com> Date: Sun, 4 Oct 2026 13:00:44 -0400 Subject: [PATCH] feat: almost accurate XUI settings menu --- .../Common/XUI/XUI_SettingsAll.cpp | 69 +++++++++---------- Minecraft.Client/Minecraft.Client.vcxproj | 2 +- 2 files changed, 32 insertions(+), 39 deletions(-) diff --git a/Minecraft.Client/Common/XUI/XUI_SettingsAll.cpp b/Minecraft.Client/Common/XUI/XUI_SettingsAll.cpp index 27ebcd9a..14033256 100644 --- a/Minecraft.Client/Common/XUI/XUI_SettingsAll.cpp +++ b/Minecraft.Client/Common/XUI/XUI_SettingsAll.cpp @@ -19,7 +19,7 @@ int CScene_SettingsAll::m_iDifficultyTitleSettingA[4]= HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) { - WCHAR TempString[256]; + wchar_t TempString[256]; m_iPad=*(int *)pInitData->pvInitData; bool bNotInGame=(Minecraft::GetInstance()->level==NULL); bool bPrimaryPlayer = ProfileManager.GetPrimaryPad()==m_iPad; @@ -31,32 +31,32 @@ HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) HXUIOBJ hSlider; m_SliderA[SLIDER_SETTINGS_MUSIC].SetValue(app.GetGameSettings(m_iPad,eGameSetting_MusicVolume)); - swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ),app.GetGameSettings(m_iPad,eGameSetting_MusicVolume)); + swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ), app.GetGameSettings(m_iPad,eGameSetting_MusicVolume)); m_SliderA[SLIDER_SETTINGS_MUSIC].SetText(TempString); m_SliderA[SLIDER_SETTINGS_SOUND].SetValue(app.GetGameSettings(m_iPad,eGameSetting_SoundFXVolume)); - swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ),app.GetGameSettings(m_iPad,eGameSetting_SoundFXVolume)); + swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ), app.GetGameSettings(m_iPad,eGameSetting_SoundFXVolume)); m_SliderA[SLIDER_SETTINGS_SOUND].SetText(TempString); m_SliderA[SLIDER_SETTINGS_GAMMA].SetValue(app.GetGameSettings(m_iPad,eGameSetting_Gamma)); - swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_GAMMA ),app.GetGameSettings(m_iPad,eGameSetting_Gamma)); + swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_GAMMA ), app.GetGameSettings(m_iPad,eGameSetting_Gamma)); m_SliderA[SLIDER_SETTINGS_GAMMA].SetText(TempString); m_SliderA[SLIDER_SETTINGS_SENSITIVITY].SetValue(app.GetGameSettings(m_iPad,eGameSetting_Sensitivity)); - swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SENSITIVITY_INGAME ),app.GetGameSettings(m_iPad,eGameSetting_Sensitivity)); //IDS_SLIDER_SENSITIVITY + swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SENSITIVITY_INGAME ), app.GetGameSettings(m_iPad,eGameSetting_Sensitivity)); //IDS_SLIDER_SENSITIVITY m_SliderA[SLIDER_SETTINGS_SENSITIVITY].SetText(TempString); - m_SplitScreen.SetCheck( (app.GetGameSettings(m_iPad,eGameSetting_SplitScreenVertical)!=0)?TRUE:FALSE); - m_SplitScreen.SetText(app.GetString( IDS_CHECKBOX_VERTICAL_SPLIT_SCREEN ) ); + m_SplitScreen.SetCheck((app.GetGameSettings(m_iPad,eGameSetting_SplitScreenVertical)!=0)?TRUE:FALSE); + m_SplitScreen.SetText(app.GetString( IDS_CHECKBOX_VERTICAL_SPLIT_SCREEN )); - m_ViewBob.SetCheck( (app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)?TRUE:FALSE); - m_ViewBob.SetText(app.GetString( IDS_VIEW_BOBBING ) ); + m_ViewBob.SetCheck((app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)?TRUE:FALSE); + m_ViewBob.SetText(app.GetString( IDS_VIEW_BOBBING )); - m_VisibleOnMaps.SetCheck( (app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)?TRUE:FALSE); //eGameSetting_VisibleOnMaps - m_VisibleOnMaps.SetText(app.GetString( IDS_OFF ) ); //IDS_VISIBLE_ON_MAPS + m_VisibleOnMaps.SetCheck((app.GetGameSettings(m_iPad,eGameSetting_ViewBob)!=0)?TRUE:FALSE); //eGameSetting_VisibleOnMaps + m_VisibleOnMaps.SetText(app.GetString( IDS_OFF )); //IDS_VISIBLE_ON_MAPS m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetValue(app.GetGameSettings(m_iPad,eGameSetting_Difficulty)); - swprintf( (WCHAR *)TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ),app.GetString(m_iDifficultyTitleSettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)])); + swprintf(TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ), app.GetString(m_iDifficultyTitleSettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)])); m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetText(TempString); wstring wsText=app.GetString(m_iDifficultySettingA[app.GetGameSettings(m_iPad,eGameSetting_Difficulty)]); @@ -65,16 +65,14 @@ HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) { size = 12; } - wchar_t startTags[64]; - swprintf(startTags,64,L"",app.GetHTMLColour(eHTMLColor_White),size); - wsText= startTags + wsText; + swprintf(TempString, 256, L"", app.GetHTMLColour(eHTMLColor_White), size); + wsText= TempString + wsText; m_DifficultyText.SetText(wsText.c_str()); bool bRemoveDifficulty=false; bool bRemoveSettings=false; float fRemoveHeight=0.0f,fWidth,fHeight; - float fMoveUp=0.0f; if(!bPrimaryPlayer || !bNotInGame) { @@ -101,7 +99,6 @@ HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) hr=XuiElementGetChildById(m_SliderA[SLIDER_SETTINGS_MUSIC].m_hObj,L"XuiSlider",&hSlider); XuiElementSetShow(hSlider,FALSE); XuiControlSetEnable(hSlider,FALSE); - XuiControlSetEnable(hSlider,FALSE); m_SliderA[SLIDER_SETTINGS_MUSIC].GetBounds(&fWidth,&fHeight); fRemoveHeight+=fHeight+4.0f; // add padding @@ -126,9 +123,6 @@ HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) // SPLITSCREEN m_SplitScreen.SetShow(FALSE); m_SplitScreen.SetEnable(FALSE); - m_SplitScreen.GetBounds(&fWidth, &fHeight); - fRemoveHeight+=fCheckboxHeight; - fMoveUp+=fCheckboxHeight; } if(bRemoveDifficulty) @@ -140,7 +134,7 @@ HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) XuiElementSetShow(hSlider,FALSE); XuiControlSetEnable(hSlider,FALSE); m_SliderA[SLIDER_SETTINGS_DIFFICULTY].GetBounds(&fWidth,&fHeight); - fRemoveHeight+=fHeight+4.0f; + if (!bPrimaryPlayer) fRemoveHeight+=fHeight; //str1k3r - dont add this for the primary player or it causes a bug, and dont add padding } else { @@ -150,7 +144,7 @@ HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) { size = 12; } - swprintf(TempString,64,L"",app.GetHTMLColour(eHTMLColor_White),size); + swprintf(TempString, 256, L"", app.GetHTMLColour(eHTMLColor_White), size); wsText= TempString + wsText; m_DifficultyText.SetText(wsText.c_str()); @@ -161,22 +155,22 @@ HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) D3DXVECTOR3 vec; m_SliderA[SLIDER_SETTINGS_SENSITIVITY].GetPosition(&vec); - vec.y-=fMoveUp; + m_SliderA[SLIDER_SETTINGS_SENSITIVITY].GetBounds(&fWidth,&fHeight); + vec.y-=fRemoveHeight-fHeight; m_SliderA[SLIDER_SETTINGS_SENSITIVITY].SetPosition(&vec); m_DifficultyText.GetPosition(&vec); - vec.y-=fMoveUp; + vec.y-=fRemoveHeight; m_DifficultyText.SetPosition(&vec); m_ViewBob.GetPosition(&vec); - vec.y-=fMoveUp; + vec.y-=fRemoveHeight; m_ViewBob.SetPosition(&vec); m_VisibleOnMaps.GetPosition(&vec); - vec.y-=fMoveUp; + vec.y-=fRemoveHeight; m_VisibleOnMaps.SetPosition(&vec); float fbgnWidth, fBgnHeight; GetBounds(&fbgnWidth, &fBgnHeight); - fBgnHeight-=fRemoveHeight; - SetBounds(fbgnWidth, fBgnHeight); + SetBounds(fbgnWidth, fBgnHeight - fRemoveHeight); } // if we're not in the game, we need to use basescene 0 @@ -229,36 +223,36 @@ HRESULT CScene_SettingsAll::OnInit( XUIMessageInit* pInitData, BOOL& bHandled ) HRESULT CScene_SettingsAll::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotifyValueChanged* pNotifyValueChanged, BOOL& bHandled ) { - WCHAR TempString[256]; + wchar_t TempString[256]; if(hObjSource==m_SliderA[SLIDER_SETTINGS_MUSIC].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_MusicVolume,pNotifyValueChanged->nValue); - swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ),pNotifyValueChanged->nValue); + swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_MUSIC ),pNotifyValueChanged->nValue); m_SliderA[SLIDER_SETTINGS_MUSIC].SetText(TempString); } else if(hObjSource==m_SliderA[SLIDER_SETTINGS_SOUND].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_SoundFXVolume,pNotifyValueChanged->nValue); - swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ),pNotifyValueChanged->nValue); + swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SOUND ),pNotifyValueChanged->nValue); m_SliderA[SLIDER_SETTINGS_SOUND].SetText(TempString); } if(hObjSource==m_SliderA[SLIDER_SETTINGS_GAMMA].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_Gamma,pNotifyValueChanged->nValue); - swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_GAMMA ),pNotifyValueChanged->nValue); + swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_GAMMA ),pNotifyValueChanged->nValue); m_SliderA[SLIDER_SETTINGS_GAMMA].SetText(TempString); } if(hObjSource==m_SliderA[SLIDER_SETTINGS_SENSITIVITY].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_Sensitivity,pNotifyValueChanged->nValue); - swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SENSITIVITY_INGAME ),pNotifyValueChanged->nValue); //IDS_SLIDER_SENSITIVITY + swprintf(TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_SENSITIVITY_INGAME ),pNotifyValueChanged->nValue); //IDS_SLIDER_SENSITIVITY m_SliderA[SLIDER_SETTINGS_SENSITIVITY].SetText(TempString); } else if(hObjSource==m_SliderA[SLIDER_SETTINGS_DIFFICULTY].GetSlider() ) { app.SetGameSettings(m_iPad,eGameSetting_Difficulty,pNotifyValueChanged->nValue); - swprintf( (WCHAR *)TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ),app.GetString(m_iDifficultyTitleSettingA[pNotifyValueChanged->nValue])); + swprintf(TempString, 256, L"%ls: %ls", app.GetString( IDS_SLIDER_DIFFICULTY ),app.GetString(m_iDifficultyTitleSettingA[pNotifyValueChanged->nValue])); m_SliderA[SLIDER_SETTINGS_DIFFICULTY].SetText(TempString); wstring wsText=app.GetString(m_iDifficultySettingA[pNotifyValueChanged->nValue]); @@ -267,9 +261,8 @@ HRESULT CScene_SettingsAll::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotifyV { size = 12; } - wchar_t startTags[64]; - swprintf(startTags,64,L"",app.GetHTMLColour(eHTMLColor_White),size); - wsText= startTags + wsText; + swprintf(TempString, 256, L"", app.GetHTMLColour(eHTMLColor_White), size); + wsText= TempString + wsText; m_DifficultyText.SetText(wsText.c_str()); } return S_OK; @@ -334,7 +327,7 @@ HRESULT CScene_SettingsAll::OnTransitionStart( XUIMessageTransition *pTransition float fMaxTextLen=0.0f; float fMaxLen=0.0f; - HXUIOBJ hSlider,hVisual,hText,hCheckboxText; + HXUIOBJ hSlider,hVisual,hText; XUIRect xuiRect; float fWidth,fHeight; D3DXVECTOR3 vec,vSlider,vecCheckboxText,vecCheckbox; diff --git a/Minecraft.Client/Minecraft.Client.vcxproj b/Minecraft.Client/Minecraft.Client.vcxproj index 97064bd9..cd5106c1 100644 --- a/Minecraft.Client/Minecraft.Client.vcxproj +++ b/Minecraft.Client/Minecraft.Client.vcxproj @@ -958,7 +958,7 @@ true $(OutDir)$(ProjectName).pdb - xavatar2.lib;xapilibi.lib;d3d9i.lib;d3dx9.lib;xgraphics.lib;xboxkrnl.lib;xnet.lib;xaudio2.lib;xact3.lib;x3daudio.lib;xmcore.lib;vcomp.lib;xuirun.lib;xuirender.lib;xuihtml.lib;xonline.lib;xhv2.lib;qnetxaudio2.lib;xparty.lib;xbox\4JLibs\libs\4J_Input_r.lib;xbox\4JLibs\libs\4J_Storage_r.lib;xbox\4JLibs\libs\4J_Profile_r.lib;xbox\4JLibs\libs\4J_Render.lib;..\Minecraft.World\Release\Minecraft.World.lib;xbdm.lib;xsocialpost.lib;xrnm.lib;xbox\Sentient\libs\SenCore.lib;xbox\Sentient\libs\SenNews.lib;xbox\Sentient\libs\SenUGC.lib;xbox\Sentient\libs\SenBoxArt.lib;NuiApi.lib;ST.lib;NuiFitnessApi.lib;NuiHandles.lib;NuiSpeech.lib;NuiAudio.lib;xhttp.lib;xauth.lib;xgetserviceendpoint.lib;xav.lib;xjson.lib;xbox\4JLibs\libs\4J_XTMS_r.lib;%(AdditionalDependencies) + xavatar2.lib;xapilibi.lib;d3d9i.lib;d3dx9.lib;xgraphics.lib;xboxkrnl.lib;xnet.lib;xaudio2.lib;xact3.lib;x3daudio.lib;xmcore.lib;vcomp.lib;xuirun.lib;xuirender.lib;xuihtml.lib;xonline.lib;xhv2.lib;qnetxaudio2.lib;xparty.lib;xbox\4JLibs\libs\4J_Input_r.lib;xbox\4JLibs\libs\4J_Storage_r.lib;xbox\4JLibs\libs\4J_Profile_r.lib;xbox\4JLibs\libs\4J_Render.lib;..\Minecraft.World\Build\X360_$(Configuration)\Minecraft.World.lib;xbdm.lib;xsocialpost.lib;xrnm.lib;xbox\Sentient\libs\SenCore.lib;xbox\Sentient\libs\SenNews.lib;xbox\Sentient\libs\SenUGC.lib;xbox\Sentient\libs\SenBoxArt.lib;NuiApi.lib;ST.lib;NuiFitnessApi.lib;NuiHandles.lib;NuiSpeech.lib;NuiAudio.lib;xhttp.lib;xauth.lib;xgetserviceendpoint.lib;xav.lib;xjson.lib;xbox\4JLibs\libs\4J_XTMS_r.lib;%(AdditionalDependencies) xapilib.lib true false