- Messages
- 46
Hi folks,
First, a big thank you to Stonelance for creating the tools that now allow MS Flight (FLT) to be expanded. I very much appreciate the time consuming, hard work involved in creating & publishing these tools, and his continuing dedication to the game.
I've been experimenting with the latest version of the tools (v1.1.12.0), and have had some success in converting various objects into FLT. Here are some observations and a few questions that someone may be able to answer:
Question #1b: If ContentConverter.exe does ignores the part, is there a way to create a landable platform for use in Flight, or use an existing generic Flight platform (if such a thing exists)?
Question #3: In a Flight spb file for an aircraft livery, within the <Livery.Livery> section, what does the <ControlVariationID>{GUID NUMBER}</ControlVariationID> tag refers to and/or do? It appears that all the aircraft I've looked at so far use the same GUID: 45AAD43A-A9BC-40E0-96BA-A3E3577BBE53.
Question #6: Does this mean that one cannot display default FLT gauges (as an alternative to those that were used in FSX but are not converted) in a converted FSX model, since the converted FSX model has an empty set of virtual cockpit ($) material slot names, so no gauges can be mapped to them?
Question #7: Thus, converted interior cockpits will always be gauge-less. True, or False?
Anyway, it has been fun trying out the new tools, and hopefully, some of you may be able to answer one or more of the above questions - Thanks!
FS Tester.
PS: A note on communicating with me: I live in a remote, rural area with no Internet access (so all my flying in FLT is offline - no aerocaches for me!). I use a public Internet access point when I visit the nearest large town, which is usually only once every week or so. So, please do not expect a speedy response from me - it might be 2-3 weeks before you get a reply!
First, a big thank you to Stonelance for creating the tools that now allow MS Flight (FLT) to be expanded. I very much appreciate the time consuming, hard work involved in creating & publishing these tools, and his continuing dedication to the game.
I've been experimenting with the latest version of the tools (v1.1.12.0), and have had some success in converting various objects into FLT. Here are some observations and a few questions that someone may be able to answer:
- I've converted FSX generic airport buildings into existing FLT procedural buildings by using Airport Design Editor (ADE) by Jon Masterson. Here are the steps I took:
- Open the airport
- Remove all objects except the generic buildings
- Export the "airport" as an XML file
- Manually remove any remaining XML data in the file except for the generic buildings
- Modify the remaining data in the file to comply with the FLT schema
- Use the tools in the Flight Toolkit to compile and import just the file into FLT.
- One can convert the generic buildings at an airport quite quickly this way once you know how to do it, and though it is not a solution for converting all the generic buildings at all airports in FSX (I believe stonelance is working on getting a future version of his ContentConverter tool to do this), it works well for those airports that one virtually flies to & from on a regular basis, & where no custom scenery is available.
- I've also successfully converted "regular" scenery objects - such as a set of ships that I happen to have that I wanted to see in FLT, including the low-res FSX aircraft carrier (VEH_carrier01.mdl). Unfortunately, one cannot actually land on the carrier (or any other of my "landable" ships that I have in FSX & that I have converted to FLT - one just sinks through the deck...), which leads me to believe that the platform tag e.g.:
<FSMakeMdlData version="9.0"> <name="_CONCRETE_0" surfaceType="CONCRETE" > </Platform> </FSMakeMdlData>
is ignored and not converted to the FLT output file. So...
Question #1b: If ContentConverter.exe does ignores the part, is there a way to create a landable platform for use in Flight, or use an existing generic Flight platform (if such a thing exists)?
- I've created a very simple mission to teach myself how missions are built in FLT. Luckily, the XML format is very similar to that of missions in FSX (in fact, FLT missions can be opened by FSX Mission Editor by Jim Keir), though his tool obviously cannot understand the changes to the XML schema that has happened between FSX & FLT. I'm pretty sure one could update his schema files, but have not gotten around to looking into this yet...
It would be nice to have a FLT Object Placement Tool (OPT) similar to that found in FSX, as looking at the FLT propdef files, there is one (Launch) that defines pretty well the same XML data found in FSX's dll.xml, so I'm guessing that there was a version of the OPT created for Flight that was used by the developers. One could create missions in FSX and then manually convert them to FLT, but it would be a tedious process!
- In regard to aircraft conversion, I've had mixed results. I've found that ModelConverterX by Arno Gerretsen is a great tool to use to preview the conversion process. If his tool cannot open or export an aircraft model, ContentConverter or Addon Builder will generally not be able to convert it either (surprise, surprise!). One can also use his tool to clean up the model prior to conversion - for example, using the material editor to modify the materials such that the model is displayed correctly in FLT (Opaque glass or invisible exterior models is a common problem that can be fixed this way).
Even though the tool does not convert aircraft sounds (since FLT uses a completely different sound system based on FMOD), I have been able to create the required sound files to point to existing .fev files that work pretty well as a temporary solution until I learn how to create new .fev & .fsb files that are tailored specifically for my models using FMOD.
The conversion of the various aerodynamic properties from the aircraft.cfg file (?) does not always create a realistic (or aerodynamically flyable) aircraft. Luckily, since this data appears to all be stored in the various FLT simData files, they can be edited (and I have!) to create a better aerodynamic model.
Question #3: In a Flight spb file for an aircraft livery, within the <Livery.Livery> section, what does the <ControlVariationID>{GUID NUMBER}</ControlVariationID> tag refers to and/or do? It appears that all the aircraft I've looked at so far use the same GUID: 45AAD43A-A9BC-40E0-96BA-A3E3577BBE53.
It appears that the FSX Virtual Cockpit textures (i.e. those preceded with $ & used for gauge placement) are not converted, presumably because the way the interior cockpits are modeled has changed.
Question #4: Is there any way to manually add gauges to the interior model of a converted aircraft?
In FLT, I've figured out the relationship of the <PanelID> elements in the livery file to the VcPanel.spb files in the panel folder, and the <GaugeReference GaugeId=...> to the appropriate gauge spb file that describes a particular gauge (for example, the handheld radio), but I'm missing the piece of the puzzle that ties the gauge to the model, so all my attempts at displaying a FLT gauge (from the CoreContent.pak file, for example) in a converted interior FSX model have failed.
Question #5: Am I right in thinking (guessing) that, for the MS aircraft such as the Icon A5, there is a GUID embedded in the model file (material slot name?) that maps to each GUID referenced in the <GaugeReference GaugeId=...> within the Vcpanel.spb file, and if so..
Question #6: Does this mean that one cannot display default FLT gauges (as an alternative to those that were used in FSX but are not converted) in a converted FSX model, since the converted FSX model has an empty set of virtual cockpit ($) material slot names, so no gauges can be mapped to them?
Question #7: Thus, converted interior cockpits will always be gauge-less. True, or False?
- A couple of other problems I've come across with converting aircraft files (that I'm sure are already known) include:
- Skipping unrecognized effects. I think one can get round this by remapping the effect to a standard FLT effect prior to conversion using ModelConverterX (or just deleting it), but have not tried it yet.
- Bones in FSX appear not to be converted, presumably because Flight now uses Granny3D for its model and animation pipeline. For example, after the exterior model of the FSX Trike Ultralight is converted, the links between the pilot's hands & arms is broken, so when you move the aileron\elevator bar, the poor chap's hands, stuck to the bar, detach from his arms. Ouch!
Wingflex is also not converted (for example, in the FSX glider).
- Failing to convert sim script. This happens a lot - the Throttle script is a common error, but it also happens for many others. My guess is that some may be due to malformed script in the original model, some may be due to no equivalent mapping of the desired action in FLT, some may be because there is no code in the tool that recognizes the action that the FSX script is trying to perform.
Here, for example, is a portion of the log file when converting the FSX Trike Ultralight:
...<snip>...
Converting model, materials and textures from "C:\Documents\_MS Flight Testing Folder\FSX Aircreation_582SL\model\AirCreation_582SL_Exterior.mdl"
...<snip>...
Converting MDL to Flight .Model...
Error: Failed to parse instruction tree '{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }' in script '{ (A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >=
if{ l0 -50 * 50 + }
els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
d (>L:Engine1ThrottlePosition, percent)
}'
Error: Failed to parse instruction tree '{ (A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >=
if{ l0 -50 * 50 + }
els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
d (>L:Engine1ThrottlePosition, percent)
}' in script '
(L:EmergencyThrottleInUse, bool) 1 !=
if{ (A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >=
if{ l0 -50 * 50 + }
els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
d (>L:Engine1ThrottlePosition, percent)
}
els{ (L:Engine1ThrottlePosition, percent) } '
Error: Failed to convert RPN script '
(L:EmergencyThrottleInUse, bool) 1 !=
if{ (A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >=
if{ l0 -50 * 50 + }
els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
d (>L:Engine1ThrottlePosition, percent)
}
els{ (L:Engine1ThrottlePosition, percent) } '
...<snip>...
Converting model, materials and textures from "C:\Documents\_MS Flight Testing Folder\FSX Aircreation_582SL\model\AirCreation_582SL_Interior.mdl":
...<snip>...
Converting MDL to Flight .Model...
Error: Failed to parse instruction tree '{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }' in script '
(A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >= if{ l0 -50 * 50 + } els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
'
Error: Failed to convert RPN script '
(A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >= if{ l0 -50 * 50 + } els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }'
...<snip>...
Converting model, materials and textures from "C:\Documents\_MS Flight Testing Folder\FSX Aircreation_582SL\model\AirCreation_582SL_Exterior.mdl"
...<snip>...
Converting MDL to Flight .Model...
Error: Failed to parse instruction tree '{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }' in script '{ (A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >=
if{ l0 -50 * 50 + }
els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
d (>L:Engine1ThrottlePosition, percent)
}'
Error: Failed to parse instruction tree '{ (A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >=
if{ l0 -50 * 50 + }
els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
d (>L:Engine1ThrottlePosition, percent)
}' in script '
(L:EmergencyThrottleInUse, bool) 1 !=
if{ (A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >=
if{ l0 -50 * 50 + }
els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
d (>L:Engine1ThrottlePosition, percent)
}
els{ (L:Engine1ThrottlePosition, percent) } '
Error: Failed to convert RPN script '
(L:EmergencyThrottleInUse, bool) 1 !=
if{ (A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >=
if{ l0 -50 * 50 + }
els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
d (>L:Engine1ThrottlePosition, percent)
}
els{ (L:Engine1ThrottlePosition, percent) } '
...<snip>...
Converting model, materials and textures from "C:\Documents\_MS Flight Testing Folder\FSX Aircreation_582SL\model\AirCreation_582SL_Interior.mdl":
...<snip>...
Converting MDL to Flight .Model...
Error: Failed to parse instruction tree '{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }' in script '
(A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >= if{ l0 -50 * 50 + } els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }
'
Error: Failed to convert RPN script '
(A:GENERAL ENG THROTTLE LEVER POSITION:1, part) s0 0 >= if{ l0 -50 * 50 + } els{ l0 (A:THROTTLE LOWER LIMIT, part) / 1 + 50 * }'
...<snip>...
In each case, this results in a constantly moving objects (such as the throttle lever, ailerons, flaps, skids, spoilers, reverse thrusters, etc. etc.) in the interior or exterior visual model in FLT.
Perhaps the solution here would be to open up a user-input screen that would allow the user to manually map the failed parsed instruction to a standard script instruction set in FLT, or ignore the instruction & skip to the next script entry. E.g., for the above error, the user could chose to replace the failed parse script for the throttle lever movement with a generic throttle lever movement script that would be recognized by & acceptable to the converter.
ModelConverterX by Arno Gerretsen has such an option sort-of-like this (though his is for the SCASM Reader importer). You can see how he allows the user to choose how to handle imported variable by looking at the Options/Importer Settings window. Here, the user is given a set of choices for replacing variables and conditions (see the last two entries under the SCASMReader section).
Perhaps the solution here would be to open up a user-input screen that would allow the user to manually map the failed parsed instruction to a standard script instruction set in FLT, or ignore the instruction & skip to the next script entry. E.g., for the above error, the user could chose to replace the failed parse script for the throttle lever movement with a generic throttle lever movement script that would be recognized by & acceptable to the converter.
ModelConverterX by Arno Gerretsen has such an option sort-of-like this (though his is for the SCASM Reader importer). You can see how he allows the user to choose how to handle imported variable by looking at the Options/Importer Settings window. Here, the user is given a set of choices for replacing variables and conditions (see the last two entries under the SCASMReader section).
Anyway, it has been fun trying out the new tools, and hopefully, some of you may be able to answer one or more of the above questions - Thanks!
FS Tester.
PS: A note on communicating with me: I live in a remote, rural area with no Internet access (so all my flying in FLT is offline - no aerocaches for me!). I use a public Internet access point when I visit the nearest large town, which is usually only once every week or so. So, please do not expect a speedy response from me - it might be 2-3 weeks before you get a reply!