JPEXS Free Flash Decompiler Issue Tracker

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

NEW : You can now close your own issues and reopen them later if needed. You can also comment closed issues.
List of issuesList of issues

#2655 FFDEC recompilation changes AVM1 bytecode for AS2 property setters, breaking ScrollBar behavior after script import
Author:
Date created:
Type: bug
Visibility: Everybody
Assigned to:
State: closed Help

> What steps will reproduce the problem? > What is the expected output? What do you see instead? > What version of the product are you using? Is it "nightly build"? Which operating system do you have? FFDEC v25.1.1. Windows 11. > Please provide any additional information below. If the problem is related to a SWF file, attach it here, otherwise we can't help you. MultiColumnScrollBar V5 PP Code ``` Push register3 Push 1 Push register2 Push constant16 CallMethod Pop ``` AS: this.__set__position(calculatedValue); V6 PP Code ``` Push register2 Push constant17 Push register3 SetMember ``` AS: this.position = newValue - (newValue % this._scrollDelta); See MultiColumnScrollBar In V6 this breaks the scroll behavior. In V6, the script was imported via FFDEC v25.1.1 Command: ffdec-cli -importScript data/interface/configpanel_v5.swf data/interface/configpanel_v6.swf build/_AS_staging/skyui_configpanel The MultiColumnScrollBar script hasn't even changed. It's absolutely identical. All the AS scripts are identical. It's just importing the same scripts into the same .swf file. I don't remember how I compiled configpanel_v5.swf.
This issue is a bit vague and I don't know what __set__ is supposed to be in AS1. But I was curious and made a minimal example of a decomp error in FFDec, whether it's the same issue or not. this.prop = 0 this.__set__prop(1); trace(this.prop); decompiles to this.prop = 0; this.prop = 1; trace(this.prop); which incorrectly changes value of prop.
Downloadsetprop.swf (1 KiB)
The behavior you're describing seems to be exactly that. For some reason, I can't see my uploaded files in the message.
Can I somehow run the SWF (v5 for example) in the standalone flash player? What else do I need? Is it part of some game or what does it need? I'd like to see the scrolling you talk about. But I see empty window when I run it only like that.
AS2 setters are internally created as methods like __set__attr(value), getters are similar as __get__attr(). When compiling in CS6, it replaces all assignments to attr with call to the __set__attr and all reads of attr to __get__attr calls. FFDec does not replace it. The property writes stay as SetMember, the reads stay as GetMember. But as I tested, the FlashPlayer translates them internally to the calls of setters/getters at runtime. So it should work both ways. If there is something not working in this SWF, it is probably something else. It would help if I could run that SWF in some context where I see the (bad) results and (optionally) debug it.
Yes, it's part of Skyrim SE. If you have it, I can send you two SkyUI archives, just let me know. I can confidently say that scrolling works reliably in v5, but it doesn't work in v6 due to the code behavior described above. The MultiColumnScrollBar code is exactly the same in both v5 and v6. I even checked all the changes in VS Code via Git comparison, and the scrolling code is the same everywhere, all the ActionScript is the same.
I don't know if you can test this in Skyrim SE, in case you don't want to bother with it. Essentially, you need to install Skyrim SE and SKSE for it. Then simply place the files from the archive into the Data folder where the game is located. Then simply run game via skse_loader.exe.
DownloadSkyUI_5.zip (1,183 KiB)DownloadSkyUI_6.zip (1,248 KiB)
When you launch the game, start a new game, open the menu by Esc -> System -> Mod Configuration -> SkyUI -> Advanced.
By the way, Skyrim SE supports hot reloading. You can edit the .swf file directly, and all changes will be updated in-game on the fly, without having to restart the game. Simply edit the .swf file in JPEXS, save your changes, and view them in-game.
Also, if you want logging, use skse.Log("") in your ActionScript code. You can find the logs in ...\My Games\Skyrim Special Edition\SKSE\skse64.log"
Please try nightly 3448, it should be better. You need to resave the scrollbar.
State: new→upgraded
This fixed the problem! Thank you!
State: upgraded→closed