Friday, May 01, 2009

I Lost My Objects

It seemed like opposite-day at Laminar Research...Austin saying that an error shouldn't quit the sim and me saying the error was never okay, ever. Well, I relented: with X-Plane 930 beta 8, if your scenery pack is missing objects, you can still fly.  Instead you get a single error message like this:

That is the "non-fatal" error dialog box - you will see it only once for each scenery pack with a problem for each time you run the sim.  It means that at least one thing is wrong with your scenery pack, but you need to look at Log.txt to see what's wrong. For example, you might see this in the Log.txt file:
Failed to find resource 'KSBD_example.obj' at 'Custom
Scenery/KSBD Demo Area/KSBD_example.obj'
Failed to find resource 'KSBD_example.obj' at 'Custom
Scenery/KSBD Demo Area/custom objects/KSBD_example.obj'
Failed to find resource 'KSBD_example.obj' at
Failed to find resource 'KSBD_example.obj'
at 'Resources/KSBD_example.obj'
***Error with scenery file "Custom Scenery/KSBD
Demo Area/Earth nav data/+30-120/+34-118.dsf"
(/Volumes/RAID/code/design/HLutils/Files/io_dsf.cpp: 503.)
Unable to locate object: KSBD_example.obj
In this case, X-Plane couldn't find the object KSBD_example.obj - the sim is also listing all of the places it looked.  Note that only the first location is a good location - the other 3 are legacy search paths that date all the way back to version 6.  It is likely that in the next major version we will trim down our search paths significantly.

A few comments on this whole situation:
  • Authors, do not ignore error messages like the dialog box above - every one of them indicates a condition serious enough that we think you should fix it. Non-fatal errors like these may crash future versions of the sim, or your content may simply stop working.

    If you file a bug against a future version of the sim saying your scenery pack used to work and is now broken, and we find that the old scenery pack had errors, we're not going to fix the bug - we're going to laugh maniacally and dance around you in a circle while singing "told you so".

    Okay - we're very unlikely to do that - but if you have errors in your scenery pack, you're doing something wrong and you need to fix it - treatment of illegal data is not stable between versions of the sim!!

  • I was never very sympathetic to this whole bug report because X-Plane has never accepted a DSF with missing objects - this has been a fatal* error since X-Plane 8.0 when DSF was introduced. So I simply don't understand why there are any scenery packs floating around with objects missing.  Why would you place an object if you don't want to see it? The whole issue strikes me as a total failure to check quality by authors, since even running your pack once would reveal this kind of problem every time!

  • The motivation to make missing objects illegal comes from version 7 and ENVs.  When looking at ENV scenery, I found that a large number of ENV scenery packs were missing at least some of their objects (an error that was silently ignored in ENV). It seemed like we were hiding an error and the result was authors not noticing simple mistakes that might "lose" an object (e.g. renaming an OBJ file).

    Hence the "harsh" policy for DSFs - it was in response to a real problem with existing scenery!

  • You don't need to have missing objects just because you use library objects from another scenery pack (that might not be around).  Use the EXPORT_BACKUP command in your library and a single blank OBJ as a place-holder for the objects you want from a library that might be missing.  OpenSceneryX provides a stub library that authors can include so that their scenery will load without errors even if the OpenSceneryX library is not installed.

Anyway, Austin was right to make the error non-fatal.  Besides being a little bit nicer for users who don't know (or care) why their pack is gone) it lets authors get a list of all missing objects with only one run of the program.

* Fatal?  In computer terms, a fatal error is one that makes the program quit, e.g. the error is fatal because it kills the program.


alpilotx said...

Hi Ben,

Was just reading you musings about missing objects and your critique, how there could be a scenery where the author doesn't checks if all his objects are there ...

Well, nowadays I could well imagine such a case:
--> Think about OpenSceneryX !
That is a 3rd party (relative to the scenery designer) object packages ... And if the users forgets to install that (user error), or the author doesn't supply enough warnings (developer error) about it, well, you might easily end up with a lot of missing objects :-)


Benjamin Supnik said...

Andras -

True! If a scenery pack uses OpenSceneryX an the author has OpenSceneryX installed, he would not notice the omission of the "stub" library. I think authors using OpenSceneryX need to be conscious of this situation.

sothis said...

there are no fatal errors. either things work or things work not. that's the simplicity of duality :-)

Daveduck said...

This is a welcome improvement. Occasionally I would see "missing object" errors in FS2XP conversions, why then required manually removal--and didn't seem to affect the scenery in any meaningful way. Unfortunately, the downside is that now I can't force users to install OpenSceneryX if it's integral to my scenery package. Drat.

Austin G said...

As a developer, if you want to force your users to realise that they are missing out on something, you could always modify the OpenSceneryX stub library so that instead of loading invisible objects, it loads objects that say "Please Install OpenSceneryX" in big red letters!

Note I'm not actually recommending this (OpenSceneryX is meant to be an optional download for users) but there is nothing actually stopping you from doing it.


Benjamin Supnik said...

DaveDuck - you couldn't really "force" them to do anything....only do things that hopefully make it obvious what you want them to do.

In other words, in the old system if you left out the OSX stubs to try to encourage users to install OSX, a certain subset of your users would simply ignore any docs you wrote and report the "crash" (really an error message) as a bug in X-plane itself to us.