Skip to main content

Attachement Tutorial

Looking at the 172 now in the VFS, and assuming you're modifying the G1000 variant, this is what you'll want:

  • Root name, like arnaud-c172-mod or something like that

  • Inside of there, a SimObjects folder, layout.json, and manifest.json

  • Inside SimObjects, an Airplanes folder

  • Inside Airplanes, an asobo_c172sp_g1000 folder

  • Inside asobo_c172sp_g1000, an attachments folder and presets folder

This is where things get a little tricky. It looks like Asobo uses a slightly unorthodox way (though not incorrect) of seting up pax seats. Easiest way of doing things will yield no back seats and no copilot seat. Slightly more involved way will include copilot seat but no back seats.... which one do you want to do?

Ok, so then it'll have to go like this;

For starters, typically the attached_objects.cfg would have individual [SIM_ATTACHMENT.X] entries for the rear seats and the copilot seat. However, what Asobo has done is take these two models and tied them into the same function, and then added that function as a Sim Attachment to the CFG. Within this function they then have a model.xml, which lists the back seat model LODs, and then attaches the copilot seat via the <MergeModel> tag:

<LOD minSize="0" ModelFile="..\..\Part_Interior_Backseats\model\BACKSEATS_LOD00.gltf">
            <MergeModel>..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD00.gltf</MergeModel>

So, the easiest way to gut the seats is to just remove this function's entry in the attached_objects.cfg and you're done — but since the copilot seat model is merged into the back seats, your copilot seat will disappear with the back seats which we don't want.

To counter this, we will have to create a new duplicate yet modified version of this function. To do so, go to your attachments folder. Create a new folder called Asobo, and then inside of there, a new folder called function_interior_ferryseats or whatever you want to call this function. This will be our duplicate but modified version of Asobo's passenger function.

Now, we will go back to the VFS, and follow the file path similar to ours. SimObjects/Airplanes/asobo_c172sp_g1000/attachments/asobo, but now, we are looking for the folder called function_interior_passengers. Open that up, and you will see a model folder, a navigation_graph folder, and a texture folder. We need to copy these into our function_interior_ferryseats, but, there is a caveat.

The VFS locks files from having edit access, so while we can copy and edit, we can't save without it being a "copy". So what I like to do is just recreate the folders in my function, and all of the files inside. So, after doing that, our function_interior_ferryseats should have the following;

  • model folder with a file called interior_passengers.xml

  • navigation_graph folder with a file called navigation_graph_passenger.cfg

  • texture folder with a file called texture.cfg.

The XML and two CFGs should be empty since you created them from scratch. Now, we can open the originals of each, and copy the contents of each over to our new XMLs and CFGs. That way, we don't have any edit permission issues.

At this point, I would recommend changing interior_passengers.xml to interior_ferryseats.xml or similar, and navigation_graph_passenger.cfg to navigation_graph_ferryseats.cfg or similar, just to prevent any conflict.

Now, we have our duplicates and are ready to edit. The first thing we need to do is modify the XML in order to get rid of the back seats, and make it so the models are the copilot seats, rather than the copilot seats merged into the backseats as Asobo has it. To do so, we will need to go from this:

<?xml version="1.0" encoding="utf-8"?>
<ModelInfo>
    <LODS>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Backseats\model\BACKSEATS_LOD00.gltf">
            <MergeModel>..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD00.gltf</MergeModel>
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Backseats\model\BACKSEATS_LOD01.gltf">
            <MergeModel>..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD01.gltf</MergeModel>
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Backseats\model\BACKSEATS_LOD02.gltf">
            <MergeModel>..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD02.gltf</MergeModel>
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Backseats\model\BACKSEATS_LOD03.gltf">
            <MergeModel>..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD03.gltf</MergeModel>
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Backseats\model\BACKSEATS_LOD04.gltf">
            <MergeModel>..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD04.gltf</MergeModel>
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Backseats\model\BACKSEATS_LOD05.gltf">
            <MergeModel>..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD04.gltf</MergeModel>
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Backseats\model\BACKSEATS_LOD06.gltf">
            <MergeModel>..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD04.gltf</MergeModel>
        </LOD>
    </LODS>
</ModelInfo>

To this:

<?xml version="1.0" encoding="utf-8"?>
<ModelInfo>
    <LODS>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD00.gltf">
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD01.gltf">
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD02.gltf">
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD03.gltf">
        </LOD>
        <LOD minSize="0" ModelFile="..\..\Part_Interior_Seat_Copilot\model\SEAT_COPILOT_LOD04.gltf">
    </LODS>
