- Fixed Lhurgoyf.

- Planeswalkers shouldn't get -1/-1 counters anymore if damaged by creatures with Wither.
- Added caching to large images (thanks to Nantuko, Snacko and Silly Freak for all of the help!), hopefully this will help with the memory leak problem.
This commit is contained in:
jendave
2011-08-06 03:12:13 +00:00
parent 678d2ffa07
commit 8c8950b151
15 changed files with 513 additions and 6 deletions

4
.gitattributes vendored
View File

@@ -17,8 +17,10 @@ res/lang/en.properties svneol=native#text/plain
res/lang/howTo/de.properties svneol=native#text/plain
res/lang/howTo/en.properties svneol=native#text/plain
res/lang/lang.properties svneol=native#text/plain
res/lib/google-collect-1.0.jar -text svneol=unset#unset
res/lib/jdom-1.0.jar -text svneol=unset#unset
res/lib/jl1.0.1.jar -text svneol=unset#unset
res/lib/jsr305.jar -text svneol=unset#unset
res/lib/napkinlaf-1.2.jar -text svneol=unset#unset
res/lib/napkinlaf-swingset-1.2.jar -text svneol=unset#unset
res/lib/nimrodlf.jar -text svneol=unset#unset
@@ -68,6 +70,8 @@ src/Deck.java svneol=native#text/plain
src/DeckConverter.java svneol=native#text/plain
src/OldDeckIO.java svneol=native#text/plain
src/QuestData_State.java svneol=native#text/plain
src/arcane/ui/ScaledImagePanel.java -text svneol=native#text/plain
src/arcane/ui/util/ImageUtil.java -text svneol=native#text/plain
src/com/cloudgarden/layout/AnchorConstraint.java -text svneol=native#text/plain
src/com/cloudgarden/layout/AnchorLayout.java -text svneol=native#text/plain
src/forge/Ability.java svneol=native#text/plain

View File

@@ -1,3 +1,22 @@
Goblin Guide
R
Creature Goblin
Whenever Goblin Guide attacks, defending player reveals the top card of his or her library. If it's a land card, that player puts it into his or her hand.
2/2
Haste
Overbeing of Myth
GU GU GU GU GU
Creature Spirit Avatar
Overbeing of Myth's power and toughness are each equal to the number of cards in your hand. At the beginning of your draw step, draw an additional card.
0/0
Wanderbrine Rootcutters
2 UB UB
Creature Merfolk Rogue
Wanderbrine Rootcutters can't be blocked by green creatures.
3/3
Time Vault
2
Artifact

Binary file not shown.

BIN
res/lib/jsr305.jar Normal file

Binary file not shown.

View File

@@ -1,6 +1,6 @@
program/mail=mtgerror@yahoo.com
program/forum=http://www.slightlymagic.net/forum/viewforum.php?f=26
program/version=Forge -- official beta: 10/01/01, SVN revision: 268
program/version=Forge -- official beta: 10/01/01, SVN revision: 269
tokens--file=AllTokens.txt

View File

