diff --git a/Minecraft.Client/Common/App_enums.h b/Minecraft.Client/Common/App_enums.h index 15a179787..6fe104fe8 100644 --- a/Minecraft.Client/Common/App_enums.h +++ b/Minecraft.Client/Common/App_enums.h @@ -136,6 +136,7 @@ enum eGameSetting eGameSetting_RenderDistance, eGameSetting_Gamma, eGameSetting_FOV, + eGameSetting_GraphicsMode, eGameSetting_Difficulty, eGameSetting_Sensitivity_InGame, eGameSetting_Sensitivity_InMenu, @@ -948,4 +949,4 @@ enum eMCLang eMCLang_hans, eMCLang_hant, -}; \ No newline at end of file +}; diff --git a/Minecraft.Client/Common/App_structs.h b/Minecraft.Client/Common/App_structs.h index 6a6e03546..74a4e8259 100644 --- a/Minecraft.Client/Common/App_structs.h +++ b/Minecraft.Client/Common/App_structs.h @@ -33,7 +33,7 @@ typedef struct unsigned char ucSoundFXVolume; unsigned char ucSensitivity; unsigned char ucGamma; - unsigned char ucPad01; // 1 byte of padding inserted here + unsigned char ucGraphicsMode; unsigned short usBitmaskValues; // bit 0,1 - difficulty // bit 2 - view bob // bit 3 - player visible in a map diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index c3a623d5f..a4cc4377c 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -838,6 +838,7 @@ int CMinecraftApp::SetDefaultOptions(C_4JProfile::PROFILESETTINGS *pSettings,con SetGameSettings(iPad,eGameSetting_RenderDistance,16); SetGameSettings(iPad,eGameSetting_Gamma,50); SetGameSettings(iPad,eGameSetting_FOV,0); + SetGameSettings(iPad,eGameSetting_GraphicsMode,1); // 4J-PB - Don't reset the difficult level if we're in-game if(Minecraft::GetInstance()->level==nullptr) @@ -1334,6 +1335,7 @@ void CMinecraftApp::ApplyGameSettingsChanged(int iPad) ActionGameSettings(iPad,eGameSetting_RenderDistance ); ActionGameSettings(iPad,eGameSetting_Gamma ); ActionGameSettings(iPad,eGameSetting_FOV ); + ActionGameSettings(iPad,eGameSetting_GraphicsMode ); ActionGameSettings(iPad,eGameSetting_Difficulty ); ActionGameSettings(iPad,eGameSetting_Sensitivity_InGame ); ActionGameSettings(iPad,eGameSetting_ViewBob ); @@ -1390,6 +1392,30 @@ void CMinecraftApp::ActionGameSettings(int iPad,eGameSetting eVal) pMinecraft->options->set(Options::Option::RENDER_DISTANCE, 3 - level); }; break; + case eGameSetting_GraphicsMode: + if(iPad == ProfileManager.GetPrimaryPad()) + { + int graphicsLevel = GameSettingsA[iPad]->ucGraphicsMode; + + if (graphicsLevel == 0) { + pMinecraft->options->set(Options::Option::GRAPHICS, false); + pMinecraft->options->set(Options::Option::AMBIENT_OCCLUSION, false); + pMinecraft->options->set(Options::Option::PARTICLES, 2); + } + else if (graphicsLevel == 1) { + pMinecraft->options->set(Options::Option::GRAPHICS, false); + pMinecraft->options->set(Options::Option::AMBIENT_OCCLUSION, true); + if (graphicsLevel == 0) pMinecraft->options->set(Options::Option::PARTICLES, 1); + } + else { + pMinecraft->options->set(Options::Option::GRAPHICS, true); + pMinecraft->options->set(Options::Option::AMBIENT_OCCLUSION, true); + if (graphicsLevel == 0) pMinecraft->options->set(Options::Option::PARTICLES, 0); + } + if (pMinecraft && pMinecraft->levelRenderer && pMinecraft->level) + pMinecraft->levelRenderer->allChanged(); + } + break; case eGameSetting_Gamma: if(iPad==ProfileManager.GetPrimaryPad()) { @@ -1868,6 +1894,17 @@ void CMinecraftApp::SetGameSettings(int iPad,eGameSetting eVal,unsigned char ucV GameSettingsA[iPad]->bSettingsChanged = true; } break; + case eGameSetting_GraphicsMode: + if(GameSettingsA[iPad]->ucGraphicsMode != ucVal) + { + GameSettingsA[iPad]->ucGraphicsMode = ucVal; + if(iPad == ProfileManager.GetPrimaryPad()) + { + ActionGameSettings(iPad, eVal); + } + GameSettingsA[iPad]->bSettingsChanged = true; + } + break; case eGameSetting_Gamma: if(GameSettingsA[iPad]->ucGamma!=ucVal) { @@ -2334,6 +2371,9 @@ unsigned char CMinecraftApp::GetGameSettings(int iPad,eGameSetting eVal) return val; break; } + case eGameSetting_GraphicsMode: + return GameSettingsA[iPad]->ucGraphicsMode; + break; case eGameSetting_Gamma: return GameSettingsA[iPad]->ucGamma; break; diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index 599228503..b05adb14e 100644 Binary files a/Minecraft.Client/Common/Media/MediaWindows64.arc and b/Minecraft.Client/Common/Media/MediaWindows64.arc differ diff --git a/Minecraft.Client/Common/Media/SettingsGraphicsMenu1080.swf b/Minecraft.Client/Common/Media/SettingsGraphicsMenu1080.swf index 2495b4342..9465a9cfb 100644 Binary files a/Minecraft.Client/Common/Media/SettingsGraphicsMenu1080.swf and b/Minecraft.Client/Common/Media/SettingsGraphicsMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsGraphicsMenu480.swf b/Minecraft.Client/Common/Media/SettingsGraphicsMenu480.swf index aae01e78c..0f52da86f 100644 Binary files a/Minecraft.Client/Common/Media/SettingsGraphicsMenu480.swf and b/Minecraft.Client/Common/Media/SettingsGraphicsMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsGraphicsMenu720.swf b/Minecraft.Client/Common/Media/SettingsGraphicsMenu720.swf index 4e860fb1f..dc66d8d33 100644 Binary files a/Minecraft.Client/Common/Media/SettingsGraphicsMenu720.swf and b/Minecraft.Client/Common/Media/SettingsGraphicsMenu720.swf differ diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp index b258d8c31..c9fc232f8 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp @@ -68,8 +68,20 @@ UIScene_SettingsGraphicsMenu::UIScene_SettingsGraphicsMenu(int iPad, void *initD swprintf(TempString, 256, L"Render Distance: %d",app.GetGameSettings(m_iPad,eGameSetting_RenderDistance)); m_sliderRenderDistance.init(TempString,eControl_RenderDistance,0,5,DistanceToLevel(app.GetGameSettings(m_iPad,eGameSetting_RenderDistance))); - - swprintf( TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_GAMMA ),app.GetGameSettings(m_iPad,eGameSetting_Gamma)); + + int currentGraphics = app.GetGameSettings(m_iPad, eGameSetting_GraphicsMode); + + const wchar_t* graphicsText = L""; + if (currentGraphics == 0) graphicsText = L"Graphics: Potato"; + else if (currentGraphics == 1) graphicsText = L"Graphics: Fast"; + else graphicsText = L"Graphics: Fancy"; + + swprintf((WCHAR*)TempString, 256, L"%ls", graphicsText); + + m_sliderGraphicsMode.init(TempString, eControl_GraphicsMode, 0, 2, currentGraphics); + + swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_GAMMA ),app.GetGameSettings(m_iPad,eGameSetting_Gamma)); + m_sliderGamma.init(TempString,eControl_Gamma,0,100,app.GetGameSettings(m_iPad,eGameSetting_Gamma)); const int initialFovSlider = app.GetGameSettings(m_iPad, eGameSetting_FOV); @@ -205,7 +217,21 @@ void UIScene_SettingsGraphicsMenu::handleSliderMove(F64 sliderId, F64 currentVal m_sliderRenderDistance.setLabel(TempString); } break; + case eControl_GraphicsMode: + { + m_sliderGraphicsMode.handleSliderMove(value); + + app.SetGameSettings(m_iPad, eGameSetting_GraphicsMode, value); + + const wchar_t* modeName = L"Potato"; + if (value == 1) modeName = L"Fast"; + else if (value == 2) modeName = L"Fancy"; + + swprintf(TempString, 256, L"Graphics: %ls", modeName); + m_sliderGraphicsMode.setLabel(TempString); + } + break; case eControl_Gamma: m_sliderGamma.handleSliderMove(value); diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.h b/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.h index 99022c83f..41e9be0e5 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.h @@ -15,11 +15,12 @@ class UIScene_SettingsGraphicsMenu : public UIScene eControl_RenderDistance, eControl_Gamma, eControl_FOV, - eControl_InterfaceOpacity + eControl_InterfaceOpacity, + eControl_GraphicsMode }; UIControl_CheckBox m_checkboxClouds, m_checkboxBedrockFog, m_checkboxCustomSkinAnim; // Checkboxes - UIControl_Slider m_sliderRenderDistance, m_sliderGamma, m_sliderFOV, m_sliderInterfaceOpacity; // Sliders + UIControl_Slider m_sliderRenderDistance, m_sliderGamma, m_sliderFOV, m_sliderInterfaceOpacity, m_sliderGraphicsMode; // Sliders UI_BEGIN_MAP_ELEMENTS_AND_NAMES(UIScene) UI_MAP_ELEMENT( m_checkboxClouds, "Clouds") UI_MAP_ELEMENT( m_checkboxBedrockFog, "BedrockFog") @@ -28,6 +29,7 @@ class UIScene_SettingsGraphicsMenu : public UIScene UI_MAP_ELEMENT( m_sliderGamma, "Gamma") UI_MAP_ELEMENT(m_sliderFOV, "FOV") UI_MAP_ELEMENT( m_sliderInterfaceOpacity, "InterfaceOpacity") + UI_MAP_ELEMENT( m_sliderGraphicsMode, "GraphicsMode") UI_END_MAP_ELEMENTS_AND_NAMES() bool m_bNotInGame; @@ -53,4 +55,4 @@ class UIScene_SettingsGraphicsMenu : public UIScene static int LevelToDistance(int dist); static int DistanceToLevel(int dist); -}; \ No newline at end of file +}; diff --git a/Minecraft.Client/GameRenderer.cpp b/Minecraft.Client/GameRenderer.cpp index 73b39529c..7069655f0 100644 --- a/Minecraft.Client/GameRenderer.cpp +++ b/Minecraft.Client/GameRenderer.cpp @@ -1524,7 +1524,7 @@ void GameRenderer::renderLevel(float a, int64_t until) // 4J - have changed this fancy rendering option to work with our command buffers. The original used to use frame buffer flags to disable // writing to colour when doing the z-only pass, but that value gets obliterated by our command buffers. Using alpha blend function instead // to achieve the same effect. - if (true) // (mc->options->fancyGraphics) + if (mc->options->fancyGraphics) { if (mc->options->ambientOcclusion) { diff --git a/Minecraft.Client/Options.cpp b/Minecraft.Client/Options.cpp index ebe1295af..fb6346b03 100644 --- a/Minecraft.Client/Options.cpp +++ b/Minecraft.Client/Options.cpp @@ -117,7 +117,7 @@ void Options::init() anaglyph3d = false; advancedOpengl = false; framerateLimit = 0; - fancyGraphics = true; + fancyGraphics = false; ambientOcclusion = true; renderClouds = true; skin = L"Default"; @@ -242,6 +242,14 @@ void Options::set(const Options::Option *item, float fVal) { viewDistance = fVal; } + if (item == Option::GRAPHICS) + { + fancyGraphics = fVal; + } + if (item == Option::AMBIENT_OCCLUSION) + { + ambientOcclusion = fVal; + } } void Options::toggle(const Options::Option *option, int dir) @@ -297,6 +305,8 @@ float Options::getProgressValue(const Options::Option *item) if (item == Option::SOUND) return sound; if (item == Option::SENSITIVITY) return sensitivity; if (item == Option::RENDER_DISTANCE) return viewDistance; + if (item == Option::GRAPHICS) return fancyGraphics; + if (item == Option::AMBIENT_OCCLUSION) return ambientOcclusion; return 0; } diff --git a/Minecraft.Client/TileRenderer.cpp b/Minecraft.Client/TileRenderer.cpp index b77729ab5..703b0aa35 100644 --- a/Minecraft.Client/TileRenderer.cpp +++ b/Minecraft.Client/TileRenderer.cpp @@ -13,7 +13,7 @@ #include "EntityTileRenderer.h" #include "Options.h" -bool TileRenderer::fancy = true; +bool TileRenderer::fancy = false; const float smallUV = ( 1.0f / 16.0f );