I was trying to troubleshoot some scenery conflicts that were causing CTDs yesterday when I noticed something concerning. It seems that a lot of scenery creators are not changing the location of the
modelLib.BGL that is output by default for an ArtProj. I wrote a quick python script to scan every
layout.json in my airport folder, and out of 170-some add-on airports that I have almost 40 are shipping a file named
scenery/global/scenery/modelLib.BGL. This is less than ideal.
For those who don’t understand how the MSFS VFS works, the short version is that when the sim starts it loads all its own files first, then it reads the
layout.json of everything in the Community folder in alphabetical order and “stacks” those layouts on top of each other. If ever two packages have files with exactly the same name in exactly the same path whichever one was loaded first does not get its own copy – it gets the other package’s copy.
This is the output from my script just for the path
scenery/global/scenery/modelLib.BGL. Each line represents an airport that is trying to put something in that location. There are 38 of these. That means if everything is enabled, 37 of those airports are not going to have that file contain what they want it to contain. Needless to say, that can cause problems.
>> scenery/global/scenery/modelLib.BGL fd24c6b5792a3ccde5d1359fe992fde6 ./Asia Pacific/airport-ychl-charlton/layout.json 7d27df7dfa23670bf513cc01490cbd4f ./Asia Pacific/airport-ymav-avalon/layout.json 2314c2dad9ce30e8427cf87b3ca86245 ./Asia Pacific/airport-yred/layout.json 5fde84dfa0b3d65cdab4aeee31bd297b ./Asia Pacific/NZA-Discord_YPKG_Kalgoorlie-Boulder-Scenery-Pack-1.0/layout.json 8b28bed6741ad34264e71d1a30325753 ./Asia Pacific/ykbn/layout.json f7ffd330b88bd57b0f4aa16d8984766e ./Bush League Legends/stageonelabs-35me-matinicus-island-v1.1/layout.json e4e7059cba3e29f7dc5b7ea335217318 ./Bush League Legends/stageonelabs-bc02-moh-creek-v1.1/layout.json 91353f4aedaa8264a09882b66f9148f3 ./Bush League Legends/stageonelabs-bc04-middle-lake-v1.1/layout.json b30931f841a5b6e69f38795db0982c1c ./Bush League Legends/stageonelabs-bc05-north-tsuniah-lake-v1.1/layout.json 46dfdce0022df32cde7d2a047786e574 ./Bush League Legends/stageonelabs-c01a-boneyard-v1.1/layout.json cb9e79fa18cc4bd46bad5c6aa6960376 ./Bush League Legends/stageonelabs-caf4-tsuniah-lake-lodge-v1.1/layout.json ba9646e9bb771d04ad4a7442fe0cdbd0 ./Bush League Legends/stageonelabs-cyjt-stephenville-v1.1/layout.json eaf02ec3c4769f740afefaf22a5f7612 ./Bush League Legends/stageonelabs-cyyr-goose-bay-v1.1/layout.json 57fdf49b7d75e72a79b6bd6ff32b0c32 ./Bush League Legends/stageonelabs-ida1-mile-hi/layout.json 57fdf49b7d75e72a79b6bd6ff32b0c32 ./Bush League Legends/stageonelabs-ida1-mile-hi-v1.1/layout.json 45f70c076cf9832ca7c430527351af55 ./Bush League Legends/stageonelabs-kpvc-provincetown-v1.2/layout.json afdd16c01ea352d0aa419adc82369881 ./Bush League Legends/stageonelabs-ns01-atlantic-skydiving-v1.2/layout.json cd4158f9abb995494e2d777f09aca7e8 ./Europe/dwp-lfro/layout.json 0ec410e8b80e1df8c7c7a75b205687a7 ./Europe/ehhv_new/layout.json 6251ea16bbd5a854b9d6ddb0b38d8627 ./Europe/kjh-engs/layout.json a5550f14384ee261a70f6d1dddaf337c ./Europe/kjh-enr1/layout.json 126d20d1a6178591fd69737307b58cc6 ./Europe/kjh-ens1/layout.json 08a50bacf047ec1d1ddac9e72bf275cb ./Europe/kjh-envu/layout.json 1247e6734c044d949e19d7949a9ff28f ./Europe/LFPD BERNAY/layout.json c1f5990dd00d992c71ce9d40fea9c299 ./Europe/lhbs/layout.json cdac58c429832af0836cef6738805c8b ./Europe/lhfh/layout.json bc51039252cba35383db579e54a78e1c ./Europe/liri/layout.json 98a7fa6787f73b4216efb9be06f613ac ./Europe/OthertonAirfield/layout.json ad5e65858c9f57989483eb4d28b3ee58 ./Europe/piotrkol-airport-epnl-lososina2/layout.json b164e6bf72331d6e2e7fd28207c6425a ./Europe/pyreegue-lytv/layout.json dd4087e1cfad54cd116184662f2c2251 ./Europe/tailrotor-lidn/layout.json 748f363a7ff97b63dec79645d3b9d562 ./Europe/UK Farm Fields/gate/layout.json 646c0af11d239e5dd5b041913db77c59 ./Europe/UK Farm Fields/glider/layout.json 937f6c4bf56d70095d48ecea3b111ed6 ./Europe/UK Farm Fields/t3/layout.json 735ad2341a5be4cd144df985d26e05b6 ./North America/USA/campbell/layout.json f40aa7468018924e06ba80281deadec6 ./North America/USA/julysfire-airport-talkeetna-area-pack/layout.json d78a430fde95bedd96f8fab80093a6c1 ./North America/USA/u60-u60/layout.json 43fd8524c9a04a8123d77e51015598c7 ./North America/USA/verticalsim-kittyhawk-first-flight/layout.json
I’m an avionics developer (you may recognize me from such favorites as the Working Title G1000 and G3X), not a scenery developer, but after talking to a couple folks who do scenery it sounds like the problem is coming from folks who do net set unique paths for their ArtProj project in this window:
I believe that simply adding a unique path for your own scenery, like this, should solve that problem:
Doing that will make sure that your scenery gets exactly what it expects, and that you don’t step on anyone else’s stuff. It’s only neighborly.
I hope this helps some folks. If I got anything wrong, please feel free to correct me. And to be clear: I doin’t blame the content creators at all for this. I blame the incomplete SDK documentation combined with a ■■■■■■ interface.
Thanks for your time.