mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/jpexs-decompiler.git
synced 2026-09-25 12:11:11 +00:00
sprite frames display fix
other flash viewer fixes
This commit is contained in:
@@ -331,7 +331,7 @@ public class SWF {
|
||||
findFileAttributes();
|
||||
}
|
||||
|
||||
private void findFileAttributes(){
|
||||
private void findFileAttributes() {
|
||||
for (Tag t : tags) {
|
||||
if (t instanceof FileAttributesTag) {
|
||||
fileAttributes = (FileAttributesTag) t;
|
||||
@@ -339,7 +339,7 @@ public class SWF {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private void assignExportNamesToSymbols() {
|
||||
HashMap<Integer, String> exportNames = new HashMap<>();
|
||||
for (Tag t : tags) {
|
||||
@@ -2100,7 +2100,7 @@ public class SWF {
|
||||
g.setTransform(trans);
|
||||
if (character instanceof DrawableTag) {
|
||||
DrawableTag drawable = (DrawableTag) character;
|
||||
BufferedImage img = drawable.toImage(layer.ratio < 0 ? 0 : layer.ratio/*layer.duration*/, allTags, displayRect, characters, visited);
|
||||
BufferedImage img = drawable.toImage(layer.ratio < 0 ? 0 : layer.ratio/*layer.duration*/, allTags, displayRect, characters, visited);
|
||||
if (layer.filters != null) {
|
||||
for (FILTER filter : layer.filters) {
|
||||
img = filter.apply(img);
|
||||
@@ -2114,62 +2114,54 @@ public class SWF {
|
||||
img = layer.colorTransFormAlpha.apply(img);
|
||||
}
|
||||
Point imgPos = drawable.getImagePos(layer.ratio < 0 ? 0 : layer.ratio, characters, visited);
|
||||
//imgPos.x+=fixX;
|
||||
//imgPos.y+=fixY;
|
||||
/*if (imgPos.x < 0) {
|
||||
imgPos.x = 0;
|
||||
}
|
||||
if (imgPos.y < 0) {
|
||||
imgPos.y = 0;
|
||||
}*/
|
||||
/*switch (layer.blendMode) {
|
||||
case 0:
|
||||
case 1:
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
case 2: //TODO:Layer
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
case 3:
|
||||
g.setComposite(BlendComposite.Multiply);
|
||||
break;
|
||||
case 4:
|
||||
g.setComposite(BlendComposite.Screen);
|
||||
break;
|
||||
case 5:
|
||||
g.setComposite(BlendComposite.Lighten);
|
||||
break;
|
||||
case 6:
|
||||
g.setComposite(BlendComposite.Darken);
|
||||
break;
|
||||
case 7:
|
||||
g.setComposite(BlendComposite.Difference);
|
||||
break;
|
||||
case 8:
|
||||
g.setComposite(BlendComposite.Add);
|
||||
break;
|
||||
case 9:
|
||||
g.setComposite(BlendComposite.Subtract);
|
||||
break;
|
||||
case 10:
|
||||
g.setComposite(BlendComposite.Invert);
|
||||
break;
|
||||
case 11:
|
||||
g.setComposite(BlendComposite.Alpha);
|
||||
break;
|
||||
case 12:
|
||||
g.setComposite(BlendComposite.Erase);
|
||||
break;
|
||||
case 13:
|
||||
g.setComposite(BlendComposite.Overlay);
|
||||
break;
|
||||
case 14:
|
||||
g.setComposite(BlendComposite.HardLight);
|
||||
break;
|
||||
default: //Not implemented
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
}*/
|
||||
switch (layer.blendMode) {
|
||||
case 0:
|
||||
case 1:
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
case 2: //TODO:Layer
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
case 3:
|
||||
g.setComposite(BlendComposite.Multiply);
|
||||
break;
|
||||
case 4:
|
||||
g.setComposite(BlendComposite.Screen);
|
||||
break;
|
||||
case 5:
|
||||
g.setComposite(BlendComposite.Lighten);
|
||||
break;
|
||||
case 6:
|
||||
g.setComposite(BlendComposite.Darken);
|
||||
break;
|
||||
case 7:
|
||||
g.setComposite(BlendComposite.Difference);
|
||||
break;
|
||||
case 8:
|
||||
g.setComposite(BlendComposite.Add);
|
||||
break;
|
||||
case 9:
|
||||
g.setComposite(BlendComposite.Subtract);
|
||||
break;
|
||||
case 10:
|
||||
g.setComposite(BlendComposite.Invert);
|
||||
break;
|
||||
case 11:
|
||||
g.setComposite(BlendComposite.Alpha);
|
||||
break;
|
||||
case 12:
|
||||
g.setComposite(BlendComposite.Erase);
|
||||
break;
|
||||
case 13:
|
||||
g.setComposite(BlendComposite.Overlay);
|
||||
break;
|
||||
case 14:
|
||||
g.setComposite(BlendComposite.HardLight);
|
||||
break;
|
||||
default: //Not implemented
|
||||
g.setComposite(AlphaComposite.SrcOver);
|
||||
break;
|
||||
}
|
||||
|
||||
g.drawImage(img, imgPos.x, imgPos.y, null);
|
||||
} else if (character instanceof BoundedTag) {
|
||||
@@ -2188,6 +2180,12 @@ public class SWF {
|
||||
/*g.setPaint(Color.yellow);
|
||||
g.draw(new Rectangle(ret.getWidth()-1,ret.getHeight()-1));*/
|
||||
cache.put(key, new CachedImage(ret));
|
||||
|
||||
/*try {
|
||||
ImageIO.write(ret, "png", new File("tst_id_" + containerId + "_time_" + System.currentTimeMillis() + ".png"));
|
||||
} catch (IOException ex) {
|
||||
Logger.getLogger(SWF.class.getName()).log(Level.SEVERE, null, ex);
|
||||
}*/
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -2217,11 +2215,11 @@ public class SWF {
|
||||
return;
|
||||
}
|
||||
|
||||
while (startFrame > totalFrameCount) {
|
||||
while (startFrame >= totalFrameCount) {
|
||||
startFrame -= totalFrameCount;
|
||||
}
|
||||
|
||||
while (stopFrame > totalFrameCount) {
|
||||
while (stopFrame >= totalFrameCount) {
|
||||
stopFrame -= totalFrameCount;
|
||||
}
|
||||
|
||||
|
||||
@@ -51,7 +51,7 @@ public class SwitchItem extends LoopItem implements Block {
|
||||
ret += hilight("switch(") + switchedObject.toString(localData) + hilight(")") + "\r\n{\r\n";
|
||||
for (int i = 0; i < caseCommands.size(); i++) {
|
||||
for (int k = 0; k < valuesMapping.size(); k++) {
|
||||
if (valuesMapping.get(k) == i) {
|
||||
if (valuesMapping.get(k) == i) {
|
||||
ret += "case " + caseValues.get(k).toString(localData) + ":\r\n";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2241,12 +2241,14 @@ public class MainFrame extends AppFrame implements ActionListener, TreeSelection
|
||||
List<Tag> controlTags = swf.tags;
|
||||
int containerId = 0;
|
||||
RECT rect = swf.displayRect;
|
||||
int totalFrameCount = swf.frameCount;
|
||||
if (fn.getParent() instanceof DefineSpriteTag) {
|
||||
controlTags = ((DefineSpriteTag) fn.getParent()).subTags;
|
||||
containerId = ((DefineSpriteTag) fn.getParent()).spriteId;
|
||||
rect = ((DefineSpriteTag) fn.getParent()).getRect(characters, new Stack<Integer>());
|
||||
totalFrameCount = ((DefineSpriteTag) fn.getParent()).frameCount;
|
||||
}
|
||||
previewImagePanel.setImage(SWF.frameToImage(containerId, ((FrameNode) tagObj).getFrame() - 1, swf.tags, controlTags, rect, swf.frameCount, new Stack<Integer>()));
|
||||
previewImagePanel.setImage(SWF.frameToImage(containerId, ((FrameNode) tagObj).getFrame() - 1, swf.tags, controlTags, rect, totalFrameCount, new Stack<Integer>()));
|
||||
} else if (((tagObj instanceof FrameNode) && ((FrameNode) tagObj).isDisplayed()) || ((tagObj instanceof CharacterTag) || (tagObj instanceof FontTag)) && (tagObj instanceof Tag)) {
|
||||
try {
|
||||
|
||||
@@ -2292,7 +2294,7 @@ public class MainFrame extends AppFrame implements ActionListener, TreeSelection
|
||||
break;
|
||||
}
|
||||
Tag t = (Tag) o;
|
||||
Set<Integer> needed = t.getDeepNeededCharacters(characters,new ArrayList<Integer>());
|
||||
Set<Integer> needed = t.getDeepNeededCharacters(characters, new ArrayList<Integer>());
|
||||
for (int n : needed) {
|
||||
if (!doneCharacters.contains(n)) {
|
||||
sos2.writeTag(characters.get(n));
|
||||
@@ -2336,7 +2338,7 @@ public class MainFrame extends AppFrame implements ActionListener, TreeSelection
|
||||
}
|
||||
} else if (tagObj instanceof AloneTag) {
|
||||
} else {
|
||||
Set<Integer> needed = ((Tag) tagObj).getDeepNeededCharacters(characters,new ArrayList<Integer>());
|
||||
Set<Integer> needed = ((Tag) tagObj).getDeepNeededCharacters(characters, new ArrayList<Integer>());
|
||||
for (int n : needed) {
|
||||
sos2.writeTag(characters.get(n));
|
||||
}
|
||||
|
||||
@@ -272,8 +272,8 @@ public class DefineButton2Tag extends CharacterTag implements Container, Bounded
|
||||
|
||||
@Override
|
||||
public Point getImagePos(int frame, HashMap<Integer, CharacterTag> characters, Stack<Integer> visited) {
|
||||
RECT r=getRect(characters, visited);
|
||||
return new Point(r.Xmin/20, r.Ymin/20);
|
||||
RECT r = getRect(characters, visited);
|
||||
return new Point(r.Xmin / 20, r.Ymin / 20);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -286,8 +286,8 @@ public class DefineButtonTag extends CharacterTag implements ASMSource, BoundedT
|
||||
|
||||
@Override
|
||||
public Point getImagePos(int frame, HashMap<Integer, CharacterTag> characters, Stack<Integer> visited) {
|
||||
RECT r=getRect(characters, visited);
|
||||
return new Point(r.Xmin/20, r.Ymin/20);
|
||||
RECT r = getRect(characters, visited);
|
||||
return new Point(r.Xmin / 20, r.Ymin / 20);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -110,7 +110,7 @@ public class DefineSpriteTag extends CharacterTag implements Container, BoundedT
|
||||
if (visited.contains(spriteId)) {
|
||||
return new RECT();
|
||||
}
|
||||
visited.push(spriteId);
|
||||
visited.push(spriteId);
|
||||
RECT emptyRet = new RECT();
|
||||
RECT ret = new RECT(Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE);
|
||||
HashMap<Integer, Integer> depthMap = new HashMap<>();
|
||||
|
||||
@@ -129,20 +129,20 @@ public class Tag implements NeedsCharacters, Exportable {
|
||||
return new HashSet<>();
|
||||
}
|
||||
|
||||
public Set<Integer> getDeepNeededCharacters(HashMap<Integer, CharacterTag> characters,List<Integer> visited) {
|
||||
public Set<Integer> getDeepNeededCharacters(HashMap<Integer, CharacterTag> characters, List<Integer> visited) {
|
||||
Set<Integer> ret = new HashSet<>();
|
||||
Set<Integer> needed = getNeededCharacters();
|
||||
for (int ch : needed) {
|
||||
for (int ch : needed) {
|
||||
if (!characters.containsKey(ch)) { //TODO: use Import tag (?)
|
||||
continue;
|
||||
}
|
||||
if(visited.contains(ch)){
|
||||
if (visited.contains(ch)) {
|
||||
continue;
|
||||
}else{
|
||||
} else {
|
||||
visited.add(ch);
|
||||
}
|
||||
ret.add(ch);
|
||||
ret.addAll(characters.get(ch).getDeepNeededCharacters(characters,visited));
|
||||
ret.addAll(characters.get(ch).getDeepNeededCharacters(characters, visited));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user