</ModelInfo>

You can see that we have SEAT_COPILOT_LODXX.gltf as our models now, rather than having them merged. We also of course got rid of the <MergeModel> tags since we don't need that. Also note that there is now LOD05 or LOD06, since the copilot seats only have LODS 00 thru 04, compared to the backseats having LODs 00 thru 06. So now we can save that and the XML is done.

Now, we will go to our navigation_graph folder and open up navigation_graph_ferryseats.cfg or whatever you have named it. These are mainly for career mode but might have some EFB/W&B things associated, I haven't messed with them much at all. It's up to you on what you want to get rid of, or if you want to just keep it as-is.

Finally we have our texture folder, and it's texture.cfg inside. These are just texture fallbacks, so we can leave it as is. No need to touch anything in there.

So that is it for the attachment and function stuff. Now, we will go on to creating the preset.

Navigate back to your presets folder, and create a new folder inside called asobo, and then inside of asobo, create a folder called c172sp_avionics_ferry, or whatever you want. Asobo for the 172 G1000 uses the c172sp_avionics_xxx nomenclature, I personally would recommend sticking with that to have c172sp_avionics_ as a uniform prefix.

Now, we will go back to the VFS. Similar to the attachment function, we will be creating a duplicate of the c172sp_avionics_passengers preset just to make things a little easier. So, the VFS filepath is SimObjects/Airplanes/asobo_c172sp_g1000/presets/asobo/c172sp_avionics_passengers. Inside of here, you will see multiple folders — checklist, config, flt, input, navigation_graph, panel, and thumbnail. Copy all of these except for config and paste them into your own c172sp_avionics_ferry folder. We won't be touching any of these, they're just automerge, so not having edit perms is fine since they're just gonna be the same.

Now, within the same c172sp_avionics_ferry folder, create your own config folder. Inside of that, you'll now have to copy over a few of the CFGs from .../c172sp_avionics_passengers/config. These are also just default automerge, so we'll just copy them instead of making them from scratch. The CFGs that you want to copy are;

  • ai.cfg
  • cameras.cfg
  • cockpit.cfg
  • engines.cfg
  • flight_performance.cfg
  • gameplay.cfg
  • reference_points.cfg
  • systems.cfg

So that is all of the .cfgs except for aircraft.cfg, attached_objects.cfg, and flight_model.cfg. Those three CFGs you will need to create from scratch, and then copy the contents of the original over into those. Once that is done, let's start with aircraft.cfg. Asobo has the following:

[FLTSIM.0]
title = "C172SP G1000 Passengers" ; Variation name
ui_variation = "@asobo-aircraft-c172sp-as1000,TT:AIRCRAFT.UI_VARIATION_AVIONICS_PASSENGERS"
ui_instrumentation="@asobo-aircraft-c172sp-as1000,TT:AIRCRAFT.UI_INSTRUMENTATION_GARMIN_G1000"
isUserSelectable = 1
capacity = 3
targeted_specializations = FIF-PLN, FEF-PLN, TOR-PLN, PRC-PSO, PPL-PLN, FAF-PLN

[PILOT]
generated_copilot = "COPILOT"
generated_pilot = "Pilot"
pilot_attach_node ="ATTACH_SEAT_PILOT"
pilot_default_animation = "IDLES_Leaned"

A lot of this is fallback stuff, where you see the @ signs, TT:, etc etc. The targeted specializations are for career mode, as is the [PILOT] section. There are lines you can add and substract, but I would recommend the following:

[MODULAR_MERGE]
auto = true

[FLTSIM.0]
title = "C172SP G1000 Ferry Tank"
description = "Cessna C172SP G1000 with 155 gallon ferry tank"
capacity = 3
ui_variation = "C172SP G1000 Ferry Tank" 
isUserSelectable = 1

[PILOT]
generated_pilot = "Pilot"
pilot_attach_node ="ATTACH_SEAT_PILOT"
pilot_default_animation = "IDLES_Leaned"

So now the aircraft.cfg is done. There are other tricks, like setting the creator to your own name, which make your ferry 172 into it's own selectable aircraft in the menu, not just a variation within Asobo's. But for now, this should be good.

