diff --git a/Minecraft.Client/Common/App_Defines.h b/Minecraft.Client/Common/App_Defines.h index 7e96896c9..c29cba883 100644 --- a/Minecraft.Client/Common/App_Defines.h +++ b/Minecraft.Client/Common/App_Defines.h @@ -104,6 +104,7 @@ enum EGameHostOptionWorldSize #define GAMESETTING_ANIMATEDCHARACTER 0x00008000 #define GAMESETTING_PS3EULAREAD 0x00010000 #define GAMESETTING_PSVITANETWORKMODEADHOC 0x00020000 +#define GAMESETTING_JAVAFLIGHTCONTROLS 0x00040000 // defines for languages diff --git a/Minecraft.Client/Common/App_enums.h b/Minecraft.Client/Common/App_enums.h index 15a179787..782fb628d 100644 --- a/Minecraft.Client/Common/App_enums.h +++ b/Minecraft.Client/Common/App_enums.h @@ -178,6 +178,8 @@ enum eGameSetting // PSVita eGameSetting_PSVita_NetworkModeAdhoc, + // Windows64 + eGameSetting_JavaFlightControls, }; diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index 43cf73e15..2aa72fbbf 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -2308,6 +2308,13 @@ void CMinecraftApp::SetGameSettings(int iPad,eGameSetting eVal,unsigned char ucV GameSettingsA[iPad]->bSettingsChanged=true; } break; + case eGameSetting_JavaFlightControls: + if(ucVal==1) + GameSettingsA[iPad]->uiBitmaskValues|=GAMESETTING_JAVAFLIGHTCONTROLS; + else + GameSettingsA[iPad]->uiBitmaskValues&=~GAMESETTING_JAVAFLIGHTCONTROLS; + GameSettingsA[iPad]->bSettingsChanged=true; + break; } } @@ -2444,6 +2451,9 @@ unsigned char CMinecraftApp::GetGameSettings(int iPad,eGameSetting eVal) case eGameSetting_PSVita_NetworkModeAdhoc: return (GameSettingsA[iPad]->uiBitmaskValues&GAMESETTING_PSVITANETWORKMODEADHOC)>>17; + case eGameSetting_JavaFlightControls: + return (GameSettingsA[iPad]->uiBitmaskValues&GAMESETTING_JAVAFLIGHTCONTROLS)?1:0; + } return 0; } diff --git a/Minecraft.Client/Common/Media/MediaWindows64.arc b/Minecraft.Client/Common/Media/MediaWindows64.arc index 6ce552c53..1d5929596 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/SettingsOptionsMenu1080.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenu1080.swf index ede969352..f20b9bad7 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenu1080.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenu1080.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenu480.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenu480.swf index d3d5b93ef..e1684f970 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenu480.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenu480.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenu720.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenu720.swf index ce8434bf7..e865a2244 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenu720.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenu720.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit1080.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit1080.swf index b435a238f..2e0909a25 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit1080.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit1080.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit720.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit720.swf index d178d4cb5..562b0f5e5 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit720.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenuSplit720.swf differ diff --git a/Minecraft.Client/Common/Media/SettingsOptionsMenuVita.swf b/Minecraft.Client/Common/Media/SettingsOptionsMenuVita.swf index 562a0c224..7816bbce4 100644 Binary files a/Minecraft.Client/Common/Media/SettingsOptionsMenuVita.swf and b/Minecraft.Client/Common/Media/SettingsOptionsMenuVita.swf differ diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp index 6898d489a..220aaff71 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.cpp @@ -35,6 +35,7 @@ UIScene_SettingsOptionsMenu::UIScene_SettingsOptionsMenu(int iPad, void *initDat m_checkboxShowHints.init(IDS_HINTS,eControl_ShowHints,(app.GetGameSettings(m_iPad,eGameSetting_Hints)!=0)); m_checkboxShowTooltips.init(IDS_IN_GAME_TOOLTIPS,eControl_ShowTooltips,(app.GetGameSettings(m_iPad,eGameSetting_Tooltips)!=0)); m_checkboxInGameGamertags.init(IDS_IN_GAME_GAMERTAGS,eControl_InGameGamertags,(app.GetGameSettings(m_iPad,eGameSetting_GamertagsVisible)!=0)); + m_checkboxJavaFlightControls.init(L"Java Flight Controls",eControl_JavaFlightControls,(app.GetGameSettings(m_iPad,eGameSetting_JavaFlightControls)!=0)); // check if we should display the mash-up option if(m_bNotInGame && app.GetMashupPackWorlds(m_iPad)!=0xFFFFFFFF) @@ -259,6 +260,7 @@ void UIScene_SettingsOptionsMenu::handleReload() m_checkboxShowHints.init(IDS_HINTS,eControl_ShowHints,(app.GetGameSettings(m_iPad,eGameSetting_Hints)!=0)); m_checkboxShowTooltips.init(IDS_IN_GAME_TOOLTIPS,eControl_ShowTooltips,(app.GetGameSettings(m_iPad,eGameSetting_Tooltips)!=0)); m_checkboxInGameGamertags.init(IDS_IN_GAME_GAMERTAGS,eControl_InGameGamertags,(app.GetGameSettings(m_iPad,eGameSetting_GamertagsVisible)!=0)); + m_checkboxJavaFlightControls.init(L"Java Flight Controls",eControl_JavaFlightControls,(app.GetGameSettings(m_iPad,eGameSetting_JavaFlightControls)!=0)); // check if we should display the mash-up option if(m_bNotInGame && app.GetMashupPackWorlds(m_iPad)!=0xFFFFFFFF) @@ -415,6 +417,7 @@ void UIScene_SettingsOptionsMenu::setGameSettings() app.SetGameSettings(m_iPad,eGameSetting_GamertagsVisible,m_checkboxInGameGamertags.IsChecked()?1:0); app.SetGameSettings(m_iPad,eGameSetting_Hints,m_checkboxShowHints.IsChecked()?1:0); app.SetGameSettings(m_iPad,eGameSetting_Tooltips,m_checkboxShowTooltips.IsChecked()?1:0); + app.SetGameSettings(m_iPad,eGameSetting_JavaFlightControls,m_checkboxJavaFlightControls.IsChecked()?1:0); // the mashup option will only be shown if some worlds have been previously hidden if(m_bMashUpWorldsUnhideOption && m_checkboxMashupWorlds.IsChecked()) diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.h b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.h index e9abb0a97..ce2f69f2a 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.h +++ b/Minecraft.Client/Common/UI/UIScene_SettingsOptionsMenu.h @@ -11,6 +11,7 @@ private: eControl_ShowHints, eControl_ShowTooltips, eControl_InGameGamertags, + eControl_JavaFlightControls, eControl_ShowMashUpWorlds, eControl_Autosave, eControl_Languages, @@ -21,7 +22,7 @@ protected: static int m_iDifficultyTitleSettingA[4]; private: - UIControl_CheckBox m_checkboxViewBob, m_checkboxShowHints, m_checkboxShowTooltips, m_checkboxInGameGamertags, m_checkboxMashupWorlds; // Checkboxes + UIControl_CheckBox m_checkboxViewBob, m_checkboxShowHints, m_checkboxShowTooltips, m_checkboxInGameGamertags, m_checkboxJavaFlightControls, m_checkboxMashupWorlds; // Checkboxes UIControl_Slider m_sliderAutosave, m_sliderDifficulty; // Sliders UIControl_Label m_labelDifficultyText; //Text UIControl_Button m_buttonLanguageSelect; @@ -31,6 +32,7 @@ private: UI_MAP_ELEMENT( m_checkboxShowHints, "ShowHints") UI_MAP_ELEMENT( m_checkboxShowTooltips, "ShowTooltips") UI_MAP_ELEMENT( m_checkboxInGameGamertags, "InGameGamertags") + UI_MAP_ELEMENT( m_checkboxJavaFlightControls, "JavaFlightControls") UI_MAP_ELEMENT( m_checkboxMashupWorlds, "ShowMashUpWorlds") UI_MAP_ELEMENT( m_sliderAutosave, "Autosave") UI_MAP_ELEMENT( m_sliderDifficulty, "Difficulty") diff --git a/Minecraft.Client/LocalPlayer.cpp b/Minecraft.Client/LocalPlayer.cpp index bd9c707ef..89804084b 100644 --- a/Minecraft.Client/LocalPlayer.cpp +++ b/Minecraft.Client/LocalPlayer.cpp @@ -252,7 +252,8 @@ void LocalPlayer::aiStep() bool forwardEnoughToContinueSprint = input->ya >= runTreshold; // 4J - altered this slightly to make sure that the joypad returns to below returnTreshold in between registering two movements up to runThreshold - if ((onGround || abilities.flying) && !isSprinting() && enoughFoodToSprint && !isUsingItem() && !hasEffect(MobEffect::blindness)) + bool javaFlight = app.GetGameSettings(m_iPad, eGameSetting_JavaFlightControls) != 0; + if ((onGround || (javaFlight && abilities.flying)) && !isSprinting() && enoughFoodToSprint && !isUsingItem() && !hasEffect(MobEffect::blindness)) { if( !wasRunning && forwardEnoughToTriggerSprint ) { @@ -278,7 +279,7 @@ void LocalPlayer::aiStep() } if (isSneaking()) sprintTriggerTime = 0; #ifdef _WINDOWS64 - if (input->sprinting && (onGround || abilities.flying) && enoughFoodToSprint && !isUsingItem() && !hasEffect(MobEffect::blindness) && !isSneaking()) + if (input->sprinting && (onGround || (javaFlight && abilities.flying)) && enoughFoodToSprint && !isUsingItem() && !hasEffect(MobEffect::blindness) && !isSneaking()) { setSprinting(true); } @@ -333,10 +334,20 @@ void LocalPlayer::aiStep() if (abilities.flying) { - if (ullButtonsPressed & (1LL<jumping) + if (javaFlight) { - yd += 0.15f; + if (ullButtonsPressed & (1LL<jumping) yd += 0.15f; + } + else + { + // 4J - note that the 0.42 added for going down is to make it match with what happens when you jump - jumping itself adds 0.42 to yd in Mob::jumpFromGround + if (ullButtonsPressed & (1LL<jumping) + { + noJumpDelay = 0; + yd += 0.15; + } } // snap y rotation to nearest 90 degree axis aligned value @@ -431,22 +442,50 @@ void LocalPlayer::aiStep() else #endif { - flyX = 0.0f; - flyY = 0.0f; - flyZ = 0.0f; - if( ullDpad_filtered & (1LL<x * input->ya; + flyY = (float)viewVector->y * input->ya; + flyZ = (float)viewVector->z * input->ya; + + float scale = ((float)(SPRINT_DURATION - sprintTime))/10.0f; + scale = scale * scale; + if ( scale > 1.0f ) scale = 1.0f; + flyX *= scale; + flyY *= scale; + flyZ *= scale; + } + else + { + flyX = 0.0f; + flyY = 0.0f; + flyZ = 0.0f; + if( ullDpad_filtered & (1LL<getValue()); @@ -2082,7 +2083,8 @@ void Player::awardStat(Stat *stat, byteArray paramBlob) void Player::jumpFromGround() { - if (abilities.flying) return; + if (abilities.flying && app.GetGameSettings(0, eGameSetting_JavaFlightControls) != 0) + return; LivingEntity::jumpFromGround(); @@ -2108,12 +2110,22 @@ void Player::travel(float xa, float ya) { double savedYd = yd; float ofs = flyingSpeed; - flyingSpeed = abilities.getFlyingSpeed() * (isSprinting() ? 2 : 1); - bool wasOnGround = onGround; - onGround = false; - LivingEntity::travel(xa, ya); - onGround = wasOnGround; - yd = savedYd * 0.6; + bool javaFlight = app.GetGameSettings(0, eGameSetting_JavaFlightControls) != 0; + if (javaFlight) + { + flyingSpeed = abilities.getFlyingSpeed() * (isSprinting() ? 2 : 1); + bool wasOnGround = onGround; + onGround = false; + LivingEntity::travel(xa, ya); + onGround = wasOnGround; + yd = savedYd * 0.6; + } + else + { + flyingSpeed = abilities.getFlyingSpeed(); + LivingEntity::travel(xa, ya); + yd = savedYd * 0.6; + } flyingSpeed = ofs; } else