@@ -0,0 +1,194 @@
package arcane.ui;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class ScaledImagePanel extends JPanel {
private static final long serialVersionUID = -5691107238620895385L;
public volatile Image srcImage;
public volatile Image srcImageBlurred;
private ScalingType scalingType = ScalingType.bilinear;
private boolean scaleLarger;
private MultipassType multiPassType = MultipassType.bilinear;
private boolean blur;
public ScaledImagePanel () {
super(false);
setOpaque(false);
}
public void setImage (Image srcImage, Image srcImageBlurred) {
this.srcImage = srcImage;
this.srcImageBlurred = srcImageBlurred;
}
public void clearImage () {
srcImage = null;
srcImageBlurred = null;
repaint();
}
public void setScalingMultiPassType (MultipassType multiPassType) {
this.multiPassType = multiPassType;
}
public void setScalingType (ScalingType scalingType) {
this.scalingType = scalingType;
}
public void setScalingBlur (boolean blur) {
this.blur = blur;
}
public void setScaleLarger (boolean scaleLarger) {
this.scaleLarger = scaleLarger;
}
public boolean hasImage () {
return srcImage != null;
}
private ScalingInfo getScalingInfo () {
int panelWidth = getWidth();
int panelHeight = getHeight();
int srcWidth = srcImage.getWidth(null);
int srcHeight = srcImage.getHeight(null);
int targetWidth = srcWidth;
int targetHeight = srcHeight;
if (scaleLarger || srcWidth > panelWidth || srcHeight > panelHeight) {
targetWidth = Math.round(panelHeight * (srcWidth / (float)srcHeight));
if (targetWidth > panelWidth) {
targetHeight = Math.round(panelWidth * (srcHeight / (float)srcWidth));
targetWidth = panelWidth;
} else
targetHeight = panelHeight;
}
ScalingInfo info = new ScalingInfo();
info.targetWidth = targetWidth;
info.targetHeight = targetHeight;
info.srcWidth = srcWidth;
info.srcHeight = srcHeight;
info.x = panelWidth / 2 - targetWidth / 2;
info.y = panelHeight / 2 - targetHeight / 2;
return info;
}
public void paint (Graphics g) {
if (srcImage == null) return;
Graphics2D g2 = (Graphics2D)g.create();
ScalingInfo info = getScalingInfo();
switch (scalingType) {
case nearestNeighbor:
scaleWithDrawImage(g2, info, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
break;
case bilinear:
scaleWithDrawImage(g2, info, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
break;
case bicubic:
scaleWithDrawImage(g2, info, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
break;
case areaAveraging:
scaleWithGetScaledInstance(g2, info, Image.SCALE_AREA_AVERAGING);
break;
case replicate:
scaleWithGetScaledInstance(g2, info, Image.SCALE_REPLICATE);
break;
}
}
private void scaleWithGetScaledInstance (Graphics2D g2, ScalingInfo info, int hints) {
Image srcImage = getSourceImage(info);
Image scaledImage = srcImage.getScaledInstance(info.targetWidth, info.targetHeight, hints);
g2.drawImage(scaledImage, info.x, info.y, null);
}
private void scaleWithDrawImage (Graphics2D g2, ScalingInfo info, Object hint) {
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
int tempDestWidth = info.srcWidth / 2, tempDestHeight = info.srcHeight / 2;
if (tempDestWidth < info.targetWidth) tempDestWidth = info.targetWidth;
if (tempDestHeight < info.targetHeight) tempDestHeight = info.targetHeight;
Image srcImage = getSourceImage(info);
// If not doing multipass or multipass only needs a single pass, just scale it once directly to the panel surface.
if (multiPassType == MultipassType.none || (tempDestWidth == info.targetWidth && tempDestHeight == info.targetHeight)) {
g2.drawImage(srcImage, info.x, info.y, info.targetWidth, info.targetHeight, null);
return;
}
BufferedImage tempImage = new BufferedImage(tempDestWidth, tempDestHeight, BufferedImage.TYPE_INT_RGB);
Graphics2D g2temp = tempImage.createGraphics();
switch (multiPassType) {
case nearestNeighbor:
g2temp.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR);
break;
case bilinear:
g2temp.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BILINEAR);
break;
case bicubic:
g2temp.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
break;
}
// Render first pass from image to temp.
g2temp.drawImage(srcImage, 0, 0, tempDestWidth, tempDestHeight, null);
// Render passes between the first and last pass.
int tempSrcWidth = tempDestWidth;
int tempSrcHeight = tempDestHeight;
while (true) {
if (tempDestWidth > info.targetWidth) {
tempDestWidth = tempDestWidth / 2;
if (tempDestWidth < info.targetWidth) tempDestWidth = info.targetWidth;
}
if (tempDestHeight > info.targetHeight) {
tempDestHeight = tempDestHeight / 2;
if (tempDestHeight < info.targetHeight) tempDestHeight = info.targetHeight;
}
if (tempDestWidth == info.targetWidth && tempDestHeight == info.targetHeight) break;
g2temp.drawImage(tempImage, 0, 0, tempDestWidth, tempDestHeight, 0, 0, tempSrcWidth, tempSrcHeight, null);
tempSrcWidth = tempDestWidth;
tempSrcHeight = tempDestHeight;
}
g2temp.dispose();
// Render last pass from temp to panel surface.
g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, hint);
g2.drawImage(tempImage, info.x, info.y, info.x + info.targetWidth, info.y + info.targetHeight, 0, 0, tempSrcWidth,
tempSrcHeight, null);
}
private Image getSourceImage (ScalingInfo info) {
if (!blur || srcImageBlurred == null) return srcImage;
if (info.srcWidth / 2 < info.targetWidth || info.srcHeight / 2 < info.targetHeight) return srcImage;
return srcImageBlurred;
}
static private class ScalingInfo {
public int targetWidth;
public int targetHeight;
public int srcWidth;
public int srcHeight;
public int x;
public int y;
}
static public enum MultipassType {
none, nearestNeighbor, bilinear, bicubic
}
static public enum ScalingType {
nearestNeighbor, replicate, bilinear, bicubic, areaAveraging
}
}

