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 issues#1198 Making small modifications to script causes game to crash
Author: tgp1994
Date created:
Type: bug
Visibility: Everybody
Assigned to:
Labels: AS3Direct Editation
State: closed
> What steps will reproduce the problem?
Open SWF file, find a script. Change a boolean value, string, or delete a small block of
code. Save SWF. When modifying a byte or string, the SWF file size increases by
approximately one KB. Attempt to launch the game by its EXE (Adobe AIR launcher?), game
crashes before main window opens.
> What is the expected output? What do you see instead?
The game to run like normal, without crashing.
> What version of the product are you using? Is it "nightly build"? Which operating system
do you have?
Both 8.0.1 stable and 8.0.1 nightly build 1340. Windows 10 64 bit.
> Please provide any additional information below. If the problem is related to a SWF
file, attach it here, otherwise we can't help you.
The game is called "RPG Tycoon", available for free on Steam as a demo. I'm attempting to
play around with some of the build in scripts. The SWF is over 92MB, I'm not sure it can
be attached here.
Please specify what do you edit exactly.
I can see here another file, which is 60MB, so probably you can attach 92MB also.
Server is having issues, this is a test...
Ok, looks like the server is not having issues anymore! I kept getting server errors
whenever I tried to make a post. Anyways, to answer your request:
> Please specify what do you edit exactly.
So I open up the SWF (see the links, it will not upload here). I open the script
\scripts\GV, and go to line 36. I change the variable from "1" to "2". I hit the small
save button, then the large button. I launch the game, and it crashes before it can load.
Here are the links:
Original:
https://mega.nz/#!bMpUhJBb!hZ51vECiMrI_mLG3dKps9Jcg7Bw5zWm3qMYKIaY80PQ
Modified:
https://mega.nz/#!jRJEnRCB!N0J_2TeH9CkCK_qBULxJXjdisAXE3dj-msz8CqIFC3g
Note that the file size has changed by approximately one kilobyte, even though I'm only
changing the value of a string.
"I'm only changing the value of a string":
It doesn't matter what do you change, the whole ActionScript (all methods in the current
class) should be compiled.
If there is a bug in the compiler the result will be wrong.. (as it is wrong now)
If you add only a space, then remove it, so tries to compile exactly the same script, the
result will be also wrong...
Thanks for the bug report, it will be fixed sooner or later:)
But if you want to change only a small thing, i suggest you to use p-code editing. It
doesn't need script compiling, only parsing, so it is much more reliable (not
experimental) and it modifies only 1 method body, not all in the current class.
> It doesn't matter what do you change, the whole ActionScript (all methods in the current
class) should be compiled.
I guess I'm confused as to why you said "Please specify what do you edit exactly" when it
didn't matter anyways? None the less, thank you for the responses! Please let me know how
I can help with getting this fixed, if you need me to run more tests or provide additional
feedback.
I'm not quite sure what you mean when you tell me to edit the P-Code... Is this via the
Slot/Const Trait editing window?
Ad "please specify"
There can be two cases:
A) You added new code which has wrong game logic
or
B) It does not matter what you change and the script is incorrectly compiled back
We do not know which case so we ask you what changes you did.
If the problem occurs even if you press space and delete it and click save then it is
problem on our side, if you added incorrect code then it is your fault.
So please specify whether it is case B or not.
In both cases the script is compiled back and the SWF will have different size even if you
did not add any line of code. It is different compiler than original so different
bytecode.
And yes, P-code is on right side.
There is no title "P-code", it would be better if we add it.
Editing code on right side is not marked as experimental,
which should be more reliable.
And it does matter which script/class, so "\scripts\GV" was also a useful information.
This information was missing from the first comment.
OK, I think I understand. No new code was being added as far as I know, all I had to do
was change a byte, boolean, or string value to cause the crash to occur. It may be
worthwhile to note that the changes I made were in statically declared variables, outside
of the constructor for the class. It also seems that attempting to modify these values via
P-Code simply does not work (the changes are reverted when I save) even though the
variables are never changed anywhere else in the code.
I think you changed the value in the trait editor, not the pcode.
Here:
trait Qname(PackageNamespace(""),"VERSION") slot slotid 0 type
Qname(PackageNamespace(""),"String") value Utf8("1") <=== "1" to "2"
Right?
Ok, it is similar, and it is in the same location, the only difference that the dialog
title is "Slot/Const trait"
Sorry, there was a bug saving this trait. I fixed it in the latest nightly (1368 or
newer)
Please try it. Now you should be able to change the (simple) value here.
There is a warning: "Static fields and consts are often initialized in initializers.
Editing value here is usually not enough!"
This means that sometimes (for example when the value is a complex object, array, but i
think it can occur for simple values, too) you should find the initialization in the left
bottom window (Traits and Consts), Traits panel. Select scripts or class initializer. Then
change the pcode in the ritht window.
Some info/question for/to JPEXS:
As i understood the problem is that the trait value comes from ConvertData.assignedValues,
right?
The warning message could be more accurate. Show it only when the value really comes from
this map.
I haven't changed the direct edit problem, so it is still wrong, will be fixed by JPEXS
later.
Try using the p-code deobfus button. It can work miracles. :)
Seems to be fixed in nightly 1849.
State: new→upgraded
State: upgraded→closed