Add Ikoria Crystal frame
3
.gitignore
vendored
@@ -31,6 +31,3 @@ access.log
|
|||||||
error.log
|
error.log
|
||||||
|
|
||||||
fly.toml
|
fly.toml
|
||||||
|
|
||||||
img/frames/crystal/*
|
|
||||||
js/frames/packCrystal.js
|
|
BIN
img/frames/crystal/a.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
img/frames/crystal/aThumb.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
img/frames/crystal/b.png
Normal file
After Width: | Height: | Size: 946 KiB |
BIN
img/frames/crystal/bThumb.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
img/frames/crystal/border.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img/frames/crystal/borderThumb.png
Normal file
After Width: | Height: | Size: 589 B |
BIN
img/frames/crystal/g.png
Normal file
After Width: | Height: | Size: 1.0 MiB |
BIN
img/frames/crystal/gThumb.png
Normal file
After Width: | Height: | Size: 7.6 KiB |
BIN
img/frames/crystal/m.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
img/frames/crystal/mThumb.png
Normal file
After Width: | Height: | Size: 7.7 KiB |
BIN
img/frames/crystal/pinline.png
Normal file
After Width: | Height: | Size: 65 KiB |
BIN
img/frames/crystal/pinlineThumb.png
Normal file
After Width: | Height: | Size: 2.9 KiB |
BIN
img/frames/crystal/pt/a.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
img/frames/crystal/pt/aThumb.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
img/frames/crystal/pt/b.png
Normal file
After Width: | Height: | Size: 57 KiB |
BIN
img/frames/crystal/pt/bThumb.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
img/frames/crystal/pt/c.png
Normal file
After Width: | Height: | Size: 55 KiB |
BIN
img/frames/crystal/pt/cThumb.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
img/frames/crystal/pt/g.png
Normal file
After Width: | Height: | Size: 54 KiB |
BIN
img/frames/crystal/pt/gThumb.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
img/frames/crystal/pt/m.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
img/frames/crystal/pt/mThumb.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
img/frames/crystal/pt/r.png
Normal file
After Width: | Height: | Size: 53 KiB |
BIN
img/frames/crystal/pt/rThumb.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
img/frames/crystal/pt/u.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
img/frames/crystal/pt/uThumb.png
Normal file
After Width: | Height: | Size: 11 KiB |
BIN
img/frames/crystal/pt/w.png
Normal file
After Width: | Height: | Size: 46 KiB |
BIN
img/frames/crystal/pt/wThumb.png
Normal file
After Width: | Height: | Size: 14 KiB |
BIN
img/frames/crystal/r.png
Normal file
After Width: | Height: | Size: 1010 KiB |
BIN
img/frames/crystal/rThumb.png
Normal file
After Width: | Height: | Size: 7.5 KiB |
BIN
img/frames/crystal/rules.png
Normal file
After Width: | Height: | Size: 27 KiB |
BIN
img/frames/crystal/rulesThumb.png
Normal file
After Width: | Height: | Size: 1002 B |
BIN
img/frames/crystal/title.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img/frames/crystal/titleThumb.png
Normal file
After Width: | Height: | Size: 540 B |
BIN
img/frames/crystal/type.png
Normal file
After Width: | Height: | Size: 20 KiB |
BIN
img/frames/crystal/typeThumb.png
Normal file
After Width: | Height: | Size: 522 B |
BIN
img/frames/crystal/u.png
Normal file
After Width: | Height: | Size: 1.1 MiB |
BIN
img/frames/crystal/uThumb.png
Normal file
After Width: | Height: | Size: 7.8 KiB |
BIN
img/frames/crystal/w.png
Normal file
After Width: | Height: | Size: 1001 KiB |
BIN
img/frames/crystal/wThumb.png
Normal file
After Width: | Height: | Size: 8.0 KiB |
@@ -3528,6 +3528,7 @@ function changeCardIndex() {
|
|||||||
return '{i}' + a + '{/i}';
|
return '{i}' + a + '{/i}';
|
||||||
});
|
});
|
||||||
rulesText = curlyQuotes(rulesText).replace(/{Q}/g, '{untap}').replace(/{\u221E}/g, "{inf}").replace(/• /g, '• {indent}');
|
rulesText = curlyQuotes(rulesText).replace(/{Q}/g, '{untap}').replace(/{\u221E}/g, "{inf}").replace(/• /g, '• {indent}');
|
||||||
|
rulesText = rulesText.replace('(If this card is your chosen companion, you may put it into your hand from outside the game for {3} any time you could cast a sorcery.)', '(If this card is your chosen companion, you may put it into your hand from outside the game for {3} as a sorcery.)')
|
||||||
card.text.rules.text = langFontCode + rulesText;
|
card.text.rules.text = langFontCode + rulesText;
|
||||||
if (cardToImport.flavor_text) {
|
if (cardToImport.flavor_text) {
|
||||||
var flavorText = cardToImport.flavor_text;
|
var flavorText = cardToImport.flavor_text;
|
||||||
|
@@ -28,6 +28,7 @@ const frameNames = new Map ([
|
|||||||
['Colorshifted (Planar Chaos)', 'Colorshifted'],
|
['Colorshifted (Planar Chaos)', 'Colorshifted'],
|
||||||
['Brawl Legend Crowns', 'Brawl'],
|
['Brawl Legend Crowns', 'Brawl'],
|
||||||
//showcase
|
//showcase
|
||||||
|
['Ikoria Crystal (MOM)', 'Crystal'],
|
||||||
['Ravnica Architecture (MOM)', 'Ravnica'],
|
['Ravnica Architecture (MOM)', 'Ravnica'],
|
||||||
['Oil Slick (ONE)', 'OilSlick'],
|
['Oil Slick (ONE)', 'OilSlick'],
|
||||||
['Stained Glass (DMU)', 'DMUStainedGlass'],
|
['Stained Glass (DMU)', 'DMUStainedGlass'],
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
loadFramePacks([
|
loadFramePacks([
|
||||||
{name:'Set Showcase Frames (Chronological)', value:'disabled'},
|
{name:'Set Showcase Frames (Chronological)', value:'disabled'},
|
||||||
|
{name:'Ikoria Crystal (MOM)', value:'Crystal'},
|
||||||
{name:'Ravnica Architecture (MOM)', value:'Ravnica'},
|
{name:'Ravnica Architecture (MOM)', value:'Ravnica'},
|
||||||
{name:'Oil Slick (ONE)', value:'OilSlick'},
|
{name:'Oil Slick (ONE)', value:'OilSlick'},
|
||||||
{name:'Stained Glass (DMU)', value:'DMUStainedGlass'},
|
{name:'Stained Glass (DMU)', value:'DMUStainedGlass'},
|
||||||
|
50
js/frames/packCrystal.js
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
//Create objects for common properties across available frames
|
||||||
|
var masks = [{src:'/img/frames/crystal/pinline.png', name:'Pinline'}, {src:'/img/frames/crystal/title.png', name:'Title'}, {src:'/img/frames/crystal/type.png', name:'Type'}, {src:'/img/frames/crystal/rules.png', name:'Rules'}, {src:'/img/frames/crystal/border.png', name:'Border'}];
|
||||||
|
var bounds = {x:1157/1500, y:1847/2100, width:294/1500, height:170/2100};
|
||||||
|
//defines available frames
|
||||||
|
availableFrames = [
|
||||||
|
{name:'White Frame', src:'/img/frames/crystal/w.png', masks:masks},
|
||||||
|
{name:'Blue Frame', src:'/img/frames/crystal/u.png', masks:masks},
|
||||||
|
{name:'Black Frame', src:'/img/frames/crystal/b.png', masks:masks},
|
||||||
|
{name:'Red Frame', src:'/img/frames/crystal/r.png', masks:masks},
|
||||||
|
{name:'Green Frame', src:'/img/frames/crystal/g.png', masks:masks},
|
||||||
|
{name:'Multicolored Frame', src:'/img/frames/crystal/m.png', masks:masks},
|
||||||
|
{name:'Artifact Frame', src:'/img/frames/crystal/a.png', masks:masks},
|
||||||
|
|
||||||
|
{name:'White Power/Toughness', src:'/img/frames/crystal/pt/w.png', bounds:bounds},
|
||||||
|
{name:'Blue Power/Toughness', src:'/img/frames/crystal/pt/u.png', bounds:bounds},
|
||||||
|
{name:'Black Power/Toughness', src:'/img/frames/crystal/pt/b.png', bounds:bounds},
|
||||||
|
{name:'Red Power/Toughness', src:'/img/frames/crystal/pt/r.png', bounds:bounds},
|
||||||
|
{name:'Green Power/Toughness', src:'/img/frames/crystal/pt/g.png', bounds:bounds},
|
||||||
|
{name:'Multicolored Power/Toughness', src:'/img/frames/crystal/pt/m.png', bounds:bounds},
|
||||||
|
{name:'Artifact Power/Toughness', src:'/img/frames/crystal/pt/a.png', bounds:bounds},
|
||||||
|
{name:'Colorless Power/Toughness', src:'/img/frames/crystal/pt/c.png', bounds:bounds}
|
||||||
|
];
|
||||||
|
//disables/enables the "Load Frame Version" button
|
||||||
|
document.querySelector('#loadFrameVersion').disabled = false;
|
||||||
|
//defines process for loading this version, if applicable
|
||||||
|
document.querySelector('#loadFrameVersion').onclick = async function() {
|
||||||
|
//resets things so that every frame doesn't have to
|
||||||
|
await resetCardIrregularities();
|
||||||
|
//sets card version
|
||||||
|
card.version = 'crystal';
|
||||||
|
//art bounds
|
||||||
|
card.artBounds = {x:0, y:0, width:1, height:0.9224};
|
||||||
|
autoFitArt();
|
||||||
|
//set symbol bounds
|
||||||
|
card.setSymbolBounds = {x:0.9213, y:0.5910, width:0.12, height:0.0410, vertical:'center', horizontal: 'right'};
|
||||||
|
resetSetSymbol();
|
||||||
|
//watermark bounds
|
||||||
|
card.watermarkBounds = {x:0.5, y:0.7762, width:0.75, height:0.2305};
|
||||||
|
resetWatermark();
|
||||||
|
//text
|
||||||
|
loadTextOptions({
|
||||||
|
mana: {name:'Mana Cost', text:'', y:0.0613, width:0.9292, height:71/2100, oneLine:true, size:71/1638, align:'right', shadowX:-0.001, shadowY:0.0029, manaCost:true, manaSpacing:0},
|
||||||
|
title: {name:'Title', text:'', x:0.0854, y:0.0522, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0381, color:'white'},
|
||||||
|
type: {name:'Type', text:'', x:0.0854, y:0.5664, width:0.8292, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, color:'white'},
|
||||||
|
rules: {name:'Rules Text', text:'', x:142/1500, y:1342/2100, width:1207/1500, height:573/2100, size:0.0362, color:'white'},
|
||||||
|
pt: {name:'Power/Toughness', text:'', x:1195/1500, y:1904/2100, width:218/1500, height:89/2100, size:0.0372, font:'belerenbsc', oneLine:true, align:'center', color:'white'}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
//loads available frames
|
||||||
|
loadFramePack();
|