Prevent lost keybind

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
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)

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
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:
poorly codded
Well done, that will put them in their plaice!

1626798029908.png
 
I just made an executable .bat file which copies my keybinds from my backup folder and when Elite stops it copies them back (so any changes I do in game to key binds are preserved).
 
Last edited:
I just made an executable .bat file which copies my keybinds from my backup folder and when Elite stops it copies them back (so any changes I do in game to key binds are preserved).
this is a nice idea as well, but I guess this is only valid if you use the default keybind file and did not back it up in a new file.
but be careful, the changes on Odyssey are in file 4.0 and Horizons are in 3.0 and changes in any will not spread in the other.
 
Last edited:
this is a nice idea as well, but I guess this is only valid if you use the default keybind file and did not back it up in a new file.
but be careful, the changes on Odyssey are in file 4.0 and Horizons are in 3.0 and changes in any will not spread in the other.
I do a copy of . so I have everything backed up. The only thing I have to do when switching between Horizons and Odyssey is to change the keyboard profile to the correct one.
So far nothing has disappeared.

BUT it’s still a silly thing for players to worry about and having to come up with these bypasses.
 
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 codded 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)

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
Bash:
:GAMODE
ECHO Game played will be HORIZONS / ODYSSEY (default)?
SET /p stupidity=[H/O/S]
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 ...
The last few times I've switched between odyssey and horizons it's let me go in and reselect the binds file from the drop down menu.
Sometimes odyssey loses the bind for walking or srv so they need to be reselected again manually from their respective drop down menus.
this is not on steam, though.
 
The last few times I've switched between odyssey and horizons it's let me go in and reselect the binds file from the drop down menu.
Sometimes odyssey loses the bind for walking or srv so they need to be reselected again manually from their respective drop down menus.
this is not on steam, though.
this is exactly my issue, the options are resetted as I said in 1st post.
Of course you can, each time select again, options in a sub-sub-sub menu, but this is just a pain ...
I do have a batch anyway on my game start as I use it to start EliteG19, Vocals, EDDI, remove "Ident_Frontier" webm movies (skip intro), reset config (this topic), and remove watchdog as it makes game crash too often with Odyssey.

If you wish I may share a bit of it :)
 
this is exactly my issue, the options are resetted as I said in 1st post.
Of course you can, each time select again, options in a sub-sub-sub menu, but this is just a pain ...
I do have a batch anyway on my game start as I use it to start EliteG19, Vocals, EDDI, remove "Ident_Frontier" webm movies (skip intro), reset config (this topic), and remove watchdog as it makes game crash too often with Odyssey.

If you wish I may share a bit of it :)
Ah, I understand - it sounds like you've got a good system going. (y)
Currently I'm playing only odyssey on my main account and it is behaving itself so I'll leave the config alone but thanks for the offer. :)
 
Any idea why this is still an issue?
I've just checked now, it still uses the crappy default controls when I go to Odyssey after using Horizon ...
 
Are you sure your controls are really gone ? When I switch from Odyssey to Horizons, it defaults to mouse & keyboard. I then just select custom from the list, and my bindings are intact. Switching from Horizons to Odyssey the general, ship and SRV bindings stay, only on foot gets reset to mouse & keyboard. Choose custom again, and all is working properly.
 
Are you sure your controls are really gone ? When I switch from Odyssey to Horizons, it defaults to mouse & keyboard. I then just select custom from the list, and my bindings are intact. Switching from Horizons to Odyssey the general, ship and SRV bindings stay, only on foot gets reset to mouse & keyboard. Choose custom again, and all is working properly.
as said in an early post, the binding isn't lost, it just gets deconfigured, and this is the base issue.

Edit : I just checked and in fact it's worse ... it does crap as well when going from Odyssey to Horizons too, it does the same thing and selects the default "Saitek X52 Pro" non-existent profile in Horizons...

this is what the "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.start" file becomes at start when switching from Horizons to Odyssey :
Bash:
Saitek X52
Saitek X52
Saitek X52
SaitekX52Pro

this is what the "%USERPROFILE%\AppData\Local\Frontier Developments\Elite Dangerous\Options\Bindings\StartPreset.start" file becomes at start when switching from Odyssey to Horizons (sometimes no in fact its all the times now, whatever I do ...) :
Bash:
SaitekX52Pro
 
Last edited:
I guess the files isn't recognized and gets rest/replaced each time for that reason ...
so yea, the batch is the best I can use for now ...
 
Easier way: duplicate the 3.0 and 4.0 files and change their names to 'abc'.3.0.binds and 'abc'.4.0.binds

Edit the file and change the profile name to 'abc'. (Second line of the file - see below)

'abc should be alpha numeric, no spaces, no non-ascii (just to be safe.) Don't use an existing device name like HotasX - make it unique.

If you switch to Horizons and back, go to Controls in Odyssey, choose On Foot and select 'abc' from the dropdown. That's all you need to do.

1630938606037.png
 
Easier way: duplicate the 3.0 and 4.0 files and change their names to 'abc'.3.0.binds and 'abc'.4.0.binds

Edit the file and change the profile name to 'abc'. (Second line of the file - see below)

'abc should be alpha numeric, no spaces, no non-ascii (just to be safe.) Don't use an existing device name like HotasX - make it unique.

If you switch to Horizons and back, go to Controls in Odyssey, choose On Foot and select 'abc' from the dropdown. That's all you need to do.

View attachment 261159
not easier ...just manual ... but this is what the batch does though.

oh and btw, you shouldn't use WordPad to open these files, as it may add stuff to it (rich text data) you'd better use NotePad/NotePad++
and you can use spaces in the *.binds file preset names, they will show the same in game :)
 
I use two batch file, one for horizons, one for odyssey, which write the correct StartPreset.Start file.

Yes its really stupid they did not patch Horizons so it could accept the Odyssey StartPreset.start file. Or even better make Odyssey use another file.

Or even better, rewrite the whole thing and make the bindings work like MSFS ;-)
 
Top Bottom