I've notice (like everyone I guess) that when switching from Horizon/Odyssey and Odyssey/Horizon, on both ways I would loose my keyboard configuration EACH FREAKING TIME !
so I've been looking what was the issue, and it's only because it was so poorly coded that the controls are set in two different ways.
Let me explain :
First look in this folder : %USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\
you will see your presets.
In my case I've backed up mine with name "Saitek X52.3.0.binds" before Odyssey update.
When Odyssey came in it duplicated the file and named it "Saitek X52.4.0.binds". fine by me, they add some controls so why not.
Then, you get another file in same folder "StartPreset.start" that is used to define what config you are using.
but this file is used by both version AND isn't used in the same way, and as so it overwrites every time you select game.
In Horizon, you have one section of controls
In Odyssey, you have 4 section of controls
And who knows why, when Odyssey starts and reads the file with only one line, it assumes there is nothing else configured, and just put empty/default keys (depends on mood I guess as it varies).
And in my case it creates a default profile named "Saitek X52 Pro" for unknown reason (I've tried to create a profile copied from mine with that name and it just ignored it)
how come this is still an issue??
To workaround this issue I've made two files with data in it (StartPreset.3.0.start & StartPreset.4.0.start) and used a batch
Message to Devs : Please, this is easy to patch, just make Horizon stop overwriting the file or make two files ...
Edit : 06/09/2021 STILL AN ISSUE !
Edit : 02/12/2021 STILL AN ISSUE !
Edit : 15/02/2022 seems patched, but can still bug sometimes !
Asked by @Parduz my full starting script (code cleaned)
so I've been looking what was the issue, and it's only because it was so poorly coded that the controls are set in two different ways.
Let me explain :
First look in this folder : %USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\
you will see your presets.
In my case I've backed up mine with name "Saitek X52.3.0.binds" before Odyssey update.
When Odyssey came in it duplicated the file and named it "Saitek X52.4.0.binds". fine by me, they add some controls so why not.
Then, you get another file in same folder "StartPreset.start" that is used to define what config you are using.
but this file is used by both version AND isn't used in the same way, and as so it overwrites every time you select game.
In Horizon, you have one section of controls
Saitek X52
In Odyssey, you have 4 section of controls
Saitek X52
Saitek X52
Saitek X52
Saitek X52
And who knows why, when Odyssey starts and reads the file with only one line, it assumes there is nothing else configured, and just put empty/default keys (depends on mood I guess as it varies).
And in my case it creates a default profile named "Saitek X52 Pro" for unknown reason (I've tried to create a profile copied from mine with that name and it just ignored it)
To workaround this issue I've made two files with data in it (StartPreset.3.0.start & StartPreset.4.0.start) and used a batch
Bash:
:GAMODE
ECHO Game played will be HORIZONS / ODYSSEY (default)?
SET /p stupidity=[H/O]
REM ECHO '%stupidity%'
IF '%stupidity%'=='h' GOTO HORIZONS
IF '%stupidity%'=='H' GOTO HORIZONS
IF '%stupidity%'=='o' GOTO ODYSSEY
IF '%stupidity%'=='O' GOTO ODYSSEY
:ODYSSEY
TITLE Elite Dangerous: Odyssey
C:
cd "%USERPROFILE%\AppData\Roaming\EliteG19s\"
xcopy "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.4.0.start" "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.start" /y
GOTO CHKSTART
:HORIZONS
TITLE Elite Dangerous: Horizons
C:
cd "%USERPROFILE%\AppData\Roaming\EliteG19s\"
xcopy "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.3.0.start" "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.start" /y
:CHKSTART
CD "C:\Steam"
START "" "C:\Steam\Steam.exe" -applaunch 359320 -Steam -novr -nointro
Message to Devs : Please, this is easy to patch, just make Horizon stop overwriting the file or make two files ...
Edit : 06/09/2021 STILL AN ISSUE !
Edit : 02/12/2021 STILL AN ISSUE !
Edit : 15/02/2022 seems patched, but can still bug sometimes !
Asked by @Parduz my full starting script (code cleaned)
Bash:@ECHO off CLS TITLE Elite Dangerous :G19 REM option file : REM %AppData%\EliteG19s\options.json tasklist /FI "IMAGENAME eq EliteG19s.Windows.exe" 2>NUL | find /I /N "EliteG19s.Windows.exe">NUL IF "%ERRORLEVEL%"=="0" ( ECHO EliteG19s is running ECHO. ) ELSE ( C: CD "C:\tool\EliteG19s-3.6" START "" "C:\tool\EliteG19s-3.6\EliteG19s.Windows.exe" ) :VOCALS tasklist /FI "IMAGENAME eq Vocals.exe" 2>NUL | find /I /N "Vocals.exe">NUL IF "%ERRORLEVEL%"=="0" ( ECHO Vocals is running ECHO. ) ELSE ( C: cd "C:\tool\VocalCom" START "" "C:\tool\VocalCom\Vocals.exe" ) :EDDLite tasklist /FI "IMAGENAME eq EDDLite.exe" 2>NUL | find /I /N "EDDLite.exe">NUL IF "%ERRORLEVEL%"=="0" ( ECHO EDDLite is running ECHO. ) ELSE ( C: cd "C:\tool\EDDLite" START "" "C:\tool\EDDLite\EDDLite.exe" ) :EDDI tasklist /FI "IMAGENAME eq EDDI.exe" 2>NUL | find /I /N "EDDI.exe">NUL IF "%ERRORLEVEL%"=="0" ( ECHO EDDI is running ECHO. GOTO DIRECTGAME ) ELSE ( C: cd "C:\tool\EDDI" START "" "C:\tool\EDDI\EDDI.exe" ) :EDOMat tasklist /FI "IMAGENAME eq EDO.Materials.Helper.exe" 2>NUL | find /I /N "EDO.Materials.Helper.exe">NUL IF "%ERRORLEVEL%"=="0" ( ECHO EDO Materials Helper is running ECHO. ) ELSE ( C: cd "C:\tool\EDO Materials Helper" START "" "C:\tool\EDO Materials Helper\EDO.Materials.Helper.exe" ) :DIRECTGAME PING -n 2 127.0.0.1 >NUL tasklist /FI "IMAGENAME eq EDLaunch.exe" 2>NUL | find /I /N "EDLaunch.exe">NUL IF "%ERRORLEVEL%"=="0" ( ECHO EDLaunch is running ECHO. GOTO GAMING ) :STEAM tasklist /FI "IMAGENAME eq Steam.exe" 2>NUL | find /I /N "Steam.exe">NUL IF NOT "%ERRORLEVEL%"=="0" ( ECHO Steam is not running. ECHO Steam is starting, please wait... START "" "C:\Steam\Steam.exe" -silent -console -noverifyfiles -nobootstrapupdate -skipinitialbootstrap -norepairfiles -overridepackageurl PING -n 11 127.0.0.1 >NUL REM waiting 10 sec for steam to start ECHO. GOTO ELITESTARTER ) IF "%ERRORLEVEL%"=="0" ( ECHO Steam is running. ) :ELITESTARTER PING -n 2 127.0.0.1 >NUL CD "C:\Steam" START "" "C:\Steam\Steam.exe" -applaunch 359320 -Steam -novr -nointro GOTO GAMING :GAMING REM removes into vids to skip them PING -n 6 127.0.0.1 >NUL M: cd "M:\Steam\steamapps\common\Elite Dangerous\Products\elite-dangerous-64\Movies" DEL /F /Q Ident_Frontier*.webm cd "M:\Steam\steamapps\common\Elite Dangerous\Products\elite-dangerous-odyssey-64\Movies" DEL /F /Q Ident_Frontier*.webm :GAMODE ECHO Game played will be HORIZONS / ODYSSEY / Skip [default]? SET /p pomme=[H/O/S] REM ECHO '%pomme%' IF '%pomme%'=='h' GOTO HORIZONS IF '%pomme%'=='H' GOTO HORIZONS IF '%pomme%'=='o' GOTO ODYSSEY IF '%pomme%'=='O' GOTO ODYSSEY IF '%pomme%'=='s' GOTO CHKSTART IF '%pomme%'=='S' GOTO CHKSTART GOTO CHKSTART :ODYSSEY TITLE Elite Dangerous: Odyssey C: xcopy "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Graphics\GraphicsConfigurationOverride.blue.xml" "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Graphics\GraphicsConfigurationOverride.xml" /y xcopy "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.4.0.start" "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.start" /y GOTO CHKSTART :HORIZONS TITLE Elite Dangerous: Horizons C: xcopy "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Graphics\GraphicsConfigurationOverride.orange.xml" "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Graphics\GraphicsConfigurationOverride.xml" /y xcopy "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.3.0.start" "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.start" /y GOTO CHKSTART :CHKSTART tasklist /FI "IMAGENAME eq EliteDangerous64.exe" 2>NUL | find /I /N "EliteDangerous64.exe">NUL IF not "%ERRORLEVEL%"=="0" ( :KIILL REM Killing WatchDog64 process to prevent crash PING -n 3 127.0.0.1 >NUL tasklist /FI "IMAGENAME eq WatchDog64.exe" 2>NUL | find /I /N "WatchDog64.exe">NUL IF "%ERRORLEVEL%"=="0" ( ECHO. ECHO WatchDog64 is running ECHO Terminating WatchDog64 in 10sec... PING -n 6 127.0.0.1 >NUL ECHO Terminating WatchDog64 in 05sec... PING -n 6 127.0.0.1 >NUL taskkill /F /IM WatchDog64.exe ) ECHO. ECHO WatchDog64 is not running. ECHO Waiting for WatchDog64 to start... GOTO END ) :END PING -n 6 127.0.0.1 >NUL
please note my Steam is on C: and game is installed on M:
update with your own paths.
Last edited: