diff --git a/img/frames/custom/dualLands/b.png b/img/frames/custom/dualLands/b.png
new file mode 100644
index 00000000..1a4c8087
Binary files /dev/null and b/img/frames/custom/dualLands/b.png differ
diff --git a/img/frames/custom/dualLands/bThumb.png b/img/frames/custom/dualLands/bThumb.png
new file mode 100644
index 00000000..625eb9fd
Binary files /dev/null and b/img/frames/custom/dualLands/bThumb.png differ
diff --git a/img/frames/custom/dualLands/g.png b/img/frames/custom/dualLands/g.png
new file mode 100644
index 00000000..c9976301
Binary files /dev/null and b/img/frames/custom/dualLands/g.png differ
diff --git a/img/frames/custom/dualLands/gThumb.png b/img/frames/custom/dualLands/gThumb.png
new file mode 100644
index 00000000..d6df72fd
Binary files /dev/null and b/img/frames/custom/dualLands/gThumb.png differ
diff --git a/img/frames/custom/dualLands/l.png b/img/frames/custom/dualLands/l.png
new file mode 100644
index 00000000..eead1bfc
Binary files /dev/null and b/img/frames/custom/dualLands/l.png differ
diff --git a/img/frames/custom/dualLands/lThumb.png b/img/frames/custom/dualLands/lThumb.png
new file mode 100644
index 00000000..01937d5a
Binary files /dev/null and b/img/frames/custom/dualLands/lThumb.png differ
diff --git a/img/frames/custom/dualLands/m.png b/img/frames/custom/dualLands/m.png
new file mode 100644
index 00000000..854fa15a
Binary files /dev/null and b/img/frames/custom/dualLands/m.png differ
diff --git a/img/frames/custom/dualLands/mThumb.png b/img/frames/custom/dualLands/mThumb.png
new file mode 100644
index 00000000..c3f09c92
Binary files /dev/null and b/img/frames/custom/dualLands/mThumb.png differ
diff --git a/img/frames/custom/dualLands/pinline.svg b/img/frames/custom/dualLands/pinline.svg
new file mode 100644
index 00000000..1b5b6e4d
--- /dev/null
+++ b/img/frames/custom/dualLands/pinline.svg
@@ -0,0 +1,5 @@
+
+
+
diff --git a/img/frames/custom/dualLands/pinlineThumb.png b/img/frames/custom/dualLands/pinlineThumb.png
new file mode 100644
index 00000000..b496f6af
Binary files /dev/null and b/img/frames/custom/dualLands/pinlineThumb.png differ
diff --git a/img/frames/custom/dualLands/r.png b/img/frames/custom/dualLands/r.png
new file mode 100644
index 00000000..c242280f
Binary files /dev/null and b/img/frames/custom/dualLands/r.png differ
diff --git a/img/frames/custom/dualLands/rThumb.png b/img/frames/custom/dualLands/rThumb.png
new file mode 100644
index 00000000..028c253e
Binary files /dev/null and b/img/frames/custom/dualLands/rThumb.png differ
diff --git a/img/frames/custom/dualLands/type.svg b/img/frames/custom/dualLands/type.svg
new file mode 100644
index 00000000..16ee3417
--- /dev/null
+++ b/img/frames/custom/dualLands/type.svg
@@ -0,0 +1,5 @@
+
+
+
diff --git a/img/frames/custom/dualLands/typeThumb.png b/img/frames/custom/dualLands/typeThumb.png
new file mode 100644
index 00000000..ec646cd7
Binary files /dev/null and b/img/frames/custom/dualLands/typeThumb.png differ
diff --git a/img/frames/custom/dualLands/u.png b/img/frames/custom/dualLands/u.png
new file mode 100644
index 00000000..cd223cdf
Binary files /dev/null and b/img/frames/custom/dualLands/u.png differ
diff --git a/img/frames/custom/dualLands/uThumb.png b/img/frames/custom/dualLands/uThumb.png
new file mode 100644
index 00000000..d7b06620
Binary files /dev/null and b/img/frames/custom/dualLands/uThumb.png differ
diff --git a/img/frames/custom/dualLands/w.png b/img/frames/custom/dualLands/w.png
new file mode 100644
index 00000000..53643b8d
Binary files /dev/null and b/img/frames/custom/dualLands/w.png differ
diff --git a/img/frames/custom/dualLands/wThumb.png b/img/frames/custom/dualLands/wThumb.png
new file mode 100644
index 00000000..c5520b28
Binary files /dev/null and b/img/frames/custom/dualLands/wThumb.png differ
diff --git a/js/creator-23.js b/js/creator-23.js
index feb684f7..868e0234 100644
--- a/js/creator-23.js
+++ b/js/creator-23.js
@@ -947,7 +947,7 @@ function writeText(textObject, targetContext) {
currentX = savedTextXPosition;
}
} else if (possibleCode.includes('ptshift')) {
- if (card.frames.findIndex(element => element.name.toLowerCase().includes('power/toughness')) >= 0 || card.version.includes('planeswalker') || ['commanderLegends', 'm21', 'mysticalArchive'].includes(card.version)) {
+ if (card.frames.findIndex(element => element.name.toLowerCase().includes('power/toughness')) >= 0 || card.version.includes('planeswalker') || ['commanderLegends', 'm21', 'mysticalArchive', 'customDualLands'].includes(card.version)) {
ptShift[0] = scaleWidth(parseFloat(possibleCode.replace('ptshift', '').split(',')[0]));
ptShift[1] = scaleHeight(parseFloat(possibleCode.split(',')[1]));
}
diff --git a/js/frames/groupCustom.js b/js/frames/groupCustom.js
index 08d6d3cc..b74ef626 100644
--- a/js/frames/groupCustom.js
+++ b/js/frames/groupCustom.js
@@ -6,6 +6,7 @@ loadFramePacks([
{name:'Ixalan - @feuer_ameise', value:'FeuerAmeiseIxalan'},
{name:'Tapped (Horizontal M15)', value:'Tapped'},
{name:'Simple Inventions', value:'SimpleInventions'},
+ {name:'Textless Duals', value:'CustomDualLands'},
{name:'Custom Addons', value:'disabled'},
{name:'Brawl Legend Crowns', value:'Brawl'}
])
\ No newline at end of file
diff --git a/js/frames/packCustomDualLands.js b/js/frames/packCustomDualLands.js
new file mode 100644
index 00000000..e218897b
--- /dev/null
+++ b/js/frames/packCustomDualLands.js
@@ -0,0 +1,52 @@
+//Create objects for common properties across available frames
+var masks = [{src:'/img/frames/custom/dualLands/pinline.svg', name:'Pinline'}, {src:'/img/frames/m15/regular/m15MaskTitle.png', name:'Title'}, {src:'/img/frames/custom/dualLands/type.svg', name:'Type'}];
+var bounds = {x:0.07, y:0.8153, width:0.16, height:0.1143};
+var bounds2 = {x:0.77, y:0.8153, width:0.16, height:0.1143};
+//defines available frames
+availableFrames = [
+ {name:'White Frame', src:'/img/frames/custom/dualLands/w.png', masks:masks},
+ {name:'Blue Frame', src:'/img/frames/custom/dualLands/u.png', masks:masks},
+ {name:'Black Frame', src:'/img/frames/custom/dualLands/b.png', masks:masks},
+ {name:'Red Frame', src:'/img/frames/custom/dualLands/r.png', masks:masks},
+ {name:'Green Frame', src:'/img/frames/custom/dualLands/g.png', masks:masks},
+ {name:'Multicolored Frame', src:'/img/frames/custom/dualLands/m.png', masks:masks},
+ {name:'Colorless Frame', src:'/img/frames/custom/dualLands/l.png', masks:masks},
+ {name:'White Mana Symbol (Left)', src:'/img/frames/textless/zendikar/sw.svg', bounds:bounds},
+ {name:'Blue Mana Symbol (Left)', src:'/img/frames/textless/zendikar/su.svg', bounds:bounds},
+ {name:'Black Mana Symbol (Left)', src:'/img/frames/textless/zendikar/sb.svg', bounds:bounds},
+ {name:'Red Mana Symbol (Left)', src:'/img/frames/textless/zendikar/sr.svg', bounds:bounds},
+ {name:'Green Mana Symbol (Left)', src:'/img/frames/textless/zendikar/sg.svg', bounds:bounds},
+ {name:'Colorless Mana Symbol (Left)', src:'/img/frames/textless/zendikar/sc.svg', bounds:bounds},
+ {name:'White Mana Symbol (Right)', src:'/img/frames/textless/zendikar/sw.svg', bounds:bounds2},
+ {name:'Blue Mana Symbol (Right)', src:'/img/frames/textless/zendikar/su.svg', bounds:bounds2},
+ {name:'Black Mana Symbol (Right)', src:'/img/frames/textless/zendikar/sb.svg', bounds:bounds2},
+ {name:'Red Mana Symbol (Right)', src:'/img/frames/textless/zendikar/sr.svg', bounds:bounds2},
+ {name:'Green Mana Symbol (Right)', src:'/img/frames/textless/zendikar/sg.svg', bounds:bounds2},
+ {name:'Colorless Mana Symbol (Right)', src:'/img/frames/textless/zendikar/sc.svg', bounds:bounds2}
+];
+//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 = 'customDualLands';
+ //art bounds
+ card.artBounds = {x:0, y:0, width:1, height:0.9224};
+ autoFitArt();
+ //set symbol bounds
+ card.setSymbolBounds = {x:0.5, y:0.9524, width:0.12, height:0.0410, vertical:'center', horizontal: 'center'};
+ resetSetSymbol();
+ //watermark bounds
+ card.watermarkBounds = {x:-1, y:-1, width:0.0007, height:0.0005};
+ 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},
+ type: {name:'Type (Left)', text:'', x:0.25, y:0.8481, width:0.5, height:0.0543, oneLine:true, font:'belerenb', size:0.0324, align:'center'},
+ });
+}
+//loads available frames
+loadFramePack();
\ No newline at end of file