To create the approaches for my airport, KASH, I used the FSX ADE to help write them. It can’t create all the different legs, so I had to do a back and forth by exporting the xml of what I had written, hand editing it and reading it back in, along with using the automatic ADE commands to create the different segments.
Here’s some resources I used, along with exporting the xml from FSX for airports like KBOS etc that have lots of complex approaches for examples of different types of legs.
https://www.fsdeveloper.com/forum/threads/tutorial-approach-legtype-definitions-and-attached-picture.13751/
https://www.fsdeveloper.com/forum/threads/help-with-rnav-approach.449552/
https://www.faa.gov/air_traffic/flight_info/aeronav/digital_products/cifp/download/
You’ll find all your approaches and the basis behind the programming you’ll need to do in the latest available cifp file at the above link.
The nice thing about ADE as it’ll help you debug your approaches graphically, it has error checking built in, it’s a pretty good tool. Once you’ve got your approaches, you can export the xml and paste it into your airport.
Here’s the approach data that I wrote for KASH. I’m a newbie, so I don’t know how accurate it is, but it works in game and it’s based on the cifp.
BTW, rho is the distance to end of the runway and theta is the heading to the point in question from the end of the runway. These and other terms are all standard IFR Approach terms that you can google to find out what they are.
<Approach type="ILS" runway="14" designator="NONE" suffix="0" gpsOverlay="FALSE" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" altitude="3800.0F" heading="122.893143" missedAltitude="2000.0F">
<ApproachLegs>
<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" recommendedType="LOCALIZER" recommendedIdent="IASH" theta="319" rho="13.1N" altitudeDescriptor="+" altitude1="3800.0F" altitude2="3800.0F"/>
<Leg type="HF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" turnDirection="L" magneticCourse="138.5" distance="4.0N" altitudeDescriptor="+" altitude1="3800.0F"/>
<Leg type="CF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="LODTI" flyOver="FALSE" recommendedType="LOCALIZER" recommendedIdent="IASH" theta="318.5" rho="7.5N" magneticCourse="138.5" distance="4.7N" altitudeDescriptor="J" altitude1="3800.0F" altitude2="2500.0F"/>
<Leg type="CF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="NORIY" flyOver="FALSE" recommendedType="LOCALIZER" recommendedIdent="IASH" theta="318.5" rho="4.3N" magneticCourse="138.5" distance="3.2N" altitudeDescriptor="H" altitude1="2500.0F" altitude2="1600.0F"/>
<Leg type="CF" fixType="RUNWAY" fixRegion="K6" fixIdent="RW14" flyOver="FALSE" recommendedType="LOCALIZER" recommendedRegion="K6" recommendedIdent="IASH" theta="318.7" rho="0.0N" magneticCourse="139" distance="4.3N" altitudeDescriptor="A" altitude1="247.0F" altitude2="247.0F"/>
</ApproachLegs>
<MissedApproachLegs>
<Leg type="CA" magneticCourse="139" altitudeDescriptor="+" altitude1="800.0F"/>
<Leg type="CF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="PELAN" flyOver="FALSE" theta="0" rho="0.0N" magneticCourse="112.4" distance="6.5N" altitudeDescriptor="+" altitude1="800.0F" altitude2="2000.0F"/>
<Leg type="HM" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="PELAN" turnDirection="R" magneticCourse="290" distance="4.0N" altitudeDescriptor="+" altitude1="2000.0F"/>
</MissedApproachLegs>
</Approach>
<Approach type="LOCALIZER" runway="14" designator="NONE" suffix="0" gpsOverlay="FALSE" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" altitude="3800.0F" heading="122.800003" missedAltitude="2000.0F">
<ApproachLegs>
<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" recommendedType="LOCALIZER" recommendedIdent="IASH" theta="319" rho="13.1N" altitudeDescriptor="+" altitude1="3800.0F" altitude2="3800.0F"/>
<Leg type="HF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" turnDirection="L" magneticCourse="139" distance="4.0N" altitudeDescriptor="+" altitude1="3800.0F"/>
<Leg type="CF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="LODTI" flyOver="FALSE" recommendedType="LOCALIZER" recommendedIdent="IASH" theta="318.5" rho="7.5N" magneticCourse="138.5" distance="4.7N" altitudeDescriptor="+" altitude1="3800.0F" altitude2="2500.0F"/>
<Leg type="CF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="NORIY" flyOver="FALSE" recommendedType="LOCALIZER" recommendedIdent="IASH" theta="318.5" rho="4.3N" magneticCourse="138.5" distance="3.2N" altitudeDescriptor="+" altitude1="2500.0F" altitude2="1600.0F"/>
<Leg type="CF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="CIBES" flyOver="FALSE" recommendedType="LOCALIZER" recommendedIdent="IASH" theta="318.5" rho="1.8N" magneticCourse="138.5" distance="2.5N" altitudeDescriptor="+" altitude1="1600.0F" altitude2="760.0F"/>
<Leg type="CF" fixType="RUNWAY" fixRegion="K6" fixIdent="RW14" flyOver="FALSE" recommendedType="LOCALIZER" recommendedRegion="K6" recommendedIdent="IASH" theta="318.5" rho="0.0N" magneticCourse="138.5" distance="1.8N" altitudeDescriptor="A" altitude1="247.0F" altitude2="247.0F"/>
</ApproachLegs>
<MissedApproachLegs>
<Leg type="CA" magneticCourse="139" altitudeDescriptor="+" altitude1="800.0F"/>
<Leg type="DF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="PELAN" flyOver="FALSE" altitudeDescriptor="+" altitude1="2000.0F"/>
<Leg type="HM" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="PELAN" turnDirection="R" magneticCourse="290" distance="4.0N" altitudeDescriptor="+" altitude1="2000.0F"/>
</MissedApproachLegs>
</Approach>
<Approach type="RNAV" runway="14" designator="NONE" suffix="0" gpsOverlay="FALSE" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" altitude="3800.0F" heading="139" missedAltitude="2000.0F">
<ApproachLegs>
<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" altitudeDescriptor="+" altitude1="3800.0F"/>
<Leg type="HF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" turnDirection="L" magneticCourse="138.5" distance="4.0N" altitudeDescriptor="+" altitude1="3800.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="LODTI" magneticCourse="138.5" distance="4.7N" altitudeDescriptor="+" altitude1="2500.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="NORIY" magneticCourse="138.5" distance="3.2N" altitudeDescriptor="+" altitude1="1600.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="HESKO" magneticCourse="138.5" distance="1.9N" altitudeDescriptor="V" altitude1="1000.0F"/>
<Leg type="TF" fixType="RUNWAY" fixRegion="K6" fixIdent="RW14" magneticCourse="138.5" distance="2.4N" altitudeDescriptor="A" altitude1="247.0F"/>
</ApproachLegs>
<MissedApproachLegs>
<Leg type="CA" magneticCourse="139" altitudeDescriptor="+" altitude1="800.0F"/>
<Leg type="DF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="PELAN" flyOver="FALSE" altitudeDescriptor="+" altitude1="2000.0F"/>
<Leg type="HM" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="PELAN" turnDirection="R" magneticCourse="267" distance="4.0N" altitudeDescriptor="+" altitude1="2000.0F"/>
</MissedApproachLegs>
<Transition transitionType="FULL" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="TUMAE" altitude="3800.0F">
<TransitionLegs>
<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="TUMAE" altitudeDescriptor="+" altitude1="3800.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" magneticCourse="228.3" altitudeDescriptor="+" altitude1="3800.0F"/>
</TransitionLegs>
</Transition>
</Approach>
<Approach type="RNAV" runway="32" designator="NONE" suffix="0" gpsOverlay="FALSE" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="ELIRY" altitude="2500.0F" heading="139" missedAltitude="3800.0F">
<ApproachLegs>
<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="ELIRY" altitudeDescriptor="+" altitude1="2500.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="CORNY" magneticCourse="318.5" distance="6.0N" altitudeDescriptor="+" altitude1="2000.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="ESICU" magneticCourse="318.5" distance="2.4N" altitudeDescriptor="V" altitude1="1220.0F"/>
<Leg type="TF" fixType="RUNWAY" fixRegion="K6" fixIdent="RW32" magneticCourse="318.5" distance="3.1N" altitudeDescriptor="A" altitude1="236.0F"/>
</ApproachLegs>
<MissedApproachLegs>
<Leg type="CA" magneticCourse="318.5" altitudeDescriptor="+" altitude1="481.0F"/>
<Leg type="DF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" flyOver="FALSE" altitudeDescriptor="+" altitude1="3800.0F"/>
<Leg type="HM" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="MUGGY" turnDirection="L" magneticCourse="139" distance="4.0N" altitudeDescriptor="+" altitude1="3800.0F"/>
</MissedApproachLegs>
<Transition transitionType="FULL" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="IRGAW" altitude="2500.0F">
<TransitionLegs>
<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="IRGAW" altitudeDescriptor="+" altitude1="2900.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="ELIRY" magneticCourse="48.5" altitudeDescriptor="+" altitude1="2500.0F"/>
</TransitionLegs>
</Transition>
<Transition transitionType="FULL" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="JEGDO" altitude="3000.0F">
<TransitionLegs>
<Leg type="IF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="JEGDO" altitudeDescriptor="+" altitude1="2500.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="ELIRY" magneticCourse="230.5" altitudeDescriptor="+" altitude1="2500.0F"/>
</TransitionLegs>
</Transition>
<Transition transitionType="FULL" fixType="VOR" fixRegion="K6" fixIdent="LWM" altitude="2500.0F">
<TransitionLegs>
<Leg type="IF" fixType="VOR" fixRegion="K6" fixIdent="LWM" altitudeDescriptor="+" altitude1="2500.0F"/>
<Leg type="TF" fixType="TERMINAL_WAYPOINT" fixRegion="K6" fixIdent="ELIRY" magneticCourse="260.6" altitudeDescriptor="+" altitude1="2500.0F"/>
</TransitionLegs>
</Transition>
</Approach>
<Waypoint lat="42.8030666666667" lon="-71.5578000000000" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="CIBES"/>
<Waypoint lat="42.7285500000000" lon="-71.4003833333333" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="CORNY"/>
<Waypoint lat="42.6741833333333" lon="-71.2860500000000" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="ELIRY"/>
<Waypoint lat="42.7505500000000" lon="-71.4467833333333" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="ESICU"/>
<Waypoint lat="42.8084666666667" lon="-71.5692333333333" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="HESKO"/>
<Waypoint lat="42.5843833333333" lon="-71.3645000000000" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="IRGAW"/>
<Waypoint lat="42.7639166666667" lon="-71.2016666666667" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="JEGDO"/>
<Waypoint lat="42.8538500000000" lon="-71.6655666666667" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="LODTI"/>
<Waypoint lat="42.8250833333333" lon="-71.6044666666667" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="NORIY"/>
<Waypoint lat="42.9883833333333" lon="-71.6743166666667" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="TUMAE"/>
<Waypoint lat="42.8234333333333" lon="-71.6022166666667" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="CHERN"/>
<Waypoint lat="42.8958166666667" lon="-71.7548333333333" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="MUGGY"/>
<Waypoint lat="42.7555555555556" lon="-71.3298361111111" waypointType="NAMED" magvar="16" waypointRegion="K6" waypointIdent="PELAN"/>