JPEXS Free Flash Decompiler Issue Tracker

If you are looking for the decompiler itself, visit https://github.com/jindrapetrik/jpexs-decompiler

NEW : We have got a new blog where we post some interesting SWF internals info.

List of issuesList of issues

#1158 Missing sprite visual
Author: user Brandon
Date created:
Type: feature
Visibility: Everybody
Assigned to:
State: closed Help

Hi again! I hope you wont kill me :-) But if you take game swf from ticket /www.free-decompiler.com/flash/issues/1147-sprite-is-exported-incorrectly and check symbol 2630 (should look like close button (x in circle)) you will find it empty.
developer
Symbol 2630 is a DefineEditText tag, maybe the number is wrong. Please check it.
user
check here
developer
Hmm, it is a different SWF file. How do you know that it should be a close button? I checked it with another decompiler, it is also empty.
user
sorry for wrong swf in first time, didnt think it will be changed so fast. check frame3 of Sprite2710(game.SwipeEndGame) you will find PlaceObject2(2640) go to it, check frame1, you will find PlaceObject2 (2630) mcClose and here is png, how it looks in original (x button in top right)
developer
I still don't understand why do you think that the empty it is wrong. Other decompilers shows it also empty. There is no characterid information in the placeobject tags. Maybe the character is dynamically loaded somehow. Or do you have any idea how to know which chatacter should be used?
user
well other decompilers are far behind. Ok. lets assume it is loaded dynamicaly (i dont know how it could be) it has to be somewhere, but i did not find it anywhere.
developer
I think it is in an external SWF file. Is this swf hosted somewhere? Can you share the URL?
user
developer
The button is in this file. DefineSprite 229. It is referenced by it's name (classname = Runtime_Button_Small_Default3) You can add a feature request to handle this somehow, but this is not a bug.
State: new→upgraded
user
i know about that sprite, but it is not the same. x is gray. but in original it is white.
user
Even if we assume, that they are the same. It is bug, because like you say it should be refferenced by Runtime_Button_Small_Default3. But there is no refference to Runtime_Button_Small_Default3 in code except Runtime_Button_Small_Default3.as
user
developer
No, it it different. Your sprite is not in your SWF file. If you think that the icon is not that one that I showed you in Main.swf, then show me which is the correct one in your file. Maybe you can convince me that this is a bug, but i don't think...
developer
"i know about that sprite, but it is not the same. x is gray. but in original it is white." The X is a different sprite, it is called Runtime_Icon_Close2 It is the DefineSprite 128 in Main.swf
user
Could you explain please, how it is loaded dynamically? The only reffernce Runtime_Button_Small_Default3 has it is its own class. I checked across all swfs
developer
I don't know how it is working in Flash, but you can see that the "X" sprite is not in your SWF file, so it is not possible to export it. So this is not a bug. Probably your main SWF is the Main.xxx.swf (this is why it is called Main), it loads the other resources, for example Game.xxx.swf There is already a feature request for multi part SWFs, however it is for debugging: /www.free-decompiler.com/flash/issues/1118-add-support-for-multi-part-swfs Sometimes there are ImportAsset tags, which references other swfs, but in your example there are no ImportAsset tag, so I don't know how Flash player knows which SWF should be used. Maybe it tries to find the specified classname in all previously loaded SWFs. (And what will it do if there are 2 SWFs with the same className) The question is how to handle it in FLA export. Should we import all referenced characters to the current FLA? Or export multiple FLAs?
user
All starts in preloader.swf each module loads its own resources. Main is main thats true. So if there is no ImportAsset tag in that case it should be handled by script somehow ? But there are no refernces to Runtime_Button_Small_Default3 and Runtime_Icon_Close2 in any script I even thought that it could be composed like "Runtime_"+param1+"_"+pram2 but still nothing.
developer
All (or at least which is required to start it) SWFs attached for this game.
Downloaddreamlandstory.zip (22,808 KiB)
user
here is full set of swfs
Downloadall_swfs.zip (45,187 KiB)
user
those in my zip could be different from those which are in honfika's zip cause they are changed recently (my zip is a full set of swfs, but they are older comparing to honfika's)
user
even if you export both of swfs(main and game) to fla. than build them to swcs and include completely to a single swf still no chance ti see that close button. and there are more to missing sprites. close button just an example.
user
so there are 2 variants of how it is possible 1. some information about character or tag is missing in decompiled fla 2. branch of action script code is lost during decompilation. in both cases looks like a bug or do i missing something again?
developer
Do you know Flash? Could you please create a sample? I mean a project which produces 2 swfs using classNames to reference characters. Is it 2 FLA file, or is it possible to produce 2 swf from 1 FLA? Sorry, I'm not a Flash developer, I created only some "hello world" test apps with it. I know only the internals of the SWF file.
developer
I think the 1st is not a bug. It is only not implemented. Multi part SWFs are not (fully) supported, yet.
user
Here is step by step: 1. Get Main.fla and Game.fla 2. Remove com folder from scripts folder cause it will produce errors (you may leave it and fix those errors it does not matter) 3. Open thoes FLAs with Flash Professional (i use 13.01) Press CTRL+SHIFT+F12 in popup uncheck SWF and check SWC. Infront of Actionscript 3.0 combobox press button with and icon of a wrench Add scripts folder there press Ok, than build 4. Open FlashDevelop chose create a new project in popup chose AS3 Project, chose desired project name and folder Copy both SWCs to project folder Ensure you have Project tab active in treeview Find both of SWCs in that treeview, right click them (one by one) chose Add to library Right click them (one by one) again and chose Options than in popup chose Include Library (Include completely) Than chose configuration Release or Debug (combobox under main menu) and press F8 or a button with a cogwheel icon I may provide you with resulting SWF or as3proj + both SWCs or What exacly do you need ?
user
anyway here is resulting game.swf with both FLAs in it
DownloadGame.swf (5,863 KiB)
developer
I need only a simple Flash project(s): FLA1: -sprite1, classname=myClassName => swf1.sw2 FLA2: -sprite1 with placeobjects, refrencing myClassName from FLA1 => swf2.swf Or is it only one FLA? I don't konw how this multi part swf works.
user
I dont exacaly understand what do you mean by saying multipart swf. Check that game.swf from my previous post. It contains all sprits from both original game.swf and main.swf
developer
That is ok, but I need a SIMPLE example project (source + compiled) Which produces 2 swf files. 2nd swf is using a character from the 1st swf. So a new project built up from scratch, very simple shapes (e.g a rectangle), nothing complicated. If you send this, I can investigate the FLA xml source, and try to improve FFDec to export the same format.
user
You can do that by importing assets. In that case ffdec process it correctly i attached an example. Or you may do it dynamically from srcipt. in that case you just need to load swf in the same domain and you may access all classes from that swf by using getDefinitionByName
DownloadTest.zip (53 KiB)
developer
Ok, so it contain an ImportAsset tag. How to load it dynamically with getDefinitionByName? I think your game is loading your asset in a similar way.
user
something like this: Font.registerFont(ApplicationDomain.currentDomain.getDefinition("RuntimeFont2") as Class); if it is so then a branch of code wasnt decompiled you may search for getDefinition and see which symbols are loaded dynamically. there are not much of them
user
i downloaded ffdec 8.0 and now i see what is going on. Is there any chance for some kind of workaround ?
developer
what is going on?
user
Sprite 2629 frame1 PlaceObject3 has special attribute "className" and you do not know how to store it in FLA as far as i understood
developer
Main.swf in Test.zip has also this classname attribute. But is also has an importasset tag.
user
so may be add that tag there as a workaround?
user
btw i checked in game.fla\library\Symbol 2629.xml and it looks like <DOMSymbolItem xmlns="http://ns.adobe.com/xfl/2008/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="Symbol 2629" lastModified="1454955589"> <timeline> <DOMTimeline name="Symbol 2629"> <layers/> </DOMTimeline> </timeline> </DOMSymbolItem> and if you check it in ffdec - it has 7 frames!
user
my thought was to add this linkageImportForRS="true"
user
So is it expected behaviour when 2629 has 7 frames in ffdec preview, but exported only one ? Or should i create separate issue ?
developer
It is the same problem, FFDec can't find your character. Btw: there are 0 frames, not one.
developer
State: upgraded→new
Type: bug→feature
user
i see. is there any hope fore quick solution?
user
I manually added ImportAsset2 tag (check attached png) and still not see any changes to 2630 What am i doing wrong ?
developer
Not from me, sorry... I don't know how it works. Maybe JPEXS will check it later.
developer
State: new→closed