USING RTC'S

NOTE: Unfortunately the edition of RTCs is not entirely available for external use, and is a work-in-progress. For the moment, only RTCs defined in mission files are available to you for creating and editing.

RTC's (Real Time Cinematics) take animation information from a glTF file and convert it into a cinematic camera event based on triggers. To use them involves the setup of the camera data (using an external tool like 3DS Max - see here for more information), and then the edition of various XML files in an add-on project to generate the events that call the animation. To help you create your own RTCs, we've created an overview (below) of how they work, and you can find a sample project with a single Hangar RTC which you can examine from the following link:

 

 

RTC Structure

RTC's are comprised of three building blocks that together form a chain of actions. The building blocks are:

  • <SimMission.RTCSequencer>: this is base container for RTCs and will contain actions to execute. It can contain one or more RTCSequence and/or other RTCSequencers. Essentially, the RTCSequencer is the one managing all the different animations if an RTC contains more than one animation.
  • <RTCSequence>: this is an object able to create a list of RTCShots with some specifications (animation names, path to include, shot count and more).
  • <RTCShot>: this is an object able to play one animation with one target and one camera from a glTF file. Each shot is considered a single action.

 

Some things to note about the structure of an RTCSequencer:

  • an RTCSequencer can contain another RTCSequencer and each RTCSequencer will be counted as 1 action
  • an RTCSequencer can contain an RTCshot: each RTCshot will be counted as 1 action
  • an RTCSequencer can contain multiple RTCSequence and each RTCSequence can generate multiple actions


It is important to understand that an RTCSequence is not an action and it can be considered as more of an action generator. An RTCSequencer with only one RTCSequence that does not generate any actions (ie: the sequence has no RTCShots) will have 0 actions. Conversely, an RTCSequencer containing two RTCSequencer will have 2 actions, no matter how many actions both sub-RTCSequencer contain.

IMPORTANT! An Action is defined by its GUID. and as such it is imperative that you know this value for the items you want to use RTC's on.

 

Now that you have a better understanding of the different elements that go into making an RTC sequence, you may want to create your first RTCSequencer. In general, it is a relatively simple task with only a few steps to follow, but you must do everything outlined below in the given order if you want your RTCSequencer to work properly.

 

 

The RTCSequencer

To start with, you need to decide where you want to play the <SimMission.RTCSequencer> element. You have three possible choices:

  • Player Aircraft
  • Airport
  • POI

There may also be different specific case types for each of them - for example, do you want the RTC to be triggered only by a specific airport or any (generic) airport? The table below outlines the priorities for each type and case:

PRIORITY TYPE
Aircraft Airport POI

1

Mission file

Mission file

Mission file

2

RTC_<aircraft>.xml

RTC_ICAO.xml

RTC_POIGeneric.xml

3

RTC_<aircraft_variation>.xml

RTC_AirportGeneric.xml

 

4

RTC_AircraftGeneric.xml

 

 

 

We can now write the XML for the RTCSequencer in the appropriate file, in this case the RTC_AirportGeneric.xml. In the following example, we're setting up an RTCSequencer to play on generic airports:

<SimMission.RTCSequencer InstanceId="">
    <Descr>RTC_Airport_Intro</Descr>
</SimMission.RTCSequencer>

You'll notice that the InstanceId field above is empty. That's because it requires a GUID, and you have decide what GUID to use there. If the RTCSequencer is a new one you're creating then you can generate a new and unique GUID for it (see here for information on how to do this), but if the RTCSequencer is replacing an existing one, then the InstanceId field should be set to use the existing RTCSequencer GUID so that the RTC you're creating overrides the existing one. GUID's should be enclosed in {} and must be all uppercase. The XML should look something like this now:

<SimMission.RTCSequencer InstanceId="{18818CE1-18B4-4943-A8CC-D5362D943993}">
    <Descr>RTC_Airport_Intro</Descr>
</SimMission.RTCSequencer>

 

At this point you have an empty, basic RTCSequencer, and now you'd normally also add in a few other options to tell Microsoft Flight Simulator how it should be displayed, with the final XML looking a bit like this:

<SimMission.RTCSequencer InstanceId="{18818CE1-18B4-4943-A8CC-D5362D943993}">
    <Descr>RTC_Airport_Intro</Descr>
    <NeedPreload>True</NeedPreload>
    <FadeFromBlack>True</FadeFromBlack>
    <Shuffle>False</Shuffle>
    <Immediate>False</Immediate>
</SimMission.RTCSequencer>

 

You can find a complete description of the different XML elements available from the RTC Definition Properties page.

 

 

Adding Actions To The RTC

Now you have the sequencer set up you can add actions to it. An action can be a single <RTCShot> or you can add an <RTCSequence> with with multiple RTCShots, or you can even add another RTCSequencer. In this case we'll add some single RTCShot actions:

<SimMission.RTCSequencer InstanceId="{18818CE1-18B4-4943-A8CC-D5362D943993}">
    <Descr>RTC_Airport_Intro</Descr>
    <NeedPreload>True</NeedPreload>
    <FadeFromBlack>True</FadeFromBlack>
    <Shuffle>False</Shuffle>
    <Immediate>False</Immediate> 
    <Actions>
        <ObjectReference id="RTC_Airport_Intro" InstanceId="{18818CE1-18B4-4943-A8CC-D5362D943993}"/>
    </Actions>
</SimMission.RTCSequencer>

As you can see, here we're playing two different RTCSshot actions for the generic flight intro, and by reading the IDs, we understand that the first action object "RTC_Airport_Intro" is for an airport and the second action object is for an aircraft, "RTC_Overview_Aircraft_Intro".