From a78110759bb92e5fd1ddf10d660086e1546e5a35 Mon Sep 17 00:00:00 2001 From: Vittorio Alfieri Date: Sun, 4 Jun 2023 01:11:01 +0200 Subject: [PATCH] Improved Android downloader to use ScryFall APIs, fixed J22 dat file, updated card url links for J22 set. --- projects/mtg/Android/libs/json-simple-1.1.jar | Bin 0 -> 16046 bytes .../src/net/wagic/utils/ImgDownloader.java | 259 +++++++- projects/mtg/CardImageLinks.csv | 124 ++++ projects/mtg/bin/Res/sets/J22/_cards.dat | 627 +++++++++++++++++- 4 files changed, 1004 insertions(+), 6 deletions(-) create mode 100644 projects/mtg/Android/libs/json-simple-1.1.jar diff --git a/projects/mtg/Android/libs/json-simple-1.1.jar b/projects/mtg/Android/libs/json-simple-1.1.jar new file mode 100644 index 0000000000000000000000000000000000000000..f395f41471a796876278a6c5667ded4632546893 GIT binary patch literal 16046 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 imageUris = new HashMap(); + if (jsonObject.get("image_uris") != null) { + JSONObject imageUrisObject = (JSONObject) jsonObject.get("image_uris"); + if(imageUrisObject != null && jsonObject.get("name").equals(primitiveCardName)) + imageUris = (HashMap) imageUrisObject; + } else if (jsonObject.get("card_faces") != null) { + JSONArray faces = (JSONArray) jsonObject.get("card_faces"); + if(faces != null){ + for (Object o : faces) { + JSONObject imageUrisObject = (JSONObject) o; + if(imageUrisObject != null && imageUrisObject.get("name").equals(primitiveCardName)){ + if (imageUrisObject.get("image_uris") != null) { + imageUrisObject = (JSONObject) imageUrisObject.get("image_uris"); + if(imageUrisObject != null) + imageUris = (HashMap) imageUrisObject; + } + } + } + } + } else { + System.err.println("Cannot retrieve image url for card: " + primitiveCardName); + return ""; + } + String imageUrl = imageUris.get(format); + if(imageUrl.indexOf(".jpg") < imageUrl.length()) + imageUrl = imageUrl.substring(0, imageUrl.indexOf(".jpg")+4); + return imageUrl; + } + + public static String findTokenImageUrl(JSONObject jsonObject, String format){ + String imageUrl = ""; + try { + Document document = Jsoup.connect((String )jsonObject.get("scryfall_uri")).get(); + if (document != null) { + Element printsTable = document.selectFirst("table.prints-table"); + if (printsTable != null) { + Element tokenRow = null; + Elements rows = printsTable.select("tr"); + for (Element row : rows) { + if (row.text().contains(" Token,") && !row.text().contains("Faces,")) { + tokenRow = row; + } + } + if (tokenRow != null) { + Element aElement = tokenRow.selectFirst("td > a"); + if (aElement != null) { + String tokenName = aElement.text(); + tokenName = tokenName.substring(0, tokenName.indexOf(" Token,")); + System.out.println("Token found: " + tokenName); + imageUrl = aElement.attr("data-card-image-front"); + if(imageUrl.indexOf(".jpg") < imageUrl.length()) + imageUrl = imageUrl.substring(0, imageUrl.indexOf(".jpg")+4); + } + } + } + } + } catch (IOException e) { + System.err.println("There was an error while retrieving token image..."); + return null; + } + return imageUrl.replace("large", format); + } + + public static String findTokenName(JSONObject jsonObject){ + String tokenName = ""; + try { + Document document = Jsoup.connect((String) jsonObject.get("scryfall_uri")).get(); + if (document != null) { + Element printsTable = document.selectFirst("table.prints-table"); + if (printsTable != null) { + Element tokenRow = null; + Elements rows = printsTable.select("tr"); + for (Element row : rows) { + if (row.text().contains(" Token,") && !row.text().contains("Faces,")) { + tokenRow = row; + } + } + if (tokenRow != null) { + Element aElement = tokenRow.selectFirst("td > a"); + if (aElement != null) { + tokenName = aElement.text(); + tokenName = tokenName.substring(0, tokenName.indexOf(" Token,")); + System.out.println("Token found: " + tokenName); + } + } + } + } + } catch (IOException e) { + System.err.println("There was an error while retrieving the token image..."); + return null; + } + return tokenName; + } + public static boolean fastDownloadCard(String set, String id, String name, String imgPath, String thumbPath, int ImgX, int ImgY, int ThumbX, int ThumbY, int Border, int BorderThumb) { if (database == null) return false; @@ -3701,7 +3824,7 @@ public class ImgDownloader { set.equals("UNH") || set.equals("XLN") || set.equals("SOI") || set.equals("SOK") || set.equals("BOK") || set.equals("CHK") || set.equals("ZNR") || set.equals("KHM") || set.equals("STX") || set.equals("MID") || set.equals("CC2") || set.equals("VOW") || - set.equals("DBL") || set.equals("Y22") || set.equals("MOM")) + set.equals("DBL") || set.equals("Y22") || set.equals("MOM") || set.equals("NEO")) rarity = ""; if(id != null && !rarity.equals("t") && (negativeId || id.equals("209162") || id.equals("209163") || id.equals("401721") || id.equals("401722") || id.equals("999902"))) @@ -3838,6 +3961,9 @@ public class ImgDownloader { if (fastDownloadCard(set, id, mappa.get(id), imgPath.getAbsolutePath(), thumbPath.getAbsolutePath(), ImgX, ImgY, ThumbX, ThumbY, Border, BorderThumb)) continue; String specialcardurl = getSpecialCardUrl(id, set); + JSONObject card = findCardJsonById(id); + if(specialcardurl.isEmpty() && card != null) + specialcardurl = findCardImageUrl(card, mappa.get(id), "large"); if (!specialcardurl.isEmpty()) { URL url = new URL(specialcardurl); HttpURLConnection httpcon = (HttpURLConnection) url.openConnection(); @@ -3942,10 +4068,126 @@ public class ImgDownloader { res = mappa.get(id) + " - " + set + File.separator + "thumbnails" + File.separator + id + ".jpg\n" + res; break; } + if(card != null && hasToken(id)) { + String text = (String) card.get("oracle_text"); + if (text != null && !text.isEmpty() && !text.trim().toLowerCase().contains("nontoken") && ((text.trim().toLowerCase().contains("create") && text.trim().toLowerCase().contains("creature token")) || + (text.trim().toLowerCase().contains("put") && text.trim().toLowerCase().contains("token")))) { + System.out.println("The card: " + mappa.get(id) + " (" + id + ".jpg) can create a token, i will try to download that image too as " + id + "t.jpg"); + + String specialtokenurl = findTokenImageUrl(card, "large"); + String nametoken = findTokenName(card); + URL urltoken = null; + if (!specialtokenurl.isEmpty()) + urltoken = new URL(specialtokenurl); + + HttpURLConnection httpcontoken = (HttpURLConnection) urltoken.openConnection(); + if (httpcontoken == null) { + System.err.println("Error: Problem downloading token: " + nametoken + " (" + id + "t.jpg), i will not download it..."); + res = nametoken + " - " + set + File.separator + id + "t.jpg\n" + res; + break; + } + httpcontoken.addRequestProperty("User-Agent", "Mozilla/4.76"); + httpcontoken.setConnectTimeout(5000); + httpcontoken.setReadTimeout(5000); + httpcontoken.setAllowUserInteraction(false); + httpcontoken.setDoInput(true); + httpcontoken.setDoOutput(false); + InputStream intoken = null; + try { + intoken = new BufferedInputStream(httpcontoken.getInputStream()); + } catch (IOException ex) { + System.out.println("Warning: Problem downloading token: " + nametoken + " (" + id + "t.jpg), i will retry 2 times more..."); + try { + intoken = new BufferedInputStream(httpcontoken.getInputStream()); + } catch (IOException ex2) { + System.out.println("Warning: Problem downloading token: " + nametoken + " (" + id + "t.jpg), i will retry 1 time more..."); + try { + intoken = new BufferedInputStream(httpcontoken.getInputStream()); + } catch (IOException ex3) { + System.err.println("Error: Problem downloading token: " + nametoken + " (" + id + "t.jpg), i will not retry anymore..."); + res = nametoken + " - " + set + File.separator + id + "t.jpg\n" + res; + break; + } + } + } + ByteArrayOutputStream outtoken = new ByteArrayOutputStream(); + byte[] buftoken = new byte[1024]; + int ntoken = 0; + millis = System.currentTimeMillis(); + timeout = false; + while (-1 != (ntoken = intoken.read(buftoken)) && !timeout) { + outtoken.write(buftoken, 0, ntoken); + if (System.currentTimeMillis() - millis > 10000) + timeout = true; + } + if (timeout) { + System.out.println("Warning: Problem downloading token: " + id + "t.jpg from, i will retry 2 times more..."); + buftoken = new byte[1024]; + ntoken = 0; + millis = System.currentTimeMillis(); + timeout = false; + while (-1 != (ntoken = intoken.read(buftoken)) && !timeout) { + outtoken.write(buftoken, 0, ntoken); + if (System.currentTimeMillis() - millis > 10000) + timeout = true; + } + if (timeout) { + System.out.println("Warning: Problem downloading token: " + id + "t.jpg from, i will retry 1 time more..."); + buftoken = new byte[1024]; + ntoken = 0; + millis = System.currentTimeMillis(); + timeout = false; + while (-1 != (ntoken = intoken.read(buftoken)) && !timeout) { + outtoken.write(buftoken, 0, ntoken); + if (System.currentTimeMillis() - millis > 10000) + timeout = true; + } + } + } + outtoken.close(); + intoken.close(); + if (timeout) { + System.err.println("Error: Problem downloading token: " + id + "t.jpg from, i will not retry anymore..."); + break; + } + byte[] responsetoken = outtoken.toByteArray(); + String tokenimage = imgPath + File.separator + id + "t.jpg"; + String tokenthumbimage = thumbPath + File.separator + id + "t.jpg"; + FileOutputStream fos2 = new FileOutputStream(tokenimage); + fos2.write(responsetoken); + fos2.close(); + try { + Bitmap yourBitmapToken = BitmapFactory.decodeFile(tokenimage); + Bitmap resizedToken = Bitmap.createScaledBitmap(yourBitmapToken, ImgX, ImgY, true); + if (Border > 0) + resizedToken = Bitmap.createBitmap(resizedToken, Border, Border, ImgX - 2 * Border, ImgY - 2 * Border); + FileOutputStream fout = new FileOutputStream(tokenimage); + resizedToken.compress(Bitmap.CompressFormat.JPEG, 100, fout); + fout.close(); + } catch (Exception e) { + System.err.println("Error: Problem resizing token: " + id + "t.jpg, image may be corrupted..."); + res = nametoken + " - " + set + File.separator + "thumbnails" + File.separator + id + "t.jpg\n" + res; + break; + } + try { + Bitmap yourBitmapTokenthumb = BitmapFactory.decodeFile(tokenimage); + Bitmap resizedThumbToken = Bitmap.createScaledBitmap(yourBitmapTokenthumb, ThumbX, ThumbY, true); + if (BorderThumb > 0) + resizedThumbToken = Bitmap.createBitmap(resizedThumbToken, BorderThumb, BorderThumb, ThumbX - 2 * BorderThumb, ThumbY - 2 * BorderThumb); + FileOutputStream fout = new FileOutputStream(tokenthumbimage); + resizedThumbToken.compress(Bitmap.CompressFormat.JPEG, 100, fout); + fout.close(); + } catch (Exception e) { + System.err.println("Error: Problem resizing token thumbnail: " + id + "t.jpg, image may be corrupted..."); + res = nametoken + " - " + set + File.separator + "thumbnails" + File.separator + id + "t.jpg\n" + res; + } + } + } continue; } if (id.endsWith("t")) continue; + Document doc = null; String cardname = mappa.get(id); Elements divs = new Elements(); @@ -3965,7 +4207,8 @@ public class ImgDownloader { || scryset.equals("SOI") || scryset.equals("UST") || scryset.equals("PLG21") || scryset.equals("J21") || scryset.equals("CC2") || scryset.equals("Q06") || scryset.equals("DBL") || scryset.equals("Y22") | scryset.equals("CLB") || scryset.equals("MOM") || scryset.equals("MOC") || scryset.equals("BRO") || scryset.equals("MAT") || scryset.equals("BRC") || scryset.equals("BRR") - || scryset.equals("NEO") || scryset.equals("ONE") || scryset.equals("ONC") || scryset.equals("DMR") || scryset.equals("NEC")){ + || scryset.equals("NEO") || scryset.equals("ONE") || scryset.equals("ONC") || scryset.equals("DMR") || scryset.equals("NEC") + || scryset.equals("J22")){ try { doc = Jsoup.connect(imageurl + scryset.toLowerCase()).get(); Elements outlinks = doc.select("body a"); @@ -4134,7 +4377,8 @@ public class ImgDownloader { && !scryset.equals("SOI") && !scryset.equals("UST") && !scryset.equals("PLG21") && !scryset.equals("J21") && !scryset.equals("CC2") && !scryset.equals("Q06") && !scryset.equals("DBL") && !scryset.equals("Y22") && !scryset.equals("CLB") && !scryset.equals("MOM") && !scryset.equals("MOC") && !scryset.equals("BRO") && !scryset.equals("MAT") && !scryset.equals("BRC") && !scryset.equals("BRR") - && !scryset.equals("NEO") && !scryset.equals("ONE") && !scryset.equals("ONC") && !scryset.equals("DMR") && !scryset.equals("NEC")){ + && !scryset.equals("NEO") && !scryset.equals("ONE") && !scryset.equals("ONC") && !scryset.equals("DMR") && !scryset.equals("NEC") + && !scryset.equals("J22")){ try { doc = Jsoup.connect(imageurl + scryset.toLowerCase()).get(); Elements outlinks = doc.select("body a"); @@ -4254,7 +4498,8 @@ public class ImgDownloader { && !scryset.equals("SOI") && !scryset.equals("UST") && !scryset.equals("PLG21") && !scryset.equals("J21") && !scryset.equals("CC2") && !scryset.equals("Q06") && !scryset.equals("DBL") && !scryset.equals("Y22") && !scryset.equals("CLB") && !scryset.equals("MOM") && !scryset.equals("MOC") && !scryset.equals("BRO") && !scryset.equals("MAT") && !scryset.equals("BRC") && !scryset.equals("BRR") - && !scryset.equals("NEO") && !scryset.equals("ONE") && !scryset.equals("ONC") && !scryset.equals("DMR") && !scryset.equals("NEC")){ + && !scryset.equals("NEO") && !scryset.equals("ONE") && !scryset.equals("ONC") && !scryset.equals("DMR") && !scryset.equals("NEC") + && !scryset.equals("J22")){ try { doc = Jsoup.connect(imageurl + scryset.toLowerCase()).get(); } catch (Exception e) { @@ -4426,7 +4671,7 @@ public class ImgDownloader { || scryset.equals("UST") || scryset.equals("PLG21") || scryset.equals("J21") || scryset.equals("CC2") || scryset.equals("Q06") || scryset.equals("DBL") || scryset.equals("Y22") || scryset.equals("CLB") || scryset.equals("MOM") || scryset.equals("MOC") || scryset.equals("BRO") || scryset.equals("MAT") || scryset.equals("BRC") || scryset.equals("BRR") || scryset.equals("NEO") - || scryset.equals("ONE") || scryset.equals("ONC") || scryset.equals("DMR") || scryset.equals("NEC")){ + || scryset.equals("ONE") || scryset.equals("ONC") || scryset.equals("DMR") || scryset.equals("NEC") || scryset.equals("J22")){ Elements metadata = doc.select("head meta"); if(metadata != null) { for (int j = 0; j < metadata.size(); j++){ @@ -4640,6 +4885,10 @@ public class ImgDownloader { String specialtokenurl = getSpecialTokenUrl(id + "t", set); if(specialtokenurl.isEmpty()) specialtokenurl = getSpecialCardUrl(id + "t", set); + if(specialtokenurl.isEmpty() && card != null) + specialtokenurl = findTokenImageUrl(card, "large"); + if(nametoken.isEmpty() && card != null) + nametoken = findTokenName(card); if (!specialtokenurl.isEmpty()) { try { doc = Jsoup.connect(imageurl + scryset.toLowerCase()).get(); diff --git a/projects/mtg/CardImageLinks.csv b/projects/mtg/CardImageLinks.csv index 3e6f3bc1a..1a43cc3b5 100644 --- a/projects/mtg/CardImageLinks.csv +++ b/projects/mtg/CardImageLinks.csv @@ -64537,6 +64537,130 @@ GN3;582743;https://cards.scryfall.io/large/front/2/8/28294aef-eba7-4f20-bf81-c85 GN3;582744;https://cards.scryfall.io/large/front/5/8/586ad230-fb4b-4b34-8d5c-633726496634.jpg GN3;582745;https://cards.scryfall.io/large/front/2/f/2fd47e30-2ab0-452d-ac51-fa182c2b00fc.jpg GN3;582746;https://cards.scryfall.io/large/front/8/5/85a1b232-92ab-4829-9af3-26b280507dc0.jpg +J22;589563t;https://cards.scryfall.io/large/front/a/5/a5c325d9-6cfc-4e41-b73d-4a45454d9fad.jpg +J22;589568t;https://cards.scryfall.io/large/front/d/b/db0041d8-cacd-4057-8f99-37810edb4b7e.jpg +J22;589581t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;589583t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;589594t;https://www.mtgnexus.com/img/ccc/ren/7830/29125.jpg +J22;597043t;https://cards.scryfall.io/large/front/7/b/7b0b95ce-4821-4955-a27c-93471240f54b.jpg +J22;597049t;https://cards.scryfall.io/large/front/d/b/db0041d8-cacd-4057-8f99-37810edb4b7e.jpg +J22;597054t;https://cards.scryfall.io/large/front/2/0/209d3f3e-a41e-4d9b-a9bd-50d11e89b5ea.jpg +J22;597059t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;597063t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;597068t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;597078t;https://cards.scryfall.io/large/front/e/1/e197929c-1334-48f5-a03c-546a4074ad02.jpg +J22;597510t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;597518t;https://www.mtg.onl/static/987cd9d77ce79d4feb56788cabbb5dd0/4d406/PROXY_Spawn_2_2.jpg +J22;591418t;https://cards.scryfall.io/large/front/b/0/b0819e8e-fb7e-43c7-a7cf-d768f43193ac.jpg +J22;591428t;https://cards.scryfall.io/large/front/d/e/dee1c2ee-d92e-409a-995a-b4c91620c918.jpg +J22;591429t;https://cards.scryfall.io/large/front/5/f/5f458f39-27b6-4121-bda9-1a0d1b42f5fb.jpg +J22;591433t;https://cards.scryfall.io/large/front/4/7/476261b8-635c-4228-b5bf-ddc27157876e.jpg +J22;591443t;https://cards.scryfall.io/large/front/5/2/52cf8f6b-2334-4881-8f58-4e11745c8851.jpg +J22;591446t;https://cards.scryfall.io/large/front/1/7/1774c68a-3d76-4fe1-b741-e6acf6b9214c.jpg +J22;591450t;https://cards.scryfall.io/large/front/d/0/d0cc09a9-a21b-40ee-8b68-bc084f71737d.jpg +J22;591455t;https://cards.scryfall.io/large/front/4/7/476261b8-635c-4228-b5bf-ddc27157876e.jpg +J22;591461t;https://cards.scryfall.io/large/front/0/5/0537522a-1f4f-4a81-a678-6b280ebc29fc.jpg +J22;591463t;https://cards.scryfall.io/large/front/5/2/52cf8f6b-2334-4881-8f58-4e11745c8851.jpg +J22;591485t;https://cards.scryfall.io/large/front/d/7/d754e09c-efc0-4536-9f2a-6bd7e2f860ab.jpg +J22;591490t;https://cards.scryfall.io/large/front/4/7/476261b8-635c-4228-b5bf-ddc27157876e.jpg +J22;591496t;https://cards.scryfall.io/large/front/d/0/d0cc09a9-a21b-40ee-8b68-bc084f71737d.jpg +J22;591499t;https://cards.scryfall.io/large/front/4/7/476261b8-635c-4228-b5bf-ddc27157876e.jpg +J22;591509t;https://cards.scryfall.io/large/front/d/7/d754e09c-efc0-4536-9f2a-6bd7e2f860ab.jpg +J22;591517t;https://cards.scryfall.io/large/front/3/8/38476293-627e-44e6-a83e-24aaf3de8e9a.jpg +J22;591521t;https://cards.scryfall.io/large/front/6/6/663333ab-4e92-4290-b4e2-65f3f173e53f.jpg +J22;591532t;https://cards.scryfall.io/large/front/e/1/e197929c-1334-48f5-a03c-546a4074ad02.jpg +J22;591535t;https://cards.scryfall.io/large/front/4/7/476261b8-635c-4228-b5bf-ddc27157876e.jpg +J22;591538t;https://cards.scryfall.io/large/front/0/d/0dd269c7-1333-470d-b8ef-e54add09b350.jpg +J22;591541t;https://cards.scryfall.io/large/front/5/2/52cf8f6b-2334-4881-8f58-4e11745c8851.jpg +J22;595089t;https://cards.scryfall.io/large/front/9/0/90317f5e-d121-4c00-86cc-5bbee953f600.jpg +J22;595093t;https://cards.scryfall.io/large/front/d/b/db0041d8-cacd-4057-8f99-37810edb4b7e.jpg +J22;595107t;https://cards.scryfall.io/large/front/e/1/e197929c-1334-48f5-a03c-546a4074ad02.jpg +J22;595109t;https://cards.scryfall.io/large/front/e/1/e197929c-1334-48f5-a03c-546a4074ad02.jpg +J22;595112t;https://cards.scryfall.io/large/front/0/1/010ffef8-22ce-4d8f-80f0-6749f63ec4c2.jpg +J22;595118t;https://cards.scryfall.io/large/front/e/1/e197929c-1334-48f5-a03c-546a4074ad02.jpg +J22;595129t;https://cards.scryfall.io/large/front/e/1/e197929c-1334-48f5-a03c-546a4074ad02.jpg +J22;595137t;https://cards.scryfall.io/large/front/3/4/34db5e62-4792-4207-b008-7d62bae683a7.jpg +J22;595143t;https://cards.scryfall.io/large/front/3/d/3d0b9b88-705e-4df0-8a93-3e240b81355b.jpg +J22;595155t;https://cards.scryfall.io/large/front/e/1/e197929c-1334-48f5-a03c-546a4074ad02.jpg +J22;595171t;https://cards.scryfall.io/large/front/0/1/010ffef8-22ce-4d8f-80f0-6749f63ec4c2.jpg +J22;595178t;https://cards.scryfall.io/large/front/d/b/db0041d8-cacd-4057-8f99-37810edb4b7e.jpg +J22;595179t;https://cards.scryfall.io/large/front/d/b/db0041d8-cacd-4057-8f99-37810edb4b7e.jpg +J22;593935t;https://cards.scryfall.io/large/front/c/7/c7bb00e4-7eb0-4f7d-b2c3-8995959a6e6a.jpg +J22;593942t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;593950t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;593956t;https://cards.scryfall.io/large/front/c/7/c7bb00e4-7eb0-4f7d-b2c3-8995959a6e6a.jpg +J22;593961t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;593973t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;593975t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;593978t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;593986t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;593988t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;593992t;https://cards.scryfall.io/large/front/1/3/13e4832d-8530-4b85-b738-51d0c18f28ec.jpg +J22;593997t;https://cards.scryfall.io/large/front/1/d/1db0ae89-74fb-4865-99d0-31e3e19f1480.jpg +J22;594007t;https://cards.scryfall.io/large/front/1/d/1db0ae89-74fb-4865-99d0-31e3e19f1480.jpg +J22;594009t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;594016t;https://cards.scryfall.io/large/front/2/c/2c0e7faf-43cb-4a96-ac3c-9533f957ee28.jpg +J22;590071t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590079t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590082t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590092t;https://cards.scryfall.io/large/front/8/9/895df6af-6799-4ec6-b8f4-912b06f30ed2.jpg +J22;590095t;https://cards.scryfall.io/large/front/6/5/6592849a-3875-42e6-bab8-f1c04b5f58bf.jpg +J22;590096t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;590111t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590118t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;590119t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;590123t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590125t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;590127t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;590131t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590135t;https://cards.scryfall.io/large/front/5/c/5cd9a145-86cc-4591-b64b-c003eaa926eb.jpg +J22;590137t;https://cards.scryfall.io/large/front/9/c/9cb4069a-0ec9-415d-8a2c-82f4a9f3ea2b.jpg +J22;590139t;https://cards.scryfall.io/large/front/3/1/312ea78e-a4e6-4c66-9fd7-62dc7822d89e.jpg +J22;590143t;https://cards.scryfall.io/large/front/2/0/209d3f3e-a41e-4d9b-a9bd-50d11e89b5ea.jpg +J22;590154t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590171t;https://cards.scryfall.io/large/front/c/4/c4052aed-981b-41d0-85f0-20c2599811ba.jpg +J22;590174t;https://cards.scryfall.io/large/front/c/b/cbafdfc0-380a-482b-b5f8-a7a00ecf8da6.jpg +J22;590183t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590189t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590190t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;590199t;https://cards.scryfall.io/large/front/4/6/462bb611-5a02-441c-ae8a-911b75436864.jpg +J22;592707t;https://cards.scryfall.io/large/front/f/7/f7164476-4a93-4295-9ac4-33e1677b09b8.jpg +J22;592710t;https://cards.scryfall.io/large/front/2/6/265b1462-dd9c-42af-8ba0-e840f8a651e2.jpg +J22;592715t;https://cards.scryfall.io/large/front/2/6/265b1462-dd9c-42af-8ba0-e840f8a651e2.jpg +J22;592720t;https://cards.scryfall.io/large/front/e/6/e662eefb-c454-44b9-8270-f2229e20024e.jpg +J22;592729t;https://cards.scryfall.io/large/front/8/0/805945e7-dea2-476d-a274-b6e801ccb95e.jpg +J22;592730t;https://cards.scryfall.io/large/front/8/0/805945e7-dea2-476d-a274-b6e801ccb95e.jpg +J22;592731t;https://cards.scryfall.io/large/front/8/0/805945e7-dea2-476d-a274-b6e801ccb95e.jpg +J22;592732t;https://cards.scryfall.io/large/front/8/0/805945e7-dea2-476d-a274-b6e801ccb95e.jpg +J22;592735t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;592737t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;592739t;https://cards.scryfall.io/large/front/e/4/e4b7e3b5-2f3c-4eb7-abc9-322a049a9e1a.jpg +J22;592744t;https://cards.scryfall.io/large/front/d/7/d7636957-f183-4f58-87a6-056cde657114.jpg +J22;592755t;https://cards.scryfall.io/large/front/8/0/805945e7-dea2-476d-a274-b6e801ccb95e.jpg +J22;592756t;https://cards.scryfall.io/large/front/e/6/e662eefb-c454-44b9-8270-f2229e20024e.jpg +J22;592759t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;592764t;https://cards.scryfall.io/large/front/8/0/805945e7-dea2-476d-a274-b6e801ccb95e.jpg +J22;592766t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;592774t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;592786t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;592787t;https://cards.scryfall.io/large/front/8/0/805945e7-dea2-476d-a274-b6e801ccb95e.jpg +J22;592793t;https://cards.scryfall.io/large/front/d/2/d2bfef17-6e00-4097-b27a-4e3c7e19ca03.jpg +J22;592803t;https://cards.scryfall.io/large/front/2/6/265b1462-dd9c-42af-8ba0-e840f8a651e2.jpg +J22;592812t;https://cards.scryfall.io/large/front/e/6/e662eefb-c454-44b9-8270-f2229e20024e.jpg +J22;592818t;https://cards.scryfall.io/large/front/3/6/365b2234-c29d-42db-a8e0-80685a4b6434.jpg +J22;592819t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;592820t;https://cards.scryfall.io/large/front/3/9/39133387-9cd3-49f1-88e1-d23636e020b3.jpg +J22;592821t;https://cards.scryfall.io/large/front/8/0/805945e7-dea2-476d-a274-b6e801ccb95e.jpg +J22;592825t;https://cards.scryfall.io/large/front/5/d/5dc134da-51b8-452d-b515-54def56fe0c7.jpg +J22;596176t;https://cards.scryfall.io/large/front/e/b/eb7b2c61-b903-4669-b9a3-110418a35593.jpg +J22;596185t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;596186t;https://cards.scryfall.io/large/front/4/2/42ac3b2a-cc0a-45a4-802c-1c543472cdc6.jpg +J22;596189t;https://cards.scryfall.io/large/front/d/b/db0041d8-cacd-4057-8f99-37810edb4b7e.jpg +J22;596217t;https://cards.scryfall.io/large/front/e/1/e197929c-1334-48f5-a03c-546a4074ad02.jpg +J22;596225t;https://cards.scryfall.io/large/front/d/b/db0041d8-cacd-4057-8f99-37810edb4b7e.jpg +J22;596245t;https://cards.scryfall.io/large/front/e/7/e72daa68-0680-431c-a616-b3693fd58813.jpg +J22;597895t;https://www.mtgnexus.com/img/ccc/ren/7830/29125.jpg +J22;596204t;https://www.mtg.onl/static/9ce248147e36a52ccc388b3e642839aa/4d406/PROXY_Ape_G_2_2.jpg J22;589555;https://cards.scryfall.io/large/front/e/a/ea531418-6c7c-4e23-b681-6bfdd4a3eb79.jpg J22;589556;https://cards.scryfall.io/large/front/f/4/f45e1832-1070-4d12-aba9-dcad47a02eda.jpg J22;589557;https://cards.scryfall.io/large/front/9/4/94a1a840-bcdc-4d6f-a28d-9805578473f6.jpg diff --git a/projects/mtg/bin/Res/sets/J22/_cards.dat b/projects/mtg/bin/Res/sets/J22/_cards.dat index 3069f7f69..26c1042ed 100644 --- a/projects/mtg/bin/Res/sets/J22/_cards.dat +++ b/projects/mtg/bin/Res/sets/J22/_cards.dat @@ -2,9 +2,634 @@ author=Wagic Team name=Jumpstart 2022 year=2022-12-02 -total=835 +total=960 [/meta] [card] +primitive=Drake +id=-589563 +rarity=T +[/card] +[card] +primitive=Thopter +id=-589568 +rarity=T +[/card] +[card] +primitive=Zombie +id=-589581 +rarity=T +[/card] +[card] +primitive=Goblin +id=-589583 +rarity=T +[/card] +[card] +primitive=Pirate +id=-589587 +rarity=T +[/card] +[card] +primitive=Banana +id=-589594 +rarity=T +[/card] +[card] +primitive=Wizard +id=-597043 +rarity=T +[/card] +[card] +primitive=Thopter +id=-597049 +rarity=T +[/card] +[card] +primitive=Rat +id=-597054 +rarity=T +[/card] +[card] +primitive=Goblin +id=-597059 +rarity=T +[/card] +[card] +primitive=Treasure +id=-597063 +rarity=T +[/card] +[card] +primitive=Wolf +id=-597068 +rarity=T +[/card] +[card] +primitive=Clue +id=-597078 +rarity=T +[/card] +[card] +primitive=Zombie +id=-597510 +rarity=T +[/card] +[card] +primitive=Spawn +id=-597518 +rarity=T +[/card] +[card] +primitive=Ajani's Pridemate +id=-591418 +rarity=T +[/card] +[card] +primitive=Pegasus +id=-591428 +rarity=T +[/card] +[card] +primitive=Cat +id=-591429 +rarity=T +[/card] +[card] +primitive=Spirit +id=-591433 +rarity=T +[/card] +[card] +primitive=Knight +id=-591443 +rarity=T +[/card] +[card] +primitive=Soldier +id=-591446 +rarity=T +[/card] +[card] +primitive=Soldier +id=-591450 +rarity=T +[/card] +[card] +primitive=Spirit +id=-591455 +rarity=T +[/card] +[card] +primitive=Cat Beast +id=-591461 +rarity=T +[/card] +[card] +primitive=Knight +id=-591463 +rarity=T +[/card] +[card] +primitive=Cat +id=-591485 +rarity=T +[/card] +[card] +primitive=Spirit +id=-591490 +rarity=T +[/card] +[card] +primitive=Soldier +id=-591496 +rarity=T +[/card] +[card] +primitive=Spirit +id=-591499 +rarity=T +[/card] +[card] +primitive=Cat +id=-591509 +rarity=T +[/card] +[card] +primitive=Bird +id=-591517 +rarity=T +[/card] +[card] +primitive=Angel +id=-591521 +rarity=T +[/card] +[card] +primitive=Clue +id=-591532 +rarity=T +[/card] +[card] +primitive=Spirit +id=-591535 +rarity=T +[/card] +[card] +primitive=Angel +id=-591538 +rarity=T +[/card] +[card] +primitive=Knight +id=-591541 +rarity=T +[/card] +[card] +primitive=Merfolk +id=-595089 +rarity=T +[/card] +[card] +primitive=Thopter +id=-595093 +rarity=T +[/card] +[card] +primitive=Clue +id=-595107 +rarity=T +[/card] +[card] +primitive=Clue +id=-595109 +rarity=T +[/card] +[card] +primitive=Faerie +id=-595112 +rarity=T +[/card] +[card] +primitive=Clue +id=-595118 +rarity=T +[/card] +[card] +primitive=Clue +id=-595129 +rarity=T +[/card] +[card] +primitive=Marit Lage +id=-595137 +rarity=T +[/card] +[card] +primitive=Elemental +id=-595143 +rarity=T +[/card] +[card] +primitive=Clue +id=-595155 +rarity=T +[/card] +[card] +primitive=Faerie +id=-595171 +rarity=T +[/card] +[card] +primitive=Thopter +id=-595178 +rarity=T +[/card] +[card] +primitive=Thopter +id=-595179 +rarity=T +[/card] +[card] +primitive=Saproling +id=-593935 +rarity=T +[/card] +[card] +primitive=Zombie +id=-593942 +rarity=T +[/card] +[card] +primitive=Zombie +id=-593950 +rarity=T +[/card] +[card] +primitive=Saproling +id=-593956 +rarity=T +[/card] +[card] +primitive=Zombie +id=-593961 +rarity=T +[/card] +[card] +primitive=Zombie +id=-593973 +rarity=T +[/card] +[card] +primitive=Zombie +id=-593975 +rarity=T +[/card] +[card] +primitive=Zombie +id=-593978 +rarity=T +[/card] +[card] +primitive=Zombie +id=-593986 +rarity=T +[/card] +[card] +primitive=Zombie +id=-593988 +rarity=T +[/card] +[card] +primitive=Snake // Zombie +id=-593992 +rarity=T +[/card] +[card] +primitive=Demon +id=-593997 +rarity=T +[/card] +[card] +primitive=Demon +id=-594007 +rarity=T +[/card] +[card] +primitive=Goblin +id=-594009 +rarity=T +[/card] +[card] +primitive=Demon +id=-594016 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590071 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590079 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590082 +rarity=T +[/card] +[card] +primitive=Devil +id=-590092 +rarity=T +[/card] +[card] +primitive=Dragon +id=-590095 +rarity=T +[/card] +[card] +primitive=Goblin +id=-590096 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590111 +rarity=T +[/card] +[card] +primitive=Goblin +id=-590118 +rarity=T +[/card] +[card] +primitive=Goblin +id=-590119 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590123 +rarity=T +[/card] +[card] +primitive=Goblin +id=-590125 +rarity=T +[/card] +[card] +primitive=Goblin +id=-590127 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590131 +rarity=T +[/card] +[card] +primitive=Ragavan +id=-590135 +rarity=T +[/card] +[card] +primitive=Goblin +id=-590137 +rarity=T +[/card] +[card] +primitive=Dragon +id=-590139 +rarity=T +[/card] +[card] +primitive=Rat +id=-590143 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590154 +rarity=T +[/card] +[card] +primitive=Elemental +id=-590171 +rarity=T +[/card] +[card] +primitive=Construct +id=-590174 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590183 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590189 +rarity=T +[/card] +[card] +primitive=Treasure +id=-590190 +rarity=T +[/card] +[card] +primitive=Elemental +id=-590199 +rarity=T +[/card] +[card] +primitive=Plant +id=-592707 +rarity=T +[/card] +[card] +primitive=Eldrazi Scion +id=-592710 +rarity=T +[/card] +[card] +primitive=Eldrazi Scion +id=-592715 +rarity=T +[/card] +[card] +primitive=Insect +id=-592720 +rarity=T +[/card] +[card] +primitive=Elf Warrior +id=-592729 +rarity=T +[/card] +[card] +primitive=Elf Warrior +id=-592730 +rarity=T +[/card] +[card] +primitive=Elf Warrior +id=-592731 +rarity=T +[/card] +[card] +primitive=Elf Warrior +id=-592732 +rarity=T +[/card] +[card] +primitive=Wolf +id=-592735 +rarity=T +[/card] +[card] +primitive=Wolf +id=-592737 +rarity=T +[/card] +[card] +primitive=Food +id=-592739 +rarity=T +[/card] +[card] +primitive=Butterfly +id=-592744 +rarity=T +[/card] +[card] +primitive=Elf Warrior +id=-592755 +rarity=T +[/card] +[card] +primitive=Insect +id=-592756 +rarity=T +[/card] +[card] +primitive=Wolf +id=-592759 +rarity=T +[/card] +[card] +primitive=Elf Warrior +id=-592764 +rarity=T +[/card] +[card] +primitive=Wolf +id=-592766 +rarity=T +[/card] +[card] +primitive=Wolf +id=-592774 +rarity=T +[/card] +[card] +primitive=Wolf +id=-592786 +rarity=T +[/card] +[card] +primitive=Elf Warrior +id=-592787 +rarity=T +[/card] +[card] +primitive=Beast +id=-592793 +rarity=T +[/card] +[card] +primitive=Eldrazi Scion +id=-592803 +rarity=T +[/card] +[card] +primitive=Insect +id=-592812 +rarity=T +[/card] +[card] +primitive=Boar +id=-592818 +rarity=T +[/card] +[card] +primitive=Wolf +id=-592819 +rarity=T +[/card] +[card] +primitive=Wolf +id=-592820 +rarity=T +[/card] +[card] +primitive=Elf Warrior +id=-592821 +rarity=T +[/card] +[card] +primitive=Elemental +id=-592825 +rarity=T +[/card] +[card] +primitive=Zombie +id=-596176 +rarity=T +[/card] +[card] +primitive=Treasure +id=-596185 +rarity=T +[/card] +[card] +primitive=Treasure +id=-596186 +rarity=T +[/card] +[card] +primitive=Thopter +id=-596189 +rarity=T +[/card] +[card] +primitive=Monkey +id=-596204 +rarity=T +[/card] +[card] +primitive=Clue +id=-596217 +rarity=T +[/card] +[card] +primitive=Thopter +id=-596225 +rarity=T +[/card] +[card] +primitive=Assembly-Worker +id=-596245 +rarity=T +[/card] +[card] +primitive=Banana +id=-597895 +rarity=T +[/card] +[card] primitive=Agrus Kos, Eternal Soldier id=589555 rarity=R