Now we will move on to the attached_objects.cfg. This is where the magic happens.... for the sake of space I won't copy over Asobo's entire contents, so you'll want to look for line #108, which is [SIM_ATTACHMENT.9]. This is Asobo's function_interior_passengers, which injects the back seat and copilot seat models. Since we now have our own, we will replace it with that.

attachment_root="SimObjects/Airplanes/Asobo_C172SP_G1000/attachments/asobo/Function_Interior_Passengers"

will become

attachment_root="SimObjects/Airplanes/Asobo_C172SP_G1000/attachments/asobo/function_interior_ferryseats"

and

attachment_file="model/INTERIOR_PASSENGERS.XML"

will become

attachment_file="model/interior_ferryseats.XML"

Changing these two lines will now call our function_interior_ferryseats rather than Asobo's function_interior_passengers, which should yield the backseats being removed, but the copilot seat remaining, as we have set up in our interior_ferryseats.xml.

So to recap thus far, as far as visuals go, we are done. We created a new function that injects only the copilot seat and removes the back seats. Then, we created a new preset that references this ferry seat function instead of Asobo's passenger seats function.

Now, for the fuel. If I remember correctly, your fuel modifications were hosted within the flight_model.cfg file. Within your .../c172sp_avionics_ferry/config folder, create that flight_model.cfg file and paste into it Asobo's contents from their flight_model.cfg folder. It should look something like this:

[MODULAR_MERGE]
auto = true

[VERSION]
major = 1
minor = 0

[WEIGHT_AND_BALANCE]
station_load.0 = 170, -4.0, -0.7, 0.8, TT:MENU.PAYLOAD.PILOT, 1
station_load.1 = 170, -4.0, 0.7, 0.8, TT:MENU.PAYLOAD.COPILOT, 2
station_load.2 = 0, -5.5, -0.7, 0.8, TT:MENU.PAYLOAD.PASSENGER_LEFT, 5
station_load.3 = 0, -5.5, 0.7, 0.8, TT:MENU.PAYLOAD.PASSENGER_RIGHT, 5
station_load.4 = 0, -8, 0, 0, TT:MENU.PAYLOAD.TAIL_1, 6
station_load.5 = 0, -9.5, 0, 0, TT:MENU.PAYLOAD.TAIL_2, 6

What you see here is CFG merging in action. The C172 has most of it's guts located within the common folder, and in the case of the flight_model.cfg file, all of the guts of that are in that common/config/flight_model.cfg. So, instead of overriding that, since we have presets now, we can "merge" into that. As you can see above, for Asobo's passenger variant, they have "merged" in station loads 0 thru 5 since they are specific to the 172 passengers variant. If these lines are present in the common cfg, they will be overwritten when using this variant. If they are not present in the common cfg, they will be added to it. Either way, it's merged.

So, all that you need for the merge to happen is:

[MODULAR_MERGE]
auto = true

[VERSION]
major = 1
minor = 0

And then whatever you want to merge below that. You need the header ([WEIGHT_AND_BALANCE] in Asobo's), which is probably [FUEL] in your case, and then any line items for that header. So, yours might look something like this:

[MODULAR_MERGE]
auto = true

[VERSION]
major = 1
minor = 0

[FUEL]
External1 = -4.6, 0, 0, 155, 0

The fuel system in FS24 is new, so it may be different, probably will require reading the new SDK for it. The modular merge can be finnicky at times too, so you may need to include all of the fuel tanks for example, but likely and ideally the above should be all you need. But just a heads up pretty much.

And that should be about it. If you don't have a manifest.json, you can use the following contents for yours:

{
  "dependencies": [],
  "content_type": "AIRCRAFT",
  "title": "Cessna C172SP G1000 | 155 Gallon Ferry Tank",
  "manufacturer": "Textron Aviation",
  "creator": "Arnaud",
  "package_version": "0.1.0",
  "minimum_game_version": "1.4.20",
  "export_type": "Community",
  "builder": "Microsoft Flight Simulator 2024",
  "package_order_hint": "CUSTOM_SIMOBJECTS_PATCH",
  "release_notes": {
    "neutral": {
      "LastUpdate": "",
      "OlderHistory": ""
    }
  }
}

And the layout.json, be sure to run that after you've made your changes and after any subsequent changes before turning on the sim. I assume you have the MSFSLayoutGenerator.exe from liveries and stuff like that. Voila! Done! Now you'll see your ferry variant show up in the sim, with no back seats and a 155 gallon fuel tank.