Added user prompt to decide between mouse or controller

This commit is contained in:
uberhalit 2019-04-09 22:10:22 +02:00
parent c6faf5c28a
commit 1b51f98e41
6 changed files with 31 additions and 12 deletions

View file

@ -19,7 +19,7 @@ Patches games memory while running, does not modify any game files. Works with e
* add a custom resolution, 21:9 widescreen supported (will overwrite the default 1920x1080 / 1280x720 resolution, HUD limited to 16/9) * add a custom resolution, 21:9 widescreen supported (will overwrite the default 1920x1080 / 1280x720 resolution, HUD limited to 16/9)
* increase and decrease field of view (FOV) * increase and decrease field of view (FOV)
* set the game to borderless window mode * set the game to borderless window mode
* disable camera auto rotate adjustment on movement (for mouse users only!) * disable camera auto rotate adjustment on movement (intended for mouse users)
* display hidden counters such as death/kill count and optionally log them to file to display in OBS * display hidden counters such as death/kill count and optionally log them to file to display in OBS
* game modifications * game modifications
* global game speed modifier (increase or decrease) * global game speed modifier (increase or decrease)
@ -30,7 +30,7 @@ Patches games memory while running, does not modify any game files. Works with e
## Usage ## Usage
The following graphical guide has to be done if you want to unlock the game's framerate or play on a higher refresh rate in fullscreen. If you do not wish to use that feature you can scroll down further to the guides on all other features. The graphic setup has to be done only once but as the patcher hot-patches the memory **you have to start the patcher every time you want use any of its features**. The following graphical guide has to be done if you want to unlock the game's framerate or play on a higher refresh rate in fullscreen. If you do not wish to use that feature you can scroll down further to the guides on all other features. The graphic setup has to be done only once but as the patcher hot-patches the memory **you have to start the patcher every time you want to use any of its features**.
The game enforces VSYNC and forces 60 Hz in fullscreen even on 144 Hz monitors so we have to override these. The game enforces VSYNC and forces 60 Hz in fullscreen even on 144 Hz monitors so we have to override these.
@ -122,7 +122,7 @@ The game enforces VSYNC and forces 60 Hz in fullscreen even on 144 Hz monitors s
5. If you want fullscreen borderless enable `Fullscreen stretch` 5. If you want fullscreen borderless enable `Fullscreen stretch`
### On 'Disable camera auto rotate on movement': ### On 'Disable camera auto rotate on movement':
This is intended exclusively for mouse users, enabling it on non-native windows controller-input can temporary disable your up-down controls. Disabling the automatic camera adjustments makes little sense on controllers. This will completely disable the automatic camera rotation adjustments when you are moving. This is mostly intended for mouse users, enabling it on non-native windows controllers will not work perfectly (some rotation adjustments will be left) and you will temporary lose the ability to slow-tilt (deadzones). Disabling the automatic camera adjustments makes little sense on controllers. If you changed your input device or made a mistake while selecting it simply close the utility, delete the `SekiroFpsUnlockAndMore.xml` file and restart the mod.
### To display total death/kill counters in OBS: ### To display total death/kill counters in OBS:
1. Start the game 1. Start the game
@ -204,7 +204,7 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file
* the game has forced VSYNC so unlocking the frame rate when your monitor has 60Hz will do nothing. You'll have to disable VSYNC in Nvidia Control Panel or AMD Radeon Settings first, see Usage * the game has forced VSYNC so unlocking the frame rate when your monitor has 60Hz will do nothing. You'll have to disable VSYNC in Nvidia Control Panel or AMD Radeon Settings first, see Usage
* in fullscreen the game forces the monitor to 60 Hz so you'll have to handle this with driver override too, see Usage * in fullscreen the game forces the monitor to 60 Hz so you'll have to handle this with driver override too, see Usage
* your monitor has to support your custom resolution otherwise it won't show up correctly * your monitor has to support your custom resolution otherwise it won't show up correctly
* due to how the game renders altering HUD is limited to 16:9 even on 21:9 resolutions * due to how the game renders the HUD is limited to 16:9 even on 21:9 resolutions
* disabling automatic camera rotation adjustment on movement is intended for mouse users only, using it on a non-native windows controller can disable up-down controls * disabling automatic camera rotation adjustment on movement is intended for mouse users only, using it on a non-native windows controller can disable up-down controls
* Player speed modification needs a loaded save before it can be activated * Player speed modification needs a loaded save before it can be activated
* Player and game speed modification can potentially crash the game in certain cutscenes and NPC interactions, use with caution * Player and game speed modification can potentially crash the game in certain cutscenes and NPC interactions, use with caution

