The commandline/UI fix is great, now I'm getting the same results from both methods.
As for the "diff friendly" output, it's almost there, this is what I've seen so far:
* Removing IDs does generate a perfect diff, but the lost of IDs is a big deal for me,
since all I can't tell easily which parts are related to each other.
* Not removing IDs, generates a quite "diff friendly" output already, but like I said
before, some objects get reordered and screw the diffs. It needs some tweaking.
Since I had some free time (and I didn't want to bother you more than I already did :P), I
decided to see code if I could come out with a solution (quite bold on my part :P as I'm
not a Java dev and my knowledge about Flash internals is almost non-existant :P). But I
think I found something that may be useful:
Looking exported AS files and the objects in the tree generated by the FFdec GUI for the
'ATG_-_Reconstruction.v1697.swf' file, I noticed the following:
* the unordered objects were coming from objects with same IDs. (look at
* when exporting these files, the code add a secuential number at the end of the filename
to differentiate them (like "on(release)_1.as"), first come first served, so I guess this
is what is scrambling the objects (see "code_that_adds_secuential_IDs.png")
* all the objects that are sharing IDs and generating a non-friendly diff output are
* all PlaceObjects with the same IDs, have different "Depth" (look at
"PlaceObject2_depth.png", for those particular objects, the depths are 7, 12 and 17)
After a while I got curious about this depth attribute (I guess you or jpexs probably
already know about it, but I didn't), In this page: http://www-lehre.inf.uos.de/~fbstark/diplom/docs/swf/DisplayList.htm
"The depth value determines the stacking order of the character. Characters with lower
depth values are displayed underneath characters with higher depth values. A depth value
of 1 means the character is displayed at the bottom of the stack. There can be only one
character at any given depth. This means a character that is already on the display list
can be identified by its depth alone. (i.e. a CharacterId is not required)."
So I guess it would help to generate a sortable Unique ID between the different instances
of these PlaceObjects.
So I added 3 lines of code in CharacterIdTag.getExportFileName() (see "code_changed.png")
to generate directories like "PlaceObject_ID_DEPTH" instead of just "PlaceObject_ID", and
after sorting the code by object types + IDs (which I get from the file structure), now
I'm getting diff like I wanted (showing only the real changes).
Doing a diff of "export_modified_ffdec_1696.txt" "export_modified_ffdec_1697.txt" (which
are just a concatenation of the exported files, sorted by name + ID), both generated by
the modified version of ffdec, show only the real changes.
It "works for me"(TM) and "at least for this case"(TM), but I guess you are savvy enough
to check if this is a good idea/valid solution and implement it correctly if necessary.
Quite a long comment, it's 1AM and I'm sleepy, English isn't my native language, so I'm
praying I made myself clear :P