View File

@@ -0,0 +1,31 @@
package arcane.ui.util;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
public class ImageUtil {
static public BufferedImage getImage (InputStream stream) throws IOException {
Image tempImage = ImageIO.read(stream);
BufferedImage image = new BufferedImage(tempImage.getWidth(null), tempImage.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = image.createGraphics();
g2.drawImage(tempImage, 0, 0, null);
g2.dispose();
return image;
}
static public BufferedImage getBlurredImage (BufferedImage image, int radius, float intensity) {
float weight = intensity / (radius * radius);
float[] elements = new float[radius * radius];
for (int i = 0, n = radius * radius; i < n; i++)
elements[i] = weight;
ConvolveOp blurOp = new ConvolveOp(new Kernel(radius, radius, elements));
return blurOp.filter(image, null);
}
}

View File

@@ -140,6 +140,13 @@ public class CombatUtil
return false;
}
if (attacker.getName().equals("Wanderbrine Rootcutters"))
{
if (CardUtil.getColors(blocker).contains(Constant.Color.Green))
return false;
}
if (attacker.getName().equals("Amrou Seekers"))
{
if (!blocker.getType().contains("Artifact") &&
@@ -1572,6 +1579,33 @@ public class CombatUtil
}//Sapling of Colfenor
else if(c.getName().equals("Goblin Guide") && !c.getCreatureAttackedThisTurn())
{
final String opp = AllZone.GameAction.getOpponent(c.getController());
Ability ability = new Ability(c, "0")
{
public void resolve()
{
PlayerZone lib = AllZone.getZone(Constant.Zone.Library, opp);
if (lib.size() > 0)
{
CardList cl = new CardList();
cl.add(lib.get(0));
AllZone.Display.getChoiceOptional("Top card:", cl.toArray());
Card c = cl.get(0);
if(c.isLand()) {
AllZone.GameAction.moveToHand(c);
}
}
}
};
ability.setStackDescription("Goblin Guide - defending player reveals the top card of his or her library. If it's a land card, that player puts it into his or her hand.");
AllZone.Stack.add(ability);
}//Goblin Guide
c.setCreatureAttackedThisTurn(true);
}//if Phase = declare attackers

View File

