diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index 43cf73e15..4b5902786 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -837,7 +837,7 @@ int CMinecraftApp::SetDefaultOptions(C_4JProfile::PROFILESETTINGS *pSettings,con SetGameSettings(iPad,eGameSetting_SoundFXVolume,DEFAULT_VOLUME_LEVEL); SetGameSettings(iPad,eGameSetting_RenderDistance,16); SetGameSettings(iPad,eGameSetting_Gamma,50); - SetGameSettings(iPad,eGameSetting_FOV,0); + SetGameSettings(iPad,eGameSetting_FOV,75); // jvnpr -- default to 75% between 30 and 110, which is 90 (70 internal) // 4J-PB - Don't reset the difficult level if we're in-game if(Minecraft::GetInstance()->level==NULL) @@ -1406,8 +1406,9 @@ void CMinecraftApp::ActionGameSettings(int iPad,eGameSetting eVal) case eGameSetting_FOV: if(iPad==ProfileManager.GetPrimaryPad()) { - float fovDeg = 70.0f + (float)GameSettingsA[iPad]->ucFov * 40.0f / 100.0f; - pMinecraft->gameRenderer->SetFovVal(fovDeg); + float simulatedFovDeg = 30.0f + (float)GameSettingsA[iPad]->ucFov * 80.0f / 100.0f; // jvnpr -- convert 0-80 to 30-110 + float trueFovDeg = ( 55.0f / 80.0f ) * (simulatedFovDeg - 30.0f) + 30.0f; // jnvpr -- further convert 30-110 to a range from 30-85 to better reflect JE fov values + pMinecraft->gameRenderer->SetFovVal(trueFovDeg); pMinecraft->options->set(Options::Option::FOV, (float)GameSettingsA[iPad]->ucFov / 100.0f); } break; diff --git a/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp b/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp index fafcea027..54aa57cd2 100644 --- a/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp @@ -23,10 +23,10 @@ UIScene_DebugOverlay::UIScene_DebugOverlay(int iPad, void *initData, UILayer *pa Minecraft *pMinecraft = Minecraft::GetInstance(); WCHAR TempString[256]; - int fovSliderVal = app.GetGameSettings(m_iPad, eGameSetting_FOV); - int fovDeg = 70 + fovSliderVal * 40 / 100; + int fovSliderVal = app.GetGameSettings(m_iPad, eGameSetting_FOV) * 80.0f / 100.0f; + int fovDeg = 30 + fovSliderVal * 80 / 100; swprintf( (WCHAR *)TempString, 256, L"Set fov (%d)", fovDeg); - m_sliderFov.init(TempString,eControl_FOV,0,100,fovSliderVal); + m_sliderFov.init(TempString,eControl_FOV,0,80,fovSliderVal); float currentTime = pMinecraft->level->getLevelData()->getGameTime() % 24000; swprintf( (WCHAR *)TempString, 256, L"Set time (unsafe) (%d)", (int)currentTime); @@ -274,16 +274,17 @@ void UIScene_DebugOverlay::handleSliderMove(F64 sliderId, F64 currentValue) break; case eControl_FOV: { - Minecraft *pMinecraft = Minecraft::GetInstance(); int v = (int)currentValue; + Minecraft *pMinecraft = Minecraft::GetInstance(); if (v < 0) v = 0; - if (v > 100) v = 100; - int fovDeg = 70 + v * 40 / 100; - pMinecraft->gameRenderer->SetFovVal((float)fovDeg); - app.SetGameSettings(m_iPad, eGameSetting_FOV, v); + if (v > 80) v = 80; + int simulatedFovDeg = v + 30; // jvnpr -- convert 0-80 to 30-110 + float trueFovDeg = ( 55.0f / 80.0f ) * (simulatedFovDeg - 30.0f) + 30.0f; // jvnpr -- further convert 30-110 to a range from 30-85 to better reflect JE fov values + pMinecraft->gameRenderer->SetFovVal(trueFovDeg); + app.SetGameSettings(m_iPad, eGameSetting_FOV, (v / (80.0f / 100.0f))); WCHAR TempString[256]; - swprintf( (WCHAR *)TempString, 256, L"Set fov (%d)", fovDeg); + swprintf( (WCHAR *)TempString, 256, L"FOV: %d (True: %d)", simulatedFovDeg, (int)trueFovDeg); m_sliderFov.setLabel(TempString); } break; diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp index 423c8f4b2..aa80e7926 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp @@ -7,6 +7,10 @@ namespace { + /* + + jvnpr -- commented out this code from the kbm refactor to modify fov system :p + const int FOV_MIN = 70; const int FOV_MAX = 110; const int FOV_SLIDER_MAX = 100; @@ -30,6 +34,8 @@ namespace if (sliderValue > FOV_SLIDER_MAX) sliderValue = FOV_SLIDER_MAX; return FOV_MIN + ((sliderValue * (FOV_MAX - FOV_MIN)) / FOV_SLIDER_MAX); } + + */ } int UIScene_SettingsGraphicsMenu::LevelToDistance(int level) @@ -71,10 +77,10 @@ UIScene_SettingsGraphicsMenu::UIScene_SettingsGraphicsMenu(int iPad, void *initD 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)); - int initialFovSlider = app.GetGameSettings(m_iPad, eGameSetting_FOV); - int initialFovDeg = sliderValueToFov(initialFovSlider); - swprintf((WCHAR*)TempString, 256, L"FOV: %d", initialFovDeg); - m_sliderFOV.init(TempString, eControl_FOV, 0, FOV_SLIDER_MAX, initialFovSlider); + //int initialFovSlider = app.GetGameSettings(m_iPad, eGameSetting_FOV); + //int initialFovDeg = sliderValueToFov(initialFovSlider); + swprintf((WCHAR*)TempString, 256, L"FOV: %d", (int)(30.0f + app.GetGameSettings(m_iPad, eGameSetting_FOV) * 80.0f / 100.0f)); + m_sliderFOV.init(TempString, eControl_FOV, 0, 80, (app.GetGameSettings(m_iPad, eGameSetting_FOV)) * 80.0f / 100.0f); swprintf( (WCHAR *)TempString, 256, L"%ls: %d%%", app.GetString( IDS_SLIDER_INTERFACEOPACITY ),app.GetGameSettings(m_iPad,eGameSetting_InterfaceOpacity)); m_sliderInterfaceOpacity.init(TempString,eControl_InterfaceOpacity,0,100,app.GetGameSettings(m_iPad,eGameSetting_InterfaceOpacity)); @@ -215,14 +221,31 @@ void UIScene_SettingsGraphicsMenu::handleSliderMove(F64 sliderId, F64 currentVal break; case eControl_FOV: - { + { /* jvnpr -- commented code from keyboard mouse refactor m_sliderFOV.handleSliderMove(value); + int fovVal = value + 30; Minecraft* pMinecraft = Minecraft::GetInstance(); - int fovValue = sliderValueToFov(value); - pMinecraft->gameRenderer->SetFovVal((float)fovValue); - app.SetGameSettings(m_iPad, eGameSetting_FOV, value); + //int fovValue = sliderValueToFov(value); + pMinecraft->gameRenderer->SetFovVal((float)fovVal); + app.SetGameSettings(m_iPad, eGameSetting_FOV, fovVal); WCHAR TempString[256]; - swprintf((WCHAR*)TempString, 256, L"FOV: %d", fovValue); + swprintf((WCHAR*)TempString, 256, L"FOV: %d", fovVal); + m_sliderFOV.setLabel(TempString); + + */ + + int v = (int)currentValue; + m_sliderFOV.handleSliderMove(v); + Minecraft *pMinecraft = Minecraft::GetInstance(); + if (v < 0) v = 0; + if (v > 80) v = 80; + int simulatedFovDeg = v + 30; // jvnpr -- convert 0-80 to 30-110 + float trueFovDeg = ( 55.0f / 80.0f ) * (simulatedFovDeg - 30.0f) + 30.0f; // jvnpr -- further convert 30-110 to a range from 30-85 to better reflect JE fov values + pMinecraft->gameRenderer->SetFovVal(trueFovDeg); + app.SetGameSettings(m_iPad, eGameSetting_FOV, (v / (80.0f / 100.0f))); + + WCHAR TempString[256]; + swprintf( (WCHAR *)TempString, 256, L"FOV: %d (True: %d)", simulatedFovDeg, (int)trueFovDeg); m_sliderFOV.setLabel(TempString); } break; diff --git a/Minecraft.Client/GameRenderer.cpp b/Minecraft.Client/GameRenderer.cpp index 20a0f1e31..348916fdd 100644 --- a/Minecraft.Client/GameRenderer.cpp +++ b/Minecraft.Client/GameRenderer.cpp @@ -132,6 +132,8 @@ GameRenderer::GameRenderer(Minecraft *mc) m_fov=70.0f; + h_fov=70.0f; // jvnpr -- Hardcoded hand FOV to prevent scaling with main renderer fov + // 4J Stu - Init these so they are setup before the tick for( int i = 0; i < 4; i++ ) { @@ -714,14 +716,14 @@ void GameRenderer::renderItemInHand(float a, int eye) // 4J - have split out fov & aspect calculation so we can take into account viewports float fov, aspect; - getFovAndAspect(fov, aspect, a, false); + getFovAndAspect(fov, aspect, a, false); // jvnpr -- don't need to run fov calc since it's hardcoded now but it's probably better to just leave this if (zoom != 1) { glTranslatef((float) zoom_x, (float) -zoom_y, 0); glScaled(zoom, zoom, 1); } - gluPerspective(fov, aspect, 0.05f, renderDistance * 2); + gluPerspective(h_fov, aspect, 0.05f, renderDistance * 2); // jvnpr -- hardcoded h_fov to fix hand fov scaling if (mc->gameMode->isCutScene()) { diff --git a/Minecraft.Client/GameRenderer.h b/Minecraft.Client/GameRenderer.h index 21cf8acba..17ec0a2ec 100644 --- a/Minecraft.Client/GameRenderer.h +++ b/Minecraft.Client/GameRenderer.h @@ -88,6 +88,8 @@ private: bool isInClouds; float m_fov; + + float h_fov; // jvnpr -- Hardcoded hand FOV to prevent scaling with main renderer fov public: GameRenderer(Minecraft *mc); ~GameRenderer();