BMS Technical Manual
BMS Technical Manual
BMS Technical Manual
CHANGE 1.00
10. 2021
BMS TECHNICAL MANUAL
CHANGE 1.00
FOREWORD
PURPOSE AND SCOPE
This Falcon 4 BMS manual contains information on managing the more technical aspects of the simulation.
The following manuals supplement this manual to establish the complete Falcon BMS 4.35 series:
• BMS-Comms & Navigation Manual (how to get the best out of ATC, Radio & Charts).
• Airport Approach & Navigation Charts (including KTO AIP, Chart Tutorial).
• Key Files & Input (Key File, Key File Editor, Keystrokes, Callbacks, etc.).
These are all located in the \Docs folder of your Falcon BMS install, with other supporting documents.
COPYRIGHT STATEMENTS
Falcon BMS is a community mod developed and published by Benchmark Sims for use with licensed copies of Falcon 4.0.
Unauthorized rental, sales, arcade use, charging for use, or any commercial use of this mod or part thereof is prohibited. This mod is for
non-commercial use only.
This mod was created by Benchmark Sims with the permission of Tommo Inc.
This mod and all included content are in no way affiliated with Tommo Inc. or Retroism.
© 2003-2021 Benchmark Sims. All rights reserved.
Falcon is a registered trademark of Tommo Inc. Falcon Collection and Falcon 4.0 are published by Retroism. Retroism, the Retroism logo
and the Tommo Inc. logo are trademarks or registered trademarks.
© 2021 Tommo Inc. All rights reserved.
The manufacturers and intellectual property right owners of the vehicles, weapons, sensors and other systems represented in Falcon
BMS in no way endorse, sponsor or are otherwise involved in the development of Falcon BMS.
2-2
BMS TECHNICAL MANUAL
CHANGE 1.00
1. TABLE OF CONTENTS
PART 1 : For the User
2. The HOTAS issue ................................................................................................................... 2-11
2.1 Keystroke vs DirectX ........................................................................................................................... 2-11
2.2 Use an existing configuration ............................................................................................................. 2-13
2.2.1 What is included and where are the files? ................................................................................. 2-13
2.2.2 Adapting the Falcon BMS.cfg to your stickfile ............................................................................ 2-15
2.2.3 Axis declaration .......................................................................................................................... 2-16
2.2.4 Conclusion .................................................................................................................................. 2-16
2.3 Creating your own (Keystrokes) ......................................................................................................... 2-17
2.4 Creating your own (DirectX) ............................................................................................................... 2-21
2.5 Conclusion .......................................................................................................................................... 2-22
3. Avionics Configurator ............................................................................................................ 3-23
3.1 Examples of modifications.................................................................................................................. 3-24
3.2 Options explanation ........................................................................................................................... 3-28
4. List of Keyboard Layouts ....................................................................................................... 4-29
4.1 Default US (QWERTY) Keyboard layout .............................................................................................. 4-29
4.2 Pitbuilder US (QWERTY) Keyboard layout .......................................................................................... 4-30
4.3 Default French (AZERTY) Keyboard layout ......................................................................................... 4-31
4.4 Pitbuilder French (AZERTY) Keyboard file........................................................................................... 4-32
4.5 Default German (QWERTZ) Keyboard Layout..................................................................................... 4-33
4.6 Pitbuilder German (QWERTZ) Keyboard Layout ................................................................................. 4-34
5. External Display Support ....................................................................................................... 5-35
5.1 Falcon BMS Display Extraction ........................................................................................................... 5-35
5.2 RTT Remote ........................................................................................................................................ 5-35
5.2.1 RTTServer settings ...................................................................................................................... 5-35
5.2.2 RTT Client settings ...................................................................................................................... 5-36
5.2.3 Using RTTRemote ....................................................................................................................... 5-37
5.2.4 Pros & Cons................................................................................................................................. 5-37
5.3 Third-Party extraction......................................................................................................................... 5-37
5.3.1 MFDE .......................................................................................................................................... 5-37
5.3.2 Y.A.M.E........................................................................................................................................ 5-37
6. The FPS Quest ........................................................................................................................ 6-38
7. Weather and How to create FMAPs ....................................................................................... 7-40
2-3
BMS TECHNICAL MANUAL
CHANGE 1.00
2-4
BMS TECHNICAL MANUAL
CHANGE 1.00
2-5
BMS TECHNICAL MANUAL
CHANGE 1.00
10.7.2 How to avoid DX device order and xxis changes .................................................................... 10-100
10.7.3 How to set DX device order .................................................................................................... 10-100
10.7.4 Basic DX device setup flow ..................................................................................................... 10-101
10.7.5 Technical details about the DX device sorting........................................................................ 10-102
10.8 DirectX device specifics: ................................................................................................................. 10-103
10.8.1 How to cancel MRM/DF override Modes: .............................................................................. 10-103
10.8.2 How to overcome DX button shortcomings? ......................................................................... 10-103
10.8.3 How to use POV hats on two devices ..................................................................................... 10-105
10.9 Key file options & specifics: ............................................................................................................ 10-107
10.9.1 Changing ICP-Numpad mapping (1=7 -> 7=1): ....................................................................... 10-107
10.9.2 How to change the DX POV functions (Trim vs. View & other functions): ............................. 10-107
10.9.3 Assigning keys to Extra MFDs (3rd & 4th MFD): ..................................................................... 10-109
10.9.4 Double entries: ....................................................................................................................... 10-109
10.10 Troubleshooting: ........................................................................................................................ 10-110
10.10.1 Why does BMS crash when loading a key file? .................................................................. 10-110
10.10.2 Stuck key: ............................................................................................................................ 10-110
10.10.3 How to enable EyeFly (Free Cam):...................................................................................... 10-111
10.10.4 The mouse does not work anymore in pit:......................................................................... 10-111
10.10.5 Keyboard keys and combinations you have to be careful with:......................................... 10-111
10.10.6 (Pretty) Screenshot vs. PrtScr: ............................................................................................ 10-112
10.10.7 Why we do not hear cockpit sounds when pressing a key:................................................ 10-113
10.11 Notes on the Development Callbacks......................................................................................... 10-114
10.11.1 Introduction: ....................................................................................................................... 10-114
10.11.2 Dev Functions: .................................................................................................................... 10-115
11. Notes on the 4.34 Comms system ................................................................................. 11-122
11.1 Introduction .................................................................................................................................... 11-122
11.2 The Ground agencies ...................................................................................................................... 11-123
11.3 The Air agencies.............................................................................................................................. 11-123
11.4 Presets ............................................................................................................................................ 11-124
11.5 DTC Storage .................................................................................................................................... 11-125
11.6 The VHF assignment system ........................................................................................................... 11-125
11.7 How to avoid VHF conflicts ............................................................................................................. 11-127
11.8 Fallback solution and AI .................................................................................................................. 11-128
11.9 3rd party theater dev notes ........................................................................................................... 11-128
11.10 Stock BMS VHF layout................................................................................................................. 11-128
2-6
BMS TECHNICAL MANUAL
CHANGE 1.00
2-7
BMS TECHNICAL MANUAL
CHANGE 1.00
2-8
BMS TECHNICAL MANUAL
CHANGE 1.00
2-9
BMS TECHNICAL MANUAL
CHANGE 1.00
PART 1
2-10
BMS TECHNICAL MANUAL
CHANGE 1.00
Nevertheless, we will try to clear possible confusion and provide general guidelines on how to proceed with the
many options you have at your disposal.
On one side you have your HOTAS and on the other side you have the F-16 Cockpit in BMS. How can we link
them both together so the action on the HOTAS has an influence in the F-16 cockpit?
Note: Keyboards emit a keycode when a key is pressed and another keycode when the key
is released.
DirectX are default joystick buttons. A 12-button joystick will have 12 DirectX entries that could be assigned to
specific SIM functions depending on your joystick or software.
Direct X devices are limited to 32 entries (labelled 1 to 32 in Windows and 0 to 31 in BMS - adding another layer
of confusion when you attempt to trace issues between Windows and BMS).
The maximum number of devices you can connect to Windows is 16; giving you a total of 512 possible entries.
Both Keystrokes and DirectX entries are explained in detail in Chapter 10 of this Technical Manual.
2-11
BMS TECHNICAL MANUAL
CHANGE 1.00
Keystrokes are not directly recognised by BMS. Each cockpit function, or more specifically for this chapter
HOTAS function, has a callback associated with it. For your joystick to activate the desired function you have to
invoke the specific callback for that function.
The callbacks are linked to the keyboard inputs (keystrokes) in the .key files.
Still here?
Direct X inputs are easier to set up because you do not have that extra “callback” step. Assigning a DirectX
function is usually just point and click: You select a function; hit the desired joystick button and it’s done.
On the other hand it is not quite so easy to manage advanced options such as double layer functions (like the
S3/pinky button on the Cougar which allows the user to press a button and have one key emulated and press
the same button with S3 held in and have a different key emulated).
It is possible, but more complicated and not recommended for most first-time users.
The choice of using one versus the other is yours to make. Both have their advantages and disadvantages.
One thing is critical though: some functions in BMS require a long press. A keystroke press may be interrupted
by another keystroke and the long press might not be detected by BMS. A DirectX input is never interrupted; it
remains active as long as the button is kept depressed. Therefore all long presses should be set up using
DirectX to avoid this problem.
You are still here? Okay, the hardest part is done; let’s see if we can confuse you even more.
2-12
BMS TECHNICAL MANUAL
CHANGE 1.00
HOTAS Cougar is unsurprisingly still the most used HOTAS configuration for BMS. In previous versions of BMS
we provided configuration setup for the Cougar called Dunc_DX. With 4.34 these files have been updated and
renamed Cougar_DX. We will use the Cougar_DX configuration files as an example.
Note: the files may be different, but the procedure is the same for the other joystick files.
Each is explained in its own section in the BMS Device Setup Guide.pdf.
Cougar_DX tmj and tmm files are the native format for
Cougar programming. These files can be opened with
Foxy HOTAS Cougar Edition but can also be loaded into
your Cougar straight from the CCP (Cougar Control Panel)
by clicking on the ‘Download to device’ button just above
the green emulation ON button. You will be prompted for
the location of the TMJ and TMM file. Navigate to the
\01 Input Devices\03 HOTAS Setup\TM Cougar folder.
Your Cougar axis must be set in the same way as the CCP
image to the right. Microsticks must be on axis 7 & 8 and
toebrakes on 9 & 10. This ensures that the microstick can
be declared as an analogue axis in the BMS UI.
The key file “BMS – Basic TM Cougar_DX.key” must be selected in BMS for this stick configuration to work.
This is because all these stick configurations are DirectX and none of the DirectX bindings are included in the
default keyfile located in the \User\Config folder because they are specific to each device.
In our example, the Cougar_DX key files do still correspond to the Basic (default) key file. The only difference is
the addition of relevant Cougar-specific DX lines at the end of the key file.
2-13
BMS TECHNICAL MANUAL
CHANGE 1.00
The provided key file must be copied to the \User\Config folder and then selected in the BMS UI.
First copy “BMS - Basic TM Cougar_DX.key” into your \User\Config folder. Next launch BMS and go into the
SETUP > CONTROLLERS. Click the LOAD button; a window will open and prompt you for the file you want to
load. Select “BMS - Basic TM Cougar_DX” and click LOAD.
The DX Code Lines.txt file is actually the difference between the basic key file and the Cougar DX basic key file
(BMS - BasicDX TM Cougar.key or BMS - BasicDX TM Cougar_MFD.key if you also have MFDs).
The contents of this txt file are pasted at the end of the BMS_basic.key file to create the specific Cougar_DX
basic key file. In other words, you can paste the contents of this file into any custom key file you may use to
adapt your keyfile to the Cougar programming provided with BMS.
The DeviceSorting_Example.txt is an example related to using a Cougar and 2 Thrustmaster MFDs. Direct X can
be a bit touchy when controllers are connected and disconnected often (or fail to be recognised by Windows).
Each device has a dynamic priority number and if the first device disappears from the list, for whatever reason,
the next device takes up its priority number and all following devices change their ID as well.
DX bindings (buttons 1 to 32 (0 to 31 in BMS)) correspond to the ID device number. ID 1 should be the Cougar,
but if the Cougar fails and drops from the list the next device connected (the left MFD for example) will become
ID 1 and all your DX bindings will now refer to the left MFD instead. What a mess!
Some say DX is easier but look at that “simple” explanation above and you will realise that it’s great when
everything is working as expected, but if anything goes wrong it will drive you completely mad unless you
understand how DirectX works.
To overcome this issue a DeviceSorting.txt file was created, which lists the order of the DX devices (connected
or not) that BMS will use. A good DeviceSorting file will ensure that your button configuration is less volatile
and less dependent on device unplugging. As a general rule, the order of the DeviceSorting file should always
have the primary controls first: stick, throttle & rudder if connected separately (Cougar is one device for all 3),
then the other controllers dedicated to avionics (MFDs etc).
For more information about the DeviceSorting file, please refer to chapter 10.7.2 later in this manual.
2-14
BMS TECHNICAL MANUAL
CHANGE 1.00
The HOTAS Print Layout.pdf is a graphical layout showing what the buttons do. Print this file and take it with
you on your first flights. Keep it handy so you can refer to it as often as needed.
But nothing is ever simple in BMS. The Cougar DX file features a shifted DX layer which allows you to benefit
from a double layer of programming for each button. The primary layer corresponds to the real F-16 controls
usually and the second layer is used for sim-specific functions.
This feature is impossible to check in the UI SETUP > CONTROLLER pages; you must be in 3D to check the effect
of the shifted layer. You would not be the first person to spend time in the UI trying to fix something that is not
broken. It is suggested you read chapter 10.6.4 of this manual to understand how this feature works.
Finally, for the Cougar_DX setup to work, some config lines in the Falcon BMS.cfg located located in your
User\Config folder needs to be verified or changed:
2-15
BMS TECHNICAL MANUAL
CHANGE 1.00
This is done in the UI SETUP page and explained in detail in BMS Manual Chapter 4.4.
There is no need to document this again here as the procedure is the same as explained in the BMS Manual.
Basically, you define your stick axis (X and Y), your throttle axis (Z) and the two detents (idle and afterburner)
and eventually a rudder as primary flight controls and then you set up each secondary control axis, such as
Antenna Elevation, Cursor X and Y and the Range knob.
All these settings are saved in an axismapping.dat file saved in your User\Config folder. It is advised to backup
this file once you are satisfied with the axis configuration. If the configuration changes in the future for reasons
that you may not fully control, a restore of your backup will be the fastest way to get flying again.
Alternatively, you can simply set this file to read only in Windows Explorer to prevent any unwanted future
changes. Just remember to change it back if you want to modify the axis configuration.
2.2.4 Conclusion
Here are the steps required to use one of the ready-made configurations:
• Locate the folder for your joystick (\Docs\01 Input Devices\03 HOTAS Setup).
• Copy the key file needed for that joystick configuration to the \User\Config folder.
• Use the provided joystick files and load them up with your joystick software.
• Follow any device-specific instructions in the Readme or the Device Setup Guide.
This is a brief example, but a more complete document is available to explain how to setup every HOTAS file
included with BMS.
Please refer to The BMS Device Setup Guide located in your \Docs\01 Input Devices\03 HOTAS Setup folder.
2-16
BMS TECHNICAL MANUAL
CHANGE 1.00
For this chapter we will work on the assumption that you own a Cougar and want to program it with the real
HOTAS programming of the F-16. We will use the default BMS – Full.key file.
• Ensure you use the correct .key file that uses the above callbacks.
The first step seems to be easier said than done, but the BMS documentation provides all you need to locate
these callbacks. For instance, the BMS Dash 1 document (TO-BMS1F-16CM-1.pdf) in your Docs folder lists the
sidestick and throttle configurations according to master modes. All the callbacks you need to program your
joystick are listed there.
The graphics may look complicated, but their main advantage is that the callbacks are identified in blue.
The complicated thing comes from the fact that a HOTAS button may have multiple functions depending on
which master mode you are in. But as a user you should not worry about that while programming your joystick,
because all these multiple functions are managed by the code and are relatively transparent to you.
As an example, you will notice that the 4 TMS buttons on the next graphic are explained in detail, but basically
there are only 4 relevant callbacks (up, right, down and left) and they are the same in both graphics (i.e. in all
master modes); the first graphic dedicated to Air to Air and the second being dedicated to Air to Ground mode.
So basically, programming the TMS button for 4 directions comes down to programming only 4 single callbacks:
TMS up, TMS right, TMS down and TMS left.
2-17
BMS TECHNICAL MANUAL
CHANGE 1.00
From reading the above 2 graphics, stick programming basically requires the callbacks shown below.
2-18
BMS TECHNICAL MANUAL
CHANGE 1.00
And by looking at the BMS full.key file you can easily find the corresponding keystrokes.
SimPickle = Space
SimMissileStep = SHF =
SimTriggerFirstDetent = CTL =
SimTriggerSecondDetent = ALT =
SimPinkySwitch = v
SimAPOverride = ALT q
2-19
BMS TECHNICAL MANUAL
CHANGE 1.00
Making the links as illustrated on the previous page is the hardest step when making your own joystick file.
Once you have linked joystick buttons to callbacks with the relevant documentation and then linked callbacks
to keystrokes through the active keyfile, all there is left to do is to open your joystick brand native software and
program the keystrokes to the relevant buttons.
With a Cougar, that would be done with Foxy, creating a TMM and a TMJ file. The TMM will be the macro file
defining the relevant keystroke and the TMJ will be the actual button definition file.
For the TMS example it would go like the following pictures (yellow from the TMJ and Blue from the TMM).
The /H is internal Thrustmaster syntax to ensure the functions are Held
Obviously we can’t document all joystick brand method for programming; you will have to refer to your HOTAS
documentation.
The same method can be used to program the throttle. Using the blue callbacks identified in the Dash-1
graphics relevant to AA and AG mastermodes throttle functions and reading the BMS-full.key file you can
associate callbacks to keystroke and where to program them.
The advantage of this method is that you can easily use the advanced programming features of your HOTAS to
program more keystrokes to the same buttons. That is the shifted layer we referred to earlier. In TM syntax it is
done by using /I /O layers. Each button programmed will have one function (/O) when used without the S3
button and another function (/I) when pressed simultaneously with the Cougar S3 button.
The disadvantage of this method (as you are using only keystrokes) is that some joystick functions may get
interrupted if you press other keystrokes simultaneously, especially when using SHF CTL and ALT key
combinations.
Imagine if you press SHF CTL A and while you keep this depressed you need to press SHF b. When you release
SHF b, you will actually release the SHF in the SHF CTL A combination as well. You will either induce stuck keys,
or some callbacks might not get invoked.
2-20
BMS TECHNICAL MANUAL
CHANGE 1.00
This may be the ideal solution for newcomers and first-time BMS users.
With your stick not programmed at all, but declared in the BMS UI you open the UI Setup Controllers page and
click on the key relevant to the function you are about to program on your Stick using DirectX:
The keystroke becomes Cyan (SHF Home) in this example as we are programming the TMS up function.
Double check that the keystroke is selected (Cyan) and hit the TMS up button on your joystick:
Nothing seems to have changed but look at the bottom of the window, the Input Button 7 is now assigned to
STICK: TMS Up function.
You may also do that with your native Hotas software, but you have to ensure that the DX entries correspond
(DX1 is indeed button 1 in this case) between the joystick file declaration and the
UI button numbers.
2-21
BMS TECHNICAL MANUAL
CHANGE 1.00
The above example allows you to make a mix of DX and keystrokes in your own Joystick file programming.
The advantage of this method is obvious. It is very easy to do as it is simply point and click. The disadvantage is
that you can not profit from double layer button programming; it is one button, one function only.
Programming more advanced DirectX functions is possible though and explained in chapter 10 of this manual.
2.5 Conclusion
If you are a new user, you can choose to not use any stick file at all. Simply declare your analogue axis in the UI
SETUP > CONTROLLER > ADVANCED. Then declare single layered DirectX bindings for each button as explained
in chapter 2.4 above. This is the simplest, hassle free, quickest way to get flying.
After a while you will probably want to create a more complete setup and chances are that you will consider
double layered buttons. That is usually where all the fun starts.
You can simply use one of the provided setups for your HOTAS and follow the instructions in the BMS Device
Setup Guide document located in your \Docs\01 Input Devices\03 HOTAS Setup folder. This document explains
how to set up all the stick files provided with BMS as illustrated in chapter 2.2 above.
If you choose to build your own custom setup, or there is not a ready-made solution for your HOTAS the next
big question is to go full DX, or use a callback file, or a combination of the two. Many try full DX first and realise
it’s too complicated, too touchy and too unstable to be easily manageable:
• The different numbering between Windows (1-32) and BMS (0-31) does not make it intuitive.
• The need for the DeviceSorting.txt because of the unstability of DirectX devices numbering does not
make it intuitive.
• The DirectX shifting capability is a great feature but far from intuitive. Many users end up with stuck
keys. The fact that most of these problems are user errors proves the point that it is not intuitive.
Nevertheless, the manuals (see the BMS Device Setup Guide document and chapter 10 of this manual) try to
address these issues but we know how hard it is for the users to find the right bit of information in such a huge
manual suite.
That is where the next solution comes into play: creating your own stick file with a combination of DirectX and
keystroke bindings. That is explained in chapter 2.3.
Usually once you reach that point you reached stability and you will never turn back.
Bottom line: Your mileage may vary and what is perfect for one might be a pain for another one.
Hopefully this chapter will help you decide what is best suited for you and will have given you the necessary
details to chain all the links together, so you understand what is required to set up your controllers in BMS.
2-22
BMS TECHNICAL MANUAL
CHANGE 1.00
3. Avionics Configurator
Since 4.33 users can customise the avionics of each F-16 block present in BMS.
By default the models in BMS should be as realistic as possible at launch but reality and simulation do not
evolve at the same time and real-life conflicts always accelerate avionic and aircraft capabilities.
To partly address this issue, BMS Avionics Configurator allows the user to change some avionics of the F-16
blocks in the database.
Another reason for using this tool is that the same F-16 block can evolve differently according to which country
is using it. Each country may pay to update their F-16 with slightly different avionics systems, so a user wanting
to fly a country-specific aircraft can customise the relevant model to match the real capabilities of that aircraft.
The program will display a list of all available F-16 blocks in the BMS database on the left and a list of avionic
options on the right. The options on the right can be filtered by category to shorten the list. The options are
the same for all blocks, the difference being some options are activated or not depending on the F-16 model.
3-23
BMS TECHNICAL MANUAL
CHANGE 1.00
On the left list of F-16 blocks, scroll down until you find the F-16D Block 52+ - RSAF and click on it. Please note
once you select it, the right side of the window will identify the list of avionics currently selected for the RSAF F-
16 but on the left side F-16D Block 52+ - RSAF is no longer highlighted after you click anywhere on the right
pane. So always refer to the title on the right side to know which version you are changing options for.
Scroll down the right pane until you find the relevant Support for Spice bomb weapon option (or click on the
Avionics category to display a shorter list). Click on the radio button to activate this option; the yellow status
line at the bottom of the window shows that the current profile has been modified [Changed].
The RSAF F-16D settings have been changed but the profile still needs to be applied for the changes to take
effect. Open the File menu and select the option Apply Profile.
In addition to the small window popping up to tell you that the profile has been applied successfully, the status
line changed again to identify that the profile is applied with the options selected.
3-24
BMS TECHNICAL MANUAL
CHANGE 1.00
The Apply Profile option saves your configuration in your own BMS installation. You do not need to save your
profile with a different name to be able to reactivate it next time. Nevertheless, if you want to share specific
profiles with other people, you may use the “Save Profile As”. This will save a Profile.Acfg file which you can
then send to your VFW members, so you all fly with the same settings.
Launch BMS and select the F-16D block 52+ RSAF for flight, you will notice that the avionics of your jet have
been updated and that you have now access to the SPICE page of the DED (LIST – MISC – E) as illustrated on the
right DED picture. The left DED picture below is the default one before the avionics configuration changes.
But you may have realised that there is no SPICE weapon available from the loadout menu of that F-16…
That is unfortunate, but the Avionics Configurator manages only the avionics side of things and not the type of
weapon the F-16 can actually carry… So, you have to enable this manually in the aircraft.dat file to add the
Spice bombs to the aircraft loadout menu.
Luckily in a majority of aspects, Avionics Configurator is a stand-alone tool. Let’s take another example and
activate the older GUN modes for our RSAF aircraft. As you know newer blocks only have the EEGS gun mode
and you cannot select the older gun modes from the SMS page. Let’s change that.
With the RSAF F-16 selected, click on the Gun category option and enable all 4 checkboxes to activate the 4
different gunsights. Apply the profile from the File menu and take the RSAF bird for a spin.
3-25
BMS TECHNICAL MANUAL
CHANGE 1.00
To see the changes, select Dogfight mode once in flight and OSB 2 will now allow you to select SSLC, LCOS and
SNAP mode on top of the default EEGS mode.
As you may have noticed, the colours of the MFDs have changed to yellow in 4.34 for the block 50 and 52.
If you prefer to switch back to the white colour used in 4.33 you can do that with Avionics Configurator as well.
Select the F-16C Blk 50 F110 GE 129 from the left side of avionics configurator and scroll down at the end of the
list of avionics options on the right side of the window until you find the Color Configuration, or just click on the
Colors Category.
Changing the colours of the MFD from yellow to white isn’t very time consuming. Simply extend the menu on
the first item: MFD_DEFAULT which is currently set to YELLOW and select MFD_WHITE. Alternatively, select
DEFAULT. The background colour of DEFAULT shows the default colour that will be applied, in this case white.
The only options left specifically set to yellow are the two SOI settings. Switch these back to white (or DEFAULT)
as well: MFD_SOI_BOX and MFD_NOT_SOI.
3-26
BMS TECHNICAL MANUAL
CHANGE 1.00
Click Apply Profile from the File menu to activate your changes.
As you can see above, the MFDs of the Block 50 have switched from yellow (default 4.34) to white (4.33).
[COLORS]
ColorConfig=78 1 1 5 4 4 -1 -1 1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
With that extra section pasted in the callsign.ini file and saved, you can activate this custom colour
configuration even when you do not fly a Block 50 jet by displaying the DTE page and depressing OSB 2 (COLR).
This will highlight and the colour of your MFDs will change according to the settings previously pasted.
3-27
BMS TECHNICAL MANUAL
CHANGE 1.00
3-28
BMS TECHNICAL MANUAL
CHANGE 1.00
4-29
BMS TECHNICAL MANUAL
CHANGE 1.00
4-30
BMS TECHNICAL MANUAL
CHANGE 1.00
4-31
BMS TECHNICAL MANUAL
CHANGE 1.00
4-32
BMS TECHNICAL MANUAL
CHANGE 1.00
4-33
BMS TECHNICAL MANUAL
CHANGE 1.00
The above graphics are created with the BMS Key file editor.xls located with its manual in
Docs\01 Input Devices\02Key File Editor folder.
4-34
BMS TECHNICAL MANUAL
CHANGE 1.00
RTT Remote is located in your \Tools\RTTRemote folder and is now linked to the Launcher menu.
The application is available in 32 (client only) and 64 (client & server) bit versions and – like BMS itself - does
not support Windows XP or Vista.
It can either be used as a pure local client (RTTClient, standalone), or in a networked configuration.
The latter consists of a server (RTTServer) part that reads the RTT data from BMS, and a client part (RTTClient)
that displays it. They communicate over TCP, so you can use the client either locally or on remote networked
PCs. If used remotely, the client is also capable of mirroring the "normal" shared memory areas, so you can run
some instruments remotely without the need for another shared memory mirror tool.
You should enable RTT extraction by setting set g_bExportRTTTextures to 1 in Falcon BMS.cfg.
You can either keep the batch size as default (update every other frame): set g_nRTTExportBatchSize 1 or
change it to 2 or higher to reduce the number of updates (for slower PCs = less FPS impact).
Managing the application is made by simply editing the RTTServer and RTTClient.ini files.
All settings are clearly explained within the respective files:
The server is preset for remote use and only needs to be configured/started if you actually want to send the
display data to a remote networked client. It will listen on all local IPv4 addresses by default. If you want to
restrict it to a specific IP or network interface, you can adapt the "HOST" IP address. You can use both IPv4 or
IPv6 addresses. The rest of the options are best left at default except maybe FPS. By default, max FPS is set at
30, i.e. that is the maximum number of updates the server sends to a client every second. If you do have a high-
end system you may increase that to 60 or whatever your screen refresh rate is.
The rest of the options are clearly explained in the .ini file.
5-35
BMS TECHNICAL MANUAL
CHANGE 1.00
RTTClient is preset for local use. If you want to use it remotely you will have to adjust the "NETWORKED"
option and "HOST" IP address.
NETWORKED = 0
HOST = 127.0.0.1
PORT = 44000
For local use only, you can specify the maximum number of updates RTTClient will draw via "FPS" (for remote
use, see the "FPS" parameter of RTTServer instead).
FPS = 30
If you run RTTClient on a remote machine in the network, setting any of these items to 1 enables repeating the
relevant part of the shared memory as if BMS would be running on the remote machine.
DATA_F4 = 0
DATA_BMS = 0
DATA_OSB = 0
DATA_IVIBE = 0
This option overlays a grid on the RWR. 0 means no grid, 1 overlays a basic grid.
RWR_GRID = 0
The following section is used to define what is extracted and what is not. Obviously 1 does extract, 0 does not
extract.
USE_HUD = 0
USE_PFL = 0
USE_DED = 0
USE_RWR = 0
USE_MFDLEFT = 1
USE_MFDRIGHT = 1
USE_HMS = 0
For each of the displays enabled above, you must find settings line for placement and eventually sizes.
Placement is done in coordinates system (DISPLAY_X= & DISPLAY_Y= ) in the exact same way as calculated for
the previous display extractor. The main screen origin is (0,0). Screens placed on the left have a negative X
value, screens placed above the main screen have a negative Y value.
Size is optional (DISPLAY_W= & DISPLAY_H= for Width and Height respectively)
If no size values are entered, the actual (unscaled) internal BMS texture sizes are used.
MFDLEFT_X = -1200
The settings to the left will extract two MFDS sized
MFDLEFT_Y = 0
MFDLEFT_W = 500 500x500 to the top of a screen placed to the left of the
MFDLEFT_H = 500 main screen. top left corner of the left MFD will be (-
MFDRIGHT_X = -600 1200,0) and the top left corner of the right MFD will be
MFDRIGHT_Y = 0 placed at (-600,0). A 100 px gap will be visible between
MFDRIGHT_W = 500 the 2 MFDs.
MFDRIGHT_H = 500
5-36
BMS TECHNICAL MANUAL
CHANGE 1.00
Some third-party applications will start only when BMS is running. This may create all sorts of problem like
forcing you to ALT TAB out of BMS to start an application that could not be started before BMS became active.
Some other applications will simply refuse to start as long as BMS is not started, which would prohibit use of
shared memory readers on remote machines, even though RTTRemote has replicated the data there.
To overcome these issues, RTTRemote features a fake BMS application that may be run and trick all these third-
party software into believing BMS is already running. Simply launch RTTClient64 (or32)_FakeBMS.exe instead
of RTTClient.
Note that this will obviously only be useful on remote machines where BMS is indeed not running. If you start
the "fake" version on the BMS machine itself, BMS will refuse to start (because it thinks it is already running).
Cons: If you record your flights using OBS Studio (to allow you to overlay MFDs on your screen) the
latest 4.34 version of RTTRemote uses OpenGL which OBS cannot record. The version shipped
with 4.33 however should still work just fine if this is an issue for you.
5.3.2 Y.A.M.E.
Y.A.M.E. (Yet Another MFD Extractor) by Roccio, Focaldesign and BVT_Scorpion is a new tool that was created
for 4.33 and extracts all displays, instruments, specific panels and even the CPD (large central screen that
replaced all the instruments on the central console on some CCIP F-16s) and has a better compatibility with
Helios (touchscreen). Unfortunately Y.A.M.E. development has stalled and the same workaround to make it
work with 4.34 will be required to make it work with 4.35. Hopefully in the future development can be
resumed.
5-37
BMS TECHNICAL MANUAL
CHANGE 1.00
If you look at Task Manager or Resource Monitor you will notice that the CPU and/or the GPU are now better
utilized than previous versions of BMS. Both are still idling to some degree but the BMS coders have stretched
the potential of the Falcon code beyond the wildest dreams of its creators, and they have pushed the limits
even further with 4.35. For example, BMS now uses a dedicated thread for all graphics rendering, which
decouples it from the simulation thread and allows it feeds the GPU with as much throughput as possible.
Nevertheless, we are not yet at a point where all the parallel processing apabilities of current hardware can be
exploited to the fullest so a single fast GPU is preferable to a SLI or Crossfire configuration of slightly slower
ones.
BMS 4.33 was graphically more demanding than 4.32, partly due to the variety and higher resolution textures
of the new tiles and partly for the reasons outlined above; this was especially noticeable when using the TGP,
TFR, FLIR on HUD and video WPN displays. 4.33 with comparable settings would run slower than 4.32 did; how
much would vary from system to system.
4.34 & 4.35 were both further improved and optimised but on older systems you may still find your frame rate
drops too much for comfort and you may have to decrease some options to gain FPS back. This section will
suggest options to increase FPS without impacting the overall experience too much.
BMS will use (i.e. allocate) memory ressources each time you enter 3D as the features getting loaded remain in
memory until you exit BMS. So one way to lose FPS is to constantly enter and exit 3D in different scenarios.
The impact should be minimal in typical use for newer PCs with lots of memory but be aware that going in and
out of 3D (for example flying several consecutive missions) without restarting Falcon BMS will progressively use
up memory, amongst other problems. Your first reflex upon discovering an abnormal FPS issue is to restart the
software, just like you would do with any other software.
This is not a bug or memory leak per se, it’s more about not having a proper "cleanup concept" of in-game
objects, due to the fact that Falcon was designed in such a way that the action can continue, even when in 2D.
What happens is that once stuff is loaded (even in aggregated form), it *stays* loaded - at least as an
oversimplified concept; there are exceptions, of course.
It is not a trivial task to distinguish the "needs to stay loaded, because campaign/TE is still running!" stuff from
the "not needed anymore, because i.e. we loaded a completely different TE" stuff. So, these "leaks" are not
accidental, or by oversight; they are by design. The complexity of having proper after-3D cleanups is WAY more
complicated than establishing the "always restart BMS before re-entering 3D" rule.
6-38
BMS TECHNICAL MANUAL
CHANGE 1.00
FPS impact will depend on your hardware components, system configuration and drivers. Ensure the drivers
you are using are best suited for BMS (www.benchmarksims.org is a good place to ask). The most important
advice is to try out the different options for yourself; what works on one PC might not make as much difference
for yours.
There are four BMS features that may have an impact on FPS on older hardware:
- Autogen trees/grass
- Clouds. Cloud impact on FPS has been improved in 4.35 as we draw less clouds. Moving the autogen
slider position to the left and drawing fewer cumulus clouds might further decrease the graphical
workload and increase FPS.
- Autogen trees/grass density
- Multisampling
- HDR Lighting
You may start with these 4 options and judge their impact on your system.
If you still need more FPS you will have to deactivate more eye candy features. Open the Falcon BMS Config
app and select the hardware section:
The clouds density and number of cells options are a further way to
decrease the clouds impact on your FPS.
Lower resolution items may help FPS so you can always try activating
Low Resolution for Clouds and deactivating High Resolution Textures.
Selecting Reduce Particle System will save a few FPS when the PS is
used (explosions, smoke, etc.).
Extracting displays may cost FPS even with the new RTT remote new
tool, although the impact should be minimized. If you do extract your
displays, ensure that extracted display windows do not overlap each
other’s or are spread partly on two different screens
Shaders are FPS hungry so you may want to deactivate some of them
according to how serious your FPS issue is.
Rain Effects can be turned off but obviously this will only have an
impact in inclement weather.
Shadow Mapping does not bring much to immersion but has FPS costs
so you may want to deactivate these options.
Water Environment Mapping can be deactivated if you can live with less
realistic water rendering.
6-39
BMS TECHNICAL MANUAL
CHANGE 1.00
• Create simple weather models with the deterministic or probabilistic models straight from the UI.
• Create Fmaps with Weather Commander (user created) or F4Wx (real weather data).
Fmaps are maps of the weather over the BMS terrain. Each area of the terrain can be assigned a specific cell of
the usual Sunny, Fair, Poor and Inclement type. Each cell features the following information:
• Weather type
• Pressure
• Temperature
• Wind heading and speed including wind aloft parameters
• Cloud lower layer base altitude
• Cloud upper layer altitude
• Cumulus Coverage and Size
• Visibility
• Speed and direction of the airmass moving
Fmaps allow you to generate extremely complex weather types (you can now transition gradually from a sunny
sky with a lot of fog in the morning to a thunderstorm front in the afternoon).
4.34 Fmaps should be compatible with 4.35 (4.33 are not)
Building Fmaps will definitely create more work but will provide a much more immersive situation.
It would be unwise in a simulation to plan a complicated COMAO, brief it for an hour or more then have to
abort because a real weather fmap makes the mission objective impossible to achieve. Unlike real life where
the COMAO will be put on standby until the weather cooperates, in a simulation we can make the weather
support the TE designer’s objectives, as he planned them.
Therefore, unlike real life, the weather situation can be adapted to the TE mission objectives.
When using that aspect of the simulated weather you cannot really always use real weather (you may but you
need to ensure it’s compatible with your mission’s objective first). In this specific scenario, creating an Fmap for
a single TE is made with Weather Commander by Falcas, where the user alone decides the weather
parameters.
Using real weather is nevertheless appealing and is quite possible using another tool: F4Wx by Ahmed.
This application used real-world GRIB data taken from around the globe (obviously matching the BMS terrain)
and converts the real weather data into the BMS Fmap format. This is where the complexity of the Fmap
model really shines and can result in very immersive Fmaps.
Consecutive Fmaps can be created with this tool which can make a great candidate for dynamic campaign
weather using the map auto-update function.
Both tools are documented below. Hopefully this is enough to give you a glimpse on how to use them and
motivate you to try to learn more about them. They are very powerful tools.
7-40
BMS TECHNICAL MANUAL
CHANGE 1.00
Clouds are shared in multiplayer, which means that all players should see the same cloud cover throughout the
theatre.
7-41
BMS TECHNICAL MANUAL
CHANGE 1.00
Upon opening Weather commander a map of Korea (default BMS terrain) is displayed. Other background
images can be loaded from the file menu for third party terrain. A 1024 theatre is divided into 59x59 weather
cells. Each cell can be characterised with the specific weather information.
Weather Type
When the Weather Type tab is selected the map can be
painted with one of the 4 BMS weather types.
Colours are fixed:
Pressure
The Pressure tab allows the user to set pressure for
each cell from 950 to 1060Mb (28.05 to 31.30 inHg).
Colours are fixed according to the colour scale
displayed on the right. First select a pressure you
want to set then paint on the map where you want
to set that particular pressure. Then do the same for
the next pressure settings. Generally bad weather
has a low pressure and good weather is a high
pressure system. Try to avoid drastic pressure
variations as these are unrealistic. Pressure variation
is usually slow and very gradual. Brush thickness and
opacity can be set as usual.
7-42
BMS TECHNICAL MANUAL
CHANGE 1.00
Temperature
Temperature at ground level can be painted on the
map in the same way as pressure. A scale of
Celsius and Fahrenheit temperature is colour
coded. Once painted, each cell will display the
colour of its associated temperature. As usual
select a temperature then paint the map with the
brush.
The Cursor Value gives temperature in °C and °F at
the cursor position. Obviously temperature is
higher when the sun is shining. Poor weather (in
the day at least) has a lower temperature due to
cloud cover.
Wind
Winds aloft have been introduced with 4.34 weather model, You may
set wind direction and speed at different levels to accommodate the
4.34 winds aloft features. This is done with the Altitude drop down
menu.
Select an altitude layer, paint the map with winds and select the next
until all are covered. Remember that the wind picks up speed and
degrees (turns right) as the altitude increases.
Wind direction is set by clicking the green circle from where you want the wind to blow.
Wind speed is set through the Speed slider from 0 to 150 kts. When both are set the map can be painted with
the settings. As with real maps wind speed
and direction is given with vectors and side
bars for speed.
In the Northern hemisphere winds go from the Low
pressure system to the High pressure system and are
deviated to the right due to the Coriolis Effect.
They turn clockwise around high pressure and anti-
clockwise around low pressure systems. We can consider
that wind is parallel to the isobars (points of same pressure)
and the winds should be stronger as the isobars are closer
to each other (if pressure changes rapidly, wind is stronger).
Cloud Base
The next tab allows the Cloud Base (corresponding to the Low clouds in the UI) to be set in feet MSL between
zero and 10.000 feet.
7-43
BMS TECHNICAL MANUAL
CHANGE 1.00
Cloud Coverage
The Cloud density has the same meaning as the top slider in the cloud
tab of the weather UI. It sets the clouds coverage in octats.
You have the choice between Few (FEW = (1-2)/8), Scattered (SCT =
(3-4)/8), Broken (BKN = (5-6-7)/8) and Overcast (OVC = 8/8).
Each option has its own colour.
Please note, a Sunny weather cell will have clear skies (0/8) therefore
to set no clouds at all, you must select Sunny weather type for that cell.
In the same logic, you can’t have inclement weather with few or SCT
clouds. Therefore cells with poor and inclement type will be BKN
(broken) at minimum. When you try to paint FEW over such a cell, you
will notice that the cells are not painted.
The term ceiling starts only from Broken. You cannot define ceiling
under 5/8 cloud coverage. CAVOK (Ceiling and Visibility OK) is often
misunderstood; you may have a CAVOK situation when the cloud
coverage is above 5000 feet. An overcast layer at 9000feet but no
cloud ceiling under 5000 will be defined as CAVOK as long as
visibility is above 10 kilometers.
Cloud Size
The Cloud Size has the same meaning as the second slider in the
cloud tab of the weather UI. It sets the clouds from Congestus to
Humilis with a scale from 0 to 5 with 5 being the Humilis side of
the slider and the 0 being the Congestus side of the slider.
Towering Cumulus
This tab defines if the cumulus clouds have strong vertical development. As you may know, cumulus clouds go
through different development stages between the formation of storm cells. Before the storm, the cumulus
start to grow high in tower forms (hence the towering) and develop strong downdrafts outside the clouds and
strong updrafts inside the clouds.
There are only two settings you can apply: with (YES) or without tower (NO). Each is coloured accordingly.
Visibility
The last tab is simply used to set the visibility. You can set it from 0 to 60 km just like with the UI slider. The
settings are coloured accordingly as well.
Once all layers have been painted on the map, save the file. Weather Commander will save the weather as an
fmap that should be placed in the \Data\Campaign\folder and then can be activated in the BMS UI.
Please note, once a TE is set to weather map model, the Fmap is duplicated and renamed with the mission
name.
7-44
BMS TECHNICAL MANUAL
CHANGE 1.00
A new real weather tool emerged on the public forum and has been optimised for the 4.34 weather system.
This tool allows you to download real weather data files and adapt them to BMS .fmap format very easily.
F4Wx can be downloaded via the BMS forum and is still compatible with 4.35
Clicking on the Download Weather button opens a new window where you
may select the GFS weather to download.
Select the top line which should correspond to the latest weather available
and input desired intervals in the two boxes below:
• Download Forecast: Default value is MAX but you can limit the
number of files to download by setting an hour limit. In this case,
we will limit our request to 12h forecast.
• Download interval: Default value 3 hours. Weather files are available
hourly but over a long forecast request, it will create a lot of Fmaps. You can therefore limit the interval
of the weather change by inputting the number of hours between 2 Weather data updates. In our
example we want accurate weather over a short time (12 hours) by setting the interval to 1h.
This should generate 13 Fmaps. Click on the Download button to strat downloading the weather files. It may
take a while depending on how much information you chose to download.
7-45
BMS TECHNICAL MANUAL
CHANGE 1.00
The “Save Current” option allows you to save a single Fmap according to the Time slider position. Position the
time slider to a specific forecast you just downloaded and hit the Save button. One Fmap will be created.
But we want here to save the full sequence of the downloaded weather forecast. Select the “Save Sequence
option” and check the 3 next checkboxes (Sync with Real Timezone, Start from Current Position and Save
Preview Images. The time between files and Forecast to Generate can be set as well but we will use the default
settings. Click “Save”.
F4Wx will prompt you for a location folder to save the Fmaps. You may elect to copy them directly to your BMS
install (\Data\Campaign or \Data\Campaign\WeatherMapsUpdates) but I always use a temporary location
under the app folder (\F4Wx\Fmaps). As expected, 13 Fmaps were created.
Files are named according the day and hour in BMS. In this case, the
sequence starts Day 1 at 09.00 (10900.fmap) and ends Day 1 at
21.00 (12100.fmap). A subfolder is also created with previews of the
weather forecast for each interval you selected (if you enabled that
option). This will be particularly handy for your briefings.
You may create as many Fmaps as you wish and apply them in TE or
in campaign. Maps will auto-update from one to another, which is a
much better way than having a single weather map that moves
across the BMS terrain. When a single map is moved, the part that
disappears on one side reappears on the other side which might
generate weird weather artefacts.
7-46
BMS TECHNICAL MANUAL
CHANGE 1.00
With the 13 Fmaps you just created with F4Wx let’s create a TE scenario on a 12 hour timeframe with the BMS
weather system generating a weather update every hour.
Create a TE which by default will start at 09:00 FT Day1. Once your initial TE is created, open the Weather
menu and select Map Model as the Weather model. You then need to load a Fmap from the list below.
Select the 10900.Fmap that you copied in your \Data\Campaign folder.
Enable MAPS AUTO UPDATE. This will make the TE look in the \Data\Campaign\WeatherMapsUpdates folder
for subsequent Fmaps named according to the convention explained below and update the weather according
to the Falcon clock.
Do not forget to save the Weather in the UI by clicking the “SAVE WTH” button.
Since F4Wx uses the same naming convention as the BMS UI, the files created with f4Wx work perfectly with
the weather updates. In our case, the initial weather will be the data from 10900.fmap initially loaded and the
weather will switch to the 11000.fmap (day1 – 10.00FT) at 10 AM falcon time.
Please note the initial Fmap must be copied to the \Data\Campaign folder (so it can be used as the initial
weather file) and the other subsequent Fmaps must be copied to the \Data\Campaign\WeatherMapsUpdates
folder.
You may now create a full weather briefing using the Fmap generated preview images. When doing this,
Weather Commander can be a great tool to open and read the F4Wx generated Fmaps. This will provide you
with many variables for creating your weather briefings.
7-47
BMS TECHNICAL MANUAL
CHANGE 1.00
Please note:
Minimum interval for auto loaded weather maps is now 55 minutes to guarantee correct interpolation. Maps
below minimum interval will be disregarded.
The maps to be subsequently loaded must be placed in the \Data\Campaign\WeatherMapsUpdates folder with
a specific format: day * 10000 + hour * 100 + minute.fmap.
If the auto-update flag is set on in the UI - WEATHER page the campaign engine will load the map when the
time matches the file name.
Example:
7-48
BMS TECHNICAL MANUAL
CHANGE 1.00
8. Views
The Views have been documented in chapter 9 of the BMS manual. This chapter here will cover the more
technical details of managing the views in BMS.
Note: this will only work if the mouse wheel is NOT mapped as an analogue axis!
In the Snap View Pit FOV adjustment does not work. If TrackIR Z Axis Vector Mode is set to
FOV, or you have set the FOV Axis, changing the FOV with the mouse wheel will not work.
The behavior of the scroll wheel and middle mouse buttons can be modified by adding the following
lines to your Falcon BMS.cfg file:
<command> is the name of the function you wish to execute. You can find a complete list of all
available functions either in the key files or in the BMS Key File Editor.xls. Each increment of the scroll
wheel will cause the corresponding command to be executed once.
Default Values
Note: this is the default behavior of the mouse wheel, so you will not find them in the
Falcon BMS.cfg file.
8-49
BMS TECHNICAL MANUAL
CHANGE 1.00
• set g_fDefaultFOV 60
Changes your default field of view (FOV) setting. In the Config Editor you have options from 45° to 80°
available in 5° offsets. Default is 60°.
If you want to have other than that, you need to change it manually in the Falcon BMS.cfg file using a
text editor. The default FOV should not be greater than the set g_fMaximumFOV setting.
• set g_fFOVIncrement 5
Sets how much the field of view should change for each keypress / mouse wheel step in degrees.
Default is 5° steps. You could also define 1° degree steps for finer tuning of the FOV or use bigger steps
like 20°. To change this you must edit the Falcon BMS.cfg manually. Bear in mind that FOVIncrement
values greater than 5° could prevent you from reaching the minimum FOV of 5°.
• set g_fMaximumFOV 80
This limits the maximum amount that the FOV can be increased.
You also have to change that value manually in the Falcon BMS.cfg if desired.
Note: The higher the value, the more distorted the view is, especially above 100°
You can set FOV values between 5° and 180°.
• set g_fNarrowFOV 20
If the current field of view is less than or equal to the default, then the FOV is set to g_fNarrowFOV
(value is in degrees). Otherwise it is set to the g_fDefaultFOV (default = 20). Subsequent presses after
the first one will always bounce back and forth between default and narrow FOV values. The algorithm
is invoked when you use the FOVToggle (Look Closer) callback.
8-50
BMS TECHNICAL MANUAL
CHANGE 1.00
When mouselook is enabled (Clickable 3D Cockpit Default inactive and TIR inactive) the mouse wheel
button has specific functions:
When the mouse wheel button is held you can move your head up / down, left / right and forward /
backward. This only works if TrackIR is disabled and the 3d cockpit supports 6DoF. Mouse head
translation only works in 3d pit Pan view; it does not work in 3d pit Snap view, padlock or other views.
When the mouse wheel button is depressed and held you have the following options:
o Mouse movement left / right = Pilot Head Movement left / right
o Mouse movement fwd / bwd = Pilot Head Movement forward / backward
o Mouse wheel up / down = Pilot Head Movement up / down
To prevent this, new keystrokes have been added to enable/disable mouse buttons in the 3D cockpit entirely.
This offers the possibility to avoid unwanted mouse clicks in non-exclusive mouse capture mode, e.g. for
touchscreen users. The new keystroke names are:
o OTWMouseButtonsIn3dToggle: ALT 3
o OTWMouseButtonsIn3dEnable
o OTWMouseButtonsIn3dDisable
These define fixed camera views located inside the cockpit which can be focused on the MFDs, the ICP, the
fault display etc. Unfortunately, you have to do some editing by yourself.
8-51
BMS TECHNICAL MANUAL
CHANGE 1.00
Open the Guidedview.txt file with an editor. Below are two example code lines:
guidedview <id> 0.015883 0.040278 0.018326 1.458329 -26.396080 0.007139 20.000004 <ndir> <nid> ''
guidedview <id> 0.000000 -0.000000 0.000000 1.108329 -21.909981 -0.164438 30.000002 <ndir> <nid> ''
customview pos.x pos.y pos.z ori.yaw ori.pitch ori.roll fov “comment” clickable
The underlined part must be replaced with the bold part you’ve just copied. The word “comment” can be
replaced by a description of the view. Replace “clickable” by either “0” (= no) or “1” (= yes)
customview 0.015883 0.040278 0.018326 1.458329 -26.396080 0.007139 20.000004 “Right MFD” 1;
customview 0.000000 -0.000000 0.000000 1.108329 -21.909981 -0.164438 30.000002 “RWR ICP DED” 1;
Make sure every code line ends with a semicolon <;>, otherwise it will not work. You also have to take care to
use the correct quotation marks.
8-52
BMS TECHNICAL MANUAL
CHANGE 1.00
Here are two examples how the above custom views look like in the pit:
Note: Custom views do not work in Snap (2D) pit or HUD only / EFOV views. You have to be
in the Pan (3D) pit mode.
The TopGunCamera views are numbered. So the first view is TopGunCamera1, the second TopGunCamera2 etc.
The “7” behind always stays the same. Besides the numbering you have to change the bold part of the code
line.
Note: There is no easy way to get the corrdinates etc. You have to find them out by trial
and error. You can use the standard TopGunf views as a starting point.
8-53
BMS TECHNICAL MANUAL
CHANGE 1.00
HUD only w/o HUD rendering Pan (3D) Pit w/o HUD rendering
8.7 Displays
8.7.1 Infobar (CTL 1)
In external views an infobar is shown on the bottom of the screen. It contains information about the object
(aircraft, naval vessel, ground unit or weapon) the view is focused on. The infobar is displayed by default. It
depends on your settings in the UI Simulation tab. You can also toggle it on and off by pressing “Ctrl 1”.
Note: If you toggle the infobar in 3D your last setting when leaving the 3D world will be
applied to the UI setting as well. For example, if the infobar was activated in the UI before
the flight and in 3D you turn it off and exit the sim the UI setting will be deactivated then.
Depending on the focused object the infobar contains different information.
Aircraft will have information about callsign (Own AC = Pilots callsign - friendly aircraft = Callsign - Enemy
aircraft = Type of aircraft), heading, altitude, speed, RPM, Gs and AOA.
For Ground Units only Friendly or Enemy Ground Unit Camera messages are displayed.
8-54
BMS TECHNICAL MANUAL
CHANGE 1.00
Messages will be displayed for 10 seconds and up to 10 messages will be displayed at the same time. As more
messages are displayed the more recent ones are added at the bottom of the display and move their way up as
the older messages get removed. You can configure both the 'time to live' (TTL) and the maximum number of
displayed messages by editing the g_nSubTitleTTL and g_nNumberOfSubTitles options in the Falcon BMS.cfg
file. See the BMS Technical Manual for more information.
Messages are displayed in different colours, which indicate the radio channel where they originated from. The
colours are user editable through config options lines and are explained later in this manual.
8-55
BMS TECHNICAL MANUAL
CHANGE 1.00
• FPS: The number of frames per second presented to the monitor and the duration of a frame.
• Sim: Theoretical FPS of the simulation thread based on its duration.
• Ren: Theoretical FPS of the render thread based on its duration.
• Cmd: The number of draw calls/commands created by the current scene. If this number is high,
performance will be lower.
• Expt: Duration of the RTT export. This, added to the Sim duration roughly equals the overall FPS
duration.
If you want e.g. 120 FPS, then SIM, REN and FPS must be above 120 FPS. It is limited by the slowest running
part. If e.g. REN is only running at 50 FPS, you will never have more than 50 FPS overall.
Usually, your FPS will be a bit smaller than SIM and REN because there is still a synchronous part running
between when SIM and REN are finished and until the frame is actually presented on screen. This includes
things like the RTT export and virtual universe update.
The third part, which is also set within brackets, shows the current status of the pilot. We have different status
massages which are as follows:
8-56
BMS TECHNICAL MANUAL
CHANGE 1.00
• (UI): A pilot has connected to the server and the online game and is currently in the UI.
• (UI>3D): A pilot is entering the 3D world.
• (3D): A pilot is in the 3D world and in the cockpit.
• (3D>dead): A pilot has either ejected or his jet has crashed / exploded.
We have also some subtitles in relation to online status changes:
Note: The “exited from” message does NOT appear if a pilot has ejected or has been killed.
You also get no message if a pilot enters a server (from desktop to UI) or leaves the server
(from UI to desktop).
• incoming bw in kbps
• outgoing bw in kbps
• ping in ms
• bandwidth limit (if applicable)
The info is not calculated by BMS, but directly taken from the transport layer, i.e. it is accurate.
If you notice no "LIMITED" indication during game play (in brackets at the end of the line), all is fine. In case a
client has insufficient bandwidth for a smooth mp experience the "LIMITED" overlay will occur, indicating that
BMS msg sending is now hitting the client limits.
Also note that once "LIMITED" is shown, the ping times reported for these clients will also increase. This is an
artefact of the RakNet congestion control, as hitting the BW limit simply means that messages queue up and
take a while to be processed. Unfortunately, this is true for the ping measuring round trip messages as well. So
you will only see the actual physical ping time as long as you don't hit the hard BW limit on any given
connection.
8-57
BMS TECHNICAL MANUAL
CHANGE 1.00
Any images can be displayed on the kneeboard by way of DDS textures located in the
\Data\TerrData\Objects\KoreaObj folder. Reserved DDS are from 7982.dds to 7997.dds
By modifying the DDS you may add any suitable content to the kneeboards.
Each texture has a resolution of 2048x2048 pixels and is divided into 2 parts. The left part is for the left
kneeboard and the right part for the right kneeboard, respectively.
For now, the old single page DDS textures 1988.dds & 8019.dds are still available for compatibility reasons, e.g.
they are used by 3rd party pilot models. Please note that this can change in the future.
By default the BMS 4.35 kneeboards have checklists on the left and navigation data on the right kneeboard.
The first pages of each legs are titles or a large map which are mostly placeholders for more relevant
information that can be updated through Weapon Delivery Planner.
This open a new window displaying 16 slots of the left and 16 slots on the right
representing the current kneeboards content. (left for left kneeboard and right
for right kneeboard) The selected page
on the left and the right are visible as
images in the middle.
8-58
BMS TECHNICAL MANUAL
CHANGE 1.00
Select in the first left slot datacard left and select in the first right slot datacard right.
Since you do not want to change any other page, you may hit the SAVE button on the bottom right. This will
override the relevant DDS with the correct images. Your mission datacard are now saved into your kneeboards.
Please note, the DDS will remain so setup until you change them again. So if on your next
mission you did not upload new content or reset default contant on your kneeboards, this
specific datacard will remain loaded.
After successful insert, the preview will disappear making room for the next picture to be uploaded in any
other slot. It is therefore possible to upload many different pictures to each pages of your kneeboard.
8-59
BMS TECHNICAL MANUAL
CHANGE 1.00
When a picture has been successfully loaded into a slot, the slot will
show 'Selected Picture" and highlighting that slot will preview the
loaded picture in the middle.
Unless you really want to have a picture of your family in case you do
not come back from this mission (...) some squad specific SOP or cheat
sheets can be handy to have on the kneeboards.
Once all your 32 pages are set as you want them, clicking the "Save"
button will convert your selection into the relevant DDS files.
The DDS files will be overwritten (unless those left at "Don't Change")
and default content will be lost...
Yes I know there is a "Set default" button but this is misleading as it
does not reset the default vanilla BMS install DDS file but only the
ones which were active before launching WDP. Once you have saved
your kneeboard configuration and closed WDP, what you have saved will be the next default.
It is therefore recommended to backup the default 7982 to 7997 DDS files from your
\Data\TerrData\Objects\KoreaObj folder to ensure you can restore them whenever needed.
8-60
BMS TECHNICAL MANUAL
CHANGE 1.00
9. Aircraft Radios
9.1 Introduction
The radio code updates started in 4.32, were further refined in 4.33 and a huge step was achieved in 4.34.
No further changes have been made in 4.35. Let’s have a bit of history:
The radio in Falcon4 BMS underwent significant changes in BMS 4.32 compared to earlier dialects of Falcon 4.0.
These changes included differences in both the single-player and multiplayer environment.
4.33 introduced a couple of new features to the 4.32 radios. One big addition is that, as with real life radios, we
are now limited in range. Radio range (including IVC) is now Line of Sight dependant. As you get further away
from the other radio the quality and volume of the transmission will degrade until you can not understand,
then no longer hear the other person’s transmission. The other change is the possibility of using sidetone
(if your hardware supports it), for an even more authentic audio experience.
4.34 introduced unique frequency according to callsign and the need for humans and AI alike to be on the same
frequency to be able to communicate. More frequencies were added for controlling agencies like ATC and
AWACS but most importantly AI no longer follow human frequency changes auto-magically.
With 4.34, just like real-life, if you are not on the correct frequency and issue a radio message, the message will
be lost and nobody will answer.
9.2 UHF
The UHF band frequencies are from 225.000-399.975 MHz in 25 kHz stepping. Since 25 kHz stepping applies,
the 5th digit of a 6-digit freq must end with 0, 2, 5, or 7 and the 6th digit must end in 5 or 0.
Examples of valid freqs: 371.075, 377.10, 271.6. Examples of invalid freqs: 339.11, 271.14.
It should be noted that the pilot inputting frequencies using 6 digits will only actually see 5 digits in the DED.
With 4.34 this will happen far more often as we use many more frequencies in a limited range.
9.3 VHF
The VHF band frequencies are from (AM mode) 116.000-151.975 MHz in 25 kHz stepping. Please note BMS
“own valid” range (for voice communications) is from 118.000 to 144.000 MKz.
The FM mode (30.000-87.975 MHz) is not implemented. The rules regarding digit input are the same as those
which apply to the UHF band.
A large part of the VHF range is reserved for ATC and navigation and cannot be used for radio communication.
ILS frequencies are within 108 – 111.975 MHz and RadioNavigation stations are from 112.0 to 117.975 MHz.
ATC also uses the range between 118.0 to 135.975. That normally leaves 136.0 to 144.0 in BMS for radio
communications (real life is possible up to 151.975).
9-61
BMS TECHNICAL MANUAL
CHANGE 1.00
Now to be able to communicate with any entity you need to tune the frequency of that entity. There are no
presets anymore for flight, package, team or whatever. Each entity has its own frequency and like in real life if
you want to talk to them you must know and tune to that frequency in your radio.
This will be particularly noticeable the first time you try to manage your AI wingmen. If you are not on the
assigned VHF frequency for your flight your wingmen will simply not hear you. As radio checks are not possible
in BMS, just ask for a fuel check (or similar) and if you don’t get a response chances are that your VHF is not
tuned to your default flight VHF frequency.
Default VHF flight frequency presets have changed. According to the position of the flight in a package, the
presets will be either #15 for the first flight (ID10), #16 for the second flight (ID20), #17 for the third flight
(ID30) and you get the idea what it will be for the fourth and up to the possible fifth flight in that package.
In solo play with a single flight not part of a package the default VHF preset will always be #15.
The UHF Package frequency is the assigned UHF frequency of the leading flight in that package. That leading
flight is assigned ID 10. The IDM addresses and the Air to Air TACAN default channels still depend on the ID of
the flight within its package. The UHF radio frequency of that package will now be assigned as the ID 10 flight
UHF frequency. This is pretty transparent for users except for some very specific cases.
When a tanker package is created for instance and made up of a tanker flight and an escort flight if the tanker
is the first flight in the package the package UHF will be the tanker frequency. When the user tunes to the
tanker frequency prior to an air to air refuel, he will therefore hear all the escort flight UHF radio transmissions
on the tanker frequency. To avoid this, the tanker when part of a package should never be assigned as the first
flight; the escort should be the first flight. That way, the escort flight UHF is the primary radio and the tanker
will have its own frequency, dedicated to AAR. The same is true for AWACS, to an even greater extent.
Another consequence of the new radio code is that in solo player the frequency might be much quieter than
before. As you will not hear magically all the radio transmissions from multiple frequencies around you
anymore but only the frequencies you are tuned to, the radio traffic will seriously decrease from previous
missions. This is a double-edged sword and something future revisions of BMS will hopefully address.
Less traffic makes it easier to get a clear picture of what’s going on around you without the interference from
engagements happening far away from you as it was in previous versions, but on the other hand sometimes
the radio traffic is so sparse on your own frequency that it’s far from being enough to build a good situational
awareness about what is going on around you with other flights being on their own dedicated frequency.
Fortunately the new AWACS Picture calls are significantly better at helping you build/maintain SA.
9-62
BMS TECHNICAL MANUAL
CHANGE 1.00
To maintain the F1 capability to communicate from the UI to the 3D world with the deletion of the TEAM
channel, the F1 default frequency was changed to a new preset common to most of the flights and named
“Advisory”. It’s preset 14 and assigned to the fixed frequency 339.750 MHz.
Naturally, if both sides (teams) do not have different Team freqs, everyone will hear one another as if they
were on the same team. In a MP environment, F2 is by default ONLY used for the UI and everyone in the UI can
hear transmissions on it. By default F2 can never be heard from the 3d world because it uses a frequency
outside the range you can select once you are in the jet. F2 is intended for everyone to use to check their IVC
when joining first chat (the COMMS window), to coordinate and synchronise launching to 3D, briefing any
“global” type things like rules of engagement, any special procedures, or just BS’ing before you fly.
It is possible to change the frequency that is used for F2 from the UI, so if you want you can reconfigure it so
both F1 and F2 are tunable in the 3D world as well. Depending on your needs you have considerable flexibility
to separate teams or have multiple “control agencies” on separate frequencies or the like.
VHF is normally used for intra-flight communications but some frequencies may double as coordination net as
well depending on the purpose. What does this mean to you?
Since the above are the typical set ups, we recommend talking to Towers, AI packages, or humans in other
flights or packages on UHF and keeping intra-flight communications on VHF.
• UHF 2 (preset 2 for Departure airbase Ground frequency) and change UHF when instructued to the
following controlling agencies (tower, departure, tactical net).
• VHF 15 (the new first flight default intra-flight preset).
In a multiplayer (MP) environment, with say 2 flights of 4 aircraft in the same package the UHF would be the
same as all aircraft need to be on the assigned ATC frequency (ground with preset #2 in this case) but having all
the 8 players on the same VHF frequency would not work efficiently. The first flight would be on VHF preset
#15 and the second flight would be on VHF preset #16.
9-63
BMS TECHNICAL MANUAL
CHANGE 1.00
That way each flight can have intra-flight comms on the VHF flight frequency and the 2 flight leads can talk to
each other using the UHF frequency (usually after being released from the ATC).
Worth mentioning also is that 4.34 finally implements concurrent UHF/VHF radio playback. In other words, just
like real life, you may hear transmissions from both radios at the same time. Two stations emitting on the same
radio frequency will be blocked, but as your aircraft has two separate radios (UHF and VHF) if you receive
transmissions from both at the same time, you will hear both at the same time, unlike previous versions where
they were sequenced one after another or partially deleted and not heard.
During internal testing, it turned out that it is *really hard* to listen to two independent radio transmissions at
the same time, especially if both are using the same voice (which can happen in BMS), and are co-located
acoustically. A new config option: g_fRadioBalance has been introduced to shift the UHF/VHF playback volume
out of centre (in opposite directions). Default is 0.0, i.e. both UHF and VHF will be centered. A positive value
will shift UHF to the right, VHF to the left. A negative value will shift UHF to the left, VHF to the right. We advise
you to set it to 4 (or -4) to start with and then adjust to your preference. More information can be found in
chapter 13.9. Please note this is only valid for true VHF or UHF comms, ATIS which is TTS but VHF to BMS flyers
is actually from the centre and cannot be side shifted.
As you can see, referencing the default frequency table above, 339750 is 339.750 MHz. That number is the
default if set g_nF1TeamUiFreq is not set in the .cfg file. To change the Team freq, add a 6-digit number that
complies with the rules mentioned in the UHF section regarding frequencies or keep it simple.
Good examples: 236800, 377800, 253700, 229025, 141325, 139000, 143925.
The team freq can either be a valid UHF or valid VHF frequency.
IMPORTANT NOTE: The team freq does not have to be a valid UHF or VHF frequency, but there’s a catch.
It can be any 6-digit number, but we strongly recommend using a valid UHF/VHF frequency, as a pilot in the 3D
world will only be able to tune to a valid frequency. So while the number you choose will work for the UI, it will
not for the 3D world. So just ensure you are using a valid frequency and be done with it!
The same configuration trick works for the F2 frequency as well, so you can change it as well if you want.
In this case the name of the variable to set the frequency is: g_nF2TeamUiFreq.
9-64
BMS TECHNICAL MANUAL
CHANGE 1.00
PART 2
9-65
BMS TECHNICAL MANUAL
CHANGE 1.00
The categories and sections are meant to act like a headline. Even in the newspapers you will look for the
headlines in the first place. Each category has a group of sections. As an example the LEFT CONSOLE is the
category of the following sections:
TEST PANEL, FLT CONTROL PANEL, MANUAL TRIM PANEL, FUEL PANEL etc.
The first key file code line, if set to -1, will be displayed as shown above. This is the description of the file to see
at a glance, which file is loaded.
The categories and sections are set to value -1, so they are visible in the UI, not changeable and with a blue
background color.
10-66
BMS TECHNICAL MANUAL
CHANGE 1.00
Separators:
In the key file itself we use the following lines for easy navigation:
#========================================================================
They are set before and after each category and section. They are not shown in the UI, because they are
commented out. Unfortunately you will lose all commented stuff (with a # at the beginning) once you save the
file in the UI. So it is recommended to keep a backup of the original file.
But after a while you should be able to navigate the key file easily without these borders. This feature is just for
those who are not familiar with editing keystroke files.
10-67
BMS TECHNICAL MANUAL
CHANGE 1.00
The categories and sections follow basically the arrangement made by Red Dog. So you will start in the pit at the
rear left side, go to the front and then to the rear right side. But there are some differences. We sorted the
callbacks in the sections and the sections itself more logical and gave them more correct names.
For more info about the categories and sections see the overview farther below.
The description has been divided into three separate terms: 1. Term: 2. Term – 3. Term
2. Term: Correct designation of the switch / button / wheel / knob etc. followed by a dash.
3. Term: Correct designation of the positions / states of a switch / button etc., or: Short description of the
function
Examples:
In some cases it does not make sense to divide the description into three terms. So you will also find descriptions
with only two terms. Then it will be like this: 1. Term: 3. Term
Examples:
10-68
BMS TECHNICAL MANUAL
CHANGE 1.00
If possible, this term has no more than 4 or 5 characters. But sometimes they have more.
Each first term is unique in the key file and describes only one section. So it is possible only to look at the first
term while scrolling down the key file in the UI. You will easily find what you need.
10-69
BMS TECHNICAL MANUAL
CHANGE 1.00
Function:
Describes a specific function, e.g. Sím Exit. Sometimes we had to keep the description short. So there are some
short forms. These are:
Tog. (Toggle)
Cyc. (Cycle)
Inc. (Increase)
Dec. (Decrease)
Dn (Down)
Btn. (Button)
10-70
BMS TECHNICAL MANUAL
CHANGE 1.00
If the second term refers to a switch / button etc. in the cockpit, it is also written in upper case. (MAIN PWR /
PARKING BRAKE…)
If the positions / states are referring to a corresponding switch / button etc in the Pit, it is written in upper case.
(ON / OFF / UP / DN…)
All other words only begin with a single upper-case letter. (Increase / Toggle / Up…)
So what is the difference between UP and Up? It’s quite simple. Everything you can read in the Pit is written in
upper case completely.
For cycle, toggle and toggle up/down callbacks you have to use the right and left mouse button. (With some
exceptions)
10-71
BMS TECHNICAL MANUAL
CHANGE 1.00
10-72
BMS TECHNICAL MANUAL
CHANGE 1.00
10-73
BMS TECHNICAL MANUAL
CHANGE 1.00
Important callbacks which you will need often are easily accessible. Cockpit callbacks are grouped panel by panel.
It is possible to perform a complete ramp start without using the mouse in the cockpit. The key settings are
optimized for HOTAS owners, especially TM Cougar.
TrackIR uses some keys by default. These are e.g. F8 (TrackIR precision) or more important F12 (TrackIR recenter).
These default keys along with BMS specific functions like TrackIR reload are incorporated into the key file.
Note: You can change the key for TrackIR Recenter at two different locations. The UI in BMS
and the TrackIR UI. In case of mapping two different keys for recenter, both will be
working.
Regarding VoIP software like TeamSpeak (should be the most common), you do not have default keys for PTT or
broadcast functionality. These keys have to be set manually in the TS UI. Nonetheless we decided to implement
them into our keyboard layout. You can see the key settings in our layout as suggestions. Of course you can map
them to any key you want. Another solution is, to set them as DX buttons. In this case you have to assign them
in TS settings. A proper place for them would be the same button on you HOTAS you have assigned VHF / UHF
Comms to.
Fraps is a commonly used tool for video capturing. Unfortunately the default keys are colliding with the default
keys of TrackIR. So you have to remap either the TIR or the Frap default keys.
Note: F9 (TIR Pause / FRAPS Video Capture) and F12 (TIR Recenter / FRAPS Overlay) are
colliding. If you use both you have to solve it by reassigning these keys in one tool to avoid
issues.
10-74
BMS TECHNICAL MANUAL
CHANGE 1.00
Newly implemented is the default key (F8) for VAC (Voice Activated Commands) Push to Activate (PTA). Please
note that this key is in conflict with TrackIR (TIR F8 = TIR Profile). What is not incorporated to the key files is the
default keys for VAC On/Off, which is Strg-End (USInt) by default. First it is also in conflict with other BMS related
functions. Second, you will most likely just use one option (either PTT or On/Off).
Keep in mind that you have to set the keys directly in the software and NOT in BMS. Except for TrackIR reload
and TrackIR Recenter, all key settings for TrackIR and TS are mapped to the callback SimDoNothing, so you can
find them in both the key file itself and the keyboard layout.
Full:
This is the full version of the key file with all callbacks.
Pitbuilder:
This version is for pit builders. All toggle / cycle callbacks for switches / knobs which have full state callbacks are
removed. The pitbuilders file has its own dedicated key assignments.
Basic:
This is the “light” version of the “Full” key file. All full state callbacks are removed. If you are not a pitbuilder and
use cycle / toggle functions instead, this is the file for you.
Minimum:
This key file contains only a small number of callbacks which are essential plus some additional functions for
comfort reasons. If you use the mouse in cockpit very often, this is most likely the right key file for you.
Blank:
This is the full key file without any key assignments (except hardcoded stuff, general comms and exit sim).
While non pitbuilders are used to interact with the cockpit either via mouse or by using toggle / cycle functions,
the needs for a pitbuilder are different.
The main goal was to assign all currently implemented functions and taking a look into the future to take further
developments into account right from the beginning. So what we have now is a complete set of all possible
cockpit functions based on the F-16C/D Blk 50 cockpit layout. This makes sure, pitbuilders have a future proof
keyboard layout at hand on which they can rely on.
10-75
BMS TECHNICAL MANUAL
CHANGE 1.00
But wait:
No promises are made whether new functions are developed or not. Although it is very likely, that most of the
missing functions will be addressed someday, we cannot guarantee that all possible cockpit functions will be
implemented.
10.4.5 Backup
When editing key files you will likely use the files in the User/Config folder. In case something went wrong you
can easily replace the faulty key file with a good one from the BMS Cloud Storage.
The cloud is located on the Benchmarksims hompage -> Home -> Articles
Note: The parts are separated by a blank character (Spaces shown with a red underline
here).
The callbacks itself are hardcoded and cannot be changed by the user. They could only be replaced by other
callbacks, which do not make sense in a key file as we can simply assign other keyboard keys to this callback. (DX
code lines are another story and are described later).
10-76
BMS TECHNICAL MANUAL
CHANGE 1.00
You can find a complete set of all callbacks which are safe to use in our _full key file. Callbacks which are not
listed there are outdated / deprecated and should no longer be used as they will be most likely dropped in the
future.
These 2d pit button IDs (4-digit numbers) are now outdated and don’t work anymore!
Now the second part serves as sound ID, which will be used directly from f4sndtbl.txt. It determines the
KEY_DOWN sound to be played when activating the callback.
If you replace the number by -1 sound playback is disabled for that callback.
More info can be found in the chapter Why we do not hear cockpit sounds when pressing a key.
(0X22 = g)
BMS makes use of the XT scan codes. The keyboard key code used in the BMS key files is composed of a leading
0X and the following one- or two-digit XT scan code Hex number.
There is one exception: If no key is assigned the keyboard key code is 0XFFFFFFFF.
10-77
BMS TECHNICAL MANUAL
CHANGE 1.00
Each key has an assigned and unique scan code which will be transferred when pressing the key. The interesting
part of it is that the scan codes for most keys (but not all!) are working regardless of which keyboard language is
chosen, even if the key caption says something different.
For example:
0X15 is “Y” on an US International keyboard layout and “Z” on a German layout. So the XT codes are independent
from the chosen keyboard language. 0X15 will be shown country-specific correctly.
I do not use all possible keys as we want to make sure, that the key files can be used by the majority of the
community. The keyboard layouts around the globe are widely differing. So we concentrated on the most
common keys. We do not want to list all key codes here as it would be a rather long list. Please refer to our BMS
Keyboard Codes documents (can be found in the keyboard layouts folder) for more information.
A full list of all possible key codes can be found in the original Keyfile-generator.xls in the BMS installation
folder/Docs/Falcon BMS Manuals. But if you want to create your own key file with the intention of spreading it,
we would recommend staying with a few common keys as we did. If you use a single code which is not supported
by your keyboard, it will crash BMS as soon as you try to load it in BMS UI.
You can assign modifiers to be used together with keyboard keys. In the example above the Shift key is assigned.
To invoke the callback you have to press Shift + g on the keyboard.
We can use three different modifier keys, Shift, Ctrl and Alt. They can be combined which sums up in eight
different modifier combinations:
10-78
BMS TECHNICAL MANUAL
CHANGE 1.00
If you assign a modifier but no keyboard key in the code line, the function will be shown as “No Key Assigned” in
the UI. So it is not possible to assign a function to a modifier key only.
Also it is not distinguished between left & right modifier keys (e.g. left Shift / right Shift).
Before starting here you have to understand, that the sixth and the seventh part (key combination key + modifier)
cohere.
You cannot use a key combination key without a key combination modifier!
Same for the other way round, you cannot use a key combination modifier without a key combination key! But
this will be addressed later.
In our key files you have one code line which looks the same as the example above. So you assign a keyboard key
+ modifier key to the callback CommandsSetKeyCombo the same way as you normally would do with all other
callbacks in a key file.
But you can’t do that in the UI. Indeed it would be possible to set the keys for CommandsSetKeyCombo here. But
you have no possibility to assign the key combo (Alt + C in this example) to another function in the UI. So you
have to manually edit the key file with an editor either way.
It is possible to set two or more different key combos. But it doesn’t make sense, as there is no need for it. So
we use only one key combo with our key files (Alt + C).
10-79
BMS TECHNICAL MANUAL
CHANGE 1.00
Once a key combo is set, we need to implement it into an existing code line:
Note: There is a special case for setting a key combo modifier without a key combo key. If a
code line is set to “locked” (-0, see eighth part below) it is not possible to change the keys in
the UI (In the example above 0X22 = “g”). You can also not assign “g” to any other function,
because the locked status is preventing the deletion of the key in that code line. By
assigning a key combo modifier “g” remains in the locked code line while assigning it
somewhere else is possible now. This workaround is used for the “1. UI & 3RD PARTY
SOFTWARE” category in the key files.
10-80
BMS TECHNICAL MANUAL
CHANGE 1.00
Example: Visible
Example: Headline
10-81
BMS TECHNICAL MANUAL
CHANGE 1.00
When using more than 45 characters the description will be cut off as shown in the example below.
AFGearToggle -1 0 0X22 0 0 0 1 "GEAR: LG Handle – Toggle (>45 characters will be cut off)"
SimTriggerFirstDetent 0 -1 -2 0 0x0 0
Each code line is composed of seven different parts. An eighth part is optional.
Note: The parts are separated by a blank character (Spaces shown with a red underline
here).
SimTriggerFirstDetent_0_-1_-2_0_0x0_0
What each part does in a code line is described below.
A second difference is that it does make sense to change callbacks here. If you feel unsatisfied with a DX function,
just replace the callback with a new one.
On the contrary BMS counts the DX numbers from 0. So the first device has the IDs 0 – 31. You can assign
functions to shifted and unshifted layers. How that works is described later.
10-82
BMS TECHNICAL MANUAL
CHANGE 1.00
We have four code values for the third part of the DX code line:
You can define whether the callback is invoked when a DX button is pressed (0) or released (0x42). In addition
you can chose if the callback is invoked with a key down, key up or the default semantic by setting the
corresponding value at the third part of the code line. More details on this subject will be provide later on in this
manual.
10-83
BMS TECHNICAL MANUAL
CHANGE 1.00
AFElevatorTrimUp 0 -1 -3 0 0x0 0
Each code line is composed of seven different parts. An eighth part is optional.
Note: The parts are separated by a blank character (Spaces shown with a red underline
here).
AFElevatorTrimUp_0_-1_-3_0_0x0_0
The default behaviour of the primary POV hat is changing the Point Of View. This can be changed by adding POV
code lines for the unshifted layer (POV Hat number 0) and assigning different callback functions to it (e.g. TRIM).
10-84
BMS TECHNICAL MANUAL
CHANGE 1.00
10-85
BMS TECHNICAL MANUAL
CHANGE 1.00
Using an editor for that work is on the other hand maybe the first choice, even if it is inconvenient.
Note: We do not take responsibility in case something bad happens to your key file while
editing it in the UI!
Just pick a function you would like to change a click once into the left column. As soon as you do so, the keys
assignment will be highlighted in blue colour.
Next press the key you would like to assign instead. In this case “F1”.
10-86
BMS TECHNICAL MANUAL
CHANGE 1.00
You can do the same for keys with modifiers. Just select the left row of the function...
...and press the modifier keys, hold them and then press the keyboard key. In this case “Shift Ctrl Alt F1”.
DirectX Assignments:
We can easily assign DX functions for the unshifted layer to our devices via the BMS UI. To give you an example
I have created a short sample key file.
Once loaded in the UI the same key file looks like this:
What we need to do now is to left click on a row we want to assign a DX button to. The key of this row will be
shown in blue.
10-87
BMS TECHNICAL MANUAL
CHANGE 1.00
Now we press a button on the input device. As soon as the button is pressed the key will change to white again
and below the key file list you will see something like this:
This means that you have successfully assigned a function to your input device. From now on, whenever you
press that button you will see this. So you can easily figure out which function is assigned to which DX button on
your device.
If you press a button on your device which has no assigned function it will be shown like in the image above.
Now, if we have assigned all four functions to DX buttons we save the key file. As you can see in the image below
the DX code lines are automatically added to the key file.
Note: If you assign a DX button via the BMS UI the third part of the key file has the value
“8”.
10-88
BMS TECHNICAL MANUAL
CHANGE 1.00
How to edit key files is best described with some examples (changes marked yellow).
Note: If you mark a value by double clicking on it (here line 18 value 0X22, dark green)
other positions with the same value in the file will also be highlighted (lines 2, 5, 7, 12 & 15,
brighter green).
10-89
BMS TECHNICAL MANUAL
CHANGE 1.00
Unfortunately you can’t check for double assignation in the BMS UI. So you need other tools than that. We prefer
Notepad++ for that as well.
In opposite to the double clicking feature of showing accordances it doesn’t work for manually marked parts of
the code (It works only for “double-clickable parts, which are separated by blank or special characters). So like in
the example below the marked part is only (grey) highlighted.
To find accordances just hit Ctrl + F which opens the Find window. The highlighted code is already in the search
box. Just click on “Find Next” to search for a match. If one is found the view jumps directly to the line the match
was found.
If you found a match you should change one of the two key assignments.
As we know key files can be rather complex. So it is a good habit to do this each time you assigned a keyboard
key command and / or a key modifier key. Just make sure to search for both, the fourth AND fifth part of the
code line.
10-90
BMS TECHNICAL MANUAL
CHANGE 1.00
You can avoid multiple DX button ID assignations the same way as described in the “How to avoid multiple key
assignations” chapter.
If you assign accidently two or more different callbacks to the one and the same DX button ID (like in the example
below) only the last entry will be invoked by pressing the corresponding DX button input device.
So in this example the first entry (Frame Rate) will be ignored and the last entry (Online Status) will be invoked.
There is an additional manual for the Editor (BMS Key File Editor Manual.pdf). Just follow the instructions.
10-91
BMS TECHNICAL MANUAL
CHANGE 1.00
The common practice to achieve this is the usage of a joystick “shift” button. Like the shift key on the keyboard,
which controls whether a specific keystroke issues a minor letter (when used without shift) or a capital letter
(when used with shift) to the PC, the shift button on the joystick controls whether a button is sending function
A (when used without shift button) or function B (when used with shift button) to the simulation.
To achieve this functionality, the (v)pilot had to rely on the programming capabilities of his joystick and
corresponding drivers and software in the past, making the stick act as a combined DirectX (DX) and keyboard
input device. The combination of DX buttons and emulated keyboard input from the stick was needed to
overcome the maximum number of buttons limitation of 32 that a DX input device is restricted to.
The current BMS version offers a built-in shifting facility that eliminates the need for such proprietary solutions.
Furthermore and even a bigger advantage, it makes it possible to use a pure DX joystick setup for all functions,
shifted and unshifted, by effectively (nearly) doubling the number of possible DX button inputs for a single
device to 63.
Background
BMS can handle up to 16 DX devices with 32 buttons each, making a total input of 512 DX buttons possible. To
assign DX input, a special type of input line within the BMS keyfile is used e.g.:
SimTriggerFirstDetent 0 -1 -2 0 0x0 0
SimPickle 1 -1 -2 0 0x0 0
The red part of the input lines will not be explained here. The green part of the input lines is composed from
the name of the function to call and the DX button number that should trigger the execution of the function.
BMS starts enumerating the buttons with 0, so the first DX device connected to the PC uses button numbers 0
to 31, where button #1 on the stick is mapped to 0 in the keyfile, button #2 is mapped to 1 etc. If more than
one DX device is connected, the 2nd device will use button numbers 32 to 63, where button #1 on the 2nd device
is mapped to 32, button #2 is mapped to 33 etc.
Every DX device has its dedicated 32 button range in the keyfile, so a possible 16th DX device would use button
range 480 to 511. Using this technique, BMS can distinguish between the different DX devices.
10-92
BMS TECHNICAL MANUAL
CHANGE 1.00
Besides the DX buttons, BMS can additionally handle up to 4 POV hat switches or 4 different POV hat layers
(shifted and unshifted states). To assign POV hat input, a special type of input line within the BMS key file is
used e.g.:
AFElevatorTrimUp 0 -1 -3 0 0x0 0
AFElevatorTrimDown 0 -1 -3 4 0x0 0
The red part of the input lines does never change for POV hat definitions and will not be explained here. The
green part of the input lines is composed from the name of the function to call, the POV hat number (0 to 3)
and the direction in which the POV hat needs to be pushed on order to trigger the execution of the function.
Regardless of the physical capabilities of the POV hat, BMS always distinguishes 8 separate directions:
Note: POV hats that have not been mapped in the keyfile automatically default to view
panning.
This version of BMS offers a new keyfile callback for DX buttons, which defines the mapped button to act as
shift modifier. While this button is pressed down, BMS will add a fixed (but configurable) offset number to all
DX button inputs.
Example: The shift button is configured to add an offset of 256 while pressed. Button #2 on the joystick (1st DX
device) should usually work as weapons pickle button but should toggle the gear when used in conjunction
with shift. The keyfile would need to contain the following entries to achieve this behavior:
SimPickle 1 -1 -2 0 0x0 0
AFGearToggle 257 -1 -2 0 0x0 0
The 257 is composed from DX button #2 (1) plus the 256-shift offset. So the usage of the shift button effectively
moves the DX buttons of a specific DX device into a separate DX device range. In the example above, usage of
shift moves the buttons of the 1st DX device from 0-31 to 256-287. Conclusively, DX buttons that are pushed on
the 1st DX device while shift is hold will look to BMS like being issued from a (virtual) 9th DX device.
10-93
BMS TECHNICAL MANUAL
CHANGE 1.00
To enable the shifting facility, the following parameter has to be added to the falconbms.cfg file:
set g_nHotasPinkyShiftMagnitude n
The parameter value 0 disables shifting. Setting n to a higher value enables it and specifies the button offset
number. Although arbitrary offset numbers are supported, it is highly recommended to use a multiple of 32 for
the offset. Like this, a shifted DX button range always maps to the complete button range of another (virtual)
DX device.
The callback name for the DX button that should act as shift button is:
SimHotasPinkyShift
When shifting is active, this callback replaces the former “SimPinkySwitch” callback. It still fulfills the same
EXPAND functionality if it is only tapped and released. When it is pressed and held down, it acts as shift button.
Obviously, it is meant to be mapped to the pinky switch on the HOTAS.
In order to make shift work properly, the shift callback has to be mapped twice in the keyfile. Once for the
pinky button, and once for the pinky button plus shift offset.
Example: The pinky switch on the HOTAS uses DX button #3 and the configured shift offset is 256. Hence the
keyfile needs to contain the following lines:
SimHotasPinkyShift 2 -1 -2 0 0x0 0
SimHotasPinkyShift 258 -1 -2 0 0x0 0
Note: If the 2nd callback mapping is missing, the shift button can not be released correctly
again once pressed.
If you don’t use shifting at all you can also use the standard callback (SimPinkySwitch).
It is NOT possible to have more than one DX shifting layer. But it is possible to assign the callback
SimHotasPinkyShift to more than one physical DX button.
10-94
BMS TECHNICAL MANUAL
CHANGE 1.00
The shifting of POV hat buttons follows the same concept as shifting DX buttons. It uses the same shift callback
that has already been defined for DX buttons. Only difference is that the shifting offset for POV hats is fixed to
2.
Example: The 1st POV hat should be used for view panning when used unshifted, and for trimming when used
shifted. The keyfile would need to contain the following entries to achieve this behavior:
AFElevatorTrimUp 2 -1 -3 0 0x0 0
AFAileronTrimRight 2 -1 -3 2 0x0 0
AFElevatorTrimDown 2 -1 -3 4 0x0 0
AFAileronTrimLeft 2 -1 -3 6 0x0 0
The 2 is composed from POV hat #1 (0) plus the fixed 2 shift offset. So the usage of the shift button effectively
promotes the 1st POV hat to act as a 3rd (virtual) POV hat. The directional numbers do not change.
Note: It is not necessary to explicitly map the default view panning behavior to POV hat #1
(0), as every hat which is not mapped defaults to view panning behavior.
Advanced Information
The maximum pinky tapping time in milliseconds that is used to determine whether the pinky button should
execute EXPAND or act as shift button can be configured within the falconbms.cfg file:
set g_nHotasShiftQuickPressTimeLimit n
The parameter value defaults to 200. If the pinky button is tapped and released within n milliseconds, EXPAND
is executed. If it is not released within n milliseconds, shift is executed instead.
If the shift callback is mapped on more than one physical device, each individual shift button applies shift to all
devices at once. E.g. pressing shift on the 1st DX device shifts buttons of the 1st as well as any other DX devices
that are connected and vice versa.
10-95
BMS TECHNICAL MANUAL
CHANGE 1.00
Most likely not every DX button or POV hat will have a shifted functionality assigned when creating a keyfile. As
pointed out in the background section, any device or hat that is not used will map to default behavior. The
same is true for shifted buttons and hats.
While this behavior may be desirable in some situations, it may be as well totally unwanted in other situations.
A good example for an unwanted situation is the mapping of trim to a shifted POV hat, as described in the
Concepts and Usage section above. In this example, only the shifted main up/down/left/right hat directions are
mapped to trim, whereas the corner directions have no shifted functions assigned. Therefore, they still default
to view panning, even when used shifted. When the (v)pilot tries to trim aileron and elevator at once by shift-
pressing the hat to a corner, he will execute view panning instead of the desired trim.
The only way to avoid that behavior is to actually assign a function to the shifted POV hat corner directions.
However, combined aileron/elevator trim keystrokes for our example are not available.
SimDoNothing
Like this, unwanted functionality can be deliberately deactivated. So for the trimming/view panning example,
the shifted POV hat corners can be mapped to SimDoNothing to avoid unwanted view panning while trimming:
AFElevatorTrimUp 2 -1 -3 0 0x0 0
SimDoNothing 2 -1 -3 1 0x0 0
AFAileronTrimRight 2 -1 -3 2 0x0 0
SimDoNothing 2 -1 -3 3 0x0 0
AFElevatorTrimDown 2 -1 -3 4 0x0 0
SimDoNothing 2 -1 -3 5 0x0 0
AFAileronTrimLeft 2 -1 -3 6 0x0 0
SimDoNothing 2 -1 -3 7 0x0 0
The same can be done with every shifted DX button or POV hat which should not execute default functionality.
Restrictions
Advanced or logical programming - as offered by many joystick vendors - can not be implemented with the
BMS DX shifting facility.
It is not possible to assign functions to the shifted layer via the Setup UI.
10-96
BMS TECHNICAL MANUAL
CHANGE 1.00
Once opened scroll a bit down until you find the “Misc Settings”
section.
Setting it to 512
Of course you could specify any other value between 32 (Note: You’ll need at least one unshifted layer anyway)
and 511. But this doesn’t make any sense as shifting outside the DX device limit is now possible. To sum it up:
If have not more than 8 different input devices the default setting is ok. This should apply to most users. If you
have more than that you don’t necessarily have to do the math. Instead you can just set it to 512 and you are
good to go.
10-97
BMS TECHNICAL MANUAL
CHANGE 1.00
To do so, simply specify "set g_nHotasPinkyShiftMagnitude 512" (default is 256) in the config file (and adjust
your keyfile accordingly, of course).
So instead of shifting only the 1st half DX devices 1-8 to the 9-16 range, you can now shift all DX devices 1-16 to
the 17-32 range.
Using shifting or not does not matter. If you try to access a button "beyond the max range" (either by shifting or
regularly), it simply is ignored. So the actual number of devices does not seem to be a problem at all - other for
the fact that BMS simply ignores devices that are out of the range.
10-98
BMS TECHNICAL MANUAL
CHANGE 1.00
In the above image you see INPUT and Button 1 to the right.
Button 1 means in this context DirectX button 1. The DirectX button numbers in the BMS UI are shown as
Windows DX numbers. BMS counts DX button numbers slightly different than Windows:
Win DX # 1 = BMS DX # 0.
You can do the same for any other device e.g. your second controller in the next example:
In the example above we see Button 45, which means Win DX # 45 and BMS DX # 44.
As mentioned above there is a difference between the Windows DX numbers and the BMS DX numbers. While
Windows counts DX buttons from 1 BMS does from 0. So the BMS DX button number of the first device (Button
1 in the screenshot) is BMS DX 0. The button # 45 of the second controller is BMS # 44.
The BMS DX button numbers are used in the key file. So, if the UI says INPUT Button 1 the same device button
will be DX number 0 in the key file. We can also find out the device number that way.
10-99
BMS TECHNICAL MANUAL
CHANGE 1.00
As you might remember we have a maximum of 32 DX buttons per device. So, if the shown button number is in
the range of 1 – 32 it must be device 1. If the button number is in the range of 33 – 64 it is device # 2 and so on.
Based on these numbers we also calculate the DX button IDs for the shifted layers. They have to be calculated
manually or by using our Excel BMS Keyfile Editor.
Direct Input devices (joysticks, MFDs, boards etc.) can now be sorted to *specific* positions as desired via a
new config file "DeviceSorting.txt" in the "User\Config" directory.
This file will be created automatically if it is not existing, and it will list all devices which are currently connected
to BMS and your computer, respectively. If you want to change the device order, simply close
10-100
BMS TECHNICAL MANUAL
CHANGE 1.00
BMS, edit the file with a text editor and copy/paste the lines in the file to your liking. Once the file exists, it will
always be loaded and the order in there will be honored by BMS. If you connect a new device which is not listed
in the file yet, it will be appended to the existing file without changing the specified order. The file simply consists
of the GUID and the device name for each device, one device per line.
Example:
If you add one device it will be appended to the end of the file:
You can sort the device by simple copy/paste. In the example below the ICP has been moved from #4 to #2.
If you make sure that all controllers are always connected to your computer on BMS start inadvertent changes
of the device order are prevented. But there are some obstacles.
10-101
BMS TECHNICAL MANUAL
CHANGE 1.00
12. Verify that the devices buttons are working as expected. Just press one button per device no matter if
they are two separate DirectX devices (e.g. the Warthog) or combined (e.g. Cougar). Do this for all
devices connected.
Once you have done this and you do not regularly unplug / plug in devices you shouldn’t have any issues in the
future. If you are sure that everything is working correctly and all your preferred settings are done in the Setup
pages you can also set the following files to read only:
• axismapping.dat
• joystick.cal
• callsign.pop
In summary: if you have a working DX button setup, it will never be "shuffled around" again like it used to. But
you still have to ensure that all devices are plugged in before you start BMS!
Example: you have one stick, one ICP and 2 MFDs. The stick usually is the main input device and as such device
#1 (DX button numbers 0-31). The ICP as the 2nd device uses DX button numbers 32-63, the 1st MFD as the
third device has 64-95, the 2nd MFD has 96-127. Now you start BMS while forgetting to plug in the ICP.
Missing devices will be ignored. In this case this means, that MFD 1 will be recognised as the 2nd device and
the buttons will move from to 64-95 to 0-31 (and MFD 2 moves accordingly). However - and that is the whole
purpose of this patch - once you realize that the ICP is missing, you can hit “Cancel”, close BMS, plug in the ICP,
and now it is *guaranteed* that the ICP will be seen by BMS as the 2nd device with button numbers 0-31 again.
That means even by unplugging stuff and re-plugging it, the DX button numbers will not change anymore.
10-102
BMS TECHNICAL MANUAL
CHANGE 1.00
But if you hit the “OK” or “Apply” button it can still have some drawbacks mainly regarding the axe’s
assignments. As BMS fails to see the ICPs axis while the device is not plugged in it now assumes that this device
never existed and sets all axes applied to the ICP device to “Keyboard”. When you start BMS the next time you
will realise that you have to assign these axes again.
We suggest to set the files axismapping.dat, joystick.cal and callsign.pop to read only once BMS is setup the
way you want. But do not forget to remove that flag if you intend to make changes in the Setup menu.
The DF Switch on the Throttle has only two different DX numbers: One for MRM override mode and one for DF
override mode. There is no separate DX button for cancel (middle position). To overcome this limitation you can
set a value in the Falcon BMS.cfg.
Open the cfg and scroll down to the Misc Settings section. Look for the code line
set g_bHotasDgftSelfCancel 0
and change the value to 1. This cancels the override mode automatically when turning the DF switch back into
the middle position.
Some of the 3-way switches of the Warthog throttle have only 2 different DX button IDs. Let’s take an example:
As we see only PATH (Win DX 27 / BMS DX 58) and ALT (Win DX 28 / BMS DX 59) have assigned DX button
numbers. So we can only assign two different callbacks via DX. This is wrong!
There is a way to overcome the missing of the DX number for the middle function (ALT/HDG - no DX).
10-103
BMS TECHNICAL MANUAL
CHANGE 1.00
4 = DX button number
-1 = -1 is the default key up/down behavior
0 = default button press/release event
To stay with our example you can test this with your Warthog:
SimRFNorm 58 -2 -2 0 0x0 0
SimRFQuiet 58 -2 -2 0x42 0x0 0
SimRFSilent 59 -2 -2 0 0x0 0
SimRFQuiet 59 -2 -2 0x42 0x0 0
And this is what happens:
SimRFNorm 58 -2 -2 0 0x0 0
- physical FWD position: DX button press event -> invokes SimRFNorm
SimRFSilent 59 -2 -2 0 0x0 0
- physical AFT position: DX button press event -> invokes SimRFSilent
You can do this with every DX button #. Of course this is not recommended and not useful on all occasions.
10-104
BMS TECHNICAL MANUAL
CHANGE 1.00
Config options:
• set g_nNumOfPOVs
Defines the POV hat behaviour or sets the number of POV hats.
Option Description
-1 Default POV behaviour
0 Disables all POV hats on all devices.
1 Activates 1 POV hat
2 Activates 2 POV hats
Note: With option “-1” POV hats are only available on the primary input device. Option “1”
does only make sense if you want to use just one POV hat that is _not_ on your primary
input device.
• set g_nPOV1DeviceID
Sets the ID of the first POV hat device.
• set g_nPOV2DeviceID
Sets the ID of the second POV hat device. This is only available when set g_nNumOfPOVs option is
set to 2.
• set g_nPOV1ID
Sets the POV hat ID on the first device.
Option Description
0 1st POV hat on POV1DeviceID
1 2nd POV hat on POV1DeviceID
• set g_nPOV2ID
Sets the POV ID on the second device.
Option Description
0 1st POV hat on POV2DeviceID
1 2nd POV hat on POV2DeviceID
Note: In Warthog combined mode you still cannot use the throttle POV with DX.
10-105
BMS TECHNICAL MANUAL
CHANGE 1.00
This is simple. It follows the order defined in the DeviceSorting.txt. Please note that the first ID is always
assigned to the keyboard. So:
set g_nPOV1DeviceID 1 = Keyboard (setting this does not make sense of course)
Note: In this example the F-16 ICP USB is _not_ connected to the computer hence it is
ignored by BMS.
ID Description
1 Keyboard
2 Joystick – HOTAS Warthog
3 Throttle – HOTAS Warthog
... ...
7 Thrustmaster HOTAS Cougar
You simply have to count from top to bottom. In the following example we define the POV hats of the TM
Warthog:
set g_nNumOfPOVs 2
set g_nPOV1DeviceID 2 // Joystick
set g_nPOV1ID 0
set g_nPOV2DeviceID 3 // Throttle
set g_nPOV2ID 0
If we want to use the Cougar Stick instead (note: due to modding Stick and Throttle are two different USB
devices!) we need this:
set g_nNumOfPOVs 2
set g_nPOV1DeviceID 7 // Joystick
set g_nPOV1ID 0
set g_nPOV2DeviceID 3 // Throttle
set g_nPOV2ID 0
Now you can assign DX function to both POV hats as described in the “DirectX POV Hat Code Lines” and Shifting
fascility chapters. DX shifting functions are supported.
10-106
BMS TECHNICAL MANUAL
CHANGE 1.00
If you would like to have a more realistic 1=7, 7=1 mapping just copy the lines below and overwrite! the
corresponding lines in the key file (see ICP section).
10.9.2 How to change the DX POV functions (Trim vs. View & other functions):
In our key files the unshifted POV set to TRIM. The View functions are set to the shifted layer. Here is how you
can change that:
• Delete the following lines in the key file – HOTAS UNSHIFTED (They set TRIM to unshifted layer):
AFElevatorTrimUp 0 -1 -3 0 0x0 0
SimDoNothing 0 -1 -3 1 0x0 0
AFAileronTrimRight 0 -1 -3 2 0x0 0
SimDoNothing 0 -1 -3 3 0x0 0
AFElevatorTrimDown 0 -1 -3 4 0x0 0
SimDoNothing 0 -1 -3 5 0x0 0
AFAileronTrimLeft 0 -1 -3 6 0x0 0
SimDoNothing 0 -1 -3 7 0x0 0
• Delete the following lines into the key file – HOTAS SHIFTED (They set Views to shifted layer):
OTWViewUp 2 -1 -3 0 0x0 0
SimDoNothing 2 -1 -3 1 0x0 0
OTWViewRight 2 -1 -3 2 0x0 0
SimDoNothing 2 -1 -3 3 0x0 0
OTWViewDown 2 -1 -3 4 0x0 0
SimDoNothing 2 -1 -3 5 0x0 0
OTWViewLeft 2 -1 -3 6 0x0 0
SimDoNothing 2 -1 -3 7 0x0 0
10-107
BMS TECHNICAL MANUAL
CHANGE 1.00
• Copy the following lines into the key file – HOTAS UNSHIFTED (They set Views to unshifted layer):
OTWViewUp 0 -1 -3 0 0x0 0
SimDoNothing 0 -1 -3 1 0x0 0
OTWViewRight 0 -1 -3 2 0x0 0
SimDoNothing 0 -1 -3 3 0x0 0
OTWViewDown 0 -1 -3 4 0x0 0
SimDoNothing 0 -1 -3 5 0x0 0
OTWViewLeft 0 -1 -3 6 0x0 0
SimDoNothing 0 -1 -3 7 0x0 0
• Copy the following lines into the key file – HOTAS SHIFTED (They set TRIM to shifted layer):
AFElevatorTrimUp 2 -1 -3 0 0x0 0
SimDoNothing 2 -1 -3 1 0x0 0
AFAileronTrimRight 2 -1 -3 2 0x0 0
SimDoNothing 2 -1 -3 3 0x0 0
AFElevatorTrimDown 2 -1 -3 4 0x0 0
SimDoNothing 2 -1 -3 5 0x0 0
AFAileronTrimLeft 2 -1 -3 6 0x0 0
SimDoNothing 2 -1 -3 7 0x0 0
Of course it is possible to assign any callback you want to the POV hat. The code lines follow always the same
syntax.
10-108
BMS TECHNICAL MANUAL
CHANGE 1.00
Be advised: They are for non F-16 MFD control only if an AC has three or more MFDs.
MFD 3: Shift+Ctrl +1, +2, +3... and Shift+Ctrl +Num1, +Num2, +Num3...
MFD 4: Shift+Ctrl+Alt +1, +2, +3... and Shift+Ctrl+Alt +Num1, +Num2, +Num3...
Another solution for DX is to add the 3rd and 4th MFD to the shifted layers of the 1st and 2nd MFDs. We included
the DX code lines into the DirectX TM Cougar MFD.pdf.
You can find it in the MANUAL TRIM, FLIGHT STICK and in the OTHER COCKPIT CALLBACKS sections. You can
change the key setting only in the CKPIT section. The state of the callback in the TRIM and the STICK section is
visible, not changeable with no keys assigned. You will be referred to the CKPIT section there if you want to
change the keys.
SimPickle:
Here we have two different locations, where you can shoot a weapon. The FLIGHT STICK (Pickle) and the MISC
ARM PANEL (ALT REL Button). You can change the callback only in the STICK section. The ALT REL Button works
without any callback! It is only visible (not changeable) in the UI to keep the key file complete.
SimRadarGainUp/Down:
You can find the radar gain functions in each of the 4 MFD sections. But you can change the key assignments only
in LMFD section. In all other sections you will be referred to the LMFD section.
The TRIM Reset function in the TRIM & STICK sections, the ALT REL Btn. on the MISC Panel and the RadarGain
functions in RMFD, TMFD & FMFD sections are assigned to the callback SimDoNothing, with no keys assigned
(Not editable).
10-109
BMS TECHNICAL MANUAL
CHANGE 1.00
10.10 Troubleshooting:
It is better to make a backup of your key file and to open it with an editor. Now delete half of the code and check
again in BMS. If the file is ok the issue occurs most likely in the second half of the code which you have deleted.
Now you can go on by halving the code of the second part and check this file again. Go on this way until you
found the corrupt code line. Once found you can examine what was going wrong here.
BMS can also crash when the key file uses a keyboard key which is not compatible
with your locale. A typical example is the “<” key (Key file code is 0x56) on a
German keyboard layout. If you try to use this code with an US International
locale, BMS will crash.
The reason for a stuck key is a mishandling of the key press sequence. Here is the way how to do it properly:
1. Press and hold modifier key (keyboard) / Pinky switch (DX Shift)
If you release #4 & #5 in the wrong order the key(s) / function will most likely stuck. To prevent this either use
the correct order stated above or try to avoid using shifted functions.
10-110
BMS TECHNICAL MANUAL
CHANGE 1.00
Tab:
Alt + Tab
Shft Ctrl + Tab
Shft Alt + Tab
Ctrl Alt + Tab
Shft Ctrl Alt + Tab
The Tab combinations above will bring you back to desktop (If you have luck) or could crash / freeze BMS. Both
unwanted actions while enjoying a flight…
Escape:
Ctrl + Esc
Note: Escape cannot be assigned in the BMS UI! Esc is hardcoded. If you
Alt + Esc
Shft Ctrl + Esc try to assign that key in the UI, it will leave the setup screen immediately.
Shft Alt + Esc
Ctrl Alt + Esc
Shft Ctrl Alt + Esc
You have to assign that key manually with an editor if desired. But do not forget to assign “Exit Sim” to another
key. Otherwise the only possibilities to exit 3D are Alt + TAB (if working for you), Reset your PC (of course not
recommended) or crashing / ejecting your jet (Exit menu will pop up automatically).
The above shown combinations will invoke Windows related functions and thus are not recommended to assign
them. The only safe combination is Shift + Esc, which you could assign manually.
In newer Windows 10 versions these combinations do not work anymore. This might change in the future. You
should avoid them for now. Standard key files (Full, Basic, Minimum, Pitbuilder) do not use these. Please note
that we had to remap some functions in the key files.
10-111
BMS TECHNICAL MANUAL
CHANGE 1.00
Num Lock:
If you assign the Num Lock key it will toggle between “Disable Num Pad” and “Enable Num Pad”. It has no impact
on BMS as the assigned functions on the Num Pad work no matter how the Num Pad status is.
But using this key in a key file will lead to a BMS crash once you try to enter BMS Setup. So this key should not
be assigned at all.
Print:
Shft + Print
Note: PrtScr cannot be assigned in the BMS UI! When doing so the key
Ctrl + Print
Alt + Print mapping field remains empty. In the Sim nothing will happen (except
Shft Ctrl + Print hardcoded Screenshot of course).
Shft Alt + Print
Ctrl Alt + Print
Shft Ctrl Alt + Print
See also (Pretty) Screenshot vs. PrtScr above.
You could assign this key to any function. But as Screenshots are hardcoded to Print, you would make a
screenshot any time the key combinations are invoked. Because of this you should avoid the key combination.
However, Pretty Screenshot is allowed for any of the Print combinations except Shift Alt + Print, which opens a
Windows function.
In the past Windows XP and Windows 7+ were handling the PrtScr mapping differently. While assigning PrtScr
in XP worked pretty well in key files, it does not in Win 7 and above. Because of that the PrtScr key was
hardcoded. This means they were working for both and you can take screenshots even without assigning a key
in the key file. Win XP is no longer supported. The hardcoded PrtScr still works for Win 7 and above. But of
course you can set additional (different) keys for Screenshot / Pretty Screenshot to your liking.
Which kind of screenshot PrtScr makes (ScreenShot or PrettyScreenShot) is defined in the Falcon BMS.cfg
(section Misc Settings).
10-112
BMS TECHNICAL MANUAL
CHANGE 1.00
The following list shows all 3-digit numbers and the corresponding sound files, which are currently used in the
default key files and the 3dckpit.dat files. These can be found in the f4sndtbl.txt. If you want to hear sounds when
pressing a key (keyboard) or button (DX device) for a specific cockpit function you have to implement them as
described earlier in this document. The sound IDs in correlation with the sounds above are listed in order of their
first appearance.
10-113
BMS TECHNICAL MANUAL
CHANGE 1.00
The development callbacks will not have the slightest benefit for the casual Pilot. They are purely meant for
development purposes.
So if you do not know what they are for and do not develop things such as theatres, 3d models or alike just keep
your fingers away from them.
Note: They are purely meant for development purposes. That is also the reason why they
are hidden from the UI.
However, before you can use the development callbacks in game you have to activate them in the Faclon BMS.cfg
by setting set g_bActivateDebugStuff and set g_bDevelopmentCallbacks to 1.
Note: Development callbacks are host controlled in MP. So if you expected a chance to
cheat, sorry ☺
10-114
BMS TECHNICAL MANUAL
CHANGE 1.00
DEV_OTWToggleLocationDisplay
This shows you Memory usage (top left corner)...
...and other simulation related information, such as your own x / y / z position, aircrafts attitude, draw calls etc.
(top right corner)
Very useful!
Note: Devs, please watch your draw calls. Very (!) important!
10-115
BMS TECHNICAL MANUAL
CHANGE 1.00
DEV_SimCycleDebugLabels
Shows some details about the entities nearby, such as name, status and owner.
Note: Btw., as a matter of fact you can and will crash if you fly into scaled up buildings...
Normal view:
10-116
BMS TECHNICAL MANUAL
CHANGE 1.00
10-117
BMS TECHNICAL MANUAL
CHANGE 1.00
DEV_OTWEnterPosition
This works just with EyeFly! You can simply enter coordinates to bring you immediately to a new position on the
map. This is useful in case you want to have a quick look at a specific location on the map.
To activate EyeFly you have to append the command line “-ef” to the exe. EF is activated with the key “Ctrl 0”.
Simply adjust the coordinates with the keyboard (note: Num Pad doesn’t work). Use decimal as separator and
finish your input with Enter.
You have to enter three values to change your position: X, Y and Z coordinates.
X / Y coordinates:
Both values are measured in km. The overall map size is usually 1024km x 1024km (E.g. stock KTO).
X=0 & Y=0 is the bottom left corner of the map and X=1024 &
Y=1024 is the top right corner.
Z coordinates:
Z coordinates represent the altitude above main sea level. Please note that Z-values are always negative, thus
need a leading “-“.Please be aware that the US QUERTY keyboard layout is used here. So depending on your
locale it might be at a different spot on the keyboard.
Input window:
In what follows we give you a full example about how to change your location using EyeFly. In this example you
start on the Runway at Kunsan.
10-118
BMS TECHNICAL MANUAL
CHANGE 1.00
Pressing “Alt C: F1” invokes the Location Display which shows your current position:
10-119
BMS TECHNICAL MANUAL
CHANGE 1.00
A new popup window appears. Here you have to enter the new coordinates.
X coordinates:
X coordinates:
6 5 2 . 4 0
Press Enter.
Y coordinates:
Y coordinates:
3 6 6 . 7 0
Press Enter.
Z coordinates:
10-120
BMS TECHNICAL MANUAL
CHANGE 1.00
Z coordinates:
- 3 5 0 0 . 0 0
Press Enter.
Note: If you enter a Z coordinate which is below the terrain level you simply start on ground
level.
Once you have entered the X, Y, Z coordinates your EyeFly location will be updated.
DEV_SimRegen
This just starts a fresh Dogfight round.
10-121
BMS TECHNICAL MANUAL
CHANGE 1.00
11.1 Introduction
BMS 4.34 introduced a new comms system has a deep impact on the way we communicate with the BMS
environment. This chapter shall give you a short overview about the changes. Any further details are explained
in the separate Comms Handbook, Training Manual and here in the Technical Manual as well.
Let us first have a look at the place where the changes are most apparent. The briefing page.
As you can see we have a number of new agencies to communicate with. The corresponding frequencies and
presets are assigned automatically. This is not only in TEs, Training missions and Campaigns the case, but also
behind the scenes (as you have no briefing page) in Dogfight and Instant Action modules.
The frequencies for Homeplate Operations, ATIS, Departure, Recovery and Alternate Airbases are retrieved
from the stations+ils.dat. Everything else is stored in the new radiomap.dat located in the ‘…/campaign’ folder.
11-122
BMS TECHNICAL MANUAL
CHANGE 1.00
Each ground-based agency has a unique UHF and VHF (if applicable) frequency. However, not all agencies have
both as you can see in the screenshot.
Airstrips are a bit different as they just have VHF / UHF frequencies for the Tower.
Carriers are treated the same as airbases btw. On the other hand they have in addition a LSO agency which is
usually on the same frequency as the tower.
While Guard and Common are fixed frequencies, which never change, the others are tied to the Flight callsign
directly. At the moment we have a total of 169 Flight callsigns. It was 160 before but we added Mirage, Rafale,
Lynx, Fenwick, Tornado, Magic, Nimrod, Puma and Gazelle in 4.34.
As each callsign gets an additional number from 1 to 9 this sums up to 1521 (169 x 9) different callsigns (e.g.
Falcon1, Falcon2 … Falcon9 etc.).
Here is a brief summary of how the frequencies get assigned to the different agencies:
11-123
BMS TECHNICAL MANUAL
CHANGE 1.00
You task a package in the TE builder consisting of Strike, SEAD and Escort. The Strike, let us assume his callsign
is Falcon1, is tasked as the first flight in the package. Tactical UHF will be tied to the callsign Falcon1.
11.4 Presets
All presets are stored as shown by the examples in the following list:
As you can see the UHF and VHF presets are dependent on various factors, e.g. whether DEP, ARR or ALT is an
airbase or an airstrip. What stays always the same is:
• Base Ops
• Check In / Tactical
• Tanker
• Common
• Intra Flight
11-124
BMS TECHNICAL MANUAL
CHANGE 1.00
In preparation on finding a solution a lot of testing was going on. We analyzed a couple of hundred save games
while testing different campaigns under different circumstance. Based on that we can come up with a solution
which can avoid that kind of problems with almost 100% certainty.
Analysis:
The main focus on the analysis phase was to get a worst case scenario under which a specific type of aircraft
will task flights in a short period of time. The pure number of flights is not the only thing which is important but
also in time frame. Flights, which T/O time is 2.5 hours apart is most likely not at risk of interfering each other
as the first flight will have landed before the other takes off. The following screenshot should give you an
example for the F-16:
11-125
BMS TECHNICAL MANUAL
CHANGE 1.00
Based on such data, which we have done for all aircraft types (multiple times as this just shows the worst case
scenario), we calculated how many callsigns and how many frequencies should be assigned to a specific aircraft
type. We revised the callsign slots in the database according to the analysis we did.
Additionally we arranged the aircraft types according to their importance. Aircraft of higher priority are likely
more often used by human vPilots. The higher the priority the more individual callsigns and the more discrete
frequencies are assigned to that aircraft. In conclusion this means also that aircraft of lower importance are
more likely ending up with VHF conflicts.
In addition this is of course also based on the result of the analysis that some aircraft are tasked less frequently
in a campaign as others.
Primary aircraft:
This is the F-16. It has by far the most discrete callsigns and frequencies as this is the aircraft which most likely
will be flown by most people.
Secondary aircraft:
These are frequently flown by humans as well, such as F-18s, Harrier, Mig-29s etc. Secondary blue / red AC
types will share the same set of frequencies. However, there is a low risk of interference due to a clever design.
☺ As a rule of thumb, there have to be more that e.g. 30 flights of both (!) F-18s and Mig-29s tasked at the very
same (!) time period to get in trouble. This risk is based on the analysis really low.
Tertiary aircraft:
These are probably rarely used by humans, such as J-5, AMX, B-1, Q-5, F-117… The risk of VHF interference is
high.
Quaternary aircraft:
They are unlikely used by human's aka. it does not make sense. All Transport, AWACS and Tanker flights are in
this category. Also U-2, AC-130 and such. These aircraft and the assigned callsigns share one and the same VHF
frequency. Even if there are humans picking up such flight, there are for sure not those many at the same time.
The whole system is optimized for campaigns and not altered TEs. See later notes on things you have to keep in
mind. The casual user should not face any problems with the new comms system.
Humans on either side can communicate on the same VHF / UHF frequency. However, this does not apply to AI
and although not realistic the pure AI to AI comms will be suppressed for human players’ convenience.
11-126
BMS TECHNICAL MANUAL
CHANGE 1.00
While we were on it we revised the callsign assignments to aircraft types completely. This is based on research
on real life callsign usage of different aircraft using most current and older data from the 80s which can be
found on the internet. On the other hand compromises have to be made for stability reasons. Here is an
example:
So, basically you can say goodbye to the old and well known callsigns you are used to since years. There are
some exceptions, though. One for example is that an aircraft of a specific type should get its native callsign. So
the F-16 still is Falcon, F-14 Tomcat or F-4 Phantom.
Some TE builders tend to change flight callsigns via Mission Commander. This can introduce conflicts.
Fortunately, MC has a feature to make the mission builder aware of that. So if you change any flight callsigns
make sure, that at least the human occupied flights (AI flights are not a problem here) use callsigns with no VHF
interferences. Otherwise you will end up with 2+ flights sharing the same VHF frequency which is for sure not a
preferred scenario.
11-127
BMS TECHNICAL MANUAL
CHANGE 1.00
If you task 100 flights of the same aircraft type which are in the air at the same time it is obvious that problems
occure. To give you an example the F-18 can have 30 discrete VHF frequencies at the same time. After that they
will repeat. If you task the 31st F-18 and all of them are in the air at the same time -> disaster strikes.
Same case for flights which are tasked by the Air Tasking Manager (Campaign engine). When you set new Take
Off times extensively and too many AC-types are tasked at the same time… You have guessed it.
These are easy memorizable frequencies within the range of 137.000 - 144.000 ending on .000 and .500:
In case of conflicts you can try to use any of them. If you change your automatically assigned VHF frequency to
any of those spares there is currently no warning in case another flight uses it at the moment.
Be also advised, and this is a really important remark, if you change the VHF frequency you will immediately
lose all comms to your AI wingman. So this is preferably used by human occupied flights only as the AI is unable
to follow in case VHF has changed.
You might want to have a look at the possibilities to avoid VHF conflicts in your campaign. This is especially true
for PvP scenarios. You can do a lot to avoid this by just altering the radiomap.dat to your needs.
Just make sure you do not have any conflicts with the ground agencies. So, you should always cross check with
the station+ils.dat to avoid conflicts in that regard.
11-128
BMS TECHNICAL MANUAL
CHANGE 1.00
Note that flight plan waypoint coordinates shown on the UI map also get exported to this ini file as TGT STPTs,
except if an explicit TGT STPT was defined for a waypoint's index. In this case the user-defined assigned using
the recon UI one is saved into the file in place of the default coordinate set from the flight plan steerpoint for
the given index.
In order to distinguish a flight plan waypoint from a user-assigned TGT STPT an additional integer is exported,
which is -1 in case of an undefined or TGT STPT (if undefined x,y & z coordinates will be 0), otherwise this
integer is the WaypointClass::Action member, a positive integer representing the action for the waypoint
(LAND, TAKEOFF, etc.).
Keep in mind that flight plan waypoints previously stored in the ini file will not be loaded into the DTC when
you use the LOAD button in the DTC UI page (this would not make sense anyway). Other details from old .ini
files should be loaded correctly of course.
Note: wpntarget steerpoints are new to 4.33 and are used only to simulate the pre-planned targets feed
for SPICE bombs. A new set of 100 special WPN TGTs information was added to the UI and to the
missions/callsign.ini files. In the UI, only select WPN TGTs from the drop-down box if you are assigning weapon
targets for SPICE bombs; otherwise leave the drop down box set to STPTs and follow the guide listed above. For
more information refer to the SPICE bomb section of the TO BMS1-F16CM-34-1-1.
[MISSION]
title=TEmissionname
[STPT]
target_0=0.000000, 0.000000, 0.000000, -1
target_1=0.000000, 0.000000, 0.000000, -1
target_2=0.000000, 0.000000, 0.000000, -1
target_3=0.000000, 0.000000, 0.000000, -1
target_4=0.000000, 0.000000, 0.000000, -1
target_5=0.000000, 0.000000, 0.000000, -1
target_6=0.000000, 0.000000, 0.000000, -1
target_7=0.000000, 0.000000, 0.000000, -1
target_8=0.000000, 0.000000, 0.000000, -1
target_9=0.000000, 0.000000, 0.000000, -1
target_10=0.000000, 0.000000, 0.000000, -1
target_11=0.000000, 0.000000, 0.000000, -1
target_12=0.000000, 0.000000, 0.000000, -1
target_13=0.000000, 0.000000, 0.000000, -1
target_14=0.000000, 0.000000, 0.000000, -1
target_15=0.000000, 0.000000, 0.000000, -1
target_16=0.000000, 0.000000, 0.000000, -1
target_17=0.000000, 0.000000, 0.000000, -1
target_18=0.000000, 0.000000, 0.000000, -1
target_19=0.000000, 0.000000, 0.000000, -1
target_20=0.000000, 0.000000, 0.000000, -1
target_21=0.000000, 0.000000, 0.000000, -1
target_22=0.000000, 0.000000, 0.000000, -1
target_23=0.000000, 0.000000, 0.000000, -1
ppt_0=0.000000, 0.000000, 0.000000, 0.000000,
ppt_1=0.000000, 0.000000, 0.000000, 0.000000,
ppt_2=0.000000, 0.000000, 0.000000, 0.000000,
12-129
BMS TECHNICAL MANUAL
CHANGE 1.00
12-130
BMS TECHNICAL MANUAL
CHANGE 1.00
• EWS: Stores the Electronic Warfare System settings from the DTC, basically the way your
6 dispense programs are set. PGM 0 to 3 are the 4 CMDS mode released by CMS
forward. PGM 4 is the slap switch and PGM 5 is the CMS left release.
• MFD: Stores the way your Multi Function Displays are programmed in your DTC.
• Bullseye: Store if the Bullseye should be displayed on your MFD.
• IFF: Store the IFF modes, settings and events programmed in your DTC.
• STPT: Stores the position of the INS (1-24) and Target (81-99) steerpoints in your DTC.
Please note in the file structure, they are all named Target steerpoints and are
redundant with the TEmissionname.ini file
• Radio: Links Preset to both VHF & UHF radios as well as the comment line for each entry.
• Comms: Stores the default radio settings for both COM1 & COM2 when the players enters 3D.
When using WDP (Weapon Delivery Planner) to setup some options, the comms
section might be more important with settings relevant to the TACAN, ILS , …
• ICP: This section is created by a cockpit save state or by WDP. It will save settings entered in
the UFC as default which will be reused everytime you enter the cockpit. (example:
default master mode, wingspan, bingo value, A-LOW value.
• FCC_AGB: This section is created by a cockpit save state or by WDP. It will save weapons settings
entered in the SMS CNTL page. (example: release spacing, ripple quantity, arming
delay, …)
• Map_POP: Stores the UI MAP legend option. These are not from the DTC but from the settings you
set the last time you used the UI map options (for instance object labels or chosed to
display airbases and infrastructure icons. Theses settins are saved so you can find the
same set of options next time you visit the UI map.
• NAV OFFSET: This section is created by a cockpit save state or by WDP. It will save the VIP and VRP,
OA1 & OA2 settings.
• LASER: This section is created by a cockpit save state or by WDP. It will save the laser settings
from the UFC laser page (laser time, laser and LST code).
• FCC_AIM: This section is created by a cockpit save state or by WDP. It will save the air to air
missile settings (aim-9 & aim-120) from the SMS pages.
• FCC_AGM: Same as above but got the Air to Ground missiles (mavericks – SMS page)
• COLORS: Avionics Configurator Colour section (See chapter 3.1)
12-131
BMS TECHNICAL MANUAL
CHANGE 1.00
12-132
BMS TECHNICAL MANUAL
CHANGE 1.00
12-133
BMS TECHNICAL MANUAL
CHANGE 1.00
Note 1
Upon application startup and changing the pilot (via logbook) the MFD/EWS/Radio/… information (everything
in the callsign.ini) gets loaded.
Upon loading a TE, the TEmissionname.ini file gets loaded, if it exists. This loads TGT STPTs/LINES/PPT info on
top of the MFD/EWS/Radio info. If no TEmissionname.ini exists, TGT STPTs/LINES/PPT are reset to defaults.
Upon loading a campaign mission, TGT STPTs/LINES/PPT (in the callsign.ini) are reset to the defaults (i.e., they
are deleted).
Upon saving the DTC in the TE module, TGT STPTs/LINES/PPT info is saved to both callsign.ini and
TEmissionname.ini.
Upon saving the DTC in a campaign mission, TGT STPTs/LINES/PPT info only gets saved to callsign.ini. This is
due to technical reasons.
TGT STPTs/LINES/PPT info gets saved to callsign.ini in both the TE module and campaign module so the code in
the 3D world only needs to know about the callsign.ini file.
Note 2
The second is that they are totally ‘local’ to each pilot’s computer, meaning that while each pilot may have the
TEmissionname.ini in their \Data\Campaign directory and see the same TGT STPTs/LINES/PPTs, changing any
one of these will only affect the pilot that made the change. The changes will not propagate to the other pilots
inside the context of the game, as each have this file on their local install.
Note 3
The third note relates to the loading of the DTC. The callsign.ini is loaded into memory automatically upon
program start up (launching Falcon from the desktop) and also if a new logbook is selected/created. In other
words, after a pilot creates LINES, TGT STPTs, and PPTs for a mission, hits the SAVE button in the DTC and then
exits the sim (completely), it is not necessary to open the DTC and hit the LOAD button when he re-launches
Falcon and wishes to fly using the elements he created. He should see them in the cockpit automatically.
Finally, a couple of variables to control behavior of DTC info load have been added.
Set g_bLoadDTCForTrns to 1 for the DTC to be loaded in training missions as well as other missions’ types; off
by default which is the original behavior – no player ini file load for trn missions.
Set g_bNoDTCForRampStart to 1 to suppress loading of the DTC ini file content when the player selects RAMP
starts. They will have to load this up from the MFD interface (or key command if they are being lazy) manually
as part of the jet start up sequence as in real-life.
This option can now also be changed in Falcon BMS Config > Campaigns.
12-134
BMS TECHNICAL MANUAL
CHANGE 1.00
The assigned codes will depend on the IFF ‘policy’ of each team for each given mission type. This ‘policy’ is
described for each TE and Campaign in a dedicated file, named ‘[MissionName].iff’. The format of this file is
described in a further section.
The briefing page displays all relevant information for your assigned codes. It will also display policy options for
your team.
The actual codes are attributed in a pseudo-random fashion. This attribution is repeatable (as in : if you restart
a TE/Camp, you will get the same codes), but difficult to know in advance. It is possible, however, that 2
squadrons/2 packages/2 mission types get assigned the same M1 code, especially considering how few M1
available codes there are.
Mode 1 codes can also rotate periodically, up to 48 times per day or once every half hour. Again, time events
will be created automatically corresponding to this rotation.
The assigned M1 codes can never be 00 or 70 (emergency code).
12-135
BMS TECHNICAL MANUAL
CHANGE 1.00
The setting ‘per aircraft in the package’ is a bit tricky to explain. Essentially, a package will get assigned a block
of 20 consecutive M2 codes. Let us consider an M2 code as XXYY. XX will be common to the whole package. YY
will depend on package and aircraft position in the package. There are 3 different blocks: XX04 to XX27, XX30 to
XX53, and XX54 to XX77.
Let us imagine that our package gets assigned the block 4404 to 4427.
The leader of the first flight will get assigned 4404. If he has wingmen, his n°2 will get assigned 4405, his n°3
gets 4406, and his n°4 gets 4407.
The leader of the second flight will get assigned 4410. Etc.
This continues up to the 4th aircraft of the fifth flight which gets assigned 4427.
This scheme allows having different settings for each aircraft, to identify them individually. It also allows
looking for a particular aircraft by setting a particular M2 interrogation code in your package. This way, it acts a
bit as the TACAN A/A channel attribution for AIs.
If you want to check the individual code for an aircraft in another package (for example, a tanker), it also is
possible if you select the tanker’s role and go in the briefing page.
No matter how the codes are attributed, you will never see an attributed code ending in 00 or starting by 77. If
you see a code ending in 00, that likely means the aircraft is in BACKUP mode (see the pilot’s guide for that), or
EMERGENCY if it is 7700.
Similarly to M1, it is possible that 2 squadrons/package/mission type get the same codes. It is not as likely as
M1 since there are many more codes available in M2, but it is still possible.
M2 codes cannot rotate. The fact that M2 codes are not affected by TIME events in the F-16 may or may not
have affected this decision.
M2 and M3 codes are independent. Even with the exact same settings, they will be attributed differently.
M3 codes can also rotate up to 48 times per day, at the same times as M1 codes. If assigned per aircraft in the
package, the attribution scheme per block discussed above is preserved at each rotation. Again, TIME events
will be created to rotate M3 codes automatically.
12-136
BMS TECHNICAL MANUAL
CHANGE 1.00
Thus, it is possible to set mode activation differently between ‘base’, ’return’ and ‘strike’.
Typically, for an OCA Strike, the ‘base’ & ’return’ will have more modes enabled to allow for organizing the
flights, identification by AWACS, etc.
And the ‘strike’ phase will have only mode 4 enabled to limit RF emissions.
The ‘switch-off’ and ‘switch-on’ points are then defined in the DTC as POS events. To determine direction,
again, the code checks the flight plan to determine in which rough cardinal direction the jet is going to the
target or back to base.
The modes used by every flight in the package, as well as your POS events, can be checked beforehand in the
briefing page.
Each mission type can have separate mode activation logics. For example, it is possible to set every Stealth
STRIKE to never enable any mode. HAVCAP or BARCAP, which stay over friendly territory, can have the same
modes for ‘base’/’return’ and ‘strike’ phase –typically, M1, M2 and M4. OCA Strike, SCAR, etc. which do go over
enemy territory, can have M1, M2, and M4 over friendly territory and M4 only over enemy territory. All of this
can be configured in the “.iff” file.
12-137
BMS TECHNICAL MANUAL
CHANGE 1.00
Please note, TEAM 0 is not used. In a TE with 2 teams (US & NK), the IFF file will have 3 team section: 0, 1 &2.
Section TEAM 0 can be left default, TEAM 1 will be US and TEAM2 will be NK.
M1Mask, M2Mask, and M3Mask are useful if you want to tweak a bit the code generation process. This way,
the codes generated for a particular mode will be different if you use a different mask.
Note: that even if 2 teams have the same Mask value for a mode, codes generated will be different.
12-138
BMS TECHNICAL MANUAL
CHANGE 1.00
M1M3Rotation defines how many times per day the M1 and M3 codes rotate. It can vary between 0
(never rotates) and 48 (every half hour).
M4Rotation defines how many times per day the M4 key rotates. It can vary between 1 (once a day at
midnight) and 4 (every 6 hours).
12-139
BMS TECHNICAL MANUAL
CHANGE 1.00
If YY = ZZ, then the mode actives are the same over the whole mission, there is no ‘switch off/on’ points and no
POS events are generated.
YY and ZZ are 2 digits encoding which modes are active. They follow the same convention as the IFF capabilities
set in the aircraft.dat files. Each number is between 00 and 63, leading zeros included.
As an example: for SWEEP missions, I want to use M1, M2, and M4 over friendly territory, and only M4 after
the push.
The ‘ProfileMission’ line to use is ProfileMission7.
For M1 + M2 + M4, we need to encode 01 + 02+ 08 = 11.
For M4 only, we need to encode 08.
12-140
BMS TECHNICAL MANUAL
CHANGE 1.00
If an airbase does not have this file the ATC will not be able to provide vectors for instrument approach and will
revert to the other possibilities (most of the time the visual procedure.)
There is another file in the ATC folder named airbase.lst that must match the list of airbase file implemented. If
you add a new ATC file for a specific airbase you must list this new airbase in the airbase.lst
This chapter will explain the structure of the airbase ATC files
The file is made in different subsections. One for airbase general setting and then one for each runway at that
airbase. Please note a 02/20 runway is actually 2 different sections: One for RWY 02 and another for runway 20
# means remark and the line after # is not taken into account by the code. Only lines not starting with a # sign
are relevant to the code.
12-141
BMS TECHNICAL MANUAL
CHANGE 1.00
The first number (778) corresponds to the CAMPID which is listed in the stations+ILS.dat file (\Data\Campaign\
folder)
The second number (2) lists how many runways the airbase features (remember 1 runway is two landing
direction. In this case 2 since it is a single runway (airbase with 2 runways will have 4 obviously)
The fifth number (500) is an altitude expressed in feet for cloud base.
Under that value the airbase will be closed because the weather is below the
published minima.
Please note, altitude means MSL therefore the airport elevation must be taken
into account. Taegu elevation is 353 feet and the ILS minima are 200 feet.
353+200=553feet, rounded below to 500 avoid the airbase to be closed spot
on minima and may force the pilot to attempt the approach and having to go
around.
This value corresponds to the minimum altitude the pilot must have the
runway lights in sight to continue the approach. It is given in the MINIMA
section of the approach charts.
The 6th number (1500) is the minimum VFR visibility. It is a visibility distance expressed in meter. If the visibility
is set below that distance then VFR approaches will not be allowed and ATC will force aircraft to land IMC. It
corresponds to the 1500m minimum visibility of Special VFR.
Above this number, VMC is allowed.
12-142
BMS TECHNICAL MANUAL
CHANGE 1.00
The 7th number (1400) is the minimum cloud altitude for VFR approach. Altitudes are given in MSL and airport
elevation must be taken into account. Since Taegu elevation is 353 feet, any cloud base below 1047 feet AGL
will prevent VFR approaches and make the radar approach mandatory. This number is usually 1000ft AGL and
correspond to special VFR ceiling.
###########
# RUNWAY “0” - 320
###########
#
#
0 #DB runway Nbr
#
320 # Heading
#
1 #Has base approach
0 #Has Long approach
#
# Overhead -1 is Left, 1 is right
1
#
# FINAL
6 0 2350 1
###########
# BASE
# SAY BASE 0 "no", 1 "Right" , 2 "Left"
0
# BASE PT
# Lead turn by 2Nm (9 0)
9.8 -1.7 3350 1
# ENTRY PT
# Lead turn by 1Nm (10.4 -3.3)
10.3 -4.3 4000 1
#
# HOLD PT
9 -10.72 6000 1
#
# LOITER -1 is Left, 1 is right
-1
#
###########
# LONG
#
# ENTRY
12-143
BMS TECHNICAL MANUAL
CHANGE 1.00
0000
#
# HOLDING
0000
#
# LOITER -1 is Left, 1 is right
-1
#
0 is the runway ID in the database. Single runway airbases only have ID0, but double runway airbase have 2
runways: ID0 and runway ID1. One runway has two direction (in this case ID0=140° and ID0=320°)
320 is the runway magnetic heading. So Runway 0 is assigned to RWY 32 (Rwy 14 is also Runway 0 but declared
with its heading: 140°in the section before this one)
The runway ID and the magnetic heading MUST correspond to the database which is verifiable with the BMS
editor in the objective Data list (of course you must know that Taegu is 32_14 Airbase (CT Index 1682)
The next two lines are either 0 or 1. They corresponds to either a 4 points system (has base approach) or a 3
points system (Has long approach)
If you want to use a 4 points system, the lines must be 1 then 0
If you want to switch to a 3 points system, the lines must be 0 then 1
The 4th setting is the direction of the overhead break. It can be set to either -1 or 1.
-1 is left and 1 is right. Usually the direction of the break is on the opposite side of the tower, but may vary
according to other parameters (obstructions, noise abatement, ...) This allows to set the AI direction of the
break for the overhead recovery. In this case, the break is to the right.
The next set of number correspond to the position of the FINAL point. Ass you can see you have 4 such lines.
They correspond to the 4 points: Final, Base, Entry and Hold.
The FINAL point is the one closer to the approach end of the runway. The BASE and ENTRY are two middle
points and the HOLD point is usually the IAF.
The structure is the following
X in Nm, Y in Nm, Altitude of the point in mean sea level, 1 is a setting to allow the ATC to precisely detect the
aircraft. It should always stay 1.
The X,Y coordinates system originates at the runway threshold. The X axis extends from the runway threshold
in the direction opposite to the runway heading the pilot would fly upon landing.
12-144
BMS TECHNICAL MANUAL
CHANGE 1.00
The Y axis has its zero at the runway threshold and is perpendicular to the X axis. The Y axis extends always on
the right of the X axis
Points aligned with the runway centerline always have a Y value of zero.
So the final point 6 0 2350 1 is placed 6 Nm from the runway threshold, on the runway centerline at an altitude
of 2350 MSL. And the system will detect the aircraft at that point.
The next setting (1) defines if the base point has to be called. Possible choices are 0, 1 & 2.
0 does not call base, 1 calls Right and 2 calls left. For most of IFR approaches, this line should stay at zero.
As you can see on the chart the position of the ATC 4 points do not exactly match the chart radar fixes.
This is not mandatory but helps aircraft to stay on the published track by leading their turn. It seriously
complicates the edition of the ATC file but provide smoother approaches for both humans and AI alike.
The next setting can be set to either -1 or 1 and correspond to the direction of the turn for the holding at the
IAF (HOLD point). -1 is LEFT and 1 is RIGHT. As seen on the chart the holding turns are LEFT and therefore the
setting reads -1
The last three lines are respectively the coordinates of the ENTRY and HOLDING point for the 3 points approach
system (Long final) and the direction of the hold turns at the Holding point.
When using the 3 points approach system, the BASE point is not used. This system was created when the
appraoch can be made simpler with only 3 points.
Most of the ATC files use the 4 points system and therefore these are most of the time left to zeroes. But some
patterns in straight lines like the ones created for North Korea use the 3 points system.
12-145
BMS TECHNICAL MANUAL
CHANGE 1.00
Elaborating the ATC files cannot really be made on the chart as distance are not very precise. It is better to
calculate the 4 points positions in the UI map using lines, PPTs and the ruler.
Here is one way to do it
• Select the ruler and draw a 30Nm line on the runway axis (140-320). Using the ruler as a reference,
draw a STPT line on top of the ruler. That is your X axis.
• Repeat the operation for the Y axis by aligning the rule on runway axis plus or minus 90° (050-230) and
place another STPT lines for Y. Make the two lines cross at the icon runway threshold (Yes it is not very
precise either).
• Place the ruler at the 0.0 point and extend 6 Nm on X axis in the positive direction and place a PPT at
the end of the ruler. That is your FINAL point
• The IAF is equally easy to find, it is usually marked as the IAF fix on the chart, in this case Mikki. Place a
PPT there as well and measure the distance from X and Y with the ruler (140/320 direction for X and
050/230 direction for Y)
• Place the BASE and ENTRY points as PPTs and measure distance with the ruler as explained above.
12-146
BMS TECHNICAL MANUAL
CHANGE 1.00
<campaign ID> <tacan ch#> <tacan band> <callsign> <range> <tacan_type> <tower_freq_UHF>
<tower_freq_VHF> <runway1_ils_freq> <runway2_ils_freq> <runway3_ils_freq> <runway4_ils_freq>
<OPS_freq_UHF> <GROUND_freq_UHF> <APPROACH_freq_UHF> <LSO_freq_UHF> <ATIS_freq_VHF>
<TOWER_FRAG> <GROUND FRAG> <APPROACH FRAG> <ATIS STATION FRAG>
12-147
BMS TECHNICAL MANUAL
CHANGE 1.00
There are enough UHF frequencies that each callsign gets a unique frequency in the UHF band.
The VHF band has fewer possible frequencies so it is possible for more than one flight to get the same
frequency on VHF in some cases.
An attempt has been made to reduce the possibility of this as far as possible by careful assignments in the file.
Still, the file is text format and you can edit it if you prefer to see different assignments.
There are a few non-callsign agencies that the code recognizes (GUARD, UNICOM, ADVISORY, COMMON TWR,
COMMON APPROACH, …) which also have lines in the file under the GENERIC section.
UHF range for ATC is from 225.0 to 399.975 of which a few ferquencies in no specific range are assigned to ATC
frequencies. That leaves much more UHF frequencies (than VHF) available for interflight in the radiomap.
Last consideration when you plan to change the default assigned frequencies:
Always try to use unique frequency. Duplicating frequency may lead to all sorts of unexpected problems.
12-148
BMS TECHNICAL MANUAL
CHANGE 1.00
13.1 Avionics
g_fCursorSpeed Set Cursor speed from 50 to 200%. Default is 100%.
Available options: 0.5 – 0.75 – 1.0 – 1.5 – 2.0
g_fRadarScale Change the size of the radar blips. Default is 75% (0.75).
Available options: 0.25 – 0.5 – 0.75 – 1.0 – 1.5
g_fHSDSymbolSize Sets size of the HSD symbols. Default is 0.025 which might be
too small for lower resolutions, in which case set to 0.05.
g_bNoDTCForRampStart With this option enabled the DTC will not be automatically
loaded during Ramp start; the user will have to load it.
Automatic DTC load always happens at Taxi & Takeoff start.
Possible options: 0/1. Default: 1 (not auto loaded at Ramp).
13.3 General
g_nPrintToFile Enables output of detailed briefing data to "briefing.txt" file
located in \User\Briefings. That file may then be externally
printed. Available options: 0/1
g_bAppendToBriefingFile When enabled this option adds briefing data to the same
Briefing.txt. When disabled it overwrites the briefing data. so
Briefing.txt only contains the last brief. Available options: 0/1
g_bBriefHTML Enable HTML format for briefing. The HTML files are stored in
\User\Briefings. One file per briefing. Naming is done with
date_time_briefing.html. Please note when this option is
enabled the briefing.txt files are not generated anymore.
13-149
BMS TECHNICAL MANUAL
CHANGE 1.00
g_bFullScreenNVG Enable or Disable full screen NVG. When disabled the FOV of
the NVG will more realistically implement the tunnel vision
effect. Available options: 0/1.
g_nPadlockBoxSize Adjusts the size of the padlock box (if padlock is enabled).
Available settings: 0/2. Default option: 2.
(See the view chapter for more information)
13.4 Hardware
g_bHotasDgftSelfCancel For DX programming joysticks. When enabled the
Dogfight/Missile Override callbacks (DGFT/SRM/MRM) will call
"override cancel" automatically upon release. This can be used
for joysticks like the TM HOTAS Cougar, where the override
switch on the throttle is a 3-position switch, but only the 2
outwards positions actually create a DX button input. This
option enables the centre position in case of DX programming.
If set to disabled, the centre position will need to be
programmed with callback. Available options: 0/1.
g_bUseVirtualRudder This option is only useful for people who use racing wheel
pedals and are NOT able to combine them into one axis via the
wheel's drivers. By activating this option AND assigning the
13-150
BMS TECHNICAL MANUAL
CHANGE 1.00
pedals to Brake and Right Toebrakes axis in the UI, the sim will
emulate a rudder axis by combining the inputs of these two
devices. Available options: 0/1 - Default is disabled.
g_bHiResTextures This option enables higher resolutions DDS for object skins and
miscellaneous textures. When enabled, the content of both the
misctex_HiRes and KoreaObj_HiRes will be used rather than the
misctex and KoreaObj folders. If there is no HiRes texture
available in these folders it will use the default texture instead.
Available options: 0/1. New default is now true (1)
g_bUseAnalogIdleCutoff This option when enabled suppresses the need for the idle
detent callback. The detent is simulated by the course of the
throttle axis. The idle point must be declared with a right click
on the SET AB button in the SETUP > CONTROLLER page of the
UI. Enable this option if you have a strong physical detent at the
idle point of your throttle. Available options: 0/1 – default is 0.
13.5 Shaders
g_bEnvironmentMapping Enable (1) or disable (0) Environment Mapping for glass.
g_bHdrLightingStar This option is relevant only when HDR lighting is enabled. When
Enabled (1) this option renders bright lights with a ‘star’ effect,
i.e. light rays originating from the light source.
Available options: 0/1.
Please note: this option is not in the applet.
g_bShowRainDrops Enable (1) or disable (0) rain drops on camera (outside view)
and canopy (internal view).
g_bShadowMapping Enable (1) or disable (0) shadows for the cockpit and a small
area around the viewer. Disabling this option will make the
submenu options unavailable.
13-151
BMS TECHNICAL MANUAL
CHANGE 1.00
g_bEnvMapRenderClouds Enable (1) or disable (0) rendering of the clouds into the water
environment map.
g_bEnvMapRenderFocusObject Enable (1) or disable (0) the rendering of the focused object
into the water environment map.
13.7 Multiplayer
g_bAllowMP_Freeze Allows the MP host to specify whether "freeze" pause can be
used (default = 0/disabled). Available options: 0/1.
g_bAllowMP_NVGFullscreen Allows the MP host to specify whether NVGs can be used in full
screen mode by clients or not (default is 1/enabled = client able
to choose either option through his own config file). Available
options: 0/1.
13-152
BMS TECHNICAL MANUAL
CHANGE 1.00
Please note: changing settings with the Avionic Configurator will change the ACDATA
content, preventing connection if this option is checked. If you enable this option you may
have to ensure that a common (approved) set of avionic configuration files is provided.
g_bRequireSameTileSetMP Allows the MP host to specify whether clients have to use the
same tile (default is 1 = enabled). Available options: 0/1.
g_sTileSet "POLAK" This option defines which tile set to use. Tile sets are declared
by by name according to the tile set’s subfolder name.
(See theatre dev notes later on in the annex).
g_nTaxiLaunchTime Sets the Time in minutes before the take off time the player
enters the cockpit for the TAXI start option (default is 4
minutes). This option is valid in SP only but affects only human
flights. In MP the host setting overwrites the client’s.
13-153
BMS TECHNICAL MANUAL
CHANGE 1.00
g_bEnforceBandwidthLimits If set to 1/true, the upload bandwidth setting from the UI will
not be taken as "information for the network stack", but
actually be "enforced", i.e. if you have a 50 MBit line but set
your upload to 10MBit, BMS will only use 10MBit for upload,
even it if could use more; should not be set unless you *need*
to hard limit your upload rate for some reason. Default 0/false.
g_nF1TeamUiFreq Set frequency for F1 UI voice comms (for Force on Force type
missions). By default 339.750 is also UHF preset 14 in 3D
allowing people in UI to communicate with ppl in 3D as long as
they monitor the same frequency. Available options: valid UHF
frequency range (6 digits, no decimal).
g_bhudAOA Enable (1) or Disable (0) the HUD AOA symbols for non F-16
aircraft. Available options: 0/1.
13-154
BMS TECHNICAL MANUAL
CHANGE 1.00
g_fFOVIncrement Defines how much the field of view should change for each
keypress in degrees. Default value = 5.
g_fMaximumFOV Limits the maximum angle that the FOV can be increased.
Default value = 80°.
g_bACMIRecordMsgOff When enabled (1) this option turns off the ACMI RECORDING
msg on top of the 3D view. Available options: 0/1.
g_nPadlockBoxThickness Determines the thickness in pixel of the padlock box. See view
chapter 9 for further information.
g_nSoundUpdateMS Sets how many milliseconds must elapse before the sound code
updates. Default 10.
g_nSoundSwitchFix This option when set to 1 (enabled) may fix the problem of AI
comms disappearing.
g_fAmbientmin This option allows tweaking the sky brightness at night. Valid
range from 0.0 (all black) to 1.0(all white). Default setting: 0.1.
g_bUseTerrainNightLightsTextureFilter This controls which texture filter to use for the terrain tile night
lights (1=anisotropic filter - 0=point filter). It is again an option
for servers with reduced GPU capabilities. Running BMS on a
server may benefit from less VRAM usage with this option set
to 0. Available options: 0/1. Default is 1.
g_bUseTracerColors Enable (1) or Disable (0) green tracers for OPFOR (red) aircraft.
Default = 1 (Enabled). Available options: 0/1.
g_fMeanTimeBetweenFailures Set the time in flight hours (logbook) between random failures.
If set to 0 (default) random failures are disabled.
13-155
BMS TECHNICAL MANUAL
CHANGE 1.00
g_bF16MfdHasRwr Enable (1) or Disable (0) the unrealistic RWR MFD page for F-
16’s. Available options: 0/1. Default is 0.
g_fMouseSensitivity 1.0 This option sets the 3D mouse sensitivity multiplier. Default
value is 1.0. Any value under 1.0 will cut the sensitivity in half.
The multiplier should be just above 1.0 to overcome the fact
that the 3D cursor is a bit smaller than the mouse. A value of
2.0 will double the speed.
g_bMouseWheelKnobs Enable (1) or Disable (0) the mouse wheel to turn cockpit
knobs. Default is 1 (Enabled). Available options: 0/1
g_bEnableExclusiveMouseCapture When enabled (1) this option captures the mouse when in 3D,
so that you don't click something on the desktop when running
in windowed mode. Default is 1 (Enabled).
Available options: 0/1.
g_bUseIvcUiVolume If enabled this option unties IVC volumes from the COMM1
(UHF) and COMM2 (VHF) volume sliders. UI IVC Volume is
controlled independently. Options: 0 (disabled)/1(enabled).
Default is 1.
g_bPrettyScreenShot If enabled (1) PrtScr key will make pretty screenshots (without
text overlays) instead of normal screenshots with overlays.
Available options: 1=pretty, 0=normal. Default = 0.
g_bExportRTTTextures This enables the shared texture memory area for HUD/MFDs/
HMCS/RWR/DED/PFL. This is independent from BMS external
window usage. Available options: 0/1. Default = 1.
Please note: this option must be enabled (1) for MFDE to work.
g_nRTTExportBatchSize This option determines how often the shared texture memory
area (if it is enabled with the above option) will be updated
every Nth frame. Default is 2. This option can be changed by
the MFDE config option. For best results set to 1.
13-156
BMS TECHNICAL MANUAL
CHANGE 1.00
g_sCampPeriodicSaveName "Auto" Defines the “prefix” for the automatic cyclic save name (when
auto save is enabled). Campaign date and time will be added
automatically to the saved name.
g_nActionCameraTimer Sets the duration in milliseconds for the action camera before
switching views. Default 8000, i.e. 8 seconds.
g_nJetHeatShaderMaxSpeed Define a speed in knots above which the jet blur effect
disappears. Valid range in Kts. Default 250 knots.
g_nMessageScrollTime Sets the time in seconds until a chat message scrolls out of
view. Default = 15.
Note: you set it in the config ONCE if you want a non-default value for EVERY aircraft.
If you really want specific values for specific aircraft simply edit the relevant dat files.
Default =0.0
g_sLogsDirectory "" If filled this option redirects the logfile output from \User\Logs
to the specified directory in “ “. Default value is empty “” hence
the default location for the log files.
g_sAcmiDirectory "" If filled this option redirects the ACMI directory from
\User\Acmi to the specified directory. Default value is empty “”
hence the default location for the acmi files.
13-157
BMS TECHNICAL MANUAL
CHANGE 1.00
g_nJpegCompression Sets the compression level for JPG screenshots, 0-100 (default
90)
g_nBumpIntensityMinTime This determines the minimum bump intensity "peak time", how
long a "bump" value is visible in shared memory (default 100)
13-158
BMS TECHNICAL MANUAL
CHANGE 1.00
set g_nMaxAIvsIVCOffset specifies the maximum +/- offset for the Ai vs IVC balance
(range 0 - 10000, default 500)
g_bLabelShowDistance Enable (1) or disable (0) the distance (in Nm) information on the
labels (if labels are turned on). Available options: 0/1.
g_nNearLabelLimit Sets the near label limit in Nm. You can limit the number of
objects shown with near labels by reducing the value. If an
object with default setting would be normally shown at a
distance 50nm and you set it to 25, it will appear when within
25 nm of your jet. Default = 100.
g_fSubtitleWrapWidth Radio subtitle text line width before it gets wrapped, 0.0
(nothing) to 2.0 (full view width) Default = 0.6.
g_bRealisticMavTime Enable (1) or disable (0) realistic maverick seeker head gyro
spool up time of 3 minute. Available options: 0/1.
g_fMavFOVLevel This option sets the horizontal FOV in degrees for the narrow
WPN view of the maverick. Valid range: degrees. Default = 4.
g_fMavEXPLevel This option sets the horizontal field of view in degrees for the
EXP views of the Maverick WPN page. The smaller the value the
higher the zoom. Valid ranges: degrees. Default 2.0.
g_bNoRPMOnHud This option when set to 1 removes the RPM indication on your
HUD as in the real aircraft. 0 displays RPM on HUD. Default =1
g_bCanopyOpenForRampStarts Enable (1 default) or disable (0) the open canopy at ramp start.
g_bServer This option when set to 1 (enable) puts Falcon BMS into
Multiplayer Server mode. A server mode session can't enter the
3D world. Available options: 0/1. Default = 0.
g_bUsePsTracers Enable (1) or disable (0) the particle system for tracers.
Available options: 0/1. Default = 1.
13-159
BMS TECHNICAL MANUAL
CHANGE 1.00
g_bAnyWaypointTask Enable (1) or disable (0) the option to assign any task to any
waypoint. Available options: 0/1. Default = 1.
g_bAIjamLogic 0 Enable (1) or disable (0) new AI jamming logic code. The new
logic should be more realistic, but has not been fully tested yet.
The new logic tries to adapt jamming according to the
opposition capabilities (to prevent HOJ for instance). The old
logic was using the jammer according to flight lead usage or
RWR spikes (i.e. switching on the jammer in reaction to a spike,
even when in HOJ range of capable weapons). Default = 0.
g_b3DClickableCursorChange When enabled (1) the mouse cursor changes over an 3D cockpit
hotspot to let the pilot know he is over a clickable area.
Available options: 0/1. Default = 1.
g_sRadioStandardCol "0xFFFF0000" Defines the colour of the standard comms subtitles to a specific
hex value. Default = 0xFFFF0000 = bright blue.
g_sRadioTowerCol "0xFF00FF00" Defines the colour of the tower comms subtitles to a specific
hex value. Default = 0xFF00FF00 = bright green.
g_sRadioflightCol "0xFF0000FF" Defines the colour of the to/from flight comms subtitles to a
specific hex value. Default = 0xFF0000FF = bright red.
You can also set specific colours (hex codes as above) for more radio subtitles:
Please note: BMS has a specific hex code structure valid for all hex codes in the config files:
0xAABBGGRR. AA are the alpha channel values (00=fully solid – FF=fully transparent), BB
are the Blue values, GG are the Green values and RR are the Red values.
The alpha channel values may be optional in some config lines.
13-160
BMS TECHNICAL MANUAL
CHANGE 1.00
g_sThreatCircleColor_RadarHigh "0xFF0000" Sets the colour of the UI map threat circles for ‘Radar High’ as a
hex value. Default is 0xFF0000 = blue. Hex format is 0xBBGGRR
(no alpha channel).
g_sThreatCircleColor_RadarLow "0xFF0000" Sets the colour of the UI map threat circles for ‘Radar Low’ as a
hex value. Default is 0xFF0000 = blue. Hex format is 0xBBGGRR
(no alpha channel).
g_sThreatCircleColor_ADAHigh "0xFF00FF" Sets the colour of the UI map threat circles for ‘Air Defense
High’ as a hex value. Default is 0xFF00FF = magenta. Hex format
is 0xBBGGRR (no alpha channel).
g_sThreatCircleColor_ADALow "0xFF00FF" Sets the colour of the UI map threat circles for ‘Air Defense
Low’ as a hex value. Default is 0xFF00FF = magenta. Hex format
is 0xBBGGRR (no alpha channel).
g_nThreatCircleContrast_RadarHigh Sets the strength of the colour mixing if 2 or more threat circles
of type ‘Radar High’ overlap. Range 0-100. Default = 40.
g_nThreatCircleContrast_RadarLow Sets the strength of the colour mixing if 2 or more threat circles
of type ‘Radar Low’ overlap. Range 0-100. Default = 40.
g_nThreatCircleContrast_ADAHigh Sets the strength of the colour mixing if 2 or more threat circles
of type ‘ADA High’ overlap. Range 0-100. Default = 40.
g_nThreatCircleContrast_ADALow Sets the strength of the colour mixing if 2 or more threat circles
of type ‘ADA Low’ overlap. Range 0-100. Default = 40.
g_bSaveLegacyDb If set to 1/true, synchronizes the bin files to match the xml files
when the game/editor is started. Default 0/false.
g_nTTSSpeedAdjust Sets the TTS talking speed, default speed is 0, range -10 to 10.
g_sPPTRingColor The color of the UI map PPT rings, set as hex, "0xBBGGRR"
Default "0x0000FF".
The last few lines are Debug config options and should be ignored (i.e. left disabled by regular users).
13-161
BMS TECHNICAL MANUAL
CHANGE 1.00
The following 3 settings are not being used by BMS but by the editor which also reads the config file. They
allow the editor to trigger third party applications from the editor by giving them the correct path.
Simply add your computer path to the correct application:
There are others config options that are not included in the config file but which may still be useful to some
users. The code still supports them and they can be added in your config file should you need them. It is
important to realise that if an option is not in the config file it is not officially supported by BMS, so you use it at
your own risk. Assume that they are MP critical and all members of a MP flight should have the same config
lines enabled.
g_fAVTRSeconds 30 Sets the time in seconds that the Auto ACMI feature (on the
AVTR panel) should run after each trigger press. Default is 30
seconds.
g_nRampMinutes Sets the time in minutes before Takeoff time players will join
3D. Default is 20. With newer F-16 blocks equipped with EGI the
alignment time is reduced from 8 to 4 minutes. In some cases
20 minutes ramp start might be too long and can be reduced
with this option.
g_nKnobAccelerationDelta When set to 0 it will make the “By1” and default “By5” callbacks
work without acceleration, i.e. By1 =1 and By5=5. Default = 60
milliseconds in which the next input has to occur.
If g_nKnobAccelerationDelta is not 0 it will not change the
13-162
BMS TECHNICAL MANUAL
CHANGE 1.00
g_nAbLightsSwitchOffDelay Sets the time in seconds that the ATC lights stay on for. Default
is 150 seconds.
g_bLogInputFunctions When set to 1/TRUE, the MonoLog will have entries for every
input function that is being called, in the format: "INPUT:
<function> (DOWN|UP)". Can be helpful for keyfile debugging
etc. Default 0/OFF.
g_bShutDownSAMWhenEmpty Variable to shut down SAMp Radar when no radar missiles are
left in the battery. Range 0/1 Default is false (0)
13-163
BMS TECHNICAL MANUAL
CHANGE 1.00
g_nPoorInclCloudRestriction Make Clouds density and number of cells in Poor and Inclement
weather configurable via cfg, that will override all sliders
settings or map settings. This saves a lot of FPS for small
configurations. Range 0 to 3 (default 0)
0 Standard model, from UI slider / Weather Map or Server
Setting
1 reduces the number of cells displayed from 9 to 4
2 forces the density to max 6/8
3 forces the density to max 4/8
Note : As this will force different cloud display from the server , server can allow to use it or
not.
g_nCloudRotatingMethod Allow users to choose the method of cloud rotation they wish.
Code logic is:
in cockpit view: face camera direction when close and face
camera position when far.
In other views: Face camera direction.
Range from -1 to 2. Default (-1)
-1: method is defined by code logic
0: cockpit method
1: face camera position
2: face camera direction.
13-164
BMS TECHNICAL MANUAL
CHANGE 1.00
The following config settings are meant to help players with less precise controllers. Allows to set exponential
curves and saturation for PITCH (Y), ROLL (X), YAW (rudder) and CURSOR X&Y (Cursors) axis. The latest should
help with the usual TM microstick issues. These settings work properly with the advanced UI axis settings.
set g_nAxisSat_AXIS_CURSOR_Y Variable to set exponential saturation for for CURSOR Y axis..
Should be in 0-99 range. 0 is disabled
set g_nAxisSat_AXIS_CURSOR_X Variable to set exponential saturation for for CURSOR X axis..
Should be in 0-99 range. 0 is disabled
13-165
BMS TECHNICAL MANUAL
CHANGE 1.00
g_bRealisticAttrition Obsolete
Enable (1) or disable (0) the campaign engine to subtract
destroyed vehicles and aircraft along with any munitions
carried. Default = 1.
g_bNewThreadTiming Obsolete
If experiencing hiccups/stuttering in the UI with multi-core
processors, try setting this to 0. Available options: 0/1.
Default is 1
g_bVoiceCom Obsolete
Enable (1) or disable (0) Internal Voice Communications (IVC).
Available options: 0/1.
13-166
BMS TECHNICAL MANUAL
CHANGE 1.00
13-167
BMS TECHNICAL MANUAL
CHANGE 1.00
13-168
BMS TECHNICAL MANUAL
CHANGE 1.00
g_nTrackIRYawMapping TIR_YAW = 0
g_nTrackIRPitchMapping TIR_PITCH = 1
g_nTrackIRRollMapping TIR_ROLL = 2
g_nTrackIRXMapping TIR_X = 3
g_nTrackIRYMapping TIR_Y = 4
g_nTrackIRZMapping TIR_Z = 5
set g_nTrackIRYawMapping 1
set g_nTrackIRPitchMapping 0
Please note: Do not include these lines if you do not want to change anything, or use -1
(which means the exe ignores this line). None of these entries appear in the Config Editor:
approach with caution!
13-169
BMS TECHNICAL MANUAL
CHANGE 1.00
• Radar altitude
• Bingo fuel level
• Cara Alow setting
• Bullseye X/Y
• BMS version information
• Indication which Betty sound is playing
• Turn rate in degrees/second
14-170
BMS TECHNICAL MANUAL
CHANGE 1.00
Updated Falcon Shared Memory Area2 to v13: added IFF panel status
• New behaviour for TWP missile launch TEST button and SYS TEST button (see below).
o MLGWOW = 0x4000000 & NLGWOW = 0x8000000 for AFM needs (WOW switches).
• Flying bit (0x80000000) is now updated accordingly for Ramp start when the user goes to 3D. This bit is
useful to state when the user is in the cockpit (it can be used to start extracting data for instance).
• DED will have a realistic 30 second warm-up time after UFC is powered on. It is therefore normal to see
a delay between UFC power on and the DED starting to display information.
• A delay was implemented before illumination of the JFS run light after JFS start-up. As a consequence,
if you used the JFS RUN light bit (JFSOn = 0x200000) to drive the JFS magnetic switch you must change
the bit to the new JetFuelStarter = 0x40 bit.
• The WOW lightbit (0x10) has been renamed to ONGROUND bit with the same address.
14-171
BMS TECHNICAL MANUAL
CHANGE 1.00
Please note: the actual blinking implementation is left to the third party apps developers’
discretion. Implemented blinking lightbits: Outer and Inner marker, Probeheat, Aux Search,
Launch, PriMode, Unk). See the flightdata.h file now located in \Tools\SharedMem\ folder
for further information.
The \Tools\SharedMem\ folder also contains a raw shared memory reader application that may be useful for
testing sharedmem content: BMSFlightData.exe
14-172
BMS TECHNICAL MANUAL
CHANGE 0
These are listed below, including the key mappings for the two different keyboard layouts. Also a couple of
old and outdated callbacks have been removed. Check renamed and deleted callbacks at the end of this
chapter.
Please note that the following keybindings show US International keyboard assignments.
15-173
BMS TECHNICAL MANUAL
CHANGE 0
15-174
BMS TECHNICAL MANUAL
CHANGE 0
15-175
BMS TECHNICAL MANUAL
CHANGE 0
15-176
BMS TECHNICAL MANUAL
CHANGE 0
15-177
BMS TECHNICAL MANUAL
CHANGE 0
Added:
Removed: SimJfsStartCycle
SimJfsStartInc
SimJfsStart -> replaced by SimJfsStartCycle
SimJfsStartDec
SimJfsStart_Off -> replaced by SimJfsStartMid SimJfsStartUp
SimJfsStartMid
SimJfsStart_Start2 -> replaced by SimJfsStartDown SimJfsStartDown
Added:
The ILS Volume Knob is now a nine-posit switch (can be assigned to an analogue axis as well) rather than a
toggle between on / off.
Removed:
SimILS
15-178
BMS TECHNICAL MANUAL
CHANGE 0
Gear Panel
Added:
Added ANTI SKID system. Switch is now a 3 position switch. Runway conditions coded following real landing
distance charts in case of wet runway or icing conditions.
Improved modelisation of the GearHandle. New DN LOCK function added: To be used if solenoid is faulty,
first click on DN LOCK, then within 2 seconds move the gear handle.
Removed:
SimBrakeChannelToggle SimParkingBrakeCycle
SimBrakeChannelUp SimParkingBrakeInc
SimBrakeChannelDown SimParkingBrakeDec
SimParkingBrakeUp
SimParkingBrakeMid
SimParkingBrakeDown
AFEmergencyGearHandleUnlock
SimLandingLightCycle
SimLandingLightInc
SimLandingLightDec
SimLandingLightUp
SimLandingLightMid
SimLandingLightDown
15-179
BMS TECHNICAL MANUAL
CHANGE 0
Added:
Added new canopy open / close logic. Canopy opening / stop / closing is activated with a new 3 posits
switch. The canopy cannot be opened if the spider is closed.
Removed:
AFCanopyToggle
AFCanopyInc
AFCanopyStop
AFCanopyDec
Added:
Added new keystrokes for handling dual engines idle detent. It works like a momentary switch. When
pressed, Idle Cut-Off is activated; otherwise, throttle is set past Idle detent (toggle function). It is optimised
for TM Warthog. For other devices you may have to use the special press / release events.
SimThrottleIdleDetentLeft, SimThrottleIdleDetentRight
Here is an example for the TM Warthog, left engine: SimThrottleIdleDetentLeft 61 -1 -2 0 0x0 314
Attention: This feature was initially released in 4.34.1. The callbacks SimThrottleIdleDetentCutOff and
SimThrottleRightIdleDetentCutOff have been renamed for consistency reasons.
15-180
BMS TECHNICAL MANUAL
CHANGE 0
Seat Adjust
Added:
New callbacks for Seat Adjust move up (the Seat up SimSeatUp and down
(SimSeatDown). The switch in the F-16 3d cockpit is located on the right
sidewall next to the SNSR PWR panel. Works only if the non-essential bus is
active.
SimSeatUp
SimSeatDown
Added:
IFF / UHF antenna selector implemented (Note: the callbacks affect both switches).
SimAntennaSelectCycle
SimAntiIceCycle SimAntennaSelectInc
SimAntiIceInc SimAntennaSelectDec
SimAntiIceDec SimAntennaSelectUp
SimAntiIceUp SimAntennaSelectMid
SimAntiIceMid SimAntennaSelectDown
SimAntiIceDown
Added:
Support for left and right kneeboard pages (16 pages per
kneeboard).
SimHotasShift
This allows to make use of the DX shifting faciality *without* the button also working as pinky switch at the
same time (i.e. it allows to separate the shift switch from the pinky switch, by using SimHotasShift and
SimPinkySwitch instead of the single SimHotasPinkyShift).
15-181
BMS TECHNICAL MANUAL
CHANGE 0
ORIDE:
When the GAIN switch is in ORIDE and the FLAP switch in AUTO, the leading and trailing edge flaps are fixed
to 3° down and will not vary with airspeed and AOA.
NORM:
When the GAIN switch is in NORM position FLAP operations are as described under 3.1 FLAP Switch (F-18)
farther below.
For detailed information about the function please refer to a F-18 Flight Manual, such as A1-F18AC-NFM-
000, chapter 2.8.4.2 GAIN Switch, pages I-2-55 & 56.
The new GAIN switch functions are located in section 6.01 Other Cockpit Callbacks in the key files and
editor.
Added Hotspot:
SimF18FCSGainToggle
SimF18FCSGainNORM
SimF18FCSGainORIDE
➔ Note:
The seal is animated but
the switch is not
implemented
15-182
BMS TECHNICAL MANUAL
CHANGE 0
Added: SimF18FCSTOTrim
The T/O Trim button is in the center of the rudder trim knob on the FCS panel. With WOW, holding the
button pressed it sets control surfaces for Take Off.
For detailed information about the function please refer to a F-18 Flight Manual, such as A1-F18AC-NFM-
000, chapter 2.8.2.2.7 T/O Trim Button, page I-2-47.
The new T/O TRIM button function is located in section 6.01 Other Cockpit Callbacks in the key files and
editor.
Added Hotspot:
SimF18FCSTOTrim
➔ Note:
The rotary has no hotspot.
The Launch Bar switch on the foreward left console has been added. Now you you have to extend the
Launch Bar in order to get hooked to the catapult. After launch and prior gear retraction the Launch Bar
must be retracted again. Otherwise gear retraction is impossible. The new LAUNCH BAR switch function are
located in section 6.01 Other Cockpit Callbacks in the key files and editor.
Added Hotspot:
SimLaunchBarToggle
SimLaunchBarEXTEND
SimLaunchBarRETRACTSim
➔ Note:
The Switch is not animated.
15-183
BMS TECHNICAL MANUAL
CHANGE 0
Added:
SimF18ThrottleATC
The automatic throttle control is a two-mode system that automatically maintains angle of attack (approach
mode) or airspeed (cruise mode). In the real jet the button is located on front side of the left throttle.
For detailed information about the function please refer to a F-18 Flight Manual, such as A1-F18AC-NFM-
000, chapter 2.1.2.1 ATC Approach Mode, pages I-2-8 to I-2-10.
The new ATC button function is located in section 6.01 Other Cockpit Callbacks in the key files and editor.
Added: SimPilotToggle
Now it is possible to toggle the pilot legs model in any of the F-16 3d cockpits. To make it work in other
cockpits as well the model has to be defined in the 3dckpit.dat with cockpitlegsmodel. If no model is
defined as cockpitlegsmodel nothing will happen. The new Toggle Pilot Model function is located in section
6.06 Simulation & Hardware in the key files and editor.
15-184
BMS TECHNICAL MANUAL
CHANGE 0
Added:
IFF MASTER Knob:
Controls power to the IFF transponder/ interrogator unit. Positions: OFF, STBY, LOW, NORM, EMERG .
Added Hotspot:
SimIFFMode4ReplyCycle
SimIFFMode4ReplyInc
SimIFFMode4ReplyDec
SimIFFMode4ReplyBravo
SimIFFMode4ReplyAlpha
SimIFFMode4ReplyOff
15-185
BMS TECHNICAL MANUAL
CHANGE 0
Added Hotspot:
SimIFFBackupM1Digit1Inc
SimIFFBackupM1Digit1Dec
SimIFFBackupM1Digit2Inc
SimIFFBackupM1Digit2Dec
SimIFFBackupM3Digit1Inc
SimIFFBackupM3Digit1Dec
SimIFFBackupM3Digit2Inc
SimIFFBackupM3Digit2Dec
Added Hotspot:
SimIFFEnableCycle
SimIFFEnableInc
SimIFFEnableDec
SimIFFEnableM3MS
SimIFFEnableOff
The default key assignments are: SimIFFEnableM1M3
Toggle Visor
Added:
SimVisorToggle
This toggles the helmet visor up / down e.g. for better readability of the HUD in bright conditions. The view
is darkened a bit. The tint is configurable in 3dckpt.dat file via visor_tint_color.
15-186
BMS TECHNICAL MANUAL
CHANGE 0
Idle Detent
Note: These callbacks only work if the analog axis mapped to the engine is below 10%
of its value, or if the throttle is mapped on the keyboard. For 2-engine jets, both engines
are concerned if they met the criteria above.
Nightvision On / Off
Added:
SimNVGModeOn, SimNVGModeOff
Added two new dedicated on/off callbacks to supplement the existing toggle ToggleNVGMode.
Smoke On / Off
Added:
SimSmokeOn, SimSmokeOff
Added two new dedicated on/off callbacks to supplement the existing toggle ToggleSmoke.
15-187
BMS TECHNICAL MANUAL
CHANGE 0
To complement the F-18 FM overhaul a new switch function has been implemented.
AUTO
With weight off wheels, leading and trailing edge flaps are scheduled as a function of AOA. With WOW,
leading and trailing edge flaps and aileron droop are set to 0°.
HALF
Below 250 knots, leading edge flaps are scheduled as a function of AOA. Trailing edge flaps and aileron
droop are scheduled as afunction of airspeed to a maximum of 30° at approach airspeeds. Above 250 knots,
the flaps operate in the auto flap up mode and the amber FLAPS light comes on. On the ground, the leading
edge flaps are set to 12°. The trailing edge flaps and aileron droop are set to 30°. With the wing unlocked,
aileron droop is set to 0°.
FULL
Below 250 knots, leading edge flaps are scheduled as a function of AOA. Trailing edge flaps and aileron
droop are scheduled as afunction of airspeed to a maximum of 45° flaps and 42° aileron droop at approach
airspeeds. Above 250 knots, the flaps operate in the auto flaps up mode and the amber FLAPS light comes
on. On the ground, the leading-edge flaps are set to 12°. The trailing edge flaps are set to 43° to 45° and
aileron droop to 42°. With the wings unlocked, aileron droop is set to 0°.
The new Flap switch functions are located in section 6.01 Other Cockpit Callbacks in the key files and editor.
Added Hotspot:
SimTEFCMDInc
SimTEFCMDDec
SimTEFCMDAuto
SimTEFCMDHalf
SimTEFCDMFull
The default key assignment for SimTEFCMDInc is Shft F12 and for SimTEFCMDDec Shft F11.
15-188
BMS TECHNICAL MANUAL
CHANGE 0
Redesignated:
SimDigitalBUP is now a toggle between BACKUP and OFF (was dedicated BACKUP before)
Added:
SimDigitalBUPBackup added as dedicated BACKUP call (SimDigitalBUPOff dedicated OFF call
unchanged)
Added:
SimManualFlyup added as toggle between Enable and Disable
(SimManualFlyupEnable/Disable dedicated states unchanged)
SimDigitalBUP
SimManualFlyup
SimDigitalBUPBackup
15-189
BMS TECHNICAL MANUAL
CHANGE 0
Added:
SimXBandAuxComDigit and SimYBandAuxComDigit added as dedicated X/Y tacan selectors
(SimCycleBandAuxComDigit toggle unchanged)
SimXBandAuxComDigit
SimYBandAuxComDigit
Added:
SimEcmPower added as toggle between On and Off (SimEcmPowerOn/Off dedicated states
unchanged)
SimEcmPower
15-190
BMS TECHNICAL MANUAL
CHANGE 0
Added:
SimJfsStart_Off and SimJfsStart_Start2 added as full state callbacks for the JFS switch (START2 and
OFF positions) to supplement SimJfsStart toggle.
Added:
SimEngCont added as toggle between Pri and Sec (SimEngContPri/Sec dedicated states unchanged)
SimEngCont SimJfsStart_Off
SimJfsStart_Start2
Added:
SimILS added as toggle between On and Off (SimILSOn/Off dedicated states unchanged)
SimILS
15-191
BMS TECHNICAL MANUAL
CHANGE 0
Added:
SimAud1Com1 added as toggle between Sql and Gd (SimAud1Com1Sql/Gd dedicated states
unchanged)
Added:
SimAud1Com2 added as toggle between Sql and Gd (SimAud1Com2Sql/Gd dedicated states
unchanged)
SimAud1Com1 SimAud1Com2
Added:
SimRwrPowerOn and SimRwrPowerOff (dedicated positions for the SimRwrPower toggle)
SimRwrPowerOn
SimRwrPowerOff
Added:
SimBupUhfManual (for the BUP Mode Knob; in addition to the existing SimBupUhfPreset and
SimBupUhfGuard)
15-192
BMS TECHNICAL MANUAL
CHANGE 0
Added:
Added dedicated keystrokes for the BUP UHF manual frequency tuning and increment/decrement keystrokes
(for the frequency digit knobs, left to right)
SimBupUhfFreq5Inc
SimBupUhfFreq5Dec
SimBupUhfFreq5_00
SimBupUhfFreq1Inc SimBupUhfFreq5_25
SimBupUhfFreq1Dec SimBupUhfFreq5_50
SimBupUhfFreq1_2 SimBupUhfFreq5_75
SimBupUhfFreq1_3
SimBupUhfManual
Left Aux Console, CMDS Panel
15-193
BMS TECHNICAL MANUAL
CHANGE 0
Redesignated:
SimEwsJett is now a toggle between ON and OFF (was dedicated ON before)
Added:
New callbacks for the MWS, O1 and O2 switches. Added hotspots in Pit also.
Added:
SimEwsJettOn added as dedicated ON call (SimEwsJettOff dedicated OFF call unchanged)
SimEWSO1Power SimEWSO2Power
SimEwsJett SimEWSO1On SimEWSO2On
SimEwsJettOn SimEWSO1Off SimEWSO2Off
SimEWSMwsPower
SimEWSMwsOn
SimEWSMwsOff
MISC Panel
Redesignated:
Enhanced the SimRightAPSwitch cycle to act as toggle for non-three-axis AP modes as well, similar
to SimToggleAutopilot, which is obsolete now.
Added:
New hotspot for SimToggleTFR.
SimToggleTFR
SimRightAPSwitch
15-194
BMS TECHNICAL MANUAL
CHANGE 0
Added:
two missing TWP callbacks (SimRWRLaunch & SimRWRSysTest).
Removed:
SimRWRSetNaval callback.
There is no such a button in RL. ALR-56M does not have SEA mode at all and naval is always visible. ALR-69
has SEA mode and its toggled by pressing SysTest button and within one second press UNKNOWN button.
Then small ship icon will be displayed at bottom of RWR scope as SEA mode indication.
SimRWRLaunch
SimRWRSysTest
Added:
SimAltPressIncBy1 and SimAltPressDecBy1 as dedicated "By1" increase / decrease callbacks for the Altimeter
rotary to supplement existing SimAltPressInc / SimAltPressDec callbacks (which increase / decrease AltPress
by 5).
SimAltPressIncBy1
SimAltPressDecBy1
15-195
BMS TECHNICAL MANUAL
CHANGE 0
Added:
SimBrtWheelUp and SimBrtWheelDn to control HUD FLIR intensity.
Added:
SimFlirLevelUp and SimFlirLevelDown to control FLIR level.
Added:
SimSetWX for ICP WX button.
SimBrtWheelUp SimFlirLevelUp
SimSetWX
SimBrtWheelDn SimFlirLevelDown
Thrust Reverser:
Wing Fold:
Added new callbacks (AFWingFoldToggle, AFWingFoldUp, AFWingFoldDown) to be used with e.g. F-18
Hornet or E-2C .
15-196
BMS TECHNICAL MANUAL
CHANGE 0
Formation Lights:
Mouse buttons:
Added keystrokes to enable/disable the mouse buttons in the 3D world. This offers the possibility to avoid
unwanted mouse clicks in non-exclusive mouse capture mode, e.g. for touchscreen users. The new
keystroke names are: OTWMouseButtonsIn3dEnable, OTWMouseButtonsIn3dDisable,
OTWMouseButtonsIn3dToggle.
OTWToggleHUDRendering:
Added new callback OTWToggleHUDRendering, which will toggle rendering the HUD in the 3D cockpit view.
The external window rendering is not affected by this.
AFTriggerCatapult:
As catapult works automatic now, AFTriggerCatapult is redisignated to release the catapult trigger (in case
of malfunctions etc.) instead of triggering the catapult launch.
SimCursorStopMovement
Added new callback SimCursorStopMovement, which will simply set all radar cursor input to 0. This is not a
real-life functionality, but a faulty microstick in the Cougar for example is a common problem. Given the
fact that the Cougar is not in production anymore but still rather common for BMS users this is a possible
manual workaround for people that experience "stuck cursors".
15-197
BMS TECHNICAL MANUAL
CHANGE 0
15-198
BMS TECHNICAL MANUAL
CHANGE 0
Other functions:
BreakToggle KneeboardTogglePage SoundOff
SimDbuOff SimABReset SimAutoAVTR
SimDbuOn SimEPUGEN SimICPLink
SimMaxPower SimIFFIn SimIFFPower
SimProbeHeat SimRadarNextTarget SimRadarPrevTarget
SimStepSMSRight SimSelectiveJettison SimStepSMSLeft
SimTestSwitch SimToggleChatMode SimToggleUHFMaster
SimToggleRealisticAvionics SimToggleRadioVolume OTWShowTestVersion
OTWToggleScales Cycle3DPitPanMode Select3DPitPanMode
Select3DPitSnapGuidedMode Select3DPitSnapAbsMode Select3DPitSnapRelMode
Select3DPitGlanceMode SelectSticky3dPitSnapViews ToggleSticky3dPitSnapViews
SelectNonSticky3dPitSnapViews
Comm functions:
ATCTaxiing FACCheckIn FACRequestMark
ATCReadyToGo FACWilco FACRequestTarget
ATCRotate FACUnable FACRequestBDA
ATCGearUp FACReady FACRequestLocation
15-199
BMS TECHNICAL MANUAL
CHANGE 0
Dev functions:
DEV_OTWToggleFullScreen DEV_SimToggleDropPattern DEV_OTWSetObjDetail
DEV_OTWStepHeadingScale DEV_SimToggleInvincible DEV_OTWToggleClouds
DEV_SimRWRSetNaval DEV_OTWToggleGLOC DEV_SimSetBubbleSize
Note: Since 4.34 all of the above callbacks have been deleted from the code. Again: You
have been warned ☺
15-200
BMS TECHNICAL MANUAL
CHANGE 0
PART 3
15-201
BMS TECHNICAL MANUAL
CHANGE 0
16-202
BMS TECHNICAL MANUAL
CHANGE 0
• Function support is limited (no user interaction functions available, e.g. WaitInput)
Note: If the mission has an automatic but no manual training script file assigned, no
check box will be shown. Check Boxes will only appear, if a manual script is assigned to
the mission file.
Example:
In BMS most of the training missions have training scripts. These are saved in the folder
“…\Data\Campaign”
Training scripts do not work with Campaign missions. They are meant for training purposes only. However,
the scripts do also work in Tactical Engagement missions. When the training mission or TE loads, Falcon will
check for the existence of a training script file to go along with the mission.
For editing purposes a simple text editor can be used for that task.
16-203
BMS TECHNICAL MANUAL
CHANGE 0
The exception to above is that certain functions can execute in "parallel" with others. For example, there
are two print commands. Both "Print" and "WaitPrint" put a string on the screen for a set duration. The
difference between the two is that "Print" immediately moves onto the next command on the next frame.
"WaitPrint" on the other hand, pauses the execution of the script until the time expires.
• A section name
• A blank line
16-204
BMS TECHNICAL MANUAL
CHANGE 0
• Automatic scripts work with both Tactical Engagement (.tac) and Training Missions (.trn).
Example:
The first number (0.0) is the position on the x-axis, the second (0.95) is the position on the y-axis.
Positive numbers move the cursor right (x-axis) or up (y-axis). Negative numbers move the cursor left (x-
axis) or down (y-axis).
This coordinate system is completely independent of the screen resolution (1024*768, 800*600…). This
ensures, every pilot, no matter of his screen setup, sees the very same result.
Whenever you want to type or draw something on the screen, you can move your cursor to a specific position,
where the action should occur. If no cursor position is defined, the output will appear on the centre of the
screen (0.0 0.0).
16-205
BMS TECHNICAL MANUAL
CHANGE 0
Screen coordinates:
The center of the screen (0.0 0.0) is the default cursor position.
16-206
BMS TECHNICAL MANUAL
CHANGE 0
<float> A floating point number, e.g. 1.0 / -0.25 / 0.5 / -0.05 etc.
<string> A string of characters surrounded with quote marks. For example “Hello, World”.
Example:
FunctionName_<Argument1>_<Argument2>_...
16-207
BMS TECHNICAL MANUAL
CHANGE 0
MoveCursor
Syntax: MoveCursor <float (x)> <float (y)>
Description: Moves the cursor from its current position by x and y amount. The range of the
coordinate system is from -1.0 to 1.0. For example x = -1.0 is the left of the screen,
0.0 is the center and 1.0 is the right side of the screen. This cursor location is used for
all print and draw functions. The cursor position stays the same all the time until it is
relocated to another screen location by using either SetCorsor or MoveCursor.
Note: If you have not defined the location on the screen (see SetCursor), the message
appears in the centre of the screen (0.0 0.0).
16-208
BMS TECHNICAL MANUAL
CHANGE 0
WaitPrint
Syntax: WaitPrint <time> <string>
Description: Functions identically to "Print" except that the execution does not advance to the
next command until <time> has expired.
Oval
Syntax: Oval <time> <float (radius x)> <float (radius y) optional>
Description: Draws an oval on the screen for <time> duration at the current position of the cursor.
The size of the oval is specified by the two arguments <float (x)> and <float (y)>. If
only one argument is supplied, then a circle is drawn with that radius specified by
<float (x)>. The cursor position is at the bottom of the object (marked by the green
x), not in its center.
Line
Syntax: Line <time> <float (x1)> <float (y1)> <float (x2)> <float (y2)>
Description: Draws a line for <time> duration from x1, y1 to x2, y2 coordinates. This function is
not dependent from the current cursor location.
16-209
BMS TECHNICAL MANUAL
CHANGE 0
Note: See “Appendix – Color Code Examples” for some more colors and hints.
SetFontColor
Syntax: SetFontColor <hex>
Description: Identical to SetColor but affects just text functions. The setting affects all following
text functions until another color is defined.
Note: See “Appendix – Color Code Examples” for some more colors and hints.
SetDrawColor
Syntax: SetDrawColor <hex>
Description: Identical to SetColor but affects just draw functions. The setting affects all following
draw functions until another color is defined.
Note: See “Appendix – Color Code Examples” for some more colors and hints.
16-210
BMS TECHNICAL MANUAL
CHANGE 0
SetFlash
Syntax: SetFlash <Hex>
Description: Sets the rate of flashing that should occur for all text and draw functions. "SetFlash
0" disables flashing. The higher the number (in milliseconds) behind 0x is, the slower
the flashing interval is (e.g. 0x100 = 100 ms = fast flashing / 0x900 = 900 ms = slow
flashing). The setting affects all following draw & text functions until another value is
defined.
SetFontFlash
Syntax: SetFontFlash <Hex>
Description: Same as SetFlash, but for text functions only. The setting affects all following text
functions until another value is defined.
SetDrawFlash
Syntax: SetDrawFlash <Hex>
Description: Same as SetFlash, but for draw functions only. The setting affects all following draw
functions until another value is defined.
16-211
BMS TECHNICAL MANUAL
CHANGE 0
SetFont
Syntax: SetFont <integer>
Description: Sets the font size specified by <integer>. This setting is used for all following print
functions until another value is defined. The following values are valid:
Example: SetFont 1
SetLineWidth
Syntax: SetLineWidth <float>
Description: This sets the line width defined as a floating point number from 0 to 1. Default =
0.005. This setting is used for all following draw functions until another value is
defined.
SetFontBGColor
Syntax: SetFontBGColor <hex>
Description: You can set the background color for text functions. The default is set to transparent.
It affects all following text functions until another value is defined. To be used
together with SetTextBoxed.
16-212
BMS TECHNICAL MANUAL
CHANGE 0
SetTextBoxed
Syntax: SetTextBoxed <Integer>
Description: Sets the type of text boxing that should apply to print statements. Valid values are 0
& 2.
0 = no text boxing
This function affects all print functions until another value is defined. You have to
define a background color using SetFontBGColor first.
Example: SetTextBoxed 2
SetTextOrientation
Syntax: SetTextOrientation <Integer>
Description: Sets the orientation of the text relative to the cursor position. Acceptable values are
0, 1 and 2. 0 = left justified text, 1 = centered text, 2 = right justified text. This function
affects all following print functions until another value is defined.
The red dotted line represents the horizontal alignment of the cursor position.
Example: SetTextOrientation 2
16-213
BMS TECHNICAL MANUAL
CHANGE 0
Clear
Syntax: Clear
Description: Immediately removes all drawn elements from the screen (Such as those created by
"Print" "Line" and "Oval" statements).
Example: Clear
ClearLast
Syntax: ClearLast <Integer - optional>
Description: If no argument is provided, the last created drawn element will be removed from
the screen (Such as those created by "Print" "Line" and "Oval" statements). If a
number is specified, then the nth last element will be removed. For example,
"ClearLast 2" will remove the second to last drawn element from the screen.
Example: ClearLast
16-214
BMS TECHNICAL MANUAL
CHANGE 0
If he executes e.g. SimPickle after e.g. 20 seconds, the function returns True and the
script continues after 20 seconds.
WaitMouse
Syntax: WaitMouse <time> <float (target x)> <float (target y)> <float (distance)>
Description: Pauses execution of the script for <time> duration or until the user moves the mouse
cursor within <float (distance)> of the screen coordinates of <float (target x)> and
<float (target y)>. If the function times out, it returns false.
Note: Please note that you do not have any visual cues where the user should place his
mouse cursor. So it recommended using this function together with SetCursor and Oval
functions. Additionally the hotspot is fixed on the screen. When you pan your POV the
hotspot moves as well.
Block
Syntax: Block <command >
Description: Blocks the system from recognizing any commands listed as arguments. This function
accepts an unlimited number of commands as arguments. If no arguments are
provided, all commands are blocked.
16-215
BMS TECHNICAL MANUAL
CHANGE 0
Allow
Syntax: Allow <command >
Description: Allows the system to recognize any commands listed as arguments. This function
accepts an unlimited number of commands as arguments. If no arguments are
provided, then all commands are allowed.
Note: Use the Block and Allow functions with care. E.g. if you Block everything also
“SimEndFlight” (Exit Sim Menu) will be blocked. In this case the user has no chance
leaving the sim other than “Alt – Tab”, “Ctrl- Alt – Del” or crashing the jet to get the exit
menu. On the other hand, if you just allow e.g. SimTriggerSecondDetent as in the
example above it is the same: No Exit Sim Menu available.
16-216
BMS TECHNICAL MANUAL
CHANGE 0
JumpIf
Syntax: JumpIf <section>
Description: If the prior return value is true jumps immediately to the section identified by
<section>. Note: This does not add anything to the call stack.
JumpIfNot
Syntax: JumpIfNot <section>
Description: If the prior return value is false jumps immediately jumps to the section identified by
<section>. Note: This does not add anything to the call stack.
16-217
BMS TECHNICAL MANUAL
CHANGE 0
Call
Syntax: Call <section>
Description: Immediately jumps to the section identified by <section>. The current location is
added to the call stack, and execution will return to this location when an
"EndSection" function is encountered.
CallIf
Syntax: CallIf <section>
Description: If the return value of the prior statement is true, then the section identified by
<section> will be called. Once an "EndSection" is encountered, execution will return
to the instruction after "Call".
16-218
BMS TECHNICAL MANUAL
CHANGE 0
CallIfNot
Syntax: CallIfNot <section>
Description: Functions identically to "CallIf" except that a false return value triggers the call.
While
Syntax: While
Description: If the prior return value is true, runs the commands until the next "EndSection". When
"EndSection" is found, execution returns to the command prior to the "While"
function. If the prior return value is false, then execution moves to the command
after the next "EndSection"
Example: While
16-219
BMS TECHNICAL MANUAL
CHANGE 0
WhileNot
Syntax: WhileNot
Description: Operates identically to the "While" statement, with the exception that a return value
of false causes the while to execute.
Note: Be careful using this with automatic scripts (.run). This could create a permanent
loop which cannot be exited.
Example: WhileNot
EndSection
Syntax: EndSection
Description: This function can be used to end a section. If there is any previous function on the
call stack (generally created by using the "call" function), then execution will return
to the instruction immediately after the "call" when "EndSection" is encountered. If
there is nothing on the call stack, this line is ignored.
16-220
BMS TECHNICAL MANUAL
CHANGE 0
Data
Sound "..\soundFile.ogg"
Subfolder 1
Sound "subFolder1\soundFile3.ogg"
Sounds
Sound "..\Sounds\soundFile.wav"
WaitSound
Syntax: WaitSound <string>
Description: Same as Sound but the execution of the script pauses until the sound finishes playing.
16-221
BMS TECHNICAL MANUAL
CHANGE 0
WaitSoundStop
Syntax: WaitSoundStop <time>
Description: Pauses execution of the script for <time> duration or until the last sound executed by
"Sound" stops playing. If the function times out, it returns false.
Example: WaitSoundStop 60
Degrees Radians
22° 0,38397243543875250692321196906749
45° 0,78539816339744830961566084581988
90° 1,5707963267948966192313216916398
180° 3,1415926535897932384626433832795
360° 6,283185307179586476925286766559
Positive numbers move the view to the left or down, negative ones to the right or up.
Please note that this function does work only in “3d Pan View”. In 2d SNAP View” it
simply does nothing. Please also be advised that the user can change the POV either
by using key strokes, POV hat or a headtracking device like TrackIR. If the latter one
is used by the pilot there is a high chance that the desired view will not stay as it was
intended by the script designer. The POV jumps to the spot specified in the script but
as the user has full control his POV will change immediately.
16-222
BMS TECHNICAL MANUAL
CHANGE 0
MovePanTilt
Syntax: MovePanTilt <float (x)> <float (y)>
Description: Offsets the current 3d view from its current position by the amounts specified by
<float (x)> and <float (y)>. These coordinates are in radians. See also SetPanTilt notes.
The pictures below illustrate how the functions work. For easy recognizability a red circle in the center of the
screen has been added. First the POV was set from the center (0.0) to the down left. Then slightly up by
MovePanTilt.
Hillite3DButton
Syntax: Hilite3DButton <time> < command> <integer – optional>
Description: This function will draw two circles around a function in the cockpit
(knob, button, rotary etc.) specified by <command> for the duration
of <time>. Of course it must be a command which is available on
the cockpit panels. Otherwise nothing will happen. The highlighted
cockpit function will be shown in both Snap (2D) and Pan (3D) pit
like shown in the picture. The view is not fixed on this cockpit
function and if it is not visible in the current POV, it will not jump to that position. The
pilot has to pan the view to that highlighted function by himself.
Example: The safety arm leaver in the F-16 pit has three hotspots. You can now
specify which hotspot shall be highlighted.
16-223
BMS TECHNICAL MANUAL
CHANGE 0
WaitHilite3DButton
Syntax: WaitHilite3DButton <time> < command> <integer – optional>
Description: Same as Hilite3DButton with the exception that the script pauses for the specified
amount of time and waits for the pilot to execute (either with mouse click in 3d pit or
via keystroke, DX) the cockpit function specified by <command>. If the user executes
the highlighted cockpit function (switch, button, knob, wheel…) within the time limit,
it returns true. If time expires, the function returns false and the script continues.
SimCommand
Syntax: SimCommand <command>
Description: Causes <command> to be executed just as if the user had pressed the keystroke. All
callbacks in the full key file are valid commands here. SimCommand issues both
KEY_PRESS and KEY_RELEASE events in sequence.
16-224
BMS TECHNICAL MANUAL
CHANGE 0
SimCommandPress
Syntax: SimCommandPress <command>
Description: Causes <command> to be executed (KEY_PRESS event only). To be used in
conjunction with SimCommandRelease. The command will be executed until the
KEY_RELEASE event with the same command is triggered.
SimCommandRelease
Syntax: SimCommandRelease <command>
Description: Causes <command> to be released (KEY_RELEASE event only). To be used in
conjunction with SimCommandPress.
Note: Some commands require a long input, such as Eject or Pickle. SimCommand alone
won’t work here as it executes the command with a press and a release event in very
short time frame, thus e.g. Eject will not work as it needs to be held longer. Use
SimCommandPress & SimCommandRelease with a Wait function in between.
SetFault
Syntax: SetFault <integer>
Description: Sets a fault specified by its individual fault id. You can find a list of possible faults in
the appendix later on.
16-225
BMS TECHNICAL MANUAL
CHANGE 0
ClearFault
Syntax: ClearFault <integer>
Description: This is the opposite function. You delete a specific fault.
Please note that the fault still remains in the Test page and PFL. Master Caution is still
active. You simply have to hit Master Caution button once and clear the Test page.
SetGunAmmo
Syntax: SetGunAmmo <Integer>
Description: Sets the amount of cannon rounds. Initially introduced to set the gun rounds to zero
at training start, but can also be used to raise the amount of ammo or even as a rearm
function, as it can be used multiple times in the script. The number of rounds is not
limited and can be higher as what can usually be loaded. For example, the F-16 has a
maximum of 510 rounds. If you set the value to 10000, you have 10k rounds available.
Example: SetGunAmmo 0
16-226
BMS TECHNICAL MANUAL
CHANGE 0
SetFuel
Description: With this command you can set the fuel capacity for each fuel compartment
independently. Keep in mind that the cockpit fuel gauge has a built-in random
inaccuracy so the capacity shown can be off. The setting has also an impact on the
total aircraft weight. Max values can be found in the aircrafts afm.dat file.
Note: There are no sanity checks if you have entered the correct values according to the
tank capacity. Its up to you to calculate and enter the correct data here.
Example: Wait 60
16-227
BMS TECHNICAL MANUAL
CHANGE 0
WaitGameTime
Syntax: WaitGameTime <time>
Description: Pauses execution of the script until the specific GAME <time> expires. Pause mode
will interrupt the function because the In game time is stopped. If the sim is resumed,
the function starts counting again until the specified time has expired. In Freeze mode
the in game clock is still running, so has no impact on this function.
Example: WaitGameTime 60
WaitForNoWOW
Syntax: WaitForNoWOW
Description: This prevents the script from continuing for an unspecified amount of time until an
aircraft gets airborne (= No Weight On Wheel anymore). So it only does make sense
to use this, while the aircraft is still on the ground when entering 3D. If you start the
mission in the air this function has no impact at all (With the exception if you pause
the script for a specific amount of time and the aircraft landed meanwhile). After Take
Off, if there is no weight on wheel anymore the script continues as desired.
Example: WaitForNoWOW
EndScript
Syntax: EndScript
Description: Immediately ends the script. All following functions will be ignored. Although it’s a
good habit to set it at the end of the script, it is not necessarily needed to do so. If
there is no function left to be executed, the script simply does nothing.
Example: EndScript
16-228
BMS TECHNICAL MANUAL
CHANGE 0
Example 1: … Example 2: …
Code Line Code Line
EndScript invoked Code Line This is the usual case. Code Line
Code Line The script runs until Code Line
somewhere in the
… …
middle of the code will the end and is ended
EndScript Code Line
immediately end the with EndScript.
Code Line Code Line
script, thus the red Code Line Code Line
code lines will be Code Line …
ignored. … EndScript
EnterCritical
Syntax: EnterCritical
Description: This experimental function can be used to execute multiple commands in a single
frame. Execution will proceed in one frame until an "EndCritical" function is
encountered. This command is very dangerous, as the use of ANY waiting calls like
“Wait”, "WaitPrint" and such may cause Falcon to stop running!
It is not advised to use this function as there is really no need to do so! Only thinkable
exception may be that multiple text or draw functions should appear at once instead
of being recognizably executed one after another. But these are just aesthetical
reasons.
Example: EnterCritical
EndCritical
Syntax: EndCritical
Description: Causes one command per frame execution to resume.
Example: EndCritical
16-229
BMS TECHNICAL MANUAL
CHANGE 0
Please note that the function works indeed with .run scripts but the functions which
return true / false are limited. This makes it almost unusable with .run scripts.
Example: If
Example 1: … Example 2: …
Code Line Code Line
If the function prior If Code Line (returns TRUE) If the function prior If Code Line (returns FALSE)
If If
returns TRUE, the returns FALSE, the
Code Line (executed) Code Line (not executed)
next code line will be Code Line next code line will be Code Line
executed. … not executed. …
IfNot
Syntax: IfNot
Description: Functions identically to "If", except the next instruction is executed if the return value
of the last statement is false.
Example: IfNot
16-230
BMS TECHNICAL MANUAL
CHANGE 0
• SetViewCallback
• SetViewDial
• SetCursorCallback
• SetCursorDial
• WaitCallbackVisible
• WaitDialVisible
So the order for RGBA is reversed in BMS. The 2 first digits are "alpha", where FF is "fully solid" and 00 is
"fully transparent". Below we have some examples which can be used in Falcon. Of course a lot of other
colors are possible. They can be used for text as well as drawings or background colors.
Transparent = 0x00000000
Black = 0xFF000000
White = 0xFFFFFFFF
Red = 0xFF0000FF
Green = 0xFF00FF00
Blue = 0xFFFF0000
Cyan = 0xFF00FFFF
Magenta = 0xFFFF00FF
Yellow = 0xFF00FFFF
The hex-values (after 0x) are not case sensitive. So 0xffffffff (white) works as well. Default color is
0xFF0000FF (red).
Note: Alpha is just working for Fonts for now. If you change the Alpha for drawing
functions (SetColor, SetDrawColor) they do not have any effect.
16-231
BMS TECHNICAL MANUAL
CHANGE 0
The attentive observer might notice that a couple of fault ids are missing. These are the ones which can’t be
set via SetFault. However, there are also some „Fake Faults“ where the faults have no noticable effect (e.g.
Take Off & Landing messages in TEST page) or just produce an eyecandy caution light illumination (e.g.
HOOK without having lowered the hook).
Some faults are dependant on special conditions or even the type of aircraft. E.g. you can’t set a TFR fault if
the jet is not TFR-capable at all or does not carry a correspondig pod (if applicable). Some faults may
produce follow-up faults later in the flight.
Faults can be cleared via the ClearFault function. Check out the “Clear” column in the tables. However, this
is not true for all faults. For some it is not possible. So use them with care.
16-232
BMS TECHNICAL MANUAL
CHANGE 0
16-233
BMS TECHNICAL MANUAL
CHANGE 0
AVIONICS
136 IFF 003 1 IFF BUS FAIL None IFF system failure / IFF non-operational
FAULT
MSL SLAV AVIONICS Missile Slave failure / Missile seeker will
137 MSL 004 1 None
FAIL FAULT not follow radar line of sight
AVIONICS RWR bus failure / RWR non-operational
138 RWR 003 1 RWR BUS FAIL None
FAULT (RWR must be powered to see this fault)
AVIONICS
140 GPS 003 1 GPS BUS FAIL None GPS failure / GPS non-operational
FAULT
AVIONICS
141 INS 003 1 INS BUS FAIL None INS failure / INS non-operational
FAULT
AVIONICS
143 EGI 013 1 EGI NAV FAIL None EGI failure / GPS, INS non-operational
FAULT
AVIONICS
145 IDM 003 1 IDM BUS FAIL None IDM failure / Loss of IDM
FAULT
MFDS LFWD AVIONICS MFD Left failure / Left MFD non-
146 MFDS 168 1 None
FAIL FAULT operational
MFDS RFWD AVIONICS MFD Right failure / Right MFD non-
147 MFDS 177 1 None
FAIL FAULT operational
AVIONICS SMS bus failure / All functions lost
148 SMS 003 1 SMS BUS FAIL None
FAULT except EJ, SJ
SMS STA1 AVIONICS Weapon Station 1 degraded / Station is
149 SMS 103 1 None
DEGR FAULT not operating correctly
SMS STA2 AVIONICS Weapon Station 2 degraded / Station is
150 SMS 104 1 None
DEGR FAULT not operating correctly
SMS STA3 AVIONICS Weapon Station 3 degraded / Station is
151 SMS 105 1 None
DEGR FAULT not operating correctly
SMS STA4 AVIONICS Weapon Station 4 degraded / Station is
152 SMS 106 1 None
DEGR FAULT not operating correctly
SMS STA5 AVIONICS Weapon Station 5 degraded / Station is
153 SMS 107 1 None
DEGR FAULT not operating correctly
16-234
BMS TECHNICAL MANUAL
CHANGE 0
16-235
BMS TECHNICAL MANUAL
CHANGE 0
17.1 Tilesets
Tile sets will now be selected by NAME via a new g_sTileSet option (the former ‘g_nTileSet’ number is
gone). Default value is "POLAK".
This enables 3rd party tilesets to co-exist on the BMS installation without overwriting each other and
without the need for the code to have a fixed set of options upfront.
Info for tileset creators: the following files and directories have to be present and will be loaded if a tileset
name (example: "AWESOME") is set:
• Data\Terrdata\korea\texture\texture_AWESOME.bin
• Data\Terrdata\korea\texture\texture_AWESOME\*
• Data\Terrdata\korea\terrain\THEATER_AWESOME.L2
• Data\Terrdata\korea\terrain\THEATER_AWESOME.O2
In addition, the following autogen tree textures can be used (BMS will fall back to the default
trees1_summer.dds and trees2_summer.dds if not present):
• Data\Terrdata\misctex\trees1_summer_AWESOME.dds
• Data\Terrdata\misctex\trees1_winter_AWESOME.dds
• Data\Terrdata\misctex\trees1_spring_AWESOME.dds
• Data\Terrdata\misctex\trees1_fall_AWESOME.dds
• Data\Terrdata\misctex\trees2_summer_AWESOME.dds
• Data\Terrdata\misctex\trees2_winter_AWESOME.dds
• Data\Terrdata\misctex\trees2_spring_AWESOME.dds
• Data\Terrdata\misctex\trees2_fall_AWESOME.dds
17-236
BMS TECHNICAL MANUAL
CHANGE 0
1) Look for a "tileset" entry in the ".tdf" file. If found, use it. If not,
2) Look for the tile name config entry in the regular "Falcon BMS.cfg" file. If found, use it. If not,
3) Look for a "generic" tileset named "theater" (without any "_<name>" postfix). If found, use it. If not,
4) Fail.
# which tileset to use - overrides the global setting in the cfg file
# tileset POLAK
# movies
# uisounds
# default objects
# misc textures
# 3d object files
# sounds dir
17-237
BMS TECHNICAL MANUAL
CHANGE 0
# simdata dir
17-238
BMS TECHNICAL MANUAL
CHANGE 0
There are a few requirements. First is that it needs the correct OCD Id (CT+100), so in our example, 3810 +
100 for the Vinson. Use correct Id and CampId and place the objective at X=0 and Y=0.
The TACAN and UHF/VHF stations are linked with the CampId number; this is why you cannot have the
same carrier twice in a TE or campaign.
17-239
BMS TECHNICAL MANUAL
CHANGE 0
These objectives will never be displayed on the map but will be automatically associated with the carriers
when needed. If you don’t create these objectives in the tac_new.tac or campaign files (save#.cam), the
carrier code will not work.
The good news is that for KTO, Mission Commander takes care of these requirements: once your task force
is created, you can add an Objective, type airbase, subtype the carrier of the task force you just created,
and both OCD Id and X/Y values will be correct. Additionally, in the “Units” tabs, if your carrier is improperly
defined in the DB, it will be highlighted in orange. For other theaters, at the moment, you have to do this
process by hand in TacEdit.
Use default KTO BMS te_new.tac as a basic example. Be aware that Mission Commander only allows adding
objectives starting from the default campaign saves (save0/1/2.cam), or the te_new.tac.
17-240
BMS TECHNICAL MANUAL
CHANGE 0
18. IVC
Warning: This chapter hasn’t been updated since 4.32
The current implementation in the game code is based on use of an external voice client program run by
each player and a remote voice server program that may either be hosted by one player or resident on a
separate server system.
There are a number of potential candidates for the client and server voice programs and the code inside the
game is designed to be agnostic to the choice of voice client in particular while still offering the ability to
control the client from within the game, using the realistic radio and HOTAS controls. This is accomplished
by use of a shared memory structure for the game code to provide status to the client program. Any client
modified to read the shared memory state can in theory be used to deliver a good voice communication
solution.
To make things a little simpler, one such client/server program combination is provided as part of the game
install. We are very much indebted to TeamSpeak Systems GmbH/Triton CI Associates for permission to use
the TeamSpeak 3 SDK for this development work.
In essence, the voice system implemented for Falcon4 BMS includes therefore three components:
• The voice client program, also based on the TS3 SDK; and
• Code in the game designed to provide command and control to the local client program.
If you are wondering about the former IVC implementation that was based on the Microsoft DirectPlay
Voice system, this has been removed from the game. Since Microsoft withdrew support for this system
some time ago and it wasn’t possible to make it work on Windows 7 or newer versions of the operating
system, we needed a new approach and that is what you see in the TS3 SDK based programs.
One important note up front: the client and server programs based on the TS3 SDK are
NOT – repeat – NOT compatible with the normal TeamSpeak client and server programs
available from the TeamSpeak web site.
The SDK programs have a different enough implementation that you can’t mix-and-match components. In
effect, the client and server programs included with the Falcon4 BMS install are only usable with other
copies of the exact same programs. Please don’t ask how to change this so your existing TS3 (or TS2 for
that matter) server or client can participate in the voice communication systems – it’s not possible.
The folks at TeamSpeak/Triton have really done us a good turn with the licensing on this code now. You
may all use it with Falcon4 BMS – we can theoretically have as many copies running at one time as we like.
18-241
BMS TECHNICAL MANUAL
CHANGE 0
We can run the server as long as we like and as often as we like. Obviously Triton intends for us to be able
to get what we need from this tool set to support Falcon4 BMS. If we abuse this Triton has the ability to
revoke the license; so please, be mindful of this privilege for all our sakes.
• ONLY use the client and server code in concert with Falcon4 BMS.
• Do NOT try to use the client with a standard TS3 server – this won't work anyway.
• Do NOT try to use the server with standard TS3 clients – this won't work anyway.
• Virtual squadrons may run voice servers 24x7 but please run as few as practical.
• Don't start the server exe yourself unless you really need to do that.
• If you run your own voice server standalone for a game, please terminate it when your mission
finishes.
• There is a 32 player limit on any one voice server at any one time.
Every one of you has a responsibility to the others in our community; anyone can screw this up for
everyone else with a moment's selfishness or thoughtless behaviour; be wise, please and we should have
no problems.
When you start the server exe, a cmd/DOS box pops up. That's mostly there to show status. It has a small
set of ‘commands’ that you can enter in the box. Unless you need to for some reason, the best advice is to
leave those alone – they come from the TS3 SDK example server code and we left them for possible use in
debug. We haven't tested them other than to discover that at least two of the options _will_ crash the
server exe.
If you run the exe on a machine that has a fully qualified domain name or an IP address that is routable (e.g.
a machine that is direct connected to the internet) no other preparation is required – just give that IP
address to your prospective flying partners for them to use as the voice server address and let them
connect.
If you run the server exe on a system that is behind a NAT router you will have to forward the 3 ports above
to the LAN address of the system running the server exe. The code uses only UDP so there is no need to
forward TCP. Failure to forward the ports will render the server accessible to LAN clients only. Assuming
that you have correctly set up port forwarding, tell your prospective flying partners the WAN IP of your NAT
router and tell them to use that as the voice server IP address. Usually that address is one that's routable,
given to you by your ISP, and most often delivered via DHCP when your router connects to the ISP (but not
always, YMMV).
18-242
BMS TECHNICAL MANUAL
CHANGE 0
The server supports a number of command line options to control its behaviour. One of those is –h which
prints out the following usage message on the console and then exits the program.
Usage: IVC Server [-h] [-i <arg>] [-p <arg>] [-w <arg>]
Help - -h: print this usage message and exit
Addr - -i <addr>: sets the IP address that the server should bind to
Port - -p <NNNNN>: sets the 4-digit value as the base port to listen on for this server
(port, port+1
On some systems with more than one network connection, it is possible that there is more than one
network IPv4 address by which the system is known for remote connections. The –i option allows you to
specify the IPv4 address on which the server will listen for incoming connections and voice data traffic. The
format of the address is the typical 4-number integer representation where each number is separated by a
dot character. For example you might use –i 127.0.0.1 (although that’s probably not very useful in
practice!).
As mentioned above the server uses three UDP IP ports with well-known defaults. In some cases it may be
useful to have the server listen on different ports and the –p <NNNNN> option makes this possible. The
argument for this option is a single integer that defines the lowest port number or a set of three
consecutive ports that the server will use. For example –p 22222 tells the server to use ports 22222, 22223
and 22224 for connections. The help description above says ‘4-digit’ but actually any valid port number will
work so long as the set of three ports keyed off the number supplied as the argument are not in use by
other programs.
The server does support code word access and that is enabled with the –w <str> option. This is a
supplemental credential that you can customize to your server and that all clients would then need to
present in order to connect. This can be used to limit access to a given server to people that know the code
word to use in order to connect to the server. To set an access code word, start the server exe with a single
word following the –w command line argument. That word can be arbitrary length but only the first 8
characters are considered. It is possible to use non US/English characters in the code word but results may
be mixed so it's recommended that you stick to the ASCII printing characters a-z, A-Z, 0-9 and punctuation
marks for best interoperability.
When I start the server exe, the cmd/DOS window pops up and this is what it should say if it's working
correctly:
TeamSpeak Server 3.0.0-beta6 [Build: 11633] SDK
(c)TeamSpeak Systems GmbH
18-243
BMS TECHNICAL MANUAL
CHANGE 0
I have done nothing other than start the server to get the above output. I don't type in any commands once
the window appears. The server is now open for business. There are 3 virtual servers running in the context
of this one exe – one virtual server each for UHF, VHF and GUARD radio frequency sets.
Notice, no mention of the code word in the output there... you'll have to keep track of whether you started
the server with one or not.
For the list of command line interface commands the ones that list states are probably safe. The ones that
change the state of the server you should avoid; at least for now. The exception to this rule of course is “q”
which you are encouraged to use as soon as practical once you have finished using the server in order to
shut it down.
The person with the most bandwidth and fastest machine should be the voice host, and maybe even the
mission host as well depending on the clients. In large missions with humans, running a voice host and the
mission can induce quite a load on the host machine and lower frame rate can be expected. When
possible, have one person with a lot of bandwidth and CPU power host voice and another with high
bandwidth/CPU power host the mission. Ideally, the best way to use IVC is with a separate dedicated voice
server system.
For instance, a virtual squadron may have a couple of different voice servers in various parts of the world at
some point. To that end, I will probably have two shortcuts that auto-connect me to each one separately
with the appropriate frequencies pre-selected and set up so I do no more than launch the client and then
start mashing the PTT to talk to the other pilots.
So, how's this all going to work you ask?? Good question! Here's a picture of the usage/help text dialog:
18-244
BMS TECHNICAL MANUAL
CHANGE 0
[Note: this image was taken on Windows XP. For some reason the dialog aspect ratio default makes it look a lot less tidy on
Windows 7 or newer and changing that in the code library used for the client seems “impossible”. The information is the same in
all cases though.]
You can enter command line options either by launching the applet from the cmd prompt or by setting the
command line string in a Windows shortcut.
You can use any or all of these switches and options in combination; a few have interactions with each
other as will be noted.
You can use the /<letter_name> syntax or the longer --<switch_name> choice but note that with the slash
version you just follow with space and a string for the switches that require an option <str> to be present
whereas the --<switch_name> form requires the =<str> (no space) construction so far as I know (latter not
tested much because frankly I think the / notation is easier). I did discover by accident that -<letter_name>
(i.e. single dash plus letter name) seems to work too, by the way.
If you put in a switch that is not recognized, fail to provide an option <str> where one is required or
otherwise mangle the command line so the applet can't figure out what you meant, then you get the above
dialog box and the client will exit immediately after you click on the OK button.
Case IS significant for these options. Be careful as some are upper case now in addition to the lower case
ones.
• Connect: /c or –-connect
If present, this will cause the client applet to attempt to connect immediately the program starts.
Be careful using this one alone because by default your nickname is "noname" and the server
address entry isn't either a legitimate ip address or translatable hostname. In other words, expect
this to fail unless you use the other appropriate options as well as this one.
• Duplex: /d or –-duplex
18-245
BMS TECHNICAL MANUAL
CHANGE 0
If present this causes the client to operate on half duplex basis in all modes, pre-game, Falcon4 BMS
UI and 3D world. If not present, the client operates on full duplex basis for pre-game and Falcon4
BMS UI but you get half duplex in 3D world. Half duplex means that when you transmit, all incoming
sound is muted. Full duplex is like the telephone: you can talk over each other if you want. Half
duplex is how the radio should work for the 3D world to model the real thing. The sound effects
follow this option too – if you enable it for pre-game for instance, then you get mic clicks mixed in
with all transmissions.
• Help: /h or –-help
This one is special...you can put it anywhere in the command line and all other options and switches
WILL BE IGNORED. This causes the usage dialog box to show and from there the program will exit.
Do not pass "GO!" do not collect 200 local currency units, no soup for you!
The rest of the switches and options act alone or in combination provided there is no /h... You can
enter switches and their option strings (if required for a switch) in any order you like...order is not
significant.
Another useful property of doing this is that it means you can start the client, connect and start
talking all the way into the Falcon4 BMS UI and on into 3D without interruption. Without the hook,
when you start Falcon4 BMS (especially in full screen mode; or if you click on some other
application and give it foreground focus) you can't transmit again until the COMMS->connect
18-246
BMS TECHNICAL MANUAL
CHANGE 0
operation completes successfully. With the hook, the PTTs make the client transmit regardless of
what window has focus at the expense of stealing F1 / F2 / F3 from any and all other
applications.
One extra note: when you go through COMMS->connect and reach the connection
established dialog box, the low level hook is removed if it's active at this point.
That allows you to still use F1 / F2 / F3 for normal avionics key bindings in the 3D world. For
the avoidance of doubt the hook is set when the applet is launched and remains in place until the
applet closes (yes, it's active even after Falcon4 BMS closes because the applet resets the hook
when you leave Falcon4 BMS...so no F1 / F2 / F3 in other apps if you don't also close the applet
but it will release the keys back to Windows if you then close the applet as well as Falcon4 BMS).
Note: the log file is one-shot so every time you start the applet any previous content is
deleted. Keep this in mind if you are asked for log files to match specific game
circumstances.
• Minimize: /m or –-minimize
This launches the applet to the taskbar instead of showing the full window on the screen. The BMS
code launches the client this way when it auto-launches for you and that's mostly why the option
exists but when used in concert with other options you can get the effect of being magically
connected to the voice server and talking away all while the client UI is tucked away out of sight.
NOTE: I was trying to get the auto-launch of the client by the Falcon4 BMS code to be
silent/background but this doesn’t always work properly. When Falcon4 BMS auto-
launches minimizes the client but it may also alt-tab away from the BMS window. Good
news is that alt-tab is fixed to work properly now so the remedy is just to alt-tab back to
the Falcon4 BMS window and you should see the game UI again (no more black-screen/
partial screen paints). If this behavior offends your sensibilities you can either: a)
educate me how to do this kind of launch from a full screen DX application so that it
doesn't alt-tab; or b) if you can't do a) then I recommend just pre-launching the client.
18-247
BMS TECHNICAL MANUAL
CHANGE 0
For clarity this means players using the IVC client standalone or who have connected to the host but
not yet joined the network game (sometimes known as “first chat”) will NOT be audible to you if
you are in the 3D world already. By contrast, players joined to your network game and seated in a
flight will be audible to you if your radio is tuned to the frequencies used in the UI (see Setting the
UI Radio Frequencies below for more information on setting team frequencies).
In addition to filtering in and out messages as above, the seat option also applies radio sound
effects (see chapter “Radio Sound Effects” below) using the position of your aircraft and the
position of the remote player’s flight in the 2D world coordinates to determine audio quality.
➢ None
This means that you will not hear any remote player unless they are connected to your network
game and they are also in the 3D world on the same voice server and frequency as you.
➢ Awacs
This choice is similar to the default seat option. The only difference is that instead of using the
position of the flight the remote player has selected for radio sound quality calculations, the
position of the AWACS assigned to cover your flight is used. If no AWACS is assigned for the
mission and this option is selected then the range used will be nominal (i.e. you hear little to no
signal degradation).
➢ all
This means that you will always hear any remote player regardless of whether they are even
running Falcon4 BMS or not with the only proviso being they are connected to the same voice
server and speaking on a frequency to which you are tuned of course.
18-248
BMS TECHNICAL MANUAL
CHANGE 0
This switch causes the numeric value of <str> to be used as the base IP port address for the client to
use in trying to talk to the server. The client uses 3 ports so this one <str> number is the first and
the others are one and two more than that respectively. So if I put in /p 8086 the client will use
ports 8086, 8087 and 8088 to reach the voice server (it may also transport your hardware to
somewhere between 1978 and 1979 and reduce your system to 8-bit processing mode...don't say I
didn't warn you!). In general there is presently no way to change the ports that the server binary
listens on anyway so you are best off ignoring this option anyway...it's there for future growth. The
string you enter must be a decimal number made up of the characters zero through 9 inclusive.
If you happen to be running a server binary on your system own you must still enter the address for
it – you can use localhost or 127.0.0.1 and that should work in that case. This option is useful in
combination with /c because in that case it will launch the applet and go ahead and attempt a
connection to the server you specify with this /s option in the <str> field. FQDN's must be less than
60 chars long also.
18-249
BMS TECHNICAL MANUAL
CHANGE 0
you, no server side management required]. The <str> in this case can be anything but keep in mind
that the game universe uses 6 digit decimal integers to represent frequencies -- essentially the MHz
value times 1000 to remove the decimal – Osan tower is 308.800MHz so the <str> to use so you can
hear players on that frequency is: /u 308800.
By the way, if you leave this option off and still use /c and /s, you are connected and the UHF radio
ends up tuned to a channel imaginatively called "Default channel". Channel name <str> values must
be 60 characters or less. Remember, you can only talk to people on the same channel as you so if
you use this option to select something other than the default channel to join, initially you will end
up unable to talk to people who just start the client without this option.
The <str> in this case can be anything but keep in mind that the game universe uses 6 digit decimal
integers to represent frequencies – essentially the MHz value times 1000 to remove the decimal. By
the way, if you leave this option off and still use /c and /s, you are connected and the VHF radio
ends up tuned to a channel imaginatively called "Default channel".
This is NOT the same as the UHF default channel. They are separate radios don't forget! Channel
name <str> values must be 60 characters or less. Remember, you can only talk to people on the
same channel as you so if you use this option to select something other than the default channel to
join, initially you will end up unable to talk to people who just start the client without this option.
18-250
BMS TECHNICAL MANUAL
CHANGE 0
If present this switch causes the IVC client to launch with the “Force local control” checkbox
enabled. This is useful for scenarios where you intend, for example, to play the role of AWACS
controller using the IVC client to communicate with players in the 3D world while you remain in the
2D UI watching the theater map view. If you use this switch you can join the network game and the
game code will not take over control of the client. That in turn enables you to enter specific radio
frequencies in the IVC client as required to talk to one or more player flights during the mission.
NB: you can also achieve the same result by connecting to the game with IVC disabled in the game’s
COMMs dialog if you previously started the IVC client before launching the game. Using /F may be
more convenient in that it doesn’t require you to remember to disable IVC in the COMMs dialog or
to keep multiple phonebook entries for the same game host with and without IVC enabled.
• Loudness: /L or –-loudness
What this does is turn on an audio compressor effect for incoming radio voice. The compressor
reduces the dynamic range of the voice sound data and then it boosts the whole resulting signal
waveform in amplitude which effectively makes it sound a little less "hifi" but overall higher in
volume. Since we're not aiming for hifi anyway, this should be useful to you if you want to make the
remote players sound a little louder than they do by default.
Think of this like a LOUDNESS button on a home stereo or car stereo system; apparently a lot of hifi
kit and quite a bit of transceiver equipment do this same trick to squeeze max volume out of
received signal. To me it sounds a bit more "boomy" with -L than without but it's definitely louder in
volume. Off by default.
18-251
BMS TECHNICAL MANUAL
CHANGE 0
This option allows you to pre-select the sound device that will be used for speaker or headphone
output from the IVC client. The strings to use for naming the devices are going to be specific to
your system. You will notice from the client UI that the list of possible options for this device is
shown in the dialog box – so long as the string you provide with the command line option matches
one of those strings, pre-selection should work.
Note: this means that a value of +6 actually amplifies the incoming voice level so it's LOUDER than
normal...mind your ears. Minus values reduce the volume below the norm. [NB: this range of
adjustment in the minus area is less than the range that can be commanded via control in the game
– disagreements on volume levels with pre-game options and in-game levels can result in jumps in
volume level as you move from one environment to another...it's up to you to manage this if you
don't want the jumps!]. For the technically minded these are interpreted to be a decibel
value...which is why minus means quieter and so on.
Note further that it’s possible that -6 (i.e. -6dB below normal max volume) could be quite loud,
especially for the “wave” based mechanization; the volume level is controllable in the game
universe via the INTERCOM knob.
Use this option to change the default volume level for the UHF radio channel. This also affects the
GUARD receive channel as well. The range of usable values is +6 to -6 (yes, you can put the '+' and '-
' symbols in <str>). The default volume, which the TS code sets to "normal maximum", is
accomplish by either leaving out this option or explicitly using it and providing '0' as the option
string.
Note: this means that a value of +6 actually amplifies the incoming voice level so it's LOUDER than
normal...mind your ears. Minus values reduce the volume below the norm. [NB: this range of
adjustment in the minus area is less than the range that can be commanded via control in the game
– disagreements on volume levels with pre-game options and in-game levels can result in jumps in
volume level as you move from one environment to another...it's up to you to manage this if you
don't want the jumps!]. For the technically minded these are interpreted to be a decibel
value...which is why minus means quieter and so on.
18-252
BMS TECHNICAL MANUAL
CHANGE 0
Use this option to change the default volume level for the UHF radio channel. The range of usable
values is +6 to -6 (yes, you can put the '+' and '-' symbols in <str>). The default volume, which the TS
code sets to "normal maximum", is accomplish by either leaving out this option or explicitly using it
and providing '0' as the option string.
Note: this means that a value of +6 actually amplifies the incoming voice level so it's LOUDER than
normal...mind your ears. Minus values reduce the volume below the norm. [NB: this range of
adjustment in the minus area is less than the range that can be commanded via control in the game
-- disagreements on volume levels with pre-game options and in-game levels can result in jumps in
volume level as you move from one environment to another...it's up to you to manage this if you
don't want the jumps!]. For the technically minded these are interpreted to be a decibel
value...which is why minus means quieter and so on.
Option, takes a numeric argument in the range -40 to -1 (quietest to loudest). This is similar to the
AC power hum, ambient noise in the incoming transmission in more of a hissing form. This option
can be used to adjust the volume of this tone to taste. The default value is presently -5 for this one
though I have it on reliable authority from experts that do this all day that -18 might be a better
choice for this option also.
One useful way to use these is with shortcuts. Perhaps make a folder of shortcuts for each of the voice
servers you expect to work with. Let's assume that I want to auto-join the server and use the same
UHF/VHF frequencies that BMS is set up to use by default in the game UI chat/mission screens. Given the
server address we are using as an example I'd make a shortcut that has this command line:
“c:\FalconBMS\Bin\x86\ivc\IVC Client.exe” /c /k /n Viper /s ivc.mydomain.org /u 307300 /v
1234
I could add a /m in there as well to have it launch to the task bar instead of opening a window initially as well
perhaps. I'd probably rename the shortcut to something pithy like "mydomain IVC" and call it good from
there.
18-253
BMS TECHNICAL MANUAL
CHANGE 0
In all cases if a command line argument is present for some option or switch, that command line option
takes precedence over the content of an ini file. You can specify the name of the ini file with the "-i ini-
file" option which takes the name of an ini file (without the .ini extension) as an argument to select which
file to use. In the case that no ini file is specified, the app looks for the default on which is named for the
app ("IVC Client", which would be named with the ini extension).
Note: the app looks for the default ini file every time unless there is a -i option on the
command line.
If you are really feeling perverse, using -i nonexistentfile.ini (where no such file exists) will cause the app to
bypass the default file and since there would be no file by that name, you'd skip any parameterization by ini
file content. In the case that there's no -i option, it always looks for an "IVC Client.ini" in the directory
where the "IVC Client.exe" file is located and will load that such that any options and switches in there will
take effect provided no equivalent command line options are present (remember: command line options
and switches always take precedence over any ini file setting if both are present).
One other way to say all this which might help, here's how the client deals with options and switches
procedurally:
• The exe looks for a "-i filename" option on the command line
➢ if it finds -i then it uses filename.ini and tries to open that to look for more options and
switches
➢ if it doesn't find the filename.ini then no ini file content is used in what follows
• if there is no -i option, then it looks for the default of "IVC Client.ini" for more options and
switches
➢ if the default ini file is not found, then no ini file content is used in what follows
In general the easiest thing is to place any ini file(s) you want to have in the directory with the IVC Client
executable since the code looks in the install directory of the app. Format for lines in the ini files is:
<key> = <value>
18-254
BMS TECHNICAL MANUAL
CHANGE 0
duplex = 1
Sets the client to half duplex mode even before the game enters the 3D world regime.
The key values are the same as the long form of the command line option/switch names so the above
example is the same as setting a -d switch on the command line for the app.
For switches like -d that have no arguments they are enabled in the ini file with a value of 1 (and only 1 will
do; anything else will be interpreted as disable for that capability).
Other keys that are equivalent to command line options that take an argument use the same format for the
value as on the command line. So an example there would be:
nickname = starbuck
Only one ini file is used at a time so if you specifically select one with the -i command line option, the values
in the default (app named) ini file are ignored.
Some general advice and suggestions about the ini file having played with this a bit in testing.
If you are a person that starts the app before going into the game, the ini file can be a handy way of setting
up automated connections to a pre-selected server. Put:
server = thehostname
nickname = starbuck
connect = 1
in the file called "IVC Client.ini" that is located in the same directory as the IVC client executable file and the
app will automatically pick up your name and connect you to the host called thehostname.
You could have separate ini files for different hosts that have "server =" lines that match the hostnames for
each that you connect to and then you get a separate profile per voice host. Just use a -i command line
option to select the file this_host.ini from that_host.ini for example as "-i this_host".
What I have decided to do is put the options and switches that are common to all connections I hook up to
in the default file and then use separate shortcuts with command line options to pick out the host I want to
connect to at any given time. One advantage to this strategy comes up in the rare case that the client
crashes in mid-game -- if that happens Falcon4 BMS will attempt to relaunch the client for you
automatically...having the choices I want in the ini file for all connections means that these are applied in
the restart case (remember: you can't set command line options or switches once you are into the game,
Falcon4 BMS just launches the IVC client with defaults for you if you didn’t start it before the game)
because even in that case the app does read ini file content on restart. This isn't a problem because the
parameters you entered for server and the channels you are tuned to etc. are all communicated to the app
on restart directly by the game code...in other words the default ini file content there allows a restart to
ensure you have the same settings even if you launched the app with command line options and switches
or a host-specific ini file.
18-255
BMS TECHNICAL MANUAL
CHANGE 0
Note that a line prefixed with a # is treated as a comment and ignored by the client. What the other lines
do is:
• disable the duplex option (yes, I know that's off by default so same as line not being there but this is
an example of how you could quickly turn this capability on and off...simple edit to "1" for the value
and duplex would be then set to on);
• sets localhost to the place to look for a server to connect to (yes, "localhost" works fine for this if
you have a server running on the same machine as the client);
• sets my nickname;
• sets the app to try a connect on start-up;
• enables sidetone using the loopback mechanism and since I'm on Win7 for this machine it specifies
the 4th (zero base counting remember) device in the record mixer set as the one to turn on for
transmit feedback to yourself;
• enables the audio compressor loudness;
• sets initial UHF frequency to 307.300MHz;
• sets initial VHF frequency to 1234 (which is the UI F2 default);
• sets the key hook switch that means that F1 , F2 and F3 key presses are sent to the app
regardless of whether it has focus until you enter 3D world in the game (at which point this hooking
is suspended to allow you to use those keys for in-game functions);
• enables the simulated have quick channel hop clicks;
• sets the hum volume to -18dB...rumor has it this is the "best" choice;
• sets the hiss volume to -18dB...rumor has it this is the "best" choice here too;
• sets the sidetone volume to max (-6dB to +6dB range of adjustment);
• sets the UHF volume to 2dB above default;
• sets the VHF volume to 1dB below default;
• makes all players on my voice server and frequency who are connected to my network game but
not in 3D world sound like they are transmitting from the AWACS jet while I am in 3D world; and
• enables debug logging to a file called radio-log.txt (also found in the IVC client binary’s directory).
18-256
BMS TECHNICAL MANUAL
CHANGE 0
If you start the client applet with no command line arguments, you should see a window like the one above
as a result. Note: the listed sound devices will vary depending on your system hardware. Focus first on
the Server Connection group of controls.
In the Nickname box fill in your callsign or equivalent. Note that when you get into a multiplayer game the
content in this field is overwritten with the name that matches your logbook as selected in the game
configuration. It’s going to be less confusing if you enter the same name (case sensitive) here as the one
you use for your Falcon4 BMS logbook. “noname” is the default nickname pre-entered for you if you don’t
change this field’s content.
In the Server IP/DNS box you type in the routable IP address of the target voice server or a fully qualified
domain name for that server. Note that for a server running on the same system as the client applet, you
can enter 127.0.0.1 or “localhost” – either choice will work to connect you in that case.
The connection status box is informational. As shown above you begin in not connected state unless you
use some of the command line options listed above to automate an initial connection.
Beside the status box is the connect button. Click this to initiate a connection. Note that you will only get
a useful response if the server box contains the correct address or hostname for a system running the
voice server. Pressing connect before entering the address will cause an error.
You will notice that the Radio Frequencies group of controls is greyed out when the applet starts. These
controls become active once a successful server connection is initiated. If you had used command line
options to pre-fill the radio frequencies, you should see those values in the boxes but they are still greyed
out until a connection is made to a valid server.
Once the frequencies group does activate, you can enter channel values and begin transmitting. If there are
no command line options used, you will initially be connected to the server and each of your radios placed
18-257
BMS TECHNICAL MANUAL
CHANGE 0
in a frequency called “Default channel” (UHF and VHF transceivers both have separate default channels so
you have to transmit on the right radio to talk and be heard).
In the UHF Freq box you can type in any string value. When you click on the Change FRQ button to the right
of that box, you will be connected to the channel named by the string on the voice server. Choice of string
is completely up to you but the most useful way to use the applet is to enter strings that represent entries
in the radio frequency domain that you can use inside the game. To do that, enter a string with six digits
that represent the MHz frequency multiplied by 1,000. For example, if you wanted to dial in Osan tower in
your UHF channel, enter the string 308800 to represent 308.800 MHz. You must click on Change FRQ for a
newly entered string to put you in a new channel. Hitting ENTER after typing the string moves the window
focus from the text box to the Change FRQ button so you can type “308800”, ENTER then ENTER again and
that will be a shortcut for clicking on the Change FRQ button as well. The UHF band frequencies are from
225.000-399.975 MHz in 25 kHz stepping, just like the real thing.
The VHF box and Change FRQ button operate exactly the same way but the recommended frequency range
to use is different. The VHF band frequencies used in the game are from 116.000-151.975 MHz in 25 kHz
stepping.
The volume boxes allow you to enter numeric values to a maximum of 6.0 either side of zero. These are
decibel values that modify the radio output volume. Zero is the default sound level. Plus 6.0 is the
maximum amplification above the default (caution: sound may overdrive and clip depending on your
hardware). Minus 6.0 attenuates the volume level significantly. Note that the UHF volume also controls
the volume of the GUARD transceiver – these cannot be modified separately. The intercom volume
reflects the level of sidetone volume and hence this value will have no effect unless sidetone is activated
(see below).
The three radio buttons to the right of the control group are informational. These activate when you press
and hold one of the push to talk keys: F1 , F2 and F3 for UHF, VHF and GUARD transceivers
respectively. If you want to talk for a long time and not to have to hold down the PTT key for a given
channel, then you can click on the active check box for that radio which is the equivalent of holding down
the PTT. Click a second time to release it or press and release the PTT; either will clear the check mark and
cease transmission.
Oh and let me forestall one thing right away: there is no way to change the PTT keys for the applet F1 , F2
and F3 is all you get. The Falcon4.0 precedent rules!
There is also a checkbox for Automatic Gain Control – this is enabled by default and seems to work
reasonably well most of the time. Being able to turn this off for the applet may help some users so the
option is there if you end up needing it.
The last gadget in the radio frequencies grouping is a "force local control" check box. Most people should
stay away from this. The purpose of it is to prevent the applet code from looking for Falcon4 BMS and
hence to prevent the client from being slaved to the Falcon4 BMS code. This can be useful in scenarios like
debug or when you are playing the role of AWACS controller but probably not useful outside these types of
usages. If you click it while Falcon4 BMS runs, then you will likely be disconnected from the server if you are
connected at the time. It’s not totally clear that it’s safe or reliable to disconnect in this fashion
however...changing this setting while the game runs is at your own risk: you have been warned!
18-258
BMS TECHNICAL MANUAL
CHANGE 0
Below the Radio Frequencies group is the Sound Device control group. This presents two list boxes with
choices for the microphone input device and the audio output device. The strings here represent what you
would use if you wanted to use the command line options listed above to preselect which device(s) to use.
In the applet UI, you can use the lists by clicking on the devices you want to direct the client to use for
sound capture and audio playback. Note that while the selection for each is independent, most testing and
likely the most reliable way to work with this, not to mention best performance, focuses on using the same
physical sound card for capture and playback. Using the same for both is therefore recommended best
practice.
Finally, note the version number in the bottom right hand corner: all players in a session connected
together via a server need to be using the same version of the client application. The current version to
which this documentation refers is 1.2.8.
The launcher gives you the opportunity to start the voice client applet separately. This allows you to
connect for voice communications in advance of starting the game and making a multiplayer connection.
Among other things, this may be useful to talk players new to multiplayer through the process of making a
connection.
Alternatively if you enable voice communications and the client applet is not running as you press the
“connect” button then the applet is launched for you automatically in the background. In some cases an
alt-tab may be required to bring the game UI to the foreground again once the applet has launched. This
mode more closely resembles the operating model of the earlier DirectPlay voice system and may be more
comfortable for some players.
If the client is running before the game then it runs independently up until the “connect” button in the
COMMs UI page in the game is pressed to initiate a multiplayer game. At that time, provided the “force
local control” gadget in the client applet is not checked, the applet will slave itself to the Falcon4 BMS code.
When the applet is slaved the local user interface controls are disabled and all parameters are driven from
the game. Among other things, this means that if the COMMs UI dialog has any different parameters from
those used to start the applet (such as logbook name or voice server address), then the applet is directed to
disconnect and then reconnect with the settings from the game UI.
There is some amount of error recovery built in to the voice system so if for some reason the connection to
the voice host is lost or dropped, then attempts are made to re-establish communications. Absent any
error though, the connection is maintained as long as the game runs. When you exit Falcon4 BMS, the
connection to the voice host is terminated and local control is return to the UI for the client applet.
18-259
BMS TECHNICAL MANUAL
CHANGE 0
There's a wav for each of the mic activation clicks on start and finish of a transmission. Some folks don't like
the idea of the lead-in or end-transmission clicks – if that's you, simply rename or remove the
corresponding file and the sound won't be played.
In previous versions there was a fixed wav file that provided an ambient background noise when you
transmitted in the 3D world. This has been removed and replaced by a more dynamic system digital signal
processing code which is applied to incoming voice data before it is played back to your sound output
device.
There is also a 'block' wav. This one is LOUD and sort of obnoxious by design; in case you are wondering it is
taken from a real radio clip. This one is played when more than one person is transmitting on the frequency
you are listening to and represents co-transmission interference. Obviously you can only run into this one if
three or more people are on the frequency; you listening and at least two others talking over each other.
Note that the blocking sounds interact with the half-duplex transmit mode that is also included in this
update: when any person transmits all incoming sound on the frequency is muted for that person. Thus in
the case of two
(or more) folks talking over each other now, they hear nothing but everyone else not already talking on the
channel gets an earful. Be careful what you wish for!
In the past, the option to force half-duplex operation meant that you heard background noise and blocking
sounds in the UI as well as in the 3D world. This is no longer the case: sound effect processing is limited to
operation when you are in the 3D world although you can still force the UI to operate in half duplex mode.
It may be worth noting that this is one of the bigger compromises in the model: the block sound is taken
from a real aviation radio recording so it’s realistic but it is not realistic that this would be what you hear
every time for every combination of transmitters stepping on each other’s transmissions. Making this effect
more dynamic is an area for possible future enhancement but for now there is a single, uniform effect to
indicate that the channel was blocked.
The format of the fixed wav files is: 48kHz sample rate, 16-bit, single channel audio (and for the really
technically inclined the “format length” value in the header can be 16 or 18 and should still work so long as
the data is consistent although actual “extra format” info is not used if present). If you choose to replace or
edit the files supplied, your replacements should follow the same format.
For the most part this consists of attenuating and then filtering the otherwise-clean recorded sound and
adding ambient and radio system derived noise.
18-260
BMS TECHNICAL MANUAL
CHANGE 0
Among other things this works best in the 3D world because player positions relative to each other are used
to calculate the type and extent of effects to apply in real time. As the implementation of these calculations
is described, keep in mind that this is a model of how real radios operate designed to give you a more
realistic impression. Said another way, this is not an attempt to model with extreme accuracy the very
complex and tricky business of getting one pilot to talk to another pilot using real world MILSPEC
equipment. Making a completely accurate simulation of radio traffic would require more code and CPU
budget than we can reasonably afford for this one feature of our game world. As such, there are some
compromises built into the model presented. However, I hope the end result is an improved experience
relative to the formerly rather sterile radio system from earlier versions. Expect this model to evolve with
experience and as better data and documentation become available.
The primary input for the DSP calculations is the position of the speaker’s aircraft relative to your jet as
receiver in the 3D world. This is presented in the form of a slant range and AGL height for the purposes of
the model (this is all taken care of for you by the applet in concert with the game code).
There are a number of factors that are blended into calculating the exact parameters used for DSP effects
as one player talks to another. These include:
• Transmitter power models typical aviation radio sets for tactical aircraft and ultimately power limits
potential effective range for any signal; and
• receiver sensitivity models the ability of the radio to pull signal out of the radio spectrum and turn it
back into audible voice again based on typical values for tactical aircraft radio sets; and
• channel frequency is taken into account such that other things being equal, VHF signals are stronger
than UHF signals at any given range so VHF has the longer absolute effective range; and
• radio horizon is modelled so that if there is no line of sight between players because of simple
curvature of the earth, then you will not hear an incoming transmission; and
• similarly, if there is no direct line of sight between players, then you will not hear any incoming
transmission; and
• free space signal path loss is used to determine signal strength from the transmitting player as it
arrives at the receiver; and
• terrain and some atmospheric interference impact modelling is used to further refine signal
strength from the transmitting player based on range and height above terrain for receiver and
transmitter.
In practice, the terrain interference model and the radio line of sight constraints are the ones that you will
run into most often. If you are flying nap of the earth through rolling terrain or mountains you may lose line
of sight for transmitters who may in fact be well within effective radio range as measured by the other
constraints. Equally, players flying along at a few hundred feet AGL but separated by tens of miles may find
themselves unable to talk without first climbing a few thousand feet to get out of the ground clutter.
The effects are calculated dynamically such that radio signal perceived quality will degrade as signal
strength falls. Unless you run into one of the hard line of sight constraints the path loss models
progressively reduce signal strength up to the point where remaining strength is below the modelled
receiver sensitivity. As signal strength approaches receiver sensitivity threshold, the received audio will
reduce in volume and there will be more distortion and in the limit the signal will break up and become
intermittent before disappearing entirely once the threshold of receiver sensitivity is breached.
18-261
BMS TECHNICAL MANUAL
CHANGE 0
[Again for the technically inclined: the terrain interference model is loosely based on the Egli model and
other similar terrestrial signal propagation models, but adapted for aviation antenna heights based on input
from pilots about expected radio performance. Most of the path loss models that deal with terrain effects
that are well documented in public sources tend to focus on terrestrial based antenna systems for both
transmitter and receiver (TV, cellular etc.). Clearly though, terrain interference has the potential to affect
tactical aviation radios; although that’s likely to happen at longer ranges and higher AGL values than would
be typical for the terrestrial radio models.]
18.5.2 Sidetone
Sidetone refers to the idea of a small amount of your own voice content spoken into the microphone being
fed back to you in real time through your speakers or headphones. Almost everyone will be familiar with
the phenomenon even if not with what it is called: if you have ever used a plain old telephone you will have
heard yourself in the earpiece as you speak into the receiver/handset. The reason this exists is to help you
modulate how loud you are as you speak into the microphone elements – take away side tone and you have
no reference when people on the receiving end ask you to speak up. What’s more, in most practical cases
people have a tendency to yell into microphones to ensure they get heard if there's no side tone feedback
to guide them. Almost every radio transceiver, including gear used in tactical aviation, implements the side
tone capability.
In explaining the implementation and how to use it to the test team, it became apparent that you may need
to consider it something of a feature for advanced users who have a good grasp of the Windows sound
subsystem and how the design of sound mixing works under Windows. It’s simpler under Windows XP than
under Windows 7 or newer. In the latter case, even finding the correct parts of the sound subsystem to use
for this capability can be challenging. There really doesn’t seem to be a way to make this simple so if you
want to use this, be prepared to have your knowledge of sound in Windows tested. If that seems daunting
as a prospect it may in fact be better to simply skip over this section.
The IVC client applet now has the ability to create the effect of side tone for you as an option. As described
above this is enabled with the /t or --tone command line option. There are two basic mechanizations for
this effect: one uses the captured sound from your microphone and plays it back for you and the other
makes use of hardware loopback inside your sound card device that routes audio from the microphone to
your output device. The former is enabled with the “wave” argument (i.e. --tone=wave) and the latter with
the “loop” argument (i.e. --tone=loop). Unless the client recognizes one of those two exact command line
option formulations then sidetone will remain disabled completely.
In all cases, use of the loopback capability of your sound card is preferred. This ensures that you hear your
voice with imperceptible delay. The reason the wave option exists is because of the fact that not all sound
card devices include the hardware loopback capability as part of their design. For example, many USB
headset type devices will not give you any hardware loopback capability.
The drawback with the wave system is that it’s effectiveness is very dependent on how good the
implementation of the sound card driver stack is – in many cases, when you enable wave based sidetone,
there is delay in recording the audio into the client’s memory and then playing it back and that delay means
that you may hear your voice fed back a half second or more delayed…sort of like a giant echo on a phone
line…obviously very distracting and arguably not really useful. Still, some sound card devices may do a good
enough job at low latency record/playback to make wave an option if hardware loopback is unavailable to
you.
18-262
BMS TECHNICAL MANUAL
CHANGE 0
Some experimentation may be required to find the best solution given the sound hardware in your system
and it may be the case that there is no usable solution for you to enable sidetone without changing the
sound hardware in some instances.
Enabling sidetone is further complicated by the redesign of the Windows operating system sound mixing
capabilities between the Windows XP and Windows Vista product generations.
Under Windows XP, if you enable loop sidetone in the client applet, the code will find a hardware loopback
microphone monitor if one is present. The applet will remember mute status and the volume level the
slider was set to before the applet was launched and will restore those on exit. You can actually bring up
the Windows mixer controls window and start the client applet to see this happening.
In the above example the window shows the playback audio volume controls and the one to the far right
labeled “Microphone” controls the hardware loopback. Note in this case it is muted and the volume is set
at max. One tip is to open this window before even starting the IVC applet and uncheck the mute with the
volume at the lowest level and then move the slider up as you speak into your microphone to get a sense of
how much sidetone volume is comfortable for you. You can use that to gauge how to set the initial volume
command line parameter (--toneVol, see above).
When the client starts with sidetone enabled and available you will see the volume level slider move to the
default or the level specified by command line option and the mute will be checked. Then when you press
the PTT you can see the checkbox for the mute clear while you talk and then set again as you release the
PTT. The slider controls the level of sidetone and the mute is used to enable and disable it as you talk,
much as it would work for a real radio set.
If your sound device has no hardware loopback or equivalent, you may not be able to find a slider/mute for
the microphone in the playback volume controls. In that case, wave may be your only option short of
changing the sound device.
Unfortunately, the situation is a good deal trickier on Windows Vista and subsequent Windows versions.
Microsoft changed the mixer controls such that there is no way (literally: the devs at Microsoft central in
Redmond confirmed this directly) to programmatically discover the mute and slider associated with a
particular microphone and sound card device into which that is plugged. At least no way to do it
18-263
BMS TECHNICAL MANUAL
CHANGE 0
automatically without some additional context or a hint in lay terms. This means the format of the loop
option under Windows 7 has a little more information tacked on the end to give that hint.
You find the above page of Speaker Properties Levels settings by right clicking on the speaker icon in the
system tray and selecting “playback devices” to bring up the dialog and then selecting the Levels tab. The
mute control and slider that you are after is on this page, provided of course there is one.
The essence of making this work is to give a number hint as part of the loop argument – it is
programmatically possible to find and control the nth entry on this page. So when you start the client you
would use the –-tone=loop:3 format, adding a colon and a number to hint to the client that the correct
slider to work with is the 3rd (in this example) listed in the Levels tab. The index numbers are zero-based,
meaning the first is “0”, the second one is “1” and the third “2” and so on. Thus it’s possible that you may
need to use –-tone=loop:0 if the very first gadget listed in the levels tab is the one you want to control. This
colon + number suffix is ignored if present in the command line argument on Windows XP, it’s only needed
for Windows 7.
Now there’s a bit more to it unfortunately. Not all the sound control gadgets that Windows will list when
the code enumerates this collection are actually made visible in the Levels tab. It appears that the master
volume (in the picture above that’s the top one above the horizontal rule line across the tab content) is not
counted on some (all??) systems as part of the collection. If that wasn’t tricky enough, in the example
above taken from my laptop you might imagine that the one labeled “Microphone” is the one I want but it’s
not – that is the built in microphone on the machine chassis and with my headset plugged in to the side of
the machine it’s actually the first of the two labeled “Rear Black In” (the second of those entries is actually
the line in input socket…it’s on the side of the machine too, but hey, what do I know…the fact that there are
two controls for separate devices labeled the same exact thing will tell you why an index number and not a
string to declare the gadget you want to use is required…and in case you are wondering it’s the brains that
wrote the Windows driver code for this hardware device that get the “credit” for the exact duplicate names
with misleading geography content for different connections to their device, not Microsoft in this case).
So in my example system, as shown in the picture above, there’s actually one invisible device and I need the
first “Rear Black In” and the master volume isn’t counted. So by trial and error, and unfortunately there’s
no better way to do this, I found that “3” is the correct value to hint to the client to use with my headset
plugged in and “2” is the right number to use if I unplug the headset and use the built in microphone. Again
as above, the best advice for figuring this out seems to be to start the client standalone with a command
18-264
BMS TECHNICAL MANUAL
CHANGE 0
line option to enable sidetone and indicate a device number and then see which if any mute controls flip
state when you press the PTT by watching the mixer levels page of the Speaker Properties dialog. It’s
actually easier to see in practice than it is to describe.
As previously stated many USB headset devices have no loopback and limited sound mixing – I’ve seen
examples of the above dialog box from Windows 7 machines like the one below where all there is present is
a master volume. If that’s true for your system, you may not be able to use loopback based sidetone at all
without changing your hardware.
If you are working with Windows 7 and you have no hardware loopback there is a way to audition the effect
of the “wave” type sidetone implementation.
The above dialog can be found by right clicking on the sound icon in the system tray and selecting recording
devices. From there, highlight the microphone device you plan to use and click the properties button to get
this dialog. Notice in the “Listen” tab there is a check box for “listen to this device”. In effect that is the
same as the “wave” implementation in the IVC client applet. Thus selecting that check box should activate
your microphone so you can hear yourself. If the delay is not noticeable or minimal to the point it’s not
18-265
BMS TECHNICAL MANUAL
CHANGE 0
distracting then using “wave” in the client applet may work for you. If the effect here is too distracting it
will likely be no better in the client.
One last piece of advice about making loopback sidetone work for you: it will likely work better if you select
the same sound card device for input and output in the client applet UI or via the command line arguments
for that. Hardware loopback is typically implemented internal to the device hardware and the chances of
loopback working where one sound card records your voice and a separate sound card plays it back are
much more remote.
In addition to the output of the recorded voice sounds from the microphone input, the client applet also
mixes in a little noise while the push to talk switch is held. This simulates the system and ambient noise
that are typical in aviation radio mic regimes, even ones with noise cancelling capabilities. In the bin
directory there is a WAV file called opencircuit.wav. This is a short clip that is mixed in as a continuous loop
with the sidetone voice audio as you talk. You can turn off use of this effect by removing or renaming the
file. Additionally, if you want to change the sound that is mixed in as you talk you can edit or replace the
contents of the file to have your own preferred sound effect mixed into the playback stream (file format is
as above for the other wav files the client uses).
It is possible to control the volume level of the sidetone played through the headset channel when you are
in the game 3D world environment. This is done with the INTERCOM (12) knob on the AUDIO2 panel shown
above. There is an analog control channel mapping for this control present in the game setup UI or you can
use keyboard callback mappings.
Please note that this is a volume control – for this to work correctly, meaning for you to
perceive smooth change in volume level as you turn an analogue control device
(presumably a potentiometer in most cases) the device must use a logarithmic taper
(sometimes referred to as an “audio pot”). If you use a linear taper potentiometer for
this the effect you will likely hear is most of the settings of the knob delivering no
volume at all and then at one end of the adjustment range you go from nothing to full
volume in a very small region of change. This is not a bug, it’s how your ears work with
sound pressure and perceived volume. Keyboard mappings for the same control deliver
logarithmic performance but with obviously fewer steps in granularity of control.
18-266