View file

@ -240,6 +240,7 @@ namespace SekiroFpsUnlockAndMore
}; };
/** /**
Controls automatic camera pitch adjust on move on XY-axis. Pointer in rax holds new pitch while rsi+170 holds current one prior movement so we overwrite xmm0 with the old pitch value and then overwrite [rax] with xmm0 Controls automatic camera pitch adjust on move on XY-axis. Pointer in rax holds new pitch while rsi+170 holds current one prior movement so we overwrite xmm0 with the old pitch value and then overwrite [rax] with xmm0
Breaks Pitch on emulated controllers...
000000014073B476 | F3:0F1000 | movss xmm0,dword ptr ds:[rax] | newCamPitch | code inject overwrite from here 000000014073B476 | F3:0F1000 | movss xmm0,dword ptr ds:[rax] | newCamPitch | code inject overwrite from here
000000014073B47A | F3:0F1186 70010000 | movss dword ptr ds:[rsi+170],xmm0 | camPitch 000000014073B47A | F3:0F1186 70010000 | movss dword ptr ds:[rsi+170],xmm0 | camPitch
000000014073B482 | F3:0F1085 E4120000 | movss xmm0,dword ptr ss:[rbp+12E4] | jump back here from code inject 000000014073B482 | F3:0F1085 E4120000 | movss xmm0,dword ptr ss:[rbp+12E4] | jump back here from code inject

View file

@ -28,7 +28,7 @@
<CheckBox x:Name="cbBorderless" DockPanel.Dock="Left" Margin="0,0,0,0" Height="25" FontSize="14 px" VerticalContentAlignment="Center" Content="Borderless window" ToolTip="To enable this set 'Windowed' mode in game options first." IsEnabled="False" Checked="CbBorderless_Checked" Unchecked="CbBorderless_Unchecked"/> <CheckBox x:Name="cbBorderless" DockPanel.Dock="Left" Margin="0,0,0,0" Height="25" FontSize="14 px" VerticalContentAlignment="Center" Content="Borderless window" ToolTip="To enable this set 'Windowed' mode in game options first." IsEnabled="False" Checked="CbBorderless_Checked" Unchecked="CbBorderless_Unchecked"/>
<CheckBox x:Name="cbBorderlessStretch" DockPanel.Dock="Right" Margin="10,0,0,0" Height="25" FontSize="14 px" VerticalContentAlignment="Center" Content="Fullscreen stretch" IsEnabled="False" Checked="CbBorderlessStretch_Check_Handler" Unchecked="CbBorderlessStretch_Check_Handler" /> <CheckBox x:Name="cbBorderlessStretch" DockPanel.Dock="Right" Margin="10,0,0,0" Height="25" FontSize="14 px" VerticalContentAlignment="Center" Content="Fullscreen stretch" IsEnabled="False" Checked="CbBorderlessStretch_Check_Handler" Unchecked="CbBorderlessStretch_Check_Handler" />
</StackPanel> </StackPanel>
<CheckBox x:Name="cbCamAdjust" Margin="0,5,0,0" Height="25" FontSize="14 px" VerticalContentAlignment="Center" Content="Disable camera auto rotate on movement" ToolTip="MOUSE USERS ONLY! Disables the annoying automatic camera adjustment on movement." Checked="CbCamAdjust_Check_Handler" Unchecked="CbCamAdjust_Check_Handler" /> <CheckBox x:Name="cbCamAdjust" Margin="0,5,0,0" Height="25" FontSize="14 px" VerticalContentAlignment="Center" Content="Disable camera auto rotate on movement" ToolTip="Disables the annoying automatic camera adjustment on movement. Intended for mouse users." Checked="CbCamAdjust_Check_Handler" Unchecked="CbCamAdjust_Check_Handler" />
<CheckBox x:Name="cbLogStats" Margin="0,5,0,0" Height="25" FontSize="14 px" VerticalContentAlignment="Center" Content="Log stats (Deaths, Kills) to file for OBS" ToolTip="Check the guide on how to display these on stream with OBS." Checked="CbStatChanged" Unchecked="CbStatChanged" /> <CheckBox x:Name="cbLogStats" Margin="0,5,0,0" Height="25" FontSize="14 px" VerticalContentAlignment="Center" Content="Log stats (Deaths, Kills) to file for OBS" ToolTip="Check the guide on how to display these on stream with OBS." Checked="CbStatChanged" Unchecked="CbStatChanged" />
<Expander x:Name="exGameMods" Margin="-3,5,0,0" Height="Auto" FontSize="14 px" Header="Game modifications" IsExpanded="False"> <Expander x:Name="exGameMods" Margin="-3,5,0,0" Height="Auto" FontSize="14 px" Header="Game modifications" IsExpanded="False">
<Grid Margin="3,0,0,0" Background="#FFF9F9F9"> <Grid Margin="3,0,0,0" Background="#FFF9F9F9">
@ -76,7 +76,7 @@
<Run>Borderless window mode requires "Windowed" in game settings first.</Run> <Run>Borderless window mode requires "Windowed" in game settings first.</Run>
<Run FontWeight="Bold">Custom resolution adds 21:9 support and overwrites a default resolution, hud will be limited to 16:9.</Run> <Run FontWeight="Bold">Custom resolution adds 21:9 support and overwrites a default resolution, hud will be limited to 16:9.</Run>
<Run>Borderless window mode with custom resolution requires you to patch and set resolution first, then activate borderless afterwards.</Run> <Run>Borderless window mode with custom resolution requires you to patch and set resolution first, then activate borderless afterwards.</Run>
<Run FontWeight="Bold">Disabling camera auto rotate is intended for mouse users.</Run> <Run FontWeight="Bold">Disabling camera auto rotate is mostly intended for mouse users.</Run>
<Run FontWeight="Bold">To enable Player Speed modification you have to be ingame first.</Run> <Run FontWeight="Bold">To enable Player Speed modification you have to be ingame first.</Run>
<Run FontWeight="Bold" Foreground="#FFF00000">See the link below for detailed information, guides, GSYNC support and an AMD fix.</Run> <Run FontWeight="Bold" Foreground="#FFF00000">See the link below for detailed information, guides, GSYNC support and an AMD fix.</Run>
</TextBlock.Inlines> </TextBlock.Inlines>

View file

@ -259,7 +259,8 @@ namespace SekiroFpsUnlockAndMore
string gameFileVersion = FileVersionInfo.GetVersionInfo(procList[0].MainModule.FileName).FileVersion; string gameFileVersion = FileVersionInfo.GetVersionInfo(procList[0].MainModule.FileName).FileVersion;
if (gameFileVersion != GameData.PROCESS_EXE_VERSION && !_settingsService.ApplicationSettings.gameVersionNotify) if (gameFileVersion != GameData.PROCESS_EXE_VERSION && !_settingsService.ApplicationSettings.gameVersionNotify)
{ {
MessageBox.Show("Unknown game version.\nSome functions might not work properly or even crash the game. Check for updates on this utility regularly following the link at the bottom.", "Sekiro FPS Unlocker and more", MessageBoxButton.OK, MessageBoxImage.Warning); MessageBox.Show("Unknown game version.\nSome functions might not work properly or even crash the game. " +
"Check for updates on this utility regularly following the link at the bottom.", "Sekiro FPS Unlocker and more", MessageBoxButton.OK, MessageBoxImage.Warning);
_settingsService.ApplicationSettings.gameVersionNotify = true; _settingsService.ApplicationSettings.gameVersionNotify = true;
} }
else else
@ -865,14 +866,28 @@ namespace SekiroFpsUnlockAndMore
{ {
if (!_settingsService.ApplicationSettings.cameraAdjustNotify) if (!_settingsService.ApplicationSettings.cameraAdjustNotify)
{ {
MessageBox.Show("Disabling camera auto adjustment is intended for mouse users!\nDo not enable this if you are using a controller.", "Sekiro FPS Unlocker and more", MessageBoxButton.OK, MessageBoxImage.Warning); MessageBoxResult result = MessageBox.Show("Disabling camera auto adjustment is intended for mouse users.\n\n" +
"If you are using a controller this will not work perfectly and you will temporary loose the deadzones on your controller (slow tiling).\n\n" +
"Do you want to continue?", "Sekiro FPS Unlocker and more", MessageBoxButton.YesNo, MessageBoxImage.Warning);
if (result == MessageBoxResult.No)
{
this.cbCamAdjust.IsEnabled = false;
this.cbCamAdjust.IsChecked = false;
this.cbCamAdjust.IsEnabled = true;
return;
}
result = MessageBox.Show("Are you using a mouse as input?\n\n" +
"To change your selection just delete the configuration file: SekiroFpsUnlockAndMore.xml", "Sekiro FPS Unlocker and more", MessageBoxButton.YesNo, MessageBoxImage.Question);
if (result == MessageBoxResult.No)
_settingsService.ApplicationSettings.peasantInput = true;
_settingsService.ApplicationSettings.cameraAdjustNotify = true; _settingsService.ApplicationSettings.cameraAdjustNotify = true;
} }
this.cbCamAdjust.IsEnabled = false; this.cbCamAdjust.IsEnabled = false;
_codeCaveGenerator.ActivateCodeCaveByName(_CODECAVE_CAMADJUST_PITCH); _codeCaveGenerator.ActivateCodeCaveByName(_CODECAVE_CAMADJUST_PITCH);
_codeCaveGenerator.ActivateCodeCaveByName(_CODECAVE_CAMADJUST_YAW_Z); _codeCaveGenerator.ActivateCodeCaveByName(_CODECAVE_CAMADJUST_YAW_Z);
_codeCaveGenerator.ActivateCodeCaveByName(_CODECAVE_CAMADJUST_PITCH_XY); if (!_settingsService.ApplicationSettings.peasantInput)
_codeCaveGenerator.ActivateCodeCaveByName(_CODECAVE_CAMADJUST_PITCH_XY); // BREAKS PITCH AND OTHER CONTROLS ON CONTROLLERS
_codeCaveGenerator.ActivateCodeCaveByName(_CODECAVE_CAMADJUST_YAW_XY); _codeCaveGenerator.ActivateCodeCaveByName(_CODECAVE_CAMADJUST_YAW_XY);
this.cbCamAdjust.IsEnabled = true; this.cbCamAdjust.IsEnabled = true;
} }
@ -1206,7 +1221,8 @@ namespace SekiroFpsUnlockAndMore
private void CbCamAdjust_Check_Handler(object sender, RoutedEventArgs e) private void CbCamAdjust_Check_Handler(object sender, RoutedEventArgs e)
{ {
InjectToGame(); if (this.cbCamAdjust.IsEnabled)
InjectToGame();
} }
private void CbStatChanged(object sender, RoutedEventArgs e) private void CbStatChanged(object sender, RoutedEventArgs e)

View file

@ -21,5 +21,5 @@ using System.Runtime.InteropServices;
ResourceDictionaryLocation.SourceAssembly ResourceDictionaryLocation.SourceAssembly
)] )]
[assembly: AssemblyVersion("1.2.1.0")] [assembly: AssemblyVersion("1.2.1.1")]
[assembly: AssemblyFileVersion("1.2.1.0")] [assembly: AssemblyFileVersion("1.2.1.1")]

View file

@ -17,6 +17,8 @@ namespace SekiroFpsUnlockAndMore
[XmlElement] [XmlElement]
public bool cameraAdjustNotify { get; set; } public bool cameraAdjustNotify { get; set; }
[XmlElement] [XmlElement]
public bool peasantInput { get; set; }
[XmlElement]
public bool cbFramelock { get; set; } public bool cbFramelock { get; set; }
[XmlElement] [XmlElement]
public int tbFramelock { get; set; } public int tbFramelock { get; set; }