This commit is contained in:
PricelessKoala 2025-12-16 15:37:14 -06:00 committed by GitHub
commit febaa1136d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 631 additions and 0 deletions

36
.github/templates/set-tracking-issue.md vendored Normal file
View file

@ -0,0 +1,36 @@
This checklist is here to help manage the implementation of {{setName}}. If a card is marked as being in progress then someone is working on it.
If you're new to implementing cards then you likely don't have permission to check things off. This is totally fine! We still appreciate your contributions so just leave a comment to let us know that you're working on it.
Don't worry about moving things from in progress to completed either, this issue is automatically updated by github actions, and don't worry about fixing text issues as those are usually handled when the set is done.
[All Sets](https://github.com/magefree/mage/wiki/Set-implementation-list)
{{#hasUnimplementedCards}}
# Unimplemented Cards
{{#unimplementedCards}}
- [{{#pr}}x{{/pr}}{{^pr}} {{/pr}}] In progress -- [{{name}}]({{scryfall}})
{{/unimplementedCards}}
[Scryfall gallery of everything currently unimplemented]({{unimplementedScryfallLink}})
{{/hasUnimplementedCards}}
{{^hasUnimplementedCards}}
All cards are implemented
{{/hasUnimplementedCards}}
# Implemented Cards
<details>
<summary>Click to expand</summary>
</br>
{{#hasImplementedCards}}
{{#implementedCards}}
- [{{#pr}}x{{/pr}}{{^pr}} {{/pr}}] Done -- [{{name}}]({{scryfall}})
{{/implementedCards}}
{{/hasImplementedCards}}
</details>

View file

@ -0,0 +1,5 @@
Set Name | # Cards | # Missing |
--- | --- | --- |
{{#sets}}
[{{name}}]({{issueLink}}) | {{total}} | {{missing}}
{{/sets}}

View file

@ -0,0 +1,289 @@
name: Update set implementation lists
on:
push:
branches: [master]
#workflow_dispatch:
concurrency:
group: set-impl
cancel-in-progress: true
jobs:
update-set-implementation:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 16
- run: npm install mustache
shell: bash
- uses: actions/github-script@v6.4.1
id: updateissues
with:
script: |
const mustache = require('mustache')
const path = require('path')
const fs = require('fs')
// Disable mustache html-escape
mustache.escape = function(str) {
return str;
};
// https://stackoverflow.com/a/2970667
function toCamelCase(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
return index === 0 ? word.toLowerCase() : word.toUpperCase();
}).replace(/\s+/g, '')
}
function splitter(input, maxChars) {
var output = [];
output.push( input.split("\n").reduce(function(a, b) {
if (a.length + b.length < maxChars) {
a += "\n" + b; //if comnined length is still not execeeding add it a
} else {
output.push(a); //if combined less is exceeding the maxchars then push the last sentence to output
a = b;
}
return a;
})); //push the residue to output
return output;
}
const setsData = fs.readFileSync(path.join('Utils', 'mtg-sets-data.txt'), 'utf8')
.split('\n')
.map(line => line.split('|'));
const cardsData = fs.readFileSync(path.join('Utils', 'mtg-cards-data.txt'), 'utf8')
.split('\n')
.map(line => line.split('|'))
.filter(card => !(card[0].toLowerCase() === "plains" || card[0].toLowerCase() === "swamp" || card[0].toLowerCase() === "island" || card[0].toLowerCase() === "mountain" || card[0].toLowerCase() === "forest"));
const cardIssueTemplate = fs.readFileSync(path.join('.github', 'templates', 'set-tracking-issue.md'), 'utf8');
const issues = await github.paginate(github.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
labels: 'tracking set',
state: 'all'
});
//console.log("Found list of existing tracking set issues:", issues);
const issuesToUpdate = [];
const issuesToCreate = [];
for (const set of setsData) {
if (!set || !set[0] || !set[1]) continue;
let foundIssue = undefined;
issues.every(issue => {
if(issue && issue.title && issue.title.startsWith(set[1])) {
console.log(`Found tracking issue for ${set[0]} with issue number: ${issue.number}`);
foundIssue = issue;
return false;
}
return true;
});
let issueComments = undefined;
if (foundIssue) {
issueComments = await github.paginate(github.rest.issues.listComments, {
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: foundIssue.number
});
console.log(`Found ${issueComments.length} comments on issue #${foundIssue.number}`);
}
const cards = cardsData.filter(card => card[1] === set[0]);
const unimplemented = [];
const implemented = [];
for (const cardData of cards) {
const className = toCamelCase(cardData[0].replace(/[+]/g, ' Plus ').replace(/[_]+/g, ' Blank ').replace(/[']/g, '').replace(/[-+,.!?`@#$%^&*()_=<>:";~\\|/]/g, ' '));
const cleanCardName = cardData[0].replace(/[-,'.!?`@#$%^&*()_=<>:";~\\|/\s]/g, '').toLowerCase();
const cardPath = path.join('Mage.Sets', 'src', 'mage', 'cards', className.substring(0, 1), `${className.charAt(0).toUpperCase()+className.slice(1)}.java`);
// Find if someone left a comment with the card name (if someone did, we will put a check mark on the item)
let claimed = false;
issueComments && issueComments.forEach(comment => {
if (comment.body && comment.body.search(new RegExp(cardData[0], "i")) != -1 || comment.body.search(new RegExp(cleanCardName, "i")) != -1) {
console.log(`Found a comment by ${comment.user.login} claiming card ${cardData[0]}`);
claimed = true;
}
});
if (fs.existsSync(cardPath)) {
implemented.push({
pr: true,
name: cardData[0],
cleanName: cleanCardName,
scryfall: `https://scryfall.com/search?q=!"${cleanCardName}"+e:${set[1]}`
});
} else {
unimplemented.push({
pr: claimed,
name: cardData[0],
cleanName: cleanCardName,
scryfall: `https://scryfall.com/search?q=!"${cleanCardName}"+e:${set[1]}`
});
}
}
implemented.sort((a, b) => a.name.localeCompare(b.name));
unimplemented.sort((a, b) => a.name.localeCompare(b.name));
let body = mustache.render(cardIssueTemplate, {
hasUnimplementedCards: unimplemented.length > 0,
hasImplementedCards: implemented.length > 0,
unimplementedCards: unimplemented,
implementedCards: implemented,
unimplementedScryfallLink: `https://scryfall.com/search?q=!"${unimplemented.map(e => e.cleanName).join('"OR!"')}"+e:${set[1]}`,
setName: set[0]
});
// GH API has a max character length of 65536 for issue body. We can try to cut down on unnecessary fat to try to get it to fit.
if (body.length > 65536) {
console.log(`Issue body for ${set[0]} (${set[1]}) too long! Length: ${body.length}. Attempting to trim down size...`);
const trimmedBody = mustache.render(cardIssueTemplate, {
hasUnimplementedCards: unimplemented.length > 0,
hasImplementedCards: implemented.length > 0,
unimplementedCards: unimplemented,
implementedCards: implemented,
unimplementedScryfallLink: `https://scryfall.com/search?q=!"${unimplemented.map(e => e.cleanName).join('"OR!"')}"+e:${set[1]}`,
setName: set[0]
}).replaceAll("--", "-").replaceAll("https://", "").replaceAll(`+e:${set[1]}`, "");
console.log(`Trimmed body length: ${trimmedBody.length}`);
if (trimmedBody.length > 65536) {
console.log(`Could not create issue for ${set[0]} (${set[1]}). Please track this manually.`);
continue;
} else {
body = trimmedBody;
}
}
if (foundIssue !== undefined) {
foundIssue.body = body;
foundIssue.state = unimplemented.length > 0 ? "open" : "closed";
issuesToUpdate.push(foundIssue);
} else {
issuesToCreate.push({
title: `${set[1]}: ${set[0]} Set Card Implementation Tracking`,
body: body,
state: unimplemented.length > 0 ? "open" : "closed"
});
}
}
console.log(`Updating ${issuesToUpdate.length} issues`);
for (const issue of issuesToUpdate) {
github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue.number,
body: issue.body,
state: issue.state
});
}
console.log(`Creating ${issuesToCreate.length} issues`);
for (const issue of issuesToCreate) {
const result = await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: issue.title,
body: issue.body,
labels: ["tracking set"]
});
if (issue.state === "closed") {
github.rest.issues.update({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: result.data.number,
state: issue.state
});
}
}
- uses: actions/github-script@v6.4.1
id: updatesetimplementations
with:
script: |
const mustache = require('mustache')
const path = require('path')
const fs = require('fs')
// Disable mustache html-escape
mustache.escape = function(str) {
return str;
};
// https://stackoverflow.com/a/2970667
function toCamelCase(str) {
return str.replace(/(?:^\w|[A-Z]|\b\w)/g, function(word, index) {
return index === 0 ? word.toLowerCase() : word.toUpperCase();
}).replace(/\s+/g, '')
}
const setImplementationTemplate = fs.readFileSync(path.join('.github', 'templates', 'set-tracking-list.md'), 'utf8');
const setsData = fs.readFileSync(path.join('Utils', 'mtg-sets-data.txt'), 'utf8')
.split('\n')
.map(line => line.split('|'));
const cardsData = fs.readFileSync(path.join('Utils', 'mtg-cards-data.txt'), 'utf8')
.split('\n')
.map(line => line.split('|'))
.filter(card => !(card[0].toLowerCase() === "plains" || card[0].toLowerCase() === "swamp" || card[0].toLowerCase() === "island" || card[0].toLowerCase() === "mountain" || card[0].toLowerCase() === "forest"))
const issues = await github.paginate(github.rest.issues.listForRepo, {
owner: context.repo.owner,
repo: context.repo.repo,
labels: 'tracking set',
state: 'all'
});
console.log("Found list of existing tracking set issues:", issues);
const sets = [];
setsData.forEach(set => {
let foundIssue = undefined;
issues.every(issue => {
if(issue && issue.title && issue.title.startsWith(set[1])) {
console.log(`Found tracking issue for ${set[0]} with issue number: ${issue.number}`);
foundIssue = issue;
return false;
}
return true;
});
const cards = cardsData.filter(card => card[1] === set[0]);
let implementedCount = 0;
cards.forEach(cardData => {
const className = toCamelCase(cardData[0].replace(/[+]/g, ' Plus ').replace(/[_]+/g, ' Blank ').replace(/[']/g, '').replace(/[-+,.!?`@#$%^&*()_=<>:";~\\|/]/g, ' '));
const cleanCardName = cardData[0].replace(/[-,'.!?`@#$%^&*()_=<>:";~\\|/\s]/g, '').toLowerCase();
const cardPath = path.join('Mage.Sets', 'src', 'mage', 'cards', className.substring(0, 1), `${className.charAt(0).toUpperCase()+className.slice(1)}.java`);
if (fs.existsSync(cardPath)) {
implementedCount++;
}
});
sets.push({
name: set[0],
issueLink: foundIssue === undefined ? "https://www.github.com/mage/magefree" : foundIssue.html_url,
total: cards.length,
missing: cards.length - implementedCount
});
});
const content = mustache.render(setImplementationTemplate, {
sets: sets
});
console.log(content);
try {
fs.writeFileSync(path.join('Set-implementation-list.md'), content);
} catch (err) {
console.error(err);
}
- name: commit
run: |
# Setup git config
git config user.name github-actions
git config user.email github-actions@github.com
# Stage the Set-implementation-list.md file, commit, then push
git add Set-implementation-list.md
git commit -m "Update Set-implementation-list.md" || exit 0
git push

298
Set-implementation-list.md Normal file
View file

@ -0,0 +1,298 @@
Set Name | # Cards | # Missing |
--- | --- | --- |
[Tenth Edition](https://github.com/ExpensiveKoala/mage/issues/3) | 363 | 1
[Unlimited Edition](https://github.com/ExpensiveKoala/mage/issues/4) | 287 | 6
[Revised Edition](https://github.com/ExpensiveKoala/mage/issues/5) | 291 | 5
[Fourth Edition](https://github.com/ExpensiveKoala/mage/issues/6) | 363 | 6
[Fifth Dawn](https://github.com/ExpensiveKoala/mage/issues/7) | 165 | 1
[Fifth Edition](https://github.com/ExpensiveKoala/mage/issues/8) | 429 | 5
[Classic Sixth Edition](https://github.com/ExpensiveKoala/mage/issues/9) | 330 | 0
[Seventh Edition](https://github.com/ExpensiveKoala/mage/issues/10) | 330 | 0
[Eighth Edition](https://github.com/ExpensiveKoala/mage/issues/11) | 337 | 1
[Ninth Edition](https://github.com/ExpensiveKoala/mage/issues/12) | 339 | 1
[Alchemy: Dominaria](https://github.com/ExpensiveKoala/mage/issues/13) | 30 | 25
[Alchemy: Innistrad](https://github.com/ExpensiveKoala/mage/issues/14) | 64 | 49
[Adventures in the Forgotten Realms](https://github.com/ExpensiveKoala/mage/issues/15) | 261 | 1
[Forgotten Realms Commander](https://github.com/ExpensiveKoala/mage/issues/16) | 276 | 1
[Aether Revolt](https://github.com/ExpensiveKoala/mage/issues/17) | 194 | 0
[Amonkhet](https://github.com/ExpensiveKoala/mage/issues/18) | 274 | 30
[Shards of Alara](https://github.com/ExpensiveKoala/mage/issues/19) | 229 | 0
[Alliances](https://github.com/ExpensiveKoala/mage/issues/20) | 144 | 5
[Arena Beginner Set](https://github.com/ExpensiveKoala/mage/issues/21) | 110 | 0
[Asia Pacific Land Program](https://github.com/ExpensiveKoala/mage/issues/22) | 0 | 0
[Apocalypse](https://github.com/ExpensiveKoala/mage/issues/23) | 178 | 40
[Alara Reborn](https://github.com/ExpensiveKoala/mage/issues/24) | 146 | 0
[Archenemy](https://github.com/ExpensiveKoala/mage/issues/25) | 139 | 4
[Arena League](https://github.com/ExpensiveKoala/mage/issues/26) | 41 | 4
[Arabian Nights](https://github.com/ExpensiveKoala/mage/issues/27) | 77 | 3
[Anthologies](https://github.com/ExpensiveKoala/mage/issues/28) | 0 | 0
[Antiquities](https://github.com/ExpensiveKoala/mage/issues/29) | 85 | 1
[Assassin's Creed](https://github.com/ExpensiveKoala/mage/issues/30) | 133 | 22
[Avacyn Restored](https://github.com/ExpensiveKoala/mage/issues/31) | 229 | 0
[Battle for Zendikar](https://github.com/ExpensiveKoala/mage/issues/32) | 249 | 0
[Battlebond](https://github.com/ExpensiveKoala/mage/issues/33) | 249 | 0
[Born of the Gods](https://github.com/ExpensiveKoala/mage/issues/34) | 165 | 0
[Betrayers of Kamigawa](https://github.com/ExpensiveKoala/mage/issues/35) | 166 | 1
[Battle Royale Box Set](https://github.com/ExpensiveKoala/mage/issues/36) | 100 | 0
[Beatdown Box Set](https://github.com/ExpensiveKoala/mage/issues/37) | 78 | 0
[Bloomburrow](https://github.com/ExpensiveKoala/mage/issues/38) | 274 | 6
[Bloomburrow Commander](https://github.com/ExpensiveKoala/mage/issues/39) | 314 | 9
[Commander 2013 Edition](https://github.com/ExpensiveKoala/mage/issues/40) | 335 | 0
[Commander 2014 Edition](https://github.com/ExpensiveKoala/mage/issues/41) | 317 | 0
[Commander 2015 Edition](https://github.com/ExpensiveKoala/mage/issues/42) | 322 | 0
[Commander 2016 Edition](https://github.com/ExpensiveKoala/mage/issues/43) | 338 | 4
[Commander 2017 Edition](https://github.com/ExpensiveKoala/mage/issues/44) | 294 | 2
[Commander 2018 Edition](https://github.com/ExpensiveKoala/mage/issues/45) | 0 | 0
[Commander 2019 Edition](https://github.com/ExpensiveKoala/mage/issues/46) | 0 | 0
[Commander 2020 Edition](https://github.com/ExpensiveKoala/mage/issues/47) | 0 | 0
[Commander 2021 Edition](https://github.com/ExpensiveKoala/mage/issues/48) | 0 | 0
[Commander Legends](https://github.com/ExpensiveKoala/mage/issues/50) | 712 | 4
[Commander Legends: Battle for Baldur's Gate](https://github.com/ExpensiveKoala/mage/issues/49) | 676 | 37
[Champions of Kamigawa](https://github.com/ExpensiveKoala/mage/issues/51) | 296 | 11
[Chronicles](https://github.com/ExpensiveKoala/mage/issues/52) | 116 | 1
[Clash Pack](https://github.com/ExpensiveKoala/mage/issues/53) | 12 | 0
[Commander Anthology](https://github.com/ExpensiveKoala/mage/issues/54) | 285 | 0
[Commander Anthology 2018](https://github.com/ExpensiveKoala/mage/issues/55) | 0 | 0
[Commander's Arsenal](https://github.com/ExpensiveKoala/mage/issues/56) | 27 | 0
[Commander Masters](https://github.com/ExpensiveKoala/mage/issues/57) | 732 | 1
[Commander](https://github.com/ExpensiveKoala/mage/issues/58) | 0 | 0
[Conspiracy](https://github.com/ExpensiveKoala/mage/issues/59) | 0 | 0
[Conspiracy: Take the Crown](https://github.com/ExpensiveKoala/mage/issues/60) | 221 | 25
[Conflux](https://github.com/ExpensiveKoala/mage/issues/61) | 145 | 0
[Coldsnap](https://github.com/ExpensiveKoala/mage/issues/62) | 155 | 0
[Doctor Who](https://github.com/ExpensiveKoala/mage/issues/63) | 315 | 61
[Duel Decks: Jace vs. Chandra](https://github.com/ExpensiveKoala/mage/issues/64) | 54 | 0
[Duel Decks: Anthology, Divine vs. Demonic](https://github.com/ExpensiveKoala/mage/issues/65) | 54 | 0
[Duel Decks: Anthology, Elves vs. Goblins](https://github.com/ExpensiveKoala/mage/issues/107) | 54 | 0
[Duel Decks: Anthology, Garruk vs. Liliana](https://github.com/ExpensiveKoala/mage/issues/67) | 55 | 0
[Duel Decks: Anthology, Jace vs. Chandra](https://github.com/ExpensiveKoala/mage/issues/68) | 54 | 0
[Duel Decks: Divine vs. Demonic](https://github.com/ExpensiveKoala/mage/issues/69) | 54 | 0
[Duel Decks: Garruk vs. Liliana](https://github.com/ExpensiveKoala/mage/issues/70) | 55 | 0
[Duel Decks: Phyrexia vs. the Coalition](https://github.com/ExpensiveKoala/mage/issues/71) | 62 | 0
[Duel Decks: Elspeth vs. Tezzeret](https://github.com/ExpensiveKoala/mage/issues/72) | 71 | 0
[Duel Decks: Knights vs. Dragons](https://github.com/ExpensiveKoala/mage/issues/73) | 69 | 0
[Duel Decks: Ajani vs. Nicol Bolas](https://github.com/ExpensiveKoala/mage/issues/74) | 81 | 12
[Duel Decks: Venser vs. Koth](https://github.com/ExpensiveKoala/mage/issues/75) | 67 | 0
[Duel Decks: Izzet vs. Golgari](https://github.com/ExpensiveKoala/mage/issues/76) | 81 | 8
[Duel Decks: Sorin vs. Tibalt](https://github.com/ExpensiveKoala/mage/issues/77) | 68 | 0
[Duel Decks: Heroes vs. Monsters](https://github.com/ExpensiveKoala/mage/issues/78) | 65 | 0
[Duel Decks: Jace vs. Vraska](https://github.com/ExpensiveKoala/mage/issues/79) | 73 | 0
[Duel Decks: Speed vs. Cunning](https://github.com/ExpensiveKoala/mage/issues/80) | 67 | 0
[Duel Decks: Elspeth vs. Kiora](https://github.com/ExpensiveKoala/mage/issues/81) | 55 | 0
[Duel Decks: Zendikar vs. Eldrazi](https://github.com/ExpensiveKoala/mage/issues/82) | 63 | 0
[Duel Decks: Blessed vs. Cursed](https://github.com/ExpensiveKoala/mage/issues/83) | 64 | 0
[Duel Decks: Nissa vs. Ob Nixilis](https://github.com/ExpensiveKoala/mage/issues/84) | 60 | 0
[Duel Decks: Mind vs. Might](https://github.com/ExpensiveKoala/mage/issues/85) | 53 | 0
[Duel Decks: Merfolk vs. Goblins](https://github.com/ExpensiveKoala/mage/issues/86) | 55 | 0
[Duels of the Planeswalkers](https://github.com/ExpensiveKoala/mage/issues/87) | 0 | 0
[Duskmourn: House of Horror](https://github.com/ExpensiveKoala/mage/issues/88) | 271 | 55
[Duskmourn: House of Horror Commander](https://github.com/ExpensiveKoala/mage/issues/89) | 307 | 33
[Dragon's Maze](https://github.com/ExpensiveKoala/mage/issues/90) | 201 | 61
[Dissension](https://github.com/ExpensiveKoala/mage/issues/91) | 210 | 40
[Dark Ascension](https://github.com/ExpensiveKoala/mage/issues/92) | 175 | 0
[Deckmasters](https://github.com/ExpensiveKoala/mage/issues/93) | 0 | 0
[Dominaria](https://github.com/ExpensiveKoala/mage/issues/94) | 260 | 0
[Dominaria United](https://github.com/ExpensiveKoala/mage/issues/95) | 266 | 0
[Dominaria United Commander](https://github.com/ExpensiveKoala/mage/issues/96) | 192 | 0
[From the Vault: Dragons](https://github.com/ExpensiveKoala/mage/issues/97) | 15 | 0
[The Dark](https://github.com/ExpensiveKoala/mage/issues/98) | 119 | 3
[Darksteel](https://github.com/ExpensiveKoala/mage/issues/99) | 165 | 0
[Dragons of Tarkir](https://github.com/ExpensiveKoala/mage/issues/100) | 250 | 0
[Archenemy: Nicol Bolas](https://github.com/ExpensiveKoala/mage/issues/101) | 112 | 0
[Explorers of Ixalan](https://github.com/ExpensiveKoala/mage/issues/102) | 0 | 0
[Eternal Masters](https://github.com/ExpensiveKoala/mage/issues/103) | 249 | 0
[Eldritch Moon](https://github.com/ExpensiveKoala/mage/issues/104) | 223 | 0
[European Land Program](https://github.com/ExpensiveKoala/mage/issues/105) | 0 | 0
[Eventide](https://github.com/ExpensiveKoala/mage/issues/106) | 180 | 1
[Duel Decks: Elves vs. Goblins](https://github.com/ExpensiveKoala/mage/issues/107) | 54 | 0
[Duel Decks: Elves vs. Inventors](https://github.com/ExpensiveKoala/mage/issues/108) | 0 | 0
[Pro Tour Promos](https://github.com/ExpensiveKoala/mage/issues/109) | 0 | 0
[Exodus](https://github.com/ExpensiveKoala/mage/issues/110) | 143 | 0
[Zendikar Expeditions](https://github.com/ExpensiveKoala/mage/issues/111) | 45 | 0
[Fallout](https://github.com/ExpensiveKoala/mage/issues/112) | 332 | 20
[Fallen Empires](https://github.com/ExpensiveKoala/mage/issues/113) | 102 | 0
[Friday Night Magic](https://github.com/ExpensiveKoala/mage/issues/114) | 210 | 5
[Fate Reforged](https://github.com/ExpensiveKoala/mage/issues/115) | 175 | 0
[Foundations](https://github.com/ExpensiveKoala/mage/issues/116) | 30 | 1
[Future Sight](https://github.com/ExpensiveKoala/mage/issues/117) | 180 | 0
[Global Series: Jiang Yanggu & Mu Yanling](https://github.com/ExpensiveKoala/mage/issues/118) | 36 | 0
[Guildpact](https://github.com/ExpensiveKoala/mage/issues/119) | 165 | 0
[Guilds of Ravnica](https://github.com/ExpensiveKoala/mage/issues/120) | 273 | 20
[Grand Prix](https://github.com/ExpensiveKoala/mage/issues/121) | 13 | 0
[WPN Gateway](https://github.com/ExpensiveKoala/mage/issues/122) | 65 | 0
[Gatecrash](https://github.com/ExpensiveKoala/mage/issues/123) | 249 | 0
[Guru](https://github.com/ExpensiveKoala/mage/issues/124) | 0 | 0
[Premium Deck Series: Slivers](https://github.com/ExpensiveKoala/mage/issues/125) | 36 | 1
[Homelands](https://github.com/ExpensiveKoala/mage/issues/126) | 140 | 1
[Heroes of the Realm](https://github.com/ExpensiveKoala/mage/issues/127) | 3 | 2
[Planechase](https://github.com/ExpensiveKoala/mage/issues/128) | 147 | 8
[Hour of Devastation](https://github.com/ExpensiveKoala/mage/issues/129) | 194 | 0
[Ice Age](https://github.com/ExpensiveKoala/mage/issues/130) | 368 | 17
[Iconic Masters](https://github.com/ExpensiveKoala/mage/issues/131) | 0 | 0
[Ikoria: Lair of Behemoths](https://github.com/ExpensiveKoala/mage/issues/132) | 372 | 3
[Invasion](https://github.com/ExpensiveKoala/mage/issues/133) | 365 | 41
[Innistrad](https://github.com/ExpensiveKoala/mage/issues/134) | 271 | 0
[The Lost Caverns of Ixalan](https://github.com/ExpensiveKoala/mage/issues/135) | 322 | 1
[Lost Caverns of Ixalan Commander](https://github.com/ExpensiveKoala/mage/issues/136) | 318 | 3
[Innistrad: Midnight Hunt](https://github.com/ExpensiveKoala/mage/issues/137) | 316 | 0
[Midnight Hunt Commander](https://github.com/ExpensiveKoala/mage/issues/138) | 149 | 0
[Innistrad: Crimson Vow](https://github.com/ExpensiveKoala/mage/issues/139) | 316 | 0
[Crimson Vow Commander](https://github.com/ExpensiveKoala/mage/issues/140) | 150 | 0
[Journey into Nyx](https://github.com/ExpensiveKoala/mage/issues/141) | 165 | 0
[Judge Promo](https://github.com/ExpensiveKoala/mage/issues/142) | 107 | 0
[Judgment](https://github.com/ExpensiveKoala/mage/issues/143) | 143 | 1
[Jumpstart](https://github.com/ExpensiveKoala/mage/issues/144) | 455 | 0
[Jumpstart: Historic Horizons](https://github.com/ExpensiveKoala/mage/issues/145) | 374 | 21
[Jumpstart 2022](https://github.com/ExpensiveKoala/mage/issues/146) | 814 | 0
[Kaladesh](https://github.com/ExpensiveKoala/mage/issues/147) | 259 | 0
[Kaldheim](https://github.com/ExpensiveKoala/mage/issues/148) | 433 | 33
[Kaldheim Commander](https://github.com/ExpensiveKoala/mage/issues/149) | 119 | 0
[Kamigawa: Neon Dynasty](https://github.com/ExpensiveKoala/mage/issues/150) | 305 | 0
[Neon Dynasty Commander](https://github.com/ExpensiveKoala/mage/issues/151) | 38 | 0
[Khans of Tarkir](https://github.com/ExpensiveKoala/mage/issues/152) | 249 | 0
[Limited Edition Alpha](https://github.com/ExpensiveKoala/mage/issues/153) | 285 | 6
[Limited Edition Beta](https://github.com/ExpensiveKoala/mage/issues/154) | 287 | 6
[Legends](https://github.com/ExpensiveKoala/mage/issues/155) | 310 | 10
[Legions](https://github.com/ExpensiveKoala/mage/issues/156) | 145 | 0
[The Lord of the Rings: Tales of Middle-earth](https://github.com/ExpensiveKoala/mage/issues/157) | 284 | 0
[Tales of Middle-earth Commander](https://github.com/ExpensiveKoala/mage/issues/158) | 341 | 1
[Lorwyn](https://github.com/ExpensiveKoala/mage/issues/159) | 281 | 0
[Magic 2010](https://github.com/ExpensiveKoala/mage/issues/160) | 229 | 0
[Magic 2011](https://github.com/ExpensiveKoala/mage/issues/161) | 229 | 0
[Magic 2012](https://github.com/ExpensiveKoala/mage/issues/162) | 229 | 0
[Magic 2013](https://github.com/ExpensiveKoala/mage/issues/163) | 229 | 0
[Magic 2014](https://github.com/ExpensiveKoala/mage/issues/164) | 229 | 0
[Magic 2015](https://github.com/ExpensiveKoala/mage/issues/165) | 264 | 0
[Core Set 2019](https://github.com/ExpensiveKoala/mage/issues/166) | 295 | 0
[Core Set 2020](https://github.com/ExpensiveKoala/mage/issues/167) | 324 | 0
[Core Set 2021](https://github.com/ExpensiveKoala/mage/issues/168) | 377 | 0
[Masters 25](https://github.com/ExpensiveKoala/mage/issues/169) | 0 | 0
[Magic: The Gathering-Commander](https://github.com/ExpensiveKoala/mage/issues/58) | 302 | 5
[Magic: The Gathering-Conspiracy](https://github.com/ExpensiveKoala/mage/issues/59) | 210 | 19
[Media Inserts](https://github.com/ExpensiveKoala/mage/issues/170) | 195 | 1
[March of the Machine](https://github.com/ExpensiveKoala/mage/issues/2) | 352 | 0
[March of the Machine Commander](https://github.com/ExpensiveKoala/mage/issues/171) | 342 | 5
[March of the Machine: The Aftermath](https://github.com/ExpensiveKoala/mage/issues/172) | 50 | 0
[Mirrodin Besieged](https://github.com/ExpensiveKoala/mage/issues/173) | 145 | 0
[Masters Edition II](https://github.com/ExpensiveKoala/mage/issues/174) | 245 | 6
[Masters Edition III](https://github.com/ExpensiveKoala/mage/issues/175) | 215 | 2
[Masters Edition IV](https://github.com/ExpensiveKoala/mage/issues/176) | 260 | 2
[Masters Edition](https://github.com/ExpensiveKoala/mage/issues/177) | 180 | 0
[Game Day](https://github.com/ExpensiveKoala/mage/issues/178) | 63 | 0
[Game Night](https://github.com/ExpensiveKoala/mage/issues/179) | 0 | 0
[Game Night 2019](https://github.com/ExpensiveKoala/mage/issues/180) | 5 | 0
[Game Night Free-for-All](https://github.com/ExpensiveKoala/mage/issues/181) | 0 | 0
[Mirage](https://github.com/ExpensiveKoala/mage/issues/182) | 330 | 6
[Launch Party](https://github.com/ExpensiveKoala/mage/issues/183) | 43 | 2
[Modern Horizons](https://github.com/ExpensiveKoala/mage/issues/184) | 255 | 0
[Modern Horizons 2](https://github.com/ExpensiveKoala/mage/issues/185) | 304 | 0
[Modern Horizons 3](https://github.com/ExpensiveKoala/mage/issues/186) | 330 | 21
[Modern Horizons 3 Commander](https://github.com/ExpensiveKoala/mage/issues/187) | 320 | 7
[Modern Masters 2015](https://github.com/ExpensiveKoala/mage/issues/188) | 249 | 0
[Modern Masters 2017](https://github.com/ExpensiveKoala/mage/issues/189) | 249 | 0
[Modern Masters](https://github.com/ExpensiveKoala/mage/issues/190) | 229 | 0
[Mercadian Masques](https://github.com/ExpensiveKoala/mage/issues/191) | 330 | 0
[Morningtide](https://github.com/ExpensiveKoala/mage/issues/192) | 150 | 0
[Magic Player Rewards](https://github.com/ExpensiveKoala/mage/issues/193) | 53 | 0
[Masterpiece Series](https://github.com/ExpensiveKoala/mage/issues/194) | 54 | 0
[Mirrodin](https://github.com/ExpensiveKoala/mage/issues/195) | 286 | 1
[Murders at Karlov Manor](https://github.com/ExpensiveKoala/mage/issues/196) | 275 | 1
[Murders at Karlov Manor Commander](https://github.com/ExpensiveKoala/mage/issues/197) | 45 | 16
[Mystery Booster 2](https://github.com/ExpensiveKoala/mage/issues/198) | 0 | 0
[Ravnica: Clue Edition](https://github.com/ExpensiveKoala/mage/issues/199) | 61 | 12
[Nemesis](https://github.com/ExpensiveKoala/mage/issues/200) | 143 | 0
[New Phyrexia](https://github.com/ExpensiveKoala/mage/issues/201) | 165 | 0
[Odyssey](https://github.com/ExpensiveKoala/mage/issues/202) | 330 | 0
[Oath of the Gatewatch](https://github.com/ExpensiveKoala/mage/issues/203) | 184 | 0
[Onslaught](https://github.com/ExpensiveKoala/mage/issues/204) | 330 | 1
[Outlaws of Thunder Junction](https://github.com/ExpensiveKoala/mage/issues/205) | 271 | 0
[Outlaws of Thunder Junction Commander](https://github.com/ExpensiveKoala/mage/issues/206) | 40 | 1
[The Big Score](https://github.com/ExpensiveKoala/mage/issues/207) | 30 | 0
[Magic Origins](https://github.com/ExpensiveKoala/mage/issues/208) | 262 | 0
[Phyrexia: All Will Be One](https://github.com/ExpensiveKoala/mage/issues/209) | 266 | 0
[Phyrexia: All Will Be One Commander](https://github.com/ExpensiveKoala/mage/issues/210) | 144 | 0
[Portal Second Age](https://github.com/ExpensiveKoala/mage/issues/211) | 150 | 3
[Planechase 2012 Edition](https://github.com/ExpensiveKoala/mage/issues/212) | 131 | 0
[Planechase Anthology](https://github.com/ExpensiveKoala/mage/issues/213) | 131 | 1
[Prophecy](https://github.com/ExpensiveKoala/mage/issues/214) | 143 | 0
[Premium Deck Series: Fire and Lightning](https://github.com/ExpensiveKoala/mage/issues/215) | 0 | 0
[Premium Deck Series: Graveborn](https://github.com/ExpensiveKoala/mage/issues/216) | 26 | 0
[Planar Chaos](https://github.com/ExpensiveKoala/mage/issues/217) | 174 | 12
[Planeshift](https://github.com/ExpensiveKoala/mage/issues/218) | 143 | 0
[Portal](https://github.com/ExpensiveKoala/mage/issues/219) | 202 | 0
[Prerelease Events](https://github.com/ExpensiveKoala/mage/issues/220) | 306 | 5
[Portal Three Kingdoms](https://github.com/ExpensiveKoala/mage/issues/221) | 165 | 0
[Ravnica Allegiance](https://github.com/ExpensiveKoala/mage/issues/222) | 273 | 20
[Ravnica: City of Guilds](https://github.com/ExpensiveKoala/mage/issues/223) | 287 | 0
[Jurassic World Collection](https://github.com/ExpensiveKoala/mage/issues/224) | 23 | 0
[Rivals of Ixalan](https://github.com/ExpensiveKoala/mage/issues/225) | 207 | 0
[Rise of the Eldrazi](https://github.com/ExpensiveKoala/mage/issues/226) | 228 | 0
[Return to Ravnica](https://github.com/ExpensiveKoala/mage/issues/227) | 249 | 0
[Sega Dreamcast Cards](https://github.com/ExpensiveKoala/mage/issues/228) | 10 | 8
[Starter 2000](https://github.com/ExpensiveKoala/mage/issues/229) | 47 | 0
[Starter 1999](https://github.com/ExpensiveKoala/mage/issues/230) | 153 | 1
[Starter Commander Decks](https://github.com/ExpensiveKoala/mage/issues/231) | 0 | 0
[Strixhaven: School of Mages](https://github.com/ExpensiveKoala/mage/issues/232) | 404 | 32
[Scourge](https://github.com/ExpensiveKoala/mage/issues/233) | 143 | 0
[Secret Lair](https://github.com/ExpensiveKoala/mage/issues/234) | 0 | 0
[Secret Lair Showdown](https://github.com/ExpensiveKoala/mage/issues/235) | 0 | 0
[Shadowmoor](https://github.com/ExpensiveKoala/mage/issues/236) | 281 | 0
[Shadows over Innistrad](https://github.com/ExpensiveKoala/mage/issues/237) | 315 | 0
[Saviors of Kamigawa](https://github.com/ExpensiveKoala/mage/issues/238) | 170 | 5
[Scars of Mirrodin](https://github.com/ExpensiveKoala/mage/issues/239) | 229 | 0
[Streets of New Capenna](https://github.com/ExpensiveKoala/mage/issues/240) | 261 | 0
[New Capenna Commander](https://github.com/ExpensiveKoala/mage/issues/241) | 350 | 0
[Stronghold](https://github.com/ExpensiveKoala/mage/issues/242) | 143 | 0
[Special Guests](https://github.com/ExpensiveKoala/mage/issues/243) | 8 | 0
[Super Series](https://github.com/ExpensiveKoala/mage/issues/244) | 32 | 0
[Theros](https://github.com/ExpensiveKoala/mage/issues/245) | 229 | 0
[Theros Beyond Death](https://github.com/ExpensiveKoala/mage/issues/246) | 268 | 0
[The Brothers' War](https://github.com/ExpensiveKoala/mage/issues/247) | 275 | 0
[The Brothers' War Commander](https://github.com/ExpensiveKoala/mage/issues/248) | 172 | 0
[Tempest](https://github.com/ExpensiveKoala/mage/issues/249) | 330 | 4
[Throne of Eldraine](https://github.com/ExpensiveKoala/mage/issues/250) | 437 | 60
[Torment](https://github.com/ExpensiveKoala/mage/issues/251) | 143 | 1
[Tempest Remastered](https://github.com/ExpensiveKoala/mage/issues/252) | 249 | 0
[Time Spiral "Timeshifted"](https://github.com/ExpensiveKoala/mage/issues/253) | 124 | 4
[Time Spiral](https://github.com/ExpensiveKoala/mage/issues/254) | 281 | 0
[Transformers](https://github.com/ExpensiveKoala/mage/issues/255) | 30 | 8
[Urza's Destiny](https://github.com/ExpensiveKoala/mage/issues/256) | 143 | 0
[Ugin's Fate](https://github.com/ExpensiveKoala/mage/issues/257) | 26 | 0
[Unglued](https://github.com/ExpensiveKoala/mage/issues/258) | 44 | 7
[Urza's Legacy](https://github.com/ExpensiveKoala/mage/issues/259) | 143 | 0
[Unhinged](https://github.com/ExpensiveKoala/mage/issues/260) | 1 | 0
[Unfinity](https://github.com/ExpensiveKoala/mage/issues/261) | 259 | 226
[Urza's Saga](https://github.com/ExpensiveKoala/mage/issues/262) | 330 | 0
[Unstable](https://github.com/ExpensiveKoala/mage/issues/263) | 59 | 27
[HASCON Promo 2017](https://github.com/ExpensiveKoala/mage/issues/264) | 0 | 0
[From the Vault: Exiled](https://github.com/ExpensiveKoala/mage/issues/265) | 15 | 1
[From the Vault: Relics](https://github.com/ExpensiveKoala/mage/issues/266) | 15 | 0
[From the Vault: Legends](https://github.com/ExpensiveKoala/mage/issues/267) | 15 | 0
[From the Vault: Realms](https://github.com/ExpensiveKoala/mage/issues/268) | 15 | 0
[From the Vault: Twenty](https://github.com/ExpensiveKoala/mage/issues/269) | 20 | 0
[From the Vault: Annihilation](https://github.com/ExpensiveKoala/mage/issues/270) | 15 | 0
[From the Vault: Angels](https://github.com/ExpensiveKoala/mage/issues/271) | 15 | 0
[From the Vault: Lore](https://github.com/ExpensiveKoala/mage/issues/272) | 15 | 0
[From the Vault: Transform](https://github.com/ExpensiveKoala/mage/issues/273) | 0 | 0
[Vanguard Set 1](https://github.com/ExpensiveKoala/mage/issues/274) | 0 | 0
[Vanguard Set 2](https://github.com/ExpensiveKoala/mage/issues/275) | 0 | 0
[Vanguard Set 3](https://github.com/ExpensiveKoala/mage/issues/276) | 0 | 0
[Vanguard Set 4](https://github.com/ExpensiveKoala/mage/issues/277) | 0 | 0
[MTGO Vanguard](https://github.com/ExpensiveKoala/mage/issues/278) | 0 | 0
[Visions](https://github.com/ExpensiveKoala/mage/issues/279) | 167 | 2
[Vintage Masters](https://github.com/ExpensiveKoala/mage/issues/280) | 325 | 0
[War of the Spark](https://github.com/ExpensiveKoala/mage/issues/281) | 260 | 0
[Welcome Deck 2016](https://github.com/ExpensiveKoala/mage/issues/282) | 16 | 0
[Welcome Deck 2017](https://github.com/ExpensiveKoala/mage/issues/283) | 30 | 0
[Weatherlight](https://github.com/ExpensiveKoala/mage/issues/284) | 167 | 0
[Wilds of Eldraine](https://github.com/ExpensiveKoala/mage/issues/285) | 327 | 51
[Wilds of Eldraine Commander](https://github.com/ExpensiveKoala/mage/issues/286) | 146 | 3
[Worldwake](https://github.com/ExpensiveKoala/mage/issues/287) | 145 | 0
[Ixalan](https://github.com/ExpensiveKoala/mage/issues/288) | 279 | 0
[Zendikar](https://github.com/ExpensiveKoala/mage/issues/289) | 229 | 0
[Zendikar Rising](https://github.com/ExpensiveKoala/mage/issues/290) | 423 | 52
[Zendikar Rising Commander](https://github.com/ExpensiveKoala/mage/issues/291) | 142 | 3
[Star Wars](https://github.com/ExpensiveKoala/mage/issues/292) | 66 | 0
[Happy Holidays](https://github.com/ExpensiveKoala/mage/issues/293) | 3 | 0
[Warhammer 40,000](https://github.com/ExpensiveKoala/mage/issues/294) | 281 | 2
[](https://github.com/ExpensiveKoala/mage/issues/295) | 0 | 0

View file

@ -37,6 +37,9 @@ Servers status:
Beta server with un-released or under development features:
* http://xmage.today/ (release version)
Check set implementation status:
* [Set tracker](https://github.com/magefree/mage/Set-implementation-list.md)
## Features
* Multiplatform app: Windows, Linux, MacOS;