We'll be talking about the keyfile editor from the last post and will be using it to create a new keyfile.
A version with modified Quickstart keyfile and Callback Reference can be found here: https://www.dropbox.com/s/dln076plj6hs3xw/Keyfile editor Alpha 1.zip?dl=0
When you start it up, you will be greeted by two panes (and errors, ignore them). The lower pane has tabs, one tab for each device. In each tab there is a list of buttons that can be lit up by pressing them on your devices.
We'll load the BMS Basic keyfile, you can do this with the full keyfile or the minimal keyfile, or you can use the quickstart keyfile bundled with the program.
We are going to assign every button to a blank callback first, and then change the callback afterwards.
Start by pressing the green '+' at the top right, doing so will add a blank unbound callback to the upper pane. We need one blank callback for every unbound joystick button, in this case eight of them.
After we've made our blank callbacks we'll assign our unbound buttons to them, one button per callback. Double-clicking "Unassigned" in the right hand column will bring up a dialogue box, we can either press a joystick button or select a button from the drop down menu to assign it to the callback. We are going to change these blank callbacks later. It's easier to bind to blank callbacks and then change them than it is to assign buttons directly to the desired callbacks directly, as the program does not handle button conflicts very well.
Next, we're going to be assigning the button that will function as our pinky shift. For those that have them, use the pinky button on your stick. For everybody else, find a button that's easy to hold down while pressing other buttons simultaneously. I'll use Joy 1 Button 10, remember what you choose as it will be important later on.
In the bottom pane, double-click on the current callback for that button to bring up a library of callbacks, sorted by their location in the cockpit of the F-16. We want to look for the Flight Stick section under Flight Control (HOTAS), and select SimHotasPinkyShift, and hit OK.
Once the pinky shift button is assigned, we need to save the keyfile and close the program immediately. Reopen the program and reload the saved keyfile and you will be greeted with new tabs for your shifted device states.
Go to the new tab for your shifted device and do the same thing we did at the start, pressing '+' to add a new blank callback for every unbound button in your shifted device tab.
To assign our shifted buttons, we need to do something slightly different. Click "Unassigned" like we did the first time around, but this time when the dialogue box pops up we will need to hold our pinky shift button in combination with the desired button to map. The end result should include the string <Shifted>.
As before we'll assign every unbound button, but this time these buttons all require you to press them while holding the pinky shift button. This poses an issue for our pinky shift button, as we can't "shift" the "shift button" here.
Instead, we'll have to select the shifted counterpart (in our case Joy 1 <Shifted> Button 10) of our pinky shift button from the dropdown menu. If you can't find it you can press another shifted combination to put the dropdown menu in the right area, then select the correct button.
"But if we can't shift the shift button then why do we need to bother assigning it in it's shifted state?"
Just do it, I'll explain shortly.
After assigning the remainder of your buttons, we'll return to the "shifted" shift button.
As I said before, we can't "shift" the "shift button" in this program.
But BMS does.
Technical stuff, don't worry too much about it: Put simply, BMS by default automatically reserves lots of buttons. 256 of them, 0 to 255, 32 for each device. The pinky shift mechanism in BMS works by effectively increasing each joystick button number by 256. When we bind callbacks to the shifted layer we are binding callbacks to buttons 256-511 instead of the normal 0-255. The issue is that when we tell the game to shift buttons upwards, the pinky shift button is shifted upwards as well and the game cannot tell when it is released because the associated button number doesn't exist anymore.
The way around this is to assign SimHotasPinkyShift twice, once to the desired button (Joy 1 Button 10 as done previously), and again to it's shifted counterpart (Joy 1 <Shifted> Button 10).
Double-click on the callback, scroll up to the Flight Stick section under Flight Control (HOTAS), and select SimHotasPinkyShift again, and hit OK.
Once we've taken care of the pinky shift bindings, we can assign the rest of our buttons as desired. Below you can see the end result. Note SimHotasPinkyShift, as discussed before, is assigned to the same button in both the normal and shifted states.
Recreated above is the setup I use for my Hotas X. You may find it worth it to sacrifice certain things like TMS Right, DMS Up/Left/Right and maybe even TriggerFirstDetent for things like wheel brakes, airbrakes toggle or landing lights based on your needs. I use racing wheel pedals for differential toe brakes and the rocker on the back of the Hotas X mapped to keyboard buttons (using JoyToKey) for extending and retracting airbrakes, which is why neither of these are present here.