I am pleased to announce a new FlightGear launcher called FFGo. As the name indicates, it is an improved version of FGo! (technically, a fork of FGo!).
Before someone asks, the reason for forking is not that I dislike FGo! or its author, quite the contrary actually; but after having substantial developments done and working for more than 6 months (some of which by Robert, by the way), there is still no FGo! release offering them to users and I don't manage to contact FGo!'s upstream author anymore. I just hope nothing bad happened to him. Therefore, in order to allow other people to benefit from the new features, I decided to release the code and change the name so as not to spread confusion among users.
That being said, we can start with the real thing. FFGo's home page is at http://frougon.net/projects/FFGo/ and the code is maintained in this Git repository. The license is the same as for FGo!: WTFPL version 2.
Contrary to FGo! up to 1.5.5, it requires Python 3.4 or later, not Python 2. Because of this and the new dependency on CondConfigParser, the software requirements are a bit different from those of FGo!, but this is all explained on the home page, the FlightGear wiki and the docs/INSTALL folder of release tarballs or zip files (Git version of docs/INSTALL/INSTALL_en here).
The main user-visible improvements in FFGo 1.0.0 (old!), compared to FGo! 1.5.5, were:
- cross-platform—known to work on Linux and Windows, should work on MacOS X too;
- works with Python 3;
- doesn't have the annoying “FlightGear is running” little window that, at least in my setup, had a nasty tendency to stay on top when switching between workspaces to look at the MPmap or a ground chart;
- related to this change: you can edit your configuration while FlightGear is running (although some things in the interface won't react in order to save a little bit of performance for FlightGear);
- conditional configuration as illustrated below and fully explained at http://frougon.net/projects/FFGo/doc/README-conditional-config/;
- Command Window and Output Window (visible on the screenshots displayed on the home page);
- displays the fgfs exit status or killing signal in the main window (so you can immediately tell if FlightGear ended normally or because of a segfault );
- the Reload config file button (known as Reset in FGo!) works correctly (in Debian testing/unstable, it also works correctly, but only because I applied a patch Robert sent me by private mail); this is very useful to edit the configuration in a real text editor without having to quit and restart FGo! on every change;
- a few convenient keyboard shortcuts;
- it is maintained in a Git repository.
A few examples of what you can do with the new conditional configuration feature:
- You can pass arbitrary arguments to FlightGear (fgfs) based on simple or complex conditions. In particular, with --prop=..., you may set arbitrary FlightGear properties depending on some conditions of your choice. For instance, I have a custom binding for the mouse wheel to control the throttle, and since the helicopter I usually fly is much more throttle-sensitive than most planes, I have set up FFGo's configuration to conditionally pass a property that modifies my mouse wheel binding's behavior when I am flying a helicopter. This is done like this in FFGo's config file (~/.ffgo/config on non-Windows systems, otherwise %APPDATA%/FFGo/config):
- Code: Select all
{ using_heli = aircraft in \
["alouette2", "alouette2F", "Alouette-III_sc", "bo105",
"ec130b4", "ec135p2", "M-XE", "s55", "s76c", "uh1", "uh60",
"rah-66"]
# 'using_heli' is now a boolean (True or False)
}
# You can put your standard (unconditional) fgfs options here:
# [...]
#
[ using_heli ]
--prop:/frougon/initial-mouse-wheel-throttle-step=0.004
# Other conditional sections:
# [...]
- A second example could be the following: automatic setting of navigation instruments based on some condition such as “starting airport is...” or “instruments == "whatever"”, where 'instruments' is a variable defined at the top of the config. In the simplest case, that could be something like this:
- Code: Select all
[ airport == "MHTG" ] # This is Tegucigalpa in Honduras
--nav1=122:112.3 # Toncontin VOR (TNT): frequency 112.3 MHz, radial 122°
With this simple configuration, every time you start FFGo at MHTG, it will automatically set up your NAV1 frequency and the appropriate radial for the runway 02 approach.
If you want this to also work when you start from elsewhere, you could do something like this:- Code: Select all
{ # Use another value if you don't want the particular instruments
# settings to be applied.
instruments = "MHTG"
}
[ instruments == "MHTG" or ((not instruments) and airport == "MHTG") ]
--nav1=122:112.3 # Toncontin VOR (TNT)
This config performs the particular instruments setting if:- either the 'instruments' variable is set to "MHTG";
- or it is false (such as the boolean False or the empty string "") and the start airport is "MHTG".
Using properties, you can even define both the selected and standby frequencies of the NAV and ADF instruments. For instance:- Code: Select all
# LOWI approach from the west
[ instruments == "LOWI-appW" or custom_start_pos == "LOWI-appW" ]
--prop:/instrumentation/nav/frequencies/selected-mhz=109.70 # OEJ
--prop:/instrumentation/nav/radials/selected-deg=67
--prop:/instrumentation/nav/frequencies/standby-mhz=111.1 # OEV
--prop:/instrumentation/adf/frequencies/selected-khz=303 # RATTENBERG (RTT)
--prop:/instrumentation/adf[1]/frequencies/selected-khz=413 # KÜHTAI (KTI)
--prop:/instrumentation/adf[1]/frequencies/standby-khz=313 # ABSAM (AB)
--dme=nav1
This is convenient when approaching LOWI (Innsbruck airport) from the west, because it sets up the OEJ VOR on NAV1 and the KÜHTAI NDB on ADF2 which can be watched simultaneously on the same screen with the 777. And if you need a go-around, you just have to switch the active and standby frequencies:- on NAV1 to set the OEV VOR;
- on ADF2 to set the ABSAM NDB.
- In combination with the previous example, you could easily practice the LOWI approach from the west with something like:
- Code: Select all
[ custom_start_pos == "LOWI-appW" ] # Approach from the west
--fix=KTI08
--altitude=13000
--heading=137
--vc=120
This would make you automatically start in the air at 13000 ft (for planes that support in-air starting such as SenecaII, not 777 unfortunately), at the given place and airspeed, provided you have set the 'custom_start_pos' variable to "LOWI-appW". This last variable setting can be done as for 'instruments' above, at the very top of the configuration:- Code: Select all
{ custom_start_pos = "LOWI-appW" }
(the brace-delimited section for custom variable definitions must come first in the config, or be absent) - The last example I am going to give here allows one to define custom start positions that may depend on the chosen aircraft. This is in some way similar to the type="cargo/gate/ga/..." metadata that can be defined in groundnets (http://osdir.com/ml/flightgear-sim/2015-07/msg00046.html) but it can be done directly in the FFGo config instead of a groundnet file. Example:
- Code: Select all
{ custom_start_pos = "parking"
# Some planes that use boarding gates
gate_class = aircraft in ["777-200ER", "A320neo", "A330-203", "CRJ700"]
# General aviation
ga_class = aircraft in \
["c172p", "SenecaII", "Cub", "dr400-dauphin", "dhc6", "Dragonfly"]
}
# Toncontin Intl (Tegucigalpa, Honduras)
[ custom_start_pos == "parking" and airport == "MHTG" and gate_class ]
--lat=14.06054
--lon=-87.21878
--heading=288
[ custom_start_pos == "parking" and airport == "MHTG" and ga_class ]
--lat=14.05552
--lon=-87.21387
--heading=265
With such a configuration, assuming you have set 'custom_start_pos' to the string "parking" in the optional brace-delimited section at the top of your config (as shown above), whenever you start at MHTG, FFGo will place your plane at an appropriate place in the airport depending on its type. Very convenient for ATC sessions!
The advantage of this method compared to defining parking positions in groundnet files is that it is very easy to set up using the magical vi-like ': Y m' shortcut in FlightGear (which prints a Google Maps link on the terminal), and it works right now. You can extend the system for helicopters/helipads with a heli_class, etc. The disadvantages are that:- it is FFGo-specific and not automatically shared with other people, as opposed to data uploaded on the TerraSync servers;
- it doesn't scale very well (if you copy/paste my config, you are going to start at the exact same location as me, unless I define a different one in the meantime);
- changing the parking position at a given airport using this method is not as convenient as with the standard (FGo!/FFGo)+FlightGear mechanism (using --parkpos) when a decent groundnet has already been defined.
Note: currently, only the English translation is up-to-date. The other translations are inherited from FGo! 1.5.5, so translators won't have to start from scratch. If you feel like contributing in this area, you're very welcome. The relevant info is in docs/INFORMATION_FOR_TRANSLATORS in release tarballs and in the Git repository.
Don't hesitate to ask here or by e-mail if you encounter any problem. My e-mail address can be found in FFGo's docs/README/README_en file, for instance; you can also send real e-mails directly from this forum (cf. the envelope icon).
Happy flying!
Edit: link to the new home page (changed on April 30, 2016) and to FFGo's page on the FlightGear wiki.