@@ -1353,7 +1353,8 @@ private int getDifferentLand(CardList list, String land)
int damageToAdd = damage;
//AllZone.GameAction.addDamage(c, crd , assignedDamageMap.get(crd));
if (source.getKeyword().contains("Wither"))
if (source.getKeyword().contains("Wither") &&
card.isCreature())
{
damageToAdd = 0;
card.addCounter(Counters.M1M1, damage);
@@ -1390,7 +1391,8 @@ private int getDifferentLand(CardList list, String land)
public void addDamage(Card card, Card source, int damage)
{
int damageToAdd = damage;
if (source.getKeyword().contains("Wither"))
if (source.getKeyword().contains("Wither") &&
card.isCreature())
{
damageToAdd = 0;
card.addCounter(Counters.M1M1, damage);

View File

@@ -86,6 +86,7 @@ public class GameActionUtil
// cause black vise to do an extra point of
// damage if black vise was in play
upkeep_Font_of_Mythos();
upkeep_Overbeing_of_Myth();
upkeep_AI_Aluren(); // experimental, just have the AI dump his small
// creats in play when aluren is there
@@ -7567,6 +7568,20 @@ public class GameActionUtil
}
}// upkeep_Font_of_Mythos()
private static void upkeep_Overbeing_of_Myth()
{
final String player = AllZone.Phase.getActivePlayer();
CardList list = new CardList();
list.addAll(AllZone.Human_Play.getCards());
list.addAll(AllZone.Computer_Play.getCards());
list = list.getName("Overbeing of Myth");
for (int i = 0; i < list.size(); i++)
AllZone.GameAction.drawCard(player);
}// upkeep_Overbeing_of_Myth()
private static void upkeep_Carnophage()
{
final String player = AllZone.Phase.getActivePlayer();
@@ -13997,6 +14012,45 @@ public class GameActionUtil
};//Maro
public static Command Overbeing_of_Myth = new Command()
{
private static final long serialVersionUID = -2250795040532050455L;
public void execute()
{
// get all creatures
CardList list = new CardList();
list.addAll(AllZone.Human_Play.getCards());
list.addAll(AllZone.Computer_Play.getCards());
list = list.getName("Overbeing of Myth");
for (int i = 0; i < list.size(); i++)
{
Card c = list.get(i);
int k = 0;
if (c.getController().equals(Constant.Player.Human))
{k = countHand_Human ();}
else k = countHand_Computer();
c.setBaseAttack(k);
c.setBaseDefense(k);
}
}
private int countHand_Human()
{
PlayerZone Play = AllZone.getZone(Constant.Zone.Hand, Constant.Player.Human);
CardList list = new CardList();
list.addAll(Play.getCards());
return list.size();
}
private int countHand_Computer()
{
PlayerZone Play = AllZone.getZone(Constant.Zone.Hand, Constant.Player.Computer);
CardList list = new CardList();
list.addAll(Play.getCards());
return list.size();
}
};//overbeing of myth
public static Command Guul_Draz_Specter = new Command()
{
private static final long serialVersionUID = -8778902687347191964L;
@@ -16088,6 +16142,7 @@ public class GameActionUtil
commands.put("Multani_Maro_Sorcerer", Multani_Maro_Sorcerer);
commands.put("Molimo_Maro_Sorcerer", Molimo_Maro_Sorcerer);
commands.put("Maro", Maro);
commands.put("Overbeing_of_Myth", Overbeing_of_Myth);
commands.put("Guul_Draz_Specter", Guul_Draz_Specter);
commands.put("Dakkon", Dakkon);
commands.put("Korlash", Korlash);

View File

@@ -24,6 +24,7 @@ import java.awt.event.MouseListener;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.image.BufferedImage;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.io.BufferedInputStream;
@@ -32,9 +33,13 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.util.Observable;
import java.util.Observer;
import java.util.concurrent.ConcurrentMap;
import javax.imageio.ImageIO;
import javax.swing.Action;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
@@ -61,6 +66,12 @@ import javax.swing.event.ListSelectionListener;
import org.jdesktop.swingx.MultiSplitPane;
import org.jdesktop.swingx.MultiSplitLayout.Node;
import com.google.common.collect.MapMaker;
//import org.omg.CORBA.portable.InputStream;
import arcane.ui.ScaledImagePanel;
import arcane.ui.ScaledImagePanel.ScalingType;
import forge.error.ErrorViewer;
import forge.gui.ForgeAction;
import forge.gui.ListChooser;
@@ -87,6 +98,7 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
public Color c3 = new Color(204,204,204);
*/
private ConcurrentMap<String, BufferedImage> imageCache = new MapMaker().softValues().makeMap();
private String current_picture = "";
//private int count = 0;
@@ -561,6 +573,7 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
//picture
//System.out.println("UPDATING PICTURE!!! #:" + count++);
/*
current_picture = c.getImageName();
picturePanel.removeAll();
JPanel pic = GuiDisplayUtil.getPicture(c);
@@ -568,6 +581,48 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
picturePanel.add(pic);
picturePanel.revalidate();
System.gc();
*/
current_picture = c.getImageName();
BufferedImage srcImage = null;
if(imageCache.containsKey(c.getImageName()))
srcImage = imageCache.get(c.getImageName());
else {
InputStream stream;
try {
//stream = new URL(GuiDisplayUtil.getURL(c)).openStream();
stream = GuiDisplayUtil.getURL(c).openStream();
srcImage = ImageIO.read(stream);
imageCache.put(c.getImageName(), srcImage);
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//BufferedImage srcImageBlurred = arcane.ui.util.ImageUtil.getBlurredImage(srcImage, 3, 1.0f); // get a blurred image
cardImagePanel.setImage(srcImage, srcImage);
cardImagePanel.repaint();
/*
BufferedInputStream stream = (BufferedInputStream) GuiDisplayUtil.getPictureStream(c);
BufferedImage srcImage;
try {
srcImage = arcane.ui.util.ImageUtil.getImage(stream);
BufferedImage srcImageBlurred = arcane.ui.util.ImageUtil.getBlurredImage(srcImage, 3, 1.0f); // get a blurred image
cardImagePanel.setImage(srcImage, srcImageBlurred);
cardImagePanel.repaint();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} // only need stream
*/
//System.out.println(picturePanel.getComponentCount());
}//updateCardDetail()
@@ -1141,10 +1196,21 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
//~ picturePanel.setBorder(new EtchedBorder());
/*
picturePanel.setLayout(new BoxLayout(picturePanel, BoxLayout.Y_AXIS));
picturePanel.setBackground(c1);
picturePanel.addMouseListener(new CustomListener());
pane.add(new ExternalPanel(picturePanel), "picture");
*/
cardImagePanel.setScalingBlur(true); //use blured image if scaling down more than 50%
cardImagePanel.setScaleLarger(true); //upscale if needed true
cardImagePanel.setScalingType(ScalingType.bicubic); // type of scaling bicubic has good quality / speed ratio
cardImagePanel.setLayout(new BoxLayout(cardImagePanel, BoxLayout.Y_AXIS));
cardImagePanel.setBackground(c1);
cardImagePanel.addMouseListener(new CustomListener());
pane.add(new ExternalPanel(cardImagePanel), "picture");
}
private void cancelButtonActionPerformed(ActionEvent evt) {
@@ -1190,6 +1256,7 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
JPanel cdPanel = new JPanel();
//JPanel picturePanel = new JPanel();
public JPanel picturePanel = new JPanel();
JLabel oppLifeLabel = new JLabel();
JLabel playerLifeLabel = new JLabel();
JLabel oppPCLabel = new JLabel();
@@ -1211,6 +1278,9 @@ public class GuiDisplay3 extends JFrame implements Display, NewConstants, NewCon
JLabel playerFBValue = new JLabel();
JLabel playerRemovedValue = new JLabel();
ScaledImagePanel cardImagePanel = new ScaledImagePanel(); // < our JPanel
private class ZoneAction extends ForgeAction {
private static final long serialVersionUID = -5822976087772388839L;
private PlayerZone zone;

View File

@@ -9,8 +9,14 @@ import java.awt.event.MouseEvent;
import java.awt.event.MouseMotionAdapter;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
@@ -274,10 +280,92 @@ public class GuiDisplayUtil implements NewConstants {
return new ImageIcon();
}
@SuppressWarnings("deprecation")
public static URL getURL(Card c)
{
File dir1 = new File (".");
/*
try {
System.out.println ("Current dir : " + dir1.getCanonicalPath());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}*/
String path = "";
try {
path = dir1.getCanonicalPath();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String suffix = ".jpg";
String filename = "";
if(!c.isFaceDown()) {
String basicLandSuffix = "";
if(c.isBasicLand()) {
if(c.getRandomPicture() != 0) {
basicLandSuffix = Integer.toString(c.getRandomPicture());
//c.setImageName(c.getImageName() + basicLandSuffix);
}
}
filename = cleanString(c.getImageName())+ basicLandSuffix + suffix;
} else filename = "morph" + suffix;
String loc = "";
if (!c.isToken())
loc = IMAGE_BASE;
else
loc = IMAGE_TOKEN;
String fileString = path + "\\" +ForgeProps.getFile(loc)+"\\" +filename;
//System.out.println(fileString);
File file = new File(fileString);
URL url = null; try { url = file.toURL(); return url; } catch (MalformedURLException e) { }
return null;
}
public static InputStream getPictureStream(Card c)
{
String suffix = ".jpg";
String filename = "";
if(!c.isFaceDown()) {
String basicLandSuffix = "";
if(c.isBasicLand()) {
if(c.getRandomPicture() != 0) {
basicLandSuffix = Integer.toString(c.getRandomPicture());
//c.setImageName(c.getImageName() + basicLandSuffix);
}
}
filename = cleanString(c.getImageName())+ basicLandSuffix + suffix;
} else filename = "morph" + suffix;
String loc = "";
if (!c.isToken())
loc = IMAGE_BASE;
else
loc = IMAGE_TOKEN;
String fileString = ForgeProps.getFile(loc)+"\\" +filename;
try {
BufferedInputStream is = new BufferedInputStream(new FileInputStream(fileString));
return is;
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
public static JPanel getPicture(Card c) {
if(AllZone.NameChanger.shouldChangeCardName()) return new JPanel();
String suffix = ".jpg";
String filename = "";
if(!c.isFaceDown()) {

View File

@@ -279,7 +279,11 @@ public class Gui_DownloadPictures extends DefaultBoundedRangeModel implements Ru
ErrorViewer.showError(ex, ForgeProps.getLocalized(ERRORS.OTHER), cards[card].name,
url);
// throw new RuntimeException("Gui_DownloadPictures : error 1 - " +ex);
break;
int more = JOptionPane.showConfirmDialog(null, "Some error occured. Continue downloading pictures?", "Error",
JOptionPane.YES_NO_OPTION);
if (more == JOptionPane.NO_OPTION) {
break;
}
}
}//for
}

View File

@@ -229,7 +229,11 @@ public class Gui_DownloadPictures_LQ extends DefaultBoundedRangeModel implements
ErrorViewer.showError(ex, ForgeProps.getLocalized(ERRORS.OTHER), cards[card].name,
cards[card].url);
// throw new RuntimeException("Gui_DownloadPictures : error 1 - " +ex);
break;
int more = JOptionPane.showConfirmDialog(null, "Some error occured. Continue downloading pictures?", "Error",
JOptionPane.YES_NO_OPTION);
if (more == JOptionPane.NO_OPTION) {
break;
}
}
}//for
}

View File

@@ -42,6 +42,7 @@ public class StateBasedEffects
cardToEffectsList.put("Terravore", new String[] {"Terravore"});
cardToEffectsList.put("Magnivore", new String[] {"Magnivore"});
cardToEffectsList.put("Tarmogoyf", new String[] {"Tarmogoyf"});
cardToEffectsList.put("Lhurgoyf", new String[] {"Lhurgoyf"});
cardToEffectsList.put("Drove of Elves", new String[] {"Drove_of_Elves"});
cardToEffectsList.put("Crowd of Cinders", new String[] {"Crowd_of_Cinders"});
cardToEffectsList.put("Faerie Swarm", new String[] {"Faerie_Swarm"});
@@ -49,6 +50,7 @@ public class StateBasedEffects
cardToEffectsList.put("Multani, Maro-Sorcerer", new String[] {"Multani_Maro_Sorcerer"});
cardToEffectsList.put("Molimo, Maro-Sorcerer", new String[] {"Molimo_Maro_Sorcerer"});
cardToEffectsList.put("Maro", new String[] {"Maro"});
cardToEffectsList.put("Overbeing of Myth", new String[] {"Overbeing_of_Myth"});
cardToEffectsList.put("Guul Draz Specter", new String[] {"Guul_Draz_Specter"});
cardToEffectsList.put("Dakkon Blackblade", new String[] {"Dakkon"});
cardToEffectsList.put("Korlash, Heir to Blackblade", new String[] {"Korlash"});