SODE JetwayControlSystem
SODE JetwayControlSystem
SDK
V1.6
02. January 2017
model.cfg
MyJetwayA.mdl
model.JetwayTypeB
sound
texture
sim.cfg Must contain the line 'module=SODE'
in the [General] section!
Important! The [General] section in the sim.cfg must have the line „Module=SODE“ included,
else the jetway system won't work, e.g.:
[General]
Category=Viewer
Module=SODE
Note: This file is globally used. So if you have any additions to it, please share it via
fsdeveloper.com in the SODE subforum, thank you.
2.2 jetway.cfg
SODE needs dimension, range limits and timing parameters to solve the inverse-kinematic problem
and to control the animation. The jetway.cfg holds all the necessary data for a particular jetway
2.3 SODE_modeldef_entries.xml
New entries for the jetway animations. Merge them with your existing modeldef.xml file. Delete all
old default SODE related entries and paste the new contents.
Be careful that you keep any of your own definitions! It is always a good idea to backup the
modeldef.xml! The maxscript will fail if it doesn't find the entries in the modeldef.xml.
scenes
SODE_Default_Hood.gmax Default Hood Model gmax File.
Can be placed wherever you like
2.4.2 SODE_Jetway_Creator.ms
This file is a maxscript that automatically creates a fully skinned and animated Jetway model ready
to export. You have to follow a special naming convention and setup some helper dummys. This is
explained later in more detail.
For performance reasons, it is recommended to have one single texture sheet for the jetway or
multiple jetways. This way, only one single drawcall is needed for the jetway.
Observe that all main components (written in green) must have their names extended by the
LOD number! For example ROOT_400. This must correspond to the XXX number of the
DUMMY_MAIN_LOD_XXX, i.e. DUMMY_MAIN_LOD_400. All other Dummy objects don't
need a LOD number, only the main one. The main dummy will be the root of the entire scene.
The script supports up to 3 bridge elements. You can also model a jetway with 1 or 2 elements only.
Also, the stairs object is optional.
Alignment, Orientation: The entire model must be aligned to the north-south axis (Y-Axis) and be
in a straight, horizontal position, also the stairs! The wheels must touch the ground. See the sample
jetway for the basic alignment.
3.2.2 Noseloader Jetway (Type N)
The noseloader type jetway is not able to rotate around its base (ROOT) and the head. Also, the legs
have no wheels so they are firmy attached to the ground. The only two movements the jetway can
make are:
1. Tilt the bridge up and down (moveable vertical leg)
2. Extend the bridge forward and aft.
Important: Because the leg is attached to the ground, the leg elements are reversed for this type
compared to the type A jetway. The static part is on the ground, whereas the extendable part is on
top of it. Due to the design, the moveable leg part (LEG_EXT_XXX) is always attached to
BRIDGE_A_XXX! The correct attachment will be done for you through the script.
The leg structure is the same as for the type N, with the static part on the ground and the moveable
part on top. In this case the moveable part is the orange object forming the connection between
bridge A and B, sliding up and down along the static legs.
Alignment, Orientation: This jetway type is special with regards to the alignment. The scene
origin (0/0/0) needs to be placed at the intersection of the two bridge axes (see screenshot). The
DUMMY_MAIN_LOD_XXX however needs to be placed at the root of the entire jetway
structure, which is mostly located below that static «main post» (yellow object in the screenshot).
3.3 Bridge Elements/Leg Elements/Stair Elements
Make sure that the bridge elements and the leg elements are simple box objects shapewise. More
specifically, the bounding box of the bridge/leg element should match the model. This is needed
for the correct determination of extension ranges.
Also, make sure that when the stair is in the horizontal position that the bounding box is also tightly
matching the object. This ensures correct parameter extration for for SODE jetway engine.
Any other geometry (details such as pipes cables etc) should be linked as children to the main
bridge/leg/stair element.
3.4 Dummys
A total of 4 dummy objects are needed.
1. DUMMY_MAIN_LOD_XXX sits at the origin (0/0/0) for type A and N. For type T, it is
placed on the center of the root object. See the image in the section about type T jetways.
2. DUMMY_LEG_LIMITER stops the movement of the lower leg up to the static leg
element. You can control the extension range with this dummy.
3. DUMMY_DOOR CONTACT is the lower, most forward point where it should touch the
bottom of the aircraft door.
4. DUMMY_HOOD_PIVOT is placed at the point where the hood starts to expand towards
the aircraft door. In the provided default hood, the pivot is at the second lowest vertex and
the front edge.
The more range your leg has, the more dip range your jetway gets!
3.5 Stairs
Ensure that the pivot point of the stair is set at the proper position!
3.6 Hood
This is the most tricky part of the model. There is a default hood
element called 'SODE_Default_Hood.gmax'. If you want to use it, merge it into your scene and
name it properly (HOOD_XXX). You can rescale it to your desire so it fits your model. Do not
move or delete vertices! Also, you need to copy the portion of the texture to your jetway texture
and re-map it. Of course you can draw your own texture for the hood.
To create an own, custom hood, see section „ Custom Hood Creation„.
4.1.3 Type T
4.2 Creation with the SODE Jetway Creator Script
Hit 'Create SODE Jetway!' and wait for a while until the script has skinned and animated everything
to your needs. If any of the required elements is/are not found, the script will fail and tell you what
element is missing.
If everything is ok, two windows appear:
1. The maxScript Listener window with the jetway parameter data, that is to be manually
copied into a jetway.cfg file...
2. The SDK FSX Animation tool summary window, showing the correct tagging of the
animations to the corresponding bone. This window is the confirmation that everything is
alright. You may close it.
Concerning the hierarchy, you should see the main dummy helper with a single skinned mesh
ROOT_XXX as a child. On top of that, the created and animated bone structure with some dummy
helpers should be visible.
The parameters are the same as the one used for triggerable animations, refer to the online
documentation. The wav file must reside in the „sound“ folder of your SimObjects container! Also,
see the online documentation how to set it up.
If you want to have simultaneous sounds, like engine + siren, you have to mix it into one wav file
using an audio editing software.
7 Custom Hood Creation
As explained earlier, the hood is the most tricky and most complex part of the jetway, especially if
doing the skinning and vertex weighting manually.
In order to automate the creation as much as possible, a helper script is provided with the SDK. The
following text is meant to be a mini-tutorial on how to create a custom hood.
Step 1: Model the hood and name it to HOOD_XXX! In order to follow the aircraft fuselage
curvature nicely, I found that the following basic mesh makes a suitable job (think of a horizontally
and vertically sliced box):
As you can see, the first slice above the ground is coincident with the Dummy Helper object (named
DUMMY_HOOD_PIVOT). This is where the hood touches the aircraft fuselage and starts to
bend. Above that first slice, I added three more which is perfectly enough. As always, keep the
number of vertices as low as possible. It is now time to save your work!
Step 2: Run the Hood Helper script. In the gmax menu, select MAXScript → Run Script →
Navigate to scripts/SODE → Select SODE_Jetway_HoodHelper.ms. This should bring up the
helper dialog.
There are three sections: Generator, Parameter Extractor and the Test Facility.
The generator is used to create the rigged (Skin and Bones) mesh, but without any vertex weighting.
This will be done by yourself! To help the weighting, the script can generate guidelines. This is the
first button to press:
The circle represents the smallest fuselage
this particular hood can dock to. The hood
„angle“ is 45°, indicated by the line
originating from the
DUMMY_HOOD_PIVOT.
The top arc is a movement guideline for the
top edge of the hood.
Step 3: Convert to rigged mesh and start setting weight values. Click on „Clone Hood, convert
to skin and add bones“. This action will exactly do these steps. A copied, rigged mesh called
HOOD_XXX_SKINNED is created and the animation keyframe 100 is automatically selected. Also
in the „Skin“ modifier on the right hand side, the „BONE_HOOD“ is selected as active. This is the
bone which we want to influence the mesh with! So, click on „Edit Envelopes“. The „Vertices“
filter should be selected automatically by the script.
You can now select the first group of vertices.
Next step is to set the
weight of the selected
vertices. A value of 1.0
means that the vertices are
fully influenced by the
HOOD_BONE, so they will
move to the 45° line.
Now select the next group
of vertices and apply
another weight value. You will notice that in order to
follow fuselage guideline, a lower value is needed
than before. You will not have to set values for the
vertices at the DUMMY_HOOD_PIVOT. They should not move because they are at the pivot.
Hint: It is best to start with the most-right, top vertices and then work „top-down“, then go to the
next vertical group towards the left. It is good practice to save the work, gmax tends to crash
sometimes during the weight setting (occurs rarely though).
You can always check the hood animation by moving the keyframe slider at the bottom of gmax.
If something went wrong during weighting, you can start from scratch by clicking „Start over
again“ in the script dialog.
Step 4: Saving your weight values. After you are done setting the weight values, you have to store
those values to a text file for later use in the jetway script. Hit the „Extract Hood Parameters“ button
and the MAXScript Listener will show up with all the needed values. After some general info, two
indicators <###### COPY BELOW SECTION ######> and <###### COPY ABOVE SECTION ######> show
the portion of the window to copy into a text file. Mark all the data in between those two markers
and copy-paste it into a text file named e.g. „My_Custom_Hood.txt“ (I prefer to name it like the
gmax project file).
See picture below for reference.
The rigged mesh is now not needed anymore once the data are stored to a file. You may delete it
(HOOD_XXX_SKINNED) or you can hit „Start over again!“ and everything is at a state like in the
beginning with your basic, non-rigged hood mesh.
This basic mesh (together with the DUMMY_HOOD_PIVOT) will be the objects you will
merge into your jetway scene when creating your jetway.
Step 5: Testing your weight values. If you want to test the your basic mesh with the extracted
hood parameters, you just rig the mesh again („Clone Hood, convert to Skin and add Bones“
Button).
Then in the Test Facility, select your parameters text file (you may have to close and re-run the
script so it can find the newly created file) and press „Apply Hood Parameters File!“.
Your saved weight values should now be applied to the rigged mesh and show the hood in its
extended state. This ensures that the Jetway creator script will correctly apply your parameters
during the jetway creation process.
Step 6: You are done! You can now use your hood with your jetway. Follow the steps outlined in
the Jetway Creation tutorial in the section about the Hood.
8 XML Placement
8.1 The 'Stand' node
With SODE V1.3, a new concept of „Stands“ is introduced, which is meant to organize the various
systems tied to a parking spot (e.g. Jetways, VDGS). In the xml, those systems are grouped into a
new <Stand> tag structure, which will link the SimObjects to a specific „AFCAD“ parking position.
<Stand AfcadICAO="LSZG" AfcadGateName="PARKING" AfcadParkingNumber="1"
CustomDesignator="Terminal A;01">
<SimObject Name="Terminal A01 Jetway">
<Placement Lat="47.1823" Lon="7.4188" Alt="0#AGL" Hdg="000.0"/>
<Model SimTitle="Jetway">
<Jetway InitialState="0;0;0;0"/>
</Model>
</SimObject>
</Stand>
The attributes for the <Stand> tag are mostly self-explanatory: They must match the underlying
AFCAD data! This will ensure proper operation/detection with fsdreamteams GSX product.
There is a „CustomDesignator“-Attribute which can be used to override the rigid naming
convention of the AFCAD data. So in the SODE in-game menu, the stand will appear as „Terminal
A01“ and not „PARKING 1“. The structure of the attribute is a semicolon separated pair of strings:
„StandName;Designator“.
Important: Jetways placed without the stand tag will no longer be supported
from SODE V1.3 and up!
Important: Depending on the jetway type, a different number of values are required in the xml!
Type A (4 values): InitialState=“RootRotation;BridgeDip;HeadRotation;BridgeExtension“
Type N with extendable leg (2 values): InitialState=“BridgeDip;BridgeExtension“
Type N fixed leg (1 value): InitialState=“BridgeExtension“
Type T (2 values): InitialState=“BridgeDip;BridgeExtension“
You can also specify a random value for one or more parameters and set a fixed values for the
others, for example „33;R;R;25“ means that the root rotation and the bridge length are defined
(fixed position on the apron) whereas the bridge dip and the head rotation are randomly (R) set to
give the jetway a different appearance everytime you start up FSX.
Note: There must be no jetway.cfg file in the container for the static jetway model!
<Stand AfcadICAO="LSZG" AfcadGateName="PARKING" AfcadParkingNumber="1"
CustomDesignator="Terminal A;01">
<SimObject Name="Stand 1A Jetway Front">
<Placement Lat="47.18165" Lon="7.41165" Alt="0#AGL" Hdg="335.0"/>
<Model SimTitle="Jetway" StaticSimTitle="Jetway_Static">
<Jetway InitialState="33;33;15;15"/>
</Model>
</SimObject>
</Stand>
First, you select the correct jetway.cfg file of the fully animated model. The script will read the
needed movement constraints from this file. If the script is able to load all necessary data, the red
field changes its color to green.
Depending on the jetway type, the script enables/disables the correct keyframe entry boxes.
Then you set the keyframe values: These must match the ones you specified in the xml as the initial
state of the fully animated model.
With these information, you are ready to go and you can create a static version with the same
„pose“ as the fully animated one.
Export the model normally without skin or animations! Concerning naming of your mdl file, I used
this scheme: SODE_Jetway_Static_33_33_15_15.mdl. This way, I know what keyframe values I
have used for this static jetway.
Edit your sim.cfg file and add the model to your SimObjects folder as a separate container.
10FSX/P3D
With the sim.cfg set up, the mdl file and its corresponding jetway.cfg correctly placed and the xml
placement written, fire up FSX/P3D!
During first start, an alert should pop up to allow the execution of the
SimObjectAnimationModule.dll. If not, the dll is not loaded and the system won't work.
If everything is ok, you should see your jetways in the scene.
Place your aircraft near a jetway and hit Tab+S: You will see a „Select Stand...“ option at the top of
the menu. There you can then browse through the different stand categories and finally choose a
spot. Select a jetway and an aircraft door to be docked to, the jetway should dock now :-)
A text prompt at the top should announce the following if the dll connection can be established:
If not, then the dll is most probably not loaded. Check the dll.xml file if the entry for the
SimObjectAnimationModule.dll is existing and confirm that it is not disabled in the xml:
<Disabled>False</Disabled>
3. AircraftParameters.ini must contain door parameters for the corresponding ICAO aircraft
type designator, e.g. [B738]
Add-On Aircraft SODE
aircraft.cfg AircraftParameters.ini SimObjectDisplayEngine.exe
[General] [A343]
atc_model=A343 1L = 2.0, -0.15, 4.0, 1.1, 1.2
[Exits]
exit.0 = 0.4, 45.50, -6.0, 7.0, 0