FLOLS modeling guidelines

From SWS Wiki
Jump to navigation Jump to search

Back to the SDK main page


Because aircraft carriers come in different shapes & sizes and we were limited by FSX/P3D's default FLOLS system, we decided to develop our own solution, ending up with CEX FLOLS.

The CEX FLOLS system allows you to create a tailor-made approach system, whether that is FLOLS, I-FLOLS, or Paddles to guide you on final. Furthermore, you can placem of the FLOLS exactly where you want it, as well as have multiple FLOLS systems at the same time. I.e. you can have a "broken" FLOLS on a carrier and use a Jeep with working FLOLS on the deck.

We are also providing samples which you can use as-is or use as a template to create your own FLOLS system. The sample files can be accessed on Dropbox. Please send us a request at our [email address]

Necessary software

  • 3ds max 2014 or later for .max files
  • gmax for .3ds and UV files


Please [contact us] for access to the sample files.

  • modeldef.xml
  • Ball_n_cable_example (3dsmax 2014 and .3ds format)
  • UV files (for gmax)
  • dds textures


The FLOLS can be deployed in two ways:

  • built-in to your carrier model
  • as a separate simobject, placed at the correct coordinates in the formation.

Back to the SDK main page


Light visibility

Light visibility is defined by CEX and depends on two factors:

  • Function: i.e. if you need to be waved off, Ball_WO will flicker on and off
  • Position: The ball is visible within certain azimuth and elevation margins. If you are outside this area, i.e. in front of the carrier, the meatball lights will not be visible.

Animations & Variables

You will need to create a set of six (6) animations to accomodate the FLOLS. These animations are listed in the sample modeldef as follows:

  • Ball_scaling: Used to scale all the lights except the glideslope.
  • GS_scaling: Used to scale the glideslope light. The reason this is separate is because we want the glideslope to be more visible compared to the datum lights at a distance, so it is using a different threshold
  • Ball_glideslope: used to animate the glideslope indicator light up and down the ball
  • Ball_Cut: used to show/hide the cut lights
  • Ball_datum: used to show/hide the datum lights
  • Ball_GS_red: used to show/hide the red (too low) glideslope light

All variables are formatted using the prefix_varname format. The prefix should be a unique identifier for your carrier such as sws_cv41_. The varname part in this case consists of reserved variables controlled by CEX. These variables provide you with the position information of the plane relative to the carrier.

Notice: When writing your modeldef code, it is important to remember that animation lengths should match those defined in the ships CEX configuration file.

In the table below, we are using the "cv41_" prefix from our Midway carrier as an example. All variables are read-only and can be used to create modeldef animations for your meatballs.

Variable name Units Description
cv41_ball_obstructed bool 1 if the ball is obstructed due to a foul deck. 0 if the ball is available to use.
cv41_BALL_VISIBLE bool 1 if the ball is on
cv41_Carrier_distance number Distance from the carrier, returned in Nautical Miles
cv41_GS_on bool 1 if the amber glideslope light is on. 0 if not
cv41_glideslope number Animation for the amber glideslope light. Range is 0-100
cv41_GS_red bool 1 if the red glideslope light (too low) is on. 0 if not
cv41_Ball_datum bool 1 if the datum lights are on. 0 if not.
cv41_Cut_Lights bool 1 if the cut lights are on. 0 if not.
cv41_Ball_WO bool 1 if the waveoff lights are on. 0 if not.

Back to top | Back to the SDK main page

Model guidelines

We used one square polygon for each light, but you are free to use your own setup. For example you may create one big polygon for all datum lights and stretch it.

Alternatively, you can use a technique with animated polygons, like the RFN meatball does.

Here is our own setup:


  1. Each light is one square polygon
  2. Each light has four bones, one affecting each each corner of the square
  3. each light has a skin modifier at the top of the stack. Use the settings marked at the image.


  1. Diffuse and emissive textures are the same
  2. Default Transparent material
  3. Skinned mesh checked


Since we are using skinned animation, we cannot use visibility tags to show/hide the various lights. In order to hide our meatball we are "moving" it to the center of the ship model, using an animation instead of a visibility condition. Let's go step-by-step.

  1. Keyframe 0: Set your meatball pose to neutral: glideslope light in middle position, datum and waveoff lights visible. The red glideslope light (too low) should also be visible in the center of its lens.
  2. Keyframe 100: That is the maximum size of our meatball lights, so that they are visible at a distance. To stretch them out:
    • Autokey enabled
    • Select all the top bones on your light polygons
    • Right click the Move button on your toolbar and input an offset to pull them upwards.
    • Repeat the proccess for the down, left and right side bones in their respective directions.
  3. Keyframe 109: Ball visible pose
    • Select all FLOLS bones
    • On the timeline, click on keyframe 0 (there should be a small line under the timeline controller)
    • Shift+Drag that to keyframe 109 to copy it.
    • You should now have three keyframes in your timeline: 0 (neutral), 100 (expanded), 109 (neutral)
  4. "Keyframe 110:' Ball hidden pose
    • Select all FLOLS bones
    • Enable autokey
    • Move the FLOLS lights to their hiding position. You can move them back, in the FLOLS structure or to the ship's center. That is up to you.
  5. Animate the glideslope indicator (amber light)
    • Select the bones at the corners of the glideslope indicator
    • Copy keyframe 0 to positions 200,250 and 300 on the timeline.
    • Go to position 200 and turn on Autokey
    • Move the glideslope bones to the lowermost position, directly behind the red glideslope light
    • With Autokey on, go to frame 300 and move the glideslope bones to the top position of the meatball lense.

Animation manager

  1. Select all bones and apply your scaling animation. Start 0, end 100
  2. With all datum bones selected, apply the ball_visibility animation. Start 109 (visible), end 110 (hidden).
  3. With the amber glideslope light bones selected, apply the glideslope_visible animation. Start 109, end 110.
  4. With the amber glideslope light bones selected, apply the glideslope_animation. Start 200, end 300
  5. With the red glideslope light bones selected, apply the glideslope_low animation. Start 109, end 110.
  6. With the cut lights bones selected, apply the cut_lights animation. Start 109, end 110.
  7. With the waveoff lights' bones selected, apply the waveoff_lights animation. Start 109, end 110

Back to top | Back to